@exoscient/control-panel 0.1.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 (77) hide show
  1. package/README.md +14 -0
  2. package/dist/AppControlPanel.d.ts +77 -0
  3. package/dist/AppControlPanel.d.ts.map +1 -0
  4. package/dist/AppControlPanel.js +1625 -0
  5. package/dist/AppControlPanel.js.map +1 -0
  6. package/dist/ControlPanelShell.d.ts +39 -0
  7. package/dist/ControlPanelShell.d.ts.map +1 -0
  8. package/dist/ControlPanelShell.js +152 -0
  9. package/dist/ControlPanelShell.js.map +1 -0
  10. package/dist/ExoLauncherSimulator.d.ts +36 -0
  11. package/dist/ExoLauncherSimulator.d.ts.map +1 -0
  12. package/dist/ExoLauncherSimulator.js +253 -0
  13. package/dist/ExoLauncherSimulator.js.map +1 -0
  14. package/dist/TaskDetail.d.ts +180 -0
  15. package/dist/TaskDetail.d.ts.map +1 -0
  16. package/dist/TaskDetail.js +889 -0
  17. package/dist/TaskDetail.js.map +1 -0
  18. package/dist/TaskListPage.d.ts +28 -0
  19. package/dist/TaskListPage.d.ts.map +1 -0
  20. package/dist/TaskListPage.js +16 -0
  21. package/dist/TaskListPage.js.map +1 -0
  22. package/dist/TaskWorkspace.d.ts +62 -0
  23. package/dist/TaskWorkspace.d.ts.map +1 -0
  24. package/dist/TaskWorkspace.js +592 -0
  25. package/dist/TaskWorkspace.js.map +1 -0
  26. package/dist/ai-plane.d.ts +75 -0
  27. package/dist/ai-plane.d.ts.map +1 -0
  28. package/dist/ai-plane.js +124 -0
  29. package/dist/ai-plane.js.map +1 -0
  30. package/dist/browser-icons.d.ts +25 -0
  31. package/dist/browser-icons.d.ts.map +1 -0
  32. package/dist/browser-icons.js +125 -0
  33. package/dist/browser-icons.js.map +1 -0
  34. package/dist/client-actions.d.ts +45 -0
  35. package/dist/client-actions.d.ts.map +1 -0
  36. package/dist/client-actions.js +48 -0
  37. package/dist/client-actions.js.map +1 -0
  38. package/dist/control-panel-shared.d.ts +58 -0
  39. package/dist/control-panel-shared.d.ts.map +1 -0
  40. package/dist/control-panel-shared.js +79 -0
  41. package/dist/control-panel-shared.js.map +1 -0
  42. package/dist/control-panel.css +4156 -0
  43. package/dist/index.d.ts +30 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +16 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/repository-workflow.d.ts +27 -0
  48. package/dist/repository-workflow.d.ts.map +1 -0
  49. package/dist/repository-workflow.js +24 -0
  50. package/dist/repository-workflow.js.map +1 -0
  51. package/dist/result.d.ts +6 -0
  52. package/dist/result.d.ts.map +1 -0
  53. package/dist/result.js +77 -0
  54. package/dist/result.js.map +1 -0
  55. package/dist/task-consistency.d.ts +28 -0
  56. package/dist/task-consistency.d.ts.map +1 -0
  57. package/dist/task-consistency.js +25 -0
  58. package/dist/task-consistency.js.map +1 -0
  59. package/dist/task-detail.browser.js +2709 -0
  60. package/dist/task-detail.css +1601 -0
  61. package/dist/task-state.d.ts +11 -0
  62. package/dist/task-state.d.ts.map +1 -0
  63. package/dist/task-state.js +103 -0
  64. package/dist/task-state.js.map +1 -0
  65. package/dist/telemetry.d.ts +39 -0
  66. package/dist/telemetry.d.ts.map +1 -0
  67. package/dist/telemetry.js +106 -0
  68. package/dist/telemetry.js.map +1 -0
  69. package/dist/trace.d.ts +80 -0
  70. package/dist/trace.d.ts.map +1 -0
  71. package/dist/trace.js +694 -0
  72. package/dist/trace.js.map +1 -0
  73. package/dist/updates.d.ts +72 -0
  74. package/dist/updates.d.ts.map +1 -0
  75. package/dist/updates.js +269 -0
  76. package/dist/updates.js.map +1 -0
  77. package/package.json +58 -0
@@ -0,0 +1,1601 @@
1
+ /*
2
+ * @exoscient/control-panel — task-detail.css
3
+ * Redesigned 2026 with a compact pro-tool aesthetic.
4
+ *
5
+ * The drawer is non-modal: it floats above the page (no overlay), so the
6
+ * underlying task list stays clickable and clicking a different task swaps
7
+ * the drawer contents in place. Layout is driven by CSS variables so the
8
+ * host application can override tokens at :root level.
9
+ */
10
+
11
+ @layer exoscient-cp-lib-defaults {
12
+ :root {
13
+ --exo-bg: #fafbfc;
14
+ --exo-surface: #ffffff;
15
+ --exo-surface-2: #f4f5f7;
16
+ --exo-surface-3: #eceef1;
17
+ --exo-border: #e6e8ec;
18
+ --exo-border-strong: #d4d7dd;
19
+ --exo-text: #14181f;
20
+ --exo-text-2: #5b626c;
21
+ --exo-text-3: #8b929c;
22
+ --exo-accent: #2f6feb;
23
+ --exo-accent-fg: #ffffff;
24
+ --exo-accent-soft: #eaf0fe;
25
+ --exo-accent-strong: #2356c7;
26
+ --exo-success: #168a4b;
27
+ --exo-success-soft: #e3f5ea;
28
+ --exo-warning: #b86e00;
29
+ --exo-warning-soft: #fdf2dd;
30
+ --exo-danger: #c2261d;
31
+ --exo-danger-soft: #fbe7e5;
32
+ --exo-shadow-md: 0 4px 12px rgba(15, 23, 42, 0.08);
33
+ --exo-shadow-drawer: -12px 0 32px rgba(15, 23, 42, 0.10);
34
+ --exo-radius: 6px;
35
+ --exo-ring: 0 0 0 2px rgba(47, 111, 235, 0.18);
36
+ --exo-z-drawer: 90;
37
+ --exo-z-dock: 85;
38
+ --exo-z-trace: 95;
39
+ --exo-task-detail-reserved-left: 0px;
40
+ --exo-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
41
+ --exo-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
42
+ }
43
+
44
+ /* ---------- Drawer ---------- */
45
+ /* Non-modal: no overlay element is rendered. The drawer floats above the
46
+ page with a left-edge shadow giving the float depth cue. */
47
+ .drawer {
48
+ position: fixed;
49
+ top: 0;
50
+ right: 0;
51
+ height: 100dvh;
52
+ max-height: 100dvh;
53
+ width: min(600px, 100vw);
54
+ background: var(--exo-surface);
55
+ color: var(--exo-text);
56
+ border-left: 1px solid var(--exo-border);
57
+ box-shadow: var(--exo-shadow-drawer);
58
+ transform: translateX(100%);
59
+ transition: transform 200ms cubic-bezier(0.22, 0.61, 0.36, 1);
60
+ display: grid;
61
+ grid-template-rows: auto minmax(0, 1fr);
62
+ z-index: var(--exo-z-drawer);
63
+ font-family: var(--exo-sans);
64
+ font-size: 14px;
65
+ line-height: 1.45;
66
+ }
67
+ .drawer.open { transform: translateX(0); }
68
+ .drawer.maximized {
69
+ left: var(--exo-task-detail-reserved-left);
70
+ width: calc(100vw - var(--exo-task-detail-reserved-left));
71
+ border-left: 0;
72
+ box-shadow: none;
73
+ }
74
+
75
+ /* drawer header */
76
+ .drawer > header {
77
+ padding: 10px 12px 10px 12px;
78
+ border-bottom: 1px solid var(--exo-border);
79
+ display: flex;
80
+ flex-direction: column;
81
+ gap: 6px;
82
+ text-align: left;
83
+ }
84
+ .drawer-heading {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: 8px;
88
+ min-width: 0;
89
+ font-size: 12.5px;
90
+ color: var(--exo-text-3);
91
+ }
92
+ .drawer-status-row {
93
+ display: inline-flex;
94
+ align-items: center;
95
+ flex-wrap: wrap;
96
+ gap: 8px;
97
+ min-width: 0;
98
+ flex: 1;
99
+ }
100
+ .drawer-heading p {
101
+ margin: 0;
102
+ min-width: 0;
103
+ display: inline-flex;
104
+ align-items: center;
105
+ gap: 6px;
106
+ flex: 1;
107
+ }
108
+ .drawer-tools {
109
+ display: inline-flex;
110
+ align-items: center;
111
+ gap: 4px;
112
+ flex: 0 0 auto;
113
+ margin-left: auto;
114
+ }
115
+ .drawer > header h2 {
116
+ margin: 0;
117
+ font-size: 14px;
118
+ font-weight: 600;
119
+ letter-spacing: -0.005em;
120
+ line-height: 1.3;
121
+ color: var(--exo-text);
122
+ max-width: 100%;
123
+ overflow-wrap: anywhere;
124
+ white-space: normal;
125
+ }
126
+
127
+ .task-detail-details {
128
+ display: flex;
129
+ flex-direction: column;
130
+ gap: 8px;
131
+ margin-top: 2px;
132
+ padding: 8px 10px;
133
+ border: 1px solid var(--exo-border);
134
+ border-radius: var(--exo-radius);
135
+ background: var(--exo-surface-2);
136
+ }
137
+
138
+ /* drawer meta strip — small ID/started/turns row inside the details panel */
139
+ .drawer-meta {
140
+ display: flex;
141
+ align-items: center;
142
+ gap: 6px 14px;
143
+ padding: 0;
144
+ background: transparent;
145
+ font-size: 12.5px;
146
+ color: var(--exo-text-3);
147
+ flex-wrap: wrap;
148
+ }
149
+ .drawer-meta .muted { color: var(--exo-text-3); }
150
+ .drawer-meta code {
151
+ color: var(--exo-text);
152
+ font-family: var(--exo-mono);
153
+ font-size: 12px;
154
+ }
155
+
156
+ /* drawer content + body */
157
+ .drawer-content {
158
+ position: relative;
159
+ display: grid;
160
+ grid-template-rows: minmax(0, 1fr) auto;
161
+ min-height: 0;
162
+ overflow: hidden;
163
+ }
164
+ .drawer-body {
165
+ overflow: auto;
166
+ padding: 12px;
167
+ display: flex;
168
+ flex-direction: column;
169
+ gap: 10px;
170
+ }
171
+
172
+ .task-publication-warning {
173
+ display: flex;
174
+ flex-direction: column;
175
+ gap: 3px;
176
+ padding: 9px 10px;
177
+ border: 1px solid color-mix(in srgb, var(--exo-warning) 36%, var(--exo-border));
178
+ border-radius: var(--exo-radius);
179
+ background: var(--exo-warning-soft);
180
+ color: var(--exo-text);
181
+ font-size: 12.5px;
182
+ }
183
+ .task-publication-warning strong {
184
+ color: var(--exo-warning);
185
+ font-size: 12px;
186
+ text-transform: uppercase;
187
+ letter-spacing: 0.04em;
188
+ }
189
+ .task-publication-warning span {
190
+ overflow-wrap: anywhere;
191
+ }
192
+
193
+ /* Drawer dock — shown when minimized */
194
+ .task-detail-dock {
195
+ position: fixed;
196
+ right: 16px;
197
+ bottom: 16px;
198
+ max-width: min(480px, calc(100vw - 32px));
199
+ z-index: var(--exo-z-dock);
200
+ display: inline-flex;
201
+ align-items: center;
202
+ gap: 8px;
203
+ padding: 6px 8px 6px 10px;
204
+ background: var(--exo-surface);
205
+ color: var(--exo-text);
206
+ border: 1px solid var(--exo-border);
207
+ border-radius: var(--exo-radius);
208
+ box-shadow: var(--exo-shadow-md);
209
+ font-family: var(--exo-sans);
210
+ font-size: 13.5px;
211
+ }
212
+ .task-detail-dock-main {
213
+ display: flex;
214
+ flex-direction: column;
215
+ min-width: 0;
216
+ line-height: 1.2;
217
+ }
218
+ .task-detail-dock-main strong {
219
+ font-size: 13.5px;
220
+ font-weight: 500;
221
+ max-width: 300px;
222
+ overflow: hidden;
223
+ text-overflow: ellipsis;
224
+ white-space: nowrap;
225
+ }
226
+ .task-detail-dock-main > span {
227
+ font-size: 12px;
228
+ color: var(--exo-text-3);
229
+ }
230
+ .task-detail-dock-actions {
231
+ display: inline-flex;
232
+ align-items: center;
233
+ gap: 4px;
234
+ }
235
+
236
+ /* ---------- Icon buttons ---------- */
237
+ .icon-button {
238
+ display: inline-flex;
239
+ align-items: center;
240
+ justify-content: center;
241
+ width: 30px;
242
+ height: 30px;
243
+ padding: 0;
244
+ border: 1px solid transparent;
245
+ border-radius: 5px;
246
+ background: transparent;
247
+ color: var(--exo-text-2);
248
+ cursor: pointer;
249
+ transition: background 0.08s ease, color 0.08s ease;
250
+ }
251
+ .icon-button:hover { background: var(--exo-surface-2); color: var(--exo-text); }
252
+ .icon-button:focus-visible { outline: none; box-shadow: var(--exo-ring); }
253
+ .icon-button[disabled] { opacity: 0.45; cursor: not-allowed; }
254
+ .icon-button svg { width: 14px; height: 14px; }
255
+
256
+ /* ---------- Working indicator ---------- */
257
+ .working-indicator {
258
+ display: inline-flex;
259
+ align-items: center;
260
+ gap: 7px;
261
+ color: var(--exo-accent);
262
+ font-weight: 500;
263
+ font-size: 13px;
264
+ }
265
+ .working-dots {
266
+ display: inline-flex;
267
+ gap: 3px;
268
+ align-items: center;
269
+ }
270
+ .working-dots span {
271
+ width: 5px;
272
+ height: 5px;
273
+ border-radius: 50%;
274
+ background: currentColor;
275
+ animation: exo-dot 1s infinite ease-in-out;
276
+ }
277
+ .working-dots span:nth-child(2) { animation-delay: 0.12s; }
278
+ .working-dots span:nth-child(3) { animation-delay: 0.24s; }
279
+ @keyframes exo-dot {
280
+ 0%, 80%, 100% { opacity: 0.35; transform: translateY(0); }
281
+ 40% { opacity: 1; transform: translateY(-3px); }
282
+ }
283
+
284
+ /* ---------- Inline spinner ---------- */
285
+ .inline-spinner {
286
+ display: inline-block;
287
+ width: 13px;
288
+ height: 13px;
289
+ border: 1.5px solid currentColor;
290
+ border-top-color: transparent;
291
+ border-radius: 50%;
292
+ animation: exo-spin 700ms linear infinite;
293
+ vertical-align: -2px;
294
+ }
295
+ @keyframes exo-spin { to { transform: rotate(360deg); } }
296
+
297
+ /* ---------- Loading state ---------- */
298
+ .loading-state {
299
+ display: inline-flex;
300
+ align-items: center;
301
+ gap: 8px;
302
+ padding: 14px;
303
+ color: var(--exo-text-3);
304
+ font-size: 13px;
305
+ }
306
+
307
+ /* ---------- Status pills (status-text) ---------- */
308
+ .status-text {
309
+ display: inline-flex;
310
+ align-items: center;
311
+ gap: 5px;
312
+ height: 20px;
313
+ padding: 0 8px;
314
+ border-radius: 9999px;
315
+ font-size: 11.5px;
316
+ font-weight: 500;
317
+ line-height: 1;
318
+ letter-spacing: 0.01em;
319
+ }
320
+ .status-text.status-success { background: var(--exo-success-soft); color: var(--exo-success); }
321
+ .status-text.status-active { background: var(--exo-accent-soft); color: var(--exo-accent-strong); }
322
+ .status-text.status-danger { background: var(--exo-danger-soft); color: var(--exo-danger); }
323
+ .status-text.status-muted {
324
+ background: var(--exo-surface-2);
325
+ color: var(--exo-text-2);
326
+ border: 1px solid var(--exo-border);
327
+ }
328
+
329
+ /* ---------- Task access summary ---------- */
330
+ .task-access-summary {
331
+ display: inline-flex;
332
+ align-items: center;
333
+ gap: 4px;
334
+ min-height: 24px;
335
+ padding: 2px 5px;
336
+ border: 1px solid var(--exo-border-strong);
337
+ border-radius: 9999px;
338
+ background: var(--exo-surface);
339
+ color: var(--exo-text);
340
+ cursor: pointer;
341
+ font-family: inherit;
342
+ }
343
+ .task-access-summary:hover,
344
+ .task-access-summary[aria-expanded="true"] {
345
+ background: var(--exo-surface-2);
346
+ border-color: var(--exo-accent);
347
+ }
348
+ .task-access-summary-item {
349
+ display: inline-flex;
350
+ align-items: center;
351
+ gap: 3px;
352
+ padding: 2px 4px;
353
+ border-radius: 9999px;
354
+ font-size: 11.5px;
355
+ font-weight: 500;
356
+ line-height: 1;
357
+ }
358
+ .task-access-summary-item.granted { color: var(--exo-success); }
359
+ .task-access-summary-item.released { color: var(--exo-text-3); }
360
+ .task-access-summary-item.waiting { color: var(--exo-warning); }
361
+ .task-access-summary-item.denied { color: var(--exo-danger); }
362
+ .task-access-summary-icon {
363
+ width: 13px;
364
+ height: 13px;
365
+ stroke-width: 2.4;
366
+ }
367
+ .task-details-summary-label {
368
+ padding: 2px 5px;
369
+ font-size: 11.5px;
370
+ font-weight: 500;
371
+ line-height: 1;
372
+ color: var(--exo-text-2);
373
+ }
374
+ .task-access-chips {
375
+ display: flex;
376
+ align-items: center;
377
+ flex-wrap: wrap;
378
+ gap: 6px;
379
+ margin-top: 0;
380
+ }
381
+ .task-access-chip {
382
+ display: inline-flex;
383
+ align-items: center;
384
+ gap: 6px;
385
+ max-width: 100%;
386
+ min-height: 24px;
387
+ padding: 3px 8px;
388
+ border: 1px solid var(--exo-border);
389
+ border-radius: 9999px;
390
+ background: var(--exo-surface-2);
391
+ color: var(--exo-text);
392
+ font-size: 12px;
393
+ line-height: 1.2;
394
+ }
395
+ .task-access-chip.granted {
396
+ border-color: color-mix(in srgb, var(--exo-success) 32%, var(--exo-border));
397
+ color: var(--exo-success);
398
+ }
399
+ .task-access-chip.released { color: var(--exo-text-3); }
400
+ .task-access-chip.waiting {
401
+ border-color: color-mix(in srgb, var(--exo-warning) 36%, var(--exo-border));
402
+ color: var(--exo-warning);
403
+ }
404
+ .task-access-chip.denied {
405
+ border-color: color-mix(in srgb, var(--exo-danger) 36%, var(--exo-border));
406
+ color: var(--exo-danger);
407
+ }
408
+ .task-access-chip.muted {
409
+ color: var(--exo-text-3);
410
+ font-family: var(--exo-sans);
411
+ }
412
+ .task-access-icon {
413
+ width: 13px;
414
+ height: 13px;
415
+ flex: 0 0 auto;
416
+ stroke-width: 2.4;
417
+ }
418
+ .task-access-text {
419
+ min-width: 0;
420
+ overflow: hidden;
421
+ text-overflow: ellipsis;
422
+ white-space: nowrap;
423
+ }
424
+ .task-access-text strong {
425
+ font-family: var(--exo-mono);
426
+ font-size: 11.5px;
427
+ font-weight: 500;
428
+ }
429
+
430
+ /* ---------- Turn structure ---------- */
431
+ .turn {
432
+ display: flex;
433
+ flex-direction: column;
434
+ gap: 0;
435
+ border: 1px solid var(--exo-border);
436
+ border-radius: 8px;
437
+ background: var(--exo-surface);
438
+ overflow: visible;
439
+ }
440
+ .turn-panel {
441
+ border: 0;
442
+ border-radius: 0;
443
+ background: transparent;
444
+ overflow: visible;
445
+ }
446
+ .request-panel {
447
+ align-self: stretch;
448
+ width: 100%;
449
+ border: 0;
450
+ border-radius: 7px 7px 0 0;
451
+ background: var(--exo-accent-soft);
452
+ }
453
+ .output-panel {
454
+ align-self: stretch;
455
+ width: 100%;
456
+ border-top: 1px solid color-mix(in srgb, var(--exo-accent) 14%, var(--exo-border));
457
+ border-radius: 0 0 7px 7px;
458
+ background: var(--exo-surface);
459
+ }
460
+ .turn-title {
461
+ display: flex;
462
+ align-items: center;
463
+ gap: 8px;
464
+ padding: 7px 10px;
465
+ background: var(--exo-surface-2);
466
+ border-bottom: 1px solid var(--exo-border);
467
+ font-size: 12.5px;
468
+ color: var(--exo-text-2);
469
+ }
470
+ .turn-title h3 {
471
+ margin: 0;
472
+ font-size: 12.5px;
473
+ font-weight: 500;
474
+ color: var(--exo-text-2);
475
+ }
476
+ .turn-title time {
477
+ margin-left: auto;
478
+ font-size: 12px;
479
+ color: var(--exo-text-3);
480
+ font-variant-numeric: tabular-nums;
481
+ }
482
+ .request-panel .turn-title {
483
+ background: color-mix(in srgb, var(--exo-accent-soft) 72%, var(--exo-surface));
484
+ border-bottom-color: color-mix(in srgb, var(--exo-accent) 18%, var(--exo-border));
485
+ }
486
+ .request-panel .turn-title h3,
487
+ .request-panel .turn-title time {
488
+ color: var(--exo-accent-strong);
489
+ }
490
+
491
+ .request-panel > p {
492
+ margin: 0;
493
+ padding: 10px 12px;
494
+ font-size: 13.5px;
495
+ line-height: 1.55;
496
+ color: var(--exo-text);
497
+ white-space: pre-wrap;
498
+ word-break: break-word;
499
+ }
500
+ .output-panel .result {
501
+ margin: 0;
502
+ padding: 10px 12px;
503
+ font-size: 13.5px;
504
+ line-height: 1.55;
505
+ color: var(--exo-text);
506
+ }
507
+
508
+ .working-result-body {
509
+ display: flex;
510
+ align-items: center;
511
+ padding: 10px 12px;
512
+ min-height: 1.45em;
513
+ }
514
+
515
+ .formatted-text p { margin: 0 0 8px; }
516
+ .formatted-text p:last-child { margin: 0; }
517
+ .formatted-text h4,
518
+ .formatted-text h5,
519
+ .formatted-text h6 {
520
+ margin: 10px 0 6px;
521
+ color: var(--exo-text);
522
+ font-weight: 650;
523
+ line-height: 1.25;
524
+ }
525
+ .formatted-text h4 { font-size: 14px; }
526
+ .formatted-text h5 { font-size: 13.5px; }
527
+ .formatted-text h6 { font-size: 13px; }
528
+ .formatted-text ul,
529
+ .formatted-text ol {
530
+ margin: 6px 0 10px;
531
+ padding-left: 22px;
532
+ }
533
+ .formatted-text li {
534
+ margin: 4px 0;
535
+ line-height: 1.45;
536
+ overflow-wrap: anywhere;
537
+ }
538
+ .formatted-text :not(pre) > code {
539
+ padding: 1px 5px;
540
+ border-radius: 5px;
541
+ background: var(--exo-surface-2);
542
+ border: 1px solid var(--exo-border);
543
+ color: var(--exo-accent-strong);
544
+ font-family: var(--exo-mono);
545
+ font-size: 0.86em;
546
+ }
547
+ .formatted-text a {
548
+ color: var(--exo-accent-strong);
549
+ font-weight: 600;
550
+ text-decoration-thickness: 1px;
551
+ text-underline-offset: 2px;
552
+ }
553
+ .formatted-text > :first-child { margin-top: 0; }
554
+ .formatted-text > :last-child { margin-bottom: 0; }
555
+ .code-block {
556
+ margin: 6px 0;
557
+ padding: 8px 10px;
558
+ background: var(--exo-surface-2);
559
+ border: 1px solid var(--exo-border);
560
+ border-radius: 4px;
561
+ font-family: var(--exo-mono);
562
+ font-size: 12px;
563
+ line-height: 1.45;
564
+ white-space: pre-wrap;
565
+ word-break: break-word;
566
+ color: var(--exo-text);
567
+ }
568
+
569
+ /* technical summary collapsible */
570
+ .technical-summary {
571
+ margin: 6px 0 4px;
572
+ border: 1px dashed var(--exo-border-strong);
573
+ border-radius: 5px;
574
+ background: var(--exo-surface-2);
575
+ }
576
+ .output-panel .result > .technical-summary {
577
+ margin: 8px -12px -10px;
578
+ border-radius: 5px 5px 0 0;
579
+ }
580
+ .technical-summary > summary {
581
+ list-style: none;
582
+ cursor: pointer;
583
+ padding: 7px 10px;
584
+ font-size: 12px;
585
+ font-weight: 500;
586
+ text-transform: uppercase;
587
+ letter-spacing: 0.06em;
588
+ color: var(--exo-text-3);
589
+ display: flex;
590
+ align-items: center;
591
+ gap: 8px;
592
+ user-select: none;
593
+ }
594
+ .technical-summary > summary::-webkit-details-marker { display: none; }
595
+ .technical-summary > summary::before {
596
+ content: '';
597
+ width: 0;
598
+ height: 0;
599
+ border-left: 4px solid currentColor;
600
+ border-top: 3px solid transparent;
601
+ border-bottom: 3px solid transparent;
602
+ transform: translateX(1px);
603
+ transition: transform 0.12s ease;
604
+ flex: 0 0 auto;
605
+ }
606
+ .technical-summary-title {
607
+ flex: 1;
608
+ min-width: 0;
609
+ }
610
+ .technical-summary > summary .trace-open-button {
611
+ display: none;
612
+ }
613
+ .technical-summary[open] > summary .trace-open-button {
614
+ display: inline-flex;
615
+ }
616
+ .technical-summary[open] > summary::before { transform: rotate(90deg) translateY(1px); }
617
+ .technical-summary-body {
618
+ padding: 0 12px 10px;
619
+ font-size: 13px;
620
+ color: var(--exo-text-2);
621
+ line-height: 1.55;
622
+ }
623
+
624
+ .client-action-panel {
625
+ display: grid;
626
+ gap: 8px;
627
+ margin: 10px -4px 0;
628
+ padding: 10px;
629
+ border: 1px solid var(--exo-border);
630
+ border-radius: 6px;
631
+ background: var(--exo-surface-2);
632
+ }
633
+ .client-action-heading strong {
634
+ display: block;
635
+ color: var(--exo-text);
636
+ font-size: 13px;
637
+ line-height: 1.35;
638
+ }
639
+ .client-action-options {
640
+ display: grid;
641
+ gap: 6px;
642
+ }
643
+ .client-action-option {
644
+ display: grid;
645
+ grid-template-columns: 18px minmax(0, 1fr);
646
+ gap: 8px;
647
+ align-items: start;
648
+ padding: 7px 8px;
649
+ border: 1px solid var(--exo-border);
650
+ border-radius: 5px;
651
+ background: var(--exo-surface);
652
+ cursor: pointer;
653
+ }
654
+ .client-action-option input {
655
+ width: 14px;
656
+ height: 14px;
657
+ margin: 2px 0 0;
658
+ }
659
+ .client-action-option span {
660
+ display: grid;
661
+ gap: 2px;
662
+ min-width: 0;
663
+ }
664
+ .client-action-option strong {
665
+ color: var(--exo-text);
666
+ font-size: 13px;
667
+ line-height: 1.3;
668
+ overflow-wrap: anywhere;
669
+ }
670
+ .client-action-option small {
671
+ color: var(--exo-text-2);
672
+ font-size: 12px;
673
+ line-height: 1.35;
674
+ overflow-wrap: anywhere;
675
+ }
676
+ .client-action-other {
677
+ display: grid;
678
+ gap: 5px;
679
+ color: var(--exo-text-2);
680
+ font-size: 12px;
681
+ font-weight: 600;
682
+ }
683
+ .client-action-other textarea {
684
+ width: 100%;
685
+ min-height: 54px;
686
+ resize: vertical;
687
+ border: 1px solid var(--exo-border);
688
+ border-radius: 5px;
689
+ padding: 7px 8px;
690
+ color: var(--exo-text);
691
+ background: var(--exo-surface);
692
+ font: inherit;
693
+ font-weight: 400;
694
+ }
695
+ .client-action-footer {
696
+ display: flex;
697
+ align-items: center;
698
+ justify-content: flex-end;
699
+ gap: 8px;
700
+ min-height: 30px;
701
+ }
702
+ .client-action-footer .command-status {
703
+ margin-right: auto;
704
+ }
705
+
706
+ /* output panel actions */
707
+ .output-panel-actions {
708
+ display: flex;
709
+ align-items: center;
710
+ gap: 6px;
711
+ padding: 4px 10px 10px;
712
+ }
713
+ .trace-open-button {
714
+ display: inline-flex;
715
+ align-items: center;
716
+ justify-content: center;
717
+ gap: 6px;
718
+ min-height: 26px;
719
+ padding: 0 9px;
720
+ border: 1px solid var(--exo-border);
721
+ border-radius: 9999px;
722
+ background: var(--exo-surface);
723
+ color: var(--exo-text-2);
724
+ cursor: pointer;
725
+ font-family: inherit;
726
+ font-size: 12px;
727
+ font-weight: 500;
728
+ line-height: 1;
729
+ }
730
+ .trace-open-button:hover {
731
+ background: var(--exo-accent-soft);
732
+ border-color: var(--exo-accent);
733
+ color: var(--exo-accent-strong);
734
+ }
735
+ .trace-open-button:disabled {
736
+ cursor: wait;
737
+ opacity: 0.82;
738
+ }
739
+ .trace-open-button svg {
740
+ width: 13px;
741
+ height: 13px;
742
+ }
743
+
744
+ /* ---------- Drawer form (compose + interrupt) ---------- */
745
+ .drawer-form {
746
+ border-top: 1px solid var(--exo-border);
747
+ padding: 10px 12px;
748
+ display: flex;
749
+ flex-direction: column;
750
+ gap: 8px;
751
+ background: var(--exo-surface);
752
+ }
753
+ .drawer-form textarea {
754
+ width: 100%;
755
+ min-height: 72px;
756
+ padding: 8px 10px;
757
+ border: 1px solid var(--exo-border-strong);
758
+ border-radius: 5px;
759
+ background: var(--exo-surface);
760
+ color: var(--exo-text);
761
+ font-family: var(--exo-sans);
762
+ font-size: 13.5px;
763
+ line-height: 1.45;
764
+ resize: vertical;
765
+ box-sizing: border-box;
766
+ }
767
+ .drawer-form textarea:focus {
768
+ outline: none;
769
+ border-color: var(--exo-accent);
770
+ box-shadow: var(--exo-ring);
771
+ }
772
+ .drawer-form textarea:disabled {
773
+ background: var(--exo-surface-2);
774
+ color: var(--exo-text-3);
775
+ }
776
+ .drawer-form-toolbar {
777
+ display: flex;
778
+ align-items: center;
779
+ gap: 6px;
780
+ }
781
+ .drawer-form-buttons {
782
+ display: inline-flex;
783
+ align-items: center;
784
+ gap: 6px;
785
+ margin-left: auto;
786
+ }
787
+
788
+ .interrupt-panel {
789
+ display: flex;
790
+ flex-direction: column;
791
+ gap: 8px;
792
+ }
793
+
794
+ /* Primary / danger / icon-action buttons inside the drawer */
795
+ .drawer-form .primary,
796
+ .drawer-form .danger {
797
+ display: inline-flex;
798
+ align-items: center;
799
+ justify-content: center;
800
+ gap: 6px;
801
+ height: 30px;
802
+ padding: 0 11px;
803
+ border: 1px solid transparent;
804
+ border-radius: 5px;
805
+ font-size: 13px;
806
+ font-weight: 500;
807
+ line-height: 1;
808
+ cursor: pointer;
809
+ transition: background 0.08s ease, border-color 0.08s ease;
810
+ font-family: inherit;
811
+ }
812
+ .drawer-form .primary {
813
+ background: var(--exo-accent);
814
+ color: var(--exo-accent-fg);
815
+ border-color: var(--exo-accent);
816
+ }
817
+ .drawer-form .primary:hover { background: var(--exo-accent-strong); border-color: var(--exo-accent-strong); }
818
+ .drawer-form .primary[disabled],
819
+ .drawer-form .primary:disabled { opacity: 0.45; cursor: not-allowed; }
820
+ .drawer-form .danger {
821
+ background: var(--exo-surface);
822
+ color: var(--exo-danger);
823
+ border-color: var(--exo-border-strong);
824
+ }
825
+ .drawer-form .danger:hover { background: var(--exo-danger-soft); border-color: var(--exo-danger); }
826
+ .drawer-form .danger[disabled],
827
+ .drawer-form .danger:disabled { opacity: 0.45; cursor: not-allowed; }
828
+ .icon-action-button {
829
+ width: 30px;
830
+ padding: 0;
831
+ justify-content: center;
832
+ }
833
+ .icon-action-button svg { width: 14px; height: 14px; }
834
+
835
+ .command-status {
836
+ font-size: 12px;
837
+ color: var(--exo-text-3);
838
+ display: inline-flex;
839
+ align-items: center;
840
+ gap: 5px;
841
+ }
842
+ .command-status.error { color: var(--exo-danger); }
843
+
844
+ /* ---------- Attachment picker ---------- */
845
+ .attachment-picker {
846
+ display: flex;
847
+ align-items: center;
848
+ gap: 6px;
849
+ flex-wrap: wrap;
850
+ }
851
+ .attachment-picker input[type="file"] { display: none; }
852
+ .attachment-button {
853
+ display: inline-flex;
854
+ align-items: center;
855
+ justify-content: center;
856
+ gap: 6px;
857
+ height: 30px;
858
+ padding: 0 11px;
859
+ border: 1px solid var(--exo-border-strong);
860
+ border-radius: 5px;
861
+ background: var(--exo-surface);
862
+ color: var(--exo-text-2);
863
+ cursor: pointer;
864
+ font-size: 13px;
865
+ font-family: inherit;
866
+ }
867
+ .attachment-picker.compact .attachment-button {
868
+ width: 30px;
869
+ padding: 0;
870
+ justify-content: center;
871
+ }
872
+ .attachment-button:hover { background: var(--exo-surface-2); }
873
+ .attachment-button svg { width: 14px; height: 14px; }
874
+ .attachment-button[disabled] { opacity: 0.45; cursor: not-allowed; }
875
+
876
+ .attachment-status {
877
+ display: inline-flex;
878
+ align-items: center;
879
+ gap: 6px;
880
+ font-size: 12px;
881
+ color: var(--exo-text-3);
882
+ }
883
+ .attachment-list {
884
+ display: inline-flex;
885
+ align-items: center;
886
+ gap: 4px;
887
+ flex-wrap: wrap;
888
+ }
889
+ .attachment-chip {
890
+ display: inline-flex;
891
+ align-items: center;
892
+ gap: 5px;
893
+ height: 22px;
894
+ padding: 0 4px 0 8px;
895
+ border: 1px solid var(--exo-border-strong);
896
+ border-radius: 4px;
897
+ background: var(--exo-surface);
898
+ color: var(--exo-text-2);
899
+ font-size: 12px;
900
+ }
901
+ .attachment-chip small {
902
+ color: var(--exo-text-3);
903
+ font-variant-numeric: tabular-nums;
904
+ font-size: 11.5px;
905
+ }
906
+ .attachment-chip button {
907
+ width: 18px;
908
+ height: 18px;
909
+ display: inline-flex;
910
+ align-items: center;
911
+ justify-content: center;
912
+ background: transparent;
913
+ border: 0;
914
+ color: var(--exo-text-3);
915
+ cursor: pointer;
916
+ border-radius: 3px;
917
+ }
918
+ .attachment-chip button:hover {
919
+ background: var(--exo-surface-2);
920
+ color: var(--exo-text);
921
+ }
922
+ .attachment-chip button svg { width: 12px; height: 12px; }
923
+
924
+ /* ---------- Trace overlay (covers drawer body area when expanded) ---------- */
925
+ .task-trace-overlay {
926
+ position: absolute;
927
+ inset: 0;
928
+ z-index: var(--exo-z-trace);
929
+ background: var(--exo-surface);
930
+ display: flex;
931
+ animation: exo-trace-enter 120ms ease-out;
932
+ }
933
+ @keyframes exo-trace-enter {
934
+ from {
935
+ opacity: 0;
936
+ transform: translateY(4px);
937
+ }
938
+ to {
939
+ opacity: 1;
940
+ transform: translateY(0);
941
+ }
942
+ }
943
+ .trace-shell {
944
+ display: flex;
945
+ flex-direction: column;
946
+ flex: 1;
947
+ min-height: 0;
948
+ }
949
+ .trace-toolbar {
950
+ display: flex;
951
+ align-items: center;
952
+ gap: 10px;
953
+ padding: 8px 12px;
954
+ border-bottom: 1px solid var(--exo-border);
955
+ background: var(--exo-surface-2);
956
+ }
957
+ .trace-toolbar-summary {
958
+ display: flex;
959
+ align-items: center;
960
+ gap: 12px;
961
+ font-size: 12.5px;
962
+ color: var(--exo-text-2);
963
+ flex-wrap: wrap;
964
+ }
965
+ .trace-toolbar-actions {
966
+ margin-left: auto;
967
+ display: inline-flex;
968
+ align-items: center;
969
+ gap: 6px;
970
+ }
971
+ .trace-toggle-button {
972
+ height: 24px;
973
+ padding: 0 10px;
974
+ background: transparent;
975
+ border: 1px solid var(--exo-border-strong);
976
+ border-radius: 9999px;
977
+ color: var(--exo-text-2);
978
+ font-size: 12px;
979
+ cursor: pointer;
980
+ font-family: inherit;
981
+ }
982
+ .trace-toggle-button:hover { background: var(--exo-surface); }
983
+ .trace-toggle-button.active {
984
+ color: var(--exo-accent-strong);
985
+ background: var(--exo-accent-soft);
986
+ border-color: transparent;
987
+ }
988
+ .trace-collapse-button {
989
+ display: inline-flex;
990
+ align-items: center;
991
+ justify-content: center;
992
+ width: 26px;
993
+ height: 26px;
994
+ padding: 0;
995
+ border: 0;
996
+ background: transparent;
997
+ color: var(--exo-text-2);
998
+ border-radius: 4px;
999
+ cursor: pointer;
1000
+ }
1001
+ .trace-collapse-button:hover { background: var(--exo-surface); color: var(--exo-text); }
1002
+ .trace-collapse-button svg { width: 14px; height: 14px; }
1003
+
1004
+ /* Context pressure */
1005
+ .context-pressure {
1006
+ display: inline-flex;
1007
+ align-items: center;
1008
+ gap: 6px;
1009
+ font-size: 12px;
1010
+ color: var(--exo-text-2);
1011
+ }
1012
+ .context-pressure-meter {
1013
+ width: 100px;
1014
+ height: 4px;
1015
+ border-radius: 9999px;
1016
+ background: var(--exo-surface-3);
1017
+ overflow: hidden;
1018
+ }
1019
+ .context-pressure-fill {
1020
+ height: 100%;
1021
+ background: var(--exo-accent);
1022
+ border-radius: inherit;
1023
+ }
1024
+ .context-pressure-low .context-pressure-fill { background: var(--exo-success); }
1025
+ .context-pressure-medium .context-pressure-fill { background: var(--exo-accent); }
1026
+ .context-pressure-high .context-pressure-fill { background: var(--exo-warning); }
1027
+ .context-pressure-critical .context-pressure-fill { background: var(--exo-danger); }
1028
+
1029
+ /* trace filters */
1030
+ .trace-filter-bar {
1031
+ display: flex;
1032
+ gap: 4px;
1033
+ padding: 7px 10px;
1034
+ border-bottom: 1px solid var(--exo-border);
1035
+ flex-wrap: wrap;
1036
+ }
1037
+ .trace-filter-button {
1038
+ height: 22px;
1039
+ padding: 0 9px;
1040
+ background: transparent;
1041
+ color: var(--exo-text-3);
1042
+ border: 1px solid var(--exo-border);
1043
+ border-radius: 9999px;
1044
+ font-size: 11.5px;
1045
+ text-transform: uppercase;
1046
+ letter-spacing: 0.04em;
1047
+ cursor: pointer;
1048
+ font-family: inherit;
1049
+ }
1050
+ .trace-filter-button:hover {
1051
+ color: var(--exo-text-2);
1052
+ border-color: var(--exo-border-strong);
1053
+ }
1054
+ .trace-filter-button.active {
1055
+ color: var(--exo-accent-strong);
1056
+ background: var(--exo-accent-soft);
1057
+ border-color: transparent;
1058
+ }
1059
+
1060
+ /* trace events */
1061
+ .trace-list {
1062
+ flex: 1;
1063
+ overflow: auto;
1064
+ padding: 0;
1065
+ font-size: 13px;
1066
+ }
1067
+ .trace-list > .muted {
1068
+ padding: 16px;
1069
+ color: var(--exo-text-3);
1070
+ }
1071
+ .trace-event {
1072
+ display: flex;
1073
+ flex-direction: column;
1074
+ gap: 4px;
1075
+ padding: 8px 12px;
1076
+ border-bottom: 1px solid var(--exo-border);
1077
+ }
1078
+ .trace-event:last-child { border-bottom: 0; }
1079
+ .trace-event:hover { background: var(--exo-surface-2); }
1080
+ .trace-event-header {
1081
+ display: flex;
1082
+ align-items: baseline;
1083
+ gap: 10px;
1084
+ font-size: 11.5px;
1085
+ }
1086
+ .trace-event-header span {
1087
+ font-family: var(--exo-mono);
1088
+ color: var(--exo-text-3);
1089
+ }
1090
+ .trace-event-header strong {
1091
+ font-weight: 500;
1092
+ text-transform: uppercase;
1093
+ letter-spacing: 0.04em;
1094
+ color: var(--exo-text-2);
1095
+ }
1096
+ .trace-event.assistant .trace-event-header strong { color: var(--exo-text); }
1097
+ .trace-event.tool .trace-event-header strong { color: var(--exo-accent); }
1098
+ .trace-event.file .trace-event-header strong { color: var(--exo-success); }
1099
+ .trace-event.command .trace-event-header strong { color: var(--exo-text-2); }
1100
+ .trace-event.error .trace-event-header strong { color: var(--exo-danger); }
1101
+ .trace-event.tokens .trace-event-header strong { color: var(--exo-warning); }
1102
+ .trace-event .formatted-text { font-size: 13px; color: var(--exo-text); }
1103
+ .trace-event .formatted-text p { margin: 0 0 4px; }
1104
+
1105
+ .trace-body {
1106
+ display: flex;
1107
+ flex-direction: column;
1108
+ gap: 4px;
1109
+ }
1110
+ .trace-event pre,
1111
+ .trace-command {
1112
+ margin: 0;
1113
+ padding: 7px 9px;
1114
+ background: var(--exo-surface-2);
1115
+ border: 1px solid var(--exo-border);
1116
+ border-radius: 4px;
1117
+ font-family: var(--exo-mono);
1118
+ font-size: 12px;
1119
+ line-height: 1.45;
1120
+ white-space: pre-wrap;
1121
+ word-break: break-word;
1122
+ color: var(--exo-text);
1123
+ }
1124
+ .trace-meta {
1125
+ margin: 0;
1126
+ font-size: 11.5px;
1127
+ color: var(--exo-text-3);
1128
+ text-transform: uppercase;
1129
+ letter-spacing: 0.04em;
1130
+ }
1131
+
1132
+ /* raw details */
1133
+ .raw-details {
1134
+ border: 1px dashed var(--exo-border);
1135
+ border-radius: 4px;
1136
+ background: var(--exo-surface-2);
1137
+ }
1138
+ .raw-details > summary {
1139
+ cursor: pointer;
1140
+ padding: 5px 8px;
1141
+ font-size: 11.5px;
1142
+ color: var(--exo-text-3);
1143
+ text-transform: uppercase;
1144
+ letter-spacing: 0.04em;
1145
+ list-style: none;
1146
+ }
1147
+ .raw-details > summary::-webkit-details-marker { display: none; }
1148
+ .raw-details > pre,
1149
+ .raw-details > .json-tree {
1150
+ margin: 0;
1151
+ padding: 6px 8px 8px;
1152
+ }
1153
+
1154
+ /* JSON tree */
1155
+ .json-tree {
1156
+ margin: 0;
1157
+ padding: 0 0 0 16px;
1158
+ font-family: var(--exo-mono);
1159
+ font-size: 12px;
1160
+ line-height: 1.5;
1161
+ list-style: none;
1162
+ }
1163
+ .json-tree li {
1164
+ list-style: none;
1165
+ display: flex;
1166
+ flex-direction: column;
1167
+ gap: 2px;
1168
+ }
1169
+ .json-key { color: var(--exo-text-3); }
1170
+ .json-value {
1171
+ color: var(--exo-text);
1172
+ white-space: pre-wrap;
1173
+ word-break: break-word;
1174
+ }
1175
+ .json-value.string { color: var(--exo-success); }
1176
+ .json-value.number,
1177
+ .json-value.boolean { color: var(--exo-accent-strong); }
1178
+ .json-value.null { color: var(--exo-text-3); font-style: italic; }
1179
+
1180
+ /* ---------- Misc ---------- */
1181
+ .muted { color: var(--exo-text-3); }
1182
+
1183
+ /* narrow viewport: drawer becomes full-bleed */
1184
+ @media (max-width: 720px) {
1185
+ .drawer { width: 100vw; border-left: 0; }
1186
+ .task-detail-dock {
1187
+ left: 12px;
1188
+ right: 12px;
1189
+ }
1190
+ }
1191
+ }
1192
+
1193
+ /* Unlayered essentials keep host-app button/details rules from flattening Task Detail controls. */
1194
+ .drawer .task-access-summary {
1195
+ display: inline-flex;
1196
+ align-items: center;
1197
+ gap: 4px;
1198
+ min-height: 24px;
1199
+ padding: 2px 5px;
1200
+ border: 1px solid var(--exo-border-strong);
1201
+ border-radius: 9999px;
1202
+ background: var(--exo-surface);
1203
+ color: var(--exo-text);
1204
+ cursor: pointer;
1205
+ font: inherit;
1206
+ }
1207
+ .drawer .task-access-summary:hover,
1208
+ .drawer .task-access-summary[aria-expanded="true"] {
1209
+ background: var(--exo-surface-2);
1210
+ border-color: var(--exo-accent);
1211
+ }
1212
+ .drawer .task-access-summary-item {
1213
+ display: inline-flex;
1214
+ align-items: center;
1215
+ gap: 3px;
1216
+ padding: 2px 4px;
1217
+ border-radius: 9999px;
1218
+ font-size: 11.5px;
1219
+ font-weight: 500;
1220
+ line-height: 1;
1221
+ }
1222
+ .drawer .task-access-summary-item.granted { color: var(--exo-success); }
1223
+ .drawer .task-access-summary-item.released { color: var(--exo-text-3); }
1224
+ .drawer .task-access-summary-item.waiting { color: var(--exo-warning); }
1225
+ .drawer .task-access-summary-item.denied { color: var(--exo-danger); }
1226
+ .drawer .task-access-summary-icon {
1227
+ width: 13px;
1228
+ height: 13px;
1229
+ stroke-width: 2.4;
1230
+ }
1231
+ .drawer .task-details-summary-label {
1232
+ padding: 2px 5px;
1233
+ font-size: 11.5px;
1234
+ font-weight: 500;
1235
+ line-height: 1;
1236
+ color: var(--exo-text-2);
1237
+ }
1238
+ .drawer .task-detail-details {
1239
+ display: flex;
1240
+ flex-direction: column;
1241
+ gap: 8px;
1242
+ margin-top: 2px;
1243
+ padding: 8px 10px;
1244
+ border: 1px solid var(--exo-border);
1245
+ border-radius: var(--exo-radius);
1246
+ background: var(--exo-surface-2);
1247
+ }
1248
+ .drawer .task-sharing-panel {
1249
+ display: grid;
1250
+ gap: 8px;
1251
+ margin-top: 8px;
1252
+ padding: 8px 10px;
1253
+ border: 1px solid var(--exo-border);
1254
+ border-radius: var(--exo-radius);
1255
+ background: var(--exo-surface-2);
1256
+ }
1257
+ .drawer .task-sharing-form {
1258
+ display: grid;
1259
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
1260
+ gap: 6px;
1261
+ align-items: center;
1262
+ }
1263
+ .drawer .task-sharing-form svg,
1264
+ .drawer .task-share-row svg {
1265
+ width: 15px;
1266
+ height: 15px;
1267
+ }
1268
+ .drawer .task-sharing-form input,
1269
+ .drawer .task-sharing-form select {
1270
+ min-width: 0;
1271
+ padding: 6px 8px;
1272
+ border: 1px solid var(--exo-border);
1273
+ border-radius: var(--exo-radius-sm);
1274
+ background: var(--exo-surface);
1275
+ color: var(--exo-text);
1276
+ font: inherit;
1277
+ }
1278
+ .drawer .task-sharing-form button,
1279
+ .drawer .task-share-row button {
1280
+ display: inline-flex;
1281
+ align-items: center;
1282
+ justify-content: center;
1283
+ min-height: 31px;
1284
+ padding: 5px 9px;
1285
+ border: 1px solid var(--exo-border);
1286
+ border-radius: var(--exo-radius-sm);
1287
+ background: var(--exo-surface);
1288
+ color: var(--exo-text);
1289
+ font: inherit;
1290
+ }
1291
+ .drawer .task-sharing-error {
1292
+ color: var(--exo-danger);
1293
+ font-size: 12.5px;
1294
+ }
1295
+ .drawer .task-share-list {
1296
+ display: grid;
1297
+ gap: 5px;
1298
+ }
1299
+ .drawer .task-share-row {
1300
+ display: grid;
1301
+ grid-template-columns: minmax(0, 1fr) auto auto;
1302
+ gap: 8px;
1303
+ align-items: center;
1304
+ color: var(--exo-text-2);
1305
+ font-size: 12.5px;
1306
+ }
1307
+ .drawer .task-share-row span {
1308
+ overflow-wrap: anywhere;
1309
+ }
1310
+ .drawer .task-share-row strong {
1311
+ color: var(--exo-text-3);
1312
+ font-size: 12px;
1313
+ }
1314
+ @media (max-width: 640px) {
1315
+ .drawer .task-sharing-form {
1316
+ grid-template-columns: auto minmax(0, 1fr);
1317
+ }
1318
+ .drawer .task-sharing-form select,
1319
+ .drawer .task-sharing-form button {
1320
+ grid-column: 2;
1321
+ }
1322
+ }
1323
+ .drawer .drawer-meta {
1324
+ display: flex;
1325
+ align-items: center;
1326
+ flex-wrap: wrap;
1327
+ gap: 6px 14px;
1328
+ padding: 0;
1329
+ border: 0;
1330
+ background: transparent;
1331
+ color: var(--exo-text-3);
1332
+ font-size: 12.5px;
1333
+ }
1334
+ .drawer .drawer-meta code {
1335
+ color: var(--exo-text);
1336
+ font-family: var(--exo-mono);
1337
+ font-size: 12px;
1338
+ }
1339
+ .drawer .task-access-chips {
1340
+ display: flex;
1341
+ align-items: center;
1342
+ flex-wrap: wrap;
1343
+ gap: 6px;
1344
+ margin-top: 0;
1345
+ }
1346
+ .drawer .task-access-chip {
1347
+ display: inline-flex;
1348
+ align-items: center;
1349
+ gap: 6px;
1350
+ max-width: 100%;
1351
+ min-height: 24px;
1352
+ padding: 3px 8px;
1353
+ border: 1px solid var(--exo-border);
1354
+ border-radius: 9999px;
1355
+ background: var(--exo-surface-2);
1356
+ color: var(--exo-text);
1357
+ font-size: 12px;
1358
+ line-height: 1.2;
1359
+ }
1360
+ .drawer .task-access-chip.granted {
1361
+ border-color: color-mix(in srgb, var(--exo-success) 32%, var(--exo-border));
1362
+ color: var(--exo-success);
1363
+ }
1364
+ .drawer .task-access-chip.released { color: var(--exo-text-3); }
1365
+ .drawer .task-access-chip.waiting {
1366
+ border-color: color-mix(in srgb, var(--exo-warning) 36%, var(--exo-border));
1367
+ color: var(--exo-warning);
1368
+ }
1369
+ .drawer .task-access-chip.denied {
1370
+ border-color: color-mix(in srgb, var(--exo-danger) 36%, var(--exo-border));
1371
+ color: var(--exo-danger);
1372
+ }
1373
+ .drawer .task-access-icon {
1374
+ width: 13px;
1375
+ height: 13px;
1376
+ flex: 0 0 auto;
1377
+ stroke-width: 2.4;
1378
+ }
1379
+ .drawer .task-access-text {
1380
+ min-width: 0;
1381
+ overflow: hidden;
1382
+ text-overflow: ellipsis;
1383
+ white-space: nowrap;
1384
+ }
1385
+
1386
+ .drawer > header h2 {
1387
+ max-width: 100%;
1388
+ overflow-wrap: anywhere;
1389
+ white-space: normal;
1390
+ }
1391
+
1392
+ .drawer .turn {
1393
+ display: flex;
1394
+ flex-direction: column;
1395
+ gap: 0;
1396
+ border: 1px solid var(--exo-border);
1397
+ border-radius: 8px;
1398
+ background: var(--exo-surface);
1399
+ overflow: visible;
1400
+ }
1401
+ .drawer .turn-panel {
1402
+ max-width: 100%;
1403
+ border: 0;
1404
+ border-radius: 0;
1405
+ background: transparent;
1406
+ overflow: visible;
1407
+ }
1408
+ .drawer .request-panel {
1409
+ align-self: stretch;
1410
+ width: 100%;
1411
+ border: 0;
1412
+ border-radius: 7px 7px 0 0;
1413
+ background: var(--exo-accent-soft);
1414
+ }
1415
+ .drawer .output-panel {
1416
+ align-self: stretch;
1417
+ width: 100%;
1418
+ border-top: 1px solid color-mix(in srgb, var(--exo-accent) 14%, var(--exo-border));
1419
+ border-radius: 0 0 7px 7px;
1420
+ background: var(--exo-surface);
1421
+ }
1422
+ .drawer .request-panel .turn-title {
1423
+ background: color-mix(in srgb, var(--exo-accent-soft) 72%, var(--exo-surface));
1424
+ border-bottom-color: color-mix(in srgb, var(--exo-accent) 18%, var(--exo-border));
1425
+ }
1426
+ .drawer .request-panel .turn-title h3,
1427
+ .drawer .request-panel .turn-title time {
1428
+ color: var(--exo-accent-strong);
1429
+ }
1430
+
1431
+ .drawer .technical-summary {
1432
+ margin: 6px 0 4px;
1433
+ border: 1px solid var(--exo-border);
1434
+ border-radius: 8px;
1435
+ background: var(--exo-surface-2);
1436
+ }
1437
+ .drawer .output-panel .result > .technical-summary {
1438
+ margin: 8px -12px -10px;
1439
+ border-radius: 5px 5px 0 0;
1440
+ }
1441
+ .drawer .technical-summary > summary {
1442
+ display: flex;
1443
+ align-items: center;
1444
+ gap: 8px;
1445
+ min-height: 30px;
1446
+ padding: 0 10px;
1447
+ color: var(--exo-text-2);
1448
+ cursor: pointer;
1449
+ font-size: 12.5px;
1450
+ font-weight: 600;
1451
+ list-style: none;
1452
+ }
1453
+ .drawer .technical-summary > summary::-webkit-details-marker { display: none; }
1454
+ .drawer .technical-summary > summary::before {
1455
+ content: "";
1456
+ width: 0;
1457
+ height: 0;
1458
+ border-top: 4px solid transparent;
1459
+ border-bottom: 4px solid transparent;
1460
+ border-left: 5px solid currentColor;
1461
+ transition: transform 120ms ease;
1462
+ }
1463
+ .drawer .technical-summary-title {
1464
+ flex: 1;
1465
+ min-width: 0;
1466
+ }
1467
+ .drawer .technical-summary > summary .trace-open-button {
1468
+ display: none;
1469
+ }
1470
+ .drawer .technical-summary[open] > summary .trace-open-button {
1471
+ display: inline-flex;
1472
+ }
1473
+ .drawer .technical-summary[open] > summary::before {
1474
+ transform: rotate(90deg) translateY(1px);
1475
+ }
1476
+ .drawer .technical-summary-body {
1477
+ border-top: 1px solid var(--exo-border);
1478
+ padding: 8px 10px;
1479
+ }
1480
+
1481
+ .drawer .formatted-text p { margin: 0 0 8px; }
1482
+ .drawer .formatted-text h4,
1483
+ .drawer .formatted-text h5,
1484
+ .drawer .formatted-text h6 {
1485
+ margin: 10px 0 6px;
1486
+ color: var(--exo-text);
1487
+ font-weight: 650;
1488
+ line-height: 1.25;
1489
+ }
1490
+ .drawer .formatted-text h4 { font-size: 14px; }
1491
+ .drawer .formatted-text h5 { font-size: 13.5px; }
1492
+ .drawer .formatted-text h6 { font-size: 13px; }
1493
+ .drawer .formatted-text ul,
1494
+ .drawer .formatted-text ol {
1495
+ margin: 6px 0 10px;
1496
+ padding-left: 22px;
1497
+ }
1498
+ .drawer .formatted-text li {
1499
+ margin: 4px 0;
1500
+ line-height: 1.45;
1501
+ overflow-wrap: anywhere;
1502
+ }
1503
+ .drawer .formatted-text :not(pre) > code {
1504
+ padding: 1px 5px;
1505
+ border-radius: 5px;
1506
+ background: var(--exo-surface-2);
1507
+ border: 1px solid var(--exo-border);
1508
+ color: var(--exo-accent-strong);
1509
+ font-family: var(--exo-mono);
1510
+ font-size: 0.86em;
1511
+ }
1512
+ .drawer .formatted-text a {
1513
+ color: var(--exo-accent-strong);
1514
+ font-weight: 600;
1515
+ text-decoration-thickness: 1px;
1516
+ text-underline-offset: 2px;
1517
+ }
1518
+ .drawer .formatted-text > :first-child { margin-top: 0; }
1519
+ .drawer .formatted-text > :last-child { margin-bottom: 0; }
1520
+
1521
+ .drawer .trace-open-button {
1522
+ display: inline-flex;
1523
+ align-items: center;
1524
+ justify-content: center;
1525
+ gap: 6px;
1526
+ min-height: 26px;
1527
+ padding: 0 9px;
1528
+ border: 1px solid var(--exo-border);
1529
+ border-radius: 9999px;
1530
+ background: var(--exo-surface);
1531
+ color: var(--exo-text-2);
1532
+ cursor: pointer;
1533
+ font-family: inherit;
1534
+ font-size: 12px;
1535
+ font-weight: 500;
1536
+ line-height: 1;
1537
+ }
1538
+ .drawer .trace-open-button:hover {
1539
+ background: var(--exo-accent-soft);
1540
+ border-color: var(--exo-accent);
1541
+ color: var(--exo-accent-strong);
1542
+ }
1543
+ .drawer .trace-open-button:disabled {
1544
+ cursor: wait;
1545
+ opacity: 0.82;
1546
+ }
1547
+ .drawer .trace-open-button svg {
1548
+ width: 13px;
1549
+ height: 13px;
1550
+ }
1551
+
1552
+ .task-trace-overlay {
1553
+ animation: exo-trace-enter 120ms ease-out;
1554
+ }
1555
+
1556
+ .task-trace-overlay .trace-filter-bar {
1557
+ display: flex;
1558
+ gap: 4px;
1559
+ padding: 7px 10px;
1560
+ border-bottom: 1px solid var(--exo-border);
1561
+ flex-wrap: wrap;
1562
+ }
1563
+ .task-trace-overlay .trace-filter-button,
1564
+ .task-trace-overlay .trace-toggle-button {
1565
+ display: inline-flex;
1566
+ align-items: center;
1567
+ justify-content: center;
1568
+ border: 1px solid var(--exo-border);
1569
+ border-radius: 9999px;
1570
+ background: transparent;
1571
+ color: var(--exo-text-3);
1572
+ cursor: pointer;
1573
+ font: inherit;
1574
+ line-height: 1;
1575
+ }
1576
+ .task-trace-overlay .trace-filter-button {
1577
+ height: 22px;
1578
+ padding: 0 9px;
1579
+ font-size: 11.5px;
1580
+ text-transform: uppercase;
1581
+ letter-spacing: 0.04em;
1582
+ }
1583
+ .task-trace-overlay .trace-toggle-button {
1584
+ height: 24px;
1585
+ padding: 0 10px;
1586
+ border-color: var(--exo-border-strong);
1587
+ color: var(--exo-text-2);
1588
+ font-size: 12px;
1589
+ }
1590
+ .task-trace-overlay .trace-filter-button:hover,
1591
+ .task-trace-overlay .trace-toggle-button:hover {
1592
+ color: var(--exo-text-2);
1593
+ background: var(--exo-surface);
1594
+ border-color: var(--exo-border-strong);
1595
+ }
1596
+ .task-trace-overlay .trace-filter-button.active,
1597
+ .task-trace-overlay .trace-toggle-button.active {
1598
+ color: var(--exo-accent-strong);
1599
+ background: var(--exo-accent-soft);
1600
+ border-color: transparent;
1601
+ }