claude-remote-cli 0.1.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.
@@ -0,0 +1,803 @@
1
+ /* ===== CSS Variables ===== */
2
+ :root {
3
+ --bg: #1a1a1a;
4
+ --surface: #2b2b2b;
5
+ --accent: #d97757;
6
+ --text: #ececec;
7
+ --text-muted: #9b9b9b;
8
+ --border: #3d3d3d;
9
+ --sidebar-width: 240px;
10
+ --toolbar-height: auto;
11
+ }
12
+
13
+ /* ===== Reset & Base ===== */
14
+ [hidden] {
15
+ display: none !important;
16
+ }
17
+
18
+ *, *::before, *::after {
19
+ box-sizing: border-box;
20
+ margin: 0;
21
+ padding: 0;
22
+ }
23
+
24
+ html, body {
25
+ height: 100%;
26
+ overflow: hidden;
27
+ background: var(--bg);
28
+ color: var(--text);
29
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
30
+ font-size: 15px;
31
+ }
32
+
33
+ /* ===== PIN Gate ===== */
34
+ #pin-gate {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ height: 100vh;
39
+ background: var(--bg);
40
+ padding: 1rem;
41
+ }
42
+
43
+ .pin-container {
44
+ display: flex;
45
+ flex-direction: column;
46
+ align-items: center;
47
+ gap: 1rem;
48
+ width: 100%;
49
+ max-width: 320px;
50
+ text-align: center;
51
+ }
52
+
53
+ .pin-container h1 {
54
+ font-size: 1.5rem;
55
+ color: var(--text);
56
+ }
57
+
58
+ .pin-container p {
59
+ color: var(--text-muted);
60
+ font-size: 0.95rem;
61
+ }
62
+
63
+ #pin-input {
64
+ width: 100%;
65
+ padding: 14px 16px;
66
+ background: var(--surface);
67
+ border: 1px solid var(--border);
68
+ border-radius: 8px;
69
+ color: var(--text);
70
+ font-size: 1.2rem;
71
+ text-align: center;
72
+ outline: none;
73
+ -webkit-appearance: none;
74
+ }
75
+
76
+ #pin-input:focus {
77
+ border-color: var(--accent);
78
+ }
79
+
80
+ #pin-submit {
81
+ width: 100%;
82
+ padding: 14px;
83
+ background: var(--accent);
84
+ color: #fff;
85
+ border: none;
86
+ border-radius: 8px;
87
+ font-size: 1rem;
88
+ font-weight: 600;
89
+ cursor: pointer;
90
+ touch-action: manipulation;
91
+ }
92
+
93
+ #pin-submit:active {
94
+ opacity: 0.8;
95
+ }
96
+
97
+ .error {
98
+ color: var(--accent);
99
+ font-size: 0.9rem;
100
+ }
101
+
102
+ /* ===== Main App Layout ===== */
103
+ #main-app {
104
+ display: flex;
105
+ flex-direction: row;
106
+ width: 100%;
107
+ height: 100vh;
108
+ overflow: hidden;
109
+ }
110
+
111
+ #sidebar-overlay {
112
+ display: none;
113
+ }
114
+
115
+ /* ===== Sidebar ===== */
116
+ #sidebar {
117
+ display: flex;
118
+ flex-direction: column;
119
+ width: var(--sidebar-width);
120
+ min-width: var(--sidebar-width);
121
+ background: var(--surface);
122
+ border-right: 1px solid var(--border);
123
+ overflow: hidden;
124
+ transition: transform 0.25s ease;
125
+ z-index: 100;
126
+ }
127
+
128
+ .sidebar-header {
129
+ display: flex;
130
+ align-items: center;
131
+ justify-content: space-between;
132
+ padding: 12px 10px;
133
+ border-bottom: 1px solid var(--border);
134
+ flex-shrink: 0;
135
+ }
136
+
137
+ .sidebar-label {
138
+ font-size: 0.85rem;
139
+ font-weight: 600;
140
+ color: var(--text-muted);
141
+ text-transform: uppercase;
142
+ letter-spacing: 0.05em;
143
+ }
144
+
145
+ .icon-btn {
146
+ background: none;
147
+ border: none;
148
+ color: var(--text);
149
+ font-size: 1.2rem;
150
+ cursor: pointer;
151
+ padding: 4px 6px;
152
+ border-radius: 4px;
153
+ touch-action: manipulation;
154
+ display: none; /* shown on mobile */
155
+ }
156
+
157
+ .icon-btn:active {
158
+ background: var(--border);
159
+ }
160
+
161
+ .sidebar-filters {
162
+ display: flex;
163
+ flex-direction: column;
164
+ gap: 4px;
165
+ padding: 6px 8px;
166
+ flex-shrink: 0;
167
+ }
168
+
169
+ .sidebar-filters select {
170
+ padding: 6px 8px;
171
+ background: var(--bg);
172
+ border: 1px solid var(--border);
173
+ border-radius: 6px;
174
+ color: var(--text);
175
+ font-size: 0.75rem;
176
+ outline: none;
177
+ -webkit-appearance: none;
178
+ appearance: none;
179
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23aaa' fill='none' stroke-width='1.5'/%3E%3C/svg%3E");
180
+ background-repeat: no-repeat;
181
+ background-position: right 8px center;
182
+ cursor: pointer;
183
+ }
184
+
185
+ .sidebar-filters select:focus {
186
+ border-color: var(--accent);
187
+ }
188
+
189
+ .sidebar-filters input {
190
+ padding: 6px 8px;
191
+ background: var(--bg);
192
+ border: 1px solid var(--border);
193
+ border-radius: 6px;
194
+ color: var(--text);
195
+ font-size: 0.75rem;
196
+ outline: none;
197
+ -webkit-appearance: none;
198
+ }
199
+
200
+ .sidebar-filters input:focus {
201
+ border-color: var(--accent);
202
+ }
203
+
204
+ #session-list {
205
+ list-style: none;
206
+ flex: 1;
207
+ overflow-y: auto;
208
+ padding: 8px 0;
209
+ }
210
+
211
+ #session-list li {
212
+ display: flex;
213
+ align-items: flex-start;
214
+ justify-content: space-between;
215
+ gap: 4px;
216
+ padding: 8px 10px;
217
+ cursor: pointer;
218
+ border-radius: 6px;
219
+ margin: 2px 6px;
220
+ font-size: 0.8rem;
221
+ color: var(--text-muted);
222
+ touch-action: manipulation;
223
+ transition: background 0.15s, border-color 0.15s;
224
+ }
225
+
226
+ /* Active session (filled) */
227
+ #session-list li.active-session {
228
+ background: var(--bg);
229
+ }
230
+
231
+ #session-list li.active-session:hover {
232
+ background: var(--border);
233
+ }
234
+
235
+ #session-list li.active-session.active {
236
+ background: var(--accent);
237
+ color: #fff;
238
+ }
239
+
240
+ #session-list li.active-session.active .session-sub {
241
+ color: rgba(255, 255, 255, 0.7);
242
+ }
243
+
244
+ /* Inactive worktree (outline) */
245
+ #session-list li.inactive-worktree {
246
+ background: transparent;
247
+ border: 1px solid var(--border);
248
+ color: var(--text-muted);
249
+ opacity: 0.7;
250
+ }
251
+
252
+ #session-list li.inactive-worktree:hover {
253
+ opacity: 1;
254
+ border-color: var(--accent);
255
+ }
256
+
257
+ .session-info {
258
+ display: flex;
259
+ flex-direction: column;
260
+ gap: 2px;
261
+ min-width: 0;
262
+ flex: 1;
263
+ }
264
+
265
+ .session-name {
266
+ min-width: 0;
267
+ overflow: hidden;
268
+ text-overflow: ellipsis;
269
+ white-space: nowrap;
270
+ font-weight: 500;
271
+ color: var(--text);
272
+ }
273
+
274
+ .session-sub {
275
+ font-size: 0.7rem;
276
+ color: var(--text-muted);
277
+ overflow: hidden;
278
+ text-overflow: ellipsis;
279
+ white-space: nowrap;
280
+ }
281
+
282
+ .session-actions {
283
+ display: flex;
284
+ align-items: center;
285
+ gap: 2px;
286
+ flex-shrink: 0;
287
+ }
288
+
289
+ /* Divider between active and inactive */
290
+ .session-divider {
291
+ font-size: 0.65rem;
292
+ font-weight: 600;
293
+ color: var(--text-muted);
294
+ text-transform: uppercase;
295
+ letter-spacing: 0.05em;
296
+ padding: 8px 12px 4px;
297
+ opacity: 0.6;
298
+ }
299
+
300
+ .session-kill {
301
+ background: none;
302
+ border: none;
303
+ color: var(--text-muted);
304
+ font-size: 1.1rem;
305
+ cursor: pointer;
306
+ padding: 2px 6px;
307
+ border-radius: 4px;
308
+ touch-action: manipulation;
309
+ flex-shrink: 0;
310
+ }
311
+
312
+ .session-kill:hover,
313
+ .session-kill:active {
314
+ color: var(--accent);
315
+ background: rgba(217, 119, 87, 0.15);
316
+ }
317
+
318
+ .session-rename-btn {
319
+ background: none;
320
+ border: none;
321
+ color: var(--text-muted);
322
+ font-size: 0.75rem;
323
+ cursor: pointer;
324
+ padding: 2px 4px;
325
+ border-radius: 4px;
326
+ touch-action: manipulation;
327
+ flex-shrink: 0;
328
+ }
329
+
330
+ .session-rename-btn:hover {
331
+ color: var(--accent);
332
+ }
333
+
334
+ .session-rename-input {
335
+ background: var(--bg);
336
+ border: 1px solid var(--accent);
337
+ border-radius: 4px;
338
+ color: var(--text);
339
+ font-size: 0.8rem;
340
+ padding: 2px 6px;
341
+ outline: none;
342
+ width: 100%;
343
+ font-weight: 500;
344
+ }
345
+
346
+ #new-session-btn {
347
+ margin: 8px;
348
+ padding: 10px 12px;
349
+ background: none;
350
+ border: 1px solid var(--border);
351
+ border-radius: 6px;
352
+ color: var(--text);
353
+ font-size: 0.875rem;
354
+ cursor: pointer;
355
+ touch-action: manipulation;
356
+ text-align: center;
357
+ flex-shrink: 0;
358
+ }
359
+
360
+ #new-session-btn:active {
361
+ background: var(--border);
362
+ }
363
+
364
+ #settings-btn {
365
+ margin: 0 8px 8px;
366
+ padding: 10px 12px;
367
+ background: none;
368
+ border: 1px solid var(--border);
369
+ border-radius: 6px;
370
+ color: var(--text-muted);
371
+ font-size: 0.8rem;
372
+ cursor: pointer;
373
+ touch-action: manipulation;
374
+ text-align: center;
375
+ flex-shrink: 0;
376
+ }
377
+
378
+ #settings-btn:active {
379
+ background: var(--border);
380
+ }
381
+
382
+ /* ===== Terminal Area ===== */
383
+ #terminal-area {
384
+ flex: 1;
385
+ display: flex;
386
+ flex-direction: column;
387
+ min-width: 0;
388
+ overflow: hidden;
389
+ position: relative;
390
+ }
391
+
392
+ #mobile-header {
393
+ display: none; /* shown on mobile */
394
+ }
395
+
396
+ #terminal-container {
397
+ flex: 1;
398
+ overflow: hidden;
399
+ background: #000;
400
+ }
401
+
402
+ #terminal-container .xterm {
403
+ height: 100%;
404
+ }
405
+
406
+ #no-session-msg {
407
+ position: absolute;
408
+ top: 50%;
409
+ left: 50%;
410
+ transform: translate(-50%, -50%);
411
+ color: var(--text-muted);
412
+ font-size: 0.95rem;
413
+ text-align: center;
414
+ pointer-events: none;
415
+ }
416
+
417
+ /* ===== Touch Toolbar ===== */
418
+ #toolbar {
419
+ display: flex;
420
+ flex-direction: column;
421
+ gap: 4px;
422
+ padding: 6px 4px;
423
+ background: var(--surface);
424
+ border-top: 1px solid var(--border);
425
+ flex-shrink: 0;
426
+ }
427
+
428
+ .toolbar-row {
429
+ display: flex;
430
+ flex-direction: row;
431
+ gap: 4px;
432
+ }
433
+
434
+ .tb-btn {
435
+ flex: 1;
436
+ padding: 12px 4px;
437
+ background: var(--bg);
438
+ border: 1px solid var(--border);
439
+ border-radius: 6px;
440
+ color: var(--text);
441
+ font-size: 0.8rem;
442
+ font-family: monospace;
443
+ cursor: pointer;
444
+ touch-action: manipulation;
445
+ -webkit-tap-highlight-color: transparent;
446
+ text-align: center;
447
+ white-space: nowrap;
448
+ overflow: hidden;
449
+ text-overflow: ellipsis;
450
+ min-width: 0;
451
+ }
452
+
453
+ .tb-btn:active {
454
+ background: var(--accent);
455
+ border-color: var(--accent);
456
+ color: #fff;
457
+ }
458
+
459
+ /* ===== Dialog ===== */
460
+ dialog#new-session-dialog {
461
+ background: var(--surface);
462
+ border: 1px solid var(--border);
463
+ border-radius: 12px;
464
+ color: var(--text);
465
+ padding: 1.5rem;
466
+ width: 90%;
467
+ max-width: 400px;
468
+ max-height: 80vh;
469
+ overflow-y: auto;
470
+ margin: auto;
471
+ }
472
+
473
+ dialog#new-session-dialog::backdrop {
474
+ background: rgba(0, 0, 0, 0.7);
475
+ }
476
+
477
+ dialog#new-session-dialog h2 {
478
+ font-size: 1.1rem;
479
+ margin-bottom: 1rem;
480
+ }
481
+
482
+ .dialog-field {
483
+ display: flex;
484
+ flex-direction: column;
485
+ gap: 4px;
486
+ margin-bottom: 12px;
487
+ }
488
+
489
+ .dialog-field label,
490
+ .dialog-field-label {
491
+ font-size: 0.8rem;
492
+ font-weight: 600;
493
+ color: var(--text-muted);
494
+ text-transform: uppercase;
495
+ letter-spacing: 0.05em;
496
+ }
497
+
498
+ .dialog-field select {
499
+ padding: 10px 12px;
500
+ background: var(--bg);
501
+ border: 1px solid var(--border);
502
+ border-radius: 6px;
503
+ color: var(--text);
504
+ font-size: 0.875rem;
505
+ outline: none;
506
+ -webkit-appearance: none;
507
+ appearance: none;
508
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23aaa' fill='none' stroke-width='1.5'/%3E%3C/svg%3E");
509
+ background-repeat: no-repeat;
510
+ background-position: right 12px center;
511
+ cursor: pointer;
512
+ }
513
+
514
+ .dialog-field select:focus {
515
+ border-color: var(--accent);
516
+ }
517
+
518
+ .dialog-field select:disabled {
519
+ opacity: 0.5;
520
+ cursor: not-allowed;
521
+ }
522
+
523
+ .repo-group-label {
524
+ font-size: 0.75rem;
525
+ font-weight: 600;
526
+ color: var(--text-muted);
527
+ text-transform: uppercase;
528
+ letter-spacing: 0.05em;
529
+ padding: 6px 4px 2px;
530
+ }
531
+
532
+ .repo-item {
533
+ padding: 10px 12px;
534
+ background: var(--bg);
535
+ border: 1px solid var(--border);
536
+ border-radius: 6px;
537
+ color: var(--text);
538
+ cursor: pointer;
539
+ font-size: 0.875rem;
540
+ touch-action: manipulation;
541
+ text-align: left;
542
+ width: 100%;
543
+ }
544
+
545
+ .repo-item:active,
546
+ .repo-item.selected {
547
+ border-color: var(--accent);
548
+ color: var(--accent);
549
+ }
550
+
551
+ .dialog-separator {
552
+ border: none;
553
+ border-top: 1px solid var(--border);
554
+ margin: 0.75rem 0;
555
+ }
556
+
557
+ .dialog-custom-path {
558
+ display: flex;
559
+ flex-direction: column;
560
+ gap: 6px;
561
+ margin-bottom: 1rem;
562
+ }
563
+
564
+ .dialog-custom-path label {
565
+ font-size: 0.85rem;
566
+ color: var(--text-muted);
567
+ }
568
+
569
+ .dialog-custom-path input {
570
+ padding: 10px 12px;
571
+ background: var(--bg);
572
+ border: 1px solid var(--border);
573
+ border-radius: 6px;
574
+ color: var(--text);
575
+ font-size: 0.9rem;
576
+ outline: none;
577
+ -webkit-appearance: none;
578
+ }
579
+
580
+ .dialog-custom-path input:focus {
581
+ border-color: var(--accent);
582
+ }
583
+
584
+ .dialog-actions {
585
+ display: flex;
586
+ gap: 8px;
587
+ justify-content: flex-end;
588
+ }
589
+
590
+ .dialog-actions button {
591
+ padding: 10px 18px;
592
+ border-radius: 6px;
593
+ border: 1px solid var(--border);
594
+ background: var(--bg);
595
+ color: var(--text);
596
+ font-size: 0.9rem;
597
+ cursor: pointer;
598
+ touch-action: manipulation;
599
+ }
600
+
601
+ .dialog-actions button:active {
602
+ background: var(--border);
603
+ }
604
+
605
+ /* ===== Settings Dialog ===== */
606
+ dialog#settings-dialog {
607
+ background: var(--surface);
608
+ border: 1px solid var(--border);
609
+ border-radius: 12px;
610
+ color: var(--text);
611
+ padding: 1.5rem;
612
+ width: 90%;
613
+ max-width: 500px;
614
+ max-height: 80vh;
615
+ overflow-y: auto;
616
+ margin: auto;
617
+ }
618
+
619
+ dialog#settings-dialog::backdrop {
620
+ background: rgba(0, 0, 0, 0.7);
621
+ }
622
+
623
+ dialog#settings-dialog h2 {
624
+ font-size: 1.1rem;
625
+ margin-bottom: 1rem;
626
+ }
627
+
628
+ .settings-label {
629
+ display: block;
630
+ font-size: 0.85rem;
631
+ font-weight: 600;
632
+ color: var(--text-muted);
633
+ text-transform: uppercase;
634
+ letter-spacing: 0.05em;
635
+ margin-bottom: 8px;
636
+ }
637
+
638
+ .settings-hint {
639
+ font-size: 0.8rem;
640
+ color: var(--text-muted);
641
+ margin-bottom: 8px;
642
+ }
643
+
644
+ #settings-roots-list {
645
+ display: flex;
646
+ flex-direction: column;
647
+ gap: 4px;
648
+ margin-bottom: 8px;
649
+ }
650
+
651
+ .settings-repo-item {
652
+ display: flex;
653
+ align-items: center;
654
+ justify-content: space-between;
655
+ gap: 8px;
656
+ padding: 8px 10px;
657
+ background: var(--bg);
658
+ border: 1px solid var(--border);
659
+ border-radius: 6px;
660
+ font-size: 0.8rem;
661
+ }
662
+
663
+ .settings-repo-item .repo-path {
664
+ flex: 1;
665
+ min-width: 0;
666
+ overflow: hidden;
667
+ text-overflow: ellipsis;
668
+ white-space: nowrap;
669
+ color: var(--text-muted);
670
+ font-family: monospace;
671
+ }
672
+
673
+ .settings-repo-item .remove-repo {
674
+ background: none;
675
+ border: none;
676
+ color: var(--text-muted);
677
+ font-size: 1rem;
678
+ cursor: pointer;
679
+ padding: 2px 6px;
680
+ border-radius: 4px;
681
+ flex-shrink: 0;
682
+ }
683
+
684
+ .settings-repo-item .remove-repo:hover,
685
+ .settings-repo-item .remove-repo:active {
686
+ color: var(--accent);
687
+ }
688
+
689
+ .settings-add-repo {
690
+ display: flex;
691
+ gap: 6px;
692
+ }
693
+
694
+ .settings-add-repo input {
695
+ flex: 1;
696
+ padding: 8px 10px;
697
+ background: var(--bg);
698
+ border: 1px solid var(--border);
699
+ border-radius: 6px;
700
+ color: var(--text);
701
+ font-size: 0.85rem;
702
+ font-family: monospace;
703
+ outline: none;
704
+ -webkit-appearance: none;
705
+ }
706
+
707
+ .settings-add-repo input:focus {
708
+ border-color: var(--accent);
709
+ }
710
+
711
+ .settings-add-repo button {
712
+ padding: 8px 14px;
713
+ font-size: 0.85rem;
714
+ flex-shrink: 0;
715
+ }
716
+
717
+ .settings-section {
718
+ margin-bottom: 1rem;
719
+ }
720
+
721
+ .btn-accent {
722
+ background: var(--accent) !important;
723
+ border-color: var(--accent) !important;
724
+ color: #fff !important;
725
+ }
726
+
727
+ .btn-accent:active {
728
+ opacity: 0.85;
729
+ }
730
+
731
+ /* ===== Mobile Responsive ===== */
732
+ @media (max-width: 600px) {
733
+ #mobile-header {
734
+ display: flex;
735
+ align-items: center;
736
+ gap: 8px;
737
+ padding: 8px 10px;
738
+ background: var(--surface);
739
+ border-bottom: 1px solid var(--border);
740
+ flex-shrink: 0;
741
+ }
742
+
743
+ #mobile-header .icon-btn {
744
+ display: block;
745
+ font-size: 1.4rem;
746
+ padding: 4px 8px;
747
+ }
748
+
749
+ .mobile-title {
750
+ font-size: 0.85rem;
751
+ font-weight: 600;
752
+ color: var(--text-muted);
753
+ }
754
+
755
+ #sidebar {
756
+ position: fixed;
757
+ top: 0;
758
+ left: 0;
759
+ height: 100%;
760
+ transform: translateX(-100%);
761
+ box-shadow: 2px 0 12px rgba(0, 0, 0, 0.5);
762
+ }
763
+
764
+ #sidebar.open {
765
+ transform: translateX(0);
766
+ }
767
+
768
+ /* Overlay when sidebar is open */
769
+ #sidebar-overlay {
770
+ display: none;
771
+ position: fixed;
772
+ inset: 0;
773
+ background: rgba(0, 0, 0, 0.5);
774
+ z-index: 99;
775
+ }
776
+
777
+ #sidebar-overlay.visible {
778
+ display: block;
779
+ }
780
+
781
+ #terminal-area {
782
+ width: 100%;
783
+ }
784
+
785
+ .tb-btn {
786
+ padding: 14px 2px;
787
+ font-size: 0.75rem;
788
+ }
789
+ }
790
+
791
+ /* ===== Scrollbar ===== */
792
+ ::-webkit-scrollbar {
793
+ width: 4px;
794
+ }
795
+
796
+ ::-webkit-scrollbar-track {
797
+ background: transparent;
798
+ }
799
+
800
+ ::-webkit-scrollbar-thumb {
801
+ background: var(--border);
802
+ border-radius: 4px;
803
+ }