claude-maestro 0.1.16

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 (125) hide show
  1. package/README.md +130 -0
  2. package/bin/maestro.mjs +45 -0
  3. package/out/main/index.js +5293 -0
  4. package/out/preload/index.js +130 -0
  5. package/out/renderer/assets/apl-fqmucPXA.js +140 -0
  6. package/out/renderer/assets/asciiarmor-DucZyvP0.js +56 -0
  7. package/out/renderer/assets/asn1-BnOEsgAm.js +144 -0
  8. package/out/renderer/assets/asterisk-QAlztEwS.js +345 -0
  9. package/out/renderer/assets/brainfuck-DZVCuF_t.js +53 -0
  10. package/out/renderer/assets/clike-xqXYL6ge.js +805 -0
  11. package/out/renderer/assets/clojure-BhXMqnxz.js +849 -0
  12. package/out/renderer/assets/cmake-BGaNd9E7.js +71 -0
  13. package/out/renderer/assets/cobol-4yqQntpt.js +120 -0
  14. package/out/renderer/assets/coffeescript-D2dXvhEc.js +308 -0
  15. package/out/renderer/assets/commonlisp-CF_VNHQR.js +130 -0
  16. package/out/renderer/assets/crystal-DyuLTqLs.js +398 -0
  17. package/out/renderer/assets/css-c-jst79C.js +1783 -0
  18. package/out/renderer/assets/cypher-Dlu_3r4V.js +121 -0
  19. package/out/renderer/assets/d-UURgV0Ux.js +179 -0
  20. package/out/renderer/assets/diff-B_Bi2Crb.js +25 -0
  21. package/out/renderer/assets/dockerfile-Bvk733Ga.js +201 -0
  22. package/out/renderer/assets/dtd-Dy74G54E.js +114 -0
  23. package/out/renderer/assets/dylan-TSb-Nfix.js +314 -0
  24. package/out/renderer/assets/ebnf-4fKAGW3a.js +140 -0
  25. package/out/renderer/assets/ecl-B59qGGVg.js +178 -0
  26. package/out/renderer/assets/eiffel-Dze7nlu3.js +134 -0
  27. package/out/renderer/assets/elm-DG7jkhNZ.js +176 -0
  28. package/out/renderer/assets/erlang-BO6gOnGA.js +674 -0
  29. package/out/renderer/assets/factor-CMxFHDqz.js +65 -0
  30. package/out/renderer/assets/fcl-CDDUNjTj.js +141 -0
  31. package/out/renderer/assets/forth-B9D2JCeE.js +116 -0
  32. package/out/renderer/assets/fortran-CAG2BFbe.js +467 -0
  33. package/out/renderer/assets/gas-d3KEcW3x.js +294 -0
  34. package/out/renderer/assets/gherkin-DhZlEZiy.js +115 -0
  35. package/out/renderer/assets/groovy-CpwJiBl7.js +223 -0
  36. package/out/renderer/assets/haskell-ySd-OUo8.js +459 -0
  37. package/out/renderer/assets/haxe-7MlzfeYV.js +514 -0
  38. package/out/renderer/assets/http-BqypyemW.js +79 -0
  39. package/out/renderer/assets/idl-4HIGJlDI.js +985 -0
  40. package/out/renderer/assets/index-2SQReYbL.js +117 -0
  41. package/out/renderer/assets/index-B4G_DF7l.js +178 -0
  42. package/out/renderer/assets/index-BJ7HHtlW.css +4015 -0
  43. package/out/renderer/assets/index-BLk1t3tc.js +151 -0
  44. package/out/renderer/assets/index-BLtm0KYA.js +157 -0
  45. package/out/renderer/assets/index-BPgGZ4iY.js +82 -0
  46. package/out/renderer/assets/index-BQE9vCdv.js +332 -0
  47. package/out/renderer/assets/index-BYr39Do3.js +61 -0
  48. package/out/renderer/assets/index-Ba0sUbhl.js +47177 -0
  49. package/out/renderer/assets/index-BewSkGJT.js +1041 -0
  50. package/out/renderer/assets/index-BnId7J8H.js +1021 -0
  51. package/out/renderer/assets/index-Btn996gP.js +406 -0
  52. package/out/renderer/assets/index-C7i4WyfA.js +311 -0
  53. package/out/renderer/assets/index-CW9SAu99.js +385 -0
  54. package/out/renderer/assets/index-CXmk7jHk.js +291 -0
  55. package/out/renderer/assets/index-CyQp9UDR.js +82 -0
  56. package/out/renderer/assets/index-Da2gJ_Wd.js +704 -0
  57. package/out/renderer/assets/index-DkFO-IXC.js +2488 -0
  58. package/out/renderer/assets/index-DqrDpNqn.js +689 -0
  59. package/out/renderer/assets/index-Dw7p19YD.js +327 -0
  60. package/out/renderer/assets/index-QPm3UFYR.js +97 -0
  61. package/out/renderer/assets/index-RGiHNShF.js +1768 -0
  62. package/out/renderer/assets/index-RgZE5T_I.js +642 -0
  63. package/out/renderer/assets/index-t8kJBumF.js +312 -0
  64. package/out/renderer/assets/javascript-C_OHM9hj.js +994 -0
  65. package/out/renderer/assets/julia-Bs6JJhYG.js +407 -0
  66. package/out/renderer/assets/livescript-DmzgM3Yt.js +296 -0
  67. package/out/renderer/assets/lua-Cvg8VrAA.js +256 -0
  68. package/out/renderer/assets/mathematica-DNLOL9PQ.js +110 -0
  69. package/out/renderer/assets/mbox-Ga7d4MMN.js +117 -0
  70. package/out/renderer/assets/mirc-Dma3B8rS.js +107 -0
  71. package/out/renderer/assets/mllike-DHn7xckP.js +334 -0
  72. package/out/renderer/assets/modelica-0d55jYY0.js +147 -0
  73. package/out/renderer/assets/mscgen-DdqZYINH.js +135 -0
  74. package/out/renderer/assets/mumps-Btr8VblO.js +93 -0
  75. package/out/renderer/assets/nginx-DTDtBDVN.js +141 -0
  76. package/out/renderer/assets/nsis-3zG7tgur.js +62 -0
  77. package/out/renderer/assets/ntriples-CvgOYMpL.js +153 -0
  78. package/out/renderer/assets/octave-DYBj3-tl.js +200 -0
  79. package/out/renderer/assets/oz-R_e8WMIi.js +231 -0
  80. package/out/renderer/assets/pascal-GD8iposT.js +105 -0
  81. package/out/renderer/assets/perl-DL9mHpoi.js +1105 -0
  82. package/out/renderer/assets/pig-C_4T4YIV.js +101 -0
  83. package/out/renderer/assets/powershell-B0suO7Vd.js +328 -0
  84. package/out/renderer/assets/properties-BR-vP1aU.js +58 -0
  85. package/out/renderer/assets/protobuf-BxgpyhoW.js +77 -0
  86. package/out/renderer/assets/pug-CTXt1f8z.js +405 -0
  87. package/out/renderer/assets/puppet-Bdao66PW.js +137 -0
  88. package/out/renderer/assets/python-CvWbmiX4.js +427 -0
  89. package/out/renderer/assets/q-CrbCVq4a.js +131 -0
  90. package/out/renderer/assets/r-V7nswm59.js +170 -0
  91. package/out/renderer/assets/rpm-C-DLY-If.js +109 -0
  92. package/out/renderer/assets/ruby-JDKLJNK0.js +330 -0
  93. package/out/renderer/assets/sas-D2UG-yhZ.js +207 -0
  94. package/out/renderer/assets/scheme-BKzrkGJD.js +222 -0
  95. package/out/renderer/assets/shell-BlsXDxCn.js +222 -0
  96. package/out/renderer/assets/sieve-CjwBwOY5.js +135 -0
  97. package/out/renderer/assets/simple-mode-DMneyfDu.js +130 -0
  98. package/out/renderer/assets/smalltalk-BOIGQuhN.js +121 -0
  99. package/out/renderer/assets/solr-CwD7U71z.js +69 -0
  100. package/out/renderer/assets/sparql-DYskk2vE.js +249 -0
  101. package/out/renderer/assets/spreadsheet-Bgtt3oLP.js +87 -0
  102. package/out/renderer/assets/sql-BSrOzCRI.js +354 -0
  103. package/out/renderer/assets/stex-B6LNC55o.js +231 -0
  104. package/out/renderer/assets/stylus-BkS-boTH.js +565 -0
  105. package/out/renderer/assets/swift-FRZi1uvB.js +291 -0
  106. package/out/renderer/assets/tcl-CUcaCdmq.js +114 -0
  107. package/out/renderer/assets/textile-BnFpjsrl.js +414 -0
  108. package/out/renderer/assets/tiddlywiki-CjprD-Qp.js +218 -0
  109. package/out/renderer/assets/tiki-DK9DOeWn.js +268 -0
  110. package/out/renderer/assets/toml-BOuWGMcf.js +76 -0
  111. package/out/renderer/assets/troff-E1bJ0PPL.js +61 -0
  112. package/out/renderer/assets/ttcn-cfg-Dc39-fIP.js +133 -0
  113. package/out/renderer/assets/ttcn-tKd4HLu4.js +192 -0
  114. package/out/renderer/assets/turtle-Dq7-1WAf.js +124 -0
  115. package/out/renderer/assets/vb-Dp90gtsv.js +196 -0
  116. package/out/renderer/assets/vbscript-CI6_mxxU.js +479 -0
  117. package/out/renderer/assets/velocity-BwIZK1TH.js +149 -0
  118. package/out/renderer/assets/verilog-DDCYnHN8.js +430 -0
  119. package/out/renderer/assets/vhdl-DCkMIyT9.js +158 -0
  120. package/out/renderer/assets/webidl-BTLTThCm.js +204 -0
  121. package/out/renderer/assets/xquery-BrBUuxMR.js +525 -0
  122. package/out/renderer/assets/yacas-b5lAVEIl.js +130 -0
  123. package/out/renderer/assets/z80-BZV19vqv.js +93 -0
  124. package/out/renderer/index.html +16 -0
  125. package/package.json +109 -0
@@ -0,0 +1,4015 @@
1
+ :root {
2
+ --bg: #16171a;
3
+ --panel: #1d1e23;
4
+ --panel-2: #222329;
5
+ --border: #2a2c33;
6
+ --text: #d7d8db;
7
+ --dim: #8b8d94;
8
+ --accent: #d97757;
9
+ --attention: #e2b93d;
10
+ --working: #58a6ff;
11
+ --error: #e5484d;
12
+ --green: #4cc38a;
13
+ }
14
+
15
+ * {
16
+ box-sizing: border-box;
17
+ margin: 0;
18
+ padding: 0;
19
+ }
20
+
21
+ html,
22
+ body,
23
+ #root {
24
+ height: 100%;
25
+ overflow: hidden;
26
+ }
27
+
28
+ body {
29
+ background: var(--bg);
30
+ color: var(--text);
31
+ font-family: 'Segoe UI', system-ui, sans-serif;
32
+ font-size: 13px;
33
+ user-select: none;
34
+ }
35
+
36
+ .app {
37
+ display: flex;
38
+ height: 100%;
39
+ position: relative;
40
+ /* own stacking context so .app-bg's z-index:-1 stays inside the app */
41
+ isolation: isolate;
42
+ }
43
+
44
+ /* Custom background image layer — sits behind every panel and the terminal. */
45
+ .app-bg {
46
+ position: absolute;
47
+ inset: 0;
48
+ z-index: -1;
49
+ background-size: cover;
50
+ background-position: center;
51
+ pointer-events: none;
52
+ }
53
+
54
+ /*
55
+ * With a background image set, the surfaces painted from these variables turn
56
+ * translucent so the image shows through everywhere — sidebar, tabs, explorer
57
+ * and the terminal (xterm itself goes transparent in TerminalHost).
58
+ */
59
+ .app.has-bg {
60
+ --bg: rgba(22, 23, 26, 0.82);
61
+ --panel: rgba(29, 30, 35, 0.82);
62
+ --panel-2: rgba(34, 35, 41, 0.82);
63
+ }
64
+
65
+ .app.loading {
66
+ align-items: center;
67
+ justify-content: center;
68
+ color: var(--dim);
69
+ }
70
+
71
+ .btn {
72
+ background: var(--panel-2);
73
+ color: var(--text);
74
+ border: 1px solid var(--border);
75
+ border-radius: 4px;
76
+ padding: 4px 10px;
77
+ cursor: pointer;
78
+ font-size: 12px;
79
+ }
80
+
81
+ .btn:hover {
82
+ border-color: var(--dim);
83
+ }
84
+
85
+ .btn.primary {
86
+ background: var(--accent);
87
+ border-color: var(--accent);
88
+ color: #fff;
89
+ font-weight: 600;
90
+ }
91
+
92
+ .btn.ghost {
93
+ background: transparent;
94
+ border: none;
95
+ color: var(--dim);
96
+ padding: 2px 6px;
97
+ }
98
+
99
+ .btn.ghost:hover {
100
+ color: var(--text);
101
+ }
102
+
103
+ .btn.ghost.on {
104
+ color: var(--accent);
105
+ }
106
+
107
+ .row {
108
+ display: flex;
109
+ gap: 8px;
110
+ }
111
+
112
+ /* ---------- sidebar ---------- */
113
+
114
+ .sidebar {
115
+ width: 220px;
116
+ min-width: 220px;
117
+ background: var(--panel);
118
+ border-right: 1px solid var(--border);
119
+ display: flex;
120
+ flex-direction: column;
121
+ }
122
+
123
+ .sidebar-header {
124
+ display: flex;
125
+ justify-content: space-between;
126
+ align-items: center;
127
+ padding: 10px 12px 6px;
128
+ font-size: 11px;
129
+ font-weight: 600;
130
+ letter-spacing: 0.08em;
131
+ text-transform: uppercase;
132
+ color: var(--dim);
133
+ }
134
+
135
+ .sidebar-list {
136
+ overflow-y: auto;
137
+ flex: 1;
138
+ }
139
+
140
+ .session-entry {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 8px;
144
+ padding: 7px 8px 7px 10px;
145
+ border-left: 3px solid transparent;
146
+ cursor: pointer;
147
+ }
148
+
149
+ .session-entry:hover {
150
+ background: var(--panel-2);
151
+ }
152
+
153
+ .session-entry.active {
154
+ background: var(--panel-2);
155
+ border-left-color: var(--accent);
156
+ }
157
+
158
+ .session-entry .close {
159
+ visibility: hidden;
160
+ }
161
+
162
+ .session-entry:hover .close {
163
+ visibility: visible;
164
+ }
165
+
166
+ .session-meta {
167
+ flex: 1;
168
+ min-width: 0;
169
+ display: flex;
170
+ flex-direction: column;
171
+ }
172
+
173
+ .session-name {
174
+ font-weight: 600;
175
+ white-space: nowrap;
176
+ overflow: hidden;
177
+ text-overflow: ellipsis;
178
+ }
179
+
180
+ .session-folder {
181
+ font-size: 11px;
182
+ color: var(--dim);
183
+ white-space: nowrap;
184
+ overflow: hidden;
185
+ text-overflow: ellipsis;
186
+ direction: rtl;
187
+ text-align: left;
188
+ }
189
+
190
+ .rename-input {
191
+ background: var(--bg);
192
+ border: 1px solid var(--accent);
193
+ border-radius: 3px;
194
+ color: var(--text);
195
+ font-size: 13px;
196
+ padding: 1px 4px;
197
+ width: 100%;
198
+ }
199
+
200
+ .glyph {
201
+ width: 14px;
202
+ text-align: center;
203
+ font-size: 13px;
204
+ }
205
+
206
+ .glyph.status-working {
207
+ color: var(--working);
208
+ animation: spin 1.2s linear infinite;
209
+ display: inline-block;
210
+ }
211
+
212
+ /* Blocked on the user — the only nagging signal: amber, breathing pulse. */
213
+ .glyph.status-needs-attention {
214
+ color: var(--attention);
215
+ display: inline-block;
216
+ animation: pulse 1.4s ease-in-out infinite;
217
+ }
218
+
219
+ /* Finished a turn — your turn now: green check that pops in once, then rests. */
220
+ .glyph.status-done {
221
+ color: var(--green);
222
+ font-weight: 700;
223
+ display: inline-block;
224
+ animation: done-pop 0.5s ease-out;
225
+ }
226
+
227
+ .glyph.status-idle,
228
+ .glyph.status-starting {
229
+ color: var(--dim);
230
+ }
231
+
232
+ .glyph.status-exited,
233
+ .glyph.status-error {
234
+ color: var(--error);
235
+ }
236
+
237
+ @keyframes spin {
238
+ to {
239
+ transform: rotate(360deg);
240
+ }
241
+ }
242
+
243
+ @keyframes pulse {
244
+ 0%,
245
+ 100% {
246
+ opacity: 1;
247
+ transform: scale(1);
248
+ }
249
+ 50% {
250
+ opacity: 0.45;
251
+ transform: scale(0.8);
252
+ }
253
+ }
254
+
255
+ @keyframes done-pop {
256
+ 0% {
257
+ transform: scale(0.3);
258
+ opacity: 0;
259
+ }
260
+ 55% {
261
+ transform: scale(1.4);
262
+ opacity: 1;
263
+ }
264
+ 100% {
265
+ transform: scale(1);
266
+ opacity: 1;
267
+ }
268
+ }
269
+
270
+ /* Time-based watchdog badge — distinct from the instantaneous status glyph. */
271
+ .watchdog-badge {
272
+ flex: none;
273
+ width: 14px;
274
+ text-align: center;
275
+ font-size: 12px;
276
+ line-height: 14px;
277
+ cursor: help;
278
+ animation: pulse 1.5s ease-in-out infinite;
279
+ }
280
+
281
+ .watchdog-badge.stalled {
282
+ color: var(--working);
283
+ }
284
+
285
+ .watchdog-badge.unanswered {
286
+ color: var(--attention);
287
+ }
288
+
289
+ /* ---------- usage widget ---------- */
290
+
291
+ .usage-widget {
292
+ border-top: 1px solid var(--border);
293
+ background: var(--panel);
294
+ flex: none;
295
+ }
296
+
297
+ .usage-bar {
298
+ display: flex;
299
+ flex-wrap: wrap;
300
+ align-items: center;
301
+ gap: 2px 6px;
302
+ padding: 8px 12px;
303
+ cursor: pointer;
304
+ font-size: 12px;
305
+ }
306
+
307
+ .usage-bar:hover {
308
+ background: var(--panel-2);
309
+ }
310
+
311
+ .usage-coin {
312
+ color: var(--green);
313
+ font-size: 11px;
314
+ }
315
+
316
+ .usage-today {
317
+ font-weight: 600;
318
+ }
319
+
320
+ .usage-dim {
321
+ color: var(--dim);
322
+ }
323
+
324
+ .usage-chevron {
325
+ margin-left: auto;
326
+ color: var(--dim);
327
+ font-size: 10px;
328
+ }
329
+
330
+ /* Full-width second line of the collapsed bar with the burn-rate verdict. */
331
+ .usage-runout {
332
+ flex-basis: 100%;
333
+ font-size: 11px;
334
+ color: var(--dim);
335
+ }
336
+
337
+ .usage-warn {
338
+ color: var(--attention);
339
+ }
340
+
341
+ .usage-window {
342
+ display: flex;
343
+ flex-direction: column;
344
+ gap: 2px;
345
+ font-size: 11px;
346
+ }
347
+
348
+ /* Transparent click-away layer behind the usage popup. */
349
+ .usage-popup-overlay {
350
+ position: fixed;
351
+ inset: 0;
352
+ z-index: 200;
353
+ }
354
+
355
+ .usage-popup {
356
+ position: fixed;
357
+ width: 380px;
358
+ max-width: calc(100vw - 24px);
359
+ max-height: 70vh;
360
+ overflow-y: auto;
361
+ background: var(--panel-2);
362
+ border: 1px solid var(--border);
363
+ border-radius: 10px;
364
+ padding: 12px 14px;
365
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.5);
366
+ display: flex;
367
+ flex-direction: column;
368
+ gap: 8px;
369
+ font-size: 12px;
370
+ }
371
+
372
+ .usage-summary {
373
+ display: flex;
374
+ justify-content: space-between;
375
+ gap: 8px;
376
+ }
377
+
378
+ .usage-stat {
379
+ display: flex;
380
+ flex-direction: column;
381
+ align-items: flex-start;
382
+ }
383
+
384
+ .usage-stat-value {
385
+ font-size: 14px;
386
+ font-weight: 600;
387
+ color: var(--green);
388
+ }
389
+
390
+ .usage-stat-label {
391
+ font-size: 10px;
392
+ text-transform: uppercase;
393
+ letter-spacing: 0.06em;
394
+ color: var(--dim);
395
+ }
396
+
397
+ .usage-tokens {
398
+ display: flex;
399
+ flex-wrap: wrap;
400
+ gap: 4px 10px;
401
+ font-size: 10px;
402
+ color: var(--dim);
403
+ font-family: 'Cascadia Mono', Consolas, monospace;
404
+ }
405
+
406
+ .usage-section {
407
+ margin-top: 2px;
408
+ font-size: 10px;
409
+ font-weight: 600;
410
+ letter-spacing: 0.08em;
411
+ text-transform: uppercase;
412
+ color: var(--dim);
413
+ }
414
+
415
+ .usage-rows {
416
+ display: flex;
417
+ flex-direction: column;
418
+ }
419
+
420
+ .usage-row {
421
+ display: flex;
422
+ align-items: center;
423
+ gap: 8px;
424
+ padding: 2px 0;
425
+ font-size: 11px;
426
+ }
427
+
428
+ .usage-row.dim {
429
+ color: var(--dim);
430
+ }
431
+
432
+ .usage-row.head {
433
+ color: var(--dim);
434
+ font-size: 9px;
435
+ text-transform: uppercase;
436
+ letter-spacing: 0.06em;
437
+ }
438
+
439
+ .usage-row-name {
440
+ flex: 1;
441
+ min-width: 0;
442
+ overflow-wrap: anywhere;
443
+ display: flex;
444
+ align-items: center;
445
+ gap: 5px;
446
+ }
447
+
448
+ .usage-row-name.live {
449
+ font-weight: 600;
450
+ }
451
+
452
+ .usage-live-dot {
453
+ width: 6px;
454
+ height: 6px;
455
+ border-radius: 50%;
456
+ background: var(--green);
457
+ flex: none;
458
+ }
459
+
460
+ .usage-row-today {
461
+ width: 52px;
462
+ text-align: right;
463
+ color: var(--dim);
464
+ flex: none;
465
+ }
466
+
467
+ .usage-row-total {
468
+ width: 56px;
469
+ text-align: right;
470
+ flex: none;
471
+ font-variant-numeric: tabular-nums;
472
+ }
473
+
474
+ .usage-row-pct {
475
+ width: 40px;
476
+ text-align: right;
477
+ color: var(--dim);
478
+ flex: none;
479
+ font-variant-numeric: tabular-nums;
480
+ }
481
+
482
+ /* ---------- plan limit bars (subscription session/weekly utilization) ---------- */
483
+
484
+ .usage-limits {
485
+ display: flex;
486
+ flex-direction: column;
487
+ gap: 8px;
488
+ }
489
+
490
+ .usage-limit {
491
+ display: flex;
492
+ flex-direction: column;
493
+ gap: 3px;
494
+ }
495
+
496
+ .usage-limit-head {
497
+ display: flex;
498
+ align-items: baseline;
499
+ justify-content: space-between;
500
+ gap: 8px;
501
+ font-size: 11px;
502
+ }
503
+
504
+ .usage-limit-pct {
505
+ flex: none;
506
+ color: var(--dim);
507
+ font-variant-numeric: tabular-nums;
508
+ }
509
+
510
+ .usage-limit-track {
511
+ height: 6px;
512
+ border-radius: 3px;
513
+ background: var(--border);
514
+ overflow: hidden;
515
+ }
516
+
517
+ .usage-limit-fill {
518
+ height: 100%;
519
+ border-radius: 3px;
520
+ transition: width 0.3s ease;
521
+ }
522
+
523
+ .usage-limit-reset {
524
+ font-size: 10px;
525
+ color: var(--dim);
526
+ }
527
+
528
+ /* ---------- explorer ---------- */
529
+
530
+ .explorer {
531
+ width: 240px;
532
+ min-width: 240px;
533
+ background: var(--panel);
534
+ border-right: 1px solid var(--border);
535
+ display: flex;
536
+ flex-direction: column;
537
+ position: relative;
538
+ }
539
+
540
+ .explorer-header {
541
+ display: flex;
542
+ justify-content: space-between;
543
+ align-items: center;
544
+ padding: 10px 12px 6px;
545
+ font-size: 11px;
546
+ font-weight: 600;
547
+ letter-spacing: 0.08em;
548
+ text-transform: uppercase;
549
+ color: var(--dim);
550
+ }
551
+
552
+ .explorer-title {
553
+ white-space: nowrap;
554
+ overflow: hidden;
555
+ text-overflow: ellipsis;
556
+ }
557
+
558
+ .explorer-tree {
559
+ flex: 1;
560
+ overflow: auto;
561
+ padding-bottom: 8px;
562
+ }
563
+
564
+ .tree-row {
565
+ display: flex;
566
+ align-items: center;
567
+ gap: 4px;
568
+ padding: 2px 8px;
569
+ cursor: pointer;
570
+ white-space: nowrap;
571
+ }
572
+
573
+ .tree-row:hover {
574
+ background: var(--panel-2);
575
+ }
576
+
577
+ .tree-row .chevron {
578
+ width: 12px;
579
+ color: var(--dim);
580
+ font-size: 10px;
581
+ }
582
+
583
+ .tree-row.file {
584
+ padding-left: 20px;
585
+ }
586
+
587
+ .tree-name {
588
+ overflow: hidden;
589
+ text-overflow: ellipsis;
590
+ }
591
+
592
+ .tree-row.dir .tree-name {
593
+ color: #b9bcc4;
594
+ font-weight: 500;
595
+ }
596
+
597
+ .tree-row.flash {
598
+ background: rgba(217, 119, 87, 0.16);
599
+ }
600
+
601
+ .flash-dot {
602
+ font-size: 10px;
603
+ color: var(--attention);
604
+ }
605
+
606
+ .tree-loading {
607
+ color: var(--dim);
608
+ padding: 2px 8px;
609
+ }
610
+
611
+ .recent {
612
+ border-top: 1px solid var(--border);
613
+ max-height: 200px;
614
+ overflow-y: auto;
615
+ padding-bottom: 6px;
616
+ }
617
+
618
+ .recent-header {
619
+ padding: 8px 12px 4px;
620
+ font-size: 11px;
621
+ font-weight: 600;
622
+ letter-spacing: 0.08em;
623
+ text-transform: uppercase;
624
+ color: var(--dim);
625
+ }
626
+
627
+ .recent-row {
628
+ display: flex;
629
+ align-items: center;
630
+ gap: 6px;
631
+ padding: 2px 12px;
632
+ cursor: pointer;
633
+ }
634
+
635
+ .recent-row:hover {
636
+ background: var(--panel-2);
637
+ }
638
+
639
+ .recent-name {
640
+ flex: 1;
641
+ overflow: hidden;
642
+ text-overflow: ellipsis;
643
+ white-space: nowrap;
644
+ }
645
+
646
+ .recent-age {
647
+ color: var(--dim);
648
+ font-size: 11px;
649
+ }
650
+
651
+ /* ---------- git panel (status + history, below the file tree) ---------- */
652
+
653
+ .git-panel {
654
+ border-top: 1px solid var(--border);
655
+ max-height: 280px;
656
+ overflow-y: auto;
657
+ padding-bottom: 6px;
658
+ }
659
+
660
+ .git-header {
661
+ display: flex;
662
+ align-items: center;
663
+ justify-content: space-between;
664
+ padding: 4px 8px 0 12px;
665
+ }
666
+
667
+ .git-title-toggle {
668
+ display: flex;
669
+ align-items: center;
670
+ gap: 4px;
671
+ font-size: 11px;
672
+ font-weight: 600;
673
+ letter-spacing: 0.08em;
674
+ text-transform: uppercase;
675
+ color: var(--dim);
676
+ cursor: pointer;
677
+ }
678
+
679
+ .git-chevron {
680
+ font-size: 10px;
681
+ }
682
+
683
+ .git-empty {
684
+ padding: 4px 12px 6px;
685
+ font-size: 11px;
686
+ color: var(--dim);
687
+ display: flex;
688
+ flex-direction: column;
689
+ align-items: flex-start;
690
+ gap: 6px;
691
+ }
692
+
693
+ .git-empty-text {
694
+ line-height: 1.4;
695
+ }
696
+
697
+ .git-chips {
698
+ display: flex;
699
+ flex-wrap: wrap;
700
+ align-items: center;
701
+ gap: 5px;
702
+ padding: 4px 12px 6px;
703
+ }
704
+
705
+ .git-branch {
706
+ font-family: 'Cascadia Mono', Consolas, monospace;
707
+ font-size: 11px;
708
+ color: var(--text);
709
+ max-width: 140px;
710
+ overflow: hidden;
711
+ text-overflow: ellipsis;
712
+ white-space: nowrap;
713
+ }
714
+
715
+ .git-branch.detached {
716
+ color: var(--attention);
717
+ }
718
+
719
+ .git-chip {
720
+ font-size: 10px;
721
+ padding: 0 5px;
722
+ border-radius: 8px;
723
+ background: var(--panel-2);
724
+ color: var(--dim);
725
+ white-space: nowrap;
726
+ }
727
+
728
+ .git-chip.staged { color: var(--green); }
729
+ .git-chip.unstaged { color: var(--attention); }
730
+ .git-chip.untracked { color: var(--working); }
731
+ .git-chip.clean { color: var(--green); }
732
+
733
+ .git-files {
734
+ display: flex;
735
+ flex-direction: column;
736
+ max-height: 160px;
737
+ overflow-y: auto;
738
+ margin-bottom: 4px;
739
+ }
740
+
741
+ .git-file {
742
+ display: flex;
743
+ align-items: baseline;
744
+ gap: 7px;
745
+ padding: 2px 12px;
746
+ cursor: pointer;
747
+ }
748
+
749
+ .git-file:hover {
750
+ background: var(--panel-2);
751
+ }
752
+
753
+ .git-file-status {
754
+ flex: none;
755
+ min-width: 14px;
756
+ font-family: 'Cascadia Mono', Consolas, monospace;
757
+ font-size: 10px;
758
+ font-weight: 600;
759
+ text-align: center;
760
+ }
761
+
762
+ .git-file-status.s-m { color: var(--attention); }
763
+ .git-file-status.s-a { color: var(--green); }
764
+ .git-file-status.s-d { color: var(--error); }
765
+ .git-file-status.s-r,
766
+ .git-file-status.s-c { color: var(--accent); }
767
+ .git-file-status.s-u { color: var(--error); }
768
+ .git-file-status.s-untracked { color: var(--working); }
769
+
770
+ .git-file-path {
771
+ font-size: 11px;
772
+ overflow: hidden;
773
+ text-overflow: ellipsis;
774
+ white-space: nowrap;
775
+ direction: rtl; /* ellipsis on the left so the file name stays visible */
776
+ text-align: left;
777
+ }
778
+
779
+ .git-header-actions {
780
+ display: flex;
781
+ align-items: center;
782
+ gap: 2px;
783
+ }
784
+
785
+ .git-subhead {
786
+ font-size: 10px;
787
+ font-weight: 600;
788
+ letter-spacing: 0.06em;
789
+ text-transform: uppercase;
790
+ color: var(--dim);
791
+ padding: 4px 12px 2px;
792
+ }
793
+
794
+ .git-checkpoints {
795
+ display: flex;
796
+ flex-direction: column;
797
+ border-top: 1px solid var(--border);
798
+ margin-top: 2px;
799
+ }
800
+
801
+ .git-checkpoint {
802
+ display: flex;
803
+ align-items: center;
804
+ justify-content: space-between;
805
+ gap: 6px;
806
+ padding: 2px 8px 2px 12px;
807
+ }
808
+
809
+ .git-checkpoint:hover {
810
+ background: var(--panel-2);
811
+ }
812
+
813
+ .git-checkpoint-body {
814
+ display: flex;
815
+ flex-direction: column;
816
+ min-width: 0;
817
+ }
818
+
819
+ .git-checkpoint-label {
820
+ font-size: 12px;
821
+ overflow: hidden;
822
+ text-overflow: ellipsis;
823
+ white-space: nowrap;
824
+ }
825
+
826
+ .git-checkpoint-meta {
827
+ font-size: 10px;
828
+ color: var(--dim);
829
+ }
830
+
831
+ .git-checkpoint-actions {
832
+ display: flex;
833
+ align-items: center;
834
+ gap: 2px;
835
+ flex: none;
836
+ }
837
+
838
+ .git-checkpoint-actions .btn.ghost {
839
+ font-size: 11px;
840
+ padding: 1px 6px;
841
+ }
842
+
843
+ .git-history {
844
+ display: flex;
845
+ flex-direction: column;
846
+ }
847
+
848
+ .git-commit {
849
+ display: flex;
850
+ gap: 7px;
851
+ padding: 3px 12px;
852
+ cursor: default;
853
+ }
854
+
855
+ .git-commit:hover {
856
+ background: var(--panel-2);
857
+ }
858
+
859
+ .git-commit-hash {
860
+ flex: none;
861
+ font-family: 'Cascadia Mono', Consolas, monospace;
862
+ font-size: 10px;
863
+ color: var(--accent);
864
+ padding-top: 1px;
865
+ }
866
+
867
+ .git-commit-body {
868
+ display: flex;
869
+ flex-direction: column;
870
+ min-width: 0;
871
+ }
872
+
873
+ .git-commit-subject {
874
+ font-size: 12px;
875
+ overflow: hidden;
876
+ text-overflow: ellipsis;
877
+ white-space: nowrap;
878
+ }
879
+
880
+ .git-commit-meta {
881
+ font-size: 10px;
882
+ color: var(--dim);
883
+ }
884
+
885
+ .git-ref {
886
+ font-size: 9px;
887
+ font-weight: 600;
888
+ padding: 0 4px;
889
+ margin-right: 4px;
890
+ border-radius: 6px;
891
+ background: rgba(88, 166, 255, 0.18);
892
+ color: var(--working);
893
+ vertical-align: middle;
894
+ }
895
+
896
+ .git-ref.tag {
897
+ background: rgba(226, 185, 61, 0.18);
898
+ color: var(--attention);
899
+ }
900
+
901
+ /* ---------- reusable actions (below the file tree) ---------- */
902
+
903
+ .actions {
904
+ border-top: 1px solid var(--border);
905
+ max-height: 180px;
906
+ overflow-y: auto;
907
+ padding-bottom: 6px;
908
+ }
909
+
910
+ .actions-header {
911
+ display: flex;
912
+ align-items: center;
913
+ justify-content: space-between;
914
+ padding: 4px 8px 0 12px;
915
+ }
916
+
917
+ .actions-header span {
918
+ font-size: 11px;
919
+ font-weight: 600;
920
+ letter-spacing: 0.08em;
921
+ text-transform: uppercase;
922
+ color: var(--dim);
923
+ }
924
+
925
+ .actions-empty {
926
+ padding: 2px 12px 4px;
927
+ font-size: 11px;
928
+ color: var(--dim);
929
+ line-height: 1.4;
930
+ }
931
+
932
+ .action-row {
933
+ display: flex;
934
+ align-items: center;
935
+ gap: 6px;
936
+ padding: 2px 8px 2px 12px;
937
+ cursor: pointer;
938
+ }
939
+
940
+ .action-row:hover {
941
+ background: var(--panel-2);
942
+ }
943
+
944
+ .action-run {
945
+ color: var(--accent);
946
+ font-size: 10px;
947
+ }
948
+
949
+ .action-name {
950
+ flex: 1;
951
+ overflow: hidden;
952
+ text-overflow: ellipsis;
953
+ white-space: nowrap;
954
+ }
955
+
956
+ .action-row .action-edit {
957
+ visibility: hidden;
958
+ }
959
+
960
+ .action-row:hover .action-edit {
961
+ visibility: visible;
962
+ }
963
+
964
+ /* ---------- attached-image history (below the file tree) ---------- */
965
+
966
+ .attachments {
967
+ border-top: 1px solid var(--border);
968
+ max-height: 190px;
969
+ overflow-y: auto;
970
+ padding-bottom: 8px;
971
+ }
972
+
973
+ .attachments-header {
974
+ padding: 8px 12px 4px;
975
+ font-size: 11px;
976
+ font-weight: 600;
977
+ letter-spacing: 0.08em;
978
+ text-transform: uppercase;
979
+ color: var(--dim);
980
+ }
981
+
982
+ .attachments-grid {
983
+ display: flex;
984
+ flex-wrap: wrap;
985
+ gap: 6px;
986
+ padding: 2px 12px;
987
+ }
988
+
989
+ .attachment-thumb {
990
+ position: relative;
991
+ height: 48px;
992
+ min-width: 48px;
993
+ max-width: 96px;
994
+ border: 1px solid var(--border);
995
+ border-radius: 4px;
996
+ overflow: hidden;
997
+ cursor: pointer;
998
+ background: var(--panel-2);
999
+ display: flex;
1000
+ align-items: center;
1001
+ justify-content: center;
1002
+ }
1003
+
1004
+ .attachment-thumb:hover {
1005
+ border-color: var(--accent);
1006
+ }
1007
+
1008
+ .attachment-thumb img {
1009
+ height: 100%;
1010
+ object-fit: cover;
1011
+ }
1012
+
1013
+ .attachment-broken {
1014
+ color: var(--dim);
1015
+ font-size: 18px;
1016
+ padding: 0 14px;
1017
+ }
1018
+
1019
+ .attachment-age {
1020
+ position: absolute;
1021
+ right: 2px;
1022
+ bottom: 2px;
1023
+ font-size: 9px;
1024
+ line-height: 1;
1025
+ color: var(--text);
1026
+ background: rgba(22, 23, 26, 0.8);
1027
+ border-radius: 3px;
1028
+ padding: 2px 3px;
1029
+ pointer-events: none;
1030
+ }
1031
+
1032
+ .attachment-lightbox {
1033
+ position: fixed;
1034
+ inset: 0;
1035
+ background: rgba(22, 23, 26, 0.75);
1036
+ display: flex;
1037
+ align-items: center;
1038
+ justify-content: center;
1039
+ z-index: 200;
1040
+ }
1041
+
1042
+ .attachment-lightbox-card {
1043
+ background: var(--panel);
1044
+ border: 1px solid var(--border);
1045
+ border-radius: 8px;
1046
+ padding: 14px;
1047
+ display: flex;
1048
+ flex-direction: column;
1049
+ gap: 10px;
1050
+ align-items: center;
1051
+ max-width: 80vw;
1052
+ max-height: 85vh;
1053
+ }
1054
+
1055
+ .attachment-lightbox-img {
1056
+ display: flex;
1057
+ align-items: center;
1058
+ justify-content: center;
1059
+ overflow: auto;
1060
+ min-width: 200px;
1061
+ min-height: 120px;
1062
+ }
1063
+
1064
+ .attachment-lightbox-img img {
1065
+ max-width: 76vw;
1066
+ max-height: 65vh;
1067
+ object-fit: contain;
1068
+ }
1069
+
1070
+ .attachment-lightbox-meta {
1071
+ font-size: 11px;
1072
+ color: var(--dim);
1073
+ max-width: 76vw;
1074
+ overflow: hidden;
1075
+ text-overflow: ellipsis;
1076
+ white-space: nowrap;
1077
+ }
1078
+
1079
+ .context-menu {
1080
+ position: fixed;
1081
+ z-index: 100;
1082
+ background: var(--panel-2);
1083
+ border: 1px solid var(--border);
1084
+ border-radius: 6px;
1085
+ padding: 4px;
1086
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
1087
+ display: flex;
1088
+ flex-direction: column;
1089
+ min-width: 170px;
1090
+ }
1091
+
1092
+ .context-menu button {
1093
+ background: none;
1094
+ border: none;
1095
+ color: var(--text);
1096
+ text-align: left;
1097
+ padding: 6px 10px;
1098
+ border-radius: 4px;
1099
+ cursor: pointer;
1100
+ font-size: 12px;
1101
+ }
1102
+
1103
+ .context-menu button:hover {
1104
+ background: var(--accent);
1105
+ color: #fff;
1106
+ }
1107
+
1108
+ /* ---------- main area ---------- */
1109
+
1110
+ .main {
1111
+ flex: 1;
1112
+ display: flex;
1113
+ flex-direction: column;
1114
+ min-width: 0;
1115
+ }
1116
+
1117
+ .welcome {
1118
+ flex: 1;
1119
+ display: flex;
1120
+ flex-direction: column;
1121
+ align-items: center;
1122
+ justify-content: center;
1123
+ gap: 14px;
1124
+ }
1125
+
1126
+ .welcome h1 {
1127
+ font-size: 22px;
1128
+ font-weight: 600;
1129
+ }
1130
+
1131
+ .welcome p {
1132
+ color: var(--dim);
1133
+ }
1134
+
1135
+ .welcome .hint {
1136
+ font-size: 12px;
1137
+ }
1138
+
1139
+ .tabstrip {
1140
+ display: flex;
1141
+ background: var(--panel);
1142
+ border-bottom: 1px solid var(--border);
1143
+ overflow-x: auto;
1144
+ min-height: 34px;
1145
+ }
1146
+
1147
+ .tab {
1148
+ display: flex;
1149
+ align-items: center;
1150
+ gap: 6px;
1151
+ padding: 7px 12px;
1152
+ border-right: 1px solid var(--border);
1153
+ cursor: pointer;
1154
+ color: var(--dim);
1155
+ white-space: nowrap;
1156
+ }
1157
+
1158
+ .tab:hover {
1159
+ color: var(--text);
1160
+ }
1161
+
1162
+ .tab.active {
1163
+ background: var(--bg);
1164
+ color: var(--text);
1165
+ }
1166
+
1167
+ .tab-icon {
1168
+ font-size: 11px;
1169
+ color: var(--accent);
1170
+ }
1171
+
1172
+ .tab .close {
1173
+ visibility: hidden;
1174
+ font-size: 10px;
1175
+ }
1176
+
1177
+ .tab:hover .close {
1178
+ visibility: visible;
1179
+ }
1180
+
1181
+ .tab-kind {
1182
+ font-size: 11px;
1183
+ color: var(--accent);
1184
+ }
1185
+
1186
+ .term-tab .tab-name {
1187
+ max-width: 140px;
1188
+ overflow: hidden;
1189
+ text-overflow: ellipsis;
1190
+ }
1191
+
1192
+ .term-tab .rename-input {
1193
+ width: 90px;
1194
+ }
1195
+
1196
+ /* Per-claude-tab model switcher */
1197
+ .tab-model {
1198
+ background: var(--bg);
1199
+ border: 1px solid var(--border);
1200
+ border-radius: 3px;
1201
+ color: var(--dim);
1202
+ font-size: 10px;
1203
+ padding: 0 2px;
1204
+ max-width: 74px;
1205
+ cursor: pointer;
1206
+ }
1207
+
1208
+ .tab-model:hover {
1209
+ color: var(--text);
1210
+ border-color: var(--accent);
1211
+ }
1212
+
1213
+ /* Add-terminal dropdown */
1214
+ .tab-add {
1215
+ position: relative;
1216
+ display: flex;
1217
+ align-items: center;
1218
+ }
1219
+
1220
+ .tab-add-btn {
1221
+ background: none;
1222
+ border: none;
1223
+ border-right: 1px solid var(--border);
1224
+ color: var(--dim);
1225
+ font-size: 12px;
1226
+ cursor: pointer;
1227
+ }
1228
+
1229
+ .tab-add-btn:hover {
1230
+ color: var(--text);
1231
+ }
1232
+
1233
+ .tab-add-menu {
1234
+ position: fixed;
1235
+ z-index: 100;
1236
+ min-width: 150px;
1237
+ background: var(--panel-2);
1238
+ border: 1px solid var(--border);
1239
+ border-radius: 4px;
1240
+ padding: 4px;
1241
+ box-shadow: 0 6px 18px rgba(0, 0, 0, 0.45);
1242
+ }
1243
+
1244
+ .tab-add-item {
1245
+ display: flex;
1246
+ align-items: center;
1247
+ gap: 8px;
1248
+ width: 100%;
1249
+ padding: 6px 10px;
1250
+ background: none;
1251
+ border: none;
1252
+ border-radius: 3px;
1253
+ color: var(--text);
1254
+ text-align: left;
1255
+ cursor: pointer;
1256
+ white-space: nowrap;
1257
+ }
1258
+
1259
+ .tab-add-item:hover {
1260
+ background: var(--accent);
1261
+ }
1262
+
1263
+ .session-termcount {
1264
+ font-size: 11px;
1265
+ color: var(--dim);
1266
+ }
1267
+
1268
+ .session-sub {
1269
+ display: flex;
1270
+ align-items: center;
1271
+ gap: 8px;
1272
+ margin-top: 2px;
1273
+ }
1274
+
1275
+ .session-category {
1276
+ display: inline-flex;
1277
+ align-items: center;
1278
+ gap: 4px;
1279
+ font-size: 11px;
1280
+ color: var(--dim);
1281
+ }
1282
+
1283
+ .session-category select {
1284
+ background: transparent;
1285
+ border: none;
1286
+ color: inherit;
1287
+ font-size: 11px;
1288
+ cursor: pointer;
1289
+ max-width: 120px;
1290
+ padding: 0;
1291
+ }
1292
+
1293
+ .session-category select:hover {
1294
+ text-decoration: underline;
1295
+ }
1296
+
1297
+ .cat-dot {
1298
+ width: 8px;
1299
+ height: 8px;
1300
+ border-radius: 50%;
1301
+ flex: none;
1302
+ }
1303
+
1304
+ /* ---------- worktree (parallel task) sessions ---------- */
1305
+
1306
+ .session-entry .fork {
1307
+ visibility: hidden;
1308
+ }
1309
+
1310
+ .session-entry:hover .fork {
1311
+ visibility: visible;
1312
+ }
1313
+
1314
+ /* Indent worktree tasks under their parent, with a connector tick. */
1315
+ .session-entry.worktree {
1316
+ padding-left: 22px;
1317
+ position: relative;
1318
+ }
1319
+
1320
+ .session-entry.worktree::before {
1321
+ content: '↳';
1322
+ position: absolute;
1323
+ left: 9px;
1324
+ color: var(--dim);
1325
+ font-size: 12px;
1326
+ }
1327
+
1328
+ .worktree-mark {
1329
+ color: var(--dim);
1330
+ }
1331
+
1332
+ .worktree-branch {
1333
+ font-size: 11px;
1334
+ color: var(--dim);
1335
+ font-family: 'Cascadia Mono', Consolas, monospace;
1336
+ white-space: nowrap;
1337
+ overflow: hidden;
1338
+ text-overflow: ellipsis;
1339
+ max-width: 150px;
1340
+ }
1341
+
1342
+ .merge-btn {
1343
+ font-size: 11px;
1344
+ padding: 1px 7px;
1345
+ border: 1px solid var(--border);
1346
+ border-radius: 4px;
1347
+ }
1348
+
1349
+ .merge-btn:hover {
1350
+ border-color: var(--accent);
1351
+ color: var(--accent);
1352
+ }
1353
+
1354
+ /* Merge-readiness badge: the Merge button's predicted outcome, at a glance. */
1355
+ .merge-badge {
1356
+ display: inline-flex;
1357
+ align-items: center;
1358
+ gap: 2px;
1359
+ flex: none;
1360
+ font-size: 10px;
1361
+ line-height: 15px;
1362
+ padding: 0 6px;
1363
+ border: 1px solid var(--border);
1364
+ border-radius: 8px;
1365
+ background: transparent;
1366
+ color: var(--dim);
1367
+ cursor: pointer;
1368
+ white-space: nowrap;
1369
+ }
1370
+
1371
+ .merge-badge.clean {
1372
+ color: var(--green);
1373
+ border-color: rgba(76, 195, 138, 0.45);
1374
+ }
1375
+
1376
+ .merge-badge.conflicts {
1377
+ color: var(--attention);
1378
+ border-color: rgba(226, 185, 61, 0.45);
1379
+ }
1380
+
1381
+ /* 'no commits' and 'unknown' stay muted; 'unknown' a notch dimmer. */
1382
+ .merge-badge.unknown {
1383
+ opacity: 0.65;
1384
+ }
1385
+
1386
+ /* A (re-)check is in flight — pulse until the fresh result lands. */
1387
+ .merge-badge.checking {
1388
+ animation: merge-badge-pulse 1s ease-in-out infinite;
1389
+ }
1390
+
1391
+ @keyframes merge-badge-pulse {
1392
+ 50% {
1393
+ opacity: 0.35;
1394
+ }
1395
+ }
1396
+
1397
+ /* Dirty marker: uncommitted files would need a commit-first merge. */
1398
+ .merge-badge-dirty {
1399
+ color: var(--attention);
1400
+ font-size: 12px;
1401
+ line-height: 15px;
1402
+ }
1403
+
1404
+ /* ---------- prompt queue ---------- */
1405
+
1406
+ .session-entry .queue-btn {
1407
+ visibility: hidden;
1408
+ position: relative;
1409
+ }
1410
+
1411
+ /* With queued prompts, the button (and its count badge) is always visible. */
1412
+ .session-entry:hover .queue-btn,
1413
+ .session-entry .queue-btn.has-items {
1414
+ visibility: visible;
1415
+ }
1416
+
1417
+ .queue-badge {
1418
+ position: absolute;
1419
+ top: -5px;
1420
+ right: -7px;
1421
+ min-width: 14px;
1422
+ height: 14px;
1423
+ padding: 0 3px;
1424
+ border-radius: 7px;
1425
+ background: var(--accent);
1426
+ color: #fff;
1427
+ font-size: 10px;
1428
+ font-weight: 600;
1429
+ line-height: 14px;
1430
+ text-align: center;
1431
+ pointer-events: none;
1432
+ }
1433
+
1434
+ .queue-overlay {
1435
+ position: fixed;
1436
+ inset: 0;
1437
+ z-index: 300;
1438
+ cursor: default;
1439
+ }
1440
+
1441
+ .queue-popover {
1442
+ position: fixed;
1443
+ width: 340px;
1444
+ max-width: calc(100vw - 24px);
1445
+ background: var(--panel);
1446
+ border: 1px solid var(--border);
1447
+ border-radius: 8px;
1448
+ padding: 10px 12px;
1449
+ display: flex;
1450
+ flex-direction: column;
1451
+ gap: 8px;
1452
+ box-shadow: 0 12px 36px rgba(0, 0, 0, 0.55);
1453
+ }
1454
+
1455
+ .queue-popover-title {
1456
+ font-size: 12px;
1457
+ font-weight: 600;
1458
+ white-space: nowrap;
1459
+ overflow: hidden;
1460
+ text-overflow: ellipsis;
1461
+ }
1462
+
1463
+ .queue-popover-hint {
1464
+ font-size: 11px;
1465
+ color: var(--dim);
1466
+ line-height: 1.4;
1467
+ }
1468
+
1469
+ .queue-list {
1470
+ display: flex;
1471
+ flex-direction: column;
1472
+ gap: 2px;
1473
+ max-height: 220px;
1474
+ overflow-y: auto;
1475
+ }
1476
+
1477
+ .queue-empty {
1478
+ font-size: 12px;
1479
+ color: var(--dim);
1480
+ padding: 4px 0;
1481
+ }
1482
+
1483
+ .queue-item {
1484
+ display: flex;
1485
+ align-items: center;
1486
+ gap: 4px;
1487
+ padding: 2px 0;
1488
+ }
1489
+
1490
+ .queue-item-pos {
1491
+ font-size: 11px;
1492
+ color: var(--dim);
1493
+ flex: none;
1494
+ }
1495
+
1496
+ .queue-item-text {
1497
+ flex: 1;
1498
+ min-width: 0;
1499
+ white-space: nowrap;
1500
+ overflow: hidden;
1501
+ text-overflow: ellipsis;
1502
+ font-size: 12px;
1503
+ }
1504
+
1505
+ .queue-item .btn {
1506
+ flex: none;
1507
+ font-size: 11px;
1508
+ }
1509
+
1510
+ .queue-item .btn:disabled {
1511
+ opacity: 0.3;
1512
+ cursor: default;
1513
+ }
1514
+
1515
+ .queue-add-row {
1516
+ display: flex;
1517
+ gap: 6px;
1518
+ }
1519
+
1520
+ .queue-add-row input {
1521
+ flex: 1;
1522
+ min-width: 0;
1523
+ background: var(--bg);
1524
+ border: 1px solid var(--border);
1525
+ border-radius: 4px;
1526
+ color: var(--text);
1527
+ font-size: 12px;
1528
+ padding: 5px 8px;
1529
+ outline: none;
1530
+ }
1531
+
1532
+ .queue-add-row input:focus {
1533
+ border-color: var(--accent);
1534
+ }
1535
+
1536
+ .queue-add-row .btn {
1537
+ border: 1px solid var(--border);
1538
+ border-radius: 4px;
1539
+ padding: 2px 10px;
1540
+ font-size: 12px;
1541
+ }
1542
+
1543
+ .queue-add-row .btn:disabled {
1544
+ opacity: 0.4;
1545
+ cursor: default;
1546
+ }
1547
+
1548
+ /* ---------- modals ---------- */
1549
+
1550
+ .modal-overlay {
1551
+ position: fixed;
1552
+ inset: 0;
1553
+ z-index: 200;
1554
+ background: rgba(0, 0, 0, 0.55);
1555
+ display: flex;
1556
+ align-items: center;
1557
+ justify-content: center;
1558
+ }
1559
+
1560
+ .modal {
1561
+ background: var(--panel);
1562
+ border: 1px solid var(--border);
1563
+ border-radius: 10px;
1564
+ padding: 18px 20px;
1565
+ width: 420px;
1566
+ max-width: 90vw;
1567
+ max-height: 88vh;
1568
+ overflow-y: auto;
1569
+ display: flex;
1570
+ flex-direction: column;
1571
+ gap: 12px;
1572
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.6);
1573
+ }
1574
+
1575
+ .modal-wide {
1576
+ width: 720px;
1577
+ }
1578
+
1579
+ .modal h2 {
1580
+ font-size: 16px;
1581
+ font-weight: 600;
1582
+ }
1583
+
1584
+ .modal-folder {
1585
+ font-family: 'Cascadia Mono', Consolas, monospace;
1586
+ font-size: 11px;
1587
+ color: var(--dim);
1588
+ overflow: hidden;
1589
+ text-overflow: ellipsis;
1590
+ white-space: nowrap;
1591
+ }
1592
+
1593
+ .field {
1594
+ display: flex;
1595
+ flex-direction: column;
1596
+ gap: 4px;
1597
+ }
1598
+
1599
+ .field.grow {
1600
+ flex: 1;
1601
+ }
1602
+
1603
+ .field > span {
1604
+ font-size: 11px;
1605
+ font-weight: 600;
1606
+ letter-spacing: 0.04em;
1607
+ text-transform: uppercase;
1608
+ color: var(--dim);
1609
+ }
1610
+
1611
+ .field input,
1612
+ .field select,
1613
+ .field textarea {
1614
+ background: var(--bg);
1615
+ border: 1px solid var(--border);
1616
+ border-radius: 4px;
1617
+ color: var(--text);
1618
+ font-size: 13px;
1619
+ padding: 5px 8px;
1620
+ outline: none;
1621
+ font-family: inherit;
1622
+ }
1623
+
1624
+ .field input:focus,
1625
+ .field select:focus,
1626
+ .field textarea:focus {
1627
+ border-color: var(--accent);
1628
+ }
1629
+
1630
+ .field-hint {
1631
+ font-size: 11px;
1632
+ color: var(--dim);
1633
+ line-height: 1.4;
1634
+ }
1635
+
1636
+ /* A checkbox + label row inside a .field (e.g. the PR / auto-complete options). */
1637
+ .check-row {
1638
+ display: flex;
1639
+ flex-direction: row;
1640
+ align-items: flex-start;
1641
+ gap: 8px;
1642
+ cursor: pointer;
1643
+ text-transform: none;
1644
+ letter-spacing: normal;
1645
+ font-weight: 400;
1646
+ font-size: 13px;
1647
+ color: var(--text);
1648
+ }
1649
+
1650
+ .check-row input[type='checkbox'] {
1651
+ width: auto;
1652
+ margin-top: 2px;
1653
+ padding: 0;
1654
+ flex: none;
1655
+ cursor: pointer;
1656
+ }
1657
+
1658
+ .check-row > span {
1659
+ display: flex;
1660
+ flex-direction: column;
1661
+ gap: 2px;
1662
+ }
1663
+
1664
+ .check-hint {
1665
+ font-size: 11px;
1666
+ color: var(--dim);
1667
+ line-height: 1.4;
1668
+ }
1669
+
1670
+ .swatches {
1671
+ display: flex;
1672
+ gap: 6px;
1673
+ }
1674
+
1675
+ .swatch {
1676
+ width: 22px;
1677
+ height: 22px;
1678
+ border-radius: 50%;
1679
+ border: 2px solid transparent;
1680
+ cursor: pointer;
1681
+ padding: 0;
1682
+ }
1683
+
1684
+ .swatch.sel {
1685
+ border-color: var(--text);
1686
+ }
1687
+
1688
+ .swatch.none {
1689
+ background: var(--panel-2);
1690
+ position: relative;
1691
+ }
1692
+
1693
+ .swatch.none::after {
1694
+ content: '∅';
1695
+ position: absolute;
1696
+ inset: 0;
1697
+ display: flex;
1698
+ align-items: center;
1699
+ justify-content: center;
1700
+ color: var(--dim);
1701
+ font-size: 12px;
1702
+ }
1703
+
1704
+ .bg-preview {
1705
+ height: 140px;
1706
+ border: 1px solid var(--border);
1707
+ border-radius: 6px;
1708
+ background-size: cover;
1709
+ background-position: center;
1710
+ background-color: var(--bg);
1711
+ margin-bottom: 12px;
1712
+ display: flex;
1713
+ align-items: center;
1714
+ justify-content: center;
1715
+ }
1716
+
1717
+ .bg-preview.empty span {
1718
+ color: var(--dim);
1719
+ font-size: 12px;
1720
+ }
1721
+
1722
+ .modal-actions {
1723
+ display: flex;
1724
+ justify-content: flex-end;
1725
+ gap: 8px;
1726
+ margin-top: 4px;
1727
+ }
1728
+
1729
+ .modal-error {
1730
+ background: rgba(229, 72, 77, 0.15);
1731
+ color: var(--error);
1732
+ border-radius: 4px;
1733
+ padding: 6px 10px;
1734
+ font-size: 12px;
1735
+ }
1736
+
1737
+ /* ---------- broadcast-prompt dialog ---------- */
1738
+
1739
+ .broadcast-list-header {
1740
+ display: flex;
1741
+ align-items: center;
1742
+ justify-content: space-between;
1743
+ }
1744
+
1745
+ .broadcast-list-header .btn {
1746
+ font-size: 11px;
1747
+ padding: 1px 6px;
1748
+ text-transform: none;
1749
+ letter-spacing: normal;
1750
+ }
1751
+
1752
+ .broadcast-list {
1753
+ border: 1px solid var(--border);
1754
+ border-radius: 4px;
1755
+ background: var(--bg);
1756
+ max-height: 240px;
1757
+ overflow-y: auto;
1758
+ }
1759
+
1760
+ .broadcast-empty {
1761
+ padding: 10px;
1762
+ font-size: 12px;
1763
+ color: var(--dim);
1764
+ }
1765
+
1766
+ .broadcast-row {
1767
+ display: flex;
1768
+ align-items: center;
1769
+ gap: 8px;
1770
+ padding: 5px 8px;
1771
+ font-size: 13px;
1772
+ cursor: pointer;
1773
+ }
1774
+
1775
+ .broadcast-row:hover {
1776
+ background: var(--panel-2);
1777
+ }
1778
+
1779
+ .broadcast-row input[type='checkbox'] {
1780
+ margin: 0;
1781
+ }
1782
+
1783
+ .broadcast-name {
1784
+ overflow: hidden;
1785
+ text-overflow: ellipsis;
1786
+ white-space: nowrap;
1787
+ }
1788
+
1789
+ .broadcast-sub {
1790
+ font-size: 11px;
1791
+ color: var(--dim);
1792
+ overflow: hidden;
1793
+ text-overflow: ellipsis;
1794
+ white-space: nowrap;
1795
+ margin-left: auto;
1796
+ padding-left: 8px;
1797
+ }
1798
+
1799
+ /* ---------- global search palette ---------- */
1800
+
1801
+ .gs-overlay {
1802
+ position: fixed;
1803
+ inset: 0;
1804
+ z-index: 200;
1805
+ background: rgba(0, 0, 0, 0.45);
1806
+ display: flex;
1807
+ justify-content: center;
1808
+ align-items: flex-start;
1809
+ padding-top: 10vh;
1810
+ }
1811
+
1812
+ .gs-palette {
1813
+ background: var(--panel);
1814
+ border: 1px solid var(--border);
1815
+ border-radius: 10px;
1816
+ width: 640px;
1817
+ max-width: 90vw;
1818
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.6);
1819
+ display: flex;
1820
+ flex-direction: column;
1821
+ overflow: hidden;
1822
+ }
1823
+
1824
+ .gs-input-row {
1825
+ display: flex;
1826
+ align-items: center;
1827
+ gap: 10px;
1828
+ padding: 10px 12px;
1829
+ border-bottom: 1px solid var(--border);
1830
+ }
1831
+
1832
+ .gs-input-row input {
1833
+ flex: 1;
1834
+ background: var(--bg);
1835
+ border: 1px solid var(--border);
1836
+ border-radius: 6px;
1837
+ color: var(--text);
1838
+ font-size: 14px;
1839
+ padding: 7px 10px;
1840
+ outline: none;
1841
+ }
1842
+
1843
+ .gs-input-row input:focus {
1844
+ border-color: var(--accent);
1845
+ }
1846
+
1847
+ .gs-count {
1848
+ flex: none;
1849
+ font-size: 11px;
1850
+ color: var(--dim);
1851
+ white-space: nowrap;
1852
+ }
1853
+
1854
+ .gs-results {
1855
+ max-height: 50vh;
1856
+ overflow-y: auto;
1857
+ padding: 6px 0;
1858
+ }
1859
+
1860
+ .gs-group-header {
1861
+ display: flex;
1862
+ align-items: center;
1863
+ gap: 6px;
1864
+ padding: 8px 12px 3px;
1865
+ font-size: 11px;
1866
+ font-weight: 600;
1867
+ letter-spacing: 0.04em;
1868
+ text-transform: uppercase;
1869
+ color: var(--dim);
1870
+ }
1871
+
1872
+ .gs-group-count {
1873
+ font-weight: 400;
1874
+ opacity: 0.8;
1875
+ }
1876
+
1877
+ .gs-dot {
1878
+ width: 8px;
1879
+ height: 8px;
1880
+ border-radius: 50%;
1881
+ flex: none;
1882
+ }
1883
+
1884
+ .gs-row {
1885
+ display: flex;
1886
+ align-items: center;
1887
+ gap: 8px;
1888
+ padding: 4px 12px 4px 26px;
1889
+ cursor: pointer;
1890
+ font-family: 'Cascadia Mono', Consolas, monospace;
1891
+ font-size: 12px;
1892
+ overflow: hidden;
1893
+ }
1894
+
1895
+ .gs-row.sel {
1896
+ background: var(--panel-2);
1897
+ box-shadow: inset 2px 0 0 var(--accent);
1898
+ }
1899
+
1900
+ .gs-term {
1901
+ flex: none;
1902
+ font-family: 'Segoe UI', system-ui, sans-serif;
1903
+ font-size: 10px;
1904
+ color: var(--dim);
1905
+ border: 1px solid var(--border);
1906
+ border-radius: 3px;
1907
+ padding: 0 4px;
1908
+ }
1909
+
1910
+ .gs-snippet {
1911
+ white-space: nowrap;
1912
+ overflow: hidden;
1913
+ text-overflow: ellipsis;
1914
+ color: var(--text);
1915
+ }
1916
+
1917
+ .gs-snippet mark {
1918
+ background: rgba(217, 119, 87, 0.35);
1919
+ color: var(--text);
1920
+ border-radius: 2px;
1921
+ }
1922
+
1923
+ .gs-empty {
1924
+ padding: 18px 12px;
1925
+ text-align: center;
1926
+ color: var(--dim);
1927
+ font-size: 12px;
1928
+ }
1929
+
1930
+ .gs-hint {
1931
+ padding: 6px 12px;
1932
+ border-top: 1px solid var(--border);
1933
+ font-size: 11px;
1934
+ color: var(--dim);
1935
+ }
1936
+
1937
+ /* ---------- command palette (Ctrl+K) ---------- */
1938
+
1939
+ .palette-overlay {
1940
+ position: fixed;
1941
+ inset: 0;
1942
+ z-index: 300;
1943
+ background: rgba(0, 0, 0, 0.45);
1944
+ display: flex;
1945
+ align-items: flex-start;
1946
+ justify-content: center;
1947
+ padding-top: 12vh;
1948
+ }
1949
+
1950
+ .palette {
1951
+ background: var(--panel);
1952
+ border: 1px solid var(--border);
1953
+ border-radius: 10px;
1954
+ width: 560px;
1955
+ max-width: 90vw;
1956
+ max-height: 60vh;
1957
+ display: flex;
1958
+ flex-direction: column;
1959
+ overflow: hidden;
1960
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.6);
1961
+ }
1962
+
1963
+ .palette-input {
1964
+ background: var(--bg);
1965
+ border: none;
1966
+ border-bottom: 1px solid var(--border);
1967
+ border-radius: 0;
1968
+ color: var(--text);
1969
+ font-size: 14px;
1970
+ padding: 10px 14px;
1971
+ outline: none;
1972
+ }
1973
+
1974
+ .palette-list {
1975
+ overflow-y: auto;
1976
+ padding: 4px 0 6px;
1977
+ }
1978
+
1979
+ .palette-section-title {
1980
+ font-size: 10px;
1981
+ font-weight: 600;
1982
+ letter-spacing: 0.06em;
1983
+ text-transform: uppercase;
1984
+ color: var(--dim);
1985
+ padding: 8px 14px 2px;
1986
+ }
1987
+
1988
+ .palette-item {
1989
+ display: flex;
1990
+ align-items: center;
1991
+ gap: 8px;
1992
+ padding: 5px 14px;
1993
+ font-size: 13px;
1994
+ cursor: pointer;
1995
+ white-space: nowrap;
1996
+ }
1997
+
1998
+ .palette-item .palette-label {
1999
+ overflow: hidden;
2000
+ text-overflow: ellipsis;
2001
+ }
2002
+
2003
+ .palette-item.sel,
2004
+ .palette-item:hover {
2005
+ background: var(--panel-2);
2006
+ }
2007
+
2008
+ .palette-sub {
2009
+ color: var(--dim);
2010
+ font-size: 11px;
2011
+ margin-left: auto;
2012
+ padding-left: 12px;
2013
+ overflow: hidden;
2014
+ text-overflow: ellipsis;
2015
+ }
2016
+
2017
+ .palette-empty {
2018
+ color: var(--dim);
2019
+ font-size: 13px;
2020
+ padding: 16px 14px;
2021
+ text-align: center;
2022
+ }
2023
+
2024
+ /* ---------- categories dialog ---------- */
2025
+
2026
+ .cat-layout {
2027
+ display: flex;
2028
+ gap: 14px;
2029
+ min-height: 360px;
2030
+ }
2031
+
2032
+ .cat-list {
2033
+ width: 180px;
2034
+ flex: none;
2035
+ display: flex;
2036
+ flex-direction: column;
2037
+ gap: 2px;
2038
+ border-right: 1px solid var(--border);
2039
+ padding-right: 8px;
2040
+ }
2041
+
2042
+ .cat-list-item {
2043
+ display: flex;
2044
+ align-items: center;
2045
+ gap: 8px;
2046
+ background: none;
2047
+ border: none;
2048
+ color: var(--text);
2049
+ text-align: left;
2050
+ padding: 6px 8px;
2051
+ border-radius: 4px;
2052
+ cursor: pointer;
2053
+ font-size: 13px;
2054
+ }
2055
+
2056
+ .cat-list-item:hover {
2057
+ background: var(--panel-2);
2058
+ }
2059
+
2060
+ .cat-list-item.active {
2061
+ background: var(--panel-2);
2062
+ }
2063
+
2064
+ .cat-list-name {
2065
+ overflow: hidden;
2066
+ text-overflow: ellipsis;
2067
+ white-space: nowrap;
2068
+ }
2069
+
2070
+ .cat-add {
2071
+ margin-top: 6px;
2072
+ text-align: left;
2073
+ }
2074
+
2075
+ .cat-editor {
2076
+ flex: 1;
2077
+ min-width: 0;
2078
+ display: flex;
2079
+ flex-direction: column;
2080
+ gap: 12px;
2081
+ overflow-y: auto;
2082
+ }
2083
+
2084
+ .cat-edit-row {
2085
+ display: flex;
2086
+ align-items: flex-end;
2087
+ gap: 8px;
2088
+ }
2089
+
2090
+ .cat-delete {
2091
+ color: var(--error);
2092
+ }
2093
+
2094
+ .skill-list {
2095
+ max-height: 160px;
2096
+ overflow-y: auto;
2097
+ border: 1px solid var(--border);
2098
+ border-radius: 4px;
2099
+ padding: 4px;
2100
+ display: flex;
2101
+ flex-direction: column;
2102
+ }
2103
+
2104
+ .skill-row {
2105
+ display: flex;
2106
+ align-items: center;
2107
+ gap: 8px;
2108
+ padding: 3px 4px;
2109
+ border-radius: 3px;
2110
+ cursor: pointer;
2111
+ }
2112
+
2113
+ .skill-row:hover {
2114
+ background: var(--panel-2);
2115
+ }
2116
+
2117
+ .skill-name {
2118
+ flex: 1;
2119
+ overflow: hidden;
2120
+ text-overflow: ellipsis;
2121
+ white-space: nowrap;
2122
+ }
2123
+
2124
+ .skill-src {
2125
+ font-size: 10px;
2126
+ color: var(--dim);
2127
+ }
2128
+
2129
+ .mcp-row {
2130
+ border: 1px solid var(--border);
2131
+ border-radius: 4px;
2132
+ padding: 6px;
2133
+ margin-bottom: 6px;
2134
+ display: flex;
2135
+ flex-direction: column;
2136
+ gap: 6px;
2137
+ }
2138
+
2139
+ .mcp-row-head {
2140
+ display: flex;
2141
+ gap: 6px;
2142
+ }
2143
+
2144
+ .mcp-name {
2145
+ flex: 1;
2146
+ background: var(--bg);
2147
+ border: 1px solid var(--border);
2148
+ border-radius: 4px;
2149
+ color: var(--text);
2150
+ font-size: 13px;
2151
+ padding: 4px 8px;
2152
+ outline: none;
2153
+ }
2154
+
2155
+ .mcp-config {
2156
+ background: var(--bg);
2157
+ border: 1px solid var(--border);
2158
+ border-radius: 4px;
2159
+ color: var(--text);
2160
+ font-family: 'Cascadia Mono', Consolas, monospace;
2161
+ font-size: 12px;
2162
+ padding: 6px 8px;
2163
+ outline: none;
2164
+ resize: vertical;
2165
+ }
2166
+
2167
+ .mcp-add {
2168
+ display: flex;
2169
+ gap: 8px;
2170
+ align-items: center;
2171
+ }
2172
+
2173
+ .content {
2174
+ flex: 1;
2175
+ position: relative;
2176
+ min-height: 0;
2177
+ }
2178
+
2179
+ /* ---------- terminal ---------- */
2180
+
2181
+ .term-wrap {
2182
+ position: absolute;
2183
+ inset: 0;
2184
+ }
2185
+
2186
+ .term-wrap.drag-over .term-container {
2187
+ outline: 2px dashed var(--accent);
2188
+ outline-offset: -2px;
2189
+ }
2190
+
2191
+ .term-drop-hint {
2192
+ position: absolute;
2193
+ top: 12px;
2194
+ left: 50%;
2195
+ transform: translateX(-50%);
2196
+ background: var(--panel-2);
2197
+ border: 1px solid var(--accent);
2198
+ color: var(--text);
2199
+ border-radius: 6px;
2200
+ padding: 4px 12px;
2201
+ font-size: 12px;
2202
+ z-index: 10;
2203
+ pointer-events: none;
2204
+ }
2205
+
2206
+ .term-drop-hint.path {
2207
+ border-color: var(--green);
2208
+ color: var(--green);
2209
+ }
2210
+
2211
+ .term-container {
2212
+ width: 100%;
2213
+ height: 100%;
2214
+ padding: 6px 0 0 8px;
2215
+ background: var(--bg);
2216
+ }
2217
+
2218
+ .term-container .xterm {
2219
+ height: 100%;
2220
+ }
2221
+
2222
+ .term-search {
2223
+ position: absolute;
2224
+ top: 8px;
2225
+ right: 16px;
2226
+ display: flex;
2227
+ gap: 4px;
2228
+ background: var(--panel-2);
2229
+ border: 1px solid var(--border);
2230
+ border-radius: 6px;
2231
+ padding: 4px;
2232
+ z-index: 10;
2233
+ }
2234
+
2235
+ .term-search input {
2236
+ background: var(--bg);
2237
+ border: 1px solid var(--border);
2238
+ border-radius: 4px;
2239
+ color: var(--text);
2240
+ padding: 3px 8px;
2241
+ width: 200px;
2242
+ outline: none;
2243
+ }
2244
+
2245
+ .term-overlay {
2246
+ position: absolute;
2247
+ inset: 0;
2248
+ background: rgba(22, 23, 26, 0.75);
2249
+ display: flex;
2250
+ align-items: center;
2251
+ justify-content: center;
2252
+ z-index: 5;
2253
+ }
2254
+
2255
+ .term-overlay-card {
2256
+ background: var(--panel);
2257
+ border: 1px solid var(--border);
2258
+ border-radius: 8px;
2259
+ padding: 18px 22px;
2260
+ display: flex;
2261
+ flex-direction: column;
2262
+ gap: 12px;
2263
+ align-items: center;
2264
+ }
2265
+
2266
+ /* ---------- viewer ---------- */
2267
+
2268
+ .viewer {
2269
+ position: absolute;
2270
+ inset: 0;
2271
+ display: flex;
2272
+ flex-direction: column;
2273
+ background: var(--bg);
2274
+ z-index: 2;
2275
+ }
2276
+
2277
+ .viewer-header {
2278
+ display: flex;
2279
+ justify-content: space-between;
2280
+ align-items: center;
2281
+ padding: 6px 12px;
2282
+ border-bottom: 1px solid var(--border);
2283
+ background: var(--panel);
2284
+ }
2285
+
2286
+ .viewer-path {
2287
+ font-family: 'Cascadia Mono', Consolas, monospace;
2288
+ font-size: 12px;
2289
+ color: var(--dim);
2290
+ overflow: hidden;
2291
+ text-overflow: ellipsis;
2292
+ white-space: nowrap;
2293
+ }
2294
+
2295
+ .viewer-body {
2296
+ flex: 1;
2297
+ min-height: 0;
2298
+ display: flex;
2299
+ flex-direction: column;
2300
+ }
2301
+
2302
+ .viewer-banner {
2303
+ padding: 4px 12px;
2304
+ background: rgba(226, 185, 61, 0.12);
2305
+ color: var(--attention);
2306
+ font-size: 12px;
2307
+ }
2308
+
2309
+ .viewer-editor {
2310
+ flex: 1;
2311
+ min-height: 0;
2312
+ overflow: hidden;
2313
+ }
2314
+
2315
+ .viewer-editor .cm-editor {
2316
+ height: 100%;
2317
+ }
2318
+
2319
+ .viewer-editor .cm-scroller {
2320
+ font-family: 'Cascadia Mono', Consolas, monospace;
2321
+ font-size: 13px;
2322
+ }
2323
+
2324
+ /* ---------- diff viewer ---------- */
2325
+
2326
+ .diff-label {
2327
+ font-size: 9px;
2328
+ font-weight: 600;
2329
+ letter-spacing: 0.06em;
2330
+ text-transform: uppercase;
2331
+ padding: 0 5px;
2332
+ margin-right: 7px;
2333
+ border-radius: 6px;
2334
+ background: rgba(217, 119, 87, 0.18);
2335
+ color: var(--accent);
2336
+ vertical-align: middle;
2337
+ }
2338
+
2339
+ .tab.diff-tab .tab-diff-badge {
2340
+ flex: none;
2341
+ font-weight: 700;
2342
+ color: var(--accent);
2343
+ }
2344
+
2345
+ .viewer-editor .cm-diff-added {
2346
+ background: rgba(76, 195, 138, 0.14);
2347
+ }
2348
+
2349
+ .viewer-editor .cm-diff-removed {
2350
+ background: rgba(229, 72, 77, 0.14);
2351
+ }
2352
+
2353
+ .viewer-editor .cm-diff-hunk {
2354
+ background: rgba(88, 166, 255, 0.12);
2355
+ color: var(--working);
2356
+ }
2357
+
2358
+ .viewer-editor .cm-diff-meta {
2359
+ color: var(--dim);
2360
+ }
2361
+
2362
+ .viewer-image {
2363
+ flex: 1;
2364
+ display: flex;
2365
+ align-items: center;
2366
+ justify-content: center;
2367
+ overflow: auto;
2368
+ padding: 20px;
2369
+ }
2370
+
2371
+ .viewer-image img {
2372
+ max-width: 100%;
2373
+ max-height: 100%;
2374
+ object-fit: contain;
2375
+ }
2376
+
2377
+ .viewer-msg {
2378
+ padding: 24px;
2379
+ color: var(--dim);
2380
+ }
2381
+
2382
+ .viewer-actions {
2383
+ display: flex;
2384
+ align-items: center;
2385
+ gap: 8px;
2386
+ flex-shrink: 0;
2387
+ }
2388
+
2389
+ .viewer-toggle {
2390
+ display: flex;
2391
+ gap: 2px;
2392
+ padding: 2px;
2393
+ background: var(--bg);
2394
+ border: 1px solid var(--border);
2395
+ border-radius: 6px;
2396
+ }
2397
+
2398
+ .viewer-toggle .btn.ghost {
2399
+ border: none;
2400
+ padding: 2px 10px;
2401
+ }
2402
+
2403
+ .viewer-markdown {
2404
+ flex: 1;
2405
+ min-height: 0;
2406
+ overflow-y: auto;
2407
+ padding: 16px 28px 40px;
2408
+ font-size: 14px;
2409
+ line-height: 1.6;
2410
+ color: var(--text);
2411
+ }
2412
+
2413
+ .viewer-markdown h1,
2414
+ .viewer-markdown h2,
2415
+ .viewer-markdown h3,
2416
+ .viewer-markdown h4,
2417
+ .viewer-markdown h5,
2418
+ .viewer-markdown h6 {
2419
+ margin: 1.2em 0 0.5em;
2420
+ line-height: 1.3;
2421
+ }
2422
+
2423
+ .viewer-markdown h1 {
2424
+ font-size: 1.7em;
2425
+ border-bottom: 1px solid var(--border);
2426
+ padding-bottom: 0.3em;
2427
+ }
2428
+
2429
+ .viewer-markdown h2 {
2430
+ font-size: 1.4em;
2431
+ border-bottom: 1px solid var(--border);
2432
+ padding-bottom: 0.3em;
2433
+ }
2434
+
2435
+ .viewer-markdown h3 {
2436
+ font-size: 1.15em;
2437
+ }
2438
+
2439
+ .viewer-markdown p,
2440
+ .viewer-markdown ul,
2441
+ .viewer-markdown ol,
2442
+ .viewer-markdown blockquote,
2443
+ .viewer-markdown table,
2444
+ .viewer-markdown pre {
2445
+ margin: 0.6em 0;
2446
+ }
2447
+
2448
+ .viewer-markdown ul,
2449
+ .viewer-markdown ol {
2450
+ padding-left: 1.6em;
2451
+ }
2452
+
2453
+ .viewer-markdown li + li {
2454
+ margin-top: 0.2em;
2455
+ }
2456
+
2457
+ .viewer-markdown a {
2458
+ color: var(--working);
2459
+ text-decoration: none;
2460
+ }
2461
+
2462
+ .viewer-markdown a:hover {
2463
+ text-decoration: underline;
2464
+ }
2465
+
2466
+ .viewer-markdown code {
2467
+ font-family: 'Cascadia Mono', Consolas, monospace;
2468
+ font-size: 0.9em;
2469
+ background: var(--panel);
2470
+ border: 1px solid var(--border);
2471
+ border-radius: 4px;
2472
+ padding: 1px 5px;
2473
+ }
2474
+
2475
+ .viewer-markdown pre {
2476
+ background: var(--panel);
2477
+ border: 1px solid var(--border);
2478
+ border-radius: 6px;
2479
+ padding: 10px 14px;
2480
+ overflow-x: auto;
2481
+ }
2482
+
2483
+ .viewer-markdown pre code {
2484
+ background: none;
2485
+ border: none;
2486
+ padding: 0;
2487
+ }
2488
+
2489
+ .viewer-markdown blockquote {
2490
+ border-left: 3px solid var(--border);
2491
+ padding-left: 12px;
2492
+ color: var(--dim);
2493
+ }
2494
+
2495
+ .viewer-markdown table {
2496
+ border-collapse: collapse;
2497
+ }
2498
+
2499
+ .viewer-markdown th,
2500
+ .viewer-markdown td {
2501
+ border: 1px solid var(--border);
2502
+ padding: 4px 10px;
2503
+ }
2504
+
2505
+ .viewer-markdown th {
2506
+ background: var(--panel);
2507
+ }
2508
+
2509
+ .viewer-markdown hr {
2510
+ border: none;
2511
+ border-top: 1px solid var(--border);
2512
+ margin: 1.2em 0;
2513
+ }
2514
+
2515
+ .viewer-markdown img {
2516
+ max-width: 100%;
2517
+ }
2518
+
2519
+ /* ---------- status bar ---------- */
2520
+
2521
+ .statusbar {
2522
+ display: flex;
2523
+ align-items: center;
2524
+ gap: 14px;
2525
+ padding: 4px 12px;
2526
+ border-top: 1px solid var(--border);
2527
+ background: var(--panel);
2528
+ font-size: 11px;
2529
+ color: var(--dim);
2530
+ }
2531
+
2532
+ .status-pill {
2533
+ padding: 1px 8px;
2534
+ border-radius: 8px;
2535
+ font-weight: 600;
2536
+ }
2537
+
2538
+ .status-pill.status-working {
2539
+ background: rgba(88, 166, 255, 0.15);
2540
+ color: var(--working);
2541
+ }
2542
+
2543
+ .status-pill.status-needs-attention {
2544
+ background: rgba(226, 185, 61, 0.15);
2545
+ color: var(--attention);
2546
+ }
2547
+
2548
+ .status-pill.status-done {
2549
+ background: rgba(76, 195, 138, 0.15);
2550
+ color: var(--green);
2551
+ }
2552
+
2553
+ .status-pill.status-idle,
2554
+ .status-pill.status-starting {
2555
+ background: var(--panel-2);
2556
+ }
2557
+
2558
+ .status-pill.status-exited,
2559
+ .status-pill.status-error {
2560
+ background: rgba(229, 72, 77, 0.15);
2561
+ color: var(--error);
2562
+ }
2563
+
2564
+ .statusbar-folder {
2565
+ overflow: hidden;
2566
+ text-overflow: ellipsis;
2567
+ white-space: nowrap;
2568
+ }
2569
+
2570
+ .statusbar-attention {
2571
+ border: none;
2572
+ padding: 1px 8px;
2573
+ border-radius: 8px;
2574
+ font-size: 11px;
2575
+ font-weight: 600;
2576
+ cursor: pointer;
2577
+ background: rgba(226, 185, 61, 0.15);
2578
+ color: var(--attention);
2579
+ }
2580
+
2581
+ .statusbar-attention:hover {
2582
+ background: rgba(226, 185, 61, 0.3);
2583
+ }
2584
+
2585
+ .statusbar-age {
2586
+ margin-left: auto;
2587
+ }
2588
+
2589
+ /* ---------- crash screen ---------- */
2590
+
2591
+ .crash {
2592
+ height: 100%;
2593
+ display: flex;
2594
+ flex-direction: column;
2595
+ align-items: center;
2596
+ justify-content: center;
2597
+ gap: 12px;
2598
+ padding: 24px;
2599
+ }
2600
+
2601
+ .crash pre {
2602
+ max-width: 80%;
2603
+ max-height: 50%;
2604
+ overflow: auto;
2605
+ background: var(--panel);
2606
+ border: 1px solid var(--border);
2607
+ border-radius: 6px;
2608
+ padding: 12px;
2609
+ font-size: 11px;
2610
+ color: var(--error);
2611
+ user-select: text;
2612
+ }
2613
+
2614
+ /* scrollbars */
2615
+
2616
+ ::-webkit-scrollbar {
2617
+ width: 9px;
2618
+ height: 9px;
2619
+ }
2620
+
2621
+ ::-webkit-scrollbar-thumb {
2622
+ background: #34363e;
2623
+ border-radius: 5px;
2624
+ }
2625
+
2626
+ ::-webkit-scrollbar-thumb:hover {
2627
+ background: #44464f;
2628
+ }
2629
+
2630
+ ::-webkit-scrollbar-track {
2631
+ background: transparent;
2632
+ }
2633
+
2634
+ /* ---------- sentinels (background watcher agents) ---------- */
2635
+
2636
+ .sentinels {
2637
+ border-top: 1px solid var(--border);
2638
+ max-height: 260px;
2639
+ overflow-y: auto;
2640
+ padding-bottom: 6px;
2641
+ }
2642
+
2643
+ .sentinels-header {
2644
+ display: flex;
2645
+ align-items: center;
2646
+ justify-content: space-between;
2647
+ padding: 4px 8px 0 12px;
2648
+ }
2649
+
2650
+ .sentinels-header span {
2651
+ font-size: 11px;
2652
+ font-weight: 600;
2653
+ letter-spacing: 0.08em;
2654
+ text-transform: uppercase;
2655
+ color: var(--dim);
2656
+ }
2657
+
2658
+ .sentinels-empty {
2659
+ padding: 2px 12px 4px;
2660
+ font-size: 11px;
2661
+ color: var(--dim);
2662
+ line-height: 1.4;
2663
+ }
2664
+
2665
+ .sentinel-row {
2666
+ display: flex;
2667
+ align-items: center;
2668
+ gap: 6px;
2669
+ padding: 2px 8px 2px 12px;
2670
+ cursor: pointer;
2671
+ }
2672
+
2673
+ .sentinel-row:hover {
2674
+ background: var(--panel-2);
2675
+ }
2676
+
2677
+ .sentinel-glyph {
2678
+ flex: none;
2679
+ width: 16px;
2680
+ height: 16px;
2681
+ display: inline-flex;
2682
+ align-items: center;
2683
+ justify-content: center;
2684
+ border-radius: 8px;
2685
+ font-size: 10px;
2686
+ font-weight: 600;
2687
+ }
2688
+
2689
+ .sentinel-glyph.idle { color: var(--dim); }
2690
+ .sentinel-glyph.off { color: var(--dim); }
2691
+ .sentinel-glyph.ok { color: var(--green); }
2692
+ .sentinel-glyph.error { color: var(--error); }
2693
+ .sentinel-glyph.running {
2694
+ color: var(--working);
2695
+ animation: sentinel-spin 1.2s linear infinite;
2696
+ }
2697
+
2698
+ @keyframes sentinel-spin {
2699
+ to { transform: rotate(360deg); }
2700
+ }
2701
+
2702
+ /* findings-count badge, tinted by the worst severity in the run */
2703
+ .sentinel-glyph.sev-info { background: rgba(88, 166, 255, 0.2); color: var(--working); }
2704
+ .sentinel-glyph.sev-warning { background: rgba(226, 185, 61, 0.2); color: var(--attention); }
2705
+ .sentinel-glyph.sev-critical { background: rgba(229, 72, 77, 0.2); color: var(--error); }
2706
+
2707
+ .sentinel-name {
2708
+ flex: 1;
2709
+ overflow: hidden;
2710
+ text-overflow: ellipsis;
2711
+ white-space: nowrap;
2712
+ }
2713
+
2714
+ .sentinel-trigger {
2715
+ font-size: 10px;
2716
+ color: var(--dim);
2717
+ white-space: nowrap;
2718
+ }
2719
+
2720
+ .sentinel-row .sentinel-btn {
2721
+ visibility: hidden;
2722
+ }
2723
+
2724
+ .sentinel-row:hover .sentinel-btn {
2725
+ visibility: visible;
2726
+ }
2727
+
2728
+ .sentinel-chevron {
2729
+ color: var(--dim);
2730
+ font-size: 10px;
2731
+ }
2732
+
2733
+ .sentinel-run {
2734
+ padding: 2px 12px 6px 24px;
2735
+ font-size: 11px;
2736
+ line-height: 1.45;
2737
+ }
2738
+
2739
+ .sentinel-run-meta {
2740
+ color: var(--dim);
2741
+ font-size: 10px;
2742
+ }
2743
+
2744
+ .sentinel-summary {
2745
+ margin-top: 2px;
2746
+ color: var(--text);
2747
+ }
2748
+
2749
+ .sentinel-summary.error {
2750
+ color: var(--error);
2751
+ }
2752
+
2753
+ .sentinel-finding {
2754
+ margin-top: 6px;
2755
+ padding: 4px 8px;
2756
+ border-left: 2px solid var(--border);
2757
+ background: var(--panel-2);
2758
+ border-radius: 0 4px 4px 0;
2759
+ }
2760
+
2761
+ .sentinel-finding.sev-info { border-left-color: var(--working); }
2762
+ .sentinel-finding.sev-warning { border-left-color: var(--attention); }
2763
+ .sentinel-finding.sev-critical { border-left-color: var(--error); }
2764
+
2765
+ .sentinel-finding-title {
2766
+ font-weight: 600;
2767
+ display: flex;
2768
+ align-items: center;
2769
+ gap: 5px;
2770
+ }
2771
+
2772
+ .sentinel-finding .sev-dot {
2773
+ flex: none;
2774
+ width: 6px;
2775
+ height: 6px;
2776
+ border-radius: 3px;
2777
+ }
2778
+
2779
+ .sentinel-finding.sev-info .sev-dot { background: var(--working); }
2780
+ .sentinel-finding.sev-warning .sev-dot { background: var(--attention); }
2781
+ .sentinel-finding.sev-critical .sev-dot { background: var(--error); }
2782
+
2783
+ .sentinel-finding-detail {
2784
+ color: var(--dim);
2785
+ }
2786
+
2787
+ .sentinel-finding-file {
2788
+ margin-top: 2px;
2789
+ font-family: 'Cascadia Mono', Consolas, monospace;
2790
+ font-size: 10px;
2791
+ color: var(--accent);
2792
+ cursor: pointer;
2793
+ overflow: hidden;
2794
+ text-overflow: ellipsis;
2795
+ white-space: nowrap;
2796
+ }
2797
+
2798
+ .sentinel-finding-file:hover {
2799
+ text-decoration: underline;
2800
+ }
2801
+
2802
+ /* sentinel dialog */
2803
+ .sentinel-prompt {
2804
+ resize: vertical;
2805
+ min-height: 90px;
2806
+ font-family: inherit;
2807
+ }
2808
+
2809
+ .field-row {
2810
+ display: flex;
2811
+ gap: 12px;
2812
+ align-items: flex-end;
2813
+ }
2814
+
2815
+ .field-row .field {
2816
+ flex: 1;
2817
+ }
2818
+
2819
+ .checkbox-field {
2820
+ flex: none !important;
2821
+ }
2822
+
2823
+ .checkbox-field input {
2824
+ width: 16px;
2825
+ height: 16px;
2826
+ margin: 6px 0;
2827
+ }
2828
+
2829
+ /* ---- features & specs dialog ---- */
2830
+ .new-feature-btn {
2831
+ align-self: flex-start;
2832
+ }
2833
+
2834
+ .new-feature-row {
2835
+ display: flex;
2836
+ gap: 8px;
2837
+ }
2838
+
2839
+ .new-feature-row input {
2840
+ flex: 1;
2841
+ background: var(--bg);
2842
+ border: 1px solid var(--border);
2843
+ border-radius: 4px;
2844
+ color: var(--text);
2845
+ font-size: 13px;
2846
+ padding: 5px 8px;
2847
+ outline: none;
2848
+ }
2849
+
2850
+ .new-feature-row input:focus {
2851
+ border-color: var(--accent);
2852
+ }
2853
+
2854
+ .feature-list {
2855
+ display: flex;
2856
+ flex-direction: column;
2857
+ gap: 12px;
2858
+ }
2859
+
2860
+ .feature-empty {
2861
+ color: var(--dim);
2862
+ font-size: 13px;
2863
+ padding: 8px 0;
2864
+ }
2865
+
2866
+ .feature-card {
2867
+ border: 1px solid var(--border);
2868
+ border-left: 3px solid var(--dim);
2869
+ border-radius: 8px;
2870
+ background: var(--panel-2);
2871
+ padding: 12px;
2872
+ display: flex;
2873
+ flex-direction: column;
2874
+ gap: 8px;
2875
+ }
2876
+
2877
+ .feature-card.status-implementing {
2878
+ border-left-color: var(--working);
2879
+ }
2880
+
2881
+ .feature-card.status-merged {
2882
+ border-left-color: var(--green);
2883
+ }
2884
+
2885
+ .feature-card-head {
2886
+ display: flex;
2887
+ align-items: center;
2888
+ gap: 8px;
2889
+ }
2890
+
2891
+ .feature-title {
2892
+ flex: 1;
2893
+ background: var(--bg);
2894
+ border: 1px solid var(--border);
2895
+ border-radius: 4px;
2896
+ color: var(--text);
2897
+ font-size: 14px;
2898
+ font-weight: 600;
2899
+ padding: 5px 8px;
2900
+ outline: none;
2901
+ }
2902
+
2903
+ .feature-title:focus {
2904
+ border-color: var(--accent);
2905
+ }
2906
+
2907
+ .feature-status {
2908
+ font-size: 10px;
2909
+ font-weight: 700;
2910
+ letter-spacing: 0.05em;
2911
+ text-transform: uppercase;
2912
+ padding: 2px 8px;
2913
+ border-radius: 10px;
2914
+ color: var(--dim);
2915
+ background: var(--bg);
2916
+ white-space: nowrap;
2917
+ }
2918
+
2919
+ .feature-status.status-implementing {
2920
+ color: var(--working);
2921
+ }
2922
+
2923
+ .feature-status.status-merged {
2924
+ color: var(--green);
2925
+ }
2926
+
2927
+ .feature-desc {
2928
+ background: var(--bg);
2929
+ border: 1px solid var(--border);
2930
+ border-radius: 4px;
2931
+ color: var(--text);
2932
+ font-size: 13px;
2933
+ padding: 5px 8px;
2934
+ outline: none;
2935
+ font-family: inherit;
2936
+ resize: vertical;
2937
+ }
2938
+
2939
+ .feature-desc:focus {
2940
+ border-color: var(--accent);
2941
+ }
2942
+
2943
+ .spec-list {
2944
+ display: flex;
2945
+ flex-direction: column;
2946
+ gap: 6px;
2947
+ }
2948
+
2949
+ .spec-row {
2950
+ display: flex;
2951
+ align-items: center;
2952
+ gap: 8px;
2953
+ }
2954
+
2955
+ .spec-row input[type='checkbox'] {
2956
+ width: 15px;
2957
+ height: 15px;
2958
+ flex: none;
2959
+ }
2960
+
2961
+ .spec-text {
2962
+ flex: 1;
2963
+ background: var(--bg);
2964
+ border: 1px solid var(--border);
2965
+ border-radius: 4px;
2966
+ color: var(--text);
2967
+ font-size: 13px;
2968
+ padding: 4px 8px;
2969
+ outline: none;
2970
+ }
2971
+
2972
+ .spec-text:focus {
2973
+ border-color: var(--accent);
2974
+ }
2975
+
2976
+ .spec-add {
2977
+ align-self: flex-start;
2978
+ font-size: 12px;
2979
+ color: var(--accent);
2980
+ }
2981
+
2982
+ .feature-pr-options {
2983
+ display: flex;
2984
+ flex-direction: column;
2985
+ gap: 6px;
2986
+ padding: 8px 0;
2987
+ border-top: 1px solid var(--border);
2988
+ }
2989
+
2990
+ /* ---------- per-session environment variables ---------- */
2991
+
2992
+ .env-row .env-key,
2993
+ .env-row .env-value {
2994
+ background: var(--bg);
2995
+ border: 1px solid var(--border);
2996
+ border-radius: 4px;
2997
+ color: var(--text);
2998
+ font-family: 'Cascadia Mono', Consolas, monospace;
2999
+ font-size: 12px;
3000
+ padding: 5px 8px;
3001
+ outline: none;
3002
+ }
3003
+
3004
+ .env-row .env-key {
3005
+ flex: 0 0 40%;
3006
+ }
3007
+
3008
+ .env-row .env-value {
3009
+ flex: 1;
3010
+ min-width: 0;
3011
+ }
3012
+
3013
+ .env-row .env-key:focus,
3014
+ .env-row .env-value:focus {
3015
+ border-color: var(--accent);
3016
+ }
3017
+
3018
+ .env-row .env-eq {
3019
+ color: var(--dim);
3020
+ flex: none;
3021
+ }
3022
+
3023
+ .feature-actions {
3024
+ display: flex;
3025
+ align-items: center;
3026
+ gap: 8px;
3027
+ margin-top: 2px;
3028
+ }
3029
+
3030
+ .btn.ghost.danger {
3031
+ color: var(--error);
3032
+ }
3033
+
3034
+ /* ---------- auto-expand (self-expanding features) ---------- */
3035
+
3036
+ .autoexpand-runs {
3037
+ display: flex;
3038
+ flex-direction: column;
3039
+ gap: 6px;
3040
+ max-height: 40vh;
3041
+ overflow-y: auto;
3042
+ margin-top: 4px;
3043
+ }
3044
+
3045
+ .autoexpand-run {
3046
+ border: 1px solid var(--border);
3047
+ border-radius: 6px;
3048
+ background: var(--panel);
3049
+ }
3050
+
3051
+ .autoexpand-run-head {
3052
+ display: flex;
3053
+ align-items: center;
3054
+ gap: 8px;
3055
+ padding: 6px 10px;
3056
+ cursor: pointer;
3057
+ font-size: 12px;
3058
+ }
3059
+
3060
+ .autoexpand-status {
3061
+ font-size: 10px;
3062
+ text-transform: uppercase;
3063
+ letter-spacing: 0.04em;
3064
+ padding: 1px 6px;
3065
+ border-radius: 8px;
3066
+ background: var(--border);
3067
+ color: var(--dim);
3068
+ flex-shrink: 0;
3069
+ }
3070
+
3071
+ .autoexpand-status.run-running {
3072
+ background: rgba(59, 130, 246, 0.2);
3073
+ color: #60a5fa;
3074
+ }
3075
+
3076
+ .autoexpand-status.run-done {
3077
+ background: rgba(34, 197, 94, 0.18);
3078
+ color: #4ade80;
3079
+ }
3080
+
3081
+ .autoexpand-status.run-error {
3082
+ background: rgba(229, 72, 77, 0.18);
3083
+ color: var(--error);
3084
+ }
3085
+
3086
+ .autoexpand-run-title {
3087
+ flex: 1;
3088
+ overflow: hidden;
3089
+ text-overflow: ellipsis;
3090
+ white-space: nowrap;
3091
+ }
3092
+
3093
+ .autoexpand-run-meta {
3094
+ color: var(--dim);
3095
+ font-size: 10px;
3096
+ flex-shrink: 0;
3097
+ }
3098
+
3099
+ .autoexpand-run-body {
3100
+ padding: 0 10px 8px;
3101
+ font-size: 12px;
3102
+ line-height: 1.45;
3103
+ border-top: 1px solid var(--border);
3104
+ }
3105
+
3106
+ .autoexpand-verdict {
3107
+ margin-top: 6px;
3108
+ color: var(--text);
3109
+ }
3110
+
3111
+ .autoexpand-verdict.error {
3112
+ color: var(--error);
3113
+ }
3114
+
3115
+ .autoexpand-ideas {
3116
+ margin: 6px 0;
3117
+ padding-left: 18px;
3118
+ color: var(--dim);
3119
+ }
3120
+
3121
+ .autoexpand-ideas li {
3122
+ margin-top: 3px;
3123
+ }
3124
+
3125
+ .autoexpand-ideas li.chosen {
3126
+ color: var(--text);
3127
+ }
3128
+
3129
+ /* ---------- app notice (brief auto-dismissing confirmation) ---------- */
3130
+
3131
+ .app-notice {
3132
+ position: fixed;
3133
+ bottom: 36px;
3134
+ left: 50%;
3135
+ transform: translateX(-50%);
3136
+ z-index: 400;
3137
+ background: var(--panel-2);
3138
+ border: 1px solid var(--border);
3139
+ border-radius: 6px;
3140
+ padding: 8px 16px;
3141
+ font-size: 12px;
3142
+ color: var(--text);
3143
+ box-shadow: 0 6px 18px rgba(0, 0, 0, 0.45);
3144
+ pointer-events: none;
3145
+ animation: notice-in 0.15s ease-out;
3146
+ }
3147
+
3148
+ @keyframes notice-in {
3149
+ from {
3150
+ opacity: 0;
3151
+ transform: translateX(-50%) translateY(6px);
3152
+ }
3153
+ to {
3154
+ opacity: 1;
3155
+ transform: translateX(-50%) translateY(0);
3156
+ }
3157
+ }
3158
+
3159
+ /* ---------- feature rail (right-edge icon bar for feature-linked tasks) ---------- */
3160
+
3161
+ .feature-rail {
3162
+ flex: none;
3163
+ width: 40px;
3164
+ display: flex;
3165
+ flex-direction: column;
3166
+ align-items: center;
3167
+ gap: 6px;
3168
+ padding: 8px 0;
3169
+ background: var(--panel);
3170
+ border-left: 1px solid var(--border);
3171
+ }
3172
+
3173
+ .feature-rail-btn {
3174
+ width: 30px;
3175
+ height: 30px;
3176
+ display: flex;
3177
+ align-items: center;
3178
+ justify-content: center;
3179
+ background: var(--panel-2);
3180
+ border: 1px solid var(--border);
3181
+ border-radius: 6px;
3182
+ color: var(--accent);
3183
+ font-size: 16px;
3184
+ cursor: pointer;
3185
+ }
3186
+
3187
+ .feature-rail-btn:hover {
3188
+ border-color: var(--dim);
3189
+ }
3190
+
3191
+ .feature-rail-btn.on {
3192
+ border-color: var(--accent);
3193
+ background: color-mix(in srgb, var(--accent) 18%, transparent);
3194
+ }
3195
+
3196
+ .feature-flyout-overlay {
3197
+ position: fixed;
3198
+ inset: 0;
3199
+ z-index: 300;
3200
+ cursor: default;
3201
+ }
3202
+
3203
+ .feature-flyout {
3204
+ position: fixed;
3205
+ width: 340px;
3206
+ max-width: calc(100vw - 56px);
3207
+ max-height: calc(100vh - 16px);
3208
+ overflow-y: auto;
3209
+ background: var(--panel);
3210
+ border: 1px solid var(--border);
3211
+ border-left: 3px solid var(--dim);
3212
+ border-radius: 8px;
3213
+ padding: 12px;
3214
+ display: flex;
3215
+ flex-direction: column;
3216
+ gap: 8px;
3217
+ box-shadow: 0 12px 36px rgba(0, 0, 0, 0.55);
3218
+ }
3219
+
3220
+ .feature-flyout.status-implementing {
3221
+ border-left-color: var(--working);
3222
+ }
3223
+
3224
+ .feature-flyout.status-merged {
3225
+ border-left-color: var(--green);
3226
+ }
3227
+
3228
+ .feature-flyout-head {
3229
+ display: flex;
3230
+ align-items: center;
3231
+ gap: 8px;
3232
+ }
3233
+
3234
+ .feature-flyout-title {
3235
+ flex: 1;
3236
+ font-size: 14px;
3237
+ font-weight: 600;
3238
+ white-space: nowrap;
3239
+ overflow: hidden;
3240
+ text-overflow: ellipsis;
3241
+ }
3242
+
3243
+ .feature-flyout-desc {
3244
+ font-size: 13px;
3245
+ line-height: 1.45;
3246
+ color: var(--text);
3247
+ white-space: pre-wrap;
3248
+ }
3249
+
3250
+ .feature-flyout .dim {
3251
+ color: var(--dim);
3252
+ }
3253
+
3254
+ .feature-flyout-specs-head {
3255
+ font-size: 11px;
3256
+ font-weight: 700;
3257
+ letter-spacing: 0.05em;
3258
+ text-transform: uppercase;
3259
+ color: var(--dim);
3260
+ margin-top: 2px;
3261
+ }
3262
+
3263
+ .feature-flyout-specs {
3264
+ display: flex;
3265
+ flex-direction: column;
3266
+ gap: 5px;
3267
+ }
3268
+
3269
+ .feature-flyout-spec {
3270
+ display: flex;
3271
+ align-items: flex-start;
3272
+ gap: 7px;
3273
+ font-size: 13px;
3274
+ line-height: 1.4;
3275
+ }
3276
+
3277
+ .feature-flyout-check {
3278
+ flex: none;
3279
+ color: var(--dim);
3280
+ }
3281
+
3282
+ .feature-flyout-spec.done .feature-flyout-check {
3283
+ color: var(--green);
3284
+ }
3285
+
3286
+ .feature-flyout-spec.done .feature-flyout-spec-text {
3287
+ color: var(--dim);
3288
+ text-decoration: line-through;
3289
+ }
3290
+
3291
+ .feature-flyout-actions {
3292
+ display: flex;
3293
+ justify-content: flex-end;
3294
+ margin-top: 2px;
3295
+ }
3296
+
3297
+ /* ---------- conductor (app-level AI chat) ---------- */
3298
+
3299
+ /* The pinned Maestro row uses the accent as its tag colour. */
3300
+ .conductor-entry {
3301
+ border-left-color: var(--accent);
3302
+ }
3303
+ .conductor-entry.active {
3304
+ background: var(--panel-2);
3305
+ }
3306
+ .conductor-entry .glyph {
3307
+ color: var(--accent);
3308
+ }
3309
+
3310
+ .conductor-pane {
3311
+ flex: 1;
3312
+ min-height: 0;
3313
+ display: flex;
3314
+ flex-direction: column;
3315
+ background: var(--bg);
3316
+ }
3317
+
3318
+ .conductor-header {
3319
+ display: flex;
3320
+ align-items: center;
3321
+ justify-content: space-between;
3322
+ padding: 8px 14px;
3323
+ border-bottom: 1px solid var(--border);
3324
+ }
3325
+ .conductor-title {
3326
+ font-weight: 600;
3327
+ color: var(--text);
3328
+ }
3329
+
3330
+ /* Focus ("tag") picker in the conductor header. */
3331
+ .conductor-focus {
3332
+ display: inline-flex;
3333
+ align-items: center;
3334
+ gap: 4px;
3335
+ padding: 2px 6px;
3336
+ border: 1px solid var(--border);
3337
+ border-radius: 6px;
3338
+ background: var(--panel-2);
3339
+ }
3340
+ .conductor-focus-mark {
3341
+ opacity: 0.8;
3342
+ font-size: 12px;
3343
+ }
3344
+ .conductor-focus-select {
3345
+ border: none;
3346
+ background: transparent;
3347
+ color: var(--text);
3348
+ font: inherit;
3349
+ max-width: 180px;
3350
+ }
3351
+ .conductor-focus-select:focus {
3352
+ outline: none;
3353
+ }
3354
+
3355
+ .conductor-list {
3356
+ flex: 1;
3357
+ min-height: 0;
3358
+ overflow-y: auto;
3359
+ padding: 16px;
3360
+ display: flex;
3361
+ flex-direction: column;
3362
+ gap: 16px;
3363
+ }
3364
+
3365
+ .conductor-empty {
3366
+ color: var(--dim);
3367
+ max-width: 640px;
3368
+ margin: auto;
3369
+ text-align: center;
3370
+ }
3371
+ .conductor-empty ul {
3372
+ text-align: left;
3373
+ margin-top: 12px;
3374
+ padding-left: 18px;
3375
+ line-height: 1.7;
3376
+ }
3377
+
3378
+ .conductor-msg {
3379
+ display: flex;
3380
+ flex-direction: column;
3381
+ gap: 4px;
3382
+ max-width: 820px;
3383
+ width: 100%;
3384
+ }
3385
+ .conductor-msg.role-user {
3386
+ align-self: flex-end;
3387
+ align-items: flex-end;
3388
+ }
3389
+ .conductor-msg-role {
3390
+ font-size: 11px;
3391
+ text-transform: uppercase;
3392
+ letter-spacing: 0.06em;
3393
+ color: var(--dim);
3394
+ }
3395
+ .conductor-msg-body {
3396
+ background: var(--panel);
3397
+ border: 1px solid var(--border);
3398
+ border-radius: 8px;
3399
+ padding: 10px 12px;
3400
+ }
3401
+ .conductor-msg.role-user .conductor-msg-body {
3402
+ background: var(--panel-2);
3403
+ border-color: var(--accent);
3404
+ }
3405
+ .conductor-usertext {
3406
+ white-space: pre-wrap;
3407
+ }
3408
+ .conductor-thinking {
3409
+ color: var(--dim);
3410
+ font-style: italic;
3411
+ }
3412
+ .conductor-error {
3413
+ margin-top: 8px;
3414
+ color: var(--error);
3415
+ font-size: 13px;
3416
+ white-space: pre-wrap;
3417
+ }
3418
+
3419
+ /* markdown inside an assistant turn — keep it compact */
3420
+ .conductor-msg-body .md > :first-child {
3421
+ margin-top: 0;
3422
+ }
3423
+ .conductor-msg-body .md > :last-child {
3424
+ margin-bottom: 0;
3425
+ }
3426
+ .conductor-msg-body .md pre {
3427
+ background: var(--panel-2);
3428
+ border: 1px solid var(--border);
3429
+ border-radius: 6px;
3430
+ padding: 8px 10px;
3431
+ overflow-x: auto;
3432
+ }
3433
+ .conductor-msg-body .md code {
3434
+ font-family: var(--mono, 'Cascadia Mono', Consolas, monospace);
3435
+ }
3436
+
3437
+ .conductor-actions {
3438
+ margin-top: 10px;
3439
+ display: flex;
3440
+ flex-direction: column;
3441
+ gap: 8px;
3442
+ }
3443
+
3444
+ .conductor-action {
3445
+ border: 1px solid var(--border);
3446
+ border-radius: 6px;
3447
+ padding: 8px 10px;
3448
+ background: var(--panel-2);
3449
+ }
3450
+ .conductor-action.risk-destructive {
3451
+ border-color: var(--error);
3452
+ }
3453
+ .conductor-action.status-rejected,
3454
+ .conductor-action.status-done {
3455
+ opacity: 0.7;
3456
+ }
3457
+ .conductor-action-head {
3458
+ display: flex;
3459
+ align-items: center;
3460
+ gap: 8px;
3461
+ }
3462
+ .conductor-action-kind {
3463
+ font-size: 12px;
3464
+ color: var(--dim);
3465
+ }
3466
+ .risk-chip {
3467
+ font-size: 10px;
3468
+ text-transform: uppercase;
3469
+ letter-spacing: 0.05em;
3470
+ padding: 1px 6px;
3471
+ border-radius: 999px;
3472
+ border: 1px solid var(--border);
3473
+ color: var(--dim);
3474
+ }
3475
+ .risk-chip.risk-write {
3476
+ color: var(--working);
3477
+ border-color: var(--working);
3478
+ }
3479
+ .risk-chip.risk-destructive {
3480
+ color: var(--error);
3481
+ border-color: var(--error);
3482
+ }
3483
+ .conductor-action-status {
3484
+ margin-left: auto;
3485
+ font-size: 11px;
3486
+ text-transform: uppercase;
3487
+ }
3488
+ .conductor-action-status.status-done {
3489
+ color: var(--green);
3490
+ }
3491
+ .conductor-action-status.status-error {
3492
+ color: var(--error);
3493
+ }
3494
+ .conductor-action-status.status-running {
3495
+ color: var(--working);
3496
+ }
3497
+ .conductor-action-summary {
3498
+ margin-top: 4px;
3499
+ }
3500
+ .conductor-action-result {
3501
+ margin-top: 6px;
3502
+ font-size: 12px;
3503
+ color: var(--dim);
3504
+ white-space: pre-wrap;
3505
+ }
3506
+ .conductor-action-buttons {
3507
+ margin-top: 8px;
3508
+ display: flex;
3509
+ gap: 8px;
3510
+ }
3511
+
3512
+ .conductor-composer {
3513
+ display: flex;
3514
+ gap: 8px;
3515
+ padding: 12px 14px;
3516
+ border-top: 1px solid var(--border);
3517
+ }
3518
+ .conductor-input {
3519
+ flex: 1;
3520
+ resize: none;
3521
+ min-height: 44px;
3522
+ max-height: 160px;
3523
+ background: var(--panel);
3524
+ border: 1px solid var(--border);
3525
+ border-radius: 6px;
3526
+ color: var(--text);
3527
+ padding: 10px 12px;
3528
+ font-family: inherit;
3529
+ font-size: 14px;
3530
+ }
3531
+ .conductor-input:focus {
3532
+ outline: none;
3533
+ border-color: var(--accent);
3534
+ }
3535
+
3536
+ /* ---------- settings dialog tabs ---------- */
3537
+ .settings-tabs {
3538
+ display: flex;
3539
+ gap: 4px;
3540
+ border-bottom: 1px solid var(--border);
3541
+ margin: 4px 0 12px;
3542
+ }
3543
+ .settings-tab {
3544
+ background: none;
3545
+ border: none;
3546
+ border-bottom: 2px solid transparent;
3547
+ color: var(--dim);
3548
+ padding: 6px 10px;
3549
+ font: inherit;
3550
+ cursor: pointer;
3551
+ }
3552
+ .settings-tab.active {
3553
+ color: var(--text);
3554
+ border-bottom-color: var(--accent);
3555
+ }
3556
+
3557
+ /* ---------- agent & skill factory ---------- */
3558
+ .factory-pane {
3559
+ flex: 1;
3560
+ min-height: 0;
3561
+ display: flex;
3562
+ flex-direction: column;
3563
+ background: var(--bg);
3564
+ }
3565
+ .factory-header {
3566
+ display: flex;
3567
+ align-items: center;
3568
+ justify-content: space-between;
3569
+ padding: 8px 14px;
3570
+ border-bottom: 1px solid var(--border);
3571
+ }
3572
+ .factory-title {
3573
+ font-weight: 600;
3574
+ }
3575
+ .factory-scanbar {
3576
+ display: flex;
3577
+ gap: 8px;
3578
+ padding: 10px 14px;
3579
+ border-bottom: 1px solid var(--border);
3580
+ }
3581
+ .factory-source-select {
3582
+ flex: 0 0 auto;
3583
+ max-width: 240px;
3584
+ }
3585
+ .factory-guidance {
3586
+ flex: 1;
3587
+ }
3588
+ .factory-body {
3589
+ flex: 1;
3590
+ min-height: 0;
3591
+ overflow-y: auto;
3592
+ padding: 16px;
3593
+ display: flex;
3594
+ flex-direction: column;
3595
+ gap: 22px;
3596
+ }
3597
+ .factory-note {
3598
+ color: var(--dim);
3599
+ font-size: 13px;
3600
+ }
3601
+ .factory-section h3 {
3602
+ margin: 0 0 10px;
3603
+ font-size: 13px;
3604
+ text-transform: uppercase;
3605
+ letter-spacing: 0.04em;
3606
+ color: var(--dim);
3607
+ }
3608
+ .factory-empty-row {
3609
+ color: var(--dim);
3610
+ font-size: 13px;
3611
+ padding: 6px 0;
3612
+ }
3613
+
3614
+ /* kind chips (skill vs agent) */
3615
+ .kind-chip {
3616
+ font-size: 10px;
3617
+ text-transform: uppercase;
3618
+ letter-spacing: 0.05em;
3619
+ padding: 1px 6px;
3620
+ border-radius: 999px;
3621
+ border: 1px solid var(--border);
3622
+ color: var(--dim);
3623
+ }
3624
+ .kind-chip.kind-skill {
3625
+ color: #3b82f6;
3626
+ border-color: #3b82f6;
3627
+ }
3628
+ .kind-chip.kind-agent {
3629
+ color: #a855f7;
3630
+ border-color: #a855f7;
3631
+ }
3632
+
3633
+ /* scan runs + candidates */
3634
+ .factory-run {
3635
+ border: 1px solid var(--border);
3636
+ border-radius: 8px;
3637
+ padding: 12px;
3638
+ margin-bottom: 12px;
3639
+ background: var(--panel);
3640
+ }
3641
+ .factory-run-head {
3642
+ display: flex;
3643
+ align-items: center;
3644
+ gap: 10px;
3645
+ flex-wrap: wrap;
3646
+ }
3647
+ .factory-run-source {
3648
+ font-weight: 600;
3649
+ }
3650
+ .factory-run-guidance {
3651
+ color: var(--dim);
3652
+ font-size: 12px;
3653
+ font-style: italic;
3654
+ }
3655
+ .factory-run-phase {
3656
+ margin-left: auto;
3657
+ color: var(--working);
3658
+ font-size: 12px;
3659
+ }
3660
+ .factory-run-summary {
3661
+ color: var(--text);
3662
+ font-size: 13px;
3663
+ margin: 8px 0;
3664
+ }
3665
+ .factory-candidates {
3666
+ display: flex;
3667
+ flex-direction: column;
3668
+ gap: 10px;
3669
+ margin-top: 10px;
3670
+ }
3671
+ .factory-candidate {
3672
+ border: 1px solid var(--border);
3673
+ border-radius: 6px;
3674
+ padding: 10px;
3675
+ background: var(--panel-2);
3676
+ }
3677
+ .factory-candidate.status-active {
3678
+ border-color: var(--done);
3679
+ }
3680
+ .factory-candidate.status-error {
3681
+ border-color: var(--error);
3682
+ }
3683
+ .factory-candidate.status-rejected {
3684
+ opacity: 0.5;
3685
+ }
3686
+ .factory-candidate-head {
3687
+ display: flex;
3688
+ align-items: center;
3689
+ gap: 8px;
3690
+ }
3691
+ .factory-candidate-name {
3692
+ font-weight: 600;
3693
+ font-family: var(--mono, monospace);
3694
+ }
3695
+ .factory-enrich {
3696
+ font-size: 11px;
3697
+ color: var(--accent);
3698
+ }
3699
+ .factory-cand-status {
3700
+ margin-left: auto;
3701
+ font-size: 11px;
3702
+ text-transform: uppercase;
3703
+ color: var(--dim);
3704
+ }
3705
+ .factory-candidate-desc {
3706
+ font-size: 13px;
3707
+ margin: 6px 0;
3708
+ }
3709
+ .factory-tags {
3710
+ display: flex;
3711
+ flex-wrap: wrap;
3712
+ gap: 4px;
3713
+ margin: 6px 0;
3714
+ }
3715
+ .factory-tag {
3716
+ font-size: 11px;
3717
+ color: var(--dim);
3718
+ background: var(--bg);
3719
+ border: 1px solid var(--border);
3720
+ border-radius: 4px;
3721
+ padding: 1px 6px;
3722
+ }
3723
+ .factory-rationale {
3724
+ font-size: 12px;
3725
+ color: var(--dim);
3726
+ }
3727
+ .factory-candidate-result {
3728
+ font-size: 12px;
3729
+ margin-top: 6px;
3730
+ color: var(--dim);
3731
+ word-break: break-all;
3732
+ }
3733
+ .factory-candidate-buttons {
3734
+ display: flex;
3735
+ gap: 8px;
3736
+ margin-top: 8px;
3737
+ }
3738
+
3739
+ /* registry artifacts */
3740
+ .factory-artifact {
3741
+ display: flex;
3742
+ align-items: center;
3743
+ gap: 10px;
3744
+ padding: 8px 4px;
3745
+ border-bottom: 1px solid var(--border);
3746
+ }
3747
+ .factory-artifact-main {
3748
+ flex: 1;
3749
+ min-width: 0;
3750
+ }
3751
+ .factory-artifact-name {
3752
+ font-weight: 600;
3753
+ font-family: var(--mono, monospace);
3754
+ }
3755
+ .factory-artifact-desc {
3756
+ font-size: 12px;
3757
+ color: var(--dim);
3758
+ }
3759
+ .factory-artifact-related {
3760
+ font-size: 11px;
3761
+ color: var(--dim);
3762
+ margin-top: 2px;
3763
+ }
3764
+
3765
+ /* backlog + lessons */
3766
+ .factory-topic,
3767
+ .factory-lesson {
3768
+ display: flex;
3769
+ align-items: center;
3770
+ gap: 10px;
3771
+ padding: 6px 4px;
3772
+ border-bottom: 1px solid var(--border);
3773
+ }
3774
+ .factory-topic-main {
3775
+ flex: 1;
3776
+ min-width: 0;
3777
+ }
3778
+ .factory-topic-title {
3779
+ font-weight: 600;
3780
+ font-size: 13px;
3781
+ }
3782
+ .factory-topic-note {
3783
+ font-size: 12px;
3784
+ color: var(--dim);
3785
+ }
3786
+ .factory-lesson-text {
3787
+ flex: 1;
3788
+ font-size: 13px;
3789
+ }
3790
+ .factory-lesson-add {
3791
+ display: flex;
3792
+ gap: 8px;
3793
+ margin-bottom: 10px;
3794
+ }
3795
+ .factory-lesson-add input {
3796
+ flex: 1;
3797
+ }
3798
+ /**
3799
+ * Copyright (c) 2014 The xterm.js authors. All rights reserved.
3800
+ * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
3801
+ * https://github.com/chjj/term.js
3802
+ * @license MIT
3803
+ *
3804
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
3805
+ * of this software and associated documentation files (the "Software"), to deal
3806
+ * in the Software without restriction, including without limitation the rights
3807
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
3808
+ * copies of the Software, and to permit persons to whom the Software is
3809
+ * furnished to do so, subject to the following conditions:
3810
+ *
3811
+ * The above copyright notice and this permission notice shall be included in
3812
+ * all copies or substantial portions of the Software.
3813
+ *
3814
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3815
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3816
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3817
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3818
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
3819
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
3820
+ * THE SOFTWARE.
3821
+ *
3822
+ * Originally forked from (with the author's permission):
3823
+ * Fabrice Bellard's javascript vt100 for jslinux:
3824
+ * http://bellard.org/jslinux/
3825
+ * Copyright (c) 2011 Fabrice Bellard
3826
+ * The original design remains. The terminal itself
3827
+ * has been extended to include xterm CSI codes, among
3828
+ * other features.
3829
+ */
3830
+
3831
+ /**
3832
+ * Default styles for xterm.js
3833
+ */
3834
+
3835
+ .xterm {
3836
+ cursor: text;
3837
+ position: relative;
3838
+ user-select: none;
3839
+ -ms-user-select: none;
3840
+ -webkit-user-select: none;
3841
+ }
3842
+
3843
+ .xterm.focus,
3844
+ .xterm:focus {
3845
+ outline: none;
3846
+ }
3847
+
3848
+ .xterm .xterm-helpers {
3849
+ position: absolute;
3850
+ top: 0;
3851
+ /**
3852
+ * The z-index of the helpers must be higher than the canvases in order for
3853
+ * IMEs to appear on top.
3854
+ */
3855
+ z-index: 5;
3856
+ }
3857
+
3858
+ .xterm .xterm-helper-textarea {
3859
+ padding: 0;
3860
+ border: 0;
3861
+ margin: 0;
3862
+ /* Move textarea out of the screen to the far left, so that the cursor is not visible */
3863
+ position: absolute;
3864
+ opacity: 0;
3865
+ left: -9999em;
3866
+ top: 0;
3867
+ width: 0;
3868
+ height: 0;
3869
+ z-index: -5;
3870
+ /** Prevent wrapping so the IME appears against the textarea at the correct position */
3871
+ white-space: nowrap;
3872
+ overflow: hidden;
3873
+ resize: none;
3874
+ }
3875
+
3876
+ .xterm .composition-view {
3877
+ /* TODO: Composition position got messed up somewhere */
3878
+ background: #000;
3879
+ color: #FFF;
3880
+ display: none;
3881
+ position: absolute;
3882
+ white-space: nowrap;
3883
+ z-index: 1;
3884
+ }
3885
+
3886
+ .xterm .composition-view.active {
3887
+ display: block;
3888
+ }
3889
+
3890
+ .xterm .xterm-viewport {
3891
+ /* On OS X this is required in order for the scroll bar to appear fully opaque */
3892
+ background-color: #000;
3893
+ overflow-y: scroll;
3894
+ cursor: default;
3895
+ position: absolute;
3896
+ right: 0;
3897
+ left: 0;
3898
+ top: 0;
3899
+ bottom: 0;
3900
+ }
3901
+
3902
+ .xterm .xterm-screen {
3903
+ position: relative;
3904
+ }
3905
+
3906
+ .xterm .xterm-screen canvas {
3907
+ position: absolute;
3908
+ left: 0;
3909
+ top: 0;
3910
+ }
3911
+
3912
+ .xterm .xterm-scroll-area {
3913
+ visibility: hidden;
3914
+ }
3915
+
3916
+ .xterm-char-measure-element {
3917
+ display: inline-block;
3918
+ visibility: hidden;
3919
+ position: absolute;
3920
+ top: 0;
3921
+ left: -9999em;
3922
+ line-height: normal;
3923
+ }
3924
+
3925
+ .xterm.enable-mouse-events {
3926
+ /* When mouse events are enabled (eg. tmux), revert to the standard pointer cursor */
3927
+ cursor: default;
3928
+ }
3929
+
3930
+ .xterm.xterm-cursor-pointer,
3931
+ .xterm .xterm-cursor-pointer {
3932
+ cursor: pointer;
3933
+ }
3934
+
3935
+ .xterm.column-select.focus {
3936
+ /* Column selection mode */
3937
+ cursor: crosshair;
3938
+ }
3939
+
3940
+ .xterm .xterm-accessibility:not(.debug),
3941
+ .xterm .xterm-message {
3942
+ position: absolute;
3943
+ left: 0;
3944
+ top: 0;
3945
+ bottom: 0;
3946
+ right: 0;
3947
+ z-index: 10;
3948
+ color: transparent;
3949
+ pointer-events: none;
3950
+ }
3951
+
3952
+ .xterm .xterm-accessibility-tree:not(.debug) *::selection {
3953
+ color: transparent;
3954
+ }
3955
+
3956
+ .xterm .xterm-accessibility-tree {
3957
+ user-select: text;
3958
+ white-space: pre;
3959
+ }
3960
+
3961
+ .xterm .live-region {
3962
+ position: absolute;
3963
+ left: -9999px;
3964
+ width: 1px;
3965
+ height: 1px;
3966
+ overflow: hidden;
3967
+ }
3968
+
3969
+ .xterm-dim {
3970
+ /* Dim should not apply to background, so the opacity of the foreground color is applied
3971
+ * explicitly in the generated class and reset to 1 here */
3972
+ opacity: 1 !important;
3973
+ }
3974
+
3975
+ .xterm-underline-1 { text-decoration: underline; }
3976
+ .xterm-underline-2 { text-decoration: double underline; }
3977
+ .xterm-underline-3 { text-decoration: wavy underline; }
3978
+ .xterm-underline-4 { text-decoration: dotted underline; }
3979
+ .xterm-underline-5 { text-decoration: dashed underline; }
3980
+
3981
+ .xterm-overline {
3982
+ text-decoration: overline;
3983
+ }
3984
+
3985
+ .xterm-overline.xterm-underline-1 { text-decoration: overline underline; }
3986
+ .xterm-overline.xterm-underline-2 { text-decoration: overline double underline; }
3987
+ .xterm-overline.xterm-underline-3 { text-decoration: overline wavy underline; }
3988
+ .xterm-overline.xterm-underline-4 { text-decoration: overline dotted underline; }
3989
+ .xterm-overline.xterm-underline-5 { text-decoration: overline dashed underline; }
3990
+
3991
+ .xterm-strikethrough {
3992
+ text-decoration: line-through;
3993
+ }
3994
+
3995
+ .xterm-screen .xterm-decoration-container .xterm-decoration {
3996
+ z-index: 6;
3997
+ position: absolute;
3998
+ }
3999
+
4000
+ .xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer {
4001
+ z-index: 7;
4002
+ }
4003
+
4004
+ .xterm-decoration-overview-ruler {
4005
+ z-index: 8;
4006
+ position: absolute;
4007
+ top: 0;
4008
+ right: 0;
4009
+ pointer-events: none;
4010
+ }
4011
+
4012
+ .xterm-decoration-top {
4013
+ z-index: 2;
4014
+ position: relative;
4015
+ }