@kevin5251984/guild 0.2.12

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 (70) hide show
  1. package/LICENSE +21 -0
  2. package/bin/guildd.mjs +20 -0
  3. package/cordis.yml +24 -0
  4. package/package.json +52 -0
  5. package/src/agent-file.ts +125 -0
  6. package/src/browser.ts +668 -0
  7. package/src/catalog/default-bots.ts +263 -0
  8. package/src/catalog/skills.ts +128 -0
  9. package/src/catalog/subagents.ts +70 -0
  10. package/src/chat-parts.ts +71 -0
  11. package/src/cli-args.ts +75 -0
  12. package/src/cli.ts +60 -0
  13. package/src/compact.ts +355 -0
  14. package/src/cordis.d.ts +40 -0
  15. package/src/db.ts +653 -0
  16. package/src/generate.ts +673 -0
  17. package/src/handlers.ts +1623 -0
  18. package/src/harness.ts +326 -0
  19. package/src/host-agents.ts +137 -0
  20. package/src/host-browse.ts +199 -0
  21. package/src/host-skills.ts +150 -0
  22. package/src/image-gen.ts +270 -0
  23. package/src/index.ts +12 -0
  24. package/src/llm.ts +993 -0
  25. package/src/mcp.ts +563 -0
  26. package/src/memory.ts +159 -0
  27. package/src/mention.ts +176 -0
  28. package/src/oauth.ts +1474 -0
  29. package/src/plugins/api.ts +8 -0
  30. package/src/plugins/chat.ts +31 -0
  31. package/src/plugins/harness.ts +77 -0
  32. package/src/plugins/llm.ts +50 -0
  33. package/src/plugins/mcp.ts +58 -0
  34. package/src/plugins/memory.ts +42 -0
  35. package/src/plugins/oauth.ts +47 -0
  36. package/src/plugins/server.ts +126 -0
  37. package/src/plugins/store.ts +29 -0
  38. package/src/plugins/tools.ts +79 -0
  39. package/src/public/buddy.js +432 -0
  40. package/src/public/chat.css +3045 -0
  41. package/src/public/chat.html +5834 -0
  42. package/src/public/favicon-16.png +0 -0
  43. package/src/public/favicon-16.svg +10 -0
  44. package/src/public/favicon-32.png +0 -0
  45. package/src/public/favicon.ico +0 -0
  46. package/src/public/favicon.svg +13 -0
  47. package/src/public/i18n.js +663 -0
  48. package/src/public/index.html +143 -0
  49. package/src/public/library.html +678 -0
  50. package/src/public/mcp-add.html +126 -0
  51. package/src/public/md.js +332 -0
  52. package/src/public/rpg/inn-street.jpg +0 -0
  53. package/src/public/settings.html +795 -0
  54. package/src/public/skills-add.html +212 -0
  55. package/src/public/studio.html +1181 -0
  56. package/src/public/style.css +1678 -0
  57. package/src/public/subagents-add.html +152 -0
  58. package/src/router.ts +978 -0
  59. package/src/send-budget.ts +52 -0
  60. package/src/server.ts +1 -0
  61. package/src/skill-import.ts +250 -0
  62. package/src/slash.ts +15 -0
  63. package/src/start.ts +103 -0
  64. package/src/store.ts +1208 -0
  65. package/src/subagent.ts +355 -0
  66. package/src/tools.ts +818 -0
  67. package/src/trajectory.ts +339 -0
  68. package/src/usage.ts +111 -0
  69. package/vendor/protocol/package.json +19 -0
  70. package/vendor/protocol/src/index.ts +159 -0
@@ -0,0 +1,3045 @@
1
+ :root {
2
+ --enamel: #0B0E12;
3
+ --paper: #F3EFE6;
4
+ --ink: #0B0E12;
5
+ --steel: #A8B0BC;
6
+ --signal: #C9A227;
7
+ --bg: #0B0E12;
8
+ --panel: #10141A;
9
+ --lift: #161C24;
10
+ --bubble: #1A222C;
11
+ --you: #242C36;
12
+ --text: #E8E4DC;
13
+ --muted: #8B8F96;
14
+ --line: #1C222C;
15
+ --fill: #141A22;
16
+ --thread-max: 1600px;
17
+ --thread-gutter: 28px;
18
+ --you-max: min(56rem, 86%);
19
+ --focus: 0 0 0 2px var(--bg), 0 0 0 3px var(--steel);
20
+ }
21
+ * { box-sizing: border-box; }
22
+ html, body { margin: 0; height: 100%; }
23
+ button:focus-visible,
24
+ a:focus-visible,
25
+ input:focus-visible,
26
+ textarea:focus-visible,
27
+ select:focus-visible,
28
+ .head-id:focus-visible,
29
+ .nav-row:focus-visible {
30
+ outline: none;
31
+ box-shadow: var(--focus);
32
+ }
33
+ @media (hover: hover) {
34
+ .navlist a.nav-row:hover { background: var(--lift); }
35
+ .icon-btn:hover { background: var(--lift); }
36
+ .add-ch:hover { color: var(--text); background: var(--lift); }
37
+ }
38
+ body.grok {
39
+ display: grid;
40
+ grid-template-columns: var(--sidebar-w, 292px) 1fr;
41
+ height: 100%;
42
+ min-height: 100%;
43
+ color: var(--text);
44
+ background: var(--bg);
45
+ font-family: "SF Pro Text", "PingFang TC", "Segoe UI", system-ui, sans-serif;
46
+ }
47
+
48
+ .sidebar {
49
+ position: relative;
50
+ background: var(--panel);
51
+ border-right: 1px solid var(--line);
52
+ display: flex;
53
+ flex-direction: column;
54
+ min-height: 100vh;
55
+ min-width: 0;
56
+ overflow: hidden;
57
+ }
58
+ .sidebar-resizer {
59
+ position: absolute;
60
+ top: 0;
61
+ right: -3px;
62
+ width: 6px;
63
+ height: 100%;
64
+ cursor: col-resize;
65
+ z-index: 6;
66
+ }
67
+ .sidebar-resizer:hover,
68
+ body.resizing-sidebar .sidebar-resizer {
69
+ background: rgba(255, 255, 255, 0.14);
70
+ }
71
+ body.resizing-sidebar {
72
+ cursor: col-resize;
73
+ user-select: none;
74
+ }
75
+ body.resizing-sidebar iframe { pointer-events: none; }
76
+ .side-top {
77
+ display: flex;
78
+ align-items: center;
79
+ gap: 0.55rem;
80
+ padding: 0.7rem 0.75rem 0.55rem;
81
+ }
82
+ .icon-btn {
83
+ margin: 0;
84
+ width: 36px;
85
+ height: 36px;
86
+ border: 0;
87
+ border-radius: 50%;
88
+ background: var(--fill);
89
+ color: var(--text);
90
+ font-size: 1.25rem;
91
+ line-height: 1;
92
+ cursor: pointer;
93
+ flex: none;
94
+ }
95
+ .icon-btn:hover { background: var(--lift); }
96
+ .search {
97
+ flex: 1;
98
+ margin: 0;
99
+ padding: 0.55rem 0.9rem;
100
+ border: 0;
101
+ border-radius: 999px;
102
+ background: var(--fill);
103
+ color: var(--text);
104
+ font: inherit;
105
+ font-size: 16px;
106
+ width: auto;
107
+ }
108
+ .search::placeholder { color: var(--muted); }
109
+ .section-h {
110
+ display: flex;
111
+ align-items: center;
112
+ justify-content: space-between;
113
+ padding: 0.65rem 0.85rem 0.25rem 1rem;
114
+ color: var(--muted);
115
+ font-size: 0.72rem;
116
+ letter-spacing: 0.12em;
117
+ }
118
+ .add-ch {
119
+ margin: 0;
120
+ width: 22px;
121
+ height: 22px;
122
+ border: 0;
123
+ border-radius: 50%;
124
+ background: transparent;
125
+ color: var(--steel);
126
+ font-size: 1.15rem;
127
+ line-height: 1;
128
+ cursor: pointer;
129
+ }
130
+ .add-ch:hover { color: var(--text); background: var(--lift); }
131
+ .navlist {
132
+ list-style: none;
133
+ margin: 0;
134
+ padding: 0.15rem 0;
135
+ overflow: auto;
136
+ }
137
+ .navlist a.nav-row {
138
+ display: grid;
139
+ grid-template-columns: 48px minmax(0, 1fr);
140
+ gap: 0.75rem;
141
+ align-items: center;
142
+ padding: 0.7rem 0.9rem 0.7rem 0.85rem;
143
+ margin: 0 0.4rem;
144
+ border-radius: 10px;
145
+ color: var(--text);
146
+ text-decoration: none;
147
+ }
148
+ .nav-av {
149
+ position: relative;
150
+ width: 48px;
151
+ height: 48px;
152
+ flex: none;
153
+ }
154
+ .nav-av .avatar { width: 48px; height: 48px; }
155
+ .nav-body { min-width: 0; display: flex; flex-direction: column; gap: 0.18rem; }
156
+ .nav-top {
157
+ display: flex;
158
+ align-items: center;
159
+ gap: 0.4rem;
160
+ min-width: 0;
161
+ overflow: hidden;
162
+ }
163
+ .nav-top strong {
164
+ flex: 1;
165
+ min-width: 0;
166
+ overflow: hidden;
167
+ text-overflow: ellipsis;
168
+ white-space: nowrap;
169
+ text-wrap: nowrap;
170
+ font-size: 0.95rem;
171
+ font-weight: 650;
172
+ display: block;
173
+ }
174
+ .nav-chip {
175
+ flex: none;
176
+ max-width: 42%;
177
+ overflow: hidden;
178
+ text-overflow: ellipsis;
179
+ white-space: nowrap;
180
+ font-size: 0.68rem;
181
+ font-weight: 500;
182
+ line-height: 1.35;
183
+ color: var(--muted);
184
+ background: var(--fill);
185
+ border-radius: 6px;
186
+ padding: 0.08rem 0.4rem;
187
+ }
188
+ .nav-top time {
189
+ margin-left: auto;
190
+ flex: none;
191
+ color: var(--muted);
192
+ font-size: 0.75rem;
193
+ font-weight: 400;
194
+ font-variant-numeric: tabular-nums;
195
+ }
196
+ .nav-row.unread .nav-top strong { font-weight: 700; }
197
+ .busy-flash {
198
+ position: absolute;
199
+ right: -1px;
200
+ bottom: -1px;
201
+ width: 12px;
202
+ height: 12px;
203
+ border-radius: 50%;
204
+ background: var(--signal);
205
+ box-shadow: 0 0 0 2px var(--bg);
206
+ animation: busy-pulse 0.9s ease-in-out infinite;
207
+ }
208
+ .unread-dot {
209
+ margin-left: auto;
210
+ flex: none;
211
+ width: 10px;
212
+ height: 10px;
213
+ border-radius: 50%;
214
+ background: var(--signal);
215
+ }
216
+ @keyframes busy-pulse {
217
+ 0%, 100% { opacity: 1; transform: scale(1); }
218
+ 50% { opacity: 0.25; transform: scale(0.82); }
219
+ }
220
+ @media (prefers-reduced-motion: reduce) {
221
+ .busy-flash { animation: none; }
222
+ }
223
+ .navlist a.nav-row:hover { background: var(--lift); }
224
+ .navlist a.nav-row.on { background: var(--bubble); }
225
+ .navlist em {
226
+ display: block;
227
+ font-style: normal;
228
+ color: var(--muted);
229
+ font-size: 0.8rem;
230
+ margin: 0;
231
+ overflow: hidden;
232
+ text-overflow: ellipsis;
233
+ white-space: nowrap;
234
+ text-wrap: nowrap;
235
+ }
236
+ .avatar {
237
+ width: 44px;
238
+ height: 44px;
239
+ border-radius: 50%;
240
+ display: grid;
241
+ place-items: center;
242
+ color: #fff;
243
+ font-size: 14px;
244
+ font-weight: 700;
245
+ line-height: 1;
246
+ letter-spacing: 0;
247
+ overflow: hidden;
248
+ white-space: nowrap;
249
+ text-wrap: nowrap;
250
+ text-overflow: clip;
251
+ flex: none;
252
+ padding: 0;
253
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--steel) 38%, transparent);
254
+ }
255
+ .avatar img,
256
+ .queue-av img,
257
+ .traj-av img,
258
+ .bot-card-av img,
259
+ .mention-glyph img {
260
+ width: 100%;
261
+ height: 100%;
262
+ object-fit: cover;
263
+ object-position: center 18%;
264
+ display: block;
265
+ pointer-events: none;
266
+ }
267
+ .avatar.has-photo,
268
+ .queue-av.has-photo,
269
+ .traj-av.has-photo,
270
+ .bot-card-av.has-photo,
271
+ .mention-glyph.has-photo {
272
+ color: transparent;
273
+ font-size: 0;
274
+ }
275
+ .nav-av .avatar { font-size: 15px; letter-spacing: 0; }
276
+ .avatar.sm { width: 28px; height: 28px; font-size: 12px; }
277
+ a.avatar { text-decoration: none; color: #fff; }
278
+ .pane-head a.avatar[href] { cursor: pointer; }
279
+ .pane-head a.avatar[href]:hover { filter: brightness(1.18); }
280
+ .head-id {
281
+ display: flex;
282
+ align-items: center;
283
+ gap: 0.7rem;
284
+ margin: 0;
285
+ padding: 0;
286
+ border: 0;
287
+ background: transparent;
288
+ color: inherit;
289
+ font: inherit;
290
+ cursor: pointer;
291
+ min-width: 0;
292
+ max-width: min(42vw, 22rem);
293
+ overflow: hidden;
294
+ text-align: left;
295
+ }
296
+ .head-id:hover .avatar { filter: brightness(1.18); }
297
+ .head-id:hover h1 { text-decoration: underline; }
298
+ .hash-av {
299
+ background: var(--fill);
300
+ color: var(--steel);
301
+ font-size: 1.05rem;
302
+ cursor: pointer;
303
+ box-shadow:
304
+ 0 0 0 1px color-mix(in srgb, var(--steel) 55%, transparent),
305
+ inset 0 0 0 3px var(--enamel);
306
+ }
307
+ .hash-av:hover { filter: brightness(1.18); }
308
+ .bot-card {
309
+ position: fixed;
310
+ z-index: 50;
311
+ width: 280px;
312
+ padding: 16px 16px 14px;
313
+ border: 1px solid var(--line);
314
+ border-radius: 16px;
315
+ background: var(--panel);
316
+ box-shadow: 0 18px 50px #000c;
317
+ }
318
+ .bot-card[hidden] { display: none; }
319
+ .bot-card-av {
320
+ width: 72px;
321
+ height: 72px;
322
+ border-radius: 50%;
323
+ display: grid;
324
+ place-items: center;
325
+ color: #fff;
326
+ font-size: 1.35rem;
327
+ font-weight: 700;
328
+ margin-bottom: 12px;
329
+ overflow: hidden;
330
+ }
331
+ .bot-card-name {
332
+ font-size: 1.15rem;
333
+ font-weight: 700;
334
+ line-height: 1.3;
335
+ }
336
+ .bot-card-handle {
337
+ color: var(--muted);
338
+ font-size: 0.82rem;
339
+ margin: 0.15rem 0 0.45rem;
340
+ }
341
+ .bot-card-bio {
342
+ margin: 0 0 0.9rem;
343
+ color: #cfcfcf;
344
+ font-size: 0.88rem;
345
+ line-height: 1.4;
346
+ }
347
+ .bot-card-actions {
348
+ display: grid;
349
+ grid-template-columns: 1fr 1fr;
350
+ gap: 0.4rem;
351
+ }
352
+ .bot-card-actions .bot-card-btn:last-child {
353
+ grid-column: 1 / -1;
354
+ }
355
+ .bot-card-btn {
356
+ display: flex;
357
+ align-items: center;
358
+ justify-content: center;
359
+ min-width: 0;
360
+ margin: 0;
361
+ padding: 0.45rem 0.5rem;
362
+ border: 0;
363
+ border-radius: 10px;
364
+ background: var(--lift);
365
+ color: var(--text);
366
+ text-decoration: none;
367
+ font: inherit;
368
+ font-size: 0.82rem;
369
+ line-height: 1.2;
370
+ white-space: nowrap;
371
+ overflow: hidden;
372
+ text-overflow: ellipsis;
373
+ cursor: pointer;
374
+ }
375
+ .bot-card-btn:hover { background: var(--bubble); text-decoration: none; }
376
+ button.avatar {
377
+ border: 0;
378
+ padding: 0;
379
+ cursor: pointer;
380
+ }
381
+ .create-row {
382
+ display: none;
383
+ gap: 0.35rem;
384
+ padding: 0 0.75rem 0.5rem;
385
+ }
386
+ .create-row.open { display: flex; }
387
+ .create-row input {
388
+ flex: 1;
389
+ padding: 0.45rem 0.7rem;
390
+ border: 0;
391
+ border-radius: 999px;
392
+ background: var(--fill);
393
+ color: var(--text);
394
+ font: inherit;
395
+ }
396
+ .create-row button {
397
+ margin: 0;
398
+ padding: 0.45rem 0.75rem;
399
+ border: 0;
400
+ border-radius: 999px;
401
+ background: var(--paper);
402
+ color: var(--ink);
403
+ cursor: pointer;
404
+ }
405
+ .side-foot {
406
+ margin-top: auto;
407
+ padding: 0.7rem 0.85rem 0.9rem;
408
+ display: flex;
409
+ gap: 0.7rem;
410
+ flex-wrap: wrap;
411
+ align-items: baseline;
412
+ border-top: 1px solid var(--line);
413
+ font-family: "PingFang TC", "Noto Sans TC", "SF Pro Text", sans-serif;
414
+ font-size: 0.82rem;
415
+ font-weight: 400;
416
+ font-synthesis: none;
417
+ }
418
+ .side-foot a,
419
+ .side-foot a:link,
420
+ .side-foot a:visited {
421
+ color: var(--muted);
422
+ text-decoration: none;
423
+ font: inherit;
424
+ }
425
+ .side-foot a:hover { color: var(--text); }
426
+
427
+ /* Quest board: wood only on the chat rail. Pane stays enamel. */
428
+ body.grok .sidebar {
429
+ --board: #16100B;
430
+ --board-lit: #5A341C;
431
+ --board-mid: #3E2416;
432
+ --board-slot: #24150E;
433
+ --board-edge: #6B4228;
434
+ --notice: #EDE6D6;
435
+ --notice-ink: #1A1612;
436
+ --notice-mute: #6A5E50;
437
+ --plaque: var(--notice);
438
+ --plaque-on: #F7F1E4;
439
+ --pin: #C9A227;
440
+ color: #F0E2C8;
441
+ height: 100%;
442
+ max-height: 100vh;
443
+ min-height: 0;
444
+ overflow: hidden;
445
+ background-color: #16100B;
446
+ background-image:
447
+ linear-gradient(
448
+ 180deg,
449
+ rgba(232, 196, 140, 0.14) 0%,
450
+ transparent 22%,
451
+ rgba(12, 8, 5, 0.38) 78%,
452
+ rgba(201, 162, 39, 0.06)
453
+ ),
454
+ repeating-linear-gradient(
455
+ 90deg,
456
+ transparent 0 86px,
457
+ rgba(12, 8, 5, 0.62) 86px 89px,
458
+ rgba(232, 196, 140, 0.12) 90px 91px
459
+ ),
460
+ repeating-linear-gradient(
461
+ 90deg,
462
+ #4A2C18 0 3px,
463
+ #5C361C 3px 8px,
464
+ #3A2214 8px 11px,
465
+ #6B4228 11px 14px,
466
+ #452818 14px 19px,
467
+ #2E1A10 19px 22px
468
+ );
469
+ border-right: 10px solid #16100B;
470
+ box-shadow:
471
+ inset 8px 0 18px #0006,
472
+ inset -10px 0 16px #0007,
473
+ inset 0 18px 28px #0005;
474
+ padding: 6px 3px 0;
475
+ }
476
+ body.grok .sidebar::before {
477
+ content: "";
478
+ position: absolute;
479
+ inset: 0;
480
+ pointer-events: none;
481
+ z-index: 2;
482
+ background:
483
+ radial-gradient(circle at 13px 13px, #F4E3A4 0 2px, #C9A227 3.2px, #6E5814 4.6px, #3A2A10 5.6px, transparent 6.4px),
484
+ radial-gradient(circle at calc(100% - 14px) 13px, #F4E3A4 0 2px, #C9A227 3.2px, #6E5814 4.6px, #3A2A10 5.6px, transparent 6.4px),
485
+ radial-gradient(circle at 13px calc(100% - 13px), #F4E3A4 0 2px, #C9A227 3.2px, #6E5814 4.6px, #3A2A10 5.6px, transparent 6.4px),
486
+ radial-gradient(circle at calc(100% - 14px) calc(100% - 13px), #F4E3A4 0 2px, #C9A227 3.2px, #6E5814 4.6px, #3A2A10 5.6px, transparent 6.4px),
487
+ linear-gradient(90deg, rgba(12, 8, 5, 0.35), transparent 14px, transparent calc(100% - 14px), rgba(12, 8, 5, 0.4));
488
+ box-shadow: inset 0 0 0 3px #16100B;
489
+ }
490
+ body.grok .sidebar > *:not(.sidebar-resizer) { position: relative; z-index: 3; }
491
+ body.grok .sidebar-resizer {
492
+ position: absolute;
493
+ z-index: 6;
494
+ background: #16100B;
495
+ }
496
+ body.grok .sidebar-resizer:hover,
497
+ body.resizing-sidebar .sidebar-resizer {
498
+ background: color-mix(in srgb, var(--signal) 55%, #16100B);
499
+ }
500
+ body.grok .sidebar .search {
501
+ background: var(--board-slot);
502
+ color: #F0E2C8;
503
+ border: 1px solid color-mix(in srgb, var(--board-edge) 70%, #16100B);
504
+ border-radius: 2px;
505
+ box-shadow:
506
+ inset 0 2px 6px #0009,
507
+ 0 1px 0 color-mix(in srgb, var(--pin) 22%, transparent);
508
+ }
509
+ body.grok .sidebar .search::placeholder { color: #B08960; }
510
+ body.grok .sidebar .section-h {
511
+ color: #E8C48A;
512
+ letter-spacing: 0.2em;
513
+ font-weight: 700;
514
+ text-shadow: 0 1px 0 #0008;
515
+ }
516
+ body.grok .sidebar .add-ch {
517
+ color: var(--pin);
518
+ border-radius: 2px;
519
+ border: 1px solid color-mix(in srgb, var(--pin) 35%, transparent);
520
+ background: color-mix(in srgb, #16100B 70%, #3A2214);
521
+ }
522
+ body.grok .sidebar .add-ch:hover {
523
+ color: #F4E3A4;
524
+ background: #2A1810;
525
+ border-color: var(--pin);
526
+ }
527
+ body.grok .sidebar .create-row input {
528
+ background: var(--notice);
529
+ color: var(--notice-ink);
530
+ border-radius: 2px;
531
+ border: 0;
532
+ box-shadow: 0 2px 0 #0004;
533
+ }
534
+ body.grok .sidebar .create-row button {
535
+ background: var(--notice);
536
+ color: var(--notice-ink);
537
+ border-radius: 2px;
538
+ box-shadow: 0 2px 0 #0004;
539
+ }
540
+ body.grok #channels.navlist {
541
+ display: flex;
542
+ flex-direction: column;
543
+ gap: 0.72rem;
544
+ padding: 0.55rem 0.95rem 0.9rem;
545
+ flex: none;
546
+ overflow: visible;
547
+ }
548
+ body.grok #channels a.nav-row {
549
+ position: relative;
550
+ display: flex;
551
+ flex-direction: column;
552
+ align-items: stretch;
553
+ gap: 0.38rem;
554
+ margin: 0;
555
+ min-width: 0;
556
+ background:
557
+ linear-gradient(180deg, rgba(255, 255, 255, 0.38), transparent 16%),
558
+ repeating-linear-gradient(
559
+ 0deg,
560
+ transparent 0 18px,
561
+ rgba(26, 22, 18, 0.055) 18px 19px
562
+ ),
563
+ var(--notice);
564
+ color: var(--notice-ink);
565
+ border: 0;
566
+ border-radius: 1px;
567
+ padding: 1.35rem 1rem 0.95rem;
568
+ min-height: 5.8rem;
569
+ box-shadow:
570
+ 0 1px 0 #fff6,
571
+ 1px 2px 0 #0002,
572
+ 0 9px 16px #0006,
573
+ inset 0 0 0 1px rgba(90, 70, 40, 0.2);
574
+ }
575
+ body.grok #channels a.nav-row:nth-child(3n) { transform: rotate(-1.1deg); }
576
+ body.grok #channels a.nav-row:nth-child(3n + 1) { transform: rotate(0.85deg); }
577
+ body.grok #channels a.nav-row:nth-child(3n + 2) { transform: rotate(-0.35deg); }
578
+ body.grok #channels a.nav-row::before {
579
+ content: "";
580
+ position: absolute;
581
+ top: 0;
582
+ right: 0;
583
+ width: 18px;
584
+ height: 18px;
585
+ background:
586
+ linear-gradient(135deg, transparent 50%, color-mix(in srgb, var(--board-mid) 88%, #16100B) 50.5%);
587
+ box-shadow: -1px 1px 0 #0002;
588
+ }
589
+ body.grok #channels a.nav-row::after {
590
+ content: "";
591
+ position: absolute;
592
+ top: 7px;
593
+ left: 50%;
594
+ width: 12px;
595
+ height: 12px;
596
+ margin-left: -6px;
597
+ border-radius: 50%;
598
+ background:
599
+ radial-gradient(circle at 32% 28%, #F8E7A6 0 22%, #C9A227 52%, #6E5814 78%, #3A2A10 100%);
600
+ box-shadow:
601
+ 0 1px 2px #000a,
602
+ 0 0 0 1px #5A4318,
603
+ inset 0 -1px 1px #0005;
604
+ }
605
+ body.grok #channels a.nav-row:hover,
606
+ body.grok #channels a.nav-row.on {
607
+ background:
608
+ linear-gradient(180deg, rgba(255, 255, 255, 0.5), transparent 18%),
609
+ repeating-linear-gradient(
610
+ 0deg,
611
+ transparent 0 18px,
612
+ rgba(26, 22, 18, 0.05) 18px 19px
613
+ ),
614
+ var(--plaque-on);
615
+ transform: rotate(0deg) translateY(-1px);
616
+ border-color: transparent;
617
+ box-shadow:
618
+ 0 1px 0 #fff8,
619
+ 0 10px 18px #0007,
620
+ inset 0 0 0 1px color-mix(in srgb, var(--pin) 40%, transparent);
621
+ }
622
+ body.grok #channels .nav-top strong,
623
+ body.grok #channels .nav-top time,
624
+ body.grok #channels em {
625
+ color: inherit;
626
+ }
627
+ body.grok #channels .nav-top strong {
628
+ font-size: 1.08rem;
629
+ font-weight: 700;
630
+ letter-spacing: 0.01em;
631
+ padding-right: 0.4rem;
632
+ }
633
+ body.grok #channels .nav-top time,
634
+ body.grok #channels em { color: var(--notice-mute); }
635
+ body.grok #channels em {
636
+ white-space: normal;
637
+ display: -webkit-box;
638
+ -webkit-line-clamp: 2;
639
+ -webkit-box-orient: vertical;
640
+ font-size: 0.86rem;
641
+ line-height: 1.4;
642
+ }
643
+ body.grok #channels .notice-party {
644
+ display: flex;
645
+ align-items: center;
646
+ gap: 0.4rem;
647
+ margin-top: 0.08rem;
648
+ min-width: 0;
649
+ overflow: visible;
650
+ }
651
+ body.grok #channels .notice-party .members-stack .avatar {
652
+ width: 22px;
653
+ height: 22px;
654
+ font-size: 11px;
655
+ letter-spacing: 0;
656
+ margin-left: 0;
657
+ border: 2px solid var(--notice);
658
+ box-shadow: none;
659
+ }
660
+ body.grok #channels .notice-party .members-stack .avatar + .avatar {
661
+ margin-left: -7px;
662
+ }
663
+ body.grok #channels a.nav-row.on .notice-party .members-stack .avatar,
664
+ body.grok #channels a.nav-row:hover .notice-party .members-stack .avatar {
665
+ border-color: var(--plaque-on);
666
+ }
667
+ body.grok #channels .notice-party .members-count {
668
+ color: var(--notice-mute);
669
+ font-size: 0.75rem;
670
+ font-variant-numeric: tabular-nums;
671
+ }
672
+ body.grok #channels .busy-flash {
673
+ top: 10px;
674
+ right: 10px;
675
+ left: auto;
676
+ bottom: auto;
677
+ box-shadow: 0 0 0 2px var(--notice);
678
+ }
679
+ @media (prefers-reduced-motion: reduce) {
680
+ body.grok #channels a.nav-row:nth-child(3n),
681
+ body.grok #channels a.nav-row:nth-child(3n + 1),
682
+ body.grok #channels a.nav-row:nth-child(3n + 2) { transform: none; }
683
+ }
684
+ body.grok #dms.navlist {
685
+ flex-grow: 1;
686
+ flex-shrink: 1;
687
+ flex-basis: 0;
688
+ height: 0;
689
+ min-height: 0;
690
+ overflow-y: auto;
691
+ padding: 0.2rem 0.45rem 3.2rem;
692
+ scrollbar-width: thin;
693
+ scrollbar-color: #8A623C transparent;
694
+ }
695
+ body.grok #dms a.nav-row {
696
+ color: #F0E2C8;
697
+ border-radius: 2px;
698
+ border: 1px solid transparent;
699
+ background: color-mix(in srgb, #16100B 35%, transparent);
700
+ }
701
+ body.grok #dms a.nav-row:hover {
702
+ background: color-mix(in srgb, #EDE6D6 12%, transparent);
703
+ border-color: color-mix(in srgb, var(--board-edge) 45%, transparent);
704
+ }
705
+ body.grok #dms a.nav-row.on {
706
+ background: color-mix(in srgb, #EDE6D6 18%, transparent);
707
+ border-color: color-mix(in srgb, var(--pin) 40%, transparent);
708
+ }
709
+ body.grok #dms .nav-chip {
710
+ color: #E8C48A;
711
+ background: #16100B;
712
+ }
713
+ body.grok #dms .busy-flash { box-shadow: 0 0 0 2px #16100B; }
714
+ body.grok .sidebar .side-foot {
715
+ position: absolute;
716
+ left: 0;
717
+ right: 0;
718
+ bottom: 0;
719
+ z-index: 4;
720
+ margin-top: 0;
721
+ flex: none;
722
+ border-top: 1px solid var(--board-edge);
723
+ background:
724
+ linear-gradient(180deg, rgba(232, 196, 140, 0.08), transparent 40%),
725
+ #16100B;
726
+ }
727
+ body.grok .sidebar .side-foot a,
728
+ body.grok .sidebar .side-foot a:link,
729
+ body.grok .sidebar .side-foot a:visited { color: #E8C48A; }
730
+ body.grok .sidebar .side-foot a:hover { color: #F7F1E4; }
731
+
732
+
733
+ .pane {
734
+ position: relative;
735
+ display: grid;
736
+ grid-template-rows: auto 1fr auto;
737
+ min-width: 0;
738
+ min-height: 100vh;
739
+ background: var(--bg);
740
+ }
741
+ .pane-head {
742
+ display: flex;
743
+ align-items: center;
744
+ gap: 0.7rem;
745
+ padding: 0.65rem 1.1rem;
746
+ border-bottom: 1px solid var(--line);
747
+ background:
748
+ linear-gradient(180deg, color-mix(in srgb, var(--steel) 7%, transparent), transparent 70%),
749
+ var(--bg);
750
+ }
751
+ .pane-head h1 {
752
+ margin: 0;
753
+ min-width: 0;
754
+ font-size: 0.98rem;
755
+ font-weight: 650;
756
+ overflow: hidden;
757
+ text-overflow: ellipsis;
758
+ white-space: nowrap;
759
+ text-wrap: nowrap;
760
+ }
761
+ .pane-head .meta {
762
+ color: var(--muted);
763
+ font-size: 0.8rem;
764
+ flex: 1;
765
+ overflow: hidden;
766
+ text-overflow: ellipsis;
767
+ white-space: nowrap;
768
+ }
769
+ .head-actions {
770
+ display: flex;
771
+ align-items: center;
772
+ gap: 0.45rem;
773
+ margin-left: auto;
774
+ flex: none;
775
+ }
776
+ .traj-btn {
777
+ margin: 0;
778
+ padding: 0.32rem 0.7rem;
779
+ border: 1px solid var(--line);
780
+ border-radius: 999px;
781
+ background: var(--fill);
782
+ color: var(--text);
783
+ font: inherit;
784
+ font-size: 0.78rem;
785
+ cursor: pointer;
786
+ }
787
+ .traj-btn:hover { background: var(--lift); color: var(--text); }
788
+ .bot-card-btn.danger { color: #fca5a5; }
789
+ .members-wrap {
790
+ position: relative;
791
+ margin-left: 0;
792
+ flex: none;
793
+ }
794
+ .members-btn {
795
+ display: flex;
796
+ align-items: center;
797
+ gap: 0.4rem;
798
+ margin: 0;
799
+ padding: 0.15rem 0.55rem 0.15rem 0.4rem;
800
+ border: 0;
801
+ border-radius: 999px;
802
+ background: var(--fill);
803
+ color: var(--text);
804
+ font: inherit;
805
+ font-size: 0.82rem;
806
+ cursor: pointer;
807
+ overflow: visible;
808
+ }
809
+ .members-btn:hover { background: var(--lift); }
810
+ .members-stack { display: flex; align-items: center; }
811
+ .members-stack .avatar {
812
+ width: 26px;
813
+ height: 26px;
814
+ font-size: 12px;
815
+ letter-spacing: 0;
816
+ line-height: 1;
817
+ overflow: hidden;
818
+ white-space: nowrap;
819
+ margin-left: 0;
820
+ border: 2px solid var(--bg);
821
+ }
822
+ .members-stack .avatar + .avatar { margin-left: -8px; }
823
+ .members-count { color: var(--muted); font-size: 0.78rem; font-variant-numeric: tabular-nums; }
824
+ .members-pop {
825
+ position: absolute;
826
+ right: 0;
827
+ top: calc(100% + 8px);
828
+ width: min(300px, 86vw);
829
+ max-height: 360px;
830
+ overflow: auto;
831
+ background: var(--panel);
832
+ border: 1px solid var(--line);
833
+ border-radius: 14px;
834
+ box-shadow: 0 16px 40px #000c;
835
+ z-index: 40;
836
+ padding: 0.35rem 0 0.5rem;
837
+ }
838
+ .members-pop[hidden] { display: none; }
839
+ .members-sec {
840
+ color: var(--muted);
841
+ font-size: 0.7rem;
842
+ letter-spacing: 0.04em;
843
+ padding: 0.45rem 0.85rem 0.2rem;
844
+ }
845
+ .members-row {
846
+ display: flex;
847
+ align-items: center;
848
+ gap: 0.55rem;
849
+ width: 100%;
850
+ padding: 0.4rem 0.75rem;
851
+ border: 0;
852
+ background: transparent;
853
+ color: var(--text);
854
+ font: inherit;
855
+ text-align: left;
856
+ }
857
+ .members-row .who { flex: 1; min-width: 0; }
858
+ .members-row strong {
859
+ display: block;
860
+ font-size: 0.88rem;
861
+ font-weight: 600;
862
+ }
863
+ .members-row em {
864
+ display: block;
865
+ font-style: normal;
866
+ color: var(--muted);
867
+ font-size: 0.72rem;
868
+ }
869
+ .members-act {
870
+ flex: none;
871
+ margin: 0;
872
+ padding: 0.2rem 0.55rem;
873
+ border: 0;
874
+ border-radius: 999px;
875
+ background: var(--lift);
876
+ color: var(--text);
877
+ font: inherit;
878
+ font-size: 0.72rem;
879
+ cursor: pointer;
880
+ }
881
+ .members-act:hover { background: var(--bubble); }
882
+ .members-act.out { color: #e07070; }
883
+ .members-empty {
884
+ color: var(--muted);
885
+ font-size: 0.8rem;
886
+ padding: 0.35rem 0.85rem 0.6rem;
887
+ }
888
+ .invite-btn {
889
+ margin: 0;
890
+ padding: 0.3rem 0.7rem;
891
+ border: 0;
892
+ border-radius: 999px;
893
+ background: var(--fill);
894
+ color: var(--text);
895
+ cursor: pointer;
896
+ font: inherit;
897
+ font-size: 0.82rem;
898
+ text-decoration: none;
899
+ }
900
+ a.invite-btn:hover { text-decoration: none; }
901
+ .invite-btn:hover { background: var(--lift); }
902
+
903
+ .thread-wrap {
904
+ position: relative;
905
+ min-width: 0;
906
+ min-height: 0;
907
+ }
908
+ .thread {
909
+ position: relative;
910
+ height: 100%;
911
+ overflow: auto;
912
+ padding: 20px max(var(--thread-gutter), calc((100% - var(--thread-max)) / 2)) 12px;
913
+ display: flex;
914
+ flex-direction: column;
915
+ gap: 22px;
916
+ }
917
+ .prompt-rail {
918
+ position: absolute;
919
+ top: 8px;
920
+ left: 4px;
921
+ bottom: 8px;
922
+ z-index: 5;
923
+ width: 16px;
924
+ pointer-events: none;
925
+ }
926
+ .prompt-rail[hidden] { display: none; }
927
+ .prompt-rail::before {
928
+ content: "";
929
+ position: absolute;
930
+ top: 0;
931
+ left: 7px;
932
+ bottom: 0;
933
+ width: 1px;
934
+ background: color-mix(in srgb, var(--steel) 22%, transparent);
935
+ }
936
+ .prompt-tick {
937
+ position: absolute;
938
+ left: 0;
939
+ width: 16px;
940
+ height: 12px;
941
+ margin: 0;
942
+ padding: 0;
943
+ border: 0;
944
+ background: transparent;
945
+ cursor: pointer;
946
+ pointer-events: auto;
947
+ transform: translateY(-50%);
948
+ }
949
+ .prompt-tick::after {
950
+ content: "";
951
+ position: absolute;
952
+ top: 50%;
953
+ left: 3px;
954
+ width: 8px;
955
+ height: 2px;
956
+ border-radius: 1px;
957
+ background: color-mix(in srgb, var(--steel) 58%, transparent);
958
+ transform: translateY(-50%);
959
+ }
960
+ .prompt-tick.on::after,
961
+ .prompt-tick:hover::after {
962
+ width: 12px;
963
+ background: var(--signal);
964
+ }
965
+ .prompt-tick[data-preview]:hover::before {
966
+ content: attr(data-preview);
967
+ position: absolute;
968
+ left: 18px;
969
+ top: 50%;
970
+ z-index: 8;
971
+ max-width: min(52vw, 280px);
972
+ padding: 6px 8px;
973
+ border: 1px solid var(--line);
974
+ border-radius: 8px;
975
+ background: var(--panel);
976
+ color: var(--text);
977
+ font: inherit;
978
+ font-size: 12px;
979
+ line-height: 16px;
980
+ white-space: nowrap;
981
+ overflow: hidden;
982
+ text-overflow: ellipsis;
983
+ box-shadow: 0 8px 28px #0008;
984
+ pointer-events: none;
985
+ transform: translateY(-50%);
986
+ }
987
+ .msg.you.is-jump .bubble {
988
+ box-shadow: inset 0 0 0 1px var(--steel);
989
+ }
990
+ .jump-bottom {
991
+ position: absolute;
992
+ left: 50%;
993
+ bottom: 14px;
994
+ z-index: 6;
995
+ display: grid;
996
+ place-items: center;
997
+ width: 36px;
998
+ height: 36px;
999
+ margin: 0;
1000
+ padding: 0;
1001
+ border: 1px solid var(--line);
1002
+ border-radius: 999px;
1003
+ background: var(--panel);
1004
+ color: var(--steel);
1005
+ box-shadow: 0 8px 28px #0008;
1006
+ cursor: pointer;
1007
+ transform: translateX(-50%);
1008
+ }
1009
+ .jump-bottom:hover {
1010
+ color: var(--text);
1011
+ background: var(--lift);
1012
+ }
1013
+ .jump-bottom[hidden] { display: none; }
1014
+ .msg {
1015
+ display: flex;
1016
+ flex-direction: column;
1017
+ width: 100%;
1018
+ max-width: var(--thread-max);
1019
+ align-self: center;
1020
+ }
1021
+ .msg.bot {
1022
+ display: grid;
1023
+ grid-template-columns: 36px minmax(0, 1fr);
1024
+ column-gap: 12px;
1025
+ align-items: start;
1026
+ }
1027
+ .msg.bot > .avatar {
1028
+ width: 36px;
1029
+ height: 36px;
1030
+ margin-top: 2px;
1031
+ font-size: 13px;
1032
+ }
1033
+ .msg-main { min-width: 0; }
1034
+ .msg-head {
1035
+ display: flex;
1036
+ align-items: center;
1037
+ gap: 8px;
1038
+ margin: 0 0 2px;
1039
+ line-height: 22px;
1040
+ }
1041
+ .msg-head .name {
1042
+ margin: 0;
1043
+ padding: 0;
1044
+ border: 0;
1045
+ background: transparent;
1046
+ color: var(--text);
1047
+ font: inherit;
1048
+ font-size: 15px;
1049
+ font-weight: 700;
1050
+ cursor: pointer;
1051
+ }
1052
+ .msg-head .name:hover { text-decoration: underline; }
1053
+ .msg-head .handle {
1054
+ color: var(--muted);
1055
+ font-size: 12px;
1056
+ }
1057
+ .msg-time {
1058
+ color: var(--muted);
1059
+ font-size: 12px;
1060
+ font-weight: 400;
1061
+ font-variant-numeric: tabular-nums;
1062
+ white-space: nowrap;
1063
+ }
1064
+ .msg.you .msg-time {
1065
+ margin: 0 6px 4px;
1066
+ }
1067
+ .day-rule {
1068
+ display: flex;
1069
+ align-items: center;
1070
+ gap: 12px;
1071
+ width: 100%;
1072
+ max-width: var(--thread-max);
1073
+ align-self: center;
1074
+ margin: 4px 0 2px;
1075
+ color: var(--muted);
1076
+ font-size: 12px;
1077
+ }
1078
+ .day-rule::before,
1079
+ .day-rule::after {
1080
+ content: "";
1081
+ flex: 1;
1082
+ height: 1px;
1083
+ background: var(--line);
1084
+ }
1085
+ .day-rule span {
1086
+ flex: none;
1087
+ padding: 3px 10px;
1088
+ border: 1px solid var(--line);
1089
+ border-radius: 999px;
1090
+ background: var(--panel);
1091
+ }
1092
+ .msg.you { align-items: flex-end; }
1093
+ .msg.you .bubble {
1094
+ max-width: var(--you-max);
1095
+ margin: 0;
1096
+ padding: 10px 16px;
1097
+ border-radius: 22px;
1098
+ background: var(--you);
1099
+ color: var(--text);
1100
+ line-height: 24px;
1101
+ white-space: pre-wrap;
1102
+ font-size: 16px;
1103
+ }
1104
+ .steer-tag {
1105
+ display: flex;
1106
+ align-items: center;
1107
+ flex-wrap: wrap;
1108
+ gap: 6px;
1109
+ margin: 0 6px 4px;
1110
+ color: var(--steel);
1111
+ font-size: 12px;
1112
+ line-height: 16px;
1113
+ }
1114
+ .steer-tag .queue-to { margin: 0; }
1115
+ .msg.you.steer .bubble {
1116
+ background: var(--lift);
1117
+ box-shadow: inset 0 0 0 1px var(--line);
1118
+ }
1119
+ .msg.you.queued .bubble {
1120
+ background: var(--fill);
1121
+ box-shadow: inset 0 0 0 1px var(--line);
1122
+ opacity: 0.88;
1123
+ }
1124
+ .steer-tag.waiting { color: var(--signal); }
1125
+ .msg.bot .bubble {
1126
+ width: fit-content;
1127
+ max-width: 100%;
1128
+ margin: 6px 0 0;
1129
+ padding: 14px 18px;
1130
+ border-radius: 22px;
1131
+ background: var(--bubble);
1132
+ color: var(--text);
1133
+ }
1134
+ .msg.bot .bubble .assistant-text { margin-top: 0; }
1135
+ .msg.bot .bubble .assistant-text:last-child p:last-child { margin-bottom: 0; }
1136
+ .msg.bot .bubble .md-fence:last-child,
1137
+ .msg.bot .bubble .md-table-wrap:last-child { margin-bottom: 0; }
1138
+ .reply-quote {
1139
+ display: flex;
1140
+ align-items: center;
1141
+ gap: 6px;
1142
+ max-width: var(--you-max);
1143
+ margin: 0 0 4px;
1144
+ padding: 0 4px;
1145
+ border: 0;
1146
+ background: transparent;
1147
+ color: #8b8b8b;
1148
+ font: inherit;
1149
+ font-size: 12px;
1150
+ line-height: 18px;
1151
+ text-align: left;
1152
+ cursor: pointer;
1153
+ min-width: 0;
1154
+ }
1155
+ .reply-quote span:last-child {
1156
+ overflow: hidden;
1157
+ text-overflow: ellipsis;
1158
+ white-space: nowrap;
1159
+ }
1160
+ .reply-quote:hover { color: #cfcfcf; }
1161
+ .msg.flash {
1162
+ animation: msg-flash 1.1s ease;
1163
+ }
1164
+ @keyframes msg-flash {
1165
+ from { background: #222; }
1166
+ to { background: transparent; }
1167
+ }
1168
+ .assistant-doc {
1169
+ width: 100%;
1170
+ display: flex;
1171
+ flex-direction: column;
1172
+ gap: 10px;
1173
+ }
1174
+ .assistant-text {
1175
+ margin: 2px 0 0;
1176
+ padding: 0;
1177
+ color: #e6e6e6;
1178
+ font-size: 15.5px;
1179
+ line-height: 1.9;
1180
+ }
1181
+ .assistant-text.md { white-space: normal; overflow-wrap: break-word; }
1182
+ .assistant-text p { margin: 0 0 1.15rem; }
1183
+ .assistant-text p:last-child { margin-bottom: 0; }
1184
+ .assistant-text h1,
1185
+ .assistant-text h2,
1186
+ .assistant-text h3 {
1187
+ margin: 1.35rem 0 0.5rem;
1188
+ color: #f4f4f4;
1189
+ font-weight: 650;
1190
+ line-height: 1.35;
1191
+ letter-spacing: -0.015em;
1192
+ }
1193
+ .assistant-text h1:first-child,
1194
+ .assistant-text h2:first-child,
1195
+ .assistant-text h3:first-child { margin-top: 0.1rem; }
1196
+ .assistant-text h1 { font-size: 1.22rem; }
1197
+ .assistant-text h2 { font-size: 1.08rem; }
1198
+ .assistant-text h3 { font-size: 1rem; }
1199
+ .assistant-text ul,
1200
+ .assistant-text ol {
1201
+ margin: 0.15rem 0 1.05rem;
1202
+ padding-left: 1.45rem;
1203
+ }
1204
+ .assistant-text li {
1205
+ margin: 0.55rem 0;
1206
+ padding-left: 0.2rem;
1207
+ }
1208
+ .assistant-text li::marker { color: #8a8a8a; }
1209
+ .assistant-text li > p { margin: 0; }
1210
+ .assistant-text strong { color: var(--paper); font-weight: 650; }
1211
+ .assistant-text blockquote {
1212
+ margin: 0.7rem 0 1rem;
1213
+ padding: 0.1rem 0 0.1rem 0.9rem;
1214
+ border-left: 2px solid #5c5c5c;
1215
+ color: #c8c8c8;
1216
+ }
1217
+ .assistant-text a { color: var(--steel); text-underline-offset: 2px; }
1218
+ .assistant-text code {
1219
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1220
+ font-size: 0.86em;
1221
+ font-weight: 500;
1222
+ padding: 0.12em 0.4em;
1223
+ border-radius: 6px;
1224
+ background: #242C36;
1225
+ color: var(--text);
1226
+ border: 1px solid #454545;
1227
+ line-height: inherit;
1228
+ white-space: break-spaces;
1229
+ word-break: break-word;
1230
+ }
1231
+ .assistant-text code.md-file {
1232
+ color: var(--steel);
1233
+ background: color-mix(in srgb, var(--steel) 12%, transparent);
1234
+ border-color: color-mix(in srgb, var(--steel) 16%, transparent);
1235
+ }
1236
+ .assistant-text .md-fence {
1237
+ margin: 0.25rem 0 0.75rem;
1238
+ border-radius: 12px;
1239
+ background: #1a1a1a;
1240
+ }
1241
+ .assistant-text .md-fence-bar {
1242
+ display: flex;
1243
+ align-items: center;
1244
+ justify-content: space-between;
1245
+ gap: 8px;
1246
+ min-height: 32px;
1247
+ padding: 4px 8px 0 12px;
1248
+ }
1249
+ .assistant-text .md-fence-lang {
1250
+ display: inline-flex;
1251
+ align-items: center;
1252
+ gap: 6px;
1253
+ min-width: 0;
1254
+ color: #8b8b8b;
1255
+ font-size: 12px;
1256
+ line-height: 1;
1257
+ }
1258
+ .assistant-text .md-fence-ico { flex: none; }
1259
+ .assistant-text .md-fence-acts {
1260
+ display: flex;
1261
+ align-items: center;
1262
+ gap: 2px;
1263
+ }
1264
+ .assistant-text .md-fence-btn {
1265
+ position: relative;
1266
+ margin: 0;
1267
+ width: 28px;
1268
+ height: 28px;
1269
+ padding: 0;
1270
+ border: 0;
1271
+ border-radius: 8px;
1272
+ background: transparent;
1273
+ color: #c8c8c8;
1274
+ cursor: pointer;
1275
+ display: inline-flex;
1276
+ align-items: center;
1277
+ justify-content: center;
1278
+ }
1279
+ .assistant-text .md-fence-btn:hover { background: #2a2a2a; color: #fff; }
1280
+ .assistant-text .md-fence-btn[data-fence-input]:hover::after,
1281
+ .assistant-text .md-fence-btn[data-fence-copy]:hover::after,
1282
+ .assistant-text .md-fence-btn[data-html-expand]:hover::after {
1283
+ content: attr(title);
1284
+ position: absolute;
1285
+ bottom: calc(100% + 6px);
1286
+ right: 0;
1287
+ z-index: 2;
1288
+ padding: 4px 8px;
1289
+ border-radius: 8px;
1290
+ background: #2f2f2f;
1291
+ color: #eee;
1292
+ font-size: 12px;
1293
+ line-height: 16px;
1294
+ white-space: nowrap;
1295
+ pointer-events: none;
1296
+ box-shadow: 0 6px 18px rgba(0, 0, 0, 0.35);
1297
+ }
1298
+ .assistant-text .md-fence-btn[data-fence-input]:hover::before,
1299
+ .assistant-text .md-fence-btn[data-fence-copy]:hover::before,
1300
+ .assistant-text .md-fence-btn[data-html-expand]:hover::before {
1301
+ content: "";
1302
+ position: absolute;
1303
+ bottom: calc(100% - 4px);
1304
+ right: 8px;
1305
+ z-index: 2;
1306
+ border: 5px solid transparent;
1307
+ border-top-color: #2f2f2f;
1308
+ pointer-events: none;
1309
+ }
1310
+ .assistant-text .md-fence-btn.copied { color: #9adf9a; }
1311
+ .assistant-text .md-pre {
1312
+ margin: 0;
1313
+ padding: 6px 14px 14px;
1314
+ overflow: auto;
1315
+ border-radius: 0 0 12px 12px;
1316
+ background: transparent;
1317
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1318
+ font-size: 13px;
1319
+ line-height: 1.5;
1320
+ }
1321
+ .assistant-text .md-pre code {
1322
+ padding: 0;
1323
+ background: transparent;
1324
+ border: 0;
1325
+ border-radius: 0;
1326
+ color: inherit;
1327
+ font-size: inherit;
1328
+ font-weight: inherit;
1329
+ white-space: inherit;
1330
+ word-break: normal;
1331
+ }
1332
+ .assistant-text .md-fence-tabs {
1333
+ display: inline-flex;
1334
+ align-items: center;
1335
+ gap: 2px;
1336
+ margin-left: auto;
1337
+ margin-right: 4px;
1338
+ }
1339
+ .assistant-text .md-fence-tab {
1340
+ margin: 0;
1341
+ padding: 3px 8px;
1342
+ border: 0;
1343
+ border-radius: 6px;
1344
+ background: transparent;
1345
+ color: #8b8b8b;
1346
+ font: inherit;
1347
+ font-size: 12px;
1348
+ cursor: pointer;
1349
+ }
1350
+ .assistant-text .md-fence-tab.on,
1351
+ .assistant-text .md-fence-tab:hover { background: #2a2a2a; color: #eee; }
1352
+ .assistant-text .md-html-frame {
1353
+ display: block;
1354
+ width: 100%;
1355
+ min-height: 240px;
1356
+ height: 360px;
1357
+ border: 0;
1358
+ background: #fff;
1359
+ border-radius: 0 0 12px 12px;
1360
+ }
1361
+ .assistant-text .md-html-preview[data-view="code"] .md-html-frame { display: none; }
1362
+ .assistant-text .md-html-preview[data-view="preview"] .md-pre { display: none; }
1363
+ .html-zoom {
1364
+ position: fixed;
1365
+ inset: 0;
1366
+ z-index: 80;
1367
+ display: grid;
1368
+ grid-template-rows: auto 1fr;
1369
+ padding: 24px 28px 28px;
1370
+ background: rgba(0, 0, 0, 0.72);
1371
+ }
1372
+ .html-zoom[hidden] { display: none !important; }
1373
+ .html-zoom-bar {
1374
+ display: flex;
1375
+ align-items: center;
1376
+ justify-content: space-between;
1377
+ gap: 12px;
1378
+ margin: 0 auto 12px;
1379
+ width: min(1100px, 100%);
1380
+ color: #eee;
1381
+ }
1382
+ .html-zoom-close {
1383
+ margin: 0;
1384
+ width: 36px;
1385
+ height: 36px;
1386
+ border: 0;
1387
+ border-radius: 50%;
1388
+ background: #2a2a2a;
1389
+ color: #eee;
1390
+ font-size: 1.35rem;
1391
+ cursor: pointer;
1392
+ }
1393
+ .html-zoom-close:hover { background: #3a3a3a; }
1394
+ .html-zoom-frame {
1395
+ width: min(1100px, 100%);
1396
+ height: 100%;
1397
+ margin: 0 auto;
1398
+ border: 0;
1399
+ border-radius: 16px;
1400
+ background: #fff;
1401
+ box-shadow: 0 24px 60px #000a;
1402
+ }
1403
+ .assistant-text .md-table-wrap {
1404
+ margin: 0.35rem 0 0.85rem;
1405
+ overflow-x: auto;
1406
+ border: 1px solid #3a3a3a;
1407
+ border-radius: 10px;
1408
+ background: #242424;
1409
+ }
1410
+ .assistant-text .md-table {
1411
+ width: 100%;
1412
+ border-collapse: collapse;
1413
+ font-size: 14px;
1414
+ line-height: 1.7;
1415
+ background: #242424;
1416
+ }
1417
+ .assistant-text .md-table th,
1418
+ .assistant-text .md-table td {
1419
+ padding: 11px 14px;
1420
+ border-bottom: 1px solid #3a3a3a;
1421
+ text-align: left;
1422
+ vertical-align: top;
1423
+ }
1424
+ .assistant-text .md-table th {
1425
+ background: #1c1c1c;
1426
+ color: #f2f2f2;
1427
+ font-weight: 600;
1428
+ white-space: nowrap;
1429
+ border-bottom-color: #444;
1430
+ }
1431
+ .assistant-text .md-table tbody tr:nth-child(odd) td { background: #242424; }
1432
+ .assistant-text .md-table tbody tr:nth-child(even) td { background: #303030; }
1433
+ .assistant-text .md-table tbody tr:last-child td { border-bottom: 0; }
1434
+ .assistant-text .md-table .md-al-left { text-align: left; }
1435
+ .assistant-text .md-table .md-al-center { text-align: center; }
1436
+ .assistant-text .md-table .md-al-right { text-align: right; }
1437
+ .dsh-row,
1438
+ .dsh-trace {
1439
+ width: 100%;
1440
+ }
1441
+ .dsh-row:not([open]) > *:not(summary),
1442
+ .dsh-trace:not([open]) > *:not(summary) {
1443
+ display: none !important;
1444
+ }
1445
+ .dsh-row > summary,
1446
+ .dsh-trace > summary {
1447
+ position: relative;
1448
+ overflow: hidden;
1449
+ display: flex;
1450
+ align-items: center;
1451
+ min-height: 24px;
1452
+ cursor: pointer;
1453
+ list-style: none;
1454
+ user-select: none;
1455
+ }
1456
+ .dsh-row > summary::-webkit-details-marker,
1457
+ .dsh-trace > summary::-webkit-details-marker { display: none; }
1458
+ .dsh-trace { margin: 0 0 4px; }
1459
+ .dsh-trace-body {
1460
+ display: flex;
1461
+ flex-direction: column;
1462
+ gap: 0;
1463
+ padding: 2px 0 6px 8px;
1464
+ }
1465
+ .dsh-row[data-state="running"] > summary::after {
1466
+ content: "";
1467
+ position: absolute;
1468
+ inset-block: 0;
1469
+ left: -300px;
1470
+ width: 300px;
1471
+ background: linear-gradient(
1472
+ 90deg,
1473
+ transparent 0%,
1474
+ color-mix(in srgb, #000 60%, transparent) 55%,
1475
+ transparent 100%
1476
+ );
1477
+ animation: dsh-row-sweep 2.6s ease-out infinite;
1478
+ pointer-events: none;
1479
+ }
1480
+ @keyframes dsh-row-sweep {
1481
+ 0% { left: -300px; }
1482
+ 90%, 100% { left: 100%; }
1483
+ }
1484
+ .row-icon {
1485
+ flex: none;
1486
+ width: 16px;
1487
+ height: 16px;
1488
+ margin-right: 6px;
1489
+ color: #8b8b8b;
1490
+ display: inline-flex;
1491
+ align-items: center;
1492
+ justify-content: center;
1493
+ }
1494
+ .row-title {
1495
+ flex: none;
1496
+ font-size: 14px;
1497
+ line-height: 24px;
1498
+ color: #cfcfcf;
1499
+ font-weight: 400;
1500
+ }
1501
+ .row-sep {
1502
+ flex: none;
1503
+ width: 2px;
1504
+ height: 2px;
1505
+ margin: 0 8px;
1506
+ border-radius: 1px;
1507
+ background: #6f6f6f;
1508
+ }
1509
+ .row-summary {
1510
+ flex: 1 1 auto;
1511
+ min-width: 0;
1512
+ overflow: hidden;
1513
+ text-overflow: ellipsis;
1514
+ white-space: nowrap;
1515
+ font-size: 14px;
1516
+ line-height: 24px;
1517
+ color: #8b8b8b;
1518
+ }
1519
+ .row-summary.err { color: #e07070; }
1520
+ .row-body {
1521
+ margin: 4px 0 4px 22px;
1522
+ color: #8b8b8b;
1523
+ font-size: 14px;
1524
+ line-height: 24px;
1525
+ white-space: pre-wrap;
1526
+ word-break: break-word;
1527
+ }
1528
+ .row-card {
1529
+ margin: 4px 0 4px 4px;
1530
+ max-height: 260px;
1531
+ overflow: auto;
1532
+ border: 1px solid #2a2a2a;
1533
+ border-radius: 12px;
1534
+ background: #121212;
1535
+ padding: 10px 12px;
1536
+ color: #cfcfcf;
1537
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1538
+ font-size: 12px;
1539
+ line-height: 18px;
1540
+ white-space: pre-wrap;
1541
+ }
1542
+ .row-card.terminal { background: #0b0b0d; }
1543
+ .term-cmd {
1544
+ color: var(--steel);
1545
+ margin: 0 0 6px;
1546
+ white-space: pre-wrap;
1547
+ word-break: break-word;
1548
+ }
1549
+ .term-exit {
1550
+ display: inline-flex;
1551
+ margin: 0 0 8px;
1552
+ padding: 0.05rem 0.45rem;
1553
+ border-radius: 999px;
1554
+ background: #1c3324;
1555
+ color: #7dcc8a;
1556
+ font-size: 11px;
1557
+ }
1558
+ .term-exit.bad { background: #3a1518; color: #e07070; }
1559
+ .term-out {
1560
+ margin: 0;
1561
+ white-space: pre-wrap;
1562
+ word-break: break-word;
1563
+ font: inherit;
1564
+ color: #cfcfcf;
1565
+ }
1566
+ .row-card.read { padding: 6px 8px; }
1567
+ .read-line {
1568
+ display: grid;
1569
+ grid-template-columns: 2.6rem minmax(0, 1fr);
1570
+ gap: 0.55rem;
1571
+ white-space: pre-wrap;
1572
+ word-break: break-word;
1573
+ }
1574
+ .read-line .ln {
1575
+ color: #5a5a5a;
1576
+ text-align: right;
1577
+ user-select: none;
1578
+ }
1579
+ .read-line .lx { min-width: 0; }
1580
+ .row-card.diff { border-color: #2a3a2a; }
1581
+ .row-card.search { color: #c8c8c8; }
1582
+ .msg.bot.live .turn-live {
1583
+ align-self: stretch;
1584
+ max-width: 100%;
1585
+ margin-top: 4px;
1586
+ }
1587
+ .turn-live {
1588
+ align-self: stretch;
1589
+ display: flex;
1590
+ flex-direction: column;
1591
+ gap: 6px;
1592
+ max-width: 100%;
1593
+ }
1594
+ .turn-status {
1595
+ display: inline-flex;
1596
+ align-items: center;
1597
+ height: 26px;
1598
+ font-size: 14px;
1599
+ font-weight: 600;
1600
+ white-space: nowrap;
1601
+ background: linear-gradient(
1602
+ 90deg,
1603
+ #E8E4DC 0%,
1604
+ #E8E4DC 40%,
1605
+ #8B8F96 50%,
1606
+ #E8E4DC 60%,
1607
+ #E8E4DC 100%
1608
+ );
1609
+ background-position: 100% 0;
1610
+ background-size: 250% 100%;
1611
+ background-clip: text;
1612
+ -webkit-background-clip: text;
1613
+ color: transparent;
1614
+ animation: dsh-turn-shimmer 1.8s ease-in-out infinite;
1615
+ }
1616
+ .live-steps {
1617
+ margin: 0;
1618
+ padding: 0;
1619
+ list-style: none;
1620
+ display: flex;
1621
+ flex-direction: column;
1622
+ gap: 2px;
1623
+ }
1624
+ .live-step {
1625
+ display: grid;
1626
+ grid-template-columns: auto minmax(0, 1fr);
1627
+ gap: 8px;
1628
+ min-height: 20px;
1629
+ font-size: 13px;
1630
+ line-height: 20px;
1631
+ color: #8b8b8b;
1632
+ }
1633
+ .live-name {
1634
+ color: #cfcfcf;
1635
+ font-weight: 500;
1636
+ }
1637
+ .live-detail {
1638
+ overflow: hidden;
1639
+ text-overflow: ellipsis;
1640
+ white-space: nowrap;
1641
+ }
1642
+ .live-step.running .live-name {
1643
+ color: var(--text);
1644
+ }
1645
+ .live-step.steer .live-name {
1646
+ color: var(--steel);
1647
+ }
1648
+ .turn-actions {
1649
+ display: flex;
1650
+ flex-wrap: wrap;
1651
+ gap: 8px;
1652
+ margin-top: 8px;
1653
+ }
1654
+ .turn-actions button {
1655
+ height: 28px;
1656
+ padding: 0 10px;
1657
+ border: 1px solid #3a3a3a;
1658
+ border-radius: 8px;
1659
+ background: #1c1c1c;
1660
+ color: #ddd;
1661
+ font: inherit;
1662
+ font-size: 12px;
1663
+ line-height: 28px;
1664
+ cursor: pointer;
1665
+ }
1666
+ .turn-actions button:hover {
1667
+ border-color: #555;
1668
+ color: #fff;
1669
+ }
1670
+ .turn-actions .turn-stop {
1671
+ color: #e8b4b4;
1672
+ }
1673
+ .turn-actions .turn-steer {
1674
+ color: #b4c8e8;
1675
+ }
1676
+ body.grok .turn-actions button {
1677
+ border-color: #3a3228;
1678
+ background: #1c1814;
1679
+ color: #ddd4c8;
1680
+ }
1681
+ body.grok .turn-actions button:hover {
1682
+ border-color: #6a5a48;
1683
+ color: #f2eadf;
1684
+ }
1685
+ body.grok .turn-actions .turn-stop { color: #d4a090; }
1686
+ body.grok .turn-actions .turn-steer { color: #c4b090; }
1687
+ .turn-status .clock {
1688
+ margin-left: 8px;
1689
+ font-size: 13px;
1690
+ font-weight: 400;
1691
+ font-variant-numeric: tabular-nums;
1692
+ color: #6f6f6f;
1693
+ -webkit-text-fill-color: #6f6f6f;
1694
+ }
1695
+ @keyframes dsh-turn-shimmer {
1696
+ to { background-position: 0 0; }
1697
+ }
1698
+ @media (prefers-reduced-motion: reduce) {
1699
+ .dsh-row[data-state="running"] > summary::after,
1700
+ .turn-status { animation: none; }
1701
+ .turn-status { color: var(--text); background: none; }
1702
+ }
1703
+ .msg-actions {
1704
+ display: flex;
1705
+ gap: 0.15rem;
1706
+ margin: 6px 0 0;
1707
+ opacity: 0;
1708
+ }
1709
+ .msg:hover .msg-actions, .msg:focus-within .msg-actions, .msg-actions.on { opacity: 1; }
1710
+ .msg.bot .msg-actions { opacity: 1; }
1711
+ .msg.you .msg-actions { justify-content: flex-end; }
1712
+ .msg-actions button {
1713
+ margin: 0;
1714
+ padding: 0.15rem 0.4rem;
1715
+ border: 0;
1716
+ border-radius: 8px;
1717
+ background: transparent;
1718
+ color: var(--muted);
1719
+ font: inherit;
1720
+ font-size: 0.72rem;
1721
+ cursor: pointer;
1722
+ }
1723
+ .msg-actions button:hover { background: #1c1c1c; color: var(--text); }
1724
+ .msg-actions button.danger:hover { color: #f0a8a8; }
1725
+ .toast {
1726
+ position: fixed;
1727
+ left: calc(var(--sidebar-w, 292px) + (100vw - var(--sidebar-w, 292px)) / 2);
1728
+ bottom: 1.35rem;
1729
+ z-index: 80;
1730
+ transform: translateX(-50%) translateY(6px);
1731
+ padding: 0.5rem 0.95rem;
1732
+ border-radius: 999px;
1733
+ background: var(--paper);
1734
+ color: var(--ink);
1735
+ font-size: 0.86rem;
1736
+ font-weight: 560;
1737
+ box-shadow: 0 8px 28px #0008;
1738
+ pointer-events: none;
1739
+ opacity: 0;
1740
+ visibility: hidden;
1741
+ transition: opacity 0.16s ease, transform 0.16s ease, visibility 0.16s ease;
1742
+ }
1743
+ .toast.on {
1744
+ opacity: 1;
1745
+ visibility: visible;
1746
+ transform: translateX(-50%) translateY(0);
1747
+ }
1748
+ @media (prefers-reduced-motion: reduce) {
1749
+ .toast { transition: none; transform: translateX(-50%); }
1750
+ }
1751
+ .stats-ico {
1752
+ display: inline-grid;
1753
+ place-items: center;
1754
+ width: 28px;
1755
+ height: 22px;
1756
+ margin: 8px 0 0;
1757
+ padding: 0;
1758
+ border: 1px solid #2a2a2a;
1759
+ border-radius: 6px;
1760
+ background: #141414;
1761
+ color: #8b8b8b;
1762
+ cursor: pointer;
1763
+ flex: none;
1764
+ }
1765
+ .stats-ico:hover,
1766
+ .stats-ico.on {
1767
+ color: var(--text);
1768
+ border-color: #3a3a3a;
1769
+ background: #1c1c1c;
1770
+ }
1771
+ .stats-panel {
1772
+ margin: 0.4rem 0 0.15rem;
1773
+ padding: 0.7rem 0.85rem 0.8rem;
1774
+ border-radius: 14px;
1775
+ background: #161616;
1776
+ border: 1px solid #242424;
1777
+ max-width: 100%;
1778
+ }
1779
+ .stats-kicker {
1780
+ font-size: 0.68rem;
1781
+ letter-spacing: 0.08em;
1782
+ text-transform: uppercase;
1783
+ color: #8b8b8b;
1784
+ margin: 0 0 0.55rem;
1785
+ }
1786
+ .stats-grid {
1787
+ display: grid;
1788
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1789
+ gap: 0.7rem 1rem;
1790
+ }
1791
+ .stats-cell span {
1792
+ display: block;
1793
+ font-size: 0.72rem;
1794
+ color: #8b8b8b;
1795
+ margin-bottom: 0.18rem;
1796
+ }
1797
+ .stats-cell b {
1798
+ display: block;
1799
+ font-size: 0.95rem;
1800
+ font-weight: 600;
1801
+ color: var(--text);
1802
+ overflow: hidden;
1803
+ text-overflow: ellipsis;
1804
+ white-space: nowrap;
1805
+ }
1806
+ .stats-cell em {
1807
+ display: block;
1808
+ margin-top: 0.15rem;
1809
+ font-style: normal;
1810
+ font-size: 0.72rem;
1811
+ color: #7a7a7a;
1812
+ overflow: hidden;
1813
+ text-overflow: ellipsis;
1814
+ white-space: nowrap;
1815
+ }
1816
+ @media (max-width: 560px) {
1817
+ .stats-grid { grid-template-columns: 1fr; }
1818
+ }
1819
+ .edit-draft {
1820
+ width: var(--you-max);
1821
+ min-height: 4.5rem;
1822
+ margin: 0;
1823
+ padding: 10px 16px;
1824
+ border: 1px solid #3a3a3a;
1825
+ border-radius: 22px;
1826
+ background: var(--you);
1827
+ color: var(--text);
1828
+ font: inherit;
1829
+ line-height: 24px;
1830
+ resize: vertical;
1831
+ }
1832
+ .empty-thread {
1833
+ color: var(--muted);
1834
+ text-align: center;
1835
+ padding: 4rem 1rem;
1836
+ font-size: 0.9rem;
1837
+ }
1838
+ .empty-thread.setup-thread {
1839
+ text-align: left;
1840
+ max-width: 28rem;
1841
+ margin: 3rem auto;
1842
+ padding: 1.15rem 1.1rem 1.2rem;
1843
+ border: 1px solid var(--line);
1844
+ background: var(--panel);
1845
+ color: var(--text);
1846
+ }
1847
+ .setup-kicker {
1848
+ margin: 0 0 6px;
1849
+ font-size: 10px;
1850
+ letter-spacing: 0.08em;
1851
+ text-transform: uppercase;
1852
+ color: var(--muted);
1853
+ }
1854
+ .setup-title {
1855
+ margin: 0 0 8px;
1856
+ font-weight: 650;
1857
+ }
1858
+ .setup-body {
1859
+ margin: 0 0 14px;
1860
+ color: var(--muted);
1861
+ font-size: 0.9rem;
1862
+ }
1863
+ .setup-acts {
1864
+ display: flex;
1865
+ flex-wrap: wrap;
1866
+ gap: 8px;
1867
+ margin: 0;
1868
+ }
1869
+ .setup-acts a {
1870
+ display: inline-block;
1871
+ padding: 6px 10px;
1872
+ border: 1px solid var(--line);
1873
+ color: inherit;
1874
+ text-decoration: none;
1875
+ font-size: 13px;
1876
+ }
1877
+ .setup-acts a:hover {
1878
+ border-color: var(--text);
1879
+ }
1880
+
1881
+ .composer {
1882
+ position: sticky;
1883
+ bottom: 0;
1884
+ z-index: 7;
1885
+ display: flex;
1886
+ justify-content: center;
1887
+ padding: 0 max(var(--thread-gutter), calc((100% - var(--thread-max)) / 2)) 8px;
1888
+ background: linear-gradient(
1889
+ 180deg,
1890
+ color-mix(in srgb, var(--bg) 0%, transparent) 0px,
1891
+ var(--bg) 36px
1892
+ );
1893
+ overflow: visible;
1894
+ }
1895
+ .composer-card {
1896
+ box-sizing: border-box;
1897
+ position: relative;
1898
+ display: flex;
1899
+ flex-direction: column;
1900
+ gap: 12px;
1901
+ width: 100%;
1902
+ max-width: var(--thread-max);
1903
+ padding-top: 10px;
1904
+ border: 1px solid var(--line);
1905
+ border-radius: 22px;
1906
+ background: var(--panel);
1907
+ box-shadow: 0 8px 28px #0008;
1908
+ }
1909
+ .composer.drop-on .composer-card {
1910
+ border-color: var(--steel);
1911
+ box-shadow: 0 0 0 1px var(--steel), 0 8px 28px #0008;
1912
+ }
1913
+ .composer.drop-on .composer-card::after {
1914
+ content: attr(data-drop-hint);
1915
+ position: absolute;
1916
+ inset: 0;
1917
+ z-index: 4;
1918
+ display: flex;
1919
+ align-items: center;
1920
+ justify-content: center;
1921
+ border-radius: 22px;
1922
+ background: color-mix(in srgb, var(--panel) 90%, transparent);
1923
+ color: var(--text);
1924
+ font-size: 14px;
1925
+ pointer-events: none;
1926
+ }
1927
+ body.grok .composer.drop-on .composer-card {
1928
+ border-color: var(--steel);
1929
+ box-shadow: 0 0 0 1px var(--steel), 0 8px 28px #0008;
1930
+ }
1931
+ body.grok .composer.drop-on .composer-card::after {
1932
+ background: color-mix(in srgb, var(--panel) 90%, transparent);
1933
+ color: var(--text);
1934
+ }
1935
+ .composer-reply {
1936
+ display: flex;
1937
+ align-items: center;
1938
+ gap: 8px;
1939
+ min-width: 0;
1940
+ margin: 2px 12px 0;
1941
+ padding: 6px 8px 6px 10px;
1942
+ border-radius: 12px;
1943
+ background: #1c1c1c;
1944
+ color: #c8c8c8;
1945
+ font-size: 13px;
1946
+ line-height: 18px;
1947
+ }
1948
+ .composer-reply[hidden] { display: none; }
1949
+ .composer-reply-arrow {
1950
+ flex: none;
1951
+ display: inline-flex;
1952
+ color: #8b8b8b;
1953
+ }
1954
+ .composer-reply-text {
1955
+ flex: 1;
1956
+ min-width: 0;
1957
+ overflow: hidden;
1958
+ text-overflow: ellipsis;
1959
+ white-space: nowrap;
1960
+ }
1961
+ .composer-reply-clear {
1962
+ flex: none;
1963
+ width: 22px;
1964
+ height: 22px;
1965
+ margin: 0;
1966
+ padding: 0;
1967
+ border: 0;
1968
+ border-radius: 999px;
1969
+ background: transparent;
1970
+ color: #8b8b8b;
1971
+ font-size: 16px;
1972
+ line-height: 1;
1973
+ cursor: pointer;
1974
+ }
1975
+ .composer-reply-clear:hover { background: #2a2a2a; color: #fff; }
1976
+ .mention-pop {
1977
+ position: absolute;
1978
+ left: 0;
1979
+ right: 0;
1980
+ bottom: calc(100% + 8px);
1981
+ max-height: 280px;
1982
+ overflow: auto;
1983
+ background: #171717;
1984
+ border: 1px solid #2c2c2c;
1985
+ border-radius: 14px;
1986
+ box-shadow: 0 16px 40px #000c;
1987
+ z-index: 30;
1988
+ }
1989
+ .mention-pop.is-slash {
1990
+ max-height: min(360px, 52vh);
1991
+ }
1992
+ .mention-sec {
1993
+ padding: 0.55rem 0.85rem 0.2rem;
1994
+ color: #8d8d8d;
1995
+ font-size: 0.68rem;
1996
+ font-weight: 650;
1997
+ letter-spacing: 0.06em;
1998
+ text-transform: uppercase;
1999
+ }
2000
+ .mention-sec:first-child { padding-top: 0.4rem; }
2001
+ .mention-empty {
2002
+ padding: 0.7rem 0.85rem 0.85rem;
2003
+ color: #8d8d8d;
2004
+ font-size: 0.82rem;
2005
+ }
2006
+ .mention-pop.on-edit {
2007
+ position: fixed;
2008
+ right: auto;
2009
+ z-index: 40;
2010
+ }
2011
+ .mention-pop[hidden] { display: none; }
2012
+ .mention-item {
2013
+ display: flex;
2014
+ align-items: center;
2015
+ gap: 0.65rem;
2016
+ width: 100%;
2017
+ margin: 0;
2018
+ padding: 0.5rem 0.8rem;
2019
+ border: 0;
2020
+ background: transparent;
2021
+ color: var(--text);
2022
+ text-align: left;
2023
+ font: inherit;
2024
+ cursor: pointer;
2025
+ }
2026
+ .mention-item:hover, .mention-item.on { background: #2a2a2a; }
2027
+ .mention-item strong { display: block; font-size: 0.9rem; font-weight: 560; }
2028
+ .mention-item em {
2029
+ display: block;
2030
+ font-style: normal;
2031
+ color: #8d8d8d;
2032
+ font-size: 0.75rem;
2033
+ }
2034
+ .mention-item .out {
2035
+ margin-left: auto;
2036
+ color: #8d8d8d;
2037
+ font-size: 0.72rem;
2038
+ flex: none;
2039
+ }
2040
+ .mention-glyph {
2041
+ width: 28px;
2042
+ height: 28px;
2043
+ border-radius: 50%;
2044
+ display: grid;
2045
+ place-items: center;
2046
+ background: #222;
2047
+ color: #cfcfcf;
2048
+ font-size: 0.78rem;
2049
+ flex: none;
2050
+ overflow: hidden;
2051
+ }
2052
+ .composer-scroll { max-height: 336px; overflow-y: auto; }
2053
+ .composer textarea {
2054
+ display: block;
2055
+ width: 100%;
2056
+ border: 0;
2057
+ resize: none;
2058
+ min-height: 28px;
2059
+ max-height: 336px;
2060
+ padding: 4px 12px 0 16px;
2061
+ background: transparent;
2062
+ color: var(--text);
2063
+ font: inherit;
2064
+ font-size: 16px;
2065
+ line-height: 24px;
2066
+ outline: none;
2067
+ overflow-y: hidden;
2068
+ white-space: pre-wrap;
2069
+ word-break: break-word;
2070
+ }
2071
+ .composer textarea::placeholder { color: #6f6f6f; }
2072
+ .composer-row {
2073
+ display: flex;
2074
+ align-items: center;
2075
+ justify-content: space-between;
2076
+ gap: 12px;
2077
+ padding: 2px 8px 6px;
2078
+ min-width: 0;
2079
+ }
2080
+ .composer-tools {
2081
+ display: flex;
2082
+ align-items: center;
2083
+ gap: 12px;
2084
+ min-width: 0;
2085
+ }
2086
+ .composer-add {
2087
+ display: grid;
2088
+ place-items: center;
2089
+ width: 28px;
2090
+ height: 28px;
2091
+ margin: 0;
2092
+ border: 0;
2093
+ border-radius: 999px;
2094
+ background: #2a2a2a;
2095
+ color: var(--text);
2096
+ font-size: 1.05rem;
2097
+ line-height: 1;
2098
+ cursor: pointer;
2099
+ }
2100
+ .composer-add:hover { background: #333; }
2101
+ .attach-wrap { position: relative; flex: none; }
2102
+ .attach-pop {
2103
+ position: absolute;
2104
+ left: 0;
2105
+ bottom: calc(100% + 10px);
2106
+ z-index: 40;
2107
+ width: 220px;
2108
+ padding: 6px;
2109
+ border: 1px solid #2c2c2c;
2110
+ border-radius: 14px;
2111
+ background: #1a1a1a;
2112
+ box-shadow: 0 16px 40px #000c;
2113
+ }
2114
+ .attach-pop[hidden],
2115
+ .attach-sheet[hidden],
2116
+ .attach-chips[hidden] { display: none; }
2117
+ .attach-item {
2118
+ display: flex;
2119
+ align-items: center;
2120
+ gap: 10px;
2121
+ width: 100%;
2122
+ margin: 0;
2123
+ padding: 8px 10px;
2124
+ border: 0;
2125
+ border-radius: 8px;
2126
+ background: transparent;
2127
+ color: #eee;
2128
+ font: inherit;
2129
+ font-size: 14px;
2130
+ line-height: 20px;
2131
+ text-align: left;
2132
+ cursor: pointer;
2133
+ }
2134
+ .attach-item:hover { background: #2a2a2a; }
2135
+ .attach-ico {
2136
+ width: 18px;
2137
+ color: #9a9a9a;
2138
+ font-size: 12px;
2139
+ text-align: center;
2140
+ flex: none;
2141
+ }
2142
+ .attach-chips {
2143
+ display: flex;
2144
+ flex-wrap: wrap;
2145
+ gap: 6px;
2146
+ margin: 0 12px;
2147
+ }
2148
+ .queue-chips {
2149
+ display: flex;
2150
+ flex-direction: column;
2151
+ gap: 6px;
2152
+ margin: 8px 12px 0;
2153
+ }
2154
+ .queue-chips[hidden] { display: none; }
2155
+ .queue-chip {
2156
+ display: flex;
2157
+ align-items: center;
2158
+ width: 100%;
2159
+ max-width: none;
2160
+ margin: 0;
2161
+ padding: 6px 4px 6px 10px;
2162
+ border: 1px solid #333;
2163
+ border-radius: 10px;
2164
+ background: #1a1a1a;
2165
+ color: #c8c8c8;
2166
+ font: inherit;
2167
+ font-size: 12px;
2168
+ line-height: 18px;
2169
+ }
2170
+ .queue-chip .queue-kind {
2171
+ flex: none;
2172
+ margin-right: 8px;
2173
+ color: var(--muted);
2174
+ }
2175
+ .queue-chip .queue-to {
2176
+ display: inline-flex;
2177
+ align-items: center;
2178
+ gap: 6px;
2179
+ flex: none;
2180
+ margin-right: 8px;
2181
+ color: var(--steel);
2182
+ }
2183
+ .queue-avs {
2184
+ display: inline-flex;
2185
+ align-items: center;
2186
+ }
2187
+ .queue-av {
2188
+ width: 18px;
2189
+ height: 18px;
2190
+ border-radius: 50%;
2191
+ display: grid;
2192
+ place-items: center;
2193
+ color: #fff;
2194
+ font-size: 9px;
2195
+ font-weight: 700;
2196
+ line-height: 1;
2197
+ margin-left: -5px;
2198
+ overflow: hidden;
2199
+ box-shadow: 0 0 0 1px var(--bg);
2200
+ }
2201
+ .queue-avs .queue-av:first-child { margin-left: 0; }
2202
+ .queue-chip .queue-preview {
2203
+ min-width: 0;
2204
+ flex: 1;
2205
+ overflow: hidden;
2206
+ text-overflow: ellipsis;
2207
+ white-space: nowrap;
2208
+ }
2209
+ .queue-chip button {
2210
+ flex: none;
2211
+ width: 22px;
2212
+ height: 22px;
2213
+ margin: 0 0 0 4px;
2214
+ padding: 0;
2215
+ border: 0;
2216
+ border-radius: 999px;
2217
+ background: transparent;
2218
+ color: #8b8b8b;
2219
+ font: inherit;
2220
+ font-size: 14px;
2221
+ line-height: 1;
2222
+ cursor: pointer;
2223
+ }
2224
+ .queue-chip button:hover { color: #fff; }
2225
+ .composer-steer {
2226
+ margin: 6px 16px 0;
2227
+ color: #6f6f6f;
2228
+ font-size: 12px;
2229
+ line-height: 16px;
2230
+ }
2231
+ .composer-steer.ok { color: #9fdfb2; }
2232
+ .composer-steer[hidden] { display: none; }
2233
+ .attach-chip {
2234
+ display: inline-flex;
2235
+ align-items: center;
2236
+ max-width: 240px;
2237
+ margin: 0;
2238
+ padding: 0;
2239
+ border: 1px solid #3a3a3a;
2240
+ border-radius: 999px;
2241
+ background: #1c1c1c;
2242
+ color: #ddd;
2243
+ font: inherit;
2244
+ font-size: 12px;
2245
+ line-height: 1;
2246
+ }
2247
+ .attach-chip-name,
2248
+ .attach-chip > span {
2249
+ overflow: hidden;
2250
+ text-overflow: ellipsis;
2251
+ white-space: nowrap;
2252
+ margin: 0;
2253
+ padding: 6px 4px 6px 10px;
2254
+ border: 0;
2255
+ background: transparent;
2256
+ color: inherit;
2257
+ font: inherit;
2258
+ font-size: 12px;
2259
+ cursor: pointer;
2260
+ }
2261
+ .attach-chip-x {
2262
+ margin: 0;
2263
+ padding: 6px 10px 6px 4px;
2264
+ border: 0;
2265
+ background: transparent;
2266
+ color: #9a9a9a;
2267
+ font: inherit;
2268
+ font-size: 13px;
2269
+ cursor: pointer;
2270
+ }
2271
+ .attach-chip:hover { background: #2a2a2a; }
2272
+ .attach-chip-x:hover { color: #fff; }
2273
+ .attach-chip.has-preview { padding-left: 3px; }
2274
+ .attach-thumb {
2275
+ width: 22px;
2276
+ height: 22px;
2277
+ margin: 3px 0 3px 3px;
2278
+ object-fit: cover;
2279
+ border-radius: 50%;
2280
+ flex: none;
2281
+ background: #111;
2282
+ }
2283
+ .img-preview {
2284
+ position: fixed;
2285
+ z-index: 80;
2286
+ pointer-events: none;
2287
+ padding: 4px;
2288
+ background: #141414;
2289
+ border: 1px solid #333;
2290
+ border-radius: 12px;
2291
+ box-shadow: 0 16px 40px #000c;
2292
+ }
2293
+ .img-preview[hidden] { display: none; }
2294
+ .img-preview img {
2295
+ display: block;
2296
+ max-width: min(240px, 70vw);
2297
+ max-height: min(180px, 40vh);
2298
+ border-radius: 8px;
2299
+ }
2300
+ .att-token[data-preview] {
2301
+ cursor: zoom-in;
2302
+ }
2303
+ .att-token.has-preview {
2304
+ display: inline-flex;
2305
+ align-items: center;
2306
+ gap: 0.35em;
2307
+ padding: 0.12em 0.4em 0.12em 0.18em;
2308
+ }
2309
+ .att-inline {
2310
+ width: 22px;
2311
+ height: 22px;
2312
+ object-fit: cover;
2313
+ border-radius: 4px;
2314
+ flex: none;
2315
+ background: #111;
2316
+ }
2317
+ .msg.you .msg-imgs {
2318
+ display: flex;
2319
+ flex-direction: column;
2320
+ align-items: flex-end;
2321
+ gap: 6px;
2322
+ max-width: var(--you-max);
2323
+ margin: 0 0 6px;
2324
+ }
2325
+ .msg-img {
2326
+ display: block;
2327
+ margin: 0;
2328
+ padding: 0;
2329
+ border: 1px solid #2c2c2c;
2330
+ border-radius: 14px;
2331
+ background: #111;
2332
+ overflow: hidden;
2333
+ cursor: pointer;
2334
+ }
2335
+ .msg-img img {
2336
+ display: block;
2337
+ max-width: min(280px, 72vw);
2338
+ max-height: 220px;
2339
+ object-fit: contain;
2340
+ }
2341
+ .msg.you .msg-atts {
2342
+ display: flex;
2343
+ flex-wrap: wrap;
2344
+ justify-content: flex-end;
2345
+ gap: 6px;
2346
+ max-width: var(--you-max);
2347
+ margin: 0 0 6px;
2348
+ }
2349
+ .msg .att-token {
2350
+ padding: 0 0.2em;
2351
+ border-radius: 4px;
2352
+ background: #2a2a2a;
2353
+ color: #cfcfcf;
2354
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
2355
+ font-size: 0.9em;
2356
+ }
2357
+ .attach-sheet {
2358
+ position: absolute;
2359
+ left: 0;
2360
+ right: 0;
2361
+ bottom: calc(100% + 8px);
2362
+ z-index: 41;
2363
+ max-height: 320px;
2364
+ overflow: auto;
2365
+ padding: 8px;
2366
+ border: 1px solid #2c2c2c;
2367
+ border-radius: 14px;
2368
+ background: #171717;
2369
+ box-shadow: 0 16px 40px #000c;
2370
+ }
2371
+ .attach-sheet-bar {
2372
+ display: flex;
2373
+ align-items: center;
2374
+ gap: 8px;
2375
+ padding: 2px 4px 8px;
2376
+ color: #ddd;
2377
+ font-size: 13px;
2378
+ }
2379
+ .attach-back {
2380
+ width: 24px;
2381
+ height: 24px;
2382
+ margin: 0;
2383
+ padding: 0;
2384
+ border: 0;
2385
+ border-radius: 8px;
2386
+ background: transparent;
2387
+ color: #ddd;
2388
+ font-size: 18px;
2389
+ cursor: pointer;
2390
+ }
2391
+ .attach-back:hover { background: #2a2a2a; }
2392
+ .attach-q {
2393
+ width: 100%;
2394
+ margin: 0 0 8px;
2395
+ padding: 6px 10px;
2396
+ border: 0;
2397
+ border-radius: 8px;
2398
+ background: #222;
2399
+ color: var(--text);
2400
+ font: inherit;
2401
+ font-size: 13px;
2402
+ }
2403
+ .attach-path {
2404
+ margin: 0 4px 8px;
2405
+ color: #8b8b8b;
2406
+ font-size: 11px;
2407
+ overflow: hidden;
2408
+ text-overflow: ellipsis;
2409
+ white-space: nowrap;
2410
+ }
2411
+ .attach-row {
2412
+ display: flex;
2413
+ align-items: center;
2414
+ gap: 8px;
2415
+ width: 100%;
2416
+ margin: 0;
2417
+ padding: 7px 8px;
2418
+ border: 0;
2419
+ border-radius: 8px;
2420
+ background: transparent;
2421
+ color: var(--text);
2422
+ font: inherit;
2423
+ font-size: 13px;
2424
+ text-align: left;
2425
+ cursor: pointer;
2426
+ }
2427
+ .attach-row:hover { background: #2a2a2a; }
2428
+ .attach-row em {
2429
+ margin-left: auto;
2430
+ color: #8b8b8b;
2431
+ font-style: normal;
2432
+ font-size: 11px;
2433
+ }
2434
+ .attach-term {
2435
+ display: flex;
2436
+ gap: 6px;
2437
+ padding: 4px;
2438
+ }
2439
+ .attach-term input {
2440
+ flex: 1;
2441
+ margin: 0;
2442
+ padding: 8px 10px;
2443
+ border: 0;
2444
+ border-radius: 8px;
2445
+ background: #222;
2446
+ color: var(--text);
2447
+ font: inherit;
2448
+ font-size: 13px;
2449
+ }
2450
+ .attach-term button {
2451
+ margin: 0;
2452
+ padding: 0 12px;
2453
+ border: 0;
2454
+ border-radius: 8px;
2455
+ background: #2a2a2a;
2456
+ color: var(--text);
2457
+ font: inherit;
2458
+ cursor: pointer;
2459
+ }
2460
+ .primary {
2461
+ display: grid;
2462
+ place-items: center;
2463
+ flex: none;
2464
+ width: 34px;
2465
+ height: 34px;
2466
+ margin: 0 2px 2px 0;
2467
+ border: 0;
2468
+ border-radius: 999px;
2469
+ background: var(--paper);
2470
+ color: var(--ink);
2471
+ cursor: pointer;
2472
+ }
2473
+ .primary:hover:not(:disabled) { background: #F7F1E4; }
2474
+ .primary:disabled { opacity: 0.4; cursor: default; }
2475
+ .primary.stopping { background: var(--paper); }
2476
+ .primary .icon-stop { display: none; }
2477
+ .primary.stopping .icon-send { display: none; }
2478
+ .primary.stopping .icon-stop { display: block; }
2479
+ .model-wrap { position: relative; flex: 0 0 auto; }
2480
+ .model-wrap[hidden] { display: none; }
2481
+ .model-btn {
2482
+ display: inline-flex;
2483
+ align-items: center;
2484
+ gap: 0.35rem;
2485
+ max-width: 14rem;
2486
+ margin: 0;
2487
+ padding: 0.38rem 0.7rem 0.38rem 0.9rem;
2488
+ border: 0;
2489
+ border-radius: 999px;
2490
+ background: #2a2a2a;
2491
+ color: var(--text);
2492
+ font-size: 0.82rem;
2493
+ cursor: pointer;
2494
+ white-space: nowrap;
2495
+ }
2496
+ .model-btn #model-btn-label {
2497
+ overflow: hidden;
2498
+ text-overflow: ellipsis;
2499
+ }
2500
+ .model-caret { color: #8d8d8d; font-size: 0.7rem; }
2501
+ .model-pop {
2502
+ position: absolute;
2503
+ left: 0;
2504
+ bottom: calc(100% + 8px);
2505
+ display: flex;
2506
+ flex-direction: row;
2507
+ align-items: stretch;
2508
+ width: min(520px, 94vw);
2509
+ max-height: 380px;
2510
+ background: #2c2c2c;
2511
+ border: 0;
2512
+ border-radius: 14px;
2513
+ box-shadow: 0 16px 40px #000c;
2514
+ overflow: hidden;
2515
+ z-index: 40;
2516
+ }
2517
+ .model-pop[hidden] { display: none !important; }
2518
+ .model-nav {
2519
+ flex: none;
2520
+ width: 168px;
2521
+ padding: 6px 0;
2522
+ border-right: 1px solid #3a3a3a;
2523
+ }
2524
+ .model-panes {
2525
+ flex: 1;
2526
+ min-width: 0;
2527
+ overflow: hidden;
2528
+ display: flex;
2529
+ flex-direction: column;
2530
+ padding: 6px 0 8px;
2531
+ }
2532
+ .model-pane {
2533
+ display: flex;
2534
+ flex-direction: column;
2535
+ min-height: 0;
2536
+ flex: 1;
2537
+ }
2538
+ .model-pane[hidden] { display: none !important; }
2539
+ .model-search {
2540
+ display: flex;
2541
+ align-items: center;
2542
+ gap: 8px;
2543
+ flex: none;
2544
+ margin: 2px 10px 8px;
2545
+ padding: 0 10px;
2546
+ height: 34px;
2547
+ border-radius: 10px;
2548
+ background: #1c1c1c;
2549
+ color: #9a9a9a;
2550
+ }
2551
+ .model-search-ico { display: inline-flex; flex: none; }
2552
+ .model-search input {
2553
+ flex: 1;
2554
+ min-width: 0;
2555
+ margin: 0;
2556
+ padding: 0;
2557
+ border: 0;
2558
+ background: transparent;
2559
+ color: var(--text);
2560
+ font: inherit;
2561
+ font-size: 13px;
2562
+ outline: none;
2563
+ }
2564
+ .model-search input::placeholder { color: #777; }
2565
+ .model-sec {
2566
+ color: #8a8a8a;
2567
+ font-size: 11px;
2568
+ letter-spacing: 0.04em;
2569
+ padding: 4px 14px 2px;
2570
+ }
2571
+ .model-row {
2572
+ display: flex;
2573
+ align-items: center;
2574
+ gap: 0.4rem;
2575
+ width: 100%;
2576
+ margin: 0;
2577
+ padding: 0.62rem 0.85rem;
2578
+ border: 0;
2579
+ background: transparent;
2580
+ color: var(--text);
2581
+ font: inherit;
2582
+ font-size: 0.9rem;
2583
+ cursor: pointer;
2584
+ text-align: left;
2585
+ }
2586
+ .model-row:hover, .model-row.on { background: #3a3a3a; }
2587
+ .model-row > span:first-child { flex: none; }
2588
+ .model-row-val {
2589
+ margin-left: auto;
2590
+ color: #9a9a9a;
2591
+ font-size: 0.86rem;
2592
+ max-width: 5.6rem;
2593
+ overflow: hidden;
2594
+ text-overflow: ellipsis;
2595
+ white-space: nowrap;
2596
+ }
2597
+ .model-row-chev { color: #7a7a7a; font-size: 0.95rem; }
2598
+ #model-results {
2599
+ flex: 1;
2600
+ min-height: 0;
2601
+ overflow: auto;
2602
+ padding: 0;
2603
+ }
2604
+ .model-empty { color: #8a8a8a; font-size: 0.82rem; padding: 0.85rem 0.9rem; }
2605
+ .model-choice {
2606
+ display: flex;
2607
+ align-items: center;
2608
+ gap: 8px;
2609
+ width: 100%;
2610
+ margin: 0;
2611
+ padding: 0.5rem 0.95rem;
2612
+ border: 0;
2613
+ background: transparent;
2614
+ color: var(--text);
2615
+ font: inherit;
2616
+ font-size: 0.9rem;
2617
+ cursor: pointer;
2618
+ text-align: left;
2619
+ text-decoration: none;
2620
+ }
2621
+ .model-choice:hover, .model-choice.on { background: #3a3a3a; }
2622
+ .model-choice.locked { opacity: 0.5; }
2623
+ .model-choice .glyph {
2624
+ flex: none;
2625
+ width: 1.1rem;
2626
+ text-align: center;
2627
+ color: #c9c9c9;
2628
+ }
2629
+ .model-choice .glyph.claude { color: #e8a07a; }
2630
+ .model-choice .glyph.openai { color: #9ad5c0; }
2631
+ .model-choice .glyph.grok { color: #d0d0d0; }
2632
+ .model-choice .glyph.gemini { color: var(--steel); }
2633
+ .model-choice-name {
2634
+ flex: 1 1 auto;
2635
+ min-width: 0;
2636
+ overflow: hidden;
2637
+ text-overflow: ellipsis;
2638
+ white-space: nowrap;
2639
+ }
2640
+ .model-choice .tick {
2641
+ margin-left: auto;
2642
+ color: #cfcfcf;
2643
+ }
2644
+ .composer-bar { display: none; }
2645
+
2646
+ dialog {
2647
+ border: 0;
2648
+ border-radius: 16px;
2649
+ padding: 1.1rem 1.2rem 1.2rem;
2650
+ width: min(28rem, calc(100vw - 2rem));
2651
+ background: #141414;
2652
+ color: var(--text);
2653
+ box-shadow: 0 12px 40px #000a;
2654
+ }
2655
+ dialog::backdrop { background: #0009; }
2656
+ dialog h2 { margin: 0 0 0.4rem; font-size: 1.05rem; }
2657
+ dialog p { margin: 0 0 0.8rem; color: var(--muted); font-size: 0.9rem; }
2658
+ .pick {
2659
+ display: grid;
2660
+ gap: 0.35rem;
2661
+ max-height: 16rem;
2662
+ overflow: auto;
2663
+ margin-bottom: 0.9rem;
2664
+ }
2665
+ .pick label {
2666
+ display: flex;
2667
+ gap: 0.55rem;
2668
+ align-items: center;
2669
+ margin: 0;
2670
+ padding: 0.45rem;
2671
+ border-radius: 10px;
2672
+ color: var(--text);
2673
+ }
2674
+ .pick label:hover { background: #1c1c1c; }
2675
+ .pick input { width: auto; }
2676
+ #channel-md { width: min(40rem, calc(100vw - 2rem)); }
2677
+ #channel-md label {
2678
+ display: block;
2679
+ margin: 0 0 0.3rem;
2680
+ color: var(--muted);
2681
+ font-size: 0.82rem;
2682
+ }
2683
+ #channel-md-name {
2684
+ display: block;
2685
+ width: 100%;
2686
+ margin: 0 0 1rem;
2687
+ padding: 0.55rem 0.75rem;
2688
+ border: 1px solid #2a2a2a;
2689
+ border-radius: 12px;
2690
+ background: #0e0e0e;
2691
+ color: var(--text);
2692
+ font: inherit;
2693
+ font-size: 0.95rem;
2694
+ }
2695
+ #channel-md-name:disabled {
2696
+ opacity: 0.55;
2697
+ }
2698
+ #channel-md-body,
2699
+ #channel-memory-body,
2700
+ #bot-memory-body {
2701
+ display: block;
2702
+ width: 100%;
2703
+ min-height: 8rem;
2704
+ margin: 0 0 0.9rem;
2705
+ padding: 0.65rem 0.75rem;
2706
+ border: 1px solid #2a2a2a;
2707
+ border-radius: 12px;
2708
+ background: #0e0e0e;
2709
+ color: var(--text);
2710
+ font: inherit;
2711
+ font-size: 0.88rem;
2712
+ line-height: 1.45;
2713
+ resize: vertical;
2714
+ }
2715
+ #bot-memory { width: min(36rem, calc(100vw - 2rem)); }
2716
+ #bot-memory-body { min-height: 12rem; }
2717
+ .assign-list {
2718
+ display: grid;
2719
+ gap: 0.35rem;
2720
+ max-height: 18rem;
2721
+ overflow: auto;
2722
+ margin: 0 0 0.9rem;
2723
+ }
2724
+ .assign-list button {
2725
+ display: flex;
2726
+ align-items: center;
2727
+ gap: 0.7rem;
2728
+ width: 100%;
2729
+ margin: 0;
2730
+ padding: 0.55rem 0.7rem;
2731
+ border: 1px solid #2a2a2a;
2732
+ border-radius: 12px;
2733
+ background: #1a1a1a;
2734
+ color: var(--text);
2735
+ font: inherit;
2736
+ text-align: left;
2737
+ cursor: pointer;
2738
+ }
2739
+ .assign-list button:hover { background: #222; border-color: #3a3a3a; }
2740
+ .assign-list .assign-copy {
2741
+ display: flex;
2742
+ flex-direction: column;
2743
+ min-width: 0;
2744
+ gap: 0.05rem;
2745
+ }
2746
+ .assign-list .assign-copy strong {
2747
+ font-size: 0.92rem;
2748
+ font-weight: 600;
2749
+ }
2750
+ .assign-list .assign-copy span {
2751
+ color: var(--muted);
2752
+ font-size: 0.8rem;
2753
+ }
2754
+ .dialog-actions { display: flex; justify-content: flex-end; gap: 0.4rem; }
2755
+ .dialog-actions button {
2756
+ margin: 0;
2757
+ padding: 0.4rem 0.75rem;
2758
+ border-radius: 999px;
2759
+ cursor: pointer;
2760
+ font: inherit;
2761
+ border: 0;
2762
+ background: #2a2a2a;
2763
+ color: var(--text);
2764
+ }
2765
+ .dialog-actions .ghost { background: transparent; color: var(--muted); }
2766
+ .dialog-actions .ghost.danger {
2767
+ margin-right: auto;
2768
+ color: #fca5a5;
2769
+ }
2770
+ .dialog-actions .ghost.danger:hover { color: #fecaca; }
2771
+
2772
+ .traj {
2773
+ position: absolute;
2774
+ inset: 0;
2775
+ z-index: 30;
2776
+ grid-column: 1;
2777
+ grid-row: 1 / -1;
2778
+ display: grid;
2779
+ grid-template-rows: auto auto 1fr;
2780
+ background: #0c0c0e;
2781
+ }
2782
+ .traj[hidden] { display: none !important; }
2783
+ .traj-bar {
2784
+ display: flex;
2785
+ align-items: center;
2786
+ gap: 0.7rem;
2787
+ padding: 0.7rem 1rem;
2788
+ border-bottom: 1px solid #222;
2789
+ }
2790
+ .traj-bar strong { font-size: 0.92rem; }
2791
+ .traj-src { color: #8b8b8b; font-size: 0.75rem; }
2792
+ .traj-bar input {
2793
+ flex: 1;
2794
+ min-width: 0;
2795
+ margin: 0;
2796
+ padding: 0.4rem 0.7rem;
2797
+ border: 0;
2798
+ border-radius: 999px;
2799
+ background: #1a1a1a;
2800
+ color: var(--text);
2801
+ font: inherit;
2802
+ font-size: 0.82rem;
2803
+ }
2804
+ .traj-close {
2805
+ margin: 0;
2806
+ width: 32px;
2807
+ height: 32px;
2808
+ border: 0;
2809
+ border-radius: 50%;
2810
+ background: #1a1a1a;
2811
+ color: #cfcfcf;
2812
+ font-size: 1.2rem;
2813
+ cursor: pointer;
2814
+ }
2815
+ .traj-kinds {
2816
+ display: flex;
2817
+ flex-wrap: wrap;
2818
+ gap: 0.35rem;
2819
+ padding: 0.4rem 1rem 0.5rem;
2820
+ border-bottom: 1px solid #222;
2821
+ }
2822
+ .traj-filter {
2823
+ margin: 0;
2824
+ padding: 0.18rem 0.5rem;
2825
+ border: 1px solid #333;
2826
+ border-radius: 4px;
2827
+ background: #141416;
2828
+ color: #bdbdbd;
2829
+ font: inherit;
2830
+ font-size: 0.72rem;
2831
+ font-weight: 650;
2832
+ cursor: pointer;
2833
+ }
2834
+ .traj-filter:hover { color: var(--text); border-color: #555; }
2835
+ .traj-filter.on {
2836
+ background: #1c1c20;
2837
+ color: var(--text);
2838
+ border-color: #555;
2839
+ }
2840
+ .traj-filter.spawn { color: var(--signal); border-color: #4a3d22; }
2841
+ .traj-filter.spawn.on {
2842
+ background: #2a2418;
2843
+ color: var(--signal);
2844
+ }
2845
+ .traj-main {
2846
+ display: grid;
2847
+ grid-template-columns: minmax(280px, 1.1fr) minmax(240px, 0.9fr);
2848
+ min-height: 0;
2849
+ }
2850
+ .traj-list {
2851
+ overflow: auto;
2852
+ border-right: 1px solid #222;
2853
+ padding: 0.4rem 0;
2854
+ }
2855
+ .traj-row {
2856
+ display: grid;
2857
+ grid-template-columns: 20px 6.2rem 6.4rem minmax(0, 1fr);
2858
+ gap: 0.4rem;
2859
+ align-items: center;
2860
+ width: 100%;
2861
+ margin: 0;
2862
+ padding: 0.38rem 0.75rem;
2863
+ border: 0;
2864
+ background: transparent;
2865
+ color: #d8d8d8;
2866
+ font: inherit;
2867
+ font-size: 0.8rem;
2868
+ text-align: left;
2869
+ cursor: pointer;
2870
+ }
2871
+ .traj-row:hover, .traj-row.on { background: #17171a; }
2872
+ .traj-row.live { background: #14110c; }
2873
+ .traj-row.live.on { background: #1c1810; }
2874
+ .traj-row.live .sum { color: #e6d48a; }
2875
+ .traj-src.live { color: var(--gold, #c9a227); }
2876
+ .traj-av {
2877
+ width: 20px;
2878
+ height: 20px;
2879
+ border-radius: 50%;
2880
+ display: grid;
2881
+ place-items: center;
2882
+ font-size: 0.62rem;
2883
+ font-weight: 700;
2884
+ color: #fff;
2885
+ line-height: 1;
2886
+ overflow: hidden;
2887
+ white-space: nowrap;
2888
+ }
2889
+ .traj-av.you {
2890
+ background: #2a2a2a;
2891
+ color: #bbb;
2892
+ font-size: 0.58rem;
2893
+ }
2894
+ .traj-who {
2895
+ min-width: 0;
2896
+ overflow: hidden;
2897
+ text-overflow: ellipsis;
2898
+ white-space: nowrap;
2899
+ font-size: 0.74rem;
2900
+ font-weight: 650;
2901
+ color: var(--text);
2902
+ }
2903
+ .traj-kind {
2904
+ font-size: 0.64rem;
2905
+ font-weight: 700;
2906
+ letter-spacing: 0.03em;
2907
+ padding: 0.1rem 0.28rem;
2908
+ border-radius: 4px;
2909
+ text-align: center;
2910
+ white-space: nowrap;
2911
+ overflow: hidden;
2912
+ text-overflow: ellipsis;
2913
+ }
2914
+ .traj-kind.system { background: #3b2a55; color: #d7c2ff; }
2915
+ .traj-kind.user { background: #1f3d32; color: #9fdfb2; }
2916
+ .traj-kind.context { background: #163a44; color: #8fd4e8; }
2917
+ .traj-kind.model { background: #2a2a22; color: #e6d48a; }
2918
+ .traj-kind.thinking { background: #2a2438; color: #c5b8e6; }
2919
+ .traj-kind.tool { background: #3d2a14; color: #f0b27a; }
2920
+ .traj-kind.skill { background: #1A222C; color: var(--steel); }
2921
+ .traj-kind.spawn { background: #2a2418; color: var(--signal); }
2922
+ .traj-kind.assistant { background: #3a1c28; color: #f0a0b8; }
2923
+ .traj-row .sum {
2924
+ min-width: 0;
2925
+ overflow: hidden;
2926
+ text-overflow: ellipsis;
2927
+ white-space: nowrap;
2928
+ color: #bdbdbd;
2929
+ }
2930
+ .traj-row.err .sum { color: #e07070; }
2931
+ .traj-detail {
2932
+ overflow: auto;
2933
+ padding: 1rem 1.1rem 1.4rem;
2934
+ font-size: 0.82rem;
2935
+ line-height: 1.55;
2936
+ color: #d0d0d0;
2937
+ }
2938
+ .traj-detail h3 { margin: 0 0 0.45rem; font-size: 0.92rem; }
2939
+ .traj-detail .meta { color: #8b8b8b; font-size: 0.75rem; margin: 0 0 0.85rem; }
2940
+ .traj-detail h4 {
2941
+ margin: 0.9rem 0 0.3rem;
2942
+ font-size: 0.72rem;
2943
+ letter-spacing: 0.06em;
2944
+ color: #8b8b8b;
2945
+ font-weight: 650;
2946
+ }
2947
+ .traj-detail pre {
2948
+ margin: 0;
2949
+ padding: 0.7rem 0.8rem;
2950
+ border-radius: 10px;
2951
+ background: #141416;
2952
+ overflow: auto;
2953
+ white-space: pre-wrap;
2954
+ word-break: break-word;
2955
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
2956
+ font-size: 12px;
2957
+ line-height: 1.45;
2958
+ }
2959
+ .traj-empty { color: #8b8b8b; padding: 1.2rem; }
2960
+ .md-img,
2961
+ .row-card.image .md-img {
2962
+ display: block;
2963
+ max-width: min(100%, 48rem);
2964
+ height: auto;
2965
+ border-radius: 12px;
2966
+ margin: 0.45rem 0;
2967
+ background: #111;
2968
+ }
2969
+ .row-card.image .term-out {
2970
+ margin-top: 0.4rem;
2971
+ font-size: 0.72rem;
2972
+ color: #8b8b8b;
2973
+ }
2974
+
2975
+ .nav-toggle {
2976
+ display: none;
2977
+ align-items: center;
2978
+ justify-content: center;
2979
+ margin: 0;
2980
+ width: 36px;
2981
+ height: 36px;
2982
+ padding: 0;
2983
+ border: 0;
2984
+ border-radius: 10px;
2985
+ background: var(--fill);
2986
+ color: var(--text);
2987
+ cursor: pointer;
2988
+ flex: none;
2989
+ }
2990
+ .nav-toggle-bars,
2991
+ .nav-toggle-bars::before,
2992
+ .nav-toggle-bars::after {
2993
+ display: block;
2994
+ width: 16px;
2995
+ height: 1.5px;
2996
+ background: currentColor;
2997
+ border-radius: 1px;
2998
+ }
2999
+ .nav-toggle-bars {
3000
+ position: relative;
3001
+ }
3002
+ .nav-toggle-bars::before,
3003
+ .nav-toggle-bars::after {
3004
+ content: "";
3005
+ position: absolute;
3006
+ left: 0;
3007
+ }
3008
+ .nav-toggle-bars::before { top: -5px; }
3009
+ .nav-toggle-bars::after { top: 5px; }
3010
+ .nav-scrim {
3011
+ display: none;
3012
+ }
3013
+
3014
+ @media (max-width: 760px) {
3015
+ body.grok { grid-template-columns: 1fr; }
3016
+ body.nav-open { overflow: hidden; }
3017
+ .nav-toggle { display: inline-flex; }
3018
+ .nav-scrim {
3019
+ display: none;
3020
+ position: fixed;
3021
+ inset: 0;
3022
+ z-index: 35;
3023
+ background: #0009;
3024
+ }
3025
+ body.nav-open .nav-scrim { display: block; }
3026
+ .sidebar {
3027
+ position: fixed;
3028
+ top: 0;
3029
+ left: 0;
3030
+ bottom: 0;
3031
+ width: min(86vw, 320px);
3032
+ z-index: 40;
3033
+ transform: translateX(-105%);
3034
+ display: flex;
3035
+ height: 100%;
3036
+ min-height: 100%;
3037
+ max-height: 100dvh;
3038
+ box-shadow: 8px 0 28px #0008;
3039
+ }
3040
+ body.nav-open .sidebar { transform: none; }
3041
+ .sidebar-resizer { display: none; }
3042
+ }
3043
+ @media (max-width: 760px) and (prefers-reduced-motion: no-preference) {
3044
+ .sidebar { transition: transform 0.2s ease; }
3045
+ }