@jhizzard/termdeck 0.2.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1439 @@
1
+ /* Extracted from index.html 2026-04-15 — see git blame on index.html prior to commit UNCOMMITTED for history */
2
+ :root {
3
+ --tg-bg: #0f1117;
4
+ --tg-surface: #161821;
5
+ --tg-surface-hover: #1c1e2a;
6
+ --tg-border: #2a2d3a;
7
+ --tg-border-active: #3d4155;
8
+ --tg-text: #c8ccd8;
9
+ --tg-text-dim: #6b7089;
10
+ --tg-text-bright: #eef1ff;
11
+ --tg-accent: #7aa2f7;
12
+ --tg-accent-dim: #3d5a9e;
13
+ --tg-green: #9ece6a;
14
+ --tg-amber: #e0af68;
15
+ --tg-red: #f7768e;
16
+ --tg-purple: #bb9af7;
17
+ --tg-cyan: #7dcfff;
18
+ --tg-mono: 'SF Mono', 'Cascadia Code', 'JetBrains Mono', 'Fira Code', Consolas, monospace;
19
+ --tg-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
20
+ --tg-radius: 8px;
21
+ --tg-radius-sm: 5px;
22
+ }
23
+
24
+ * { margin: 0; padding: 0; box-sizing: border-box; }
25
+
26
+ body {
27
+ background: var(--tg-bg);
28
+ color: var(--tg-text);
29
+ font-family: var(--tg-sans);
30
+ font-size: 13px;
31
+ height: 100vh;
32
+ overflow: hidden;
33
+ display: flex;
34
+ flex-direction: column;
35
+ }
36
+
37
+ /* ===== TOP BAR ===== */
38
+ .topbar {
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: space-between;
42
+ padding: 0 16px;
43
+ height: 42px;
44
+ background: var(--tg-surface);
45
+ border-bottom: 1px solid var(--tg-border);
46
+ flex-shrink: 0;
47
+ }
48
+
49
+ .topbar-left {
50
+ display: flex;
51
+ align-items: center;
52
+ gap: 12px;
53
+ }
54
+
55
+ .topbar-logo {
56
+ display: flex;
57
+ align-items: center;
58
+ gap: 8px;
59
+ font-weight: 600;
60
+ font-size: 14px;
61
+ color: var(--tg-text-bright);
62
+ letter-spacing: -0.3px;
63
+ }
64
+
65
+ .topbar-logo svg { opacity: 0.8; }
66
+
67
+ .topbar-stats {
68
+ display: flex;
69
+ gap: 16px;
70
+ font-size: 11px;
71
+ color: var(--tg-text-dim);
72
+ }
73
+
74
+ .topbar-stat { display: flex; align-items: center; gap: 4px; }
75
+ .topbar-stat .dot {
76
+ width: 6px; height: 6px;
77
+ border-radius: 50%;
78
+ display: inline-block;
79
+ }
80
+
81
+ .topbar-center {
82
+ display: flex;
83
+ gap: 2px;
84
+ background: var(--tg-bg);
85
+ padding: 3px;
86
+ border-radius: var(--tg-radius-sm);
87
+ }
88
+
89
+ .layout-btn {
90
+ background: none;
91
+ border: none;
92
+ color: var(--tg-text-dim);
93
+ font-family: var(--tg-mono);
94
+ font-size: 11px;
95
+ padding: 4px 10px;
96
+ border-radius: 3px;
97
+ cursor: pointer;
98
+ transition: all 0.15s;
99
+ }
100
+
101
+ .layout-btn:hover { color: var(--tg-text); background: var(--tg-surface-hover); }
102
+ .layout-btn.active { color: var(--tg-accent); background: var(--tg-surface); }
103
+
104
+ .topbar-right {
105
+ display: flex;
106
+ align-items: center;
107
+ gap: 8px;
108
+ }
109
+
110
+ .topbar-right button {
111
+ background: none;
112
+ border: 1px solid var(--tg-border);
113
+ color: var(--tg-text-dim);
114
+ font-size: 11px;
115
+ padding: 4px 12px;
116
+ border-radius: var(--tg-radius-sm);
117
+ cursor: pointer;
118
+ font-family: var(--tg-sans);
119
+ transition: all 0.15s;
120
+ }
121
+
122
+ .topbar-right button:hover {
123
+ color: var(--tg-text);
124
+ border-color: var(--tg-border-active);
125
+ }
126
+
127
+ /* Persistent quick-launch group in the top toolbar (always visible) */
128
+ .topbar-ql {
129
+ display: flex;
130
+ gap: 4px;
131
+ padding-right: 8px;
132
+ margin-right: 4px;
133
+ border-right: 1px solid var(--tg-border);
134
+ }
135
+ .topbar-ql-btn {
136
+ color: var(--tg-accent) !important;
137
+ }
138
+ .topbar-ql-btn:hover {
139
+ background: var(--tg-accent-dim);
140
+ color: var(--tg-bg) !important;
141
+ }
142
+
143
+ #btn-how {
144
+ border-color: var(--tg-accent-dim) !important;
145
+ color: var(--tg-accent) !important;
146
+ }
147
+ #btn-how:hover {
148
+ background: var(--tg-accent-dim);
149
+ color: var(--tg-bg) !important;
150
+ border-color: var(--tg-accent) !important;
151
+ }
152
+
153
+ /* ===== ONBOARDING TOUR (how this works) ===== */
154
+ .tour-backdrop {
155
+ position: fixed;
156
+ inset: 0;
157
+ background: transparent;
158
+ z-index: 2000;
159
+ pointer-events: auto;
160
+ display: none;
161
+ }
162
+ .tour-backdrop.active { display: block; }
163
+
164
+ .tour-spotlight {
165
+ position: fixed;
166
+ border-radius: 6px;
167
+ box-shadow:
168
+ 0 0 0 4px var(--tg-accent),
169
+ 0 0 0 9999px rgba(0, 0, 0, 0.78);
170
+ transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease;
171
+ pointer-events: none;
172
+ z-index: 2001;
173
+ display: none; /* default hidden — only visible during an active tour */
174
+ }
175
+ .tour-spotlight.centered {
176
+ box-shadow: 0 0 0 9999px rgba(0, 0, 0, 0.85);
177
+ top: 50%;
178
+ left: 50%;
179
+ width: 0;
180
+ height: 0;
181
+ transform: translate(-50%, -50%);
182
+ }
183
+
184
+ .tour-tooltip {
185
+ position: fixed;
186
+ background: var(--tg-surface);
187
+ border: 1px solid var(--tg-accent-dim);
188
+ border-radius: 10px;
189
+ padding: 18px 20px 16px;
190
+ max-width: 360px;
191
+ min-width: 280px;
192
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.55);
193
+ z-index: 2003;
194
+ font-family: var(--tg-sans);
195
+ color: var(--tg-text);
196
+ transition: top 0.3s ease, left 0.3s ease;
197
+ }
198
+ .tour-tooltip.centered {
199
+ top: 50% !important;
200
+ left: 50% !important;
201
+ transform: translate(-50%, -50%);
202
+ max-width: 440px;
203
+ }
204
+ .tour-tooltip h3 {
205
+ margin: 0 0 10px;
206
+ font-size: 15px;
207
+ font-weight: 700;
208
+ color: var(--tg-accent);
209
+ letter-spacing: 0.2px;
210
+ }
211
+ .tour-tooltip p {
212
+ margin: 0 0 14px;
213
+ font-size: 13px;
214
+ line-height: 1.55;
215
+ color: var(--tg-text-dim);
216
+ }
217
+ .tour-tooltip p strong { color: var(--tg-text); font-weight: 600; }
218
+ .tour-tooltip kbd {
219
+ display: inline-block;
220
+ padding: 1px 6px;
221
+ background: var(--tg-bg);
222
+ border: 1px solid var(--tg-border);
223
+ border-radius: 3px;
224
+ font-family: var(--tg-mono);
225
+ font-size: 11px;
226
+ color: var(--tg-accent);
227
+ }
228
+ .tour-tooltip .tour-controls {
229
+ display: flex;
230
+ justify-content: space-between;
231
+ align-items: center;
232
+ gap: 10px;
233
+ }
234
+ .tour-tooltip .tour-counter {
235
+ font-size: 11px;
236
+ color: var(--tg-text-dim);
237
+ font-family: var(--tg-mono);
238
+ }
239
+ .tour-tooltip .tour-btns { display: flex; gap: 6px; }
240
+ .tour-tooltip button {
241
+ background: var(--tg-accent);
242
+ color: var(--tg-bg);
243
+ border: none;
244
+ padding: 6px 14px;
245
+ border-radius: 4px;
246
+ font-size: 12px;
247
+ font-weight: 600;
248
+ cursor: pointer;
249
+ font-family: var(--tg-sans);
250
+ transition: filter 0.15s;
251
+ }
252
+ .tour-tooltip button:hover { filter: brightness(1.1); }
253
+ .tour-tooltip button.tour-skip,
254
+ .tour-tooltip button.tour-prev {
255
+ background: transparent;
256
+ color: var(--tg-text-dim);
257
+ border: 1px solid var(--tg-border);
258
+ }
259
+ .tour-tooltip button.tour-skip:hover,
260
+ .tour-tooltip button.tour-prev:hover {
261
+ color: var(--tg-text);
262
+ border-color: var(--tg-border-active);
263
+ filter: none;
264
+ }
265
+ .tour-tooltip button[disabled] {
266
+ opacity: 0.35;
267
+ cursor: not-allowed;
268
+ }
269
+
270
+ /* ===== MAIN GRID ===== */
271
+ .grid-container {
272
+ flex: 1;
273
+ padding: 6px;
274
+ overflow: hidden;
275
+ display: grid;
276
+ gap: 6px;
277
+ }
278
+
279
+ /* Layout modes */
280
+ .grid-container.layout-1x1 { grid-template-columns: 1fr; grid-template-rows: 1fr; }
281
+ .grid-container.layout-2x1 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr; }
282
+ .grid-container.layout-1x2 { grid-template-columns: 1fr; grid-template-rows: 1fr 1fr; }
283
+ .grid-container.layout-2x2 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }
284
+ .grid-container.layout-3x2 { grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; }
285
+ .grid-container.layout-4x2 { grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; }
286
+ .grid-container.layout-2x4 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr 1fr 1fr; }
287
+
288
+ /* Focus mode: single terminal fills the grid */
289
+ .grid-container.layout-focus { grid-template-columns: 1fr; grid-template-rows: 1fr; }
290
+ .grid-container.layout-focus .term-panel:not(.focused) { display: none; }
291
+
292
+ /* Half mode: one big + small stack */
293
+ .grid-container.layout-half {
294
+ grid-template-columns: 1fr 1fr;
295
+ grid-template-rows: 1fr 1fr;
296
+ }
297
+ .grid-container.layout-half .term-panel.primary {
298
+ grid-row: 1 / -1;
299
+ }
300
+
301
+ /* ===== TERMINAL PANEL ===== */
302
+ .term-panel {
303
+ display: flex;
304
+ flex-direction: column;
305
+ background: var(--tg-surface);
306
+ border: 1px solid var(--tg-border);
307
+ border-radius: var(--tg-radius);
308
+ overflow: hidden;
309
+ transition: border-color 0.2s;
310
+ min-height: 0;
311
+ }
312
+
313
+ .term-panel:hover { border-color: var(--tg-border-active); }
314
+ .term-panel.active-input { border-color: var(--tg-accent-dim); }
315
+ .term-panel.exited { opacity: 0.55; }
316
+ .term-panel.exited .panel-terminal { pointer-events: none; }
317
+
318
+ /* --- Panel Header (metadata bar) --- */
319
+ .panel-header {
320
+ display: flex;
321
+ align-items: center;
322
+ justify-content: space-between;
323
+ padding: 6px 10px;
324
+ background: var(--tg-surface);
325
+ border-bottom: 1px solid var(--tg-border);
326
+ flex-shrink: 0;
327
+ }
328
+
329
+ .panel-header-left {
330
+ display: flex;
331
+ align-items: center;
332
+ gap: 8px;
333
+ min-width: 0;
334
+ flex: 1;
335
+ }
336
+
337
+ .status-dot {
338
+ width: 8px; height: 8px;
339
+ border-radius: 50%;
340
+ flex-shrink: 0;
341
+ transition: background 0.3s;
342
+ }
343
+
344
+ .status-dot.pulsing {
345
+ animation: pulse 2s ease-in-out infinite;
346
+ }
347
+
348
+ @keyframes pulse {
349
+ 0%, 100% { opacity: 1; }
350
+ 50% { opacity: 0.4; }
351
+ }
352
+
353
+ .panel-type {
354
+ font-size: 12px;
355
+ font-weight: 600;
356
+ color: var(--tg-text-bright);
357
+ white-space: nowrap;
358
+ }
359
+
360
+ /* Per-panel index suffix, shown only when ≥2 panels share (type, project). */
361
+ .panel-index {
362
+ font-size: 11px;
363
+ font-weight: 600;
364
+ color: var(--tg-accent);
365
+ white-space: nowrap;
366
+ }
367
+ .panel-index:empty { display: none; }
368
+
369
+ .panel-project {
370
+ font-size: 10px;
371
+ padding: 1px 7px;
372
+ border-radius: 3px;
373
+ white-space: nowrap;
374
+ font-weight: 500;
375
+ }
376
+
377
+ .panel-status {
378
+ font-size: 11px;
379
+ color: var(--tg-text-dim);
380
+ white-space: nowrap;
381
+ overflow: hidden;
382
+ text-overflow: ellipsis;
383
+ }
384
+
385
+ .panel-header-right {
386
+ display: flex;
387
+ gap: 2px;
388
+ flex-shrink: 0;
389
+ }
390
+
391
+ .panel-btn {
392
+ background: none;
393
+ border: none;
394
+ color: var(--tg-text-dim);
395
+ font-size: 11px;
396
+ padding: 2px 6px;
397
+ border-radius: 3px;
398
+ cursor: pointer;
399
+ font-family: var(--tg-mono);
400
+ transition: all 0.1s;
401
+ }
402
+
403
+ .panel-btn:hover { color: var(--tg-text); background: var(--tg-bg); }
404
+ .panel-btn.danger:hover { color: var(--tg-red); }
405
+
406
+ /* --- Metadata Strip (below header) --- */
407
+ .panel-meta {
408
+ display: flex;
409
+ align-items: center;
410
+ gap: 12px;
411
+ padding: 3px 10px;
412
+ background: rgba(0,0,0,0.15);
413
+ border-bottom: 1px solid var(--tg-border);
414
+ font-size: 10px;
415
+ color: var(--tg-text-dim);
416
+ flex-shrink: 0;
417
+ overflow: hidden;
418
+ }
419
+
420
+ .meta-item {
421
+ display: flex;
422
+ align-items: center;
423
+ gap: 4px;
424
+ white-space: nowrap;
425
+ }
426
+
427
+ .meta-label { opacity: 0.6; }
428
+
429
+ /* --- Terminal Container --- */
430
+ .panel-terminal {
431
+ flex: 1;
432
+ min-height: 0;
433
+ position: relative;
434
+ overflow: hidden;
435
+ }
436
+
437
+ .panel-terminal .xterm { height: 100%; }
438
+ .panel-terminal .xterm-viewport { overflow-y: auto !important; }
439
+
440
+ /* --- Panel Control Strip (below terminal) --- */
441
+ .panel-controls {
442
+ display: flex;
443
+ align-items: center;
444
+ justify-content: space-between;
445
+ padding: 4px 8px;
446
+ background: var(--tg-surface);
447
+ border-top: 1px solid var(--tg-border);
448
+ flex-shrink: 0;
449
+ }
450
+
451
+ .control-group {
452
+ display: flex;
453
+ align-items: center;
454
+ gap: 4px;
455
+ }
456
+
457
+ .ctrl-btn {
458
+ background: none;
459
+ border: 1px solid var(--tg-border);
460
+ color: var(--tg-text-dim);
461
+ font-size: 10px;
462
+ padding: 2px 8px;
463
+ border-radius: 3px;
464
+ cursor: pointer;
465
+ font-family: var(--tg-sans);
466
+ transition: all 0.1s;
467
+ }
468
+
469
+ .ctrl-btn:hover { color: var(--tg-text); border-color: var(--tg-border-active); }
470
+ .ctrl-btn.active { color: var(--tg-accent); border-color: var(--tg-accent-dim); }
471
+
472
+ .theme-select {
473
+ background: var(--tg-bg);
474
+ border: 1px solid var(--tg-border);
475
+ color: var(--tg-text-dim);
476
+ font-size: 10px;
477
+ padding: 2px 4px;
478
+ border-radius: 3px;
479
+ cursor: pointer;
480
+ font-family: var(--tg-sans);
481
+ }
482
+
483
+ .ctrl-input {
484
+ background: var(--tg-bg);
485
+ border: 1px solid var(--tg-border);
486
+ color: var(--tg-text);
487
+ font-size: 11px;
488
+ padding: 3px 8px;
489
+ border-radius: 3px;
490
+ font-family: var(--tg-sans);
491
+ width: 200px;
492
+ }
493
+
494
+ .ctrl-input::placeholder { color: var(--tg-text-dim); }
495
+ .ctrl-input:focus { outline: none; border-color: var(--tg-accent-dim); }
496
+
497
+ /* ===== PROMPT BAR (LAUNCHER) ===== */
498
+ .prompt-bar {
499
+ display: flex;
500
+ align-items: center;
501
+ gap: 8px;
502
+ padding: 8px 12px;
503
+ background: var(--tg-surface);
504
+ border-top: 1px solid var(--tg-border);
505
+ flex-shrink: 0;
506
+ }
507
+
508
+ .prompt-icon {
509
+ color: var(--tg-accent);
510
+ font-size: 14px;
511
+ font-family: var(--tg-mono);
512
+ font-weight: 600;
513
+ }
514
+
515
+ .prompt-input {
516
+ flex: 1;
517
+ background: var(--tg-bg);
518
+ border: 1px solid var(--tg-border);
519
+ color: var(--tg-text);
520
+ font-size: 13px;
521
+ padding: 7px 12px;
522
+ border-radius: var(--tg-radius-sm);
523
+ font-family: var(--tg-mono);
524
+ transition: border-color 0.2s;
525
+ }
526
+
527
+ .prompt-input::placeholder { color: var(--tg-text-dim); font-family: var(--tg-sans); }
528
+ .prompt-input:focus { outline: none; border-color: var(--tg-accent-dim); }
529
+
530
+ .prompt-project {
531
+ background: var(--tg-bg);
532
+ border: 1px solid var(--tg-border);
533
+ color: var(--tg-text-dim);
534
+ font-size: 12px;
535
+ padding: 6px 10px;
536
+ border-radius: var(--tg-radius-sm);
537
+ font-family: var(--tg-sans);
538
+ cursor: pointer;
539
+ }
540
+
541
+ .prompt-launch {
542
+ background: var(--tg-accent-dim);
543
+ border: 1px solid var(--tg-accent);
544
+ color: var(--tg-text-bright);
545
+ font-size: 12px;
546
+ padding: 6px 16px;
547
+ border-radius: var(--tg-radius-sm);
548
+ cursor: pointer;
549
+ font-family: var(--tg-sans);
550
+ font-weight: 500;
551
+ transition: all 0.15s;
552
+ }
553
+
554
+ .prompt-launch:hover { background: var(--tg-accent); }
555
+
556
+ .prompt-add-project {
557
+ background: var(--tg-bg);
558
+ border: 1px solid var(--tg-border);
559
+ color: var(--tg-accent);
560
+ font-size: 16px;
561
+ line-height: 1;
562
+ padding: 0;
563
+ width: 26px;
564
+ height: 26px;
565
+ border-radius: var(--tg-radius-sm);
566
+ cursor: pointer;
567
+ font-family: var(--tg-sans);
568
+ transition: all 0.15s;
569
+ display: flex;
570
+ align-items: center;
571
+ justify-content: center;
572
+ }
573
+ .prompt-add-project:hover {
574
+ border-color: var(--tg-accent);
575
+ background: var(--tg-accent-dim);
576
+ color: var(--tg-text-bright);
577
+ }
578
+
579
+ /* ===== ADD PROJECT MODAL ===== */
580
+ .add-project-modal {
581
+ display: none;
582
+ position: fixed;
583
+ inset: 0;
584
+ z-index: 3000;
585
+ align-items: center;
586
+ justify-content: center;
587
+ }
588
+ .add-project-modal.open { display: flex; }
589
+ .add-project-backdrop {
590
+ position: absolute;
591
+ inset: 0;
592
+ background: rgba(0, 0, 0, 0.72);
593
+ }
594
+ .add-project-card {
595
+ position: relative;
596
+ background: var(--tg-surface);
597
+ border: 1px solid var(--tg-accent-dim);
598
+ border-radius: 10px;
599
+ padding: 22px 24px 18px;
600
+ width: 420px;
601
+ max-width: calc(100vw - 40px);
602
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.55);
603
+ font-family: var(--tg-sans);
604
+ color: var(--tg-text);
605
+ }
606
+ .add-project-card h3 {
607
+ margin: 0 0 4px;
608
+ font-size: 16px;
609
+ color: var(--tg-accent);
610
+ }
611
+ .add-project-card .apm-help {
612
+ margin: 0 0 14px;
613
+ font-size: 12px;
614
+ color: var(--tg-text-dim);
615
+ }
616
+ .add-project-card .apm-help code {
617
+ background: var(--tg-bg);
618
+ padding: 1px 5px;
619
+ border-radius: 3px;
620
+ font-family: var(--tg-mono);
621
+ font-size: 11px;
622
+ }
623
+ .add-project-card label {
624
+ display: block;
625
+ margin-bottom: 10px;
626
+ }
627
+ .add-project-card label > span {
628
+ display: block;
629
+ font-size: 11px;
630
+ color: var(--tg-text-dim);
631
+ margin-bottom: 3px;
632
+ text-transform: uppercase;
633
+ letter-spacing: 0.5px;
634
+ }
635
+ .add-project-card label > span em {
636
+ font-style: normal;
637
+ text-transform: none;
638
+ color: var(--tg-text-dim);
639
+ opacity: 0.7;
640
+ font-size: 10px;
641
+ margin-left: 4px;
642
+ }
643
+ .add-project-card input,
644
+ .add-project-card select {
645
+ width: 100%;
646
+ background: var(--tg-bg);
647
+ border: 1px solid var(--tg-border);
648
+ color: var(--tg-text);
649
+ font-size: 13px;
650
+ padding: 7px 10px;
651
+ border-radius: var(--tg-radius-sm);
652
+ font-family: var(--tg-mono);
653
+ box-sizing: border-box;
654
+ }
655
+ .add-project-card input:focus,
656
+ .add-project-card select:focus {
657
+ outline: none;
658
+ border-color: var(--tg-accent-dim);
659
+ }
660
+ .add-project-card .apm-status {
661
+ font-size: 12px;
662
+ min-height: 16px;
663
+ margin: 4px 0 8px;
664
+ color: var(--tg-text-dim);
665
+ }
666
+ .add-project-card .apm-status.error { color: var(--tg-red); }
667
+ .add-project-card .apm-status.ok { color: var(--tg-green); }
668
+ .add-project-card .apm-actions {
669
+ display: flex;
670
+ justify-content: flex-end;
671
+ gap: 8px;
672
+ margin-top: 6px;
673
+ }
674
+ .add-project-card button {
675
+ font-size: 12px;
676
+ font-weight: 600;
677
+ padding: 6px 16px;
678
+ border-radius: 4px;
679
+ cursor: pointer;
680
+ font-family: var(--tg-sans);
681
+ border: 1px solid var(--tg-border);
682
+ }
683
+ .add-project-card .apm-cancel {
684
+ background: transparent;
685
+ color: var(--tg-text-dim);
686
+ }
687
+ .add-project-card .apm-cancel:hover {
688
+ color: var(--tg-text);
689
+ border-color: var(--tg-border-active);
690
+ }
691
+ .add-project-card .apm-save {
692
+ background: var(--tg-accent);
693
+ color: var(--tg-bg);
694
+ border-color: var(--tg-accent);
695
+ }
696
+ .add-project-card .apm-save:hover { filter: brightness(1.1); }
697
+ .add-project-card .apm-save:disabled {
698
+ opacity: 0.5;
699
+ cursor: not-allowed;
700
+ filter: none;
701
+ }
702
+
703
+ /* ===== Rumen insights badge + briefing modal ===== */
704
+ .rumen-badge {
705
+ display: none;
706
+ align-items: center;
707
+ gap: 5px;
708
+ font-family: var(--tg-mono);
709
+ font-size: 11px;
710
+ padding: 2px 8px;
711
+ border-radius: 10px;
712
+ border: 1px solid var(--tg-border);
713
+ background: var(--tg-surface);
714
+ color: var(--tg-text-dim);
715
+ cursor: pointer;
716
+ transition: all 0.15s;
717
+ }
718
+ .rumen-badge.visible { display: inline-flex; }
719
+ .rumen-badge:hover {
720
+ color: var(--tg-text);
721
+ border-color: var(--tg-border-active);
722
+ }
723
+ .rumen-badge.has-unseen {
724
+ color: var(--tg-amber);
725
+ border-color: var(--tg-amber);
726
+ background: rgba(255, 176, 64, 0.08);
727
+ }
728
+ .rumen-badge.has-unseen:hover { filter: brightness(1.15); }
729
+ .rumen-badge .rb-icon { font-size: 12px; line-height: 1; }
730
+
731
+ .rumen-modal {
732
+ display: none;
733
+ position: fixed;
734
+ inset: 0;
735
+ z-index: 3000;
736
+ align-items: center;
737
+ justify-content: center;
738
+ }
739
+ .rumen-modal.open { display: flex; }
740
+ .rumen-backdrop {
741
+ position: absolute;
742
+ inset: 0;
743
+ background: rgba(0, 0, 0, 0.72);
744
+ }
745
+ .rumen-card {
746
+ position: relative;
747
+ background: var(--tg-surface);
748
+ border: 1px solid var(--tg-accent-dim);
749
+ border-radius: 10px;
750
+ width: 720px;
751
+ max-width: calc(100vw - 40px);
752
+ max-height: calc(100vh - 80px);
753
+ display: flex;
754
+ flex-direction: column;
755
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.55);
756
+ font-family: var(--tg-sans);
757
+ color: var(--tg-text);
758
+ }
759
+ .rumen-card header {
760
+ padding: 18px 22px 10px;
761
+ border-bottom: 1px solid var(--tg-border);
762
+ }
763
+ .rumen-card header h3 {
764
+ margin: 0 0 4px;
765
+ font-size: 15px;
766
+ color: var(--tg-accent);
767
+ display: flex;
768
+ align-items: center;
769
+ gap: 8px;
770
+ }
771
+ .rumen-card header .rm-summary {
772
+ margin: 0;
773
+ font-size: 11px;
774
+ color: var(--tg-text-dim);
775
+ font-family: var(--tg-mono);
776
+ }
777
+ .rumen-filters {
778
+ display: flex;
779
+ gap: 10px;
780
+ align-items: center;
781
+ padding: 10px 22px;
782
+ border-bottom: 1px solid var(--tg-border);
783
+ font-size: 11px;
784
+ color: var(--tg-text-dim);
785
+ font-family: var(--tg-mono);
786
+ flex-wrap: wrap;
787
+ }
788
+ .rumen-filters label { display: flex; align-items: center; gap: 5px; }
789
+ .rumen-filters select,
790
+ .rumen-filters input[type="checkbox"] {
791
+ background: var(--tg-bg);
792
+ color: var(--tg-text);
793
+ border: 1px solid var(--tg-border);
794
+ border-radius: 3px;
795
+ padding: 3px 6px;
796
+ font-family: var(--tg-mono);
797
+ font-size: 11px;
798
+ }
799
+ .rumen-list {
800
+ flex: 1;
801
+ overflow-y: auto;
802
+ padding: 8px 22px 14px;
803
+ min-height: 180px;
804
+ }
805
+ .rumen-empty {
806
+ padding: 40px 0;
807
+ text-align: center;
808
+ color: var(--tg-text-dim);
809
+ font-size: 12px;
810
+ font-family: var(--tg-mono);
811
+ }
812
+ .rumen-item {
813
+ padding: 12px 0;
814
+ border-bottom: 1px solid var(--tg-border);
815
+ transition: opacity 0.35s;
816
+ }
817
+ .rumen-item:last-child { border-bottom: none; }
818
+ .rumen-item.fading { opacity: 0; }
819
+ .rumen-item .ri-text {
820
+ font-size: 13px;
821
+ line-height: 1.45;
822
+ color: var(--tg-text);
823
+ margin-bottom: 6px;
824
+ }
825
+ .rumen-item .ri-meta {
826
+ display: flex;
827
+ flex-wrap: wrap;
828
+ align-items: center;
829
+ gap: 8px;
830
+ font-size: 10px;
831
+ font-family: var(--tg-mono);
832
+ color: var(--tg-text-dim);
833
+ }
834
+ .rumen-item .ri-conf {
835
+ display: inline-flex;
836
+ align-items: center;
837
+ gap: 4px;
838
+ padding: 1px 6px;
839
+ border-radius: 8px;
840
+ background: var(--tg-bg);
841
+ border: 1px solid var(--tg-border);
842
+ }
843
+ .rumen-item .ri-chip {
844
+ padding: 1px 6px;
845
+ border-radius: 8px;
846
+ background: var(--tg-bg);
847
+ border: 1px solid var(--tg-accent-dim);
848
+ color: var(--tg-accent);
849
+ }
850
+ .rumen-item .ri-time { color: var(--tg-text-dim); }
851
+ .rumen-item .ri-mark {
852
+ margin-left: auto;
853
+ background: none;
854
+ border: 1px solid var(--tg-border);
855
+ color: var(--tg-text-dim);
856
+ font-family: var(--tg-mono);
857
+ font-size: 10px;
858
+ padding: 2px 8px;
859
+ border-radius: 3px;
860
+ cursor: pointer;
861
+ }
862
+ .rumen-item .ri-mark:hover {
863
+ color: var(--tg-text);
864
+ border-color: var(--tg-border-active);
865
+ }
866
+ .rumen-item .ri-mark:disabled {
867
+ opacity: 0.4;
868
+ cursor: default;
869
+ }
870
+ .rumen-item .ri-mark.seen {
871
+ color: var(--tg-green);
872
+ border-color: var(--tg-green);
873
+ }
874
+ .rumen-card footer {
875
+ padding: 10px 22px 14px;
876
+ border-top: 1px solid var(--tg-border);
877
+ display: flex;
878
+ justify-content: flex-end;
879
+ }
880
+ .rumen-card footer .rm-close {
881
+ background: none;
882
+ border: 1px solid var(--tg-border);
883
+ color: var(--tg-text-dim);
884
+ font-family: var(--tg-mono);
885
+ font-size: 11px;
886
+ padding: 5px 14px;
887
+ border-radius: 3px;
888
+ cursor: pointer;
889
+ }
890
+ .rumen-card footer .rm-close:hover {
891
+ color: var(--tg-text);
892
+ border-color: var(--tg-border-active);
893
+ }
894
+
895
+ /* ===== EMPTY STATE ===== */
896
+ .empty-state {
897
+ display: flex;
898
+ flex-direction: column;
899
+ align-items: center;
900
+ justify-content: center;
901
+ height: 100%;
902
+ color: var(--tg-text-dim);
903
+ gap: 12px;
904
+ }
905
+
906
+ .empty-state svg { opacity: 0.3; }
907
+ .empty-state h2 { font-size: 20px; font-weight: 600; color: var(--tg-text); margin: 0; }
908
+ .empty-state p { font-size: 14px; margin: 0; }
909
+ .empty-state .hint { font-size: 12px; opacity: 0.6; }
910
+
911
+ .quick-launch-group {
912
+ display: flex;
913
+ gap: 10px;
914
+ margin-top: 8px;
915
+ flex-wrap: wrap;
916
+ justify-content: center;
917
+ }
918
+ .quick-launch-btn {
919
+ background: var(--tg-panel);
920
+ border: 1px solid var(--tg-border);
921
+ color: var(--tg-text);
922
+ padding: 10px 18px;
923
+ border-radius: 6px;
924
+ cursor: pointer;
925
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
926
+ font-size: 12px;
927
+ transition: border-color 0.15s, background 0.15s;
928
+ text-align: left;
929
+ line-height: 1.5;
930
+ }
931
+ .quick-launch-btn:hover {
932
+ border-color: var(--tg-accent);
933
+ background: rgba(122, 162, 247, 0.08);
934
+ }
935
+ .quick-launch-btn .ql-cmd {
936
+ display: block;
937
+ color: var(--tg-accent);
938
+ font-weight: 600;
939
+ }
940
+ .quick-launch-btn .ql-desc {
941
+ display: block;
942
+ font-size: 11px;
943
+ opacity: 0.5;
944
+ font-weight: 400;
945
+ }
946
+ .empty-state .notes {
947
+ margin-top: 16px;
948
+ display: flex;
949
+ flex-direction: column;
950
+ gap: 6px;
951
+ align-items: center;
952
+ }
953
+ .empty-state .notes span {
954
+ font-size: 11px;
955
+ opacity: 0.55;
956
+ }
957
+ .empty-state kbd {
958
+ display: inline-block;
959
+ padding: 1px 6px;
960
+ margin: 0 2px;
961
+ font-family: var(--tg-mono);
962
+ font-size: 10px;
963
+ color: var(--tg-text);
964
+ background: var(--tg-surface);
965
+ border: 1px solid var(--tg-border);
966
+ border-radius: 3px;
967
+ }
968
+
969
+ /* ===== PROJECT TAG COLORS ===== */
970
+ .project-termdeck { background: #1a1a2e; color: #7aa2f7; }
971
+ .project-scheduling { background: #1a2a1a; color: #9ece6a; }
972
+ .project-aicouncil { background: #2a1520; color: #f7768e; }
973
+ .project-commerce { background: #2a1f0f; color: #e0af68; }
974
+ .project-imessageai { background: #1f1a2e; color: #bb9af7; }
975
+ .project-default { background: #1e1f28; color: #6b7089; }
976
+
977
+ /* ===== PANEL DRAWER (tabbed info drawer at bottom of each panel) ===== */
978
+ .panel-drawer {
979
+ display: flex;
980
+ flex-direction: column;
981
+ background: var(--tg-surface);
982
+ border-top: 1px solid var(--tg-border);
983
+ flex-shrink: 0;
984
+ }
985
+
986
+ .drawer-tabs {
987
+ display: flex;
988
+ align-items: center;
989
+ gap: 2px;
990
+ padding: 4px 6px;
991
+ flex-shrink: 0;
992
+ overflow-x: auto;
993
+ }
994
+
995
+ .drawer-tab {
996
+ background: none;
997
+ border: 1px solid transparent;
998
+ color: var(--tg-text-dim);
999
+ font-size: 10px;
1000
+ padding: 3px 10px;
1001
+ border-radius: 3px;
1002
+ cursor: pointer;
1003
+ font-family: var(--tg-sans);
1004
+ transition: all 0.1s;
1005
+ white-space: nowrap;
1006
+ }
1007
+ .drawer-tab:hover { color: var(--tg-text); background: var(--tg-bg); }
1008
+ .drawer-tab.active {
1009
+ color: var(--tg-accent);
1010
+ border-color: var(--tg-accent-dim);
1011
+ background: var(--tg-bg);
1012
+ }
1013
+ .panel-drawer.open .drawer-tab.active { color: var(--tg-text-bright); }
1014
+
1015
+ .tab-badge {
1016
+ display: inline-block;
1017
+ margin-left: 5px;
1018
+ padding: 0 5px;
1019
+ background: var(--tg-border);
1020
+ color: var(--tg-text-dim);
1021
+ border-radius: 7px;
1022
+ font-size: 9px;
1023
+ min-width: 14px;
1024
+ text-align: center;
1025
+ line-height: 13px;
1026
+ }
1027
+ .drawer-tab.active .tab-badge { background: var(--tg-accent-dim); color: var(--tg-text-bright); }
1028
+
1029
+ .drawer-body {
1030
+ max-height: 0;
1031
+ overflow: hidden;
1032
+ transition: max-height 0.18s ease;
1033
+ border-top: 1px solid transparent;
1034
+ }
1035
+ .panel-drawer.open .drawer-body {
1036
+ max-height: 180px;
1037
+ border-top-color: var(--tg-border);
1038
+ }
1039
+
1040
+ .drawer-panel {
1041
+ display: none;
1042
+ height: 180px;
1043
+ overflow-y: auto;
1044
+ padding: 8px 10px;
1045
+ }
1046
+ .drawer-panel.active { display: block; }
1047
+
1048
+ .drawer-overview {
1049
+ display: flex;
1050
+ flex-direction: column;
1051
+ gap: 8px;
1052
+ }
1053
+ .drawer-overview .overview-controls {
1054
+ display: flex;
1055
+ align-items: center;
1056
+ gap: 6px;
1057
+ flex-wrap: wrap;
1058
+ }
1059
+ .drawer-overview .overview-meta {
1060
+ display: flex;
1061
+ flex-wrap: wrap;
1062
+ gap: 10px 14px;
1063
+ font-size: 10px;
1064
+ color: var(--tg-text-dim);
1065
+ }
1066
+ .drawer-overview .overview-meta .ov-label { opacity: 0.6; margin-right: 4px; }
1067
+ .drawer-overview .overview-meta .ov-value { color: var(--tg-text); font-family: var(--tg-mono); }
1068
+ .drawer-overview .ctrl-input { flex: 1; min-width: 180px; }
1069
+
1070
+ /* Reply form (T1.3) */
1071
+ .reply-form {
1072
+ display: none;
1073
+ flex-wrap: wrap;
1074
+ gap: 6px;
1075
+ align-items: center;
1076
+ padding: 6px 8px;
1077
+ background: var(--tg-bg);
1078
+ border: 1px solid var(--tg-border);
1079
+ border-radius: 4px;
1080
+ }
1081
+ .reply-form.open { display: flex; }
1082
+ .reply-form select,
1083
+ .reply-form input {
1084
+ background: var(--tg-surface);
1085
+ border: 1px solid var(--tg-border);
1086
+ color: var(--tg-text);
1087
+ font-size: 11px;
1088
+ padding: 3px 6px;
1089
+ border-radius: 3px;
1090
+ font-family: var(--tg-sans);
1091
+ }
1092
+ .reply-form input { flex: 1; min-width: 160px; font-family: var(--tg-mono); }
1093
+ .reply-form input:focus,
1094
+ .reply-form select:focus { outline: none; border-color: var(--tg-accent-dim); }
1095
+ .reply-form .reply-send {
1096
+ background: var(--tg-accent-dim);
1097
+ border: 1px solid var(--tg-accent);
1098
+ color: var(--tg-text-bright);
1099
+ font-size: 11px;
1100
+ padding: 3px 10px;
1101
+ border-radius: 3px;
1102
+ cursor: pointer;
1103
+ }
1104
+ .reply-form .reply-send:disabled {
1105
+ opacity: 0.5;
1106
+ cursor: not-allowed;
1107
+ }
1108
+ .reply-form .reply-status {
1109
+ font-size: 10px;
1110
+ color: var(--tg-text-dim);
1111
+ width: 100%;
1112
+ }
1113
+ .reply-form .reply-status.error { color: var(--tg-red); }
1114
+ .reply-form .reply-status.ok { color: var(--tg-green); }
1115
+
1116
+ .ctrl-btn.reply-toggle[disabled] { opacity: 0.5; cursor: not-allowed; }
1117
+
1118
+ .drawer-list {
1119
+ display: flex;
1120
+ flex-direction: column;
1121
+ gap: 4px;
1122
+ }
1123
+ .drawer-list .empty-msg {
1124
+ color: var(--tg-text-dim);
1125
+ font-size: 11px;
1126
+ font-style: italic;
1127
+ padding: 4px 2px;
1128
+ }
1129
+
1130
+ .drawer-row {
1131
+ padding: 5px 8px;
1132
+ border-radius: 3px;
1133
+ background: var(--tg-bg);
1134
+ border: 1px solid var(--tg-border);
1135
+ cursor: pointer;
1136
+ transition: border-color 0.1s, background 0.1s;
1137
+ }
1138
+ .drawer-row:hover { border-color: var(--tg-border-active); }
1139
+ .drawer-row .row-meta {
1140
+ display: flex;
1141
+ gap: 8px;
1142
+ font-size: 9px;
1143
+ color: var(--tg-text-dim);
1144
+ margin-bottom: 2px;
1145
+ }
1146
+ .drawer-row .row-cmd {
1147
+ font-family: var(--tg-mono);
1148
+ font-size: 11px;
1149
+ color: var(--tg-text);
1150
+ white-space: pre-wrap;
1151
+ word-break: break-word;
1152
+ }
1153
+ .drawer-row .row-content {
1154
+ font-family: var(--tg-sans);
1155
+ font-size: 11px;
1156
+ color: var(--tg-text);
1157
+ white-space: pre-wrap;
1158
+ word-break: break-word;
1159
+ overflow: hidden;
1160
+ display: -webkit-box;
1161
+ -webkit-line-clamp: 2;
1162
+ -webkit-box-orient: vertical;
1163
+ }
1164
+ .drawer-row.expanded .row-content {
1165
+ -webkit-line-clamp: unset;
1166
+ display: block;
1167
+ }
1168
+ .drawer-row.copied { border-color: var(--tg-green); }
1169
+
1170
+ .status-log-row {
1171
+ display: flex;
1172
+ gap: 10px;
1173
+ align-items: baseline;
1174
+ padding: 3px 6px;
1175
+ border-radius: 3px;
1176
+ font-size: 11px;
1177
+ }
1178
+ .status-log-row:hover { background: var(--tg-bg); }
1179
+ .status-log-row .ts {
1180
+ color: var(--tg-text-dim);
1181
+ font-size: 10px;
1182
+ font-family: var(--tg-mono);
1183
+ min-width: 64px;
1184
+ }
1185
+ .status-log-row .transition { font-family: var(--tg-mono); font-size: 10px; }
1186
+ .status-log-row .detail { color: var(--tg-text-dim); font-size: 10px; }
1187
+ .status-log-row .chip {
1188
+ display: inline-block;
1189
+ padding: 0 5px;
1190
+ border-radius: 3px;
1191
+ font-size: 9px;
1192
+ font-family: var(--tg-mono);
1193
+ background: var(--tg-surface);
1194
+ }
1195
+
1196
+ .term-panel.exited .drawer-overview .ctrl-input,
1197
+ .term-panel.exited .drawer-overview .theme-select,
1198
+ .term-panel.exited .drawer-overview .ctrl-btn { pointer-events: none; opacity: 0.55; }
1199
+
1200
+ /* ===== TERMINAL SWITCHER (T1.2) =====
1201
+ F1.2: lives inside the topbar as a chrome child, not a floating overlay —
1202
+ guarantees zero PTY overlap at any grid density. */
1203
+ .term-switcher {
1204
+ display: none;
1205
+ flex-direction: row;
1206
+ align-items: center;
1207
+ gap: 6px;
1208
+ padding: 2px 6px;
1209
+ background: var(--tg-bg);
1210
+ border: 1px solid var(--tg-border);
1211
+ border-radius: var(--tg-radius-sm);
1212
+ max-width: 60vw;
1213
+ overflow-x: auto;
1214
+ z-index: 1000;
1215
+ }
1216
+ .term-switcher.visible { display: flex; }
1217
+ .term-switcher-label {
1218
+ font-size: 9px;
1219
+ color: var(--tg-text-dim);
1220
+ text-transform: uppercase;
1221
+ letter-spacing: 0.5px;
1222
+ user-select: none;
1223
+ white-space: nowrap;
1224
+ }
1225
+ .switcher-grid {
1226
+ display: grid;
1227
+ grid-auto-flow: column;
1228
+ grid-auto-columns: 26px;
1229
+ grid-template-rows: 26px;
1230
+ gap: 4px;
1231
+ }
1232
+ .switcher-tile {
1233
+ position: relative;
1234
+ width: 26px;
1235
+ height: 26px;
1236
+ border-radius: 4px;
1237
+ background: var(--tg-bg);
1238
+ border: 1px solid var(--tg-border);
1239
+ color: var(--tg-text);
1240
+ font-family: var(--tg-mono);
1241
+ font-size: 12px;
1242
+ font-weight: 600;
1243
+ display: flex;
1244
+ align-items: center;
1245
+ justify-content: center;
1246
+ cursor: pointer;
1247
+ transition: border-color 0.12s, background 0.12s, transform 0.08s;
1248
+ }
1249
+ .switcher-tile:hover { border-color: var(--tg-accent-dim); background: var(--tg-surface-hover); }
1250
+ .switcher-tile.active { border-color: var(--tg-accent); box-shadow: 0 0 0 1px var(--tg-accent-dim) inset; }
1251
+ .switcher-tile.exited { opacity: 0.45; }
1252
+ .switcher-tile .switcher-dot {
1253
+ position: absolute;
1254
+ top: 2px;
1255
+ right: 2px;
1256
+ width: 5px;
1257
+ height: 5px;
1258
+ border-radius: 50%;
1259
+ }
1260
+ .switcher-tile .switcher-bar {
1261
+ position: absolute;
1262
+ left: 2px;
1263
+ right: 2px;
1264
+ bottom: 2px;
1265
+ height: 2px;
1266
+ border-radius: 1px;
1267
+ }
1268
+
1269
+ /* ===== Proactive memory toast (T1.4) ===== */
1270
+ .term-panel { position: relative; }
1271
+ .proactive-toast {
1272
+ position: absolute;
1273
+ right: 10px;
1274
+ bottom: 44px;
1275
+ max-width: 320px;
1276
+ padding: 8px 10px 8px 12px;
1277
+ background: rgba(15, 17, 23, 0.95);
1278
+ border: 1px solid var(--tg-accent-dim);
1279
+ border-left: 3px solid var(--tg-purple);
1280
+ border-radius: var(--tg-radius-sm);
1281
+ box-shadow: 0 6px 18px rgba(0,0,0,0.35);
1282
+ color: var(--tg-text);
1283
+ font-size: 11px;
1284
+ cursor: pointer;
1285
+ z-index: 25;
1286
+ animation: toast-in 0.18s ease;
1287
+ }
1288
+ .proactive-toast .t-title {
1289
+ font-size: 10px;
1290
+ text-transform: uppercase;
1291
+ letter-spacing: 0.4px;
1292
+ color: var(--tg-purple);
1293
+ margin-bottom: 3px;
1294
+ }
1295
+ .proactive-toast .t-body {
1296
+ font-size: 11px;
1297
+ line-height: 1.35;
1298
+ color: var(--tg-text);
1299
+ display: -webkit-box;
1300
+ -webkit-line-clamp: 3;
1301
+ -webkit-box-orient: vertical;
1302
+ overflow: hidden;
1303
+ }
1304
+ .proactive-toast .t-meta {
1305
+ margin-top: 4px;
1306
+ font-size: 9px;
1307
+ color: var(--tg-text-dim);
1308
+ }
1309
+ .proactive-toast .t-dismiss {
1310
+ position: absolute;
1311
+ top: 2px;
1312
+ right: 4px;
1313
+ background: none;
1314
+ border: none;
1315
+ color: var(--tg-text-dim);
1316
+ cursor: pointer;
1317
+ font-size: 12px;
1318
+ padding: 0 4px;
1319
+ }
1320
+ .proactive-toast .t-dismiss:hover { color: var(--tg-text); }
1321
+ @keyframes toast-in {
1322
+ from { opacity: 0; transform: translateY(6px); }
1323
+ to { opacity: 1; transform: translateY(0); }
1324
+ }
1325
+
1326
+ /* ===== Control dashboard (T1.6) ===== */
1327
+ .control-feed {
1328
+ display: none;
1329
+ position: absolute;
1330
+ inset: 0;
1331
+ background: var(--tg-bg);
1332
+ border-radius: var(--tg-radius);
1333
+ padding: 12px 16px;
1334
+ overflow-y: auto;
1335
+ flex-direction: column;
1336
+ gap: 6px;
1337
+ }
1338
+ .grid-container.layout-control .term-panel { display: none; }
1339
+ .grid-container.layout-control .control-feed { display: flex; }
1340
+ .grid-container.layout-control {
1341
+ grid-template-columns: 1fr;
1342
+ grid-template-rows: 1fr;
1343
+ position: relative;
1344
+ }
1345
+
1346
+ .control-feed-header {
1347
+ display: flex;
1348
+ align-items: center;
1349
+ justify-content: space-between;
1350
+ padding-bottom: 8px;
1351
+ border-bottom: 1px solid var(--tg-border);
1352
+ margin-bottom: 4px;
1353
+ }
1354
+ .control-feed-header h3 {
1355
+ margin: 0;
1356
+ font-size: 12px;
1357
+ color: var(--tg-text-bright);
1358
+ text-transform: uppercase;
1359
+ letter-spacing: 0.5px;
1360
+ font-weight: 600;
1361
+ }
1362
+ .control-feed-header .feed-count {
1363
+ font-size: 10px;
1364
+ color: var(--tg-text-dim);
1365
+ }
1366
+
1367
+ .feed-row {
1368
+ display: grid;
1369
+ grid-template-columns: 68px 110px 62px 1fr;
1370
+ gap: 10px;
1371
+ align-items: start;
1372
+ padding: 6px 8px;
1373
+ border-radius: 4px;
1374
+ cursor: pointer;
1375
+ border: 1px solid transparent;
1376
+ font-size: 11px;
1377
+ line-height: 1.4;
1378
+ }
1379
+ .feed-row:hover { background: var(--tg-surface); border-color: var(--tg-border); }
1380
+ .feed-row .feed-time { color: var(--tg-text-dim); font-family: var(--tg-mono); font-size: 10px; }
1381
+ .feed-row .feed-panel-ref {
1382
+ display: flex;
1383
+ align-items: center;
1384
+ gap: 6px;
1385
+ color: var(--tg-text);
1386
+ font-size: 10px;
1387
+ }
1388
+ .feed-row .feed-panel-ref .dot {
1389
+ width: 6px; height: 6px;
1390
+ border-radius: 50%;
1391
+ }
1392
+ .feed-row .feed-kind {
1393
+ font-size: 9px;
1394
+ text-transform: uppercase;
1395
+ letter-spacing: 0.4px;
1396
+ font-family: var(--tg-mono);
1397
+ padding: 1px 6px;
1398
+ border-radius: 3px;
1399
+ background: var(--tg-surface);
1400
+ color: var(--tg-text-dim);
1401
+ text-align: center;
1402
+ align-self: start;
1403
+ }
1404
+ .feed-row .feed-kind.status { color: var(--tg-accent); }
1405
+ .feed-row .feed-kind.command { color: var(--tg-green); }
1406
+ .feed-row .feed-kind.error { color: var(--tg-red); }
1407
+ .feed-row .feed-kind.memory { color: var(--tg-purple); }
1408
+ .feed-row .feed-body {
1409
+ font-family: var(--tg-mono);
1410
+ color: var(--tg-text);
1411
+ word-break: break-word;
1412
+ white-space: pre-wrap;
1413
+ display: -webkit-box;
1414
+ -webkit-line-clamp: 2;
1415
+ -webkit-box-orient: vertical;
1416
+ overflow: hidden;
1417
+ }
1418
+ .feed-empty {
1419
+ color: var(--tg-text-dim);
1420
+ font-size: 12px;
1421
+ font-style: italic;
1422
+ padding: 20px 4px;
1423
+ text-align: center;
1424
+ }
1425
+
1426
+ .layout-btn.control-btn { color: var(--tg-purple); }
1427
+ .layout-btn.control-btn.active { color: var(--tg-purple); background: var(--tg-surface); }
1428
+
1429
+ /* Focus flash — applied briefly when a panel gains focus */
1430
+ .term-panel.focus-flash {
1431
+ box-shadow: 0 0 0 2px var(--tg-accent);
1432
+ border-color: var(--tg-accent);
1433
+ }
1434
+
1435
+ /* ===== SCROLLBAR ===== */
1436
+ ::-webkit-scrollbar { width: 6px; }
1437
+ ::-webkit-scrollbar-track { background: transparent; }
1438
+ ::-webkit-scrollbar-thumb { background: var(--tg-border); border-radius: 3px; }
1439
+ ::-webkit-scrollbar-thumb:hover { background: var(--tg-border-active); }