mailcatcher-ng 1.3.0 → 1.3.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,1303 @@
1
+ /* MailCatcher NG UI Styles - Complete stylesheet
2
+ This is the single source of truth for all MailCatcher NG UI styling.
3
+ Extracted from index.erb for better maintainability.
4
+ All changes should be made here for modern, responsive design.
5
+ */
6
+ * {
7
+ margin: 0;
8
+ padding: 0;
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ body {
13
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;
14
+ background: #ffffff;
15
+ color: #1a1a1a;
16
+ height: 100vh;
17
+ display: flex;
18
+ flex-direction: column;
19
+ }
20
+
21
+ header {
22
+ background: linear-gradient(135deg, #ffffff 0%, #f5f7fa 100%);
23
+ border-bottom: 1px solid #e8eaed;
24
+ padding: 20px 28px;
25
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
26
+ display: flex;
27
+ gap: 20px;
28
+ align-items: flex-start;
29
+ }
30
+
31
+ header > div:first-child {
32
+ flex-shrink: 0;
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: 4px;
36
+ }
37
+
38
+ header h1 {
39
+ font-size: 22px;
40
+ font-weight: 700;
41
+ margin: 0;
42
+ letter-spacing: -0.5px;
43
+ }
44
+
45
+ header h1 a {
46
+ color: #2196F3;
47
+ text-decoration: none;
48
+ transition: color 0.2s;
49
+ }
50
+
51
+ header h1 a:hover {
52
+ color: #1976D2;
53
+ }
54
+
55
+ .version-badge {
56
+ font-size: 11px;
57
+ color: #999;
58
+ font-weight: 400;
59
+ letter-spacing: 0.5px;
60
+ }
61
+
62
+ .header-controls {
63
+ display: flex;
64
+ gap: 16px;
65
+ align-items: center;
66
+ flex-wrap: wrap;
67
+ flex: 1;
68
+ }
69
+
70
+ .search-box {
71
+ flex: 0 1 440px;
72
+ position: relative;
73
+ display: flex;
74
+ align-items: center;
75
+ }
76
+
77
+ .search-box input {
78
+ width: 100%;
79
+ padding: 9px 32px 9px 36px;
80
+ border: 1px solid #e0e0e0;
81
+ border-radius: 8px;
82
+ font-size: 14px;
83
+ background: #ffffff;
84
+ transition: border-color 0.2s, box-shadow 0.2s;
85
+ }
86
+
87
+ .search-box input:focus {
88
+ outline: none;
89
+ border-color: #2196F3;
90
+ box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);
91
+ }
92
+
93
+ .search-icon {
94
+ position: absolute;
95
+ left: 12px;
96
+ top: 50%;
97
+ transform: translateY(-50%);
98
+ width: 16px;
99
+ height: 16px;
100
+ color: #999;
101
+ pointer-events: none;
102
+ }
103
+
104
+ .search-clear {
105
+ position: absolute;
106
+ right: 10px;
107
+ top: 50%;
108
+ transform: translateY(-50%);
109
+ width: 16px;
110
+ height: 16px;
111
+ color: #999;
112
+ cursor: pointer;
113
+ display: none;
114
+ background: none;
115
+ border: none;
116
+ padding: 0;
117
+ transition: color 0.2s;
118
+ }
119
+
120
+ .search-clear:hover {
121
+ color: #666;
122
+ }
123
+
124
+ .search-box input:not(:placeholder-shown) ~ .search-clear {
125
+ display: block;
126
+ }
127
+
128
+ /* Hide browser's native search clear button */
129
+ .search-box input::-webkit-search-cancel-button {
130
+ display: none;
131
+ }
132
+
133
+ .attachment-filter {
134
+ display: flex;
135
+ gap: 4px;
136
+ align-items: center;
137
+ }
138
+
139
+ .attachment-filter select {
140
+ padding: 8px 12px;
141
+ border: 1px solid #e0e0e0;
142
+ border-radius: 6px;
143
+ background: #ffffff;
144
+ color: #1a1a1a;
145
+ cursor: pointer;
146
+ font-size: 13px;
147
+ transition: border-color 0.2s;
148
+ }
149
+
150
+ .attachment-filter select:hover {
151
+ border-color: #2196F3;
152
+ }
153
+
154
+ .attachment-filter select:focus {
155
+ outline: none;
156
+ border-color: #2196F3;
157
+ box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);
158
+ }
159
+
160
+ .header-info {
161
+ display: flex;
162
+ gap: 16px;
163
+ align-items: center;
164
+ }
165
+
166
+ .status-badge {
167
+ display: flex;
168
+ align-items: center;
169
+ gap: 8px;
170
+ padding: 8px 14px;
171
+ background: #f0f0f0;
172
+ border-radius: 20px;
173
+ font-size: 13px;
174
+ font-weight: 500;
175
+ }
176
+
177
+ .status-badge .indicator {
178
+ width: 8px;
179
+ height: 8px;
180
+ border-radius: 50%;
181
+ background: #34a853;
182
+ animation: pulse 2s infinite;
183
+ }
184
+
185
+ @keyframes pulse {
186
+ 0%, 100% { opacity: 1; }
187
+ 50% { opacity: 0.6; }
188
+ }
189
+
190
+ .status-badge.disconnected .indicator {
191
+ background: #ea4335;
192
+ animation: none;
193
+ }
194
+
195
+ .action-buttons {
196
+ display: flex;
197
+ gap: 10px;
198
+ }
199
+
200
+ .btn {
201
+ padding: 8px 14px;
202
+ border: none;
203
+ border-radius: 6px;
204
+ font-size: 13px;
205
+ font-weight: 600;
206
+ cursor: pointer;
207
+ background: #2196F3;
208
+ color: #ffffff;
209
+ transition: all 0.2s;
210
+ display: flex;
211
+ align-items: center;
212
+ gap: 6px;
213
+ }
214
+
215
+ .btn:hover {
216
+ background: #1976D2;
217
+ box-shadow: 0 2px 8px rgba(33, 150, 243, 0.2);
218
+ }
219
+
220
+ .btn:active {
221
+ transform: scale(0.98);
222
+ }
223
+
224
+ .btn svg {
225
+ width: 16px;
226
+ height: 16px;
227
+ }
228
+
229
+ .email-count {
230
+ font-size: 13px;
231
+ color: #5f5f5f;
232
+ padding: 8px 12px;
233
+ background: #f9f9f9;
234
+ border-radius: 6px;
235
+ }
236
+
237
+ main {
238
+ display: flex;
239
+ flex-direction: column;
240
+ flex: 1;
241
+ overflow: hidden;
242
+ position: relative;
243
+ }
244
+
245
+ #messages {
246
+ flex: 0 0 300px;
247
+ display: flex;
248
+ flex-direction: column;
249
+ background: #ffffff;
250
+ border-bottom: 1px solid #e8eaed;
251
+ overflow: hidden;
252
+ min-height: 150px;
253
+ }
254
+
255
+ #resizer {
256
+ width: 100%;
257
+ height: 8px;
258
+ background: #e8eaed;
259
+ cursor: row-resize;
260
+ flex-shrink: 0;
261
+ transition: background 0.2s;
262
+ position: relative;
263
+ z-index: 5;
264
+ user-select: none;
265
+ }
266
+
267
+ #resizer:hover {
268
+ background: #2196F3;
269
+ }
270
+
271
+ #resizer .ruler {
272
+ display: none;
273
+ }
274
+
275
+ #messages table {
276
+ width: 100%;
277
+ border-collapse: collapse;
278
+ font-size: 13px;
279
+ display: flex;
280
+ flex-direction: column;
281
+ height: 100%;
282
+ }
283
+
284
+ #messages thead {
285
+ background: #f9f9f9;
286
+ border-bottom: 1px solid #e8eaed;
287
+ position: sticky;
288
+ top: 0;
289
+ z-index: 10;
290
+ flex-shrink: 0;
291
+ display: flex;
292
+ width: 100%;
293
+ }
294
+
295
+ #messages thead tr {
296
+ display: flex;
297
+ width: 100%;
298
+ }
299
+
300
+ #messages th {
301
+ padding: 12px 16px;
302
+ text-align: left;
303
+ font-weight: 600;
304
+ color: #5f5f5f;
305
+ font-size: 12px;
306
+ text-transform: uppercase;
307
+ letter-spacing: 0.5px;
308
+ white-space: nowrap;
309
+ overflow: hidden;
310
+ text-overflow: ellipsis;
311
+ min-width: 0;
312
+ flex: 1;
313
+ }
314
+
315
+ #messages th.col-attachments {
316
+ flex: 0 0 40px;
317
+ padding: 12px 8px;
318
+ text-align: center;
319
+ }
320
+
321
+ #messages th.col-bimi {
322
+ flex: 0 0 40px;
323
+ padding: 12px 8px;
324
+ text-align: center;
325
+ }
326
+
327
+ #messages tbody {
328
+ overflow-y: auto;
329
+ flex: 1;
330
+ display: flex;
331
+ flex-direction: column;
332
+ width: 100%;
333
+ }
334
+
335
+ #messages tbody tr {
336
+ display: flex;
337
+ width: 100%;
338
+ flex-shrink: 0;
339
+ }
340
+
341
+ #messages tr {
342
+ border-bottom: 1px solid #f0f0f0;
343
+ cursor: pointer;
344
+ transition: background-color 0.15s;
345
+ }
346
+
347
+ #messages tr:hover {
348
+ background-color: #f9f9f9;
349
+ }
350
+
351
+ #messages tr.selected {
352
+ background-color: #f0f4ff;
353
+ }
354
+
355
+ #messages tr.selected:hover {
356
+ background-color: #e6ecff;
357
+ }
358
+
359
+ #messages td {
360
+ padding: 12px 16px;
361
+ overflow: hidden;
362
+ text-overflow: ellipsis;
363
+ white-space: nowrap;
364
+ min-width: 0;
365
+ text-align: left;
366
+ flex: 1;
367
+ }
368
+
369
+ #messages td.blank {
370
+ color: #999;
371
+ font-style: italic;
372
+ }
373
+
374
+ #messages td.col-attachments {
375
+ flex: 0 0 40px;
376
+ padding: 12px 8px;
377
+ text-align: center;
378
+ font-size: 16px;
379
+ overflow: visible;
380
+ white-space: normal;
381
+ }
382
+
383
+ #messages td.col-bimi {
384
+ flex: 0 0 40px;
385
+ padding: 12px 8px;
386
+ text-align: center;
387
+ background-size: contain;
388
+ background-repeat: no-repeat;
389
+ background-position: center;
390
+ overflow: visible;
391
+ display: flex;
392
+ align-items: center;
393
+ justify-content: center;
394
+ }
395
+
396
+ #messages .bimi-placeholder-icon {
397
+ width: 24px;
398
+ height: 24px;
399
+ color: #ccc;
400
+ flex-shrink: 0;
401
+ }
402
+
403
+ #messages .bimi-image {
404
+ max-width: 32px;
405
+ max-height: 32px;
406
+ flex-shrink: 0;
407
+ }
408
+
409
+ #messages td.subject-cell {
410
+ display: flex;
411
+ flex-direction: column;
412
+ justify-content: center;
413
+ gap: 2px;
414
+ padding: 10px 16px;
415
+ overflow: hidden;
416
+ }
417
+
418
+ #messages .subject-text {
419
+ overflow: hidden;
420
+ text-overflow: ellipsis;
421
+ white-space: nowrap;
422
+ font-weight: normal;
423
+ }
424
+
425
+ #messages .subject-text strong {
426
+ font-weight: 600;
427
+ color: #1a1a1a;
428
+ }
429
+
430
+ #messages .preview-text {
431
+ font-size: 12px;
432
+ color: #999;
433
+ overflow: hidden;
434
+ text-overflow: ellipsis;
435
+ white-space: nowrap;
436
+ font-weight: normal;
437
+ }
438
+
439
+ #messages td.from-cell {
440
+ display: flex;
441
+ flex-direction: column;
442
+ justify-content: center;
443
+ gap: 2px;
444
+ padding: 10px 16px;
445
+ overflow: hidden;
446
+ }
447
+
448
+ #messages .sender-text-container {
449
+ display: flex;
450
+ flex-direction: column;
451
+ gap: 2px;
452
+ overflow: hidden;
453
+ }
454
+
455
+ #messages .sender-name {
456
+ overflow: hidden;
457
+ text-overflow: ellipsis;
458
+ white-space: nowrap;
459
+ font-weight: normal;
460
+ }
461
+
462
+ #messages .sender-name strong {
463
+ font-weight: 600;
464
+ color: #1a1a1a;
465
+ }
466
+
467
+ #messages .sender-email {
468
+ font-size: 12px;
469
+ color: #999;
470
+ overflow: hidden;
471
+ text-overflow: ellipsis;
472
+ white-space: nowrap;
473
+ font-weight: normal;
474
+ }
475
+
476
+ #messages td.to-cell {
477
+ display: flex;
478
+ flex-direction: column;
479
+ justify-content: center;
480
+ gap: 2px;
481
+ padding: 10px 16px;
482
+ overflow: hidden;
483
+ }
484
+
485
+ #messages td.to-cell strong {
486
+ font-weight: 600;
487
+ color: #1a1a1a;
488
+ }
489
+
490
+ #messages .from-content {
491
+ display: flex;
492
+ align-items: center;
493
+ gap: 6px;
494
+ overflow: hidden;
495
+ }
496
+
497
+ #messages .attachment-icon {
498
+ flex-shrink: 0;
499
+ font-size: 14px;
500
+ margin-right: -2px;
501
+ }
502
+
503
+ #messages .bimi-icon {
504
+ flex-shrink: 0;
505
+ font-size: 16px;
506
+ width: 20px;
507
+ height: 20px;
508
+ border-radius: 3px;
509
+ background-size: contain;
510
+ background-repeat: no-repeat;
511
+ background-position: center;
512
+ margin-right: 4px;
513
+ }
514
+
515
+ #messages .sender-text {
516
+ overflow: hidden;
517
+ text-overflow: ellipsis;
518
+ white-space: nowrap;
519
+ }
520
+
521
+ #message {
522
+ flex: 1;
523
+ display: flex;
524
+ flex-direction: column;
525
+ background: #ffffff;
526
+ overflow: hidden;
527
+ }
528
+
529
+ #message > header {
530
+ border-bottom: 1px solid #e8eaed;
531
+ padding: 12px 28px;
532
+ background: #f9f9f9;
533
+ overflow-y: auto;
534
+ max-height: 40%;
535
+ flex-shrink: 0;
536
+ }
537
+
538
+ .metadata {
539
+ display: flex;
540
+ flex-direction: column;
541
+ gap: 20px;
542
+ margin-bottom: 0;
543
+ }
544
+
545
+ .metadata-column {
546
+ display: flex;
547
+ flex-direction: column;
548
+ gap: 12px;
549
+ }
550
+
551
+ .metadata-item {
552
+ display: grid;
553
+ grid-template-columns: 90px 1fr;
554
+ gap: 20px;
555
+ }
556
+
557
+ .metadata dt {
558
+ font-weight: 600;
559
+ color: #5f5f5f;
560
+ font-size: 10px;
561
+ text-transform: uppercase;
562
+ letter-spacing: 0.5px;
563
+ line-height: 1.2;
564
+ }
565
+
566
+ .metadata dd {
567
+ color: #1a1a1a;
568
+ font-size: 11px;
569
+ word-break: break-word;
570
+ line-height: 1.2;
571
+ }
572
+
573
+ .attachments-column {
574
+ display: none;
575
+ flex-direction: column;
576
+ gap: 8px;
577
+ min-width: 0;
578
+ }
579
+
580
+ .attachments-column.visible {
581
+ display: flex;
582
+ }
583
+
584
+ .attachments-header {
585
+ font-weight: 600;
586
+ color: #5f5f5f;
587
+ font-size: 10px;
588
+ text-transform: uppercase;
589
+ letter-spacing: 0.5px;
590
+ line-height: 1.2;
591
+ flex-shrink: 0;
592
+ }
593
+
594
+ .attachments-list {
595
+ list-style: none;
596
+ display: flex;
597
+ flex-direction: column;
598
+ gap: 6px;
599
+ max-height: 300px;
600
+ overflow-y: auto;
601
+ padding-right: 8px;
602
+ min-width: 0;
603
+ }
604
+
605
+ .attachments-list li {
606
+ display: flex;
607
+ justify-content: space-between;
608
+ align-items: flex-start;
609
+ gap: 12px;
610
+ padding: 6px 8px;
611
+ background: #f9f9f9;
612
+ border-radius: 4px;
613
+ font-size: 11px;
614
+ }
615
+
616
+ .attachments-list a {
617
+ color: #2196F3;
618
+ text-decoration: none;
619
+ flex: 1;
620
+ min-width: 0;
621
+ word-break: break-word;
622
+ }
623
+
624
+ .attachments-list a:hover {
625
+ text-decoration: underline;
626
+ }
627
+
628
+ .attachment-meta {
629
+ display: flex;
630
+ flex-direction: column;
631
+ align-items: flex-end;
632
+ gap: 2px;
633
+ white-space: nowrap;
634
+ flex-shrink: 0;
635
+ }
636
+
637
+ .attachment-size {
638
+ color: #666;
639
+ font-size: 10px;
640
+ }
641
+
642
+ .attachment-type {
643
+ color: #999;
644
+ font-size: 9px;
645
+ }
646
+
647
+ #message > header {
648
+ display: grid;
649
+ grid-template-columns: auto minmax(300px, 0.6fr) 280px;
650
+ gap: 20px;
651
+ align-items: start;
652
+ }
653
+
654
+ .views-container {
655
+ display: flex;
656
+ flex-direction: column;
657
+ gap: 8px;
658
+ order: -1;
659
+ align-items: flex-start;
660
+ }
661
+
662
+ .views {
663
+ display: flex;
664
+ gap: 16px;
665
+ flex-direction: row;
666
+ align-items: center;
667
+ width: 100%;
668
+ }
669
+
670
+ .views ul {
671
+ list-style: none;
672
+ display: flex;
673
+ gap: 8px;
674
+ flex-direction: row;
675
+ margin: 0;
676
+ }
677
+
678
+ .views .views-tabs {
679
+ flex: 0 0 auto;
680
+ }
681
+
682
+ .views .views-actions {
683
+ flex: 1 0 auto;
684
+ justify-content: flex-end;
685
+ gap: 10px;
686
+ }
687
+
688
+ .views .views-actions li {
689
+ display: flex;
690
+ align-items: center;
691
+ }
692
+
693
+ .views-container .download-btn {
694
+ padding: 6px 10px;
695
+ font-size: 11px;
696
+ }
697
+
698
+ .views .format.tab {
699
+ display: inline-block;
700
+ }
701
+
702
+ .views .format.tab a {
703
+ padding: 8px 0 6px 0;
704
+ border-radius: 0;
705
+ background: transparent;
706
+ color: #666;
707
+ text-decoration: none;
708
+ font-size: 12px;
709
+ font-weight: 600;
710
+ transition: all 0.2s ease;
711
+ display: inline-block;
712
+ border-bottom: 3px solid transparent;
713
+ cursor: pointer;
714
+ margin-right: 16px;
715
+ outline: none;
716
+ }
717
+
718
+ .views .format.tab a:hover {
719
+ color: #1a1a1a;
720
+ text-decoration: none;
721
+ }
722
+
723
+ .views .format.tab a:focus {
724
+ outline: none;
725
+ }
726
+
727
+ .views .format.tab.selected a,
728
+ .views .format.tab a.selected {
729
+ color: #2196F3 !important;
730
+ border-bottom: 3px solid #2196F3;
731
+ text-decoration: none !important;
732
+ }
733
+
734
+ .views .format.tab.selected a:hover,
735
+ .views .format.tab a.selected:hover {
736
+ color: #1976D2;
737
+ border-bottom-color: #1976D2;
738
+ }
739
+
740
+ .download-btn {
741
+ padding: 8px 12px;
742
+ border: 1px solid #e0e0e0;
743
+ border-radius: 6px;
744
+ background: #ffffff;
745
+ color: #1a1a1a;
746
+ cursor: pointer;
747
+ display: flex;
748
+ align-items: center;
749
+ gap: 6px;
750
+ font-size: 12px;
751
+ font-weight: 600;
752
+ transition: all 0.2s;
753
+ text-decoration: none;
754
+ }
755
+
756
+ .download-btn:hover {
757
+ background: #f8f8f8;
758
+ border-color: #d0d0d0;
759
+ }
760
+
761
+ .download-icon {
762
+ width: 14px;
763
+ height: 14px;
764
+ display: inline-block;
765
+ }
766
+
767
+ #message iframe.body {
768
+ flex: 1;
769
+ border: none;
770
+ background: #ffffff;
771
+ }
772
+
773
+ #message iframe.body[src*=".source"] {
774
+ background: #f5f5f5;
775
+ }
776
+
777
+ #noscript-overlay {
778
+ position: fixed;
779
+ top: 0;
780
+ left: 0;
781
+ right: 0;
782
+ bottom: 0;
783
+ background: white;
784
+ display: flex;
785
+ align-items: center;
786
+ justify-content: center;
787
+ z-index: 1000;
788
+ }
789
+
790
+ #noscript {
791
+ text-align: center;
792
+ font-size: 18px;
793
+ color: #333;
794
+ }
795
+
796
+ ::-webkit-scrollbar {
797
+ width: 8px;
798
+ }
799
+
800
+ ::-webkit-scrollbar-track {
801
+ background: #f0f0f0;
802
+ }
803
+
804
+ ::-webkit-scrollbar-thumb {
805
+ background: #d0d0d0;
806
+ border-radius: 4px;
807
+ }
808
+
809
+ ::-webkit-scrollbar-thumb:hover {
810
+ background: #b0b0b0;
811
+ }
812
+
813
+ /* Email Signature Info Button */
814
+ .signature-info-btn {
815
+ display: inline-flex;
816
+ align-items: center;
817
+ justify-content: center;
818
+ width: 24px;
819
+ height: 24px;
820
+ padding: 0;
821
+ border: none;
822
+ background: #e3f2fd;
823
+ color: #1976D2;
824
+ border-radius: 50%;
825
+ cursor: pointer;
826
+ font-size: 14px;
827
+ font-weight: 600;
828
+ transition: all 0.2s;
829
+ flex-shrink: 0;
830
+ margin-left: 8px;
831
+ }
832
+
833
+ .signature-info-btn:hover {
834
+ background: #bbdefb;
835
+ color: #1565c0;
836
+ transform: scale(1.05);
837
+ }
838
+
839
+ .signature-info-btn:active {
840
+ transform: scale(0.95);
841
+ }
842
+
843
+ .signature-info-btn svg {
844
+ width: 18px;
845
+ height: 18px;
846
+ }
847
+
848
+ .copy-source-btn {
849
+ display: inline-flex;
850
+ align-items: center;
851
+ justify-content: center;
852
+ width: 24px;
853
+ height: 24px;
854
+ padding: 0;
855
+ border: none;
856
+ background: #e3f2fd;
857
+ color: #1976D2;
858
+ border-radius: 50%;
859
+ cursor: pointer;
860
+ font-size: 14px;
861
+ font-weight: 600;
862
+ transition: all 0.2s;
863
+ flex-shrink: 0;
864
+ margin-left: 8px;
865
+ }
866
+
867
+ .copy-source-btn:hover {
868
+ background: #bbdefb;
869
+ color: #1565c0;
870
+ transform: scale(1.05);
871
+ }
872
+
873
+ .copy-source-btn:active {
874
+ transform: scale(0.95);
875
+ }
876
+
877
+ .copy-source-btn svg {
878
+ width: 18px;
879
+ height: 18px;
880
+ }
881
+
882
+ /* SMTP Transcript Styles */
883
+ #message iframe.body[src*=".transcript"] {
884
+ background: #ffffff;
885
+ }
886
+
887
+ .transcript-container {
888
+ padding: 20px 28px;
889
+ font-family: 'Monaco', 'Courier New', 'Consolas', monospace;
890
+ font-size: 12px;
891
+ line-height: 1.6;
892
+ background: #ffffff;
893
+ }
894
+
895
+ .transcript-header {
896
+ background: #f9f9f9;
897
+ border: 1px solid #e8eaed;
898
+ border-radius: 8px;
899
+ padding: 16px 20px;
900
+ margin-bottom: 20px;
901
+ }
902
+
903
+ .transcript-header h3 {
904
+ font-size: 12px;
905
+ font-weight: 600;
906
+ text-transform: uppercase;
907
+ letter-spacing: 0.5px;
908
+ color: #5f5f5f;
909
+ margin: 0 0 12px 0;
910
+ }
911
+
912
+ .transcript-info-grid {
913
+ display: grid;
914
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
915
+ gap: 12px;
916
+ }
917
+
918
+ .transcript-info-item {
919
+ display: flex;
920
+ flex-direction: column;
921
+ gap: 4px;
922
+ }
923
+
924
+ .transcript-info-label {
925
+ font-size: 10px;
926
+ font-weight: 600;
927
+ color: #999;
928
+ text-transform: uppercase;
929
+ letter-spacing: 0.5px;
930
+ }
931
+
932
+ .transcript-info-value {
933
+ font-size: 12px;
934
+ color: #1a1a1a;
935
+ font-family: 'Monaco', 'Courier New', monospace;
936
+ word-break: break-all;
937
+ }
938
+
939
+ .transcript-info-value.success {
940
+ color: #34a853;
941
+ }
942
+
943
+ .transcript-search-box {
944
+ margin-bottom: 16px;
945
+ position: relative;
946
+ }
947
+
948
+ .transcript-search-box input {
949
+ width: 100%;
950
+ padding: 10px 36px 10px 12px;
951
+ border: 1px solid #e0e0e0;
952
+ border-radius: 6px;
953
+ font-size: 13px;
954
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto';
955
+ background: #ffffff;
956
+ }
957
+
958
+ .transcript-search-box input:focus {
959
+ outline: none;
960
+ border-color: #2196F3;
961
+ box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);
962
+ }
963
+
964
+ .transcript-search-clear {
965
+ position: absolute;
966
+ right: 10px;
967
+ top: 50%;
968
+ transform: translateY(-50%);
969
+ background: none;
970
+ border: none;
971
+ color: #999;
972
+ cursor: pointer;
973
+ display: none;
974
+ font-size: 18px;
975
+ padding: 0;
976
+ width: 20px;
977
+ height: 20px;
978
+ transition: color 0.2s;
979
+ }
980
+
981
+ .transcript-search-clear:hover {
982
+ color: #666;
983
+ }
984
+
985
+ .transcript-search-box input:not(:placeholder-shown) ~ .transcript-search-clear {
986
+ display: block;
987
+ }
988
+
989
+ .transcript-log {
990
+ background: #f9f9f9;
991
+ border: 1px solid #e8eaed;
992
+ border-radius: 6px;
993
+ padding: 16px;
994
+ max-height: 600px;
995
+ overflow-y: auto;
996
+ font-family: 'Monaco', 'Courier New', monospace;
997
+ }
998
+
999
+ .transcript-entry {
1000
+ display: flex;
1001
+ gap: 12px;
1002
+ margin: 6px 0;
1003
+ padding: 4px 0;
1004
+ border-bottom: 1px solid #f0f0f0;
1005
+ }
1006
+
1007
+ .transcript-entry:last-child {
1008
+ border-bottom: none;
1009
+ }
1010
+
1011
+ .transcript-entry.hidden {
1012
+ display: none;
1013
+ }
1014
+
1015
+ .transcript-time {
1016
+ color: #999;
1017
+ min-width: 100px;
1018
+ flex-shrink: 0;
1019
+ font-size: 11px;
1020
+ }
1021
+
1022
+ .transcript-type {
1023
+ min-width: 80px;
1024
+ flex-shrink: 0;
1025
+ font-size: 11px;
1026
+ font-weight: 600;
1027
+ text-transform: uppercase;
1028
+ }
1029
+
1030
+ .transcript-type.connection { color: #9c27b0; }
1031
+ .transcript-type.command { color: #2196F3; }
1032
+ .transcript-type.response { color: #34a853; }
1033
+ .transcript-type.tls { color: #ff9800; }
1034
+ .transcript-type.data { color: #607d8b; }
1035
+ .transcript-type.error { color: #f44336; }
1036
+
1037
+ .transcript-direction {
1038
+ min-width: 60px;
1039
+ flex-shrink: 0;
1040
+ font-size: 11px;
1041
+ color: #666;
1042
+ }
1043
+
1044
+ .transcript-direction.client::before {
1045
+ content: '→ ';
1046
+ color: #2196F3;
1047
+ }
1048
+
1049
+ .transcript-direction.server::before {
1050
+ content: '← ';
1051
+ color: #34a853;
1052
+ }
1053
+
1054
+ .transcript-message {
1055
+ flex: 1;
1056
+ color: #1a1a1a;
1057
+ font-size: 12px;
1058
+ word-break: break-word;
1059
+ white-space: pre-wrap;
1060
+ }
1061
+
1062
+ .transcript-message.error {
1063
+ color: #f44336;
1064
+ font-weight: 500;
1065
+ }
1066
+
1067
+ .transcript-empty {
1068
+ text-align: center;
1069
+ padding: 40px 20px;
1070
+ color: #999;
1071
+ font-size: 14px;
1072
+ }
1073
+
1074
+ /* Encryption/Signature Tooltip Styling */
1075
+ .encryption-tooltip-content {
1076
+ padding: 12px 16px;
1077
+ font-size: 13px;
1078
+ line-height: 1.6;
1079
+ max-width: 400px;
1080
+ }
1081
+
1082
+ .encryption-tooltip-content h3 {
1083
+ font-size: 12px;
1084
+ font-weight: 600;
1085
+ text-transform: uppercase;
1086
+ letter-spacing: 0.5px;
1087
+ color: #5f5f5f;
1088
+ margin: 0 0 8px 0;
1089
+ padding-top: 8px;
1090
+ }
1091
+
1092
+ .encryption-tooltip-content h3:first-child {
1093
+ padding-top: 0;
1094
+ margin-top: 0;
1095
+ }
1096
+
1097
+ .encryption-info-item {
1098
+ display: flex;
1099
+ align-items: flex-start;
1100
+ gap: 8px;
1101
+ margin-bottom: 6px;
1102
+ }
1103
+
1104
+ .encryption-info-item:last-child {
1105
+ margin-bottom: 0;
1106
+ }
1107
+
1108
+ .encryption-info-label {
1109
+ font-weight: 500;
1110
+ color: #333;
1111
+ min-width: 100px;
1112
+ }
1113
+
1114
+ .encryption-info-value {
1115
+ color: #666;
1116
+ flex-grow: 1;
1117
+ word-break: break-all;
1118
+ }
1119
+
1120
+ .encryption-copy-button {
1121
+ display: inline-flex;
1122
+ align-items: center;
1123
+ gap: 4px;
1124
+ padding: 6px 12px;
1125
+ margin-top: 8px;
1126
+ background: #f5f5f5;
1127
+ border: 1px solid #e0e0e0;
1128
+ border-radius: 4px;
1129
+ cursor: pointer;
1130
+ font-size: 12px;
1131
+ font-weight: 500;
1132
+ color: #333;
1133
+ transition: all 0.2s;
1134
+ }
1135
+
1136
+ .encryption-copy-button:hover {
1137
+ background: #efefef;
1138
+ border-color: #d0d0d0;
1139
+ }
1140
+
1141
+ .encryption-copy-button:active {
1142
+ transform: scale(0.98);
1143
+ }
1144
+
1145
+ .encryption-copy-button svg {
1146
+ width: 14px;
1147
+ height: 14px;
1148
+ }
1149
+
1150
+ .encryption-copy-button.copied {
1151
+ background: #c8e6c9;
1152
+ border-color: #4caf50;
1153
+ color: #2e7d32;
1154
+ }
1155
+
1156
+ .encryption-copy-button.copied svg {
1157
+ stroke: #2e7d32;
1158
+ }
1159
+
1160
+ .encryption-no-data {
1161
+ color: #999;
1162
+ font-size: 12px;
1163
+ }
1164
+
1165
+ /* Tippy tooltip customization */
1166
+ .tippy-box[data-theme~='light'] {
1167
+ background-color: #ffffff;
1168
+ border: 1px solid #e8eaed;
1169
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
1170
+ border-radius: 8px;
1171
+ color: #1a1a1a;
1172
+ }
1173
+
1174
+ .tippy-box[data-theme~='light'][data-placement^='top'] > .tippy-arrow::before {
1175
+ border-top-color: #e8eaed;
1176
+ }
1177
+
1178
+ .tippy-box[data-theme~='light'][data-placement^='bottom'] > .tippy-arrow::before {
1179
+ border-bottom-color: #e8eaed;
1180
+ }
1181
+
1182
+ .tippy-box[data-theme~='light'][data-placement^='left'] > .tippy-arrow::before {
1183
+ border-left-color: #e8eaed;
1184
+ }
1185
+
1186
+ .tippy-box[data-theme~='light'][data-placement^='right'] > .tippy-arrow::before {
1187
+ border-right-color: #e8eaed;
1188
+ }
1189
+
1190
+ .signature-tooltip-content {
1191
+ padding: 12px 16px;
1192
+ font-size: 13px;
1193
+ line-height: 1.6;
1194
+ max-width: 360px;
1195
+ }
1196
+
1197
+ .signature-tooltip-content h3 {
1198
+ font-size: 12px;
1199
+ font-weight: 600;
1200
+ text-transform: uppercase;
1201
+ letter-spacing: 0.5px;
1202
+ color: #5f5f5f;
1203
+ margin: 0 0 8px 0;
1204
+ padding-top: 8px;
1205
+ }
1206
+
1207
+ .signature-tooltip-content h3:first-child {
1208
+ padding-top: 0;
1209
+ margin-top: 0;
1210
+ }
1211
+
1212
+ .signature-tooltip-item {
1213
+ display: flex;
1214
+ align-items: center;
1215
+ gap: 8px;
1216
+ margin-bottom: 6px;
1217
+ }
1218
+
1219
+ .signature-tooltip-item:last-child {
1220
+ margin-bottom: 0;
1221
+ }
1222
+
1223
+ .signature-status-badge {
1224
+ display: inline-flex;
1225
+ align-items: center;
1226
+ gap: 4px;
1227
+ padding: 2px 8px;
1228
+ border-radius: 12px;
1229
+ font-size: 12px;
1230
+ font-weight: 500;
1231
+ white-space: nowrap;
1232
+ }
1233
+
1234
+ .signature-status-badge.pass {
1235
+ background: #c8e6c9;
1236
+ color: #2e7d32;
1237
+ }
1238
+
1239
+ .signature-status-badge.fail {
1240
+ background: #ffcdd2;
1241
+ color: #c62828;
1242
+ }
1243
+
1244
+ .signature-status-badge.neutral {
1245
+ background: #f5f5f5;
1246
+ color: #666;
1247
+ }
1248
+
1249
+ .signature-status-badge::before {
1250
+ display: inline-block;
1251
+ width: 6px;
1252
+ height: 6px;
1253
+ border-radius: 50%;
1254
+ background: currentColor;
1255
+ content: '';
1256
+ }
1257
+
1258
+ /* Syntax highlighting for HTML source */
1259
+ pre {
1260
+ margin: 0;
1261
+ padding: 16px;
1262
+ background: #ffffff;
1263
+ border: 1px solid #e8eaed;
1264
+ border-radius: 8px;
1265
+ overflow-x: auto;
1266
+ font-family: 'Courier New', 'Monaco', 'Ubuntu Mono', monospace;
1267
+ font-size: 12px;
1268
+ line-height: 1.5;
1269
+ }
1270
+
1271
+ code {
1272
+ background: transparent;
1273
+ padding: 0;
1274
+ font-family: inherit;
1275
+ font-size: inherit;
1276
+ color: #1a1a1a;
1277
+ }
1278
+
1279
+ /* Override highlight.js default styles for light theme compatibility */
1280
+ .hljs {
1281
+ background: #ffffff;
1282
+ color: #1a1a1a;
1283
+ }
1284
+
1285
+ .hljs-tag {
1286
+ color: #2196F3;
1287
+ }
1288
+
1289
+ .hljs-attr {
1290
+ color: #2196F3;
1291
+ }
1292
+
1293
+ .hljs-string {
1294
+ color: #34a853;
1295
+ }
1296
+
1297
+ .hljs-number {
1298
+ color: #ea4335;
1299
+ }
1300
+
1301
+ .hljs-literal {
1302
+ color: #ea4335;
1303
+ }