@mjasano/devtunnel 1.2.0 → 1.5.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,1212 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ body {
8
+ background-color: #0d1117;
9
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
10
+ height: 100vh;
11
+ display: flex;
12
+ flex-direction: column;
13
+ color: #c9d1d9;
14
+ }
15
+
16
+ .header {
17
+ background-color: #161b22;
18
+ padding: 12px 20px;
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: space-between;
22
+ border-bottom: 1px solid #30363d;
23
+ }
24
+
25
+ .header h1 {
26
+ color: #fff;
27
+ font-size: 18px;
28
+ font-weight: 600;
29
+ display: flex;
30
+ align-items: center;
31
+ gap: 10px;
32
+ }
33
+
34
+ .header h1 .logo {
35
+ width: 24px;
36
+ height: 24px;
37
+ background: linear-gradient(135deg, #58a6ff, #8b5cf6);
38
+ border-radius: 6px;
39
+ }
40
+
41
+ .header-right {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: 16px;
45
+ }
46
+
47
+ .system-info {
48
+ display: flex;
49
+ align-items: center;
50
+ gap: 12px;
51
+ padding: 4px 10px;
52
+ background-color: #21262d;
53
+ border-radius: 6px;
54
+ font-size: 11px;
55
+ font-family: monospace;
56
+ }
57
+
58
+ .system-stat {
59
+ display: flex;
60
+ align-items: center;
61
+ gap: 4px;
62
+ color: #8b949e;
63
+ }
64
+
65
+ .system-stat .stat-icon {
66
+ color: #6e7681;
67
+ font-size: 10px;
68
+ }
69
+
70
+ .system-stat span:last-child {
71
+ color: #c9d1d9;
72
+ }
73
+
74
+ .session-indicator {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 8px;
78
+ padding: 6px 12px;
79
+ background-color: #21262d;
80
+ border-radius: 6px;
81
+ font-size: 12px;
82
+ color: #8b949e;
83
+ }
84
+
85
+ .session-indicator .dot {
86
+ width: 8px;
87
+ height: 8px;
88
+ border-radius: 50%;
89
+ background-color: #3fb950;
90
+ }
91
+
92
+ .status {
93
+ display: flex;
94
+ align-items: center;
95
+ gap: 8px;
96
+ color: #8b949e;
97
+ font-size: 13px;
98
+ }
99
+
100
+ .status-dot {
101
+ width: 8px;
102
+ height: 8px;
103
+ border-radius: 50%;
104
+ background-color: #f85149;
105
+ }
106
+
107
+ .status-dot.connected {
108
+ background-color: #3fb950;
109
+ }
110
+
111
+ .btn-logout {
112
+ padding: 6px 12px;
113
+ background-color: transparent;
114
+ color: #8b949e;
115
+ border: 1px solid #30363d;
116
+ border-radius: 6px;
117
+ font-size: 12px;
118
+ cursor: pointer;
119
+ transition: all 0.15s ease;
120
+ }
121
+
122
+ .btn-logout:hover {
123
+ background-color: #21262d;
124
+ color: #c9d1d9;
125
+ border-color: #8b949e;
126
+ }
127
+
128
+ .main-container {
129
+ flex: 1;
130
+ display: flex;
131
+ overflow: hidden;
132
+ }
133
+
134
+ #terminal-container {
135
+ flex: 1;
136
+ padding: 10px;
137
+ background-color: #0d1117;
138
+ overflow: hidden;
139
+ }
140
+
141
+ #terminal {
142
+ height: 100%;
143
+ }
144
+
145
+ .sidebar {
146
+ position: relative;
147
+ width: 320px;
148
+ background-color: #161b22;
149
+ border-left: 1px solid #30363d;
150
+ display: flex;
151
+ flex-direction: column;
152
+ }
153
+
154
+ .sidebar-section {
155
+ border-bottom: 1px solid #30363d;
156
+ }
157
+
158
+ .sidebar-header {
159
+ padding: 12px 16px;
160
+ display: flex;
161
+ align-items: center;
162
+ justify-content: space-between;
163
+ cursor: pointer;
164
+ }
165
+
166
+ .sidebar-header:hover {
167
+ background-color: #21262d;
168
+ }
169
+
170
+ .sidebar-header h2 {
171
+ font-size: 13px;
172
+ font-weight: 600;
173
+ color: #c9d1d9;
174
+ text-transform: uppercase;
175
+ letter-spacing: 0.5px;
176
+ }
177
+
178
+ .sidebar-header .count {
179
+ background-color: #30363d;
180
+ padding: 2px 8px;
181
+ border-radius: 10px;
182
+ font-size: 11px;
183
+ color: #8b949e;
184
+ }
185
+
186
+ .sidebar-content {
187
+ padding: 8px;
188
+ max-height: 200px;
189
+ overflow-y: auto;
190
+ }
191
+
192
+ .tunnel-form {
193
+ padding: 12px;
194
+ display: flex;
195
+ gap: 8px;
196
+ }
197
+
198
+ .tunnel-form input {
199
+ flex: 1;
200
+ padding: 8px 12px;
201
+ background-color: #0d1117;
202
+ border: 1px solid #30363d;
203
+ border-radius: 6px;
204
+ color: #c9d1d9;
205
+ font-size: 13px;
206
+ }
207
+
208
+ .tunnel-form input:focus {
209
+ outline: none;
210
+ border-color: #58a6ff;
211
+ }
212
+
213
+ .tunnel-form input::placeholder {
214
+ color: #6e7681;
215
+ }
216
+
217
+ .btn {
218
+ padding: 8px 16px;
219
+ border-radius: 6px;
220
+ border: none;
221
+ font-size: 13px;
222
+ font-weight: 500;
223
+ cursor: pointer;
224
+ transition: all 0.15s ease;
225
+ }
226
+
227
+ .btn-primary {
228
+ background-color: #238636;
229
+ color: #fff;
230
+ }
231
+
232
+ .btn-primary:hover {
233
+ background-color: #2ea043;
234
+ }
235
+
236
+ .btn-primary:disabled {
237
+ background-color: #21262d;
238
+ color: #484f58;
239
+ cursor: not-allowed;
240
+ }
241
+
242
+ .btn-sm {
243
+ padding: 4px 8px;
244
+ font-size: 12px;
245
+ }
246
+
247
+ .btn-danger {
248
+ background-color: transparent;
249
+ color: #f85149;
250
+ }
251
+
252
+ .btn-danger:hover {
253
+ background-color: rgba(248, 81, 73, 0.1);
254
+ }
255
+
256
+ .btn-ghost {
257
+ background-color: transparent;
258
+ color: #8b949e;
259
+ }
260
+
261
+ .btn-ghost:hover {
262
+ background-color: #21262d;
263
+ color: #c9d1d9;
264
+ }
265
+
266
+ .item-card {
267
+ background-color: #0d1117;
268
+ border: 1px solid #30363d;
269
+ border-radius: 8px;
270
+ padding: 10px 12px;
271
+ margin-bottom: 8px;
272
+ }
273
+
274
+ .item-card.active {
275
+ border-color: #58a6ff;
276
+ }
277
+
278
+ .item-card-header {
279
+ display: flex;
280
+ align-items: center;
281
+ justify-content: space-between;
282
+ margin-bottom: 6px;
283
+ }
284
+
285
+ .item-title {
286
+ font-weight: 600;
287
+ font-size: 13px;
288
+ display: flex;
289
+ align-items: center;
290
+ gap: 8px;
291
+ }
292
+
293
+ .item-status {
294
+ font-size: 10px;
295
+ padding: 2px 6px;
296
+ border-radius: 10px;
297
+ font-weight: 500;
298
+ }
299
+
300
+ .item-status.active {
301
+ background-color: rgba(46, 160, 67, 0.2);
302
+ color: #3fb950;
303
+ }
304
+
305
+ .item-status.connecting {
306
+ background-color: rgba(187, 128, 9, 0.2);
307
+ color: #d29922;
308
+ }
309
+
310
+ .item-status.error, .item-status.stopped {
311
+ background-color: rgba(110, 118, 129, 0.2);
312
+ color: #8b949e;
313
+ }
314
+
315
+ .item-meta {
316
+ font-size: 11px;
317
+ color: #6e7681;
318
+ }
319
+
320
+ .item-url {
321
+ display: flex;
322
+ align-items: center;
323
+ gap: 6px;
324
+ margin-top: 8px;
325
+ }
326
+
327
+ .item-url input {
328
+ flex: 1;
329
+ padding: 5px 8px;
330
+ background-color: #161b22;
331
+ border: 1px solid #30363d;
332
+ border-radius: 4px;
333
+ color: #58a6ff;
334
+ font-size: 11px;
335
+ font-family: monospace;
336
+ }
337
+
338
+ .item-url input:focus {
339
+ outline: none;
340
+ }
341
+
342
+ .btn-copy {
343
+ padding: 5px 8px;
344
+ background-color: #21262d;
345
+ color: #c9d1d9;
346
+ border: 1px solid #30363d;
347
+ border-radius: 4px;
348
+ font-size: 11px;
349
+ cursor: pointer;
350
+ }
351
+
352
+ .btn-copy:hover {
353
+ background-color: #30363d;
354
+ }
355
+
356
+ .btn-copy.copied {
357
+ background-color: #238636;
358
+ border-color: #238636;
359
+ }
360
+
361
+ .empty-state {
362
+ padding: 24px 16px;
363
+ text-align: center;
364
+ color: #6e7681;
365
+ font-size: 12px;
366
+ }
367
+
368
+ .reconnect-overlay {
369
+ position: fixed;
370
+ top: 0;
371
+ left: 0;
372
+ right: 0;
373
+ bottom: 0;
374
+ background-color: rgba(0, 0, 0, 0.8);
375
+ display: none;
376
+ justify-content: center;
377
+ align-items: center;
378
+ z-index: 1000;
379
+ }
380
+
381
+ .reconnect-overlay.show {
382
+ display: flex;
383
+ }
384
+
385
+ .reconnect-box {
386
+ background-color: #161b22;
387
+ padding: 30px 40px;
388
+ border-radius: 12px;
389
+ text-align: center;
390
+ border: 1px solid #30363d;
391
+ }
392
+
393
+ .reconnect-box h2 {
394
+ color: #fff;
395
+ margin-bottom: 12px;
396
+ font-size: 18px;
397
+ }
398
+
399
+ .reconnect-box p {
400
+ color: #8b949e;
401
+ margin-bottom: 20px;
402
+ font-size: 14px;
403
+ }
404
+
405
+ .reconnect-btn {
406
+ background-color: #238636;
407
+ color: #fff;
408
+ border: none;
409
+ padding: 10px 24px;
410
+ border-radius: 6px;
411
+ cursor: pointer;
412
+ font-size: 14px;
413
+ font-weight: 500;
414
+ }
415
+
416
+ .reconnect-btn:hover {
417
+ background-color: #2ea043;
418
+ }
419
+
420
+ .toast {
421
+ position: fixed;
422
+ bottom: 20px;
423
+ right: 340px;
424
+ background-color: #161b22;
425
+ border: 1px solid #30363d;
426
+ padding: 12px 16px;
427
+ border-radius: 8px;
428
+ display: none;
429
+ align-items: center;
430
+ gap: 10px;
431
+ z-index: 1001;
432
+ animation: slideIn 0.3s ease;
433
+ }
434
+
435
+ .toast.show {
436
+ display: flex;
437
+ }
438
+
439
+ .toast.success {
440
+ border-color: #238636;
441
+ }
442
+
443
+ .toast.error {
444
+ border-color: #f85149;
445
+ }
446
+
447
+ /* Tab Bar */
448
+ .tab-bar {
449
+ display: flex;
450
+ background-color: #161b22;
451
+ border-bottom: 1px solid #30363d;
452
+ padding: 0 12px;
453
+ }
454
+
455
+ .tab {
456
+ padding: 10px 20px;
457
+ font-size: 13px;
458
+ color: #8b949e;
459
+ cursor: pointer;
460
+ border-bottom: 2px solid transparent;
461
+ transition: all 0.15s ease;
462
+ display: flex;
463
+ align-items: center;
464
+ gap: 8px;
465
+ }
466
+
467
+ .tab:hover {
468
+ color: #c9d1d9;
469
+ background-color: #21262d;
470
+ }
471
+
472
+ .tab.active {
473
+ color: #c9d1d9;
474
+ border-bottom-color: #58a6ff;
475
+ }
476
+
477
+ .tab-icon {
478
+ font-size: 14px;
479
+ }
480
+
481
+ /* Editor Container */
482
+ #editor-container {
483
+ flex: 1;
484
+ display: none;
485
+ flex-direction: column;
486
+ background-color: #0d1117;
487
+ overflow: hidden;
488
+ }
489
+
490
+ #editor-container.active {
491
+ display: flex;
492
+ }
493
+
494
+ #terminal-container.hidden {
495
+ display: none;
496
+ }
497
+
498
+ /* Terminal Tabs */
499
+ .terminal-tabs {
500
+ display: flex;
501
+ background-color: #161b22;
502
+ border-bottom: 1px solid #30363d;
503
+ overflow-x: auto;
504
+ min-height: 35px;
505
+ align-items: center;
506
+ }
507
+
508
+ .terminal-tab {
509
+ display: flex;
510
+ align-items: center;
511
+ gap: 8px;
512
+ padding: 8px 12px;
513
+ font-size: 12px;
514
+ color: #8b949e;
515
+ background-color: #0d1117;
516
+ border-right: 1px solid #30363d;
517
+ cursor: pointer;
518
+ white-space: nowrap;
519
+ }
520
+
521
+ .terminal-tab:hover {
522
+ background-color: #161b22;
523
+ }
524
+
525
+ .terminal-tab.active {
526
+ color: #c9d1d9;
527
+ background-color: #161b22;
528
+ }
529
+
530
+ .terminal-tab-close {
531
+ width: 16px;
532
+ height: 16px;
533
+ display: flex;
534
+ align-items: center;
535
+ justify-content: center;
536
+ border-radius: 4px;
537
+ font-size: 14px;
538
+ line-height: 1;
539
+ }
540
+
541
+ .terminal-tab-close:hover {
542
+ background-color: #30363d;
543
+ }
544
+
545
+ .terminal-tab-new {
546
+ width: 28px;
547
+ height: 28px;
548
+ margin: 0 4px;
549
+ background-color: transparent;
550
+ border: 1px solid #30363d;
551
+ border-radius: 4px;
552
+ color: #8b949e;
553
+ font-size: 16px;
554
+ cursor: pointer;
555
+ display: flex;
556
+ align-items: center;
557
+ justify-content: center;
558
+ }
559
+
560
+ .terminal-tab-new:hover {
561
+ background-color: #21262d;
562
+ color: #c9d1d9;
563
+ }
564
+
565
+ .terminal-tab .tmux-badge {
566
+ color: #3fb950;
567
+ font-size: 10px;
568
+ }
569
+
570
+ .editor-tabs {
571
+ display: flex;
572
+ background-color: #161b22;
573
+ border-bottom: 1px solid #30363d;
574
+ overflow-x: auto;
575
+ min-height: 35px;
576
+ }
577
+
578
+ .editor-tab {
579
+ display: flex;
580
+ align-items: center;
581
+ gap: 8px;
582
+ padding: 8px 12px;
583
+ font-size: 12px;
584
+ color: #8b949e;
585
+ background-color: #0d1117;
586
+ border-right: 1px solid #30363d;
587
+ cursor: pointer;
588
+ white-space: nowrap;
589
+ }
590
+
591
+ .editor-tab:hover {
592
+ background-color: #161b22;
593
+ }
594
+
595
+ .editor-tab.active {
596
+ color: #c9d1d9;
597
+ background-color: #161b22;
598
+ }
599
+
600
+ .editor-tab.modified::after {
601
+ content: '';
602
+ width: 6px;
603
+ height: 6px;
604
+ background-color: #d29922;
605
+ border-radius: 50%;
606
+ }
607
+
608
+ .editor-tab-close {
609
+ width: 16px;
610
+ height: 16px;
611
+ display: flex;
612
+ align-items: center;
613
+ justify-content: center;
614
+ border-radius: 4px;
615
+ font-size: 14px;
616
+ line-height: 1;
617
+ }
618
+
619
+ .editor-tab-close:hover {
620
+ background-color: #30363d;
621
+ }
622
+
623
+ #monaco-editor {
624
+ flex: 1;
625
+ min-height: 0;
626
+ }
627
+
628
+ .editor-empty {
629
+ flex: 1;
630
+ display: flex;
631
+ flex-direction: column;
632
+ align-items: center;
633
+ justify-content: center;
634
+ color: #6e7681;
635
+ font-size: 14px;
636
+ }
637
+
638
+ .editor-empty-icon {
639
+ font-size: 48px;
640
+ margin-bottom: 16px;
641
+ opacity: 0.5;
642
+ }
643
+
644
+ /* File Tree */
645
+ .file-tree {
646
+ font-size: 12px;
647
+ }
648
+
649
+ .file-item {
650
+ display: flex;
651
+ align-items: center;
652
+ gap: 6px;
653
+ padding: 4px 8px;
654
+ cursor: pointer;
655
+ border-radius: 4px;
656
+ }
657
+
658
+ .file-item:hover {
659
+ background-color: #21262d;
660
+ }
661
+
662
+ .file-item.active {
663
+ background-color: rgba(56, 139, 253, 0.15);
664
+ }
665
+
666
+ .file-item-icon {
667
+ width: 16px;
668
+ text-align: center;
669
+ flex-shrink: 0;
670
+ }
671
+
672
+ .file-item-name {
673
+ overflow: hidden;
674
+ text-overflow: ellipsis;
675
+ white-space: nowrap;
676
+ }
677
+
678
+ .file-item.directory > .file-item-icon {
679
+ color: #58a6ff;
680
+ }
681
+
682
+ .file-item.file > .file-item-icon {
683
+ color: #8b949e;
684
+ }
685
+
686
+ .file-children {
687
+ margin-left: 12px;
688
+ }
689
+
690
+ .breadcrumb {
691
+ display: flex;
692
+ align-items: center;
693
+ gap: 4px;
694
+ padding: 8px 12px;
695
+ font-size: 11px;
696
+ color: #8b949e;
697
+ border-bottom: 1px solid #30363d;
698
+ overflow-x: auto;
699
+ }
700
+
701
+ .breadcrumb-item {
702
+ cursor: pointer;
703
+ padding: 2px 4px;
704
+ border-radius: 4px;
705
+ }
706
+
707
+ .breadcrumb-item:hover {
708
+ background-color: #21262d;
709
+ color: #c9d1d9;
710
+ }
711
+
712
+ .breadcrumb-sep {
713
+ color: #484f58;
714
+ }
715
+
716
+ /* File Search */
717
+ .file-search {
718
+ padding: 8px 12px;
719
+ border-bottom: 1px solid #30363d;
720
+ }
721
+
722
+ .file-search input {
723
+ width: 100%;
724
+ padding: 6px 10px;
725
+ background-color: #0d1117;
726
+ border: 1px solid #30363d;
727
+ border-radius: 4px;
728
+ color: #c9d1d9;
729
+ font-size: 12px;
730
+ }
731
+
732
+ .file-search input:focus {
733
+ outline: none;
734
+ border-color: #58a6ff;
735
+ }
736
+
737
+ .file-search input::placeholder {
738
+ color: #6e7681;
739
+ }
740
+
741
+
742
+ /* Context Menu */
743
+ .context-menu {
744
+ position: fixed;
745
+ background-color: #161b22;
746
+ border: 1px solid #30363d;
747
+ border-radius: 6px;
748
+ padding: 4px 0;
749
+ min-width: 150px;
750
+ z-index: 1000;
751
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
752
+ }
753
+
754
+ .context-menu-item {
755
+ padding: 8px 12px;
756
+ font-size: 12px;
757
+ color: #c9d1d9;
758
+ cursor: pointer;
759
+ display: flex;
760
+ align-items: center;
761
+ gap: 8px;
762
+ }
763
+
764
+ .context-menu-item:hover {
765
+ background-color: #21262d;
766
+ }
767
+
768
+ .context-menu-item.danger {
769
+ color: #f85149;
770
+ }
771
+
772
+ .context-menu-divider {
773
+ height: 1px;
774
+ background-color: #30363d;
775
+ margin: 4px 0;
776
+ }
777
+
778
+ /* Modal */
779
+ .modal-overlay {
780
+ position: fixed;
781
+ top: 0;
782
+ left: 0;
783
+ right: 0;
784
+ bottom: 0;
785
+ background-color: rgba(0, 0, 0, 0.6);
786
+ display: none;
787
+ justify-content: center;
788
+ align-items: center;
789
+ z-index: 1000;
790
+ }
791
+
792
+ .modal-overlay.show {
793
+ display: flex;
794
+ }
795
+
796
+ .modal {
797
+ background-color: #161b22;
798
+ border: 1px solid #30363d;
799
+ border-radius: 8px;
800
+ padding: 20px;
801
+ min-width: 300px;
802
+ }
803
+
804
+ .modal h3 {
805
+ margin-bottom: 16px;
806
+ font-size: 16px;
807
+ color: #c9d1d9;
808
+ }
809
+
810
+ .modal input {
811
+ width: 100%;
812
+ padding: 8px 12px;
813
+ background-color: #0d1117;
814
+ border: 1px solid #30363d;
815
+ border-radius: 6px;
816
+ color: #c9d1d9;
817
+ font-size: 14px;
818
+ margin-bottom: 16px;
819
+ }
820
+
821
+ .modal input:focus {
822
+ outline: none;
823
+ border-color: #58a6ff;
824
+ }
825
+
826
+ .modal-actions {
827
+ display: flex;
828
+ justify-content: flex-end;
829
+ gap: 8px;
830
+ }
831
+
832
+ @keyframes slideIn {
833
+ from {
834
+ transform: translateY(20px);
835
+ opacity: 0;
836
+ }
837
+ to {
838
+ transform: translateY(0);
839
+ opacity: 1;
840
+ }
841
+ }
842
+
843
+ /* Mobile Toggle Button */
844
+ .mobile-sidebar-toggle {
845
+ display: none;
846
+ width: 44px;
847
+ height: 44px;
848
+ background-color: #21262d;
849
+ border: 1px solid #30363d;
850
+ border-radius: 6px;
851
+ color: #8b949e;
852
+ font-size: 20px;
853
+ cursor: pointer;
854
+ align-items: center;
855
+ justify-content: center;
856
+ -webkit-tap-highlight-color: transparent;
857
+ }
858
+
859
+ .mobile-sidebar-toggle:hover,
860
+ .mobile-sidebar-toggle:active {
861
+ background-color: #30363d;
862
+ color: #c9d1d9;
863
+ }
864
+
865
+ /* Mobile Sidebar Close */
866
+ .sidebar-close {
867
+ display: none;
868
+ position: absolute;
869
+ top: 12px;
870
+ right: 12px;
871
+ width: 32px;
872
+ height: 32px;
873
+ background-color: transparent;
874
+ border: none;
875
+ border-radius: 6px;
876
+ color: #8b949e;
877
+ font-size: 20px;
878
+ cursor: pointer;
879
+ align-items: center;
880
+ justify-content: center;
881
+ }
882
+
883
+ .sidebar-close:hover {
884
+ background-color: #21262d;
885
+ color: #c9d1d9;
886
+ }
887
+
888
+ /* Mobile Styles */
889
+ @media (max-width: 768px) {
890
+ .header {
891
+ padding: 10px 12px;
892
+ min-height: 56px;
893
+ }
894
+
895
+ .header h1 {
896
+ font-size: 16px;
897
+ gap: 8px;
898
+ }
899
+
900
+ .header h1 .logo {
901
+ width: 24px;
902
+ height: 24px;
903
+ }
904
+
905
+ .header-right {
906
+ gap: 10px;
907
+ }
908
+
909
+ .system-info {
910
+ display: none;
911
+ }
912
+
913
+ .session-indicator {
914
+ display: none !important;
915
+ }
916
+
917
+ .status {
918
+ gap: 6px;
919
+ }
920
+
921
+ .status span {
922
+ display: none;
923
+ }
924
+
925
+ .status-dot {
926
+ width: 10px;
927
+ height: 10px;
928
+ }
929
+
930
+ .btn-logout {
931
+ padding: 8px 12px;
932
+ font-size: 12px;
933
+ min-height: 36px;
934
+ }
935
+
936
+ .mobile-sidebar-toggle {
937
+ display: flex;
938
+ }
939
+
940
+ .tab-bar {
941
+ padding: 0;
942
+ overflow-x: auto;
943
+ -webkit-overflow-scrolling: touch;
944
+ }
945
+
946
+ .tab {
947
+ flex: 1;
948
+ padding: 12px 16px;
949
+ font-size: 13px;
950
+ justify-content: center;
951
+ min-height: 44px;
952
+ }
953
+
954
+ .main-container {
955
+ flex-direction: column;
956
+ position: relative;
957
+ flex: 1;
958
+ overflow: hidden;
959
+ }
960
+
961
+ #terminal-container {
962
+ padding: 4px;
963
+ flex: 1;
964
+ display: flex;
965
+ flex-direction: column;
966
+ overflow: hidden;
967
+ }
968
+
969
+ #terminal-container #terminal {
970
+ flex: 1;
971
+ min-height: 0;
972
+ }
973
+
974
+ #editor-container {
975
+ flex: 1;
976
+ overflow: hidden;
977
+ }
978
+
979
+ .terminal-tabs {
980
+ min-height: 40px;
981
+ flex-shrink: 0;
982
+ }
983
+
984
+ .terminal-tab {
985
+ padding: 10px 14px;
986
+ font-size: 12px;
987
+ min-height: 40px;
988
+ }
989
+
990
+ .terminal-tab-new {
991
+ width: 36px;
992
+ height: 36px;
993
+ font-size: 18px;
994
+ }
995
+
996
+ .terminal-tab-close {
997
+ width: 20px;
998
+ height: 20px;
999
+ font-size: 16px;
1000
+ }
1001
+
1002
+ .editor-tabs {
1003
+ min-height: 40px;
1004
+ overflow-x: auto;
1005
+ -webkit-overflow-scrolling: touch;
1006
+ flex-shrink: 0;
1007
+ }
1008
+
1009
+ .editor-tab {
1010
+ padding: 10px 14px;
1011
+ font-size: 12px;
1012
+ min-height: 40px;
1013
+ }
1014
+
1015
+ .editor-tab-close {
1016
+ width: 20px;
1017
+ height: 20px;
1018
+ font-size: 16px;
1019
+ }
1020
+
1021
+ /* Sidebar as overlay on mobile */
1022
+ .sidebar {
1023
+ position: fixed;
1024
+ top: 0;
1025
+ right: -100%;
1026
+ width: 85%;
1027
+ max-width: 320px;
1028
+ height: 100%;
1029
+ height: 100dvh;
1030
+ border-left: 1px solid #30363d;
1031
+ transition: right 0.25s ease-out;
1032
+ z-index: 100;
1033
+ overflow-y: auto;
1034
+ -webkit-overflow-scrolling: touch;
1035
+ padding-top: 50px;
1036
+ }
1037
+
1038
+ .sidebar.open {
1039
+ right: 0;
1040
+ }
1041
+
1042
+ .sidebar-close {
1043
+ display: flex;
1044
+ }
1045
+
1046
+ .sidebar-overlay {
1047
+ display: none;
1048
+ position: fixed;
1049
+ top: 0;
1050
+ left: 0;
1051
+ right: 0;
1052
+ bottom: 0;
1053
+ background-color: rgba(0, 0, 0, 0.6);
1054
+ z-index: 99;
1055
+ opacity: 0;
1056
+ transition: opacity 0.25s ease-out;
1057
+ }
1058
+
1059
+ .sidebar-overlay.show {
1060
+ display: block;
1061
+ opacity: 1;
1062
+ }
1063
+
1064
+ .sidebar-header {
1065
+ padding: 14px 16px;
1066
+ min-height: 48px;
1067
+ }
1068
+
1069
+ .sidebar-content {
1070
+ max-height: none;
1071
+ padding: 8px 12px;
1072
+ }
1073
+
1074
+ #files-content {
1075
+ max-height: 40vh !important;
1076
+ }
1077
+
1078
+ .tunnel-form {
1079
+ padding: 12px;
1080
+ flex-direction: column;
1081
+ gap: 10px;
1082
+ }
1083
+
1084
+ .tunnel-form input {
1085
+ width: 100%;
1086
+ padding: 12px;
1087
+ font-size: 16px;
1088
+ }
1089
+
1090
+ .tunnel-form .btn {
1091
+ width: 100%;
1092
+ padding: 12px;
1093
+ min-height: 44px;
1094
+ }
1095
+
1096
+ .toast {
1097
+ right: 12px;
1098
+ left: 12px;
1099
+ bottom: 12px;
1100
+ }
1101
+
1102
+ .reconnect-box {
1103
+ margin: 20px;
1104
+ padding: 24px;
1105
+ width: calc(100% - 40px);
1106
+ }
1107
+
1108
+ .reconnect-btn {
1109
+ padding: 14px 24px;
1110
+ min-height: 48px;
1111
+ width: 100%;
1112
+ }
1113
+
1114
+ .breadcrumb {
1115
+ padding: 10px 12px;
1116
+ font-size: 12px;
1117
+ }
1118
+
1119
+ .breadcrumb-item {
1120
+ padding: 4px 8px;
1121
+ }
1122
+
1123
+ .file-search {
1124
+ padding: 10px 12px;
1125
+ }
1126
+
1127
+ .file-search input {
1128
+ padding: 10px 12px;
1129
+ font-size: 16px;
1130
+ }
1131
+
1132
+ .file-item {
1133
+ padding: 10px 12px;
1134
+ min-height: 44px;
1135
+ }
1136
+
1137
+ .item-card {
1138
+ padding: 12px;
1139
+ }
1140
+
1141
+ .item-url {
1142
+ flex-direction: column;
1143
+ gap: 8px;
1144
+ }
1145
+
1146
+ .item-url input {
1147
+ width: 100%;
1148
+ padding: 10px;
1149
+ font-size: 13px;
1150
+ }
1151
+
1152
+ .btn-copy {
1153
+ width: 100%;
1154
+ text-align: center;
1155
+ padding: 10px;
1156
+ min-height: 40px;
1157
+ }
1158
+
1159
+ .context-menu {
1160
+ min-width: 160px;
1161
+ }
1162
+
1163
+ .context-menu-item {
1164
+ padding: 12px 16px;
1165
+ min-height: 44px;
1166
+ }
1167
+
1168
+ .modal {
1169
+ width: calc(100% - 32px);
1170
+ margin: 16px;
1171
+ }
1172
+
1173
+ .modal input {
1174
+ padding: 12px;
1175
+ font-size: 16px;
1176
+ }
1177
+
1178
+ .modal-actions .btn {
1179
+ padding: 10px 16px;
1180
+ min-height: 40px;
1181
+ }
1182
+ }
1183
+
1184
+ /* Small mobile */
1185
+ @media (max-width: 480px) {
1186
+ .header h1 span {
1187
+ display: none;
1188
+ }
1189
+
1190
+ .header h1 .logo {
1191
+ width: 28px;
1192
+ height: 28px;
1193
+ }
1194
+
1195
+ .btn-logout {
1196
+ padding: 6px 10px;
1197
+ font-size: 11px;
1198
+ }
1199
+
1200
+ .tab-icon {
1201
+ display: none;
1202
+ }
1203
+
1204
+ .tab {
1205
+ font-size: 12px;
1206
+ }
1207
+
1208
+ .sidebar {
1209
+ width: 100%;
1210
+ max-width: none;
1211
+ }
1212
+ }