claude-simple 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 (50) hide show
  1. package/README.md +225 -0
  2. package/client.js +139 -0
  3. package/dist/addon-fit.min.js +2 -0
  4. package/dist/app.0.1.0.min.js +825 -0
  5. package/dist/highlight.min.css +10 -0
  6. package/dist/highlight.min.js +1244 -0
  7. package/dist/index.html +16 -0
  8. package/dist/marked.min.js +6 -0
  9. package/dist/style.0.1.0.min.css +1050 -0
  10. package/dist/xterm.min.css +209 -0
  11. package/dist/xterm.min.js +2 -0
  12. package/gateway.js +349 -0
  13. package/package.json +41 -0
  14. package/public/addon-fit.min.js +2 -0
  15. package/public/agent-panel.js +1079 -0
  16. package/public/api.js +78 -0
  17. package/public/app.js +95 -0
  18. package/public/base.css +4 -0
  19. package/public/cache.js +27 -0
  20. package/public/chat.js +1087 -0
  21. package/public/files.js +476 -0
  22. package/public/git.js +130 -0
  23. package/public/index.html +61 -0
  24. package/public/lib.js +2 -0
  25. package/public/router.js +71 -0
  26. package/public/settings.js +90 -0
  27. package/public/shell/boot.js +159 -0
  28. package/public/shell/dashboard.js +269 -0
  29. package/public/shell/hub.js +192 -0
  30. package/public/shell/layout.js +195 -0
  31. package/public/shell/notes.js +323 -0
  32. package/public/shell/session-context.js +19 -0
  33. package/public/shell/session-list.js +442 -0
  34. package/public/shell/session-nav.js +299 -0
  35. package/public/shell/templates.js +342 -0
  36. package/public/shell/util.js +63 -0
  37. package/public/shell.js +589 -0
  38. package/public/state.js +362 -0
  39. package/public/style.css +1048 -0
  40. package/public/terminal.js +177 -0
  41. package/public/xterm.min.css +209 -0
  42. package/public/xterm.min.js +2 -0
  43. package/server.js +12 -0
  44. package/src/agents/claude.js +58 -0
  45. package/src/agents/codex.js +284 -0
  46. package/src/agents/grok.js +318 -0
  47. package/src/agents/meta-agent.js +1952 -0
  48. package/src/agents/models.js +339 -0
  49. package/src/agents/sessions.js +1508 -0
  50. package/src/app.js +1282 -0
@@ -0,0 +1,1048 @@
1
+ /* ── Sidebar responsive ──────────────────────────────────────────────────── */
2
+ @media (min-width: 641px) { #hamburger { display: none !important; } }
3
+ @media (max-width: 640px) {
4
+ #sidebar {
5
+ position: fixed; top: 44px; left: 0; bottom: 0;
6
+ transform: translateX(-100%); z-index: 10;
7
+ transition: transform .2s ease;
8
+ }
9
+ #sidebar.open { transform: translateX(0); box-shadow: 4px 0 20px rgba(0,0,0,.4); }
10
+ }
11
+
12
+ /* ── Theme-aware code / tool surfaces ────────────────────────────────────── */
13
+ /* Prefer DaisyUI tokens so light/dark both look intentional — no #0d1117 hardcode. */
14
+ .code-surface {
15
+ background: color-mix(in oklch, oklch(var(--bc)) 6%, oklch(var(--b1)));
16
+ color: oklch(var(--bc) / 0.88);
17
+ border: 1px solid oklch(var(--b3));
18
+ }
19
+ [data-theme="dark"] .code-surface,
20
+ [data-theme="night"] .code-surface,
21
+ [data-theme="black"] .code-surface {
22
+ background: color-mix(in oklch, oklch(var(--b1)) 70%, black);
23
+ color: oklch(var(--bc) / 0.9);
24
+ }
25
+
26
+ /* ── Markdown rendering (DaisyUI 5: use --color-* full oklch values) ──────── */
27
+ /* NOTE: DaisyUI 5 does NOT use --p/--bc components. Colors are already oklch(...). */
28
+ .md {
29
+ line-height: 1.65;
30
+ font-size: 0.9375rem;
31
+ color: color-mix(in oklch, var(--color-base-content) 92%, transparent);
32
+ word-wrap: break-word;
33
+ overflow-wrap: anywhere;
34
+ }
35
+ .md > :first-child { margin-top: 0 !important; }
36
+ .md > :last-child { margin-bottom: 0 !important; }
37
+
38
+ /* Headings — force size/weight over DaisyUI base reset, colorful accents */
39
+ .md h1, .md h2, .md h3, .md h4, .md h5, .md h6 {
40
+ font-weight: 700 !important;
41
+ line-height: 1.3;
42
+ letter-spacing: -0.015em;
43
+ margin: 1.15em 0 0.5em;
44
+ scroll-margin-top: 0.5rem;
45
+ }
46
+ .md h1 {
47
+ font-size: 1.38em !important;
48
+ color: var(--color-primary) !important;
49
+ padding: 0.15em 0 0.4em 0.7em;
50
+ border-left: 4px solid var(--color-primary);
51
+ border-bottom: 1px solid color-mix(in oklch, var(--color-primary) 30%, transparent);
52
+ background: linear-gradient(
53
+ 90deg,
54
+ color-mix(in oklch, var(--color-primary) 14%, transparent),
55
+ transparent 72%
56
+ );
57
+ border-radius: 0 6px 0 0;
58
+ }
59
+ .md h2 {
60
+ font-size: 1.2em !important;
61
+ color: var(--color-secondary) !important;
62
+ padding: 0.1em 0 0.3em 0.65em;
63
+ border-left: 3px solid var(--color-secondary);
64
+ border-bottom: 1px dashed color-mix(in oklch, var(--color-secondary) 35%, transparent);
65
+ background: linear-gradient(
66
+ 90deg,
67
+ color-mix(in oklch, var(--color-secondary) 12%, transparent),
68
+ transparent 68%
69
+ );
70
+ }
71
+ .md h3 {
72
+ font-size: 1.08em !important;
73
+ color: var(--color-accent) !important;
74
+ padding-left: 0.55em;
75
+ border-left: 3px solid var(--color-accent);
76
+ }
77
+ .md h4 {
78
+ font-size: 1em !important;
79
+ color: var(--color-info) !important;
80
+ padding-left: 0.45em;
81
+ border-left: 2px solid var(--color-info);
82
+ }
83
+ .md h5 {
84
+ font-size: 0.88em !important;
85
+ font-weight: 700 !important;
86
+ text-transform: uppercase;
87
+ letter-spacing: 0.06em;
88
+ color: var(--color-success) !important;
89
+ }
90
+ .md h6 {
91
+ font-size: 0.82em !important;
92
+ font-weight: 650 !important;
93
+ text-transform: uppercase;
94
+ letter-spacing: 0.05em;
95
+ color: var(--color-warning) !important;
96
+ }
97
+
98
+ .md p { margin: 0.55em 0; }
99
+
100
+ /* Inline emphasis */
101
+ .md strong {
102
+ font-weight: 750 !important;
103
+ color: color-mix(in oklch, var(--color-warning) 55%, var(--color-base-content)) !important;
104
+ }
105
+ .md em {
106
+ font-style: italic;
107
+ color: color-mix(in oklch, var(--color-secondary) 45%, var(--color-base-content)) !important;
108
+ }
109
+ .md strong em,
110
+ .md em strong {
111
+ color: color-mix(in oklch, var(--color-primary) 60%, var(--color-base-content)) !important;
112
+ }
113
+ .md s, .md del {
114
+ color: var(--color-error) !important;
115
+ text-decoration-color: color-mix(in oklch, var(--color-error) 60%, transparent);
116
+ opacity: 0.85;
117
+ }
118
+ .md mark {
119
+ background: color-mix(in oklch, var(--color-warning) 40%, transparent);
120
+ color: var(--color-base-content);
121
+ padding: 0.05em 0.25em;
122
+ border-radius: 3px;
123
+ }
124
+
125
+ /* Lists — DaisyUI sets list-style:none globally */
126
+ .md ul, .md ol {
127
+ margin: 0.5em 0;
128
+ padding-left: 1.5em !important;
129
+ }
130
+ .md ul { list-style-type: disc !important; }
131
+ .md ol { list-style-type: decimal !important; }
132
+ .md li { margin: 0.28em 0; padding-left: 0.15em; display: list-item; }
133
+ .md li > ul, .md li > ol { margin: 0.2em 0; }
134
+ .md ul > li::marker { color: var(--color-primary); }
135
+ .md ol > li::marker {
136
+ color: var(--color-secondary);
137
+ font-weight: 700;
138
+ }
139
+ .md ul ul > li::marker { color: var(--color-accent); }
140
+ .md ul ul ul > li::marker { color: var(--color-success); }
141
+ .md ul.contains-task-list,
142
+ .md ul.task-list {
143
+ list-style: none !important;
144
+ padding-left: 0.2em !important;
145
+ }
146
+ .md li.task-list-item,
147
+ .md li:has(> input[type="checkbox"]) {
148
+ list-style: none !important;
149
+ display: flex;
150
+ align-items: flex-start;
151
+ gap: 0.45em;
152
+ }
153
+ .md input[type="checkbox"] {
154
+ margin-top: 0.35em;
155
+ accent-color: var(--color-success);
156
+ flex-shrink: 0;
157
+ }
158
+
159
+ /* Inline code */
160
+ .md :not(pre) > code {
161
+ font-family: ui-monospace, SFMono-Regular, "Cascadia Code", Menlo, Consolas, monospace;
162
+ font-size: 0.86em;
163
+ font-weight: 600;
164
+ padding: 0.12em 0.4em;
165
+ border-radius: 4px;
166
+ background: color-mix(in oklch, var(--color-primary) 16%, var(--color-base-200));
167
+ color: color-mix(in oklch, var(--color-primary) 75%, var(--color-base-content));
168
+ border: 1px solid color-mix(in oklch, var(--color-primary) 28%, transparent);
169
+ white-space: break-spaces;
170
+ }
171
+
172
+ /* Fenced code block */
173
+ .md .code-block {
174
+ margin: 0.75em 0;
175
+ border-radius: 8px;
176
+ border: 1px solid color-mix(in oklch, var(--color-primary) 18%, var(--color-base-300));
177
+ background: color-mix(in oklch, var(--color-base-content) 4%, var(--color-base-100));
178
+ overflow: hidden;
179
+ }
180
+ [data-theme="dark"] .md .code-block,
181
+ [data-theme="night"] .md .code-block,
182
+ [data-theme="black"] .md .code-block {
183
+ background: color-mix(in oklch, var(--color-base-100) 70%, black);
184
+ border-color: color-mix(in oklch, var(--color-primary) 22%, transparent);
185
+ }
186
+ .md .code-block-header {
187
+ display: flex;
188
+ align-items: center;
189
+ justify-content: space-between;
190
+ gap: 0.5rem;
191
+ padding: 0.3rem 0.65rem;
192
+ font-size: 11px;
193
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
194
+ color: color-mix(in oklch, var(--color-base-content) 55%, transparent);
195
+ background: linear-gradient(
196
+ 90deg,
197
+ color-mix(in oklch, var(--color-primary) 14%, transparent),
198
+ color-mix(in oklch, var(--color-accent) 8%, transparent) 55%,
199
+ transparent
200
+ );
201
+ border-bottom: 1px solid color-mix(in oklch, var(--color-primary) 20%, transparent);
202
+ user-select: none;
203
+ }
204
+ .md .code-block-lang {
205
+ text-transform: lowercase;
206
+ font-weight: 700;
207
+ letter-spacing: 0.03em;
208
+ color: var(--color-primary);
209
+ }
210
+ .md .code-copy {
211
+ appearance: none;
212
+ border: 1px solid color-mix(in oklch, var(--color-primary) 30%, transparent);
213
+ background: color-mix(in oklch, var(--color-primary) 10%, var(--color-base-200));
214
+ color: var(--color-primary);
215
+ border-radius: 4px;
216
+ padding: 0.1rem 0.45rem;
217
+ font-size: 10px;
218
+ line-height: 1.4;
219
+ cursor: pointer;
220
+ transition: background .12s, color .12s, border-color .12s;
221
+ }
222
+ .md .code-copy:hover {
223
+ color: var(--color-primary-content);
224
+ border-color: var(--color-primary);
225
+ background: var(--color-primary);
226
+ }
227
+ .md .code-copy.copied {
228
+ color: var(--color-success);
229
+ border-color: color-mix(in oklch, var(--color-success) 50%, transparent);
230
+ background: color-mix(in oklch, var(--color-success) 14%, transparent);
231
+ }
232
+ .md .code-block pre {
233
+ margin: 0 !important;
234
+ padding: 0.75rem 0.85rem !important;
235
+ border: none !important;
236
+ border-radius: 0 !important;
237
+ background: transparent !important;
238
+ overflow-x: auto;
239
+ line-height: 1.55;
240
+ }
241
+ .md pre {
242
+ margin: 0.75em 0;
243
+ padding: 0.75rem 0.85rem;
244
+ border-radius: 8px;
245
+ border: 1px solid color-mix(in oklch, var(--color-base-content) 12%, transparent);
246
+ background: color-mix(in oklch, var(--color-base-content) 5%, var(--color-base-100));
247
+ color: color-mix(in oklch, var(--color-base-content) 92%, transparent);
248
+ overflow-x: auto;
249
+ line-height: 1.55;
250
+ }
251
+ [data-theme="dark"] .md pre,
252
+ [data-theme="night"] .md pre,
253
+ [data-theme="black"] .md pre {
254
+ background: color-mix(in oklch, var(--color-base-100) 65%, black);
255
+ }
256
+ .md pre code {
257
+ background: none !important;
258
+ border: none !important;
259
+ padding: 0 !important;
260
+ font-size: 0.84em;
261
+ font-family: ui-monospace, SFMono-Regular, "Cascadia Code", Menlo, Consolas, monospace;
262
+ color: inherit;
263
+ white-space: pre;
264
+ }
265
+ .md pre code.hljs { background: transparent !important; }
266
+
267
+ /* Syntax highlight tokens */
268
+ .md pre .hljs-comment,
269
+ .md pre .hljs-quote {
270
+ color: color-mix(in oklch, var(--color-base-content) 42%, transparent);
271
+ font-style: italic;
272
+ }
273
+ .md pre .hljs-keyword,
274
+ .md pre .hljs-selector-tag,
275
+ .md pre .hljs-meta .hljs-keyword {
276
+ color: #7c3aed;
277
+ font-weight: 600;
278
+ }
279
+ [data-theme="dark"] .md pre .hljs-keyword,
280
+ [data-theme="night"] .md pre .hljs-keyword,
281
+ [data-theme="black"] .md pre .hljs-keyword { color: #c792ea; }
282
+ .md pre .hljs-string,
283
+ .md pre .hljs-attr,
284
+ .md pre .hljs-template-tag { color: #15803d; }
285
+ [data-theme="dark"] .md pre .hljs-string,
286
+ [data-theme="night"] .md pre .hljs-string { color: #c3e88d; }
287
+ .md pre .hljs-number,
288
+ .md pre .hljs-built_in,
289
+ .md pre .hljs-literal { color: #c2410c; }
290
+ [data-theme="dark"] .md pre .hljs-number,
291
+ [data-theme="night"] .md pre .hljs-number { color: #f78c6c; }
292
+ .md pre .hljs-title,
293
+ .md pre .hljs-section,
294
+ .md pre .hljs-function .hljs-title { color: #1d4ed8; }
295
+ [data-theme="dark"] .md pre .hljs-title,
296
+ [data-theme="night"] .md pre .hljs-title { color: #82aaff; }
297
+ .md pre .hljs-type,
298
+ .md pre .hljs-class .hljs-title { color: #0e7490; }
299
+ [data-theme="dark"] .md pre .hljs-type { color: #ffcb6b; }
300
+ .md pre .hljs-variable,
301
+ .md pre .hljs-template-variable,
302
+ .md pre .hljs-params {
303
+ color: color-mix(in oklch, var(--color-base-content) 88%, transparent);
304
+ }
305
+ .md pre .hljs-addition {
306
+ color: var(--color-success);
307
+ background: color-mix(in oklch, var(--color-success) 14%, transparent);
308
+ }
309
+ .md pre .hljs-deletion {
310
+ color: var(--color-error);
311
+ background: color-mix(in oklch, var(--color-error) 14%, transparent);
312
+ }
313
+
314
+ /* Files tab: full-file preview with highlight.js */
315
+ .file-preview {
316
+ background: color-mix(in oklch, var(--color-base-content) 4%, var(--color-base-100));
317
+ color: color-mix(in oklch, var(--color-base-content) 92%, transparent);
318
+ }
319
+ [data-theme="dark"] .file-preview,
320
+ [data-theme="night"] .file-preview,
321
+ [data-theme="black"] .file-preview {
322
+ background: color-mix(in oklch, var(--color-base-100) 65%, black);
323
+ }
324
+ .file-preview code.hljs,
325
+ .file-preview code.file-preview-code {
326
+ display: block;
327
+ padding: 0 !important;
328
+ background: transparent !important;
329
+ font-family: ui-monospace, SFMono-Regular, "Cascadia Code", Menlo, Consolas, monospace;
330
+ font-size: inherit;
331
+ color: inherit;
332
+ white-space: pre;
333
+ overflow-x: auto;
334
+ }
335
+ /* Reuse chat token palette outside .md so file preview is colored even if CDN theme lags */
336
+ .file-preview .hljs-comment,
337
+ .file-preview .hljs-quote {
338
+ color: color-mix(in oklch, var(--color-base-content) 42%, transparent);
339
+ font-style: italic;
340
+ }
341
+ .file-preview .hljs-keyword,
342
+ .file-preview .hljs-selector-tag,
343
+ .file-preview .hljs-meta .hljs-keyword {
344
+ color: #7c3aed;
345
+ font-weight: 600;
346
+ }
347
+ [data-theme="dark"] .file-preview .hljs-keyword,
348
+ [data-theme="night"] .file-preview .hljs-keyword,
349
+ [data-theme="black"] .file-preview .hljs-keyword { color: #c792ea; }
350
+ .file-preview .hljs-string,
351
+ .file-preview .hljs-attr,
352
+ .file-preview .hljs-template-tag { color: #15803d; }
353
+ [data-theme="dark"] .file-preview .hljs-string,
354
+ [data-theme="night"] .file-preview .hljs-string { color: #c3e88d; }
355
+ .file-preview .hljs-number,
356
+ .file-preview .hljs-built_in,
357
+ .file-preview .hljs-literal { color: #c2410c; }
358
+ [data-theme="dark"] .file-preview .hljs-number,
359
+ [data-theme="night"] .file-preview .hljs-number { color: #f78c6c; }
360
+ .file-preview .hljs-title,
361
+ .file-preview .hljs-section,
362
+ .file-preview .hljs-function .hljs-title { color: #1d4ed8; }
363
+ [data-theme="dark"] .file-preview .hljs-title,
364
+ [data-theme="night"] .file-preview .hljs-title { color: #82aaff; }
365
+ .file-preview .hljs-type,
366
+ .file-preview .hljs-class .hljs-title { color: #0e7490; }
367
+ [data-theme="dark"] .file-preview .hljs-type { color: #ffcb6b; }
368
+ .file-preview .hljs-variable,
369
+ .file-preview .hljs-template-variable,
370
+ .file-preview .hljs-params {
371
+ color: color-mix(in oklch, var(--color-base-content) 88%, transparent);
372
+ }
373
+ .file-preview .hljs-addition {
374
+ color: var(--color-success);
375
+ background: color-mix(in oklch, var(--color-success) 14%, transparent);
376
+ }
377
+ .file-preview .hljs-deletion {
378
+ color: var(--color-error);
379
+ background: color-mix(in oklch, var(--color-error) 14%, transparent);
380
+ }
381
+
382
+ /* ── Office file previews (docx / xlsx / pptx) ─────────────────────────────── */
383
+ .office-preview {
384
+ min-height: 0;
385
+ }
386
+ .office-docx-body {
387
+ max-width: 52rem;
388
+ margin: 0 auto;
389
+ line-height: 1.65;
390
+ font-size: 0.9375rem;
391
+ }
392
+ .office-docx-body p { margin: 0.55em 0; }
393
+ .office-docx-body h1, .office-docx-body h2, .office-docx-body h3 {
394
+ font-weight: 700;
395
+ margin: 1em 0 0.4em;
396
+ line-height: 1.3;
397
+ }
398
+ .office-docx-body h1 { font-size: 1.4em; }
399
+ .office-docx-body h2 { font-size: 1.2em; }
400
+ .office-docx-body h3 { font-size: 1.05em; }
401
+ .office-docx-body ul, .office-docx-body ol {
402
+ margin: 0.5em 0;
403
+ padding-left: 1.4em;
404
+ }
405
+ .office-docx-body table {
406
+ border-collapse: collapse;
407
+ width: 100%;
408
+ margin: 0.75em 0;
409
+ font-size: 0.88em;
410
+ }
411
+ .office-docx-body td, .office-docx-body th {
412
+ border: 1px solid color-mix(in oklch, var(--color-base-content) 18%, transparent);
413
+ padding: 0.35em 0.55em;
414
+ }
415
+ .office-docx-body img {
416
+ max-width: 100%;
417
+ height: auto;
418
+ }
419
+ .office-warn {
420
+ border-bottom: 1px solid color-mix(in oklch, var(--color-warning) 30%, transparent);
421
+ margin: -1rem -1rem 0.75rem;
422
+ padding: 0.4rem 1rem;
423
+ background: color-mix(in oklch, var(--color-warning) 10%, transparent);
424
+ }
425
+
426
+ .office-sheet-tab {
427
+ appearance: none;
428
+ border: 1px solid color-mix(in oklch, var(--color-base-content) 14%, transparent);
429
+ background: color-mix(in oklch, var(--color-base-content) 4%, var(--color-base-100));
430
+ color: color-mix(in oklch, var(--color-base-content) 70%, transparent);
431
+ border-radius: 6px;
432
+ padding: 0.2rem 0.65rem;
433
+ font-size: 11px;
434
+ cursor: pointer;
435
+ white-space: nowrap;
436
+ }
437
+ .office-sheet-tab:hover { border-color: var(--color-primary); color: var(--color-primary); }
438
+ .office-sheet-tab.active {
439
+ background: color-mix(in oklch, var(--color-primary) 16%, transparent);
440
+ border-color: color-mix(in oklch, var(--color-primary) 45%, transparent);
441
+ color: var(--color-primary);
442
+ font-weight: 600;
443
+ }
444
+ .office-sheet-body table {
445
+ border-collapse: collapse;
446
+ font-size: 12px;
447
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
448
+ width: max-content;
449
+ min-width: 100%;
450
+ }
451
+ .office-sheet-body td, .office-sheet-body th {
452
+ border: 1px solid color-mix(in oklch, var(--color-base-content) 14%, transparent);
453
+ padding: 0.2rem 0.45rem;
454
+ white-space: pre;
455
+ max-width: 20rem;
456
+ overflow: hidden;
457
+ text-overflow: ellipsis;
458
+ }
459
+ .office-sheet-body th,
460
+ .office-sheet-body tr:first-child td {
461
+ background: color-mix(in oklch, var(--color-primary) 8%, var(--color-base-200));
462
+ font-weight: 600;
463
+ }
464
+
465
+ .office-slide-card {
466
+ border: 1px solid color-mix(in oklch, var(--color-base-content) 12%, transparent);
467
+ border-radius: 10px;
468
+ background: color-mix(in oklch, var(--color-base-content) 3%, var(--color-base-100));
469
+ overflow: hidden;
470
+ }
471
+ .office-slide-num {
472
+ font-size: 11px;
473
+ font-weight: 700;
474
+ letter-spacing: 0.04em;
475
+ text-transform: uppercase;
476
+ color: var(--color-primary);
477
+ padding: 0.35rem 0.75rem;
478
+ border-bottom: 1px solid color-mix(in oklch, var(--color-primary) 18%, transparent);
479
+ background: color-mix(in oklch, var(--color-primary) 8%, transparent);
480
+ }
481
+ .office-slide-body {
482
+ padding: 0.75rem 0.9rem;
483
+ font-size: 0.9rem;
484
+ line-height: 1.55;
485
+ }
486
+ .office-slide-body p { margin: 0.35em 0; }
487
+
488
+ .office-pdf-figure {
489
+ margin: 0 auto;
490
+ max-width: 100%;
491
+ text-align: center;
492
+ }
493
+ .office-pdf-cap {
494
+ font-size: 10px;
495
+ color: color-mix(in oklch, var(--color-base-content) 45%, transparent);
496
+ margin-bottom: 0.35rem;
497
+ font-family: ui-monospace, Menlo, monospace;
498
+ }
499
+ .office-pdf-page {
500
+ display: block;
501
+ margin: 0 auto;
502
+ max-width: 100%;
503
+ height: auto;
504
+ border-radius: 6px;
505
+ border: 1px solid color-mix(in oklch, var(--color-base-content) 12%, transparent);
506
+ box-shadow: 0 4px 18px color-mix(in oklch, black 18%, transparent);
507
+ background: white;
508
+ }
509
+
510
+ /* Session list: favorites + thin (low-turn) markers */
511
+ .session-fav-btn {
512
+ appearance: none;
513
+ border: none;
514
+ background: transparent;
515
+ color: color-mix(in oklch, var(--color-base-content) 35%, transparent);
516
+ font-size: 12px;
517
+ line-height: 1;
518
+ cursor: pointer;
519
+ padding: 0 1px;
520
+ }
521
+ .session-fav-btn:hover { color: #eab308; }
522
+ .session-fav-btn.is-fav { color: #eab308; }
523
+ .session-row.session-fav { background: color-mix(in oklch, #eab308 6%, transparent); }
524
+ .session-row.session-thin {
525
+ opacity: 0.88;
526
+ }
527
+ .session-thin-badge {
528
+ font-size: 9px;
529
+ font-family: ui-monospace, Menlo, monospace;
530
+ font-weight: 700;
531
+ letter-spacing: 0.02em;
532
+ padding: 0 4px;
533
+ border-radius: 3px;
534
+ color: color-mix(in oklch, var(--color-warning) 90%, var(--color-base-content));
535
+ background: color-mix(in oklch, var(--color-warning) 18%, transparent);
536
+ border: 1px solid color-mix(in oklch, var(--color-warning) 35%, transparent);
537
+ }
538
+ .session-note-dot { font-size: 10px; opacity: 0.85; }
539
+ .session-renamed-badge {
540
+ font-size: 9px;
541
+ color: color-mix(in oklch, var(--color-primary) 80%, var(--color-base-content));
542
+ opacity: 0.9;
543
+ }
544
+ .session-title-renamed { font-style: normal; }
545
+ .session-rename-btn {
546
+ font-size: 10px;
547
+ line-height: 1;
548
+ padding: 1px 3px;
549
+ border-radius: 4px;
550
+ color: color-mix(in oklch, var(--color-base-content) 35%, transparent);
551
+ opacity: 0;
552
+ transition: opacity .12s, color .12s, background .12s;
553
+ }
554
+ .session-row:hover .session-rename-btn,
555
+ .session-row:focus-within .session-rename-btn {
556
+ opacity: 1;
557
+ }
558
+ .session-rename-btn:hover {
559
+ color: var(--color-primary);
560
+ background: color-mix(in oklch, var(--color-primary) 12%, transparent);
561
+ }
562
+ .session-title-wrap {
563
+ width: 100%;
564
+ }
565
+ .session-title-wrap.session-rename-active {
566
+ flex: 1;
567
+ min-width: 0;
568
+ }
569
+ .session-title-text {
570
+ cursor: text;
571
+ }
572
+ .session-title-text:hover {
573
+ color: var(--color-primary);
574
+ }
575
+ .session-rename-input {
576
+ height: 1.5rem !important;
577
+ min-height: 1.5rem !important;
578
+ padding-left: 0.4rem !important;
579
+ padding-right: 0.4rem !important;
580
+ font-size: 11px !important;
581
+ line-height: 1.25 !important;
582
+ width: 100%;
583
+ }
584
+ .session-title-inline {
585
+ padding: 1px 4px;
586
+ border-radius: 4px;
587
+ border: 1px solid transparent;
588
+ }
589
+ .session-title-inline:hover {
590
+ border-color: color-mix(in oklch, var(--color-base-content) 12%, transparent);
591
+ background: color-mix(in oklch, var(--color-base-content) 4%, transparent);
592
+ }
593
+
594
+ /* Hub machine picker + topbar menu */
595
+ #machine-picker {
596
+ background: color-mix(in oklch, var(--color-base-100) 92%, black);
597
+ }
598
+ .machine-pick-card {
599
+ background: color-mix(in oklch, var(--color-base-content) 3%, var(--color-base-100));
600
+ cursor: pointer;
601
+ }
602
+ .machine-pick-card:disabled {
603
+ cursor: not-allowed;
604
+ }
605
+ #machine-menu {
606
+ scrollbar-width: thin;
607
+ }
608
+ .machine-menu-item:disabled {
609
+ cursor: not-allowed;
610
+ }
611
+
612
+ .line-clamp-2 {
613
+ display: -webkit-box;
614
+ -webkit-line-clamp: 2;
615
+ -webkit-box-orient: vertical;
616
+ overflow: hidden;
617
+ }
618
+
619
+ /* Blockquote */
620
+ .md blockquote {
621
+ margin: 0.75em 0;
622
+ padding: 0.55em 0.9em;
623
+ border-left: 3px solid var(--color-info);
624
+ background: linear-gradient(
625
+ 90deg,
626
+ color-mix(in oklch, var(--color-info) 14%, var(--color-base-200)),
627
+ color-mix(in oklch, var(--color-info) 5%, var(--color-base-200))
628
+ );
629
+ border-radius: 0 8px 8px 0;
630
+ color: color-mix(in oklch, var(--color-info) 28%, var(--color-base-content));
631
+ }
632
+ .md blockquote p { margin: 0.35em 0; }
633
+ .md blockquote > :first-child { margin-top: 0; }
634
+ .md blockquote > :last-child { margin-bottom: 0; }
635
+ .md blockquote strong {
636
+ color: color-mix(in oklch, var(--color-info) 50%, var(--color-base-content)) !important;
637
+ }
638
+ .md blockquote blockquote {
639
+ margin-left: 0.25em;
640
+ border-left-color: var(--color-accent);
641
+ background: color-mix(in oklch, var(--color-accent) 10%, var(--color-base-200));
642
+ }
643
+
644
+ /* Links — DaisyUI sets a { color: inherit } */
645
+ .md a {
646
+ color: var(--color-primary) !important;
647
+ text-decoration: underline !important;
648
+ text-decoration-color: color-mix(in oklch, var(--color-primary) 45%, transparent);
649
+ text-underline-offset: 2px;
650
+ font-weight: 600;
651
+ transition: color .12s, text-decoration-color .12s;
652
+ }
653
+ .md a:hover {
654
+ color: var(--color-secondary) !important;
655
+ text-decoration-color: var(--color-secondary);
656
+ }
657
+
658
+ /* Tables */
659
+ .md .table-wrap {
660
+ overflow-x: auto;
661
+ margin: 0.75em 0;
662
+ border-radius: 8px;
663
+ border: 1px solid color-mix(in oklch, var(--color-primary) 28%, transparent);
664
+ box-shadow: 0 1px 0 color-mix(in oklch, var(--color-primary) 10%, transparent);
665
+ }
666
+ .md table {
667
+ border-collapse: collapse;
668
+ width: 100%;
669
+ margin: 0;
670
+ font-size: 0.88em;
671
+ line-height: 1.45;
672
+ }
673
+ .md th,
674
+ .md td {
675
+ border-width: 1px !important;
676
+ border-style: solid !important;
677
+ border-color: color-mix(in oklch, var(--color-primary) 18%, var(--color-base-300)) !important;
678
+ padding: 0.45em 0.7em;
679
+ text-align: left;
680
+ vertical-align: top;
681
+ }
682
+ .md th {
683
+ background: linear-gradient(
684
+ 180deg,
685
+ color-mix(in oklch, var(--color-primary) 22%, var(--color-base-200)),
686
+ color-mix(in oklch, var(--color-primary) 12%, var(--color-base-200))
687
+ );
688
+ color: color-mix(in oklch, var(--color-primary) 70%, var(--color-base-content)) !important;
689
+ font-weight: 700 !important;
690
+ white-space: nowrap;
691
+ }
692
+ .md tr:nth-child(even) td {
693
+ background: color-mix(in oklch, var(--color-primary) 5%, transparent);
694
+ }
695
+ .md tr:hover td {
696
+ background: color-mix(in oklch, var(--color-accent) 12%, transparent);
697
+ }
698
+
699
+ /* HR */
700
+ .md hr {
701
+ border: none;
702
+ height: 2px;
703
+ margin: 1.15em 0;
704
+ border-radius: 2px;
705
+ background: linear-gradient(
706
+ 90deg,
707
+ transparent,
708
+ color-mix(in oklch, var(--color-primary) 60%, transparent) 12%,
709
+ color-mix(in oklch, var(--color-accent) 55%, transparent) 50%,
710
+ color-mix(in oklch, var(--color-success) 50%, transparent) 88%,
711
+ transparent
712
+ );
713
+ }
714
+
715
+ /* Images */
716
+ .md img {
717
+ max-width: 100%;
718
+ height: auto;
719
+ border-radius: 8px;
720
+ border: 1px solid color-mix(in oklch, var(--color-primary) 25%, transparent);
721
+ margin: 0.5em 0;
722
+ box-shadow: 0 2px 8px color-mix(in oklch, var(--color-primary) 12%, transparent);
723
+ }
724
+
725
+ /* Kbd */
726
+ .md kbd {
727
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
728
+ font-size: 0.8em;
729
+ font-weight: 600;
730
+ padding: 0.12em 0.45em;
731
+ border-radius: 4px;
732
+ border: 1px solid color-mix(in oklch, var(--color-secondary) 35%, transparent);
733
+ background: color-mix(in oklch, var(--color-secondary) 12%, var(--color-base-200));
734
+ color: color-mix(in oklch, var(--color-secondary) 65%, var(--color-base-content));
735
+ box-shadow: 0 1px 0 color-mix(in oklch, var(--color-secondary) 20%, transparent);
736
+ }
737
+
738
+ .md li > p { margin: 0.25em 0; }
739
+
740
+ .msg-row.assistant .md {
741
+ min-width: 0;
742
+ }
743
+
744
+ /* ── Diff colors ─────────────────────────────────────────────────────────── */
745
+ .diff-add { color: oklch(var(--su)); }
746
+ .diff-del { color: oklch(var(--er)); }
747
+ .diff-hunk { color: oklch(var(--in)); }
748
+ .diff-head { color: oklch(var(--bc)/.5); }
749
+
750
+ /* ── Typing dots ─────────────────────────────────────────────────────────── */
751
+ .dot { width: 5px; height: 5px; background: currentColor; border-radius: 50%; display: inline-block; animation: blink 1.2s infinite; }
752
+ .dot:nth-child(2) { animation-delay: .4s; }
753
+ .dot:nth-child(3) { animation-delay: .8s; }
754
+ @keyframes blink { 0%,80%,100% { opacity:.2 } 40% { opacity:1 } }
755
+
756
+ /* ── Scrollbar ───────────────────────────────────────────────────────────── */
757
+ ::-webkit-scrollbar { width: 4px; height: 4px; }
758
+ ::-webkit-scrollbar-track { background: transparent; }
759
+ ::-webkit-scrollbar-thumb { background: oklch(var(--b3)); border-radius: 2px; }
760
+
761
+ /* ── Scroll jump buttons ─────────────────────────────────────────────────── */
762
+ .scroll-fab {
763
+ width: 32px; height: 32px; border-radius: 50%;
764
+ display: flex; align-items: center; justify-content: center;
765
+ font-size: 15px; line-height: 1; cursor: pointer;
766
+ background: oklch(var(--b2)); color: oklch(var(--bc));
767
+ border: 1px solid oklch(var(--b3));
768
+ box-shadow: 0 2px 6px rgba(0,0,0,.15);
769
+ opacity: .85; transition: opacity .15s, transform .15s;
770
+ }
771
+ .scroll-fab:hover { opacity: 1; transform: translateY(-1px); }
772
+ .scroll-fab.hidden { display: none; }
773
+
774
+ /* ── Tool cards ──────────────────────────────────────────────────────────── */
775
+ .tool-card {
776
+ border-radius: 6px;
777
+ border: 1px solid color-mix(in oklch, oklch(var(--su)) 18%, oklch(var(--b3)));
778
+ background: color-mix(in oklch, oklch(var(--su)) 6%, oklch(var(--b2)));
779
+ }
780
+ .tool-detail {
781
+ display: none;
782
+ margin-top: 0.25rem;
783
+ padding: 0.5rem;
784
+ border-radius: 4px;
785
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
786
+ font-size: 11px;
787
+ overflow-x: auto;
788
+ white-space: pre;
789
+ max-height: 18rem;
790
+ overflow-y: auto;
791
+ background: color-mix(in oklch, oklch(var(--bc)) 5%, oklch(var(--b1)));
792
+ color: oklch(var(--bc) / 0.85);
793
+ border: 1px solid oklch(var(--b3));
794
+ }
795
+ [data-theme="dark"] .tool-detail,
796
+ [data-theme="night"] .tool-detail,
797
+ [data-theme="black"] .tool-detail {
798
+ background: color-mix(in oklch, oklch(var(--b1)) 65%, black);
799
+ }
800
+ .tool-card.open .tool-detail { display: block; }
801
+ .tool-card.open .tool-chevron { transform: rotate(90deg); }
802
+ .tool-chevron { transition: transform .15s; display: inline-block; }
803
+
804
+ /* Tool batch (density: clean) */
805
+ .tool-batch {
806
+ border-radius: 6px;
807
+ border: 1px dashed oklch(var(--b3));
808
+ background: oklch(var(--b2) / 0.6);
809
+ cursor: pointer;
810
+ user-select: none;
811
+ }
812
+ .tool-batch .tool-batch-list { display: none; margin-top: 0.35rem; }
813
+ .tool-batch.open .tool-batch-list { display: flex; flex-direction: column; gap: 0.25rem; }
814
+ .tool-batch.open .tool-chevron { transform: rotate(90deg); }
815
+
816
+ /* Density modes */
817
+ #messages[data-density="clean"] { gap: 0.35rem; }
818
+ #messages[data-density="clean"] .msg-row { margin-block: 0; }
819
+ #messages[data-density="clean"] .tool-card:not(.tool-batch-item) {
820
+ /* individual tools still shown when inside expanded batch */
821
+ }
822
+ #messages[data-density="full"] .tool-card .tool-detail {
823
+ /* full density: detail stays collapsed until click, but preview is longer */
824
+ }
825
+ #messages[data-density="full"] .msg-ts { opacity: 0.55; }
826
+
827
+ /* ── Message timestamps ──────────────────────────────────────────────────── */
828
+ .msg-row { display: flex; flex-direction: column; gap: 2px; }
829
+ .msg-row.user { align-items: flex-end; }
830
+ .msg-row.assistant, .msg-row.error { align-items: flex-start; }
831
+ .msg-ts {
832
+ font-size: 10px;
833
+ line-height: 1;
834
+ color: oklch(var(--bc) / 0.32);
835
+ padding: 0 10px;
836
+ font-variant-numeric: tabular-nums;
837
+ user-select: none;
838
+ }
839
+ .msg-row.user .msg-ts { text-align: right; }
840
+
841
+ /* ── Long message collapse ───────────────────────────────────────────────── */
842
+ .msg-card .msg-body { max-height: 8em; overflow: hidden; mask-image: linear-gradient(to bottom, black 60%, transparent 100%); }
843
+ .msg-card.open .msg-body { max-height: none; mask-image: none; }
844
+ .msg-expand-btn { display: block; }
845
+
846
+ /* ── Git graph ───────────────────────────────────────────────────────────── */
847
+ .git-graph { font-family: monospace; font-size: 11px; line-height: 1.5; white-space: pre; color: oklch(var(--bc)/.7); }
848
+ .git-graph .gh { color: oklch(var(--su)); font-weight: 600; }
849
+ .git-graph .gm { color: oklch(var(--bc)/.85); }
850
+
851
+ /* ── Sidebar project management ──────────────────────────────────────────── */
852
+ .agent-pill {
853
+ font-size: 10px;
854
+ line-height: 1;
855
+ padding: 3px 7px;
856
+ border-radius: 999px;
857
+ border: 1px solid oklch(var(--b3));
858
+ color: oklch(var(--bc) / 0.55);
859
+ background: transparent;
860
+ cursor: pointer;
861
+ transition: background .12s, color .12s, border-color .12s;
862
+ }
863
+ .agent-pill:hover { color: oklch(var(--bc) / 0.85); background: oklch(var(--b3) / 0.5); }
864
+ .agent-pill.active {
865
+ color: oklch(var(--p));
866
+ border-color: color-mix(in oklch, oklch(var(--p)) 40%, transparent);
867
+ background: color-mix(in oklch, oklch(var(--p)) 12%, transparent);
868
+ font-weight: 600;
869
+ }
870
+ .project-header:hover .font-semibold { color: oklch(var(--p)); }
871
+
872
+ /* Shell tab terminal — keep dark intentionally (terminal aesthetic) */
873
+ #tab-shell { background: #0d1117; }
874
+ #term-output { color: #c9d1d9; }
875
+
876
+ /* ── Meta Agent panel (DaisyUI 5: use --color-* full values, solid surfaces) ── */
877
+ .meta-agent-panel {
878
+ position: fixed;
879
+ inset: 0;
880
+ z-index: 80;
881
+ display: flex;
882
+ align-items: stretch;
883
+ justify-content: flex-end;
884
+ }
885
+ .meta-agent-panel.hidden { display: none !important; }
886
+ .meta-agent-backdrop {
887
+ position: absolute;
888
+ inset: 0;
889
+ background: rgba(0, 0, 0, 0.55);
890
+ }
891
+ .meta-agent-sheet {
892
+ position: relative;
893
+ width: min(520px, 100vw);
894
+ height: 100%;
895
+ /* Solid panel — no alpha / no invalid oklch(var(--b1)) from DaisyUI 4 tokens */
896
+ background: var(--color-base-100);
897
+ color: var(--color-base-content);
898
+ border-left: 1px solid var(--color-base-300);
899
+ box-shadow: -12px 0 40px rgba(0, 0, 0, 0.35);
900
+ display: flex;
901
+ flex-direction: column;
902
+ animation: ma-slide-in 0.18s ease-out;
903
+ opacity: 1;
904
+ isolation: isolate;
905
+ }
906
+ .ma-hist-item {
907
+ border: 1px solid var(--color-base-300);
908
+ border-radius: 10px;
909
+ padding: 8px 10px;
910
+ background: var(--color-base-200);
911
+ transition: border-color .12s, background .12s;
912
+ }
913
+ .ma-hist-item:hover {
914
+ border-color: color-mix(in oklch, var(--color-primary) 40%, var(--color-base-300));
915
+ }
916
+ .ma-hist-item.active {
917
+ border-color: color-mix(in oklch, var(--color-primary) 55%, var(--color-base-300));
918
+ background: color-mix(in oklch, var(--color-primary) 12%, var(--color-base-200));
919
+ }
920
+ .ma-hist-open { cursor: pointer; }
921
+ .line-clamp-2 {
922
+ display: -webkit-box;
923
+ -webkit-line-clamp: 2;
924
+ -webkit-box-orient: vertical;
925
+ overflow: hidden;
926
+ }
927
+ #ma-resume-bar { min-height: 32px; }
928
+ @keyframes ma-slide-in {
929
+ from { transform: translateX(16px); }
930
+ to { transform: translateX(0); }
931
+ }
932
+ .meta-agent-header {
933
+ display: flex;
934
+ align-items: center;
935
+ justify-content: space-between;
936
+ gap: 8px;
937
+ padding: 10px 12px;
938
+ border-bottom: 1px solid var(--color-base-300);
939
+ flex-shrink: 0;
940
+ background: var(--color-base-200);
941
+ }
942
+ .meta-agent-body {
943
+ min-height: 0;
944
+ background: var(--color-base-100);
945
+ }
946
+ .ma-msg { max-width: 100%; }
947
+ .ma-bubble {
948
+ border-radius: 12px;
949
+ padding: 8px 12px;
950
+ font-size: 13px;
951
+ line-height: 1.55;
952
+ word-break: break-word;
953
+ }
954
+ .ma-bubble.user {
955
+ background: color-mix(in oklch, var(--color-primary) 18%, var(--color-base-100));
956
+ border: 1px solid color-mix(in oklch, var(--color-primary) 30%, var(--color-base-300));
957
+ margin-left: 12%;
958
+ }
959
+ .ma-bubble.assistant {
960
+ background: var(--color-base-200);
961
+ border: 1px solid var(--color-base-300);
962
+ margin-right: 4%;
963
+ }
964
+ .ma-bubble.error {
965
+ background: color-mix(in oklch, var(--color-error) 15%, var(--color-base-100));
966
+ border: 1px solid color-mix(in oklch, var(--color-error) 40%, var(--color-base-300));
967
+ color: var(--color-error);
968
+ font-size: 12px;
969
+ }
970
+ .ma-sys {
971
+ font-size: 11px;
972
+ color: color-mix(in oklch, var(--color-base-content) 45%, transparent);
973
+ text-align: center;
974
+ padding: 4px 8px;
975
+ }
976
+ .ma-tool {
977
+ font-size: 11px;
978
+ font-family: ui-monospace, monospace;
979
+ background: var(--color-base-200);
980
+ border: 1px solid var(--color-base-300);
981
+ border-radius: 8px;
982
+ padding: 6px 8px;
983
+ margin-right: 8%;
984
+ }
985
+ .ma-tool.done { border-color: color-mix(in oklch, var(--color-success) 45%, var(--color-base-300)); }
986
+ .ma-tool.error { border-color: color-mix(in oklch, var(--color-error) 45%, var(--color-base-300)); }
987
+ .ma-tool-name {
988
+ font-weight: 700;
989
+ color: var(--color-primary);
990
+ margin-right: 6px;
991
+ }
992
+ .ma-tool-phase { color: color-mix(in oklch, var(--color-base-content) 45%, transparent); }
993
+ .ma-tool-args, .ma-tool-result {
994
+ margin: 4px 0 0;
995
+ white-space: pre-wrap;
996
+ word-break: break-all;
997
+ max-height: 80px;
998
+ overflow: auto;
999
+ font-size: 10px;
1000
+ opacity: 0.75;
1001
+ }
1002
+ .ma-thumb {
1003
+ width: 56px;
1004
+ height: 56px;
1005
+ border-radius: 8px;
1006
+ overflow: hidden;
1007
+ border: 1px solid var(--color-base-300);
1008
+ position: relative;
1009
+ flex-shrink: 0;
1010
+ }
1011
+ .ma-thumb img { width: 100%; height: 100%; object-fit: cover; }
1012
+ .ma-thumb-path {
1013
+ display: flex;
1014
+ align-items: center;
1015
+ justify-content: center;
1016
+ width: 100%;
1017
+ height: 100%;
1018
+ font-size: 10px;
1019
+ background: var(--color-base-200);
1020
+ }
1021
+ .ma-thumb-label {
1022
+ position: absolute;
1023
+ left: 0;
1024
+ bottom: 0;
1025
+ right: 0;
1026
+ font-size: 9px;
1027
+ text-align: center;
1028
+ background: rgba(0,0,0,.55);
1029
+ color: #fff;
1030
+ line-height: 1.2;
1031
+ padding: 1px 0;
1032
+ }
1033
+ .ma-thumb-x {
1034
+ position: absolute;
1035
+ top: 0;
1036
+ right: 0;
1037
+ background: rgba(0,0,0,.65);
1038
+ color: #fff;
1039
+ border: 0;
1040
+ font-size: 10px;
1041
+ width: 16px;
1042
+ height: 16px;
1043
+ cursor: pointer;
1044
+ line-height: 1;
1045
+ z-index: 1;
1046
+ }
1047
+ .ma-report-md { font-size: 13px; }
1048
+ .ma-report-item { display: block; }