mailcatcher-ng 1.3.0 → 1.3.2

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,1334 @@
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 th.sortable {
328
+ cursor: pointer;
329
+ user-select: none;
330
+ display: flex;
331
+ align-items: center;
332
+ gap: 6px;
333
+ transition: background-color 0.2s, color 0.2s;
334
+ }
335
+
336
+ #messages th.sortable:hover {
337
+ background-color: #f0f0f0;
338
+ color: #3f3f3f;
339
+ }
340
+
341
+ #messages th.sortable .sort-icon {
342
+ width: 14px;
343
+ height: 14px;
344
+ flex-shrink: 0;
345
+ opacity: 0.4;
346
+ transition: opacity 0.2s;
347
+ }
348
+
349
+ #messages th.sortable:hover .sort-icon {
350
+ opacity: 0.6;
351
+ }
352
+
353
+ #messages th.sortable.active .sort-icon {
354
+ opacity: 1;
355
+ color: #2196F3;
356
+ }
357
+
358
+ #messages tbody {
359
+ overflow-y: auto;
360
+ flex: 1;
361
+ display: flex;
362
+ flex-direction: column;
363
+ width: 100%;
364
+ }
365
+
366
+ #messages tbody tr {
367
+ display: flex;
368
+ width: 100%;
369
+ flex-shrink: 0;
370
+ }
371
+
372
+ #messages tr {
373
+ border-bottom: 1px solid #f0f0f0;
374
+ cursor: pointer;
375
+ transition: background-color 0.15s;
376
+ }
377
+
378
+ #messages tr:hover {
379
+ background-color: #f9f9f9;
380
+ }
381
+
382
+ #messages tr.selected {
383
+ background-color: #f0f4ff;
384
+ }
385
+
386
+ #messages tr.selected:hover {
387
+ background-color: #e6ecff;
388
+ }
389
+
390
+ #messages td {
391
+ padding: 12px 16px;
392
+ overflow: hidden;
393
+ text-overflow: ellipsis;
394
+ white-space: nowrap;
395
+ min-width: 0;
396
+ text-align: left;
397
+ flex: 1;
398
+ }
399
+
400
+ #messages td.blank {
401
+ color: #999;
402
+ font-style: italic;
403
+ }
404
+
405
+ #messages td.col-attachments {
406
+ flex: 0 0 40px;
407
+ padding: 12px 8px;
408
+ text-align: center;
409
+ font-size: 16px;
410
+ overflow: visible;
411
+ white-space: normal;
412
+ }
413
+
414
+ #messages td.col-bimi {
415
+ flex: 0 0 40px;
416
+ padding: 12px 8px;
417
+ text-align: center;
418
+ background-size: contain;
419
+ background-repeat: no-repeat;
420
+ background-position: center;
421
+ overflow: visible;
422
+ display: flex;
423
+ align-items: center;
424
+ justify-content: center;
425
+ }
426
+
427
+ #messages .bimi-placeholder-icon {
428
+ width: 24px;
429
+ height: 24px;
430
+ color: #ccc;
431
+ flex-shrink: 0;
432
+ }
433
+
434
+ #messages .bimi-image {
435
+ max-width: 32px;
436
+ max-height: 32px;
437
+ flex-shrink: 0;
438
+ }
439
+
440
+ #messages td.subject-cell {
441
+ display: flex;
442
+ flex-direction: column;
443
+ justify-content: center;
444
+ gap: 2px;
445
+ padding: 10px 16px;
446
+ overflow: hidden;
447
+ }
448
+
449
+ #messages .subject-text {
450
+ overflow: hidden;
451
+ text-overflow: ellipsis;
452
+ white-space: nowrap;
453
+ font-weight: normal;
454
+ }
455
+
456
+ #messages .subject-text strong {
457
+ font-weight: 600;
458
+ color: #1a1a1a;
459
+ }
460
+
461
+ #messages .preview-text {
462
+ font-size: 12px;
463
+ color: #999;
464
+ overflow: hidden;
465
+ text-overflow: ellipsis;
466
+ white-space: nowrap;
467
+ font-weight: normal;
468
+ }
469
+
470
+ #messages td.from-cell {
471
+ display: flex;
472
+ flex-direction: column;
473
+ justify-content: center;
474
+ gap: 2px;
475
+ padding: 10px 16px;
476
+ overflow: hidden;
477
+ }
478
+
479
+ #messages .sender-text-container {
480
+ display: flex;
481
+ flex-direction: column;
482
+ gap: 2px;
483
+ overflow: hidden;
484
+ }
485
+
486
+ #messages .sender-name {
487
+ overflow: hidden;
488
+ text-overflow: ellipsis;
489
+ white-space: nowrap;
490
+ font-weight: normal;
491
+ }
492
+
493
+ #messages .sender-name strong {
494
+ font-weight: 600;
495
+ color: #1a1a1a;
496
+ }
497
+
498
+ #messages .sender-email {
499
+ font-size: 12px;
500
+ color: #999;
501
+ overflow: hidden;
502
+ text-overflow: ellipsis;
503
+ white-space: nowrap;
504
+ font-weight: normal;
505
+ }
506
+
507
+ #messages td.to-cell {
508
+ display: flex;
509
+ flex-direction: column;
510
+ justify-content: center;
511
+ gap: 2px;
512
+ padding: 10px 16px;
513
+ overflow: hidden;
514
+ }
515
+
516
+ #messages td.to-cell strong {
517
+ font-weight: 600;
518
+ color: #1a1a1a;
519
+ }
520
+
521
+ #messages .from-content {
522
+ display: flex;
523
+ align-items: center;
524
+ gap: 6px;
525
+ overflow: hidden;
526
+ }
527
+
528
+ #messages .attachment-icon {
529
+ flex-shrink: 0;
530
+ font-size: 14px;
531
+ margin-right: -2px;
532
+ }
533
+
534
+ #messages .bimi-icon {
535
+ flex-shrink: 0;
536
+ font-size: 16px;
537
+ width: 20px;
538
+ height: 20px;
539
+ border-radius: 3px;
540
+ background-size: contain;
541
+ background-repeat: no-repeat;
542
+ background-position: center;
543
+ margin-right: 4px;
544
+ }
545
+
546
+ #messages .sender-text {
547
+ overflow: hidden;
548
+ text-overflow: ellipsis;
549
+ white-space: nowrap;
550
+ }
551
+
552
+ #message {
553
+ flex: 1;
554
+ display: flex;
555
+ flex-direction: column;
556
+ background: #ffffff;
557
+ overflow: hidden;
558
+ }
559
+
560
+ #message > header {
561
+ border-bottom: 1px solid #e8eaed;
562
+ padding: 12px 28px;
563
+ background: #f9f9f9;
564
+ overflow-y: auto;
565
+ max-height: 40%;
566
+ flex-shrink: 0;
567
+ }
568
+
569
+ .metadata {
570
+ display: flex;
571
+ flex-direction: column;
572
+ gap: 20px;
573
+ margin-bottom: 0;
574
+ }
575
+
576
+ .metadata-column {
577
+ display: flex;
578
+ flex-direction: column;
579
+ gap: 12px;
580
+ }
581
+
582
+ .metadata-item {
583
+ display: grid;
584
+ grid-template-columns: 90px 1fr;
585
+ gap: 20px;
586
+ }
587
+
588
+ .metadata dt {
589
+ font-weight: 600;
590
+ color: #5f5f5f;
591
+ font-size: 10px;
592
+ text-transform: uppercase;
593
+ letter-spacing: 0.5px;
594
+ line-height: 1.2;
595
+ }
596
+
597
+ .metadata dd {
598
+ color: #1a1a1a;
599
+ font-size: 11px;
600
+ word-break: break-word;
601
+ line-height: 1.2;
602
+ }
603
+
604
+ .attachments-column {
605
+ display: none;
606
+ flex-direction: column;
607
+ gap: 8px;
608
+ min-width: 0;
609
+ }
610
+
611
+ .attachments-column.visible {
612
+ display: flex;
613
+ }
614
+
615
+ .attachments-header {
616
+ font-weight: 600;
617
+ color: #5f5f5f;
618
+ font-size: 10px;
619
+ text-transform: uppercase;
620
+ letter-spacing: 0.5px;
621
+ line-height: 1.2;
622
+ flex-shrink: 0;
623
+ }
624
+
625
+ .attachments-list {
626
+ list-style: none;
627
+ display: flex;
628
+ flex-direction: column;
629
+ gap: 6px;
630
+ max-height: 300px;
631
+ overflow-y: auto;
632
+ padding-right: 8px;
633
+ min-width: 0;
634
+ }
635
+
636
+ .attachments-list li {
637
+ display: flex;
638
+ justify-content: space-between;
639
+ align-items: flex-start;
640
+ gap: 12px;
641
+ padding: 6px 8px;
642
+ background: #f9f9f9;
643
+ border-radius: 4px;
644
+ font-size: 11px;
645
+ }
646
+
647
+ .attachments-list a {
648
+ color: #2196F3;
649
+ text-decoration: none;
650
+ flex: 1;
651
+ min-width: 0;
652
+ word-break: break-word;
653
+ }
654
+
655
+ .attachments-list a:hover {
656
+ text-decoration: underline;
657
+ }
658
+
659
+ .attachment-meta {
660
+ display: flex;
661
+ flex-direction: column;
662
+ align-items: flex-end;
663
+ gap: 2px;
664
+ white-space: nowrap;
665
+ flex-shrink: 0;
666
+ }
667
+
668
+ .attachment-size {
669
+ color: #666;
670
+ font-size: 10px;
671
+ }
672
+
673
+ .attachment-type {
674
+ color: #999;
675
+ font-size: 9px;
676
+ }
677
+
678
+ #message > header {
679
+ display: grid;
680
+ grid-template-columns: auto minmax(300px, 0.6fr) 280px;
681
+ gap: 20px;
682
+ align-items: start;
683
+ }
684
+
685
+ .views-container {
686
+ display: flex;
687
+ flex-direction: column;
688
+ gap: 8px;
689
+ order: -1;
690
+ align-items: flex-start;
691
+ }
692
+
693
+ .views {
694
+ display: flex;
695
+ gap: 16px;
696
+ flex-direction: row;
697
+ align-items: center;
698
+ width: 100%;
699
+ }
700
+
701
+ .views ul {
702
+ list-style: none;
703
+ display: flex;
704
+ gap: 8px;
705
+ flex-direction: row;
706
+ margin: 0;
707
+ }
708
+
709
+ .views .views-tabs {
710
+ flex: 0 0 auto;
711
+ }
712
+
713
+ .views .views-actions {
714
+ flex: 1 0 auto;
715
+ justify-content: flex-end;
716
+ gap: 10px;
717
+ }
718
+
719
+ .views .views-actions li {
720
+ display: flex;
721
+ align-items: center;
722
+ }
723
+
724
+ .views-container .download-btn {
725
+ padding: 6px 10px;
726
+ font-size: 11px;
727
+ }
728
+
729
+ .views .format.tab {
730
+ display: inline-block;
731
+ }
732
+
733
+ .views .format.tab a {
734
+ padding: 8px 0 6px 0;
735
+ border-radius: 0;
736
+ background: transparent;
737
+ color: #666;
738
+ text-decoration: none;
739
+ font-size: 12px;
740
+ font-weight: 600;
741
+ transition: all 0.2s ease;
742
+ display: inline-block;
743
+ border-bottom: 3px solid transparent;
744
+ cursor: pointer;
745
+ margin-right: 16px;
746
+ outline: none;
747
+ }
748
+
749
+ .views .format.tab a:hover {
750
+ color: #1a1a1a;
751
+ text-decoration: none;
752
+ }
753
+
754
+ .views .format.tab a:focus {
755
+ outline: none;
756
+ }
757
+
758
+ .views .format.tab.selected a,
759
+ .views .format.tab a.selected {
760
+ color: #2196F3 !important;
761
+ border-bottom: 3px solid #2196F3;
762
+ text-decoration: none !important;
763
+ }
764
+
765
+ .views .format.tab.selected a:hover,
766
+ .views .format.tab a.selected:hover {
767
+ color: #1976D2;
768
+ border-bottom-color: #1976D2;
769
+ }
770
+
771
+ .download-btn {
772
+ padding: 8px 12px;
773
+ border: 1px solid #e0e0e0;
774
+ border-radius: 6px;
775
+ background: #ffffff;
776
+ color: #1a1a1a;
777
+ cursor: pointer;
778
+ display: flex;
779
+ align-items: center;
780
+ gap: 6px;
781
+ font-size: 12px;
782
+ font-weight: 600;
783
+ transition: all 0.2s;
784
+ text-decoration: none;
785
+ }
786
+
787
+ .download-btn:hover {
788
+ background: #f8f8f8;
789
+ border-color: #d0d0d0;
790
+ }
791
+
792
+ .download-icon {
793
+ width: 14px;
794
+ height: 14px;
795
+ display: inline-block;
796
+ }
797
+
798
+ #message iframe.body {
799
+ flex: 1;
800
+ border: none;
801
+ background: #ffffff;
802
+ }
803
+
804
+ #message iframe.body[src*=".source"] {
805
+ background: #f5f5f5;
806
+ }
807
+
808
+ #noscript-overlay {
809
+ position: fixed;
810
+ top: 0;
811
+ left: 0;
812
+ right: 0;
813
+ bottom: 0;
814
+ background: white;
815
+ display: flex;
816
+ align-items: center;
817
+ justify-content: center;
818
+ z-index: 1000;
819
+ }
820
+
821
+ #noscript {
822
+ text-align: center;
823
+ font-size: 18px;
824
+ color: #333;
825
+ }
826
+
827
+ ::-webkit-scrollbar {
828
+ width: 8px;
829
+ }
830
+
831
+ ::-webkit-scrollbar-track {
832
+ background: #f0f0f0;
833
+ }
834
+
835
+ ::-webkit-scrollbar-thumb {
836
+ background: #d0d0d0;
837
+ border-radius: 4px;
838
+ }
839
+
840
+ ::-webkit-scrollbar-thumb:hover {
841
+ background: #b0b0b0;
842
+ }
843
+
844
+ /* Email Signature Info Button */
845
+ .signature-info-btn {
846
+ display: inline-flex;
847
+ align-items: center;
848
+ justify-content: center;
849
+ width: 24px;
850
+ height: 24px;
851
+ padding: 0;
852
+ border: none;
853
+ background: #e3f2fd;
854
+ color: #1976D2;
855
+ border-radius: 50%;
856
+ cursor: pointer;
857
+ font-size: 14px;
858
+ font-weight: 600;
859
+ transition: all 0.2s;
860
+ flex-shrink: 0;
861
+ margin-left: 8px;
862
+ }
863
+
864
+ .signature-info-btn:hover {
865
+ background: #bbdefb;
866
+ color: #1565c0;
867
+ transform: scale(1.05);
868
+ }
869
+
870
+ .signature-info-btn:active {
871
+ transform: scale(0.95);
872
+ }
873
+
874
+ .signature-info-btn svg {
875
+ width: 18px;
876
+ height: 18px;
877
+ }
878
+
879
+ .copy-source-btn {
880
+ display: inline-flex;
881
+ align-items: center;
882
+ justify-content: center;
883
+ width: 24px;
884
+ height: 24px;
885
+ padding: 0;
886
+ border: none;
887
+ background: #e3f2fd;
888
+ color: #1976D2;
889
+ border-radius: 50%;
890
+ cursor: pointer;
891
+ font-size: 14px;
892
+ font-weight: 600;
893
+ transition: all 0.2s;
894
+ flex-shrink: 0;
895
+ margin-left: 8px;
896
+ }
897
+
898
+ .copy-source-btn:hover {
899
+ background: #bbdefb;
900
+ color: #1565c0;
901
+ transform: scale(1.05);
902
+ }
903
+
904
+ .copy-source-btn:active {
905
+ transform: scale(0.95);
906
+ }
907
+
908
+ .copy-source-btn svg {
909
+ width: 18px;
910
+ height: 18px;
911
+ }
912
+
913
+ /* SMTP Transcript Styles */
914
+ #message iframe.body[src*=".transcript"] {
915
+ background: #ffffff;
916
+ }
917
+
918
+ .transcript-container {
919
+ padding: 20px 28px;
920
+ font-family: 'Monaco', 'Courier New', 'Consolas', monospace;
921
+ font-size: 12px;
922
+ line-height: 1.6;
923
+ background: #ffffff;
924
+ }
925
+
926
+ .transcript-header {
927
+ background: #f9f9f9;
928
+ border: 1px solid #e8eaed;
929
+ border-radius: 8px;
930
+ padding: 16px 20px;
931
+ margin-bottom: 20px;
932
+ }
933
+
934
+ .transcript-header h3 {
935
+ font-size: 12px;
936
+ font-weight: 600;
937
+ text-transform: uppercase;
938
+ letter-spacing: 0.5px;
939
+ color: #5f5f5f;
940
+ margin: 0 0 12px 0;
941
+ }
942
+
943
+ .transcript-info-grid {
944
+ display: grid;
945
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
946
+ gap: 12px;
947
+ }
948
+
949
+ .transcript-info-item {
950
+ display: flex;
951
+ flex-direction: column;
952
+ gap: 4px;
953
+ }
954
+
955
+ .transcript-info-label {
956
+ font-size: 10px;
957
+ font-weight: 600;
958
+ color: #999;
959
+ text-transform: uppercase;
960
+ letter-spacing: 0.5px;
961
+ }
962
+
963
+ .transcript-info-value {
964
+ font-size: 12px;
965
+ color: #1a1a1a;
966
+ font-family: 'Monaco', 'Courier New', monospace;
967
+ word-break: break-all;
968
+ }
969
+
970
+ .transcript-info-value.success {
971
+ color: #34a853;
972
+ }
973
+
974
+ .transcript-search-box {
975
+ margin-bottom: 16px;
976
+ position: relative;
977
+ }
978
+
979
+ .transcript-search-box input {
980
+ width: 100%;
981
+ padding: 10px 36px 10px 12px;
982
+ border: 1px solid #e0e0e0;
983
+ border-radius: 6px;
984
+ font-size: 13px;
985
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto';
986
+ background: #ffffff;
987
+ }
988
+
989
+ .transcript-search-box input:focus {
990
+ outline: none;
991
+ border-color: #2196F3;
992
+ box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1);
993
+ }
994
+
995
+ .transcript-search-clear {
996
+ position: absolute;
997
+ right: 10px;
998
+ top: 50%;
999
+ transform: translateY(-50%);
1000
+ background: none;
1001
+ border: none;
1002
+ color: #999;
1003
+ cursor: pointer;
1004
+ display: none;
1005
+ font-size: 18px;
1006
+ padding: 0;
1007
+ width: 20px;
1008
+ height: 20px;
1009
+ transition: color 0.2s;
1010
+ }
1011
+
1012
+ .transcript-search-clear:hover {
1013
+ color: #666;
1014
+ }
1015
+
1016
+ .transcript-search-box input:not(:placeholder-shown) ~ .transcript-search-clear {
1017
+ display: block;
1018
+ }
1019
+
1020
+ .transcript-log {
1021
+ background: #f9f9f9;
1022
+ border: 1px solid #e8eaed;
1023
+ border-radius: 6px;
1024
+ padding: 16px;
1025
+ max-height: 600px;
1026
+ overflow-y: auto;
1027
+ font-family: 'Monaco', 'Courier New', monospace;
1028
+ }
1029
+
1030
+ .transcript-entry {
1031
+ display: flex;
1032
+ gap: 12px;
1033
+ margin: 6px 0;
1034
+ padding: 4px 0;
1035
+ border-bottom: 1px solid #f0f0f0;
1036
+ }
1037
+
1038
+ .transcript-entry:last-child {
1039
+ border-bottom: none;
1040
+ }
1041
+
1042
+ .transcript-entry.hidden {
1043
+ display: none;
1044
+ }
1045
+
1046
+ .transcript-time {
1047
+ color: #999;
1048
+ min-width: 100px;
1049
+ flex-shrink: 0;
1050
+ font-size: 11px;
1051
+ }
1052
+
1053
+ .transcript-type {
1054
+ min-width: 80px;
1055
+ flex-shrink: 0;
1056
+ font-size: 11px;
1057
+ font-weight: 600;
1058
+ text-transform: uppercase;
1059
+ }
1060
+
1061
+ .transcript-type.connection { color: #9c27b0; }
1062
+ .transcript-type.command { color: #2196F3; }
1063
+ .transcript-type.response { color: #34a853; }
1064
+ .transcript-type.tls { color: #ff9800; }
1065
+ .transcript-type.data { color: #607d8b; }
1066
+ .transcript-type.error { color: #f44336; }
1067
+
1068
+ .transcript-direction {
1069
+ min-width: 60px;
1070
+ flex-shrink: 0;
1071
+ font-size: 11px;
1072
+ color: #666;
1073
+ }
1074
+
1075
+ .transcript-direction.client::before {
1076
+ content: '→ ';
1077
+ color: #2196F3;
1078
+ }
1079
+
1080
+ .transcript-direction.server::before {
1081
+ content: '← ';
1082
+ color: #34a853;
1083
+ }
1084
+
1085
+ .transcript-message {
1086
+ flex: 1;
1087
+ color: #1a1a1a;
1088
+ font-size: 12px;
1089
+ word-break: break-word;
1090
+ white-space: pre-wrap;
1091
+ }
1092
+
1093
+ .transcript-message.error {
1094
+ color: #f44336;
1095
+ font-weight: 500;
1096
+ }
1097
+
1098
+ .transcript-empty {
1099
+ text-align: center;
1100
+ padding: 40px 20px;
1101
+ color: #999;
1102
+ font-size: 14px;
1103
+ }
1104
+
1105
+ /* Encryption/Signature Tooltip Styling */
1106
+ .encryption-tooltip-content {
1107
+ padding: 12px 16px;
1108
+ font-size: 13px;
1109
+ line-height: 1.6;
1110
+ max-width: 400px;
1111
+ }
1112
+
1113
+ .encryption-tooltip-content h3 {
1114
+ font-size: 12px;
1115
+ font-weight: 600;
1116
+ text-transform: uppercase;
1117
+ letter-spacing: 0.5px;
1118
+ color: #5f5f5f;
1119
+ margin: 0 0 8px 0;
1120
+ padding-top: 8px;
1121
+ }
1122
+
1123
+ .encryption-tooltip-content h3:first-child {
1124
+ padding-top: 0;
1125
+ margin-top: 0;
1126
+ }
1127
+
1128
+ .encryption-info-item {
1129
+ display: flex;
1130
+ align-items: flex-start;
1131
+ gap: 8px;
1132
+ margin-bottom: 6px;
1133
+ }
1134
+
1135
+ .encryption-info-item:last-child {
1136
+ margin-bottom: 0;
1137
+ }
1138
+
1139
+ .encryption-info-label {
1140
+ font-weight: 500;
1141
+ color: #333;
1142
+ min-width: 100px;
1143
+ }
1144
+
1145
+ .encryption-info-value {
1146
+ color: #666;
1147
+ flex-grow: 1;
1148
+ word-break: break-all;
1149
+ }
1150
+
1151
+ .encryption-copy-button {
1152
+ display: inline-flex;
1153
+ align-items: center;
1154
+ gap: 4px;
1155
+ padding: 6px 12px;
1156
+ margin-top: 8px;
1157
+ background: #f5f5f5;
1158
+ border: 1px solid #e0e0e0;
1159
+ border-radius: 4px;
1160
+ cursor: pointer;
1161
+ font-size: 12px;
1162
+ font-weight: 500;
1163
+ color: #333;
1164
+ transition: all 0.2s;
1165
+ }
1166
+
1167
+ .encryption-copy-button:hover {
1168
+ background: #efefef;
1169
+ border-color: #d0d0d0;
1170
+ }
1171
+
1172
+ .encryption-copy-button:active {
1173
+ transform: scale(0.98);
1174
+ }
1175
+
1176
+ .encryption-copy-button svg {
1177
+ width: 14px;
1178
+ height: 14px;
1179
+ }
1180
+
1181
+ .encryption-copy-button.copied {
1182
+ background: #c8e6c9;
1183
+ border-color: #4caf50;
1184
+ color: #2e7d32;
1185
+ }
1186
+
1187
+ .encryption-copy-button.copied svg {
1188
+ stroke: #2e7d32;
1189
+ }
1190
+
1191
+ .encryption-no-data {
1192
+ color: #999;
1193
+ font-size: 12px;
1194
+ }
1195
+
1196
+ /* Tippy tooltip customization */
1197
+ .tippy-box[data-theme~='light'] {
1198
+ background-color: #ffffff;
1199
+ border: 1px solid #e8eaed;
1200
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
1201
+ border-radius: 8px;
1202
+ color: #1a1a1a;
1203
+ }
1204
+
1205
+ .tippy-box[data-theme~='light'][data-placement^='top'] > .tippy-arrow::before {
1206
+ border-top-color: #e8eaed;
1207
+ }
1208
+
1209
+ .tippy-box[data-theme~='light'][data-placement^='bottom'] > .tippy-arrow::before {
1210
+ border-bottom-color: #e8eaed;
1211
+ }
1212
+
1213
+ .tippy-box[data-theme~='light'][data-placement^='left'] > .tippy-arrow::before {
1214
+ border-left-color: #e8eaed;
1215
+ }
1216
+
1217
+ .tippy-box[data-theme~='light'][data-placement^='right'] > .tippy-arrow::before {
1218
+ border-right-color: #e8eaed;
1219
+ }
1220
+
1221
+ .signature-tooltip-content {
1222
+ padding: 12px 16px;
1223
+ font-size: 13px;
1224
+ line-height: 1.6;
1225
+ max-width: 360px;
1226
+ }
1227
+
1228
+ .signature-tooltip-content h3 {
1229
+ font-size: 12px;
1230
+ font-weight: 600;
1231
+ text-transform: uppercase;
1232
+ letter-spacing: 0.5px;
1233
+ color: #5f5f5f;
1234
+ margin: 0 0 8px 0;
1235
+ padding-top: 8px;
1236
+ }
1237
+
1238
+ .signature-tooltip-content h3:first-child {
1239
+ padding-top: 0;
1240
+ margin-top: 0;
1241
+ }
1242
+
1243
+ .signature-tooltip-item {
1244
+ display: flex;
1245
+ align-items: center;
1246
+ gap: 8px;
1247
+ margin-bottom: 6px;
1248
+ }
1249
+
1250
+ .signature-tooltip-item:last-child {
1251
+ margin-bottom: 0;
1252
+ }
1253
+
1254
+ .signature-status-badge {
1255
+ display: inline-flex;
1256
+ align-items: center;
1257
+ gap: 4px;
1258
+ padding: 2px 8px;
1259
+ border-radius: 12px;
1260
+ font-size: 12px;
1261
+ font-weight: 500;
1262
+ white-space: nowrap;
1263
+ }
1264
+
1265
+ .signature-status-badge.pass {
1266
+ background: #c8e6c9;
1267
+ color: #2e7d32;
1268
+ }
1269
+
1270
+ .signature-status-badge.fail {
1271
+ background: #ffcdd2;
1272
+ color: #c62828;
1273
+ }
1274
+
1275
+ .signature-status-badge.neutral {
1276
+ background: #f5f5f5;
1277
+ color: #666;
1278
+ }
1279
+
1280
+ .signature-status-badge::before {
1281
+ display: inline-block;
1282
+ width: 6px;
1283
+ height: 6px;
1284
+ border-radius: 50%;
1285
+ background: currentColor;
1286
+ content: '';
1287
+ }
1288
+
1289
+ /* Syntax highlighting for HTML source */
1290
+ pre {
1291
+ margin: 0;
1292
+ padding: 16px;
1293
+ background: #ffffff;
1294
+ border: 1px solid #e8eaed;
1295
+ border-radius: 8px;
1296
+ overflow-x: auto;
1297
+ font-family: 'Courier New', 'Monaco', 'Ubuntu Mono', monospace;
1298
+ font-size: 12px;
1299
+ line-height: 1.5;
1300
+ }
1301
+
1302
+ code {
1303
+ background: transparent;
1304
+ padding: 0;
1305
+ font-family: inherit;
1306
+ font-size: inherit;
1307
+ color: #1a1a1a;
1308
+ }
1309
+
1310
+ /* Override highlight.js default styles for light theme compatibility */
1311
+ .hljs {
1312
+ background: #ffffff;
1313
+ color: #1a1a1a;
1314
+ }
1315
+
1316
+ .hljs-tag {
1317
+ color: #2196F3;
1318
+ }
1319
+
1320
+ .hljs-attr {
1321
+ color: #2196F3;
1322
+ }
1323
+
1324
+ .hljs-string {
1325
+ color: #34a853;
1326
+ }
1327
+
1328
+ .hljs-number {
1329
+ color: #ea4335;
1330
+ }
1331
+
1332
+ .hljs-literal {
1333
+ color: #ea4335;
1334
+ }