codedash-app 1.0.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,1385 @@
1
+ /* ================================================================
2
+ Claude Sessions Dashboard — Stylesheet
3
+ ================================================================ */
4
+
5
+ /* ── Reset ─────────────────────────────────────────────────────── */
6
+
7
+ * { margin: 0; padding: 0; box-sizing: border-box; }
8
+
9
+ /* ── CSS Custom Properties (Dark Theme — Default) ──────────────── */
10
+
11
+ :root {
12
+ --bg-primary: #1a1d23;
13
+ --bg-secondary: #22262e;
14
+ --bg-card: #2a2e37;
15
+ --bg-card-hover: #333842;
16
+ --bg-input: #2a2e37;
17
+ --text-primary: #e4e7eb;
18
+ --text-secondary: #8b919a;
19
+ --text-muted: #5f6571;
20
+ --accent-green: #4ade80;
21
+ --accent-blue: #60a5fa;
22
+ --accent-orange: #fb923c;
23
+ --accent-purple: #c084fc;
24
+ --accent-red: #f87171;
25
+ --accent-cyan: #22d3ee;
26
+ --border: #363b44;
27
+ --sidebar-bg: #1e2128;
28
+ }
29
+
30
+ /* ── Light Theme ───────────────────────────────────────────────── */
31
+
32
+ [data-theme="light"] {
33
+ --bg-primary: #f5f5f7;
34
+ --bg-secondary: #ffffff;
35
+ --bg-card: #ffffff;
36
+ --bg-card-hover: #f0f0f2;
37
+ --bg-input: #ffffff;
38
+ --text-primary: #1d1d1f;
39
+ --text-secondary: #6e6e73;
40
+ --text-muted: #a1a1a6;
41
+ --accent-green: #34c759;
42
+ --accent-blue: #007aff;
43
+ --accent-orange: #ff9500;
44
+ --accent-purple: #af52de;
45
+ --accent-red: #ff3b30;
46
+ --accent-cyan: #00b4d8;
47
+ --border: #d2d2d7;
48
+ --sidebar-bg: #f5f5f7;
49
+ }
50
+
51
+ /* ── Monokai Theme ─────────────────────────────────────────────── */
52
+
53
+ [data-theme="monokai"] {
54
+ --bg-primary: #272822;
55
+ --bg-secondary: #1e1f1c;
56
+ --bg-card: #3e3d32;
57
+ --bg-card-hover: #4a493d;
58
+ --bg-input: #3e3d32;
59
+ --text-primary: #f8f8f2;
60
+ --text-secondary: #a6a690;
61
+ --text-muted: #75715e;
62
+ --accent-green: #a6e22e;
63
+ --accent-blue: #66d9ef;
64
+ --accent-orange: #fd971f;
65
+ --accent-purple: #ae81ff;
66
+ --accent-red: #f92672;
67
+ --accent-cyan: #66d9ef;
68
+ --border: #49483e;
69
+ --sidebar-bg: #1e1f1c;
70
+ }
71
+
72
+ /* ── Body & Layout ─────────────────────────────────────────────── */
73
+
74
+ body {
75
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
76
+ background: var(--bg-primary);
77
+ color: var(--text-primary);
78
+ height: 100vh;
79
+ display: flex;
80
+ overflow: hidden;
81
+ }
82
+
83
+ /* ── Sidebar ───────────────────────────────────────────────────── */
84
+
85
+ .sidebar {
86
+ width: 200px;
87
+ background: var(--sidebar-bg);
88
+ border-right: 1px solid var(--border);
89
+ padding: 16px 0;
90
+ display: flex;
91
+ flex-direction: column;
92
+ flex-shrink: 0;
93
+ }
94
+
95
+ .sidebar-brand {
96
+ padding: 8px 20px 20px;
97
+ font-size: 15px;
98
+ font-weight: 700;
99
+ color: var(--accent-blue);
100
+ display: flex;
101
+ align-items: center;
102
+ gap: 8px;
103
+ }
104
+
105
+ .sidebar-item {
106
+ display: flex;
107
+ align-items: center;
108
+ gap: 10px;
109
+ padding: 10px 20px;
110
+ color: var(--text-secondary);
111
+ cursor: pointer;
112
+ transition: all 0.15s;
113
+ font-size: 14px;
114
+ user-select: none;
115
+ }
116
+ .sidebar-item:hover { background: rgba(255,255,255,0.05); color: var(--text-primary); }
117
+ .sidebar-item.active { color: var(--text-primary); background: rgba(255,255,255,0.08); }
118
+ .sidebar-item svg { width: 18px; height: 18px; opacity: 0.7; }
119
+
120
+ .sidebar-divider { height: 1px; background: var(--border); margin: 12px 20px; }
121
+
122
+ .sidebar-section {
123
+ padding: 8px 20px 6px;
124
+ font-size: 10px;
125
+ text-transform: uppercase;
126
+ letter-spacing: 1.2px;
127
+ color: var(--text-muted);
128
+ }
129
+
130
+ .sidebar-settings {
131
+ margin-top: auto;
132
+ padding: 12px 16px;
133
+ border-top: 1px solid var(--border);
134
+ }
135
+ .sidebar-settings label {
136
+ font-size: 11px;
137
+ color: var(--text-muted);
138
+ display: block;
139
+ margin-bottom: 4px;
140
+ }
141
+ .sidebar-settings select {
142
+ width: 100%;
143
+ background: var(--bg-card);
144
+ border: 1px solid var(--border);
145
+ border-radius: 6px;
146
+ padding: 6px 8px;
147
+ color: var(--text-primary);
148
+ font-size: 12px;
149
+ outline: none;
150
+ cursor: pointer;
151
+ }
152
+
153
+ /* Light theme sidebar hover adjustments */
154
+ [data-theme="light"] .sidebar-item:hover { background: rgba(0,0,0,0.04); }
155
+ [data-theme="light"] .sidebar-item.active { background: rgba(0,0,0,0.06); }
156
+
157
+ /* ── Main Area ─────────────────────────────────────────────────── */
158
+
159
+ .main {
160
+ flex: 1;
161
+ display: flex;
162
+ flex-direction: column;
163
+ overflow: hidden;
164
+ }
165
+
166
+ /* ── Toolbar ───────────────────────────────────────────────────── */
167
+
168
+ .toolbar {
169
+ display: flex;
170
+ align-items: center;
171
+ gap: 12px;
172
+ padding: 12px 20px;
173
+ border-bottom: 1px solid var(--border);
174
+ background: var(--bg-secondary);
175
+ flex-wrap: wrap;
176
+ }
177
+
178
+ .search-box {
179
+ flex: 1;
180
+ min-width: 200px;
181
+ background: var(--bg-input);
182
+ border: 1px solid var(--border);
183
+ border-radius: 8px;
184
+ padding: 10px 14px;
185
+ color: var(--text-primary);
186
+ font-size: 14px;
187
+ outline: none;
188
+ transition: border-color 0.2s;
189
+ }
190
+ .search-box:focus { border-color: var(--accent-blue); }
191
+ .search-box::placeholder { color: var(--text-muted); }
192
+
193
+ .toolbar-btn {
194
+ background: var(--bg-card);
195
+ border: 1px solid var(--border);
196
+ border-radius: 8px;
197
+ padding: 8px 14px;
198
+ color: var(--text-secondary);
199
+ cursor: pointer;
200
+ font-size: 13px;
201
+ white-space: nowrap;
202
+ transition: all 0.15s;
203
+ user-select: none;
204
+ }
205
+ .toolbar-btn:hover { background: var(--bg-card-hover); color: var(--text-primary); }
206
+ .toolbar-btn.active { background: var(--accent-blue); color: #fff; border-color: var(--accent-blue); }
207
+
208
+ .tool-filter {
209
+ display: flex;
210
+ gap: 4px;
211
+ }
212
+ .tool-chip {
213
+ padding: 6px 12px;
214
+ border-radius: 6px;
215
+ font-size: 12px;
216
+ cursor: pointer;
217
+ border: 1px solid var(--border);
218
+ background: var(--bg-card);
219
+ color: var(--text-secondary);
220
+ transition: all 0.15s;
221
+ user-select: none;
222
+ }
223
+ .tool-chip:hover { color: var(--text-primary); }
224
+ .tool-chip.active-claude { background: rgba(96, 165, 250, 0.2); border-color: var(--accent-blue); color: var(--accent-blue); }
225
+ .tool-chip.active-codex { background: rgba(34, 211, 238, 0.2); border-color: var(--accent-cyan); color: var(--accent-cyan); }
226
+
227
+ .stats { color: var(--text-muted); font-size: 13px; white-space: nowrap; }
228
+
229
+ /* ── Content Area ──────────────────────────────────────────────── */
230
+
231
+ .content {
232
+ flex: 1;
233
+ overflow-y: auto;
234
+ padding: 20px;
235
+ }
236
+ .content::-webkit-scrollbar { width: 8px; }
237
+ .content::-webkit-scrollbar-track { background: transparent; }
238
+ .content::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
239
+
240
+ .group-header {
241
+ font-size: 13px;
242
+ font-weight: 600;
243
+ color: var(--text-secondary);
244
+ margin: 20px 0 10px;
245
+ text-transform: uppercase;
246
+ letter-spacing: 0.5px;
247
+ }
248
+ .group-header:first-child { margin-top: 0; }
249
+
250
+ /* ── Cards Grid ────────────────────────────────────────────────── */
251
+
252
+ .cards {
253
+ display: grid;
254
+ grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
255
+ gap: 10px;
256
+ margin-bottom: 10px;
257
+ }
258
+
259
+ .card {
260
+ background: var(--bg-card);
261
+ border: 1px solid var(--border);
262
+ border-radius: 10px;
263
+ padding: 14px 16px;
264
+ cursor: pointer;
265
+ transition: all 0.15s;
266
+ display: flex;
267
+ align-items: flex-start;
268
+ gap: 12px;
269
+ position: relative;
270
+ }
271
+ .card:hover {
272
+ background: var(--bg-card-hover);
273
+ border-color: rgba(255,255,255,0.1);
274
+ transform: translateY(-1px);
275
+ }
276
+
277
+ .card.selected {
278
+ border-color: var(--accent-blue);
279
+ background: var(--bg-card-hover);
280
+ box-shadow: 0 0 0 1px var(--accent-blue);
281
+ }
282
+
283
+ .card.focused {
284
+ outline: 2px solid var(--accent-blue);
285
+ outline-offset: 2px;
286
+ }
287
+
288
+ [data-theme="light"] .card:hover {
289
+ border-color: rgba(0,0,0,0.12);
290
+ }
291
+ [data-theme="light"] .card.selected {
292
+ box-shadow: 0 0 0 1px var(--accent-blue), 0 2px 8px rgba(0,122,255,0.1);
293
+ }
294
+
295
+ .card-icon {
296
+ width: 40px;
297
+ height: 40px;
298
+ border-radius: 10px;
299
+ display: flex;
300
+ align-items: center;
301
+ justify-content: center;
302
+ font-size: 18px;
303
+ flex-shrink: 0;
304
+ }
305
+
306
+ .card-body { flex: 1; min-width: 0; }
307
+
308
+ .card-title {
309
+ font-size: 14px;
310
+ font-weight: 600;
311
+ margin-bottom: 4px;
312
+ white-space: nowrap;
313
+ overflow: hidden;
314
+ text-overflow: ellipsis;
315
+ }
316
+
317
+ .card-meta {
318
+ font-size: 12px;
319
+ color: var(--text-muted);
320
+ display: flex;
321
+ gap: 8px;
322
+ flex-wrap: wrap;
323
+ align-items: center;
324
+ }
325
+
326
+ .card-preview {
327
+ font-size: 12px;
328
+ color: var(--text-secondary);
329
+ margin-top: 6px;
330
+ white-space: nowrap;
331
+ overflow: hidden;
332
+ text-overflow: ellipsis;
333
+ }
334
+
335
+ /* ── Card Checkbox (bulk select) ───────────────────────────────── */
336
+
337
+ .card-checkbox {
338
+ position: absolute;
339
+ top: 10px;
340
+ left: -6px;
341
+ width: 18px;
342
+ height: 18px;
343
+ border-radius: 4px;
344
+ border: 2px solid var(--border);
345
+ background: var(--bg-secondary);
346
+ cursor: pointer;
347
+ opacity: 0;
348
+ transition: opacity 0.15s, background 0.15s;
349
+ display: flex;
350
+ align-items: center;
351
+ justify-content: center;
352
+ z-index: 2;
353
+ }
354
+ .card:hover .card-checkbox,
355
+ .card.selected .card-checkbox,
356
+ .select-mode .card-checkbox {
357
+ opacity: 1;
358
+ }
359
+ .card-checkbox.checked {
360
+ background: var(--accent-blue);
361
+ border-color: var(--accent-blue);
362
+ }
363
+
364
+ /* ── Card Actions ──────────────────────────────────────────────── */
365
+
366
+ .card-actions {
367
+ position: absolute;
368
+ top: 8px;
369
+ right: 8px;
370
+ display: none;
371
+ gap: 4px;
372
+ }
373
+ .card:hover .card-actions { display: flex; }
374
+
375
+ .card-action-btn {
376
+ width: 28px;
377
+ height: 28px;
378
+ border-radius: 6px;
379
+ border: 1px solid var(--border);
380
+ background: var(--bg-secondary);
381
+ color: var(--text-secondary);
382
+ cursor: pointer;
383
+ display: flex;
384
+ align-items: center;
385
+ justify-content: center;
386
+ font-size: 14px;
387
+ transition: all 0.15s;
388
+ }
389
+ .card-action-btn:hover { background: var(--accent-blue); color: #fff; border-color: var(--accent-blue); }
390
+ .card-action-btn.danger:hover { background: var(--accent-orange); border-color: var(--accent-orange); }
391
+ .card-action-btn.delete:hover { background: var(--accent-red); border-color: var(--accent-red); }
392
+
393
+ /* ── Badges ────────────────────────────────────────────────────── */
394
+
395
+ .badge {
396
+ display: inline-flex;
397
+ align-items: center;
398
+ gap: 4px;
399
+ padding: 2px 8px;
400
+ border-radius: 4px;
401
+ font-size: 11px;
402
+ background: rgba(255,255,255,0.06);
403
+ }
404
+ .badge-claude { background: rgba(96, 165, 250, 0.15); color: var(--accent-blue); }
405
+ .badge-codex { background: rgba(34, 211, 238, 0.15); color: var(--accent-cyan); }
406
+
407
+ [data-theme="light"] .badge { background: rgba(0,0,0,0.05); }
408
+
409
+ /* ── Star Button ───────────────────────────────────────────────── */
410
+
411
+ .star-btn {
412
+ background: none;
413
+ border: none;
414
+ cursor: pointer;
415
+ font-size: 16px;
416
+ color: var(--text-muted);
417
+ transition: color 0.15s, transform 0.15s;
418
+ padding: 2px 4px;
419
+ line-height: 1;
420
+ }
421
+ .star-btn:hover {
422
+ color: #fbbf24;
423
+ transform: scale(1.15);
424
+ }
425
+ .star-btn.active {
426
+ color: #fbbf24;
427
+ }
428
+
429
+ /* ── Tag Pills ─────────────────────────────────────────────────── */
430
+
431
+ .tag-pill {
432
+ display: inline-flex;
433
+ align-items: center;
434
+ padding: 2px 8px;
435
+ border-radius: 10px;
436
+ font-size: 10px;
437
+ font-weight: 600;
438
+ text-transform: uppercase;
439
+ letter-spacing: 0.3px;
440
+ line-height: 1.6;
441
+ white-space: nowrap;
442
+ }
443
+ .tag-pill.tag-bug { background: rgba(248,113,113,0.18); color: var(--accent-red); }
444
+ .tag-pill.tag-feature { background: rgba(96,165,250,0.18); color: var(--accent-blue); }
445
+ .tag-pill.tag-research { background: rgba(192,132,252,0.18); color: var(--accent-purple); }
446
+ .tag-pill.tag-infra { background: rgba(251,146,60,0.18); color: var(--accent-orange); }
447
+ .tag-pill.tag-deploy { background: rgba(74,222,128,0.18); color: var(--accent-green); }
448
+ .tag-pill.tag-review { background: rgba(34,211,238,0.18); color: var(--accent-cyan); }
449
+
450
+ [data-theme="light"] .tag-pill.tag-bug { background: rgba(255,59,48,0.12); }
451
+ [data-theme="light"] .tag-pill.tag-feature { background: rgba(0,122,255,0.12); }
452
+ [data-theme="light"] .tag-pill.tag-research { background: rgba(175,82,222,0.12); }
453
+ [data-theme="light"] .tag-pill.tag-infra { background: rgba(255,149,0,0.12); }
454
+ [data-theme="light"] .tag-pill.tag-deploy { background: rgba(52,199,89,0.12); }
455
+ [data-theme="light"] .tag-pill.tag-review { background: rgba(0,180,216,0.12); }
456
+
457
+ /* ── Tag Add Button & Dropdown ─────────────────────────────────── */
458
+
459
+ .tag-add-btn {
460
+ display: inline-flex;
461
+ align-items: center;
462
+ justify-content: center;
463
+ width: 20px;
464
+ height: 20px;
465
+ border-radius: 10px;
466
+ border: 1px dashed var(--text-muted);
467
+ background: none;
468
+ color: var(--text-muted);
469
+ font-size: 12px;
470
+ cursor: pointer;
471
+ transition: all 0.15s;
472
+ line-height: 1;
473
+ }
474
+ .tag-add-btn:hover {
475
+ border-color: var(--accent-blue);
476
+ color: var(--accent-blue);
477
+ background: rgba(96,165,250,0.1);
478
+ }
479
+
480
+ .tag-dropdown {
481
+ position: absolute;
482
+ top: 100%;
483
+ left: 0;
484
+ margin-top: 4px;
485
+ background: var(--bg-secondary);
486
+ border: 1px solid var(--border);
487
+ border-radius: 8px;
488
+ padding: 6px;
489
+ min-width: 140px;
490
+ box-shadow: 0 8px 24px rgba(0,0,0,0.3);
491
+ z-index: 50;
492
+ display: none;
493
+ }
494
+ .tag-dropdown.open { display: block; }
495
+
496
+ .tag-dropdown-item {
497
+ display: flex;
498
+ align-items: center;
499
+ gap: 8px;
500
+ padding: 6px 10px;
501
+ border-radius: 6px;
502
+ font-size: 12px;
503
+ cursor: pointer;
504
+ color: var(--text-secondary);
505
+ transition: background 0.1s;
506
+ }
507
+ .tag-dropdown-item:hover {
508
+ background: var(--bg-card-hover);
509
+ color: var(--text-primary);
510
+ }
511
+
512
+ [data-theme="light"] .tag-dropdown {
513
+ box-shadow: 0 8px 24px rgba(0,0,0,0.12);
514
+ }
515
+
516
+ /* ── Cost Badge ────────────────────────────────────────────────── */
517
+
518
+ .cost-badge {
519
+ display: inline-flex;
520
+ align-items: center;
521
+ gap: 3px;
522
+ padding: 2px 7px;
523
+ border-radius: 4px;
524
+ font-size: 11px;
525
+ font-weight: 600;
526
+ background: rgba(74,222,128,0.15);
527
+ color: var(--accent-green);
528
+ white-space: nowrap;
529
+ }
530
+ [data-theme="light"] .cost-badge {
531
+ background: rgba(52,199,89,0.12);
532
+ }
533
+
534
+ /* ── Date Range Inputs ─────────────────────────────────────────── */
535
+
536
+ .date-input {
537
+ background: var(--bg-input);
538
+ border: 1px solid var(--border);
539
+ border-radius: 6px;
540
+ padding: 6px 10px;
541
+ color: var(--text-primary);
542
+ font-size: 13px;
543
+ outline: none;
544
+ transition: border-color 0.2s;
545
+ }
546
+ .date-input:focus { border-color: var(--accent-blue); }
547
+ .date-input::-webkit-calendar-picker-indicator {
548
+ filter: invert(0.7);
549
+ cursor: pointer;
550
+ }
551
+ [data-theme="light"] .date-input::-webkit-calendar-picker-indicator {
552
+ filter: none;
553
+ }
554
+
555
+ /* ── Terminal Select ───────────────────────────────────────────── */
556
+
557
+ .terminal-select {
558
+ width: 100%;
559
+ background: var(--bg-input);
560
+ border: 1px solid var(--border);
561
+ border-radius: 6px;
562
+ padding: 8px 10px;
563
+ color: var(--text-primary);
564
+ font-size: 13px;
565
+ outline: none;
566
+ margin-bottom: 10px;
567
+ cursor: pointer;
568
+ }
569
+ .terminal-select:focus { border-color: var(--accent-blue); }
570
+ .terminal-select option { background: var(--bg-card); color: var(--text-primary); }
571
+
572
+ /* ── Confirm Dialog ────────────────────────────────────────────── */
573
+
574
+ .confirm-overlay {
575
+ display: none;
576
+ position: fixed;
577
+ inset: 0;
578
+ background: rgba(0,0,0,0.6);
579
+ z-index: 300;
580
+ align-items: center;
581
+ justify-content: center;
582
+ }
583
+ .confirm-overlay.open { display: flex; }
584
+
585
+ .confirm-box {
586
+ background: var(--bg-secondary);
587
+ border: 1px solid var(--border);
588
+ border-radius: 12px;
589
+ padding: 24px;
590
+ max-width: 400px;
591
+ width: 90%;
592
+ }
593
+ .confirm-box h3 { font-size: 16px; margin-bottom: 8px; }
594
+ .confirm-box p { font-size: 13px; color: var(--text-secondary); margin-bottom: 16px; line-height: 1.5; }
595
+ .confirm-box .confirm-id { font-family: monospace; font-size: 11px; color: var(--text-muted); margin-bottom: 16px; word-break: break-all; }
596
+
597
+ .confirm-btns { display: flex; gap: 8px; justify-content: flex-end; }
598
+ .confirm-btns button {
599
+ padding: 8px 18px;
600
+ border-radius: 8px;
601
+ border: 1px solid var(--border);
602
+ font-size: 13px;
603
+ cursor: pointer;
604
+ font-weight: 500;
605
+ }
606
+ .btn-cancel { background: var(--bg-card); color: var(--text-primary); }
607
+ .btn-cancel:hover { background: var(--bg-card-hover); }
608
+ .btn-delete { background: var(--accent-red); color: #fff; border-color: var(--accent-red); }
609
+ .btn-delete:hover { opacity: 0.85; }
610
+
611
+ /* ── Detail Panel ──────────────────────────────────────────────── */
612
+
613
+ .detail-panel {
614
+ position: fixed;
615
+ top: 0;
616
+ right: -550px;
617
+ width: 550px;
618
+ height: 100vh;
619
+ background: var(--bg-secondary);
620
+ border-left: 1px solid var(--border);
621
+ transition: right 0.25s ease;
622
+ display: flex;
623
+ flex-direction: column;
624
+ z-index: 100;
625
+ }
626
+ .detail-panel.open { right: 0; }
627
+
628
+ .detail-header {
629
+ padding: 16px 20px;
630
+ border-bottom: 1px solid var(--border);
631
+ display: flex;
632
+ align-items: center;
633
+ justify-content: space-between;
634
+ }
635
+
636
+ .detail-close {
637
+ background: none;
638
+ border: none;
639
+ color: var(--text-secondary);
640
+ cursor: pointer;
641
+ font-size: 20px;
642
+ padding: 4px 8px;
643
+ border-radius: 4px;
644
+ }
645
+ .detail-close:hover { background: rgba(255,255,255,0.1); }
646
+
647
+ .detail-body {
648
+ flex: 1;
649
+ overflow-y: auto;
650
+ padding: 16px 20px;
651
+ }
652
+
653
+ .detail-info {
654
+ display: grid;
655
+ grid-template-columns: auto 1fr;
656
+ gap: 8px 16px;
657
+ font-size: 13px;
658
+ margin-bottom: 16px;
659
+ }
660
+ .detail-info dt { color: var(--text-muted); }
661
+ .detail-info dd { color: var(--text-primary); word-break: break-all; }
662
+
663
+ /* ── Launch Section ────────────────────────────────────────────── */
664
+
665
+ .launch-section {
666
+ background: var(--bg-card);
667
+ border: 1px solid var(--border);
668
+ border-radius: 10px;
669
+ padding: 14px;
670
+ margin-bottom: 16px;
671
+ }
672
+
673
+ .launch-title {
674
+ font-size: 12px;
675
+ font-weight: 600;
676
+ color: var(--text-secondary);
677
+ text-transform: uppercase;
678
+ letter-spacing: 0.5px;
679
+ margin-bottom: 10px;
680
+ }
681
+
682
+ .launch-options {
683
+ display: flex;
684
+ flex-direction: column;
685
+ gap: 8px;
686
+ margin-bottom: 12px;
687
+ }
688
+
689
+ .launch-option {
690
+ display: flex;
691
+ align-items: center;
692
+ gap: 8px;
693
+ font-size: 13px;
694
+ cursor: pointer;
695
+ user-select: none;
696
+ }
697
+
698
+ .launch-option input[type="checkbox"] {
699
+ accent-color: var(--accent-blue);
700
+ width: 16px;
701
+ height: 16px;
702
+ }
703
+
704
+ .launch-btns {
705
+ display: flex;
706
+ gap: 8px;
707
+ flex-wrap: wrap;
708
+ }
709
+
710
+ .launch-btn {
711
+ display: inline-flex;
712
+ align-items: center;
713
+ gap: 6px;
714
+ border: none;
715
+ border-radius: 8px;
716
+ padding: 9px 16px;
717
+ font-size: 13px;
718
+ cursor: pointer;
719
+ font-weight: 500;
720
+ transition: opacity 0.15s;
721
+ }
722
+ .launch-btn:hover { opacity: 0.85; }
723
+
724
+ .btn-primary { background: var(--accent-blue); color: #fff; }
725
+ .btn-secondary { background: var(--bg-card-hover); color: var(--text-primary); border: 1px solid var(--border); }
726
+ .btn-codex { background: var(--accent-cyan); color: #000; }
727
+
728
+ /* ── Commits List (Detail Panel) ───────────────────────────────── */
729
+
730
+ .commits-list {
731
+ list-style: none;
732
+ margin: 0;
733
+ padding: 0;
734
+ }
735
+
736
+ .commits-list li {
737
+ display: flex;
738
+ align-items: flex-start;
739
+ gap: 10px;
740
+ padding: 8px 0;
741
+ border-bottom: 1px solid var(--border);
742
+ font-size: 13px;
743
+ line-height: 1.4;
744
+ }
745
+ .commits-list li:last-child { border-bottom: none; }
746
+
747
+ .commits-list .commit-hash {
748
+ font-family: 'SF Mono', 'Fira Code', monospace;
749
+ font-size: 11px;
750
+ color: var(--accent-purple);
751
+ background: rgba(192,132,252,0.1);
752
+ padding: 2px 6px;
753
+ border-radius: 4px;
754
+ white-space: nowrap;
755
+ flex-shrink: 0;
756
+ }
757
+
758
+ .commits-list .commit-msg {
759
+ color: var(--text-secondary);
760
+ flex: 1;
761
+ min-width: 0;
762
+ white-space: nowrap;
763
+ overflow: hidden;
764
+ text-overflow: ellipsis;
765
+ }
766
+
767
+ /* ── Message Bubbles ───────────────────────────────────────────── */
768
+
769
+ .msg-bubble {
770
+ margin-bottom: 12px;
771
+ padding: 10px 14px;
772
+ border-radius: 10px;
773
+ font-size: 13px;
774
+ line-height: 1.5;
775
+ white-space: pre-wrap;
776
+ word-break: break-word;
777
+ max-height: 300px;
778
+ overflow-y: auto;
779
+ }
780
+ .msg-bubble.user { background: rgba(96,165,250,0.15); border: 1px solid rgba(96,165,250,0.2); }
781
+ .msg-bubble.assistant { background: rgba(74,222,128,0.1); border: 1px solid rgba(74,222,128,0.15); }
782
+
783
+ .msg-role {
784
+ font-size: 11px;
785
+ font-weight: 600;
786
+ margin-bottom: 4px;
787
+ text-transform: uppercase;
788
+ letter-spacing: 0.5px;
789
+ }
790
+ .msg-role.user { color: var(--accent-blue); }
791
+ .msg-role.assistant { color: var(--accent-green); }
792
+
793
+ /* ── Overlay ───────────────────────────────────────────────────── */
794
+
795
+ .overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.4); z-index: 99; }
796
+ .overlay.open { display: block; }
797
+
798
+ /* ── Icon Colors ───────────────────────────────────────────────── */
799
+
800
+ .icon-green { background: rgba(74,222,128,0.2); color: var(--accent-green); }
801
+ .icon-blue { background: rgba(96,165,250,0.2); color: var(--accent-blue); }
802
+ .icon-orange { background: rgba(251,146,60,0.2); color: var(--accent-orange); }
803
+ .icon-purple { background: rgba(192,132,252,0.2); color: var(--accent-purple); }
804
+ .icon-red { background: rgba(248,113,113,0.2); color: var(--accent-red); }
805
+ .icon-cyan { background: rgba(34,211,238,0.2); color: var(--accent-cyan); }
806
+
807
+ /* ── Empty State ───────────────────────────────────────────────── */
808
+
809
+ .empty-state {
810
+ text-align: center;
811
+ padding: 60px 20px;
812
+ color: var(--text-muted);
813
+ }
814
+ .empty-state svg { width: 48px; height: 48px; margin-bottom: 16px; opacity: 0.3; }
815
+ .empty-state p { font-size: 14px; }
816
+
817
+ /* ── Toast Notifications ───────────────────────────────────────── */
818
+
819
+ .toast {
820
+ position: fixed;
821
+ bottom: 20px;
822
+ right: 20px;
823
+ background: var(--accent-green);
824
+ color: #000;
825
+ padding: 10px 18px;
826
+ border-radius: 8px;
827
+ font-size: 13px;
828
+ font-weight: 500;
829
+ transform: translateY(80px);
830
+ transition: transform 0.3s;
831
+ z-index: 200;
832
+ }
833
+ .toast.show { transform: translateY(0); }
834
+
835
+ /* ── Heatmap ───────────────────────────────────────────────────── */
836
+
837
+ .heatmap-grid {
838
+ display: grid;
839
+ grid-template-columns: repeat(53, 12px);
840
+ grid-template-rows: repeat(7, 12px);
841
+ gap: 2px;
842
+ grid-auto-flow: column;
843
+ }
844
+
845
+ .heatmap-cell {
846
+ width: 12px;
847
+ height: 12px;
848
+ border-radius: 2px;
849
+ background: var(--bg-card);
850
+ transition: background 0.15s;
851
+ }
852
+
853
+ .heatmap-cell.level-0 { background: var(--bg-card); }
854
+ .heatmap-cell.level-1 { background: rgba(74,222,128,0.25); }
855
+ .heatmap-cell.level-2 { background: rgba(74,222,128,0.45); }
856
+ .heatmap-cell.level-3 { background: rgba(74,222,128,0.70); }
857
+ .heatmap-cell.level-4 { background: #4ade80; }
858
+
859
+ [data-theme="light"] .heatmap-cell.level-0 { background: #ebedf0; }
860
+ [data-theme="light"] .heatmap-cell.level-1 { background: #9be9a8; }
861
+ [data-theme="light"] .heatmap-cell.level-2 { background: #40c463; }
862
+ [data-theme="light"] .heatmap-cell.level-3 { background: #30a14e; }
863
+ [data-theme="light"] .heatmap-cell.level-4 { background: #216e39; }
864
+
865
+ [data-theme="monokai"] .heatmap-cell.level-1 { background: rgba(166,226,46,0.25); }
866
+ [data-theme="monokai"] .heatmap-cell.level-2 { background: rgba(166,226,46,0.45); }
867
+ [data-theme="monokai"] .heatmap-cell.level-3 { background: rgba(166,226,46,0.70); }
868
+ [data-theme="monokai"] .heatmap-cell.level-4 { background: #a6e22e; }
869
+
870
+ /* ── Bulk Action Bar ───────────────────────────────────────────── */
871
+
872
+ .bulk-bar {
873
+ position: fixed;
874
+ bottom: 0;
875
+ left: 0;
876
+ right: 0;
877
+ display: flex;
878
+ align-items: center;
879
+ justify-content: space-between;
880
+ padding: 12px 24px;
881
+ background: rgba(26,29,35,0.85);
882
+ backdrop-filter: blur(12px);
883
+ -webkit-backdrop-filter: blur(12px);
884
+ border-top: 1px solid var(--border);
885
+ z-index: 150;
886
+ transform: translateY(100%);
887
+ transition: transform 0.25s ease;
888
+ }
889
+ .bulk-bar.visible { transform: translateY(0); }
890
+
891
+ .bulk-bar .bulk-count {
892
+ font-size: 14px;
893
+ font-weight: 600;
894
+ color: var(--text-primary);
895
+ }
896
+
897
+ .bulk-bar .bulk-actions {
898
+ display: flex;
899
+ gap: 8px;
900
+ }
901
+
902
+ .bulk-bar button {
903
+ padding: 8px 16px;
904
+ border-radius: 8px;
905
+ border: 1px solid var(--border);
906
+ font-size: 13px;
907
+ font-weight: 500;
908
+ cursor: pointer;
909
+ transition: all 0.15s;
910
+ background: var(--bg-card);
911
+ color: var(--text-primary);
912
+ }
913
+ .bulk-bar button:hover { background: var(--bg-card-hover); }
914
+ .bulk-bar button.bulk-delete {
915
+ background: var(--accent-red);
916
+ color: #fff;
917
+ border-color: var(--accent-red);
918
+ }
919
+ .bulk-bar button.bulk-delete:hover { opacity: 0.85; }
920
+
921
+ [data-theme="light"] .bulk-bar {
922
+ background: rgba(245,245,247,0.88);
923
+ }
924
+ [data-theme="monokai"] .bulk-bar {
925
+ background: rgba(39,40,34,0.88);
926
+ }
927
+
928
+ /* ── Export Button ─────────────────────────────────────────────── */
929
+
930
+ .export-btn {
931
+ display: inline-flex;
932
+ align-items: center;
933
+ gap: 6px;
934
+ background: var(--bg-card);
935
+ border: 1px solid var(--border);
936
+ border-radius: 8px;
937
+ padding: 8px 14px;
938
+ color: var(--text-secondary);
939
+ font-size: 13px;
940
+ font-weight: 500;
941
+ cursor: pointer;
942
+ transition: all 0.15s;
943
+ white-space: nowrap;
944
+ }
945
+ .export-btn:hover {
946
+ background: var(--bg-card-hover);
947
+ color: var(--text-primary);
948
+ }
949
+ .export-btn svg { width: 16px; height: 16px; }
950
+
951
+ /* ── Card structure (app.js layout) ─────────────────────────── */
952
+
953
+ .card-top {
954
+ display: flex;
955
+ align-items: center;
956
+ gap: 8px;
957
+ width: 100%;
958
+ margin-bottom: 6px;
959
+ flex-wrap: wrap;
960
+ }
961
+
962
+ .card-body {
963
+ font-size: 13px;
964
+ color: var(--text-primary);
965
+ line-height: 1.5;
966
+ word-break: break-word;
967
+ margin-bottom: 8px;
968
+ flex: unset;
969
+ min-width: unset;
970
+ }
971
+
972
+ .card-footer {
973
+ display: flex;
974
+ align-items: center;
975
+ gap: 8px;
976
+ flex-wrap: wrap;
977
+ font-size: 12px;
978
+ color: var(--text-muted);
979
+ }
980
+
981
+ .card-id {
982
+ font-family: monospace;
983
+ font-size: 11px;
984
+ color: var(--text-muted);
985
+ opacity: 0.6;
986
+ }
987
+
988
+ .card-project {
989
+ font-size: 12px;
990
+ font-weight: 600;
991
+ }
992
+
993
+ .card-tags {
994
+ display: inline-flex;
995
+ align-items: center;
996
+ gap: 4px;
997
+ flex-wrap: wrap;
998
+ }
999
+
1000
+ .card-time {
1001
+ font-size: 12px;
1002
+ color: var(--text-muted);
1003
+ margin-left: auto;
1004
+ }
1005
+
1006
+ .card { display: flex; flex-direction: column; }
1007
+
1008
+ /* ── Tool badges ────────────────────────────────────────────── */
1009
+
1010
+ .tool-badge {
1011
+ font-size: 10px;
1012
+ font-weight: 600;
1013
+ text-transform: uppercase;
1014
+ letter-spacing: 0.5px;
1015
+ padding: 2px 8px;
1016
+ border-radius: 4px;
1017
+ }
1018
+
1019
+ .tool-claude {
1020
+ background: rgba(96, 165, 250, 0.15);
1021
+ color: var(--accent-blue);
1022
+ }
1023
+
1024
+ .tool-codex {
1025
+ background: rgba(34, 211, 238, 0.15);
1026
+ color: var(--accent-cyan);
1027
+ }
1028
+
1029
+ /* ── Groups ─────────────────────────────────────────────────── */
1030
+
1031
+ .group {
1032
+ margin-bottom: 16px;
1033
+ }
1034
+
1035
+ .group.collapsed .group-body { display: none; }
1036
+ .group.collapsed .group-chevron { transform: rotate(-90deg); }
1037
+
1038
+ .group-body {
1039
+ display: grid;
1040
+ grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
1041
+ gap: 10px;
1042
+ padding-top: 8px;
1043
+ }
1044
+
1045
+ .group-header {
1046
+ display: flex;
1047
+ align-items: center;
1048
+ gap: 8px;
1049
+ padding: 6px 4px;
1050
+ cursor: pointer;
1051
+ user-select: none;
1052
+ font-size: 13px;
1053
+ font-weight: 600;
1054
+ color: var(--text-secondary);
1055
+ }
1056
+
1057
+ .group-dot {
1058
+ width: 10px;
1059
+ height: 10px;
1060
+ border-radius: 50%;
1061
+ flex-shrink: 0;
1062
+ }
1063
+
1064
+ .group-name { flex: 1; }
1065
+
1066
+ .group-count {
1067
+ font-size: 11px;
1068
+ color: var(--text-muted);
1069
+ background: rgba(255,255,255,0.06);
1070
+ padding: 1px 8px;
1071
+ border-radius: 10px;
1072
+ }
1073
+
1074
+ .group-chevron {
1075
+ font-size: 10px;
1076
+ transition: transform 0.2s;
1077
+ color: var(--text-muted);
1078
+ }
1079
+
1080
+ /* ── Heatmap ────────────────────────────────────────────────── */
1081
+
1082
+ .heatmap-container {
1083
+ padding: 20px;
1084
+ }
1085
+
1086
+ .heatmap-title {
1087
+ font-size: 18px;
1088
+ font-weight: 600;
1089
+ margin-bottom: 20px;
1090
+ color: var(--text-primary);
1091
+ }
1092
+
1093
+ .heatmap-months {
1094
+ display: flex;
1095
+ gap: 2px;
1096
+ margin-bottom: 4px;
1097
+ padding-left: 0;
1098
+ }
1099
+
1100
+ .heatmap-month-label {
1101
+ width: 14px;
1102
+ font-size: 10px;
1103
+ color: var(--text-muted);
1104
+ text-align: center;
1105
+ flex-shrink: 0;
1106
+ }
1107
+
1108
+ .heatmap-month-spacer {
1109
+ width: 14px;
1110
+ flex-shrink: 0;
1111
+ }
1112
+
1113
+ .heatmap-row {
1114
+ display: flex;
1115
+ gap: 2px;
1116
+ margin-bottom: 2px;
1117
+ }
1118
+
1119
+ .heatmap-day-label {
1120
+ width: 30px;
1121
+ font-size: 10px;
1122
+ color: var(--text-muted);
1123
+ text-align: right;
1124
+ padding-right: 6px;
1125
+ line-height: 14px;
1126
+ flex-shrink: 0;
1127
+ }
1128
+
1129
+ .heatmap-summary {
1130
+ display: flex;
1131
+ gap: 32px;
1132
+ margin-top: 20px;
1133
+ padding-top: 16px;
1134
+ border-top: 1px solid var(--border);
1135
+ }
1136
+
1137
+ .heatmap-stat {
1138
+ display: flex;
1139
+ flex-direction: column;
1140
+ gap: 2px;
1141
+ }
1142
+
1143
+ .heatmap-stat-val {
1144
+ font-size: 20px;
1145
+ font-weight: 700;
1146
+ color: var(--text-primary);
1147
+ }
1148
+
1149
+ .heatmap-stat-label {
1150
+ font-size: 12px;
1151
+ color: var(--text-muted);
1152
+ }
1153
+
1154
+ .heatmap-legend {
1155
+ display: flex;
1156
+ align-items: center;
1157
+ gap: 4px;
1158
+ margin-top: 12px;
1159
+ font-size: 11px;
1160
+ color: var(--text-muted);
1161
+ }
1162
+
1163
+ /* ── Detail panel additions ─────────────────────────────────── */
1164
+
1165
+ .detail-actions {
1166
+ display: flex;
1167
+ gap: 8px;
1168
+ flex-wrap: wrap;
1169
+ margin: 16px 0;
1170
+ }
1171
+
1172
+ .detail-row {
1173
+ display: flex;
1174
+ align-items: center;
1175
+ gap: 12px;
1176
+ padding: 6px 0;
1177
+ border-bottom: 1px solid var(--border);
1178
+ font-size: 13px;
1179
+ }
1180
+
1181
+ .detail-label {
1182
+ width: 100px;
1183
+ flex-shrink: 0;
1184
+ color: var(--text-muted);
1185
+ font-size: 12px;
1186
+ }
1187
+
1188
+ .detail-messages {
1189
+ margin-top: 16px;
1190
+ }
1191
+
1192
+ .detail-commits {
1193
+ margin-top: 16px;
1194
+ }
1195
+
1196
+ .detail-commits h3,
1197
+ .detail-messages h3 {
1198
+ font-size: 14px;
1199
+ font-weight: 600;
1200
+ margin-bottom: 12px;
1201
+ color: var(--text-secondary);
1202
+ }
1203
+
1204
+ .detail-star {
1205
+ font-size: 14px;
1206
+ padding: 8px 14px;
1207
+ }
1208
+
1209
+ .mono {
1210
+ font-family: monospace;
1211
+ font-size: 12px;
1212
+ word-break: break-all;
1213
+ }
1214
+
1215
+ .loading {
1216
+ color: var(--text-muted);
1217
+ font-size: 13px;
1218
+ padding: 20px 0;
1219
+ }
1220
+
1221
+ /* ── Messages ───────────────────────────────────────────────── */
1222
+
1223
+ .message {
1224
+ margin-bottom: 12px;
1225
+ padding: 10px 14px;
1226
+ border-radius: 10px;
1227
+ font-size: 13px;
1228
+ line-height: 1.5;
1229
+ word-break: break-word;
1230
+ max-height: 300px;
1231
+ overflow-y: auto;
1232
+ }
1233
+
1234
+ .msg-user {
1235
+ background: rgba(96, 165, 250, 0.12);
1236
+ border: 1px solid rgba(96, 165, 250, 0.2);
1237
+ }
1238
+
1239
+ .msg-assistant {
1240
+ background: rgba(74, 222, 128, 0.08);
1241
+ border: 1px solid rgba(74, 222, 128, 0.15);
1242
+ }
1243
+
1244
+ .msg-role {
1245
+ font-size: 11px;
1246
+ font-weight: 600;
1247
+ margin-bottom: 4px;
1248
+ text-transform: uppercase;
1249
+ letter-spacing: 0.5px;
1250
+ color: var(--text-muted);
1251
+ }
1252
+
1253
+ .msg-content {
1254
+ white-space: pre-wrap;
1255
+ }
1256
+
1257
+ /* ── Commits ────────────────────────────────────────────────── */
1258
+
1259
+ .commit-item {
1260
+ display: flex;
1261
+ gap: 10px;
1262
+ padding: 6px 0;
1263
+ border-bottom: 1px solid var(--border);
1264
+ font-size: 13px;
1265
+ }
1266
+
1267
+ .commit-hash {
1268
+ font-family: monospace;
1269
+ font-size: 12px;
1270
+ color: var(--accent-blue);
1271
+ flex-shrink: 0;
1272
+ }
1273
+
1274
+ .commit-msg {
1275
+ color: var(--text-primary);
1276
+ overflow: hidden;
1277
+ text-overflow: ellipsis;
1278
+ white-space: nowrap;
1279
+ }
1280
+
1281
+ /* ── Projects grid ──────────────────────────────────────────── */
1282
+
1283
+ .projects-grid {
1284
+ display: grid;
1285
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
1286
+ gap: 12px;
1287
+ }
1288
+
1289
+ .project-card {
1290
+ background: var(--bg-card);
1291
+ border: 1px solid var(--border);
1292
+ border-radius: 10px;
1293
+ padding: 16px;
1294
+ cursor: pointer;
1295
+ transition: all 0.15s;
1296
+ }
1297
+
1298
+ .project-card:hover {
1299
+ background: var(--bg-card-hover);
1300
+ transform: translateY(-1px);
1301
+ }
1302
+
1303
+ .project-card-header {
1304
+ display: flex;
1305
+ align-items: center;
1306
+ gap: 8px;
1307
+ margin-bottom: 10px;
1308
+ }
1309
+
1310
+ .project-card-name {
1311
+ font-size: 15px;
1312
+ font-weight: 600;
1313
+ }
1314
+
1315
+ .project-card-stats {
1316
+ display: flex;
1317
+ gap: 12px;
1318
+ font-size: 12px;
1319
+ color: var(--text-muted);
1320
+ margin-bottom: 6px;
1321
+ }
1322
+
1323
+ .project-card-time {
1324
+ font-size: 12px;
1325
+ color: var(--text-muted);
1326
+ }
1327
+
1328
+ /* ── Timeline ───────────────────────────────────────────────── */
1329
+
1330
+ .timeline {
1331
+ display: flex;
1332
+ flex-direction: column;
1333
+ gap: 20px;
1334
+ }
1335
+
1336
+ .timeline-date {
1337
+ display: flex;
1338
+ flex-direction: column;
1339
+ gap: 8px;
1340
+ }
1341
+
1342
+ .timeline-date-label {
1343
+ font-size: 14px;
1344
+ font-weight: 600;
1345
+ color: var(--text-secondary);
1346
+ padding-bottom: 8px;
1347
+ border-bottom: 1px solid var(--border);
1348
+ }
1349
+
1350
+ .timeline-count {
1351
+ font-size: 12px;
1352
+ font-weight: 400;
1353
+ color: var(--text-muted);
1354
+ margin-left: 8px;
1355
+ }
1356
+
1357
+ /* ── Launch buttons ─────────────────────────────────────────── */
1358
+
1359
+ .launch-btn {
1360
+ display: inline-flex;
1361
+ align-items: center;
1362
+ gap: 6px;
1363
+ border: none;
1364
+ border-radius: 8px;
1365
+ padding: 8px 14px;
1366
+ font-size: 13px;
1367
+ cursor: pointer;
1368
+ font-weight: 500;
1369
+ background: var(--accent-blue);
1370
+ color: #fff;
1371
+ transition: opacity 0.15s;
1372
+ }
1373
+
1374
+ .launch-btn:hover { opacity: 0.85; }
1375
+
1376
+ .launch-btn.btn-secondary {
1377
+ background: var(--bg-card);
1378
+ color: var(--text-primary);
1379
+ border: 1px solid var(--border);
1380
+ }
1381
+
1382
+ .launch-btn.btn-delete {
1383
+ background: var(--accent-red);
1384
+ color: #fff;
1385
+ }