@launchsecure/launch-kit 0.0.1

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 (64) hide show
  1. package/README.md +37 -0
  2. package/dist/client/assets/index-C8GAsRGO.css +32 -0
  3. package/dist/client/assets/index-CcHIoRl6.js +286 -0
  4. package/dist/client/index.html +22 -0
  5. package/dist/server/cli.js +8853 -0
  6. package/dist/server/fb-wizard.js +136 -0
  7. package/dist/server/graph-mcp-entry.js +1542 -0
  8. package/dist/server/public/app.js +1312 -0
  9. package/dist/server/public/icons.js +36 -0
  10. package/dist/server/public/index.html +159 -0
  11. package/dist/server/public/plan-detector.js +186 -0
  12. package/dist/server/public/session-manager.js +1129 -0
  13. package/dist/server/public/splits.js +569 -0
  14. package/dist/server/public/style.css +1620 -0
  15. package/package.json +73 -0
  16. package/prompts/analysis.md +992 -0
  17. package/prompts/architect-reconcile.md +931 -0
  18. package/prompts/architecture-sync.md +902 -0
  19. package/prompts/be-contract.md +709 -0
  20. package/prompts/be-impl.md +565 -0
  21. package/prompts/be-policy.md +551 -0
  22. package/prompts/be-test.md +591 -0
  23. package/prompts/bug-diagnosis.md +653 -0
  24. package/prompts/bug-intake.md +563 -0
  25. package/prompts/change-request-intake.md +593 -0
  26. package/prompts/db-contract.md +644 -0
  27. package/prompts/db-impl.md +522 -0
  28. package/prompts/db-interaction.md +569 -0
  29. package/prompts/db-test.md +630 -0
  30. package/prompts/decision-pack.md +654 -0
  31. package/prompts/fe-contract.md +992 -0
  32. package/prompts/fe-flow.md +537 -0
  33. package/prompts/fe-impl.md +597 -0
  34. package/prompts/fe-reconcile.md +506 -0
  35. package/prompts/fe-review.md +550 -0
  36. package/prompts/fe-test.md +705 -0
  37. package/prompts/fix-planner.md +1219 -0
  38. package/prompts/global-db-patterns.md +588 -0
  39. package/prompts/global-env-config.md +460 -0
  40. package/prompts/global-integrations.md +504 -0
  41. package/prompts/global-middleware.md +442 -0
  42. package/prompts/global-navigation.md +502 -0
  43. package/prompts/global-security.md +603 -0
  44. package/prompts/global-services.md +427 -0
  45. package/prompts/greenfield-classifier.md +590 -0
  46. package/prompts/llm-council.md +597 -0
  47. package/prompts/module-sequencer.md +529 -0
  48. package/prompts/normalize.md +611 -0
  49. package/prompts/optimization.md +633 -0
  50. package/prompts/prd-generation.md +544 -0
  51. package/prompts/prd-reconcile.md +584 -0
  52. package/prompts/prd-review.md +504 -0
  53. package/prompts/pre-code-analysis.md +565 -0
  54. package/prompts/pre-code-global-analysis.md +169 -0
  55. package/prompts/production-bootstrap.md +577 -0
  56. package/prompts/research.md +702 -0
  57. package/prompts/retrofit-analysis.md +845 -0
  58. package/prompts/spike.md +850 -0
  59. package/prompts/theming.md +835 -0
  60. package/prompts/triage.md +599 -0
  61. package/prompts/unified-reconcile.md +628 -0
  62. package/prompts/unified-review.md +592 -0
  63. package/prompts/user-stories.md +486 -0
  64. package/prompts/wireframe.md +576 -0
@@ -0,0 +1,1620 @@
1
+ :root {
2
+ --bg-primary: #0d1117;
3
+ --bg-secondary: #161b22;
4
+ --bg-tertiary: #21262d;
5
+ --text-primary: #f0f6fc;
6
+ --text-secondary: #8b949e;
7
+ --accent: #58a6ff;
8
+ --accent-hover: #4493e0;
9
+ --success: #3fb950;
10
+ --error: #f85149;
11
+ --warning: #d29922;
12
+ --border: #30363d;
13
+ --border-hover: #484f58;
14
+ --font-mono: 'JetBrains Mono', 'Fira Code', 'Monaco', 'Consolas', monospace;
15
+ }
16
+
17
+ [data-theme="light"] {
18
+ --bg-primary: #f7f7f8;
19
+ --bg-secondary: #ffffff;
20
+ --bg-tertiary: #f3f4f6;
21
+ --text-primary: #111827;
22
+ --text-secondary: #6b7280;
23
+ --accent: #0a84ff;
24
+ --accent-hover: #0666d0;
25
+ --success: #0f7b5c;
26
+ --error: #d92d20;
27
+ --warning: #a16207;
28
+ --border: #e6e7eb;
29
+ --border-hover: #d4d6db;
30
+ }
31
+
32
+ * {
33
+ box-sizing: border-box;
34
+ margin: 0;
35
+ padding: 0;
36
+ }
37
+
38
+ html {
39
+ overflow-x: hidden;
40
+ width: 100%;
41
+ overscroll-behavior: none; /* Disable pull-to-refresh */
42
+ }
43
+
44
+ body {
45
+ font-family: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, var(--font-mono);
46
+ background-color: var(--bg-primary);
47
+ color: var(--text-primary);
48
+ height: 100vh;
49
+ height: 100dvh; /* Dynamic viewport height for mobile */
50
+ overflow: hidden;
51
+ width: 100%;
52
+ overscroll-behavior: none; /* Disable pull-to-refresh */
53
+ touch-action: pan-x pan-y; /* Allow normal scrolling but prevent browser gestures */
54
+ position: relative;
55
+ }
56
+
57
+ #app {
58
+ display: flex;
59
+ flex-direction: column;
60
+ height: 100vh;
61
+ height: 100dvh; /* Dynamic viewport height for mobile */
62
+ max-height: 100vh;
63
+ max-height: 100dvh;
64
+ }
65
+
66
+ # Icon helpers
67
+ .icon {
68
+ display: inline-flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ line-height: 0;
72
+ }
73
+
74
+ /* Status dots (replace emoji dots) */
75
+ .dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background-color: var(--border); }
76
+ .dot.dot-on { background-color: var(--success); }
77
+ .dot.dot-idle { background-color: #9ca3af; }
78
+ .dot.dot-error { background-color: var(--error); }
79
+
80
+ /* Header styles removed - using tab-based interface */
81
+
82
+ /* Session Tabs Bar */
83
+ .session-tabs-bar {
84
+ background-color: var(--bg-secondary);
85
+ border-bottom: 1px solid var(--border);
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: space-between;
89
+ padding: 0 10px;
90
+ min-height: 36px;
91
+ position: relative;
92
+ overflow: visible; /* Ensure dropdown can overflow */
93
+ }
94
+
95
+ .tabs-section {
96
+ display: flex;
97
+ align-items: center;
98
+ flex: 1;
99
+ overflow-x: auto;
100
+ overflow-y: visible; /* Allow dropdown to overflow vertically */
101
+ scrollbar-width: thin;
102
+ scrollbar-color: var(--border) transparent;
103
+ }
104
+
105
+ .tabs-section::-webkit-scrollbar {
106
+ height: 4px;
107
+ }
108
+
109
+ .tabs-section::-webkit-scrollbar-thumb {
110
+ background-color: var(--border);
111
+ border-radius: 2px;
112
+ }
113
+
114
+ .tabs-container {
115
+ display: flex;
116
+ align-items: center;
117
+ gap: 2px;
118
+ padding: 4px 0;
119
+ }
120
+
121
+ .session-tab {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 6px;
125
+ padding: 6px 12px;
126
+ background-color: var(--bg-tertiary);
127
+ border: 1px solid var(--border);
128
+ border-radius: 6px 6px 0 0;
129
+ color: var(--text-secondary);
130
+ font-size: 12px;
131
+ cursor: pointer;
132
+ transition: all 0.3s ease;
133
+ min-width: 120px;
134
+ max-width: 200px;
135
+ position: relative;
136
+ user-select: none;
137
+ }
138
+
139
+ .session-tab:hover {
140
+ background-color: var(--bg-primary);
141
+ color: var(--text-primary);
142
+ }
143
+
144
+ .session-tab.active {
145
+ background-color: var(--bg-primary);
146
+ color: var(--text-primary);
147
+ border-bottom-color: var(--bg-primary);
148
+ }
149
+
150
+ .session-tab.dragging {
151
+ opacity: 0.5;
152
+ }
153
+
154
+ .tab-content {
155
+ display: flex;
156
+ align-items: center;
157
+ gap: 6px;
158
+ flex: 1;
159
+ overflow: hidden;
160
+ position: relative;
161
+ }
162
+
163
+ .tab-icon {
164
+ width: 14px;
165
+ height: 14px;
166
+ flex-shrink: 0;
167
+ }
168
+
169
+ .tab-status {
170
+ width: 8px;
171
+ height: 8px;
172
+ border-radius: 50%;
173
+ flex-shrink: 0;
174
+ transition: all 0.3s ease;
175
+ position: relative;
176
+ }
177
+
178
+ .tab-status.active {
179
+ background-color: var(--success);
180
+ }
181
+
182
+ .tab-status.idle {
183
+ background-color: #3b82f6; /* Blue to indicate Claude likely finished */
184
+ animation: idle-gentle-pulse 3s infinite;
185
+ }
186
+
187
+ .tab-status.disconnected {
188
+ background-color: var(--error);
189
+ }
190
+
191
+ .tab-status.error {
192
+ background-color: var(--error);
193
+ }
194
+
195
+ /* Pulse animation for active sessions */
196
+ .tab-status.pulse {
197
+ animation: pulse 2s infinite;
198
+ }
199
+
200
+ @keyframes pulse {
201
+ 0% {
202
+ box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.7);
203
+ }
204
+ 70% {
205
+ box-shadow: 0 0 0 10px rgba(16, 185, 129, 0);
206
+ }
207
+ 100% {
208
+ box-shadow: 0 0 0 0 rgba(16, 185, 129, 0);
209
+ }
210
+ }
211
+
212
+ @keyframes idle-gentle-pulse {
213
+ 0%, 100% {
214
+ opacity: 1;
215
+ transform: scale(1);
216
+ }
217
+ 50% {
218
+ opacity: 0.8;
219
+ transform: scale(1.1);
220
+ }
221
+ }
222
+
223
+ /* Unread indicator - changes status dot to blue */
224
+ .tab-status.unread {
225
+ background-color: #3b82f6 !important;
226
+ animation: unread-pulse 1.5s infinite;
227
+ }
228
+
229
+ @keyframes unread-pulse {
230
+ 0%, 100% {
231
+ opacity: 1;
232
+ }
233
+ 50% {
234
+ opacity: 0.5;
235
+ }
236
+ }
237
+
238
+ .session-tab.has-unread .tab-name {
239
+ color: #3b82f6;
240
+ font-weight: 600;
241
+ }
242
+
243
+ .tab-name {
244
+ flex: 1;
245
+ overflow: hidden;
246
+ text-overflow: ellipsis;
247
+ white-space: nowrap;
248
+ }
249
+
250
+ .tab-close {
251
+ width: 16px;
252
+ height: 16px;
253
+ display: flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ border-radius: 3px;
257
+ opacity: 0;
258
+ transition: opacity 0.2s;
259
+ cursor: pointer;
260
+ flex-shrink: 0;
261
+ }
262
+
263
+ .session-tab:hover .tab-close {
264
+ opacity: 0.6;
265
+ }
266
+
267
+ .tab-close:hover {
268
+ opacity: 1;
269
+ background-color: var(--border);
270
+ }
271
+
272
+ .tab-name-input {
273
+ width: 100%;
274
+ font: inherit;
275
+ color: var(--text-primary);
276
+ background: var(--bg-primary);
277
+ border: 1px solid var(--border-hover);
278
+ border-radius: 4px;
279
+ padding: 2px 4px;
280
+ outline: none;
281
+ }
282
+
283
+ .tab-new {
284
+ width: 28px;
285
+ height: 28px;
286
+ display: flex;
287
+ align-items: center;
288
+ justify-content: center;
289
+ background-color: transparent;
290
+ border: 1px solid var(--border);
291
+ border-radius: 4px;
292
+ color: var(--text-secondary);
293
+ cursor: pointer;
294
+ transition: all 0.2s;
295
+ flex-shrink: 0;
296
+ margin-left: 4px;
297
+ }
298
+
299
+ .tab-actions {
300
+ position: relative;
301
+ display: flex;
302
+ gap: 6px;
303
+ align-items: center;
304
+ }
305
+
306
+ .tab-tile {
307
+ width: 28px; height: 28px; display:flex; align-items:center; justify-content:center;
308
+ background: transparent; border: 1px solid var(--border); border-radius: 4px;
309
+ color: var(--text-secondary); cursor: pointer; transition: all .2s; flex-shrink: 0; margin-left: 4px;
310
+ }
311
+ .tab-tile:hover { background: var(--bg-tertiary); color: var(--text-primary); }
312
+ .tab-tile[disabled] { opacity: .5; cursor: not-allowed; }
313
+
314
+ /* Global tabs are visible; panes can be enabled optionally */
315
+
316
+ .tab-new:hover {
317
+ background-color: var(--bg-tertiary);
318
+ color: var(--text-primary);
319
+ }
320
+
321
+ .tab-settings {
322
+ width: 28px;
323
+ height: 28px;
324
+ display: flex;
325
+ align-items: center;
326
+ justify-content: center;
327
+ background-color: transparent;
328
+ border: none;
329
+ color: var(--text-secondary);
330
+ cursor: pointer;
331
+ border-radius: 4px;
332
+ transition: all 0.2s;
333
+ margin-left: auto;
334
+ flex-shrink: 0;
335
+ }
336
+
337
+ .tab-settings:hover {
338
+ background-color: var(--bg-tertiary);
339
+ color: var(--text-primary);
340
+ }
341
+
342
+ /* Tab Overflow Dropdown for Mobile */
343
+ .tab-overflow-wrapper {
344
+ position: relative;
345
+ display: none;
346
+ }
347
+
348
+ .tab-overflow-btn {
349
+ width: auto;
350
+ height: 28px;
351
+ display: flex;
352
+ align-items: center;
353
+ gap: 4px;
354
+ padding: 0 8px;
355
+ background-color: transparent;
356
+ border: 1px solid var(--border);
357
+ border-radius: 4px;
358
+ color: var(--text-secondary);
359
+ cursor: pointer;
360
+ transition: all 0.2s;
361
+ margin-left: 4px;
362
+ }
363
+
364
+ .tab-overflow-btn:hover {
365
+ background-color: var(--bg-tertiary);
366
+ color: var(--text-primary);
367
+ }
368
+
369
+ .tab-overflow-count {
370
+ font-size: 12px;
371
+ font-weight: 600;
372
+ }
373
+
374
+ .tab-overflow-menu {
375
+ display: none;
376
+ position: absolute;
377
+ top: calc(100% + 4px);
378
+ right: 0;
379
+ background-color: var(--bg-secondary);
380
+ border: 1px solid var(--border);
381
+ border-radius: 6px;
382
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
383
+ min-width: 200px;
384
+ max-width: 300px;
385
+ z-index: 10000; /* Higher z-index to ensure it appears above everything */
386
+ max-height: 400px;
387
+ overflow-y: auto;
388
+ }
389
+
390
+ .tab-overflow-menu.active {
391
+ display: block;
392
+ }
393
+
394
+ .overflow-tab-item {
395
+ display: flex;
396
+ align-items: center;
397
+ justify-content: space-between;
398
+ padding: 8px 12px;
399
+ cursor: pointer;
400
+ transition: background-color 0.2s;
401
+ border-bottom: 1px solid var(--border);
402
+ }
403
+
404
+ .overflow-tab-item:last-child {
405
+ border-bottom: none;
406
+ }
407
+
408
+ .overflow-tab-item:hover {
409
+ background-color: var(--bg-tertiary);
410
+ }
411
+
412
+ .overflow-tab-item.active {
413
+ background-color: var(--bg-tertiary);
414
+ color: var(--accent);
415
+ }
416
+
417
+ .overflow-tab-name {
418
+ flex: 1;
419
+ overflow: hidden;
420
+ text-overflow: ellipsis;
421
+ white-space: nowrap;
422
+ font-size: 13px;
423
+ }
424
+
425
+ .overflow-tab-close {
426
+ width: 20px;
427
+ height: 20px;
428
+ display: flex;
429
+ align-items: center;
430
+ justify-content: center;
431
+ border-radius: 3px;
432
+ color: var(--text-secondary);
433
+ cursor: pointer;
434
+ transition: all 0.2s;
435
+ }
436
+
437
+ .overflow-tab-close:hover {
438
+ background-color: var(--error);
439
+ color: white;
440
+ }
441
+
442
+ /* Mobile-specific styles */
443
+ @media (max-width: 768px) {
444
+ /* Overflow wrapper visibility is controlled by JavaScript */
445
+ }
446
+
447
+ /* Terminal Container */
448
+ .terminal-container {
449
+ flex: 1;
450
+ overflow: hidden;
451
+ position: relative;
452
+ display: flex;
453
+ flex-direction: column;
454
+ }
455
+
456
+ .terminal-wrapper {
457
+ flex: 1;
458
+ overflow: hidden;
459
+ position: relative;
460
+ }
461
+
462
+
463
+ /* Session Dropdown Styles - Hidden when using tabs */
464
+ .session-dropdown {
465
+ position: relative;
466
+ display: none; /* Hide dropdown when using tabs */
467
+ }
468
+
469
+ .session-btn {
470
+ display: flex;
471
+ align-items: center;
472
+ gap: 8px;
473
+ }
474
+
475
+ .session-btn svg {
476
+ opacity: 0.8;
477
+ }
478
+
479
+ .dropdown-arrow {
480
+ transition: transform 0.2s;
481
+ }
482
+
483
+ .session-dropdown-menu {
484
+ position: absolute;
485
+ top: 100%;
486
+ right: 0;
487
+ margin-top: 8px;
488
+ background-color: var(--bg-secondary);
489
+ border: 1px solid var(--border);
490
+ border-radius: 8px;
491
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
492
+ min-width: 320px;
493
+ max-width: 400px;
494
+ z-index: 1000;
495
+ display: none;
496
+ }
497
+
498
+ .session-dropdown-menu.active {
499
+ display: block;
500
+ }
501
+
502
+ .session-dropdown-header {
503
+ padding: 12px 16px;
504
+ border-bottom: 1px solid var(--border);
505
+ display: flex;
506
+ justify-content: space-between;
507
+ align-items: center;
508
+ }
509
+
510
+ .session-dropdown-header h3 {
511
+ font-size: 14px;
512
+ font-weight: 600;
513
+ color: var(--text-primary);
514
+ }
515
+
516
+ .session-list {
517
+ max-height: 300px;
518
+ overflow-y: auto;
519
+ }
520
+
521
+ .session-item {
522
+ padding: 12px 16px;
523
+ display: flex;
524
+ justify-content: space-between;
525
+ align-items: center;
526
+ cursor: pointer;
527
+ transition: background-color 0.2s;
528
+ }
529
+
530
+ .session-item:hover {
531
+ background-color: var(--bg-tertiary);
532
+ }
533
+
534
+ .session-item.active {
535
+ background-color: var(--bg-tertiary);
536
+ border-left: 3px solid var(--accent);
537
+ padding-left: 13px;
538
+ }
539
+
540
+ .session-info {
541
+ display: flex;
542
+ align-items: center;
543
+ gap: 12px;
544
+ flex: 1;
545
+ }
546
+
547
+ .session-status {
548
+ font-size: 10px;
549
+ }
550
+
551
+ .session-details {
552
+ flex: 1;
553
+ }
554
+
555
+ .session-name {
556
+ font-size: 13px;
557
+ font-weight: 500;
558
+ color: var(--text-primary);
559
+ margin-bottom: 2px;
560
+ }
561
+
562
+ .session-meta {
563
+ font-size: 11px;
564
+ color: var(--text-secondary);
565
+ }
566
+
567
+ .session-folder {
568
+ font-size: 11px;
569
+ color: var(--text-secondary);
570
+ margin-top: 2px;
571
+ white-space: nowrap;
572
+ overflow: hidden;
573
+ text-overflow: ellipsis;
574
+ max-width: 200px;
575
+ }
576
+
577
+ .session-actions {
578
+ display: flex;
579
+ gap: 4px;
580
+ }
581
+
582
+ .no-sessions {
583
+ padding: 24px;
584
+ text-align: center;
585
+ color: var(--text-secondary);
586
+ font-size: 13px;
587
+ }
588
+
589
+ .session-dropdown-footer {
590
+ padding: 12px 16px;
591
+ border-top: 1px solid var(--border);
592
+ }
593
+
594
+ .form-group {
595
+ margin-bottom: 16px;
596
+ }
597
+
598
+ .form-group label {
599
+ display: block;
600
+ margin-bottom: 8px;
601
+ font-size: 13px;
602
+ font-weight: 500;
603
+ color: var(--text-primary);
604
+ }
605
+
606
+ .form-group input {
607
+ width: 100%;
608
+ padding: 8px 12px;
609
+ background-color: var(--bg-tertiary);
610
+ border: 1px solid var(--border);
611
+ border-radius: 6px;
612
+ color: var(--text-primary);
613
+ font-family: var(--font-mono);
614
+ font-size: 13px;
615
+ }
616
+
617
+ .form-group input:focus {
618
+ outline: none;
619
+ border-color: var(--accent);
620
+ }
621
+
622
+ .btn-small {
623
+ padding: 6px 12px;
624
+ font-size: 12px;
625
+ }
626
+
627
+ .btn-icon {
628
+ background: none;
629
+ border: none;
630
+ color: var(--text-secondary);
631
+ cursor: pointer;
632
+ padding: 4px;
633
+ border-radius: 4px;
634
+ transition: all 0.2s;
635
+ display: inline-flex;
636
+ align-items: center;
637
+ justify-content: center;
638
+ }
639
+
640
+ .btn-icon:hover {
641
+ color: var(--text-primary);
642
+ background-color: var(--bg-tertiary);
643
+ }
644
+
645
+ .btn {
646
+ padding: 6px 12px;
647
+ border: 1px solid var(--border);
648
+ background-color: var(--bg-tertiary);
649
+ color: var(--text-primary);
650
+ border-radius: 6px;
651
+ cursor: pointer;
652
+ font-family: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, var(--font-mono);
653
+ font-size: 12px;
654
+ font-weight: 500;
655
+ transition: all 0.2s ease;
656
+ }
657
+
658
+ .btn:hover:not(:disabled) {
659
+ background-color: var(--bg-secondary);
660
+ border-color: var(--border-hover);
661
+ }
662
+
663
+ .btn:disabled {
664
+ opacity: 0.5;
665
+ cursor: not-allowed;
666
+ }
667
+
668
+ .btn-primary {
669
+ background-color: var(--accent);
670
+ color: white;
671
+ border-color: var(--accent);
672
+ }
673
+
674
+ .btn-primary:hover:not(:disabled) {
675
+ background-color: var(--accent-hover);
676
+ border-color: var(--accent-hover);
677
+ }
678
+
679
+ .btn-secondary {
680
+ background-color: var(--bg-tertiary);
681
+ border-color: var(--border);
682
+ }
683
+
684
+ .btn-danger {
685
+ background-color: var(--error);
686
+ color: white;
687
+ border-color: var(--error);
688
+ }
689
+
690
+ .btn-danger:hover:not(:disabled) {
691
+ background-color: #d73a49;
692
+ border-color: #d73a49;
693
+ }
694
+
695
+ .btn-success {
696
+ background-color: var(--success);
697
+ color: white;
698
+ border-color: var(--success);
699
+ }
700
+
701
+ .btn-success:hover:not(:disabled) {
702
+ background-color: #059669;
703
+ border-color: #059669;
704
+ }
705
+
706
+ .btn-danger-skip {
707
+ width: 40px;
708
+ height: 40px;
709
+ padding: 0;
710
+ display: flex;
711
+ align-items: center;
712
+ justify-content: center;
713
+ background-color: #8b0000;
714
+ color: white;
715
+ border: 2px solid #660000;
716
+ border-radius: 6px;
717
+ cursor: pointer;
718
+ transition: all 0.2s ease;
719
+ }
720
+
721
+ .btn-danger-skip:hover {
722
+ background-color: #a00000;
723
+ border-color: #800000;
724
+ box-shadow: 0 0 10px rgba(139, 0, 0, 0.5);
725
+ }
726
+
727
+ .btn-danger-skip svg {
728
+ width: 24px;
729
+ height: 24px;
730
+ }
731
+
732
+ .main {
733
+ flex: 1;
734
+ display: flex;
735
+ overflow: hidden;
736
+ }
737
+
738
+ .terminal-container {
739
+ flex: 1;
740
+ position: relative;
741
+ background-color: var(--bg-primary);
742
+ width: 100%;
743
+ overflow: hidden;
744
+ }
745
+
746
+ /* Context menu for tabs */
747
+ .pane-session-menu { position: absolute; z-index: 3000; min-width: 220px; background: var(--bg-secondary); border:1px solid var(--border); border-radius:8px; box-shadow:0 8px 24px rgba(0,0,0,.35); padding:6px; }
748
+ .pane-session-item { padding:8px 10px; border-radius:6px; cursor:pointer; color: var(--text-primary); }
749
+ .pane-session-item.used { color: var(--text-secondary); }
750
+ .pane-session-item:hover { background: var(--bg-tertiary); }
751
+
752
+ /* Split View */
753
+ .split-container {
754
+ flex: 1;
755
+ display: flex;
756
+ min-height: 0;
757
+ position: relative;
758
+ }
759
+
760
+ .split-pane {
761
+ position: relative;
762
+ display: flex;
763
+ flex-direction: column;
764
+ min-width: 0;
765
+ background: var(--bg-primary);
766
+ transition: border-color 0.2s ease;
767
+ }
768
+
769
+ .split-pane.split-active {
770
+ border: 2px solid var(--accent);
771
+ }
772
+
773
+ .split-terminal-wrapper {
774
+ flex: 1;
775
+ min-height: 0;
776
+ width: 100%;
777
+ display: flex;
778
+ flex-direction: column;
779
+ }
780
+
781
+ .split-left {
782
+ width: 50%;
783
+ }
784
+
785
+ .split-right {
786
+ width: 50%;
787
+ }
788
+
789
+ .split-divider {
790
+ width: 6px;
791
+ background: var(--border);
792
+ cursor: col-resize;
793
+ flex-shrink: 0;
794
+ transition: background 0.2s ease;
795
+ }
796
+
797
+ .split-divider:hover {
798
+ background: var(--border-hover);
799
+ }
800
+
801
+ .split-close {
802
+ position: absolute;
803
+ top: 8px;
804
+ right: 8px;
805
+ z-index: 10;
806
+ background: var(--bg-secondary);
807
+ border: 1px solid var(--border);
808
+ border-radius: 4px;
809
+ color: var(--text-secondary);
810
+ width: 26px;
811
+ height: 26px;
812
+ display: flex;
813
+ align-items: center;
814
+ justify-content: center;
815
+ cursor: pointer;
816
+ opacity: 0.6;
817
+ transition: all 0.2s ease;
818
+ }
819
+
820
+ .split-close:hover {
821
+ opacity: 1;
822
+ background: var(--bg-tertiary);
823
+ color: var(--text-primary);
824
+ }
825
+
826
+ /* Drop zone for drag-to-split */
827
+ .split-drop-zone {
828
+ position: absolute;
829
+ top: 0;
830
+ right: 0;
831
+ bottom: 0;
832
+ width: 100px;
833
+ background: rgba(88, 166, 255, 0.15);
834
+ border: 2px dashed rgba(88, 166, 255, 0.5);
835
+ border-radius: 8px;
836
+ pointer-events: none;
837
+ z-index: 100;
838
+ }
839
+
840
+ #terminal {
841
+ width: 100%;
842
+ height: 100%;
843
+ padding: 20px;
844
+ box-sizing: border-box;
845
+ }
846
+
847
+ .terminal-overlay {
848
+ position: fixed; /* Cover the full app regardless of container visibility */
849
+ top: 0;
850
+ left: 0;
851
+ right: 0;
852
+ bottom: 0;
853
+ z-index: 5000;
854
+ background-color: rgba(13, 17, 23, 0.95);
855
+ display: flex;
856
+ align-items: center;
857
+ justify-content: center;
858
+ backdrop-filter: blur(2px);
859
+ }
860
+
861
+ .overlay-content {
862
+ text-align: center;
863
+ padding: 40px;
864
+ background-color: var(--bg-secondary);
865
+ border-radius: 12px;
866
+ border: 1px solid var(--border);
867
+ max-width: 520px;
868
+ }
869
+
870
+ .loading-spinner {
871
+ display: flex;
872
+ flex-direction: column;
873
+ align-items: center;
874
+ gap: 16px;
875
+ }
876
+
877
+ .spinner {
878
+ width: 40px;
879
+ height: 40px;
880
+ border: 3px solid var(--border);
881
+ border-top: 3px solid var(--accent);
882
+ border-radius: 50%;
883
+ animation: spin 1s linear infinite;
884
+ }
885
+
886
+ @keyframes spin {
887
+ 0% { transform: rotate(0deg); }
888
+ 100% { transform: rotate(360deg); }
889
+ }
890
+
891
+ /* Inline Plan Panel */
892
+ .plan-inline-panel {
893
+ position: relative;
894
+ max-height: 40vh;
895
+ overflow: hidden;
896
+ border-bottom: 1px solid var(--border);
897
+ background: var(--bg-secondary);
898
+ z-index: 10;
899
+ }
900
+ .plan-inline-header {
901
+ display: flex;
902
+ align-items: center;
903
+ justify-content: space-between;
904
+ padding: 8px 12px;
905
+ background: var(--bg-tertiary);
906
+ border-bottom: 1px solid var(--border);
907
+ }
908
+ .plan-inline-title {
909
+ display: flex;
910
+ align-items: center;
911
+ gap: 8px;
912
+ font-size: 13px;
913
+ font-weight: 500;
914
+ color: var(--text-primary);
915
+ }
916
+ .plan-inline-actions {
917
+ display: flex;
918
+ align-items: center;
919
+ gap: 6px;
920
+ }
921
+ .plan-inline-toggle {
922
+ background: none;
923
+ border: none;
924
+ color: var(--text-secondary);
925
+ cursor: pointer;
926
+ padding: 4px;
927
+ display: flex;
928
+ align-items: center;
929
+ }
930
+ .plan-inline-content {
931
+ padding: 12px;
932
+ overflow-y: auto;
933
+ max-height: calc(40vh - 40px);
934
+ font-size: 13px;
935
+ line-height: 1.5;
936
+ }
937
+ .plan-inline-panel.collapsed .plan-inline-content {
938
+ display: none;
939
+ }
940
+ .plan-inline-panel.collapsed .plan-inline-toggle svg {
941
+ transform: rotate(180deg);
942
+ }
943
+
944
+ /* Settings Dropdown */
945
+ .settings-dropdown {
946
+ position: absolute;
947
+ top: 100%;
948
+ right: 0;
949
+ width: 280px;
950
+ background: var(--bg-secondary);
951
+ border: 1px solid var(--border);
952
+ border-radius: 8px;
953
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
954
+ z-index: 100;
955
+ padding: 12px;
956
+ }
957
+ .settings-dropdown .setting-group {
958
+ display: flex;
959
+ align-items: center;
960
+ justify-content: space-between;
961
+ padding: 8px 0;
962
+ border-bottom: 1px solid var(--border);
963
+ }
964
+ .settings-dropdown .setting-group:last-child {
965
+ border-bottom: none;
966
+ }
967
+ .settings-dropdown label {
968
+ font-size: 13px;
969
+ color: var(--text-secondary);
970
+ }
971
+ .settings-dropdown select,
972
+ .settings-dropdown input[type="text"] {
973
+ background: var(--bg-tertiary);
974
+ border: 1px solid var(--border);
975
+ border-radius: 4px;
976
+ color: var(--text-primary);
977
+ padding: 4px 8px;
978
+ font-size: 12px;
979
+ }
980
+ .settings-dropdown input[type="range"] {
981
+ width: 80px;
982
+ }
983
+
984
+ /* Error Banner */
985
+ .error-banner {
986
+ display: flex;
987
+ align-items: center;
988
+ justify-content: space-between;
989
+ padding: 8px 16px;
990
+ background: var(--error, #dc3545);
991
+ color: white;
992
+ font-size: 13px;
993
+ z-index: 50;
994
+ }
995
+ .error-banner-close {
996
+ background: none;
997
+ border: none;
998
+ color: white;
999
+ font-size: 18px;
1000
+ cursor: pointer;
1001
+ padding: 0 4px;
1002
+ }
1003
+
1004
+ /* Start prompt panel */
1005
+ .start-prompt-panel {
1006
+ display: flex;
1007
+ align-items: center;
1008
+ justify-content: center;
1009
+ position: absolute;
1010
+ inset: 0;
1011
+ z-index: 15;
1012
+ background: var(--bg-primary, #0d1117);
1013
+ }
1014
+ .start-prompt-inner {
1015
+ text-align: center;
1016
+ padding: 24px;
1017
+ }
1018
+ .start-prompt-dir {
1019
+ font-size: 13px;
1020
+ color: var(--text-secondary, #8b949e);
1021
+ margin-bottom: 16px;
1022
+ font-family: 'JetBrains Mono', monospace;
1023
+ word-break: break-all;
1024
+ }
1025
+ .start-prompt-buttons {
1026
+ display: flex;
1027
+ gap: 8px;
1028
+ justify-content: center;
1029
+ flex-wrap: wrap;
1030
+ }
1031
+ .start-prompt-buttons .btn {
1032
+ padding: 8px 16px;
1033
+ font-size: 13px;
1034
+ }
1035
+
1036
+ /* General setting group styles (for non-dropdown contexts) */
1037
+ .setting-group {
1038
+ margin-bottom: 20px;
1039
+ display: flex;
1040
+ align-items: center;
1041
+ gap: 12px;
1042
+ }
1043
+
1044
+ .setting-group label {
1045
+ flex: 0 0 auto;
1046
+ width: 100px;
1047
+ font-weight: 500;
1048
+ font-size: 14px;
1049
+ }
1050
+
1051
+ .setting-group input[type="range"] {
1052
+ flex: 1;
1053
+ height: 4px;
1054
+ background: var(--border);
1055
+ outline: none;
1056
+ border-radius: 2px;
1057
+ }
1058
+
1059
+ .setting-group input[type="range"]::-webkit-slider-thumb {
1060
+ appearance: none;
1061
+ width: 16px;
1062
+ height: 16px;
1063
+ background: var(--accent);
1064
+ cursor: pointer;
1065
+ border-radius: 50%;
1066
+ }
1067
+
1068
+ .setting-group select {
1069
+ flex: 1;
1070
+ padding: 6px 12px;
1071
+ background-color: var(--bg-tertiary);
1072
+ color: var(--text-primary);
1073
+ border: 1px solid var(--border);
1074
+ border-radius: 4px;
1075
+ font-family: var(--font-mono);
1076
+ }
1077
+
1078
+ .setting-group input[type="checkbox"] {
1079
+ width: 16px;
1080
+ height: 16px;
1081
+ accent-color: var(--accent);
1082
+ }
1083
+
1084
+ #fontSizeValue {
1085
+ flex: 0 0 auto;
1086
+ width: 40px;
1087
+ font-size: 12px;
1088
+ color: var(--text-secondary);
1089
+ }
1090
+
1091
+ .modal-footer {
1092
+ padding: 20px;
1093
+ border-top: 1px solid var(--border);
1094
+ display: flex;
1095
+ justify-content: flex-end;
1096
+ }
1097
+
1098
+ /* Plan content styles (shared with inline panel) */
1099
+ .plan-content {
1100
+ background-color: var(--bg-primary);
1101
+ border: 1px solid var(--border);
1102
+ border-radius: 8px;
1103
+ padding: 20px;
1104
+ font-family: var(--font-mono);
1105
+ font-size: 0.9rem;
1106
+ line-height: 1.6;
1107
+ white-space: pre-wrap;
1108
+ color: var(--text-primary);
1109
+ }
1110
+
1111
+ .plan-content h2 {
1112
+ color: var(--accent);
1113
+ font-size: 1.2rem;
1114
+ margin: 1rem 0;
1115
+ }
1116
+
1117
+ .plan-content h3 {
1118
+ color: var(--text-primary);
1119
+ font-size: 1rem;
1120
+ margin: 0.8rem 0;
1121
+ }
1122
+
1123
+ .plan-content ul,
1124
+ .plan-content ol {
1125
+ margin: 0.5rem 0 0.5rem 1.5rem;
1126
+ }
1127
+
1128
+ .plan-content li {
1129
+ margin: 0.3rem 0;
1130
+ }
1131
+
1132
+ .plan-content code {
1133
+ background-color: var(--bg-tertiary);
1134
+ padding: 2px 6px;
1135
+ border-radius: 3px;
1136
+ color: var(--accent);
1137
+ }
1138
+
1139
+ .plan-content pre {
1140
+ background-color: var(--bg-tertiary);
1141
+ padding: 10px;
1142
+ border-radius: 6px;
1143
+ overflow-x: auto;
1144
+ margin: 10px 0;
1145
+ }
1146
+
1147
+ .xterm .xterm-viewport {
1148
+ background-color: transparent !important;
1149
+ overflow-y: auto !important;
1150
+ overflow-x: hidden !important;
1151
+ }
1152
+
1153
+ .xterm .xterm-screen {
1154
+ background-color: transparent !important;
1155
+ }
1156
+
1157
+ /* Fix xterm canvas width on mobile */
1158
+ .xterm {
1159
+ width: 100%;
1160
+ height: 100%;
1161
+ }
1162
+
1163
+ .xterm-screen canvas {
1164
+ max-width: 100%;
1165
+ }
1166
+
1167
+ /* Fix scrollbar extending beyond viewport */
1168
+ .xterm-viewport::-webkit-scrollbar {
1169
+ width: 10px;
1170
+ height: 10px;
1171
+ }
1172
+
1173
+ .xterm-viewport::-webkit-scrollbar-track {
1174
+ background: var(--bg-secondary);
1175
+ }
1176
+
1177
+ .xterm-viewport::-webkit-scrollbar-thumb {
1178
+ background: var(--border);
1179
+ border-radius: 5px;
1180
+ }
1181
+
1182
+ .xterm-viewport::-webkit-scrollbar-thumb:hover {
1183
+ background: var(--border-hover);
1184
+ }
1185
+
1186
+ /* Mobile Menu Styles */
1187
+ .hamburger-btn {
1188
+ display: none;
1189
+ flex-direction: column;
1190
+ justify-content: center;
1191
+ align-items: center;
1192
+ gap: 4px;
1193
+ min-width: 44px;
1194
+ min-height: 44px;
1195
+ width: 44px;
1196
+ height: 44px;
1197
+ background: transparent;
1198
+ border: none;
1199
+ cursor: pointer;
1200
+ padding: 10px;
1201
+ margin: 0;
1202
+ border-radius: 4px;
1203
+ -webkit-tap-highlight-color: transparent;
1204
+ transition: background-color 0.2s ease;
1205
+ }
1206
+
1207
+ .hamburger-btn:hover {
1208
+ background-color: var(--bg-tertiary);
1209
+ }
1210
+
1211
+ .hamburger-line {
1212
+ display: block;
1213
+ width: 24px;
1214
+ height: 2px;
1215
+ background-color: var(--text-primary);
1216
+ border-radius: 2px;
1217
+ transition: all 0.3s ease;
1218
+ }
1219
+
1220
+ .hamburger-btn.active .hamburger-line:nth-child(1) {
1221
+ transform: translateY(6px) rotate(45deg);
1222
+ }
1223
+
1224
+ .hamburger-btn.active .hamburger-line:nth-child(2) {
1225
+ opacity: 0;
1226
+ }
1227
+
1228
+ .hamburger-btn.active .hamburger-line:nth-child(3) {
1229
+ transform: translateY(-6px) rotate(-45deg);
1230
+ }
1231
+
1232
+ .mobile-menu {
1233
+ position: fixed;
1234
+ top: 0;
1235
+ left: -300px;
1236
+ width: 280px;
1237
+ height: 100%;
1238
+ background-color: var(--bg-secondary);
1239
+ border-right: 1px solid var(--border);
1240
+ z-index: 3000;
1241
+ transition: left 0.3s ease;
1242
+ display: flex;
1243
+ flex-direction: column;
1244
+ }
1245
+
1246
+ .mobile-menu.active {
1247
+ left: 0;
1248
+ box-shadow: 2px 0 10px rgba(0, 0, 0, 0.3);
1249
+ }
1250
+
1251
+ .mobile-menu-header {
1252
+ display: flex;
1253
+ justify-content: space-between;
1254
+ align-items: center;
1255
+ padding: 16px 20px;
1256
+ border-bottom: 1px solid var(--border);
1257
+ }
1258
+
1259
+ .mobile-menu-header h2 {
1260
+ font-size: 18px;
1261
+ font-weight: 600;
1262
+ margin: 0;
1263
+ }
1264
+
1265
+ .close-menu-btn {
1266
+ background: transparent;
1267
+ border: none;
1268
+ color: var(--text-primary);
1269
+ font-size: 28px;
1270
+ cursor: pointer;
1271
+ padding: 0;
1272
+ width: 30px;
1273
+ height: 30px;
1274
+ display: flex;
1275
+ align-items: center;
1276
+ justify-content: center;
1277
+ }
1278
+
1279
+ .mobile-menu-content {
1280
+ padding: 20px;
1281
+ display: flex;
1282
+ flex-direction: column;
1283
+ gap: 12px;
1284
+ }
1285
+
1286
+ .mobile-menu-btn {
1287
+ padding: 12px 16px;
1288
+ background-color: var(--bg-tertiary);
1289
+ color: var(--text-primary);
1290
+ border: 1px solid var(--border);
1291
+ border-radius: 6px;
1292
+ cursor: pointer;
1293
+ font-family: var(--font-mono);
1294
+ font-size: 14px;
1295
+ font-weight: 500;
1296
+ transition: all 0.2s ease;
1297
+ text-align: left;
1298
+ }
1299
+
1300
+ .mobile-menu-btn:hover:not(:disabled) {
1301
+ background-color: var(--accent);
1302
+ color: white;
1303
+ border-color: var(--accent);
1304
+ }
1305
+
1306
+ .mobile-menu-btn:disabled {
1307
+ opacity: 0.5;
1308
+ cursor: not-allowed;
1309
+ }
1310
+
1311
+ .mobile-menu-btn.btn-danger {
1312
+ background-color: var(--error);
1313
+ color: white;
1314
+ border-color: var(--error);
1315
+ }
1316
+
1317
+ .mobile-menu-btn.btn-danger:hover:not(:disabled) {
1318
+ background-color: #d73a49;
1319
+ border-color: #d73a49;
1320
+ }
1321
+
1322
+ .desktop-only {
1323
+ display: block;
1324
+ }
1325
+
1326
+ /* Ensure pre-formatted text and code blocks wrap properly */
1327
+ pre, code {
1328
+ word-wrap: break-word;
1329
+ white-space: pre-wrap;
1330
+ overflow-wrap: break-word;
1331
+ }
1332
+
1333
+ /* Mobile Responsive Styles */
1334
+ @media (max-width: 768px) {
1335
+ .hamburger-btn {
1336
+ display: flex;
1337
+ flex-shrink: 0;
1338
+ }
1339
+
1340
+ .desktop-only {
1341
+ display: none !important;
1342
+ }
1343
+
1344
+ .header {
1345
+ padding: 8px 12px;
1346
+ display: flex;
1347
+ flex-direction: row;
1348
+ align-items: center;
1349
+ justify-content: flex-start;
1350
+ gap: 0;
1351
+ flex-shrink: 0;
1352
+ min-height: 44px;
1353
+ }
1354
+
1355
+ .header-content {
1356
+ flex: 1;
1357
+ display: flex;
1358
+ flex-direction: row;
1359
+ align-items: center;
1360
+ justify-content: flex-end;
1361
+ min-width: 0;
1362
+ }
1363
+
1364
+ .header-info {
1365
+ display: flex;
1366
+ flex-direction: row;
1367
+ gap: 8px;
1368
+ align-items: center;
1369
+ justify-content: flex-end;
1370
+ }
1371
+
1372
+ .status {
1373
+ font-size: 11px;
1374
+ padding: 2px 6px;
1375
+ white-space: nowrap;
1376
+ }
1377
+
1378
+ .working-dir {
1379
+ font-size: 11px;
1380
+ padding: 2px 6px;
1381
+ max-width: 150px;
1382
+ overflow: hidden;
1383
+ text-overflow: ellipsis;
1384
+ white-space: nowrap;
1385
+ }
1386
+
1387
+ .header-controls {
1388
+ display: none;
1389
+ }
1390
+
1391
+ .main {
1392
+ flex: 1;
1393
+ overflow: hidden;
1394
+ }
1395
+
1396
+ .terminal-container {
1397
+ padding: 0;
1398
+ width: 100%;
1399
+ height: 100%;
1400
+ overflow: hidden;
1401
+ }
1402
+
1403
+ #terminal {
1404
+ padding: 8px;
1405
+ width: 100%;
1406
+ height: 100%;
1407
+ box-sizing: border-box;
1408
+ }
1409
+
1410
+ /* Force xterm to respect mobile viewport */
1411
+ .xterm {
1412
+ width: 100% !important;
1413
+ height: 100% !important;
1414
+ }
1415
+
1416
+ .xterm-viewport {
1417
+ width: 100% !important;
1418
+ overflow-x: hidden !important;
1419
+ overflow-y: auto !important;
1420
+ }
1421
+
1422
+ .xterm-screen {
1423
+ width: 100% !important;
1424
+ }
1425
+
1426
+ .overlay-content {
1427
+ padding: 20px;
1428
+ max-width: 90%;
1429
+ }
1430
+ }
1431
+
1432
+ /* Extra small devices (phones in portrait) */
1433
+ @media (max-width: 480px) {
1434
+ .header {
1435
+ padding: 6px 8px;
1436
+ display: flex;
1437
+ flex-direction: row;
1438
+ align-items: center;
1439
+ }
1440
+
1441
+ .hamburger-btn {
1442
+ width: 40px;
1443
+ height: 40px;
1444
+ min-width: 40px;
1445
+ min-height: 40px;
1446
+ padding: 8px;
1447
+ }
1448
+
1449
+ .header-info {
1450
+ gap: 6px;
1451
+ }
1452
+
1453
+ .status {
1454
+ font-size: 10px;
1455
+ padding: 1px 4px;
1456
+ }
1457
+
1458
+ .working-dir {
1459
+ font-size: 10px;
1460
+ padding: 1px 4px;
1461
+ max-width: 120px;
1462
+ }
1463
+
1464
+ .btn {
1465
+ padding: 8px 12px;
1466
+ font-size: 11px;
1467
+ }
1468
+
1469
+ /* Extra terminal fixes for very small screens */
1470
+ #terminal {
1471
+ padding: 4px;
1472
+ }
1473
+
1474
+ /* Adjust main container */
1475
+ .main {
1476
+ padding: 0;
1477
+ margin: 0;
1478
+ }
1479
+
1480
+ body {
1481
+ overflow-x: hidden;
1482
+ }
1483
+ }
1484
+
1485
+ /* Mode Switcher Styles */
1486
+ .mode-switcher {
1487
+ position: fixed;
1488
+ bottom: 80px; /* Increased from 20px to avoid covering text input */
1489
+ right: 20px;
1490
+ z-index: 1000;
1491
+ display: none;
1492
+ flex-direction: column;
1493
+ gap: 10px;
1494
+ }
1495
+
1496
+ /* Show mode switcher on mobile devices */
1497
+ @media (max-width: 1024px) and (hover: none) and (pointer: coarse),
1498
+ (max-width: 768px) {
1499
+ .mode-switcher {
1500
+ display: flex;
1501
+ }
1502
+ }
1503
+
1504
+ .mode-switcher-btn {
1505
+ display: flex;
1506
+ align-items: center;
1507
+ justify-content: center;
1508
+ padding: 12px;
1509
+ background-color: var(--bg-secondary);
1510
+ color: var(--text-primary);
1511
+ border: 2px solid var(--border);
1512
+ border-radius: 50%;
1513
+ cursor: pointer;
1514
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
1515
+ transition: all 0.3s ease;
1516
+ width: 56px;
1517
+ height: 56px;
1518
+ }
1519
+
1520
+ .mode-switcher-btn:hover {
1521
+ background-color: var(--bg-tertiary);
1522
+ border-color: var(--accent);
1523
+ transform: translateY(-2px);
1524
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.4);
1525
+ }
1526
+
1527
+ .mode-switcher-btn:active {
1528
+ transform: translateY(0);
1529
+ }
1530
+
1531
+ .mode-switcher-btn.switching {
1532
+ animation: modeSwitchPulse 0.3s ease;
1533
+ }
1534
+
1535
+ @keyframes modeSwitchPulse {
1536
+ 0% {
1537
+ transform: scale(1);
1538
+ }
1539
+ 50% {
1540
+ transform: scale(0.95);
1541
+ background-color: var(--accent);
1542
+ }
1543
+ 100% {
1544
+ transform: scale(1);
1545
+ }
1546
+ }
1547
+
1548
+ .mode-switcher-btn svg {
1549
+ width: 24px;
1550
+ height: 24px;
1551
+ stroke: var(--accent);
1552
+ flex-shrink: 0;
1553
+ }
1554
+
1555
+ /* Add visual indicator for current mode */
1556
+ .mode-switcher-btn[data-mode="chat"] {
1557
+ border-color: var(--success);
1558
+ }
1559
+
1560
+ .mode-switcher-btn[data-mode="code"] {
1561
+ border-color: var(--accent);
1562
+ }
1563
+
1564
+ .mode-switcher-btn[data-mode="plan"] {
1565
+ border-color: var(--warning);
1566
+ }
1567
+
1568
+ /* Escape Button Styles */
1569
+ .escape-btn {
1570
+ display: flex;
1571
+ align-items: center;
1572
+ justify-content: center;
1573
+ padding: 12px;
1574
+ background-color: var(--bg-secondary);
1575
+ color: var(--text-primary);
1576
+ border: 2px solid var(--error);
1577
+ border-radius: 50%;
1578
+ cursor: pointer;
1579
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
1580
+ transition: all 0.3s ease;
1581
+ width: 56px;
1582
+ height: 56px;
1583
+ }
1584
+
1585
+ .escape-btn:hover {
1586
+ background-color: var(--bg-tertiary);
1587
+ border-color: #ff4444;
1588
+ transform: translateY(-2px);
1589
+ box-shadow: 0 6px 16px rgba(255, 68, 68, 0.2);
1590
+ }
1591
+
1592
+ .escape-btn:active {
1593
+ transform: translateY(0);
1594
+ }
1595
+
1596
+ .escape-btn.pressed {
1597
+ animation: escapeBtnPress 0.2s ease;
1598
+ }
1599
+
1600
+ @keyframes escapeBtnPress {
1601
+ 0% {
1602
+ transform: scale(1);
1603
+ }
1604
+ 50% {
1605
+ transform: scale(0.9);
1606
+ background-color: var(--error);
1607
+ }
1608
+ 100% {
1609
+ transform: scale(1);
1610
+ }
1611
+ }
1612
+
1613
+ .escape-btn svg {
1614
+ width: 24px;
1615
+ height: 24px;
1616
+ stroke: var(--error);
1617
+ flex-shrink: 0;
1618
+ }
1619
+
1620
+ /* Commands UI removed */