hd-wallet-ui 1.0.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,4521 @@
1
+ /* =============================================================================
2
+ HD Wallet UI - Standalone Styles
3
+ Extracted from FlatBuffers demo, adapted for standalone wallet interface
4
+ ============================================================================= */
5
+
6
+ /* Reset & Base */
7
+ *, *::before, *::after {
8
+ box-sizing: border-box;
9
+ margin: 0;
10
+ padding: 0;
11
+ }
12
+
13
+ /* Prevent dragging on headings, headers, and links */
14
+ h1, h2, h3, h4, h5, h6,
15
+ a, button, nav, nav * {
16
+ -webkit-user-drag: none;
17
+ user-drag: none;
18
+ }
19
+
20
+ :root {
21
+ /* Core Colors - Pure Monochrome */
22
+ --black: #000000;
23
+ --white: #F5F5F7;
24
+ --white-90: rgba(255, 255, 255, 0.9);
25
+ --white-80: rgba(255, 255, 255, 0.8);
26
+ --white-70: rgba(255, 255, 255, 0.7);
27
+ --white-60: rgba(255, 255, 255, 0.6);
28
+ --white-50: rgba(255, 255, 255, 0.5);
29
+ --white-40: rgba(255, 255, 255, 0.4);
30
+ --white-30: rgba(255, 255, 255, 0.3);
31
+ --white-25: rgba(255, 255, 255, 0.25);
32
+ --white-20: rgba(255, 255, 255, 0.2);
33
+ --white-10: rgba(255, 255, 255, 0.1);
34
+ --white-05: rgba(255, 255, 255, 0.05);
35
+ --white-03: rgba(255, 255, 255, 0.03);
36
+ --white-08: rgba(255, 255, 255, 0.08);
37
+ --white-15: rgba(255, 255, 255, 0.15);
38
+
39
+ --muted: rgba(134, 134, 139, 1.0);
40
+
41
+ /* Glass UI */
42
+ --glass-bg: rgba(42, 42, 45, 0.72);
43
+ --glass-hover: rgba(66, 66, 69, 0.72);
44
+ --glass-border: rgba(255, 255, 255, 0.1);
45
+ --glass-blur: blur(20px);
46
+
47
+ /* Accent Colors */
48
+ --monster: #ef4444;
49
+ --weapon: #3b82f6;
50
+ --galaxy: #8b5cf6;
51
+ --success: #10b981;
52
+
53
+ /* Typography */
54
+ --font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif;
55
+ --font-mono: 'SF Mono', 'Fira Code', 'Consolas', monospace;
56
+
57
+ /* Spacing */
58
+ --section-padding: 160px;
59
+ --content-gap: 48px;
60
+ --card-padding: 32px;
61
+ --radius: 28px;
62
+ --radius-sm: 14px;
63
+ }
64
+
65
+ html {
66
+ scroll-behavior: smooth;
67
+ overflow-x: hidden;
68
+ }
69
+
70
+ body {
71
+ font-family: var(--font-sans);
72
+ background: var(--black);
73
+ color: var(--white);
74
+ line-height: 1.5;
75
+ overflow-x: hidden;
76
+ max-width: 100vw;
77
+ -webkit-font-smoothing: antialiased;
78
+ -moz-osx-font-smoothing: grayscale;
79
+ }
80
+
81
+ /* =============================================================================
82
+ Blurred Background (CSS-only replacement for video background)
83
+ ============================================================================= */
84
+
85
+ .blurred-background {
86
+ position: fixed;
87
+ top: 0;
88
+ left: 0;
89
+ width: 100vw;
90
+ height: 100vh;
91
+ z-index: -1;
92
+ overflow: hidden;
93
+ background:
94
+ radial-gradient(ellipse at 20% 50%, rgba(59, 130, 246, 0.15) 0%, transparent 50%),
95
+ radial-gradient(ellipse at 80% 20%, rgba(139, 92, 246, 0.12) 0%, transparent 50%),
96
+ radial-gradient(ellipse at 50% 80%, rgba(16, 185, 129, 0.1) 0%, transparent 50%),
97
+ linear-gradient(to bottom, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.6) 50%, rgba(0, 0, 0, 0.9) 100%);
98
+ filter: blur(40px);
99
+ }
100
+
101
+ .blurred-background::after {
102
+ content: '';
103
+ position: absolute;
104
+ top: 0;
105
+ left: 0;
106
+ width: 100%;
107
+ height: 100%;
108
+ background: linear-gradient(
109
+ to bottom,
110
+ rgba(0, 0, 0, 0.3) 0%,
111
+ rgba(0, 0, 0, 0.6) 50%,
112
+ rgba(0, 0, 0, 0.9) 100%
113
+ );
114
+ }
115
+
116
+ /* Grid Animation Background */
117
+ .grid-background {
118
+ position: fixed;
119
+ top: 0;
120
+ left: 0;
121
+ width: 100vw;
122
+ height: 100vh;
123
+ z-index: -1;
124
+ pointer-events: none;
125
+ opacity: 0.4;
126
+ }
127
+
128
+ /* =============================================================================
129
+ Navigation
130
+ ============================================================================= */
131
+
132
+ .nav-bar {
133
+ position: fixed;
134
+ top: 0;
135
+ left: 0;
136
+ right: 0;
137
+ height: 64px;
138
+ z-index: 9999;
139
+ background: rgba(0, 0, 0, 0.8);
140
+ backdrop-filter: var(--glass-blur);
141
+ -webkit-backdrop-filter: var(--glass-blur);
142
+ border-bottom: 1px solid var(--glass-border);
143
+ }
144
+
145
+ body:has(.modal.active) .nav-bar {
146
+ z-index: 1;
147
+ }
148
+
149
+ .nav-content {
150
+ max-width: 1200px;
151
+ margin: 0 auto;
152
+ height: 100%;
153
+ padding: 0 24px;
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: space-between;
157
+ }
158
+
159
+ .nav-logo {
160
+ display: flex;
161
+ align-items: center;
162
+ gap: 10px;
163
+ color: var(--white);
164
+ font-weight: 400;
165
+ font-size: 15px;
166
+ letter-spacing: 0.02em;
167
+ opacity: 0.9;
168
+ }
169
+
170
+ .nav-logo svg {
171
+ opacity: 0.9;
172
+ }
173
+
174
+ .nav-links {
175
+ display: flex;
176
+ gap: 16px;
177
+ flex-wrap: nowrap;
178
+ align-items: center;
179
+ }
180
+
181
+ .nav-link {
182
+ color: var(--white-80);
183
+ text-decoration: none;
184
+ font-size: 14px;
185
+ font-weight: 500;
186
+ transition: color 0.2s;
187
+ padding: 8px 0;
188
+ white-space: nowrap;
189
+ user-select: none;
190
+ -webkit-user-select: none;
191
+ -webkit-user-drag: none;
192
+ user-drag: none;
193
+ }
194
+
195
+ .nav-link:hover,
196
+ .nav-link.active {
197
+ color: var(--white);
198
+ }
199
+
200
+ .nav-actions {
201
+ display: flex;
202
+ align-items: center;
203
+ gap: 12px;
204
+ }
205
+
206
+ .nav-icon-btn {
207
+ background: none;
208
+ border: 1px solid var(--glass-border);
209
+ border-radius: 50%;
210
+ width: 36px;
211
+ height: 36px;
212
+ display: flex;
213
+ align-items: center;
214
+ justify-content: center;
215
+ cursor: pointer;
216
+ color: var(--text-primary);
217
+ transition: background 0.2s, border-color 0.2s;
218
+ padding: 0;
219
+ }
220
+
221
+ .nav-icon-btn:hover {
222
+ background: var(--white-10);
223
+ border-color: var(--white-20);
224
+ }
225
+
226
+ .nav-icon-btn svg {
227
+ width: 20px;
228
+ height: 20px;
229
+ }
230
+
231
+ /* Mobile menu button */
232
+ .nav-menu-btn {
233
+ display: none;
234
+ background: none;
235
+ border: none;
236
+ color: var(--white-80);
237
+ padding: 8px;
238
+ cursor: pointer;
239
+ transition: color 0.2s;
240
+ }
241
+
242
+ .nav-menu-btn:hover {
243
+ color: var(--white);
244
+ }
245
+
246
+ /* Mobile menu overlay */
247
+ .nav-mobile-menu {
248
+ display: none;
249
+ position: fixed;
250
+ top: 56px;
251
+ left: 0;
252
+ right: 0;
253
+ bottom: 0;
254
+ background: rgba(0, 0, 0, 0.95);
255
+ backdrop-filter: var(--glass-blur);
256
+ -webkit-backdrop-filter: var(--glass-blur);
257
+ z-index: 9998;
258
+ padding: 24px;
259
+ flex-direction: column;
260
+ gap: 8px;
261
+ overflow-y: auto;
262
+ }
263
+
264
+ .nav-mobile-menu.open {
265
+ display: flex;
266
+ }
267
+
268
+ .nav-mobile-menu .nav-link {
269
+ font-size: 18px;
270
+ padding: 16px 0;
271
+ border-bottom: 1px solid var(--glass-border);
272
+ }
273
+
274
+ .nav-mobile-menu .nav-link:last-child {
275
+ border-bottom: none;
276
+ }
277
+
278
+ .nav-mobile-menu .nav-divider {
279
+ display: block;
280
+ height: 1px;
281
+ background: var(--glass-border);
282
+ margin: 8px 0;
283
+ }
284
+
285
+ .nav-status {
286
+ width: 8px;
287
+ height: 8px;
288
+ border-radius: 50%;
289
+ background: var(--muted);
290
+ transition: background 0.3s ease, box-shadow 0.3s ease;
291
+ flex-shrink: 0;
292
+ }
293
+
294
+ .nav-status.ready {
295
+ background: #22c55e;
296
+ box-shadow: 0 0 8px rgba(34, 197, 94, 0.5);
297
+ }
298
+
299
+ @media (max-width: 900px) {
300
+ .nav-actions #nav-login,
301
+ .nav-actions #nav-logout,
302
+ .nav-actions #nav-keys {
303
+ display: none !important;
304
+ }
305
+ }
306
+
307
+ /* Mobile auth buttons in menu */
308
+ .mobile-auth-btn {
309
+ margin: 12px 0;
310
+ width: auto;
311
+ justify-content: center;
312
+ }
313
+
314
+ /* =============================================================================
315
+ Wallet Main Layout
316
+ ============================================================================= */
317
+
318
+ .wallet-main {
319
+ padding-top: 80px;
320
+ min-height: calc(100vh - 64px);
321
+ max-width: 1200px;
322
+ margin: 0 auto;
323
+ padding-left: 24px;
324
+ padding-right: 24px;
325
+ padding-bottom: 80px;
326
+ }
327
+
328
+ .content-section {
329
+ display: block;
330
+ padding: 80px 24px var(--section-padding);
331
+ max-width: 1200px;
332
+ margin: 0 auto;
333
+ }
334
+
335
+ /* =============================================================================
336
+ Glass UI Components
337
+ ============================================================================= */
338
+
339
+ .glass-btn {
340
+ display: inline-flex;
341
+ align-items: center;
342
+ justify-content: center;
343
+ gap: 8px;
344
+ padding: 14px 28px;
345
+ background: var(--glass-bg);
346
+ backdrop-filter: blur(12px);
347
+ -webkit-backdrop-filter: blur(12px);
348
+ border: 1px solid var(--glass-border);
349
+ border-radius: var(--radius);
350
+ color: var(--white);
351
+ font-family: var(--font-sans);
352
+ font-size: 15px;
353
+ font-weight: 600;
354
+ cursor: pointer;
355
+ transition: all 0.2s ease;
356
+ white-space: nowrap;
357
+ }
358
+
359
+ .glass-btn:hover:not(:disabled) {
360
+ background: var(--glass-hover);
361
+ }
362
+
363
+ .glass-btn:disabled {
364
+ opacity: 0.4;
365
+ cursor: not-allowed;
366
+ }
367
+
368
+ .glass-btn.primary {
369
+ background: var(--white);
370
+ color: var(--black);
371
+ border-color: var(--white);
372
+ }
373
+
374
+ .glass-btn.primary:hover:not(:disabled) {
375
+ background: var(--white-90);
376
+ }
377
+
378
+ /* Nav login/logout buttons */
379
+ #nav-login {
380
+ padding: 8px 20px;
381
+ font-size: 13px;
382
+ min-width: 80px;
383
+ box-sizing: border-box;
384
+ }
385
+
386
+ #nav-logout,
387
+ #host-logout {
388
+ padding: 4px 14px;
389
+ font-size: 12px;
390
+ min-width: unset;
391
+ height: 36px;
392
+ box-sizing: border-box;
393
+ margin: 4px 0;
394
+ }
395
+
396
+ #nav-login {
397
+ background: linear-gradient(135deg, var(--white) 0%, var(--white-90) 100%);
398
+ border: 1px solid var(--white-80);
399
+ box-shadow: 0 2px 8px rgba(255, 255, 255, 0.1);
400
+ }
401
+
402
+ #nav-login:hover:not(:disabled) {
403
+ background: linear-gradient(135deg, var(--white) 0%, var(--white) 100%);
404
+ box-shadow: 0 4px 12px rgba(255, 255, 255, 0.15);
405
+ }
406
+
407
+ #nav-logout {
408
+ background: var(--glass-bg);
409
+ border: 1px solid var(--glass-border);
410
+ }
411
+
412
+ #nav-logout:hover:not(:disabled) {
413
+ background: var(--white-10);
414
+ border-color: var(--white-40);
415
+ }
416
+
417
+ .glass-btn.small {
418
+ padding: 8px 16px;
419
+ font-size: 13px;
420
+ border-radius: var(--radius-sm);
421
+ }
422
+
423
+ .glass-btn.full-width {
424
+ width: 100%;
425
+ }
426
+
427
+ .glass-input {
428
+ width: 100%;
429
+ padding: 16px 20px;
430
+ background: var(--white-05);
431
+ border: 1px solid var(--glass-border);
432
+ border-radius: var(--radius-sm);
433
+ color: var(--white);
434
+ font-family: var(--font-sans);
435
+ font-size: 16px;
436
+ transition: all 0.2s ease;
437
+ }
438
+
439
+ .glass-input::placeholder {
440
+ color: var(--white-40);
441
+ }
442
+
443
+ .glass-input:focus {
444
+ outline: none;
445
+ border-color: var(--white-40);
446
+ background: var(--white-10);
447
+ }
448
+
449
+ .glass-textarea {
450
+ resize: vertical;
451
+ min-height: 80px;
452
+ font-family: var(--font-mono);
453
+ font-size: 14px;
454
+ }
455
+
456
+ .glass-select {
457
+ padding: 12px 48px 12px 16px;
458
+ background: var(--glass-bg);
459
+ border: 1px solid var(--glass-border);
460
+ border-radius: var(--radius-sm);
461
+ color: var(--white);
462
+ font-family: var(--font-sans);
463
+ font-size: 14px;
464
+ cursor: pointer;
465
+ appearance: none;
466
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10l-5 5z'/%3E%3C/svg%3E");
467
+ background-repeat: no-repeat;
468
+ background-position: right 16px center;
469
+ }
470
+
471
+ .glass-select:focus {
472
+ outline: none;
473
+ border-color: var(--white-40);
474
+ }
475
+
476
+ .glass-input-group {
477
+ margin-bottom: 16px;
478
+ }
479
+
480
+ .glass-input-group label {
481
+ display: block;
482
+ font-size: 13px;
483
+ color: var(--muted);
484
+ margin-bottom: 8px;
485
+ font-weight: 500;
486
+ }
487
+
488
+ .glass-input-group label .label-hint {
489
+ font-weight: 400;
490
+ font-size: 11px;
491
+ color: var(--white-40);
492
+ }
493
+
494
+ /* Form grid — 2 columns */
495
+ .form-grid {
496
+ display: grid;
497
+ grid-template-columns: 1fr 1fr;
498
+ gap: 0 16px;
499
+ }
500
+
501
+ .form-grid .glass-input-group {
502
+ margin-bottom: 12px;
503
+ }
504
+
505
+ /* vCard actions - old styles removed, see .vcard-actions-footer */
506
+
507
+ .glass-btn.accent {
508
+ background: rgba(139, 92, 246, 0.15);
509
+ border-color: rgba(139, 92, 246, 0.4);
510
+ color: #c4b5fd;
511
+ }
512
+
513
+ .glass-btn.accent:hover {
514
+ background: rgba(139, 92, 246, 0.25);
515
+ border-color: rgba(139, 92, 246, 0.6);
516
+ }
517
+
518
+ /* Entropy bar */
519
+ .entropy-bar {
520
+ position: relative;
521
+ width: 100%;
522
+ height: 4px;
523
+ background: rgba(255, 255, 255, 0.08);
524
+ border-radius: 2px;
525
+ margin-top: 6px;
526
+ }
527
+
528
+ .entropy-threshold {
529
+ position: absolute;
530
+ left: 75%;
531
+ top: -2px;
532
+ width: 1px;
533
+ height: 8px;
534
+ background: rgba(255, 255, 255, 0.35);
535
+ }
536
+
537
+ .entropy-fill {
538
+ height: 100%;
539
+ width: 0%;
540
+ border-radius: 2px;
541
+ background: rgb(180, 0, 30);
542
+ transition: width 0.3s ease, background 0.3s ease;
543
+ }
544
+
545
+ .entropy-label {
546
+ display: block;
547
+ text-align: right;
548
+ font-size: 10px;
549
+ color: var(--white-40);
550
+ margin-top: 3px;
551
+ }
552
+
553
+ /* Compact variants */
554
+ .glass-select.compact,
555
+ .glass-input.compact {
556
+ font-size: 12px;
557
+ min-width: auto;
558
+ width: auto;
559
+ }
560
+
561
+ .glass-select.compact {
562
+ background-position: right 10px center;
563
+ }
564
+
565
+ .glass-input.compact {
566
+ padding: 8px 12px;
567
+ width: 70px;
568
+ text-align: center;
569
+ -moz-appearance: textfield;
570
+ }
571
+
572
+ .glass-input.compact::-webkit-outer-spin-button,
573
+ .glass-input.compact::-webkit-inner-spin-button {
574
+ -webkit-appearance: none;
575
+ margin: 0;
576
+ }
577
+
578
+ /* =============================================================================
579
+ Method Tabs (Login modal - Password / Seed / Stored)
580
+ ============================================================================= */
581
+
582
+ .method-tabs {
583
+ display: flex;
584
+ gap: 8px;
585
+ margin-bottom: 24px;
586
+ padding: 4px;
587
+ background: var(--white-05);
588
+ border-radius: var(--radius-sm);
589
+ }
590
+
591
+ .method-tab {
592
+ flex: 1;
593
+ padding: 12px;
594
+ background: transparent;
595
+ border: none;
596
+ border-radius: 10px;
597
+ color: var(--white-60);
598
+ font-family: var(--font-sans);
599
+ font-size: 14px;
600
+ font-weight: 500;
601
+ cursor: pointer;
602
+ transition: all 0.2s;
603
+ text-align: center;
604
+ }
605
+
606
+ .method-tab.active {
607
+ background: var(--glass-hover);
608
+ color: var(--white);
609
+ }
610
+
611
+ .method-content {
612
+ display: none;
613
+ }
614
+
615
+ .method-content.active {
616
+ display: block;
617
+ }
618
+
619
+ /* Modal Tabs (Account modal - Keys / vCard) */
620
+ .modal-tabs {
621
+ display: flex;
622
+ align-items: center;
623
+ gap: 4px;
624
+ margin-bottom: 20px;
625
+ padding: 4px;
626
+ background: var(--white-05);
627
+ border-radius: var(--radius-sm);
628
+ }
629
+
630
+ .modal-tab {
631
+ flex: 1;
632
+ padding: 8px 4px;
633
+ background: transparent;
634
+ border: none;
635
+ border-radius: 10px;
636
+ color: var(--white-60);
637
+ font-family: var(--font-sans);
638
+ font-size: 13px;
639
+ font-weight: 500;
640
+ line-height: 1;
641
+ display: flex;
642
+ align-items: center;
643
+ justify-content: center;
644
+ cursor: pointer;
645
+ transition: all 0.2s;
646
+ text-align: center;
647
+ }
648
+
649
+ .modal-tab.active {
650
+ background: var(--glass-hover);
651
+ color: var(--white);
652
+ }
653
+
654
+ .modal-tab-content {
655
+ display: none;
656
+ }
657
+
658
+ .modal-tab-content.active {
659
+ display: block;
660
+ }
661
+
662
+ /* =============================================================================
663
+ Remember Wallet Controls
664
+ ============================================================================= */
665
+
666
+ .remember-wallet-group {
667
+ margin: 16px 0;
668
+ padding: 12px;
669
+ background: var(--white-05);
670
+ border-radius: var(--radius-sm);
671
+ }
672
+
673
+ .glass-checkbox {
674
+ display: flex;
675
+ align-items: center;
676
+ gap: 10px;
677
+ cursor: pointer;
678
+ font-size: 14px;
679
+ color: var(--white-80);
680
+ user-select: none;
681
+ }
682
+
683
+ .glass-checkbox input[type="checkbox"] {
684
+ position: absolute;
685
+ opacity: 0;
686
+ cursor: pointer;
687
+ }
688
+
689
+ .glass-checkbox .checkmark {
690
+ width: 20px;
691
+ height: 20px;
692
+ background: var(--white-10);
693
+ border: 1px solid var(--white-20);
694
+ border-radius: 6px;
695
+ display: flex;
696
+ align-items: center;
697
+ justify-content: center;
698
+ transition: all 0.2s;
699
+ }
700
+
701
+ .glass-checkbox input:checked + .checkmark {
702
+ background: var(--success);
703
+ border-color: var(--success);
704
+ }
705
+
706
+ .glass-checkbox .checkmark::after {
707
+ content: '';
708
+ display: none;
709
+ width: 6px;
710
+ height: 10px;
711
+ border: solid var(--white);
712
+ border-width: 0 2px 2px 0;
713
+ transform: rotate(45deg);
714
+ margin-bottom: 2px;
715
+ }
716
+
717
+ .glass-checkbox input:checked + .checkmark::after {
718
+ display: block;
719
+ }
720
+
721
+ .pin-input-group {
722
+ margin-top: 12px;
723
+ }
724
+
725
+ .pin-input {
726
+ text-align: center;
727
+ letter-spacing: 8px;
728
+ font-size: 20px;
729
+ font-weight: 600;
730
+ font-family: var(--font-mono);
731
+ }
732
+
733
+ .pin-input-large {
734
+ text-align: center;
735
+ letter-spacing: 6px;
736
+ font-size: 16px;
737
+ font-weight: 500;
738
+ font-family: var(--font-mono);
739
+ }
740
+
741
+ /* Stored Wallet Tab */
742
+ .stored-wallet-info {
743
+ text-align: center;
744
+ padding: 24px 0;
745
+ }
746
+
747
+ .stored-wallet-info svg {
748
+ color: var(--success);
749
+ margin-bottom: 12px;
750
+ }
751
+
752
+ .stored-wallet-info p {
753
+ font-size: 16px;
754
+ font-weight: 500;
755
+ color: var(--white-90);
756
+ margin-bottom: 4px;
757
+ }
758
+
759
+ .stored-wallet-info .stored-wallet-date {
760
+ font-size: 12px;
761
+ color: var(--muted);
762
+ }
763
+
764
+ #forget-stored-wallet {
765
+ margin-top: 12px;
766
+ background: transparent;
767
+ color: var(--white-50);
768
+ border: 1px solid var(--white-20);
769
+ }
770
+
771
+ #forget-stored-wallet:hover {
772
+ background: rgba(239, 68, 68, 0.1);
773
+ border-color: #ef4444;
774
+ color: #ef4444;
775
+ }
776
+
777
+ /* Remember Method Selector (PIN vs Passkey) */
778
+ .remember-options {
779
+ margin-top: 12px;
780
+ }
781
+
782
+ .remember-method-selector {
783
+ display: flex;
784
+ gap: 8px;
785
+ margin-bottom: 12px;
786
+ padding: 4px;
787
+ background: var(--white-05);
788
+ border-radius: 8px;
789
+ }
790
+
791
+ .remember-method-btn {
792
+ flex: 1;
793
+ padding: 8px 12px;
794
+ background: transparent;
795
+ border: none;
796
+ border-radius: 6px;
797
+ color: var(--white-50);
798
+ font-family: var(--font-sans);
799
+ font-size: 13px;
800
+ font-weight: 500;
801
+ cursor: pointer;
802
+ transition: all 0.2s;
803
+ }
804
+
805
+ .remember-method-btn.active {
806
+ background: var(--glass-hover);
807
+ color: var(--white);
808
+ }
809
+
810
+ .remember-method-btn:hover:not(.active) {
811
+ color: var(--white-80);
812
+ }
813
+
814
+ .passkey-info {
815
+ display: flex;
816
+ align-items: center;
817
+ gap: 10px;
818
+ padding: 12px;
819
+ background: var(--white-05);
820
+ border-radius: 8px;
821
+ color: var(--white-60);
822
+ font-size: 13px;
823
+ }
824
+
825
+ .passkey-info svg {
826
+ flex-shrink: 0;
827
+ color: var(--success);
828
+ }
829
+
830
+ /* Stored Wallet Passkey */
831
+ .passkey-unlock-btn {
832
+ display: flex;
833
+ align-items: center;
834
+ justify-content: center;
835
+ gap: 10px;
836
+ }
837
+
838
+ .passkey-unlock-btn svg {
839
+ flex-shrink: 0;
840
+ }
841
+
842
+ .stored-divider {
843
+ display: flex;
844
+ align-items: center;
845
+ gap: 16px;
846
+ margin: 16px 0;
847
+ color: var(--white-40);
848
+ font-size: 12px;
849
+ }
850
+
851
+ .stored-divider::before,
852
+ .stored-divider::after {
853
+ content: '';
854
+ flex: 1;
855
+ height: 1px;
856
+ background: var(--white-10);
857
+ }
858
+
859
+ /* =============================================================================
860
+ Modal Base Styles
861
+ ============================================================================= */
862
+
863
+ .modal {
864
+ display: none;
865
+ position: fixed;
866
+ top: 0;
867
+ left: 0;
868
+ width: 100%;
869
+ height: 100%;
870
+ background: rgba(0, 0, 0, 0.8);
871
+ backdrop-filter: blur(8px);
872
+ -webkit-backdrop-filter: blur(8px);
873
+ z-index: 10000;
874
+ align-items: center;
875
+ justify-content: center;
876
+ padding: 24px;
877
+ }
878
+
879
+ .modal.active {
880
+ display: flex;
881
+ }
882
+
883
+ .modal-glass {
884
+ background: var(--glass-bg);
885
+ backdrop-filter: var(--glass-blur);
886
+ -webkit-backdrop-filter: var(--glass-blur);
887
+ border: 1px solid var(--glass-border);
888
+ border-radius: var(--radius);
889
+ max-width: 560px;
890
+ width: 100%;
891
+ max-height: 85vh;
892
+ display: flex;
893
+ flex-direction: column;
894
+ overflow: hidden;
895
+ }
896
+
897
+ /* Login Modal */
898
+ .modal-glass.login-modal-content {
899
+ max-width: 560px;
900
+ }
901
+
902
+ .modal-glass.login-modal-content .modal-body {
903
+ padding: 24px;
904
+ }
905
+
906
+ .modal-glass.login-modal-content .method-tabs {
907
+ margin-bottom: 20px;
908
+ }
909
+
910
+ .modal-glass.login-modal-content .method-content {
911
+ max-width: 75%;
912
+ margin: 0 auto;
913
+ }
914
+
915
+ .modal-glass.login-modal-content .glass-input-group {
916
+ margin-bottom: 20px;
917
+ }
918
+
919
+ .modal-glass.login-modal-content .seed-actions {
920
+ display: flex;
921
+ gap: 12px;
922
+ margin-top: 20px;
923
+ }
924
+
925
+ .modal-glass.login-modal-content .remember-wallet-group {
926
+ margin-top: 24px;
927
+ margin-bottom: 24px;
928
+ }
929
+
930
+ .modal-glass.login-modal-content .full-width {
931
+ margin-top: 8px;
932
+ }
933
+
934
+ .wallet-info-box {
935
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
936
+ }
937
+
938
+ .wallet-info-expanded {
939
+ display: flex;
940
+ align-items: flex-start;
941
+ gap: 8px;
942
+ padding: 12px 24px;
943
+ background: rgba(59, 130, 246, 0.1);
944
+ font-size: 13px;
945
+ line-height: 1.5;
946
+ color: rgba(255, 255, 255, 0.8);
947
+ }
948
+
949
+ .wallet-info-content {
950
+ flex: 1;
951
+ }
952
+
953
+ .wallet-info-content strong {
954
+ color: #60a5fa;
955
+ }
956
+
957
+ .wallet-info-close {
958
+ background: none;
959
+ border: none;
960
+ color: rgba(255, 255, 255, 0.5);
961
+ font-size: 18px;
962
+ cursor: pointer;
963
+ padding: 0 2px;
964
+ line-height: 1;
965
+ flex-shrink: 0;
966
+ }
967
+
968
+ .wallet-info-close:hover {
969
+ color: rgba(255, 255, 255, 0.9);
970
+ }
971
+
972
+ .wallet-info-collapsed {
973
+ display: flex;
974
+ align-items: center;
975
+ gap: 6px;
976
+ padding: 8px 24px;
977
+ font-size: 14px;
978
+ color: #60a5fa;
979
+ cursor: pointer;
980
+ user-select: none;
981
+ }
982
+
983
+ .wallet-info-collapsed:hover {
984
+ background: rgba(59, 130, 246, 0.05);
985
+ }
986
+
987
+ .wallet-info-icon-wrap {
988
+ display: inline-flex;
989
+ align-self: center;
990
+ color: #60a5fa;
991
+ }
992
+
993
+ .wallet-info-icon-wrap svg {
994
+ height: 1em;
995
+ width: 1em;
996
+ top: -.03em;
997
+ position: relative;
998
+ }
999
+
1000
+ /* xpub section */
1001
+ .xpub-section {
1002
+ margin-bottom: 16px;
1003
+ padding: 10px 0;
1004
+ }
1005
+
1006
+ /* Memory-only notice */
1007
+ .memory-notice-row {
1008
+ display: flex;
1009
+ align-items: center;
1010
+ gap: 6px;
1011
+ margin-left: auto;
1012
+ }
1013
+
1014
+ .memory-notice-label {
1015
+ font-size: 13px;
1016
+ color: rgba(251, 191, 36, 0.8);
1017
+ font-weight: 500;
1018
+ }
1019
+
1020
+ .memory-notice-row .wallet-info-icon-wrap {
1021
+ cursor: pointer;
1022
+ color: rgba(251, 191, 36, 0.6);
1023
+ }
1024
+
1025
+ .memory-info-box {
1026
+ display: flex;
1027
+ align-items: flex-start;
1028
+ gap: 8px;
1029
+ padding: 12px 16px;
1030
+ margin-bottom: 12px;
1031
+ background: rgba(251, 191, 36, 0.08);
1032
+ border: 1px solid rgba(251, 191, 36, 0.2);
1033
+ border-radius: 8px;
1034
+ font-size: 13px;
1035
+ line-height: 1.5;
1036
+ color: rgba(255, 255, 255, 0.8);
1037
+ }
1038
+
1039
+ .memory-info-content {
1040
+ flex: 1;
1041
+ }
1042
+
1043
+ .memory-info-content p {
1044
+ margin: 0;
1045
+ }
1046
+
1047
+ .memory-info-content strong {
1048
+ color: rgb(251, 191, 36);
1049
+ }
1050
+
1051
+ .xpub-header {
1052
+ display: flex;
1053
+ align-items: center;
1054
+ gap: 6px;
1055
+ margin-bottom: 8px;
1056
+ }
1057
+
1058
+ .xpub-header .section-label {
1059
+ margin: 0;
1060
+ }
1061
+
1062
+ .xpub-header .wallet-info-icon-wrap {
1063
+ cursor: pointer;
1064
+ }
1065
+
1066
+ .xpub-info-box {
1067
+ display: flex;
1068
+ align-items: flex-start;
1069
+ gap: 8px;
1070
+ padding: 12px 16px;
1071
+ margin-bottom: 10px;
1072
+ background: rgba(59, 130, 246, 0.1);
1073
+ border: 1px solid rgba(59, 130, 246, 0.2);
1074
+ border-radius: 8px;
1075
+ font-size: 13px;
1076
+ line-height: 1.5;
1077
+ color: rgba(255, 255, 255, 0.8);
1078
+ }
1079
+
1080
+ .xpub-info-content {
1081
+ flex: 1;
1082
+ }
1083
+
1084
+ .xpub-info-content p {
1085
+ margin: 0;
1086
+ }
1087
+
1088
+ .xpub-info-content p + p {
1089
+ margin-top: 6px;
1090
+ }
1091
+
1092
+ .xpub-info-content strong {
1093
+ color: #60a5fa;
1094
+ }
1095
+
1096
+ /* Photo upload - see final override section below */
1097
+
1098
+ .photo-preview {
1099
+ width: 80px;
1100
+ height: 80px;
1101
+ border-radius: 50%;
1102
+ border: 1px solid rgba(255, 255, 255, 0.15);
1103
+ display: flex;
1104
+ align-items: center;
1105
+ justify-content: center;
1106
+ margin: 0;
1107
+ overflow: hidden;
1108
+ background: rgba(255, 255, 255, 0.05);
1109
+ }
1110
+
1111
+ .photo-preview img {
1112
+ width: 100%;
1113
+ height: 100%;
1114
+ object-fit: cover;
1115
+ }
1116
+
1117
+ .photo-placeholder-icon {
1118
+ width: 36px;
1119
+ height: 36px;
1120
+ color: rgba(255, 255, 255, 0.3);
1121
+ }
1122
+
1123
+ .photo-actions {
1124
+ display: flex;
1125
+ gap: 8px;
1126
+ justify-content: center;
1127
+ }
1128
+
1129
+ /* Modal Header */
1130
+ .modal-header {
1131
+ display: flex;
1132
+ align-items: center;
1133
+ justify-content: space-between;
1134
+ padding: 20px 24px;
1135
+ border-bottom: 1px solid var(--glass-border);
1136
+ flex-shrink: 0;
1137
+ user-select: none;
1138
+ -webkit-user-select: none;
1139
+ -webkit-user-drag: none;
1140
+ user-drag: none;
1141
+ }
1142
+
1143
+ .modal-header * {
1144
+ -webkit-user-drag: none;
1145
+ user-drag: none;
1146
+ }
1147
+
1148
+ .modal-header h3 {
1149
+ font-size: 18px;
1150
+ font-weight: 600;
1151
+ }
1152
+
1153
+ .account-header-info {
1154
+ display: flex;
1155
+ flex-direction: column;
1156
+ gap: 2px;
1157
+ }
1158
+
1159
+ .account-header-top {
1160
+ display: flex;
1161
+ align-items: baseline;
1162
+ gap: 12px;
1163
+ }
1164
+
1165
+ .account-total-value {
1166
+ font-weight: 500;
1167
+ color: #4ade80;
1168
+ letter-spacing: 0.02em;
1169
+ opacity: 0.9;
1170
+ }
1171
+
1172
+ .account-address-row {
1173
+ display: flex;
1174
+ align-items: center;
1175
+ gap: 10px;
1176
+ margin-top: 4px;
1177
+ }
1178
+
1179
+ .account-address-select {
1180
+ min-width: 90px;
1181
+ max-width: 130px;
1182
+ font-size: 12px;
1183
+ padding: 4px 28px 4px 10px;
1184
+ height: 28px;
1185
+ background-position: right 6px center;
1186
+ color: var(--white-90);
1187
+ user-select: none;
1188
+ -webkit-user-select: none;
1189
+ }
1190
+
1191
+ .account-address-display {
1192
+ font-family: var(--font-mono, 'SF Mono', monospace);
1193
+ font-size: 11px;
1194
+ color: var(--white-50);
1195
+ letter-spacing: 0.04em;
1196
+ white-space: nowrap;
1197
+ overflow: hidden;
1198
+ text-overflow: ellipsis;
1199
+ max-width: 280px;
1200
+ flex: 1;
1201
+ min-width: 0;
1202
+ }
1203
+
1204
+ .account-address-copy {
1205
+ background: none;
1206
+ border: none;
1207
+ color: var(--white-30);
1208
+ cursor: pointer;
1209
+ padding: 2px;
1210
+ flex-shrink: 0;
1211
+ display: flex;
1212
+ align-items: center;
1213
+ }
1214
+ .account-address-copy:hover {
1215
+ color: var(--white-70);
1216
+ }
1217
+
1218
+ @media (max-width: 600px) {
1219
+ .account-address-display {
1220
+ max-width: 140px;
1221
+ }
1222
+ }
1223
+
1224
+ .account-address-value {
1225
+ font-size: 11px;
1226
+ color: #4ade80;
1227
+ white-space: nowrap;
1228
+ margin-left: auto;
1229
+ }
1230
+
1231
+ .modal-close {
1232
+ width: 32px;
1233
+ height: 32px;
1234
+ display: flex;
1235
+ align-items: center;
1236
+ justify-content: center;
1237
+ background: var(--white-10);
1238
+ border: none;
1239
+ border-radius: 50%;
1240
+ color: var(--white);
1241
+ font-size: 20px;
1242
+ cursor: pointer;
1243
+ transition: background 0.2s;
1244
+ }
1245
+
1246
+ .modal-close:hover {
1247
+ background: var(--white-20);
1248
+ }
1249
+
1250
+ .modal-body {
1251
+ padding: 24px;
1252
+ overflow-y: auto;
1253
+ overflow-x: hidden;
1254
+ flex: 1;
1255
+ min-height: 0;
1256
+ }
1257
+
1258
+ /* Modal body scrollbar styling */
1259
+ .modal-body::-webkit-scrollbar {
1260
+ width: 4px;
1261
+ }
1262
+
1263
+ .modal-body::-webkit-scrollbar-track {
1264
+ background: transparent;
1265
+ }
1266
+
1267
+ .modal-body::-webkit-scrollbar-thumb {
1268
+ background: var(--white-20);
1269
+ border-radius: 4px;
1270
+ }
1271
+
1272
+ .modal-body::-webkit-scrollbar-thumb:hover {
1273
+ background: var(--white-30);
1274
+ }
1275
+
1276
+ /* Wide Modal - match login modal size, fixed height so all tabs are same size */
1277
+ .modal-wide {
1278
+ max-width: 560px;
1279
+ height: 75vh;
1280
+ }
1281
+
1282
+ /* =============================================================================
1283
+ Key Display + Blurred Keys
1284
+ ============================================================================= */
1285
+
1286
+ .key-item {
1287
+ margin-bottom: 20px;
1288
+ }
1289
+
1290
+ .key-item label {
1291
+ display: block;
1292
+ font-size: 12px;
1293
+ color: var(--muted);
1294
+ margin-bottom: 8px;
1295
+ text-transform: uppercase;
1296
+ letter-spacing: 0.05em;
1297
+ }
1298
+
1299
+ .key-item code {
1300
+ display: block;
1301
+ padding: 12px 16px;
1302
+ background: var(--white-05);
1303
+ border-radius: 8px;
1304
+ font-family: var(--font-mono);
1305
+ font-size: 11px;
1306
+ color: var(--white-80);
1307
+ word-break: break-all;
1308
+ }
1309
+
1310
+ /* Key value row with buttons */
1311
+ .key-value-row {
1312
+ display: flex;
1313
+ align-items: center;
1314
+ gap: 14px;
1315
+ padding: 8px 0;
1316
+ }
1317
+
1318
+ .key-value-row .key-value {
1319
+ flex: 1;
1320
+ margin: 0;
1321
+ }
1322
+
1323
+ .key-value.truncate {
1324
+ white-space: nowrap;
1325
+ }
1326
+
1327
+ .key-value.seed-phrase {
1328
+ white-space: normal;
1329
+ line-height: 1.6;
1330
+ }
1331
+
1332
+ /* Blurred sensitive keys */
1333
+ .key-value.blurred {
1334
+ filter: blur(5px);
1335
+ user-select: none;
1336
+ cursor: pointer;
1337
+ transition: filter 0.3s ease;
1338
+ }
1339
+
1340
+ .key-value.blurred[data-revealed="true"] {
1341
+ filter: none;
1342
+ user-select: text;
1343
+ cursor: text;
1344
+ }
1345
+
1346
+ /* Reveal and copy buttons */
1347
+ .reveal-key-btn,
1348
+ .copy-key-btn {
1349
+ background: var(--white-05);
1350
+ border: 1px solid var(--glass-border);
1351
+ border-radius: 6px;
1352
+ padding: 8px;
1353
+ cursor: pointer;
1354
+ color: var(--white-50);
1355
+ transition: all 0.2s ease;
1356
+ display: flex;
1357
+ align-items: center;
1358
+ justify-content: center;
1359
+ align-self: center;
1360
+ flex-shrink: 0;
1361
+ flex-shrink: 0;
1362
+ }
1363
+
1364
+ .reveal-key-btn:hover,
1365
+ .copy-key-btn:hover {
1366
+ background: var(--white-10);
1367
+ color: var(--white);
1368
+ border-color: var(--white-20);
1369
+ }
1370
+
1371
+ .copy-key-btn.copied {
1372
+ color: #22c55e;
1373
+ border-color: #22c55e;
1374
+ }
1375
+
1376
+ /* =============================================================================
1377
+ Export Section & Dropdown
1378
+ ============================================================================= */
1379
+
1380
+ .export-section {
1381
+ margin-top: 20px;
1382
+ padding-top: 20px;
1383
+ border-top: 1px solid var(--glass-border);
1384
+ }
1385
+
1386
+ .export-dropdown {
1387
+ position: relative;
1388
+ }
1389
+
1390
+ .export-btn {
1391
+ width: 100%;
1392
+ justify-content: center;
1393
+ }
1394
+
1395
+ .export-menu {
1396
+ position: absolute;
1397
+ top: 100%;
1398
+ left: 0;
1399
+ right: 0;
1400
+ margin-top: 8px;
1401
+ background: var(--glass-bg);
1402
+ border: 1px solid var(--glass-border);
1403
+ border-radius: var(--radius-sm);
1404
+ padding: 8px;
1405
+ display: none;
1406
+ z-index: 100;
1407
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
1408
+ }
1409
+
1410
+ .export-menu.active {
1411
+ display: block;
1412
+ }
1413
+
1414
+ .export-option {
1415
+ display: flex;
1416
+ flex-direction: column;
1417
+ align-items: flex-start;
1418
+ width: 100%;
1419
+ padding: 12px;
1420
+ background: none;
1421
+ border: none;
1422
+ border-radius: 6px;
1423
+ cursor: pointer;
1424
+ text-align: left;
1425
+ transition: background 0.2s ease;
1426
+ }
1427
+
1428
+ .export-option:hover {
1429
+ background: var(--white-05);
1430
+ }
1431
+
1432
+ .export-icon {
1433
+ font-size: 14px;
1434
+ margin-bottom: 4px;
1435
+ }
1436
+
1437
+ .export-label {
1438
+ font-size: 13px;
1439
+ font-weight: 500;
1440
+ color: var(--white);
1441
+ }
1442
+
1443
+ .export-desc {
1444
+ font-size: 11px;
1445
+ color: var(--muted);
1446
+ margin-top: 2px;
1447
+ }
1448
+
1449
+ .key-warning {
1450
+ padding: 16px;
1451
+ background: rgba(251, 191, 36, 0.1);
1452
+ border: 1px solid rgba(251, 191, 36, 0.3);
1453
+ border-radius: var(--radius-sm);
1454
+ font-size: 13px;
1455
+ color: #fbbf24;
1456
+ margin-top: 20px;
1457
+ }
1458
+
1459
+ /* =============================================================================
1460
+ Keys Sections & HD Wallet Controls
1461
+ ============================================================================= */
1462
+
1463
+ .keys-section {
1464
+ margin-bottom: 32px;
1465
+ padding-bottom: 24px;
1466
+ border-bottom: 1px solid var(--glass-border);
1467
+ }
1468
+
1469
+ .keys-section:last-of-type {
1470
+ border-bottom: none;
1471
+ margin-bottom: 0;
1472
+ }
1473
+
1474
+ .section-label {
1475
+ font-size: 11px;
1476
+ text-transform: uppercase;
1477
+ letter-spacing: 0.1em;
1478
+ color: var(--muted);
1479
+ margin-bottom: 16px;
1480
+ font-weight: 600;
1481
+ }
1482
+
1483
+ /* HD Wallet Controls Row */
1484
+ .hd-controls-row {
1485
+ display: flex;
1486
+ gap: 16px;
1487
+ margin-bottom: 16px;
1488
+ align-items: flex-end;
1489
+ }
1490
+
1491
+ .hd-control-group {
1492
+ display: flex;
1493
+ flex-direction: column;
1494
+ gap: 4px;
1495
+ flex: 1 1 0;
1496
+ min-width: 0;
1497
+ }
1498
+
1499
+ .hd-control-group label {
1500
+ font-size: 11px;
1501
+ color: var(--muted);
1502
+ text-transform: uppercase;
1503
+ letter-spacing: 0.05em;
1504
+ }
1505
+
1506
+ .hd-control-group .glass-select,
1507
+ .hd-control-group .glass-input {
1508
+ width: 100% !important;
1509
+ min-width: 0 !important;
1510
+ box-sizing: border-box;
1511
+ }
1512
+
1513
+ .hd-num-input {
1514
+ text-align: center;
1515
+ -moz-appearance: textfield;
1516
+ }
1517
+
1518
+ .hd-num-input::-webkit-outer-spin-button,
1519
+ .hd-num-input::-webkit-inner-spin-button {
1520
+ -webkit-appearance: inner-spin-button;
1521
+ opacity: 1;
1522
+ height: 100%;
1523
+ }
1524
+
1525
+ /* HD Key Rows */
1526
+ .hd-key-row {
1527
+ display: flex;
1528
+ align-items: center;
1529
+ gap: 12px;
1530
+ padding: 10px 0;
1531
+ border-bottom: 1px solid var(--glass-border);
1532
+ }
1533
+
1534
+ .hd-key-row:last-of-type {
1535
+ border-bottom: none;
1536
+ }
1537
+
1538
+ .hd-key-label {
1539
+ font-size: 12px;
1540
+ font-weight: 600;
1541
+ color: var(--white-70);
1542
+ min-width: 80px;
1543
+ text-transform: uppercase;
1544
+ letter-spacing: 0.05em;
1545
+ }
1546
+
1547
+ .hd-key-path {
1548
+ flex-shrink: 0;
1549
+ }
1550
+
1551
+ .hd-key-path code {
1552
+ font-family: var(--font-mono);
1553
+ font-size: 11px;
1554
+ color: var(--muted);
1555
+ background: var(--white-05);
1556
+ padding: 4px 8px;
1557
+ border-radius: 4px;
1558
+ }
1559
+
1560
+ .hd-key-value {
1561
+ flex: 1;
1562
+ display: flex;
1563
+ align-items: center;
1564
+ gap: 8px;
1565
+ min-width: 0;
1566
+ }
1567
+
1568
+ .hd-key-value code {
1569
+ font-family: var(--font-mono);
1570
+ font-size: 11px;
1571
+ color: var(--white-80);
1572
+ overflow: hidden;
1573
+ text-overflow: ellipsis;
1574
+ white-space: nowrap;
1575
+ }
1576
+
1577
+ .hd-key-value .copy-btn {
1578
+ background: none;
1579
+ border: none;
1580
+ padding: 4px;
1581
+ cursor: pointer;
1582
+ color: var(--muted);
1583
+ flex-shrink: 0;
1584
+ transition: color 0.2s;
1585
+ }
1586
+
1587
+ .hd-key-value .copy-btn:hover {
1588
+ color: var(--white);
1589
+ }
1590
+
1591
+ /* HD Address Row */
1592
+ .hd-address-row {
1593
+ display: flex;
1594
+ align-items: center;
1595
+ justify-content: space-between;
1596
+ gap: 16px;
1597
+ padding-top: 12px;
1598
+ margin-top: 8px;
1599
+ }
1600
+
1601
+ .hd-address-info {
1602
+ display: flex;
1603
+ align-items: center;
1604
+ gap: 8px;
1605
+ flex: 1;
1606
+ min-width: 0;
1607
+ }
1608
+
1609
+ .hd-address-info .crypto-icon {
1610
+ width: 24px;
1611
+ height: 24px;
1612
+ font-size: 10px;
1613
+ }
1614
+
1615
+ .hd-address-info .crypto-name {
1616
+ font-size: 12px;
1617
+ font-weight: 500;
1618
+ color: var(--white-80);
1619
+ }
1620
+
1621
+ .hd-address {
1622
+ font-family: var(--font-mono);
1623
+ font-size: 11px;
1624
+ color: var(--white-70);
1625
+ overflow: hidden;
1626
+ text-overflow: ellipsis;
1627
+ white-space: nowrap;
1628
+ flex: 1;
1629
+ }
1630
+
1631
+ .hd-address-info .explorer-link {
1632
+ color: var(--muted);
1633
+ padding: 4px;
1634
+ flex-shrink: 0;
1635
+ transition: color 0.2s;
1636
+ }
1637
+
1638
+ .hd-address-info .explorer-link:hover {
1639
+ color: var(--white);
1640
+ }
1641
+
1642
+ .hd-address-row .qr-section {
1643
+ flex-shrink: 0;
1644
+ }
1645
+
1646
+ .hd-address-row .qr-section canvas {
1647
+ border-radius: 4px;
1648
+ }
1649
+
1650
+ /* Path Summary */
1651
+ .path-summary {
1652
+ display: flex;
1653
+ align-items: center;
1654
+ justify-content: center;
1655
+ padding-top: 16px;
1656
+ border-top: 1px solid var(--glass-border);
1657
+ }
1658
+
1659
+ .path-summary code {
1660
+ font-family: var(--font-mono);
1661
+ font-size: 13px;
1662
+ color: var(--white);
1663
+ background: var(--white-10);
1664
+ padding: 8px 12px;
1665
+ border-radius: 6px;
1666
+ }
1667
+
1668
+ /* HD Not Initialized Warning */
1669
+ .hd-not-initialized {
1670
+ background: rgba(251, 191, 36, 0.1);
1671
+ border: 1px solid rgba(251, 191, 36, 0.3);
1672
+ border-radius: var(--radius-sm);
1673
+ padding: 16px 20px;
1674
+ margin-bottom: 20px;
1675
+ }
1676
+
1677
+ .hd-not-initialized p {
1678
+ margin: 0;
1679
+ color: rgb(251, 191, 36);
1680
+ font-size: 14px;
1681
+ }
1682
+
1683
+ /* =============================================================================
1684
+ Login Required State
1685
+ ============================================================================= */
1686
+
1687
+ .adversarial-login-required {
1688
+ margin-top: 24px;
1689
+ }
1690
+
1691
+ .login-prompt {
1692
+ display: flex;
1693
+ flex-direction: column;
1694
+ align-items: center;
1695
+ justify-content: center;
1696
+ gap: 16px;
1697
+ padding: 48px 24px;
1698
+ background: var(--white-05);
1699
+ border: 1px dashed var(--glass-border);
1700
+ border-radius: var(--radius);
1701
+ text-align: center;
1702
+ }
1703
+
1704
+ .login-prompt p {
1705
+ font-size: 14px;
1706
+ color: var(--white-50);
1707
+ max-width: 400px;
1708
+ line-height: 1.6;
1709
+ }
1710
+
1711
+ /* =============================================================================
1712
+ Network Cards (old style - single column)
1713
+ ============================================================================= */
1714
+
1715
+ .network-cards {
1716
+ display: flex;
1717
+ flex-direction: column;
1718
+ gap: 16px;
1719
+ }
1720
+
1721
+ .network-card {
1722
+ background: var(--glass-bg);
1723
+ border: 1px solid var(--glass-border);
1724
+ border-radius: var(--radius-sm);
1725
+ padding: 16px;
1726
+ transition: all 0.3s ease;
1727
+ }
1728
+
1729
+ .network-card:hover {
1730
+ background: var(--glass-hover);
1731
+ }
1732
+
1733
+ .network-card.has-balance {
1734
+ border-color: var(--success);
1735
+ box-shadow: 0 0 20px rgba(16, 185, 129, 0.15);
1736
+ }
1737
+
1738
+ .network-card.has-balance .network-logo {
1739
+ color: var(--success);
1740
+ }
1741
+
1742
+ .network-card.secure {
1743
+ animation: secure-pulse 2s ease-in-out infinite;
1744
+ }
1745
+
1746
+ @keyframes secure-pulse {
1747
+ 0%, 100% {
1748
+ box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4);
1749
+ }
1750
+ 50% {
1751
+ box-shadow: 0 0 20px 5px rgba(16, 185, 129, 0.15);
1752
+ }
1753
+ }
1754
+
1755
+ .network-header {
1756
+ display: flex;
1757
+ align-items: center;
1758
+ gap: 10px;
1759
+ margin-bottom: 12px;
1760
+ }
1761
+
1762
+ .network-logo {
1763
+ color: var(--white-50);
1764
+ display: flex;
1765
+ align-items: center;
1766
+ justify-content: center;
1767
+ }
1768
+
1769
+ .network-name {
1770
+ font-size: 14px;
1771
+ font-weight: 600;
1772
+ color: var(--white-80);
1773
+ }
1774
+
1775
+ .network-address {
1776
+ margin-bottom: 12px;
1777
+ }
1778
+
1779
+ .network-address code {
1780
+ font-family: var(--font-mono);
1781
+ font-size: 11px;
1782
+ color: var(--white-40);
1783
+ word-break: break-all;
1784
+ display: block;
1785
+ padding: 8px 10px;
1786
+ background: var(--black);
1787
+ border-radius: 6px;
1788
+ border: 1px solid var(--glass-border);
1789
+ }
1790
+
1791
+ .network-balance {
1792
+ display: flex;
1793
+ align-items: baseline;
1794
+ gap: 6px;
1795
+ margin-bottom: 12px;
1796
+ }
1797
+
1798
+ .balance-value {
1799
+ font-size: 24px;
1800
+ font-weight: 600;
1801
+ color: var(--white);
1802
+ font-family: var(--font-mono);
1803
+ }
1804
+
1805
+ .balance-unit {
1806
+ font-size: 12px;
1807
+ color: var(--white-40);
1808
+ text-transform: uppercase;
1809
+ }
1810
+
1811
+ .explorer-link {
1812
+ display: inline-flex;
1813
+ align-items: center;
1814
+ gap: 6px;
1815
+ font-size: 12px;
1816
+ color: var(--white-40);
1817
+ text-decoration: none;
1818
+ transition: color 0.2s ease;
1819
+ }
1820
+
1821
+ .explorer-link:hover {
1822
+ color: var(--white-80);
1823
+ }
1824
+
1825
+ /* =============================================================================
1826
+ Trust Summary / Trust Meter
1827
+ ============================================================================= */
1828
+
1829
+ .bond-networks-grid {
1830
+ display: grid;
1831
+ grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
1832
+ gap: 10px;
1833
+ margin-bottom: 16px;
1834
+ }
1835
+
1836
+ .bond-network-card {
1837
+ padding: 12px;
1838
+ background: var(--white-05);
1839
+ border: 1px solid var(--glass-border);
1840
+ border-radius: var(--radius-sm);
1841
+ text-align: center;
1842
+ transition: all 0.2s ease;
1843
+ }
1844
+
1845
+ .bond-network-card.has-balance {
1846
+ border-color: var(--success);
1847
+ box-shadow: 0 0 10px rgba(16, 185, 129, 0.1);
1848
+ }
1849
+
1850
+ .bond-net-name {
1851
+ font-size: 0.75rem;
1852
+ color: var(--text-secondary);
1853
+ margin-bottom: 4px;
1854
+ }
1855
+
1856
+ .bond-net-header {
1857
+ display: flex;
1858
+ justify-content: space-between;
1859
+ align-items: center;
1860
+ margin-bottom: 6px;
1861
+ }
1862
+
1863
+ .bond-net-balance {
1864
+ font-size: 1rem;
1865
+ font-weight: 600;
1866
+ font-family: var(--font-mono);
1867
+ }
1868
+
1869
+ .bond-net-address {
1870
+ display: block;
1871
+ font-size: 0.65rem;
1872
+ color: var(--text-secondary);
1873
+ text-decoration: none;
1874
+ word-break: break-all;
1875
+ opacity: 0.7;
1876
+ transition: opacity 0.2s;
1877
+ }
1878
+
1879
+ .bond-net-address:hover {
1880
+ opacity: 1;
1881
+ color: var(--accent-primary);
1882
+ }
1883
+
1884
+ .trust-summary {
1885
+ margin-top: 16px;
1886
+ padding: 24px;
1887
+ background: var(--white-05);
1888
+ border: 1px solid var(--glass-border);
1889
+ border-radius: var(--radius);
1890
+ }
1891
+
1892
+ .trust-header {
1893
+ display: flex;
1894
+ justify-content: space-between;
1895
+ align-items: center;
1896
+ margin-bottom: 20px;
1897
+ }
1898
+
1899
+ .trust-header h4 {
1900
+ font-size: 14px;
1901
+ font-weight: 600;
1902
+ color: var(--white-80);
1903
+ }
1904
+
1905
+ .trust-meter {
1906
+ margin-bottom: 16px;
1907
+ }
1908
+
1909
+ .trust-bar {
1910
+ height: 8px;
1911
+ background: var(--white-10);
1912
+ border-radius: 4px;
1913
+ overflow: hidden;
1914
+ margin-bottom: 8px;
1915
+ }
1916
+
1917
+ .trust-fill {
1918
+ height: 100%;
1919
+ background: linear-gradient(90deg, var(--monster), #f59e0b, var(--success));
1920
+ border-radius: 4px;
1921
+ transition: width 0.5s ease;
1922
+ }
1923
+
1924
+ .trust-labels {
1925
+ display: flex;
1926
+ justify-content: space-between;
1927
+ }
1928
+
1929
+ .trust-label {
1930
+ font-size: 11px;
1931
+ color: var(--white-40);
1932
+ }
1933
+
1934
+ .trust-label.low {
1935
+ color: var(--monster);
1936
+ }
1937
+
1938
+ .trust-label.high {
1939
+ color: var(--success);
1940
+ }
1941
+
1942
+ .trust-note {
1943
+ font-size: 13px;
1944
+ color: var(--white-40);
1945
+ font-style: italic;
1946
+ }
1947
+
1948
+ /* Alternate trust meter styles */
1949
+ .trust-meter-label {
1950
+ display: flex;
1951
+ justify-content: space-between;
1952
+ align-items: center;
1953
+ margin-bottom: 12px;
1954
+ }
1955
+
1956
+ .trust-meter-label span:first-child {
1957
+ font-size: 14px;
1958
+ font-weight: 500;
1959
+ color: var(--white-70);
1960
+ }
1961
+
1962
+ .trust-meter-right {
1963
+ display: flex;
1964
+ align-items: center;
1965
+ gap: 8px;
1966
+ position: relative;
1967
+ }
1968
+
1969
+ .trust-total {
1970
+ font-size: 18px;
1971
+ font-weight: 700;
1972
+ color: var(--success);
1973
+ }
1974
+
1975
+ .bond-currency-gear {
1976
+ background: none;
1977
+ border: none;
1978
+ color: var(--white-50);
1979
+ cursor: pointer;
1980
+ padding: 4px;
1981
+ border-radius: 4px;
1982
+ display: flex;
1983
+ align-items: center;
1984
+ transition: color 0.2s;
1985
+ }
1986
+
1987
+ .bond-currency-gear:hover {
1988
+ color: var(--white-90);
1989
+ }
1990
+
1991
+ .bond-currency-popover {
1992
+ display: none;
1993
+ position: absolute;
1994
+ top: 100%;
1995
+ right: 0;
1996
+ margin-top: 4px;
1997
+ background: var(--glass-bg);
1998
+ border: 1px solid var(--glass-border);
1999
+ border-radius: var(--radius-sm);
2000
+ padding: 4px;
2001
+ z-index: 100;
2002
+ backdrop-filter: blur(20px);
2003
+ min-width: 100px;
2004
+ }
2005
+
2006
+ .bond-currency-popover.visible {
2007
+ display: flex;
2008
+ flex-wrap: wrap;
2009
+ gap: 2px;
2010
+ }
2011
+
2012
+ .currency-option {
2013
+ background: none;
2014
+ border: 1px solid transparent;
2015
+ color: var(--white-70);
2016
+ padding: 4px 8px;
2017
+ border-radius: 4px;
2018
+ cursor: pointer;
2019
+ font-size: 12px;
2020
+ white-space: nowrap;
2021
+ transition: all 0.15s;
2022
+ }
2023
+
2024
+ .currency-option:hover {
2025
+ background: var(--white-10);
2026
+ color: var(--white-90);
2027
+ }
2028
+
2029
+ .currency-option.active {
2030
+ background: var(--success);
2031
+ color: #000;
2032
+ font-weight: 600;
2033
+ }
2034
+
2035
+ /* Name service labels in modal title */
2036
+ .name-service-label {
2037
+ font-size: 10px;
2038
+ color: var(--white-40);
2039
+ margin-left: 2px;
2040
+ font-weight: 400;
2041
+ vertical-align: sub;
2042
+ }
2043
+
2044
+ .trust-meter-bar {
2045
+ height: 8px;
2046
+ background: var(--white-10);
2047
+ border-radius: 4px;
2048
+ overflow: hidden;
2049
+ margin-bottom: 12px;
2050
+ }
2051
+
2052
+ .trust-meter-fill {
2053
+ height: 100%;
2054
+ background: linear-gradient(90deg, var(--success) 0%, #34d399 100%);
2055
+ border-radius: 4px;
2056
+ transition: width 0.5s ease;
2057
+ width: 0%;
2058
+ }
2059
+
2060
+ /* =============================================================================
2061
+ Wallet Networks Grid (new grid layout)
2062
+ ============================================================================= */
2063
+
2064
+ .balances-header {
2065
+ display: flex;
2066
+ justify-content: space-between;
2067
+ align-items: center;
2068
+ margin-bottom: 8px;
2069
+ }
2070
+
2071
+ .balances-intro {
2072
+ font-size: 13px;
2073
+ color: var(--white-50);
2074
+ margin-bottom: 24px;
2075
+ line-height: 1.6;
2076
+ }
2077
+
2078
+ .wallet-networks-grid {
2079
+ display: grid;
2080
+ grid-template-columns: repeat(3, 1fr);
2081
+ gap: 16px;
2082
+ margin-bottom: 24px;
2083
+ }
2084
+
2085
+ .wallet-network-card {
2086
+ display: flex;
2087
+ gap: 16px;
2088
+ padding: 16px;
2089
+ background: var(--white-05);
2090
+ border: 1px solid var(--glass-border);
2091
+ border-radius: var(--radius-sm);
2092
+ transition: all 0.2s ease;
2093
+ }
2094
+
2095
+ .wallet-network-card:hover {
2096
+ background: var(--white-10);
2097
+ border-color: var(--white-20);
2098
+ }
2099
+
2100
+ .wallet-network-card.has-balance {
2101
+ border-color: var(--success);
2102
+ box-shadow: 0 0 15px rgba(16, 185, 129, 0.1);
2103
+ }
2104
+
2105
+ .network-icon {
2106
+ flex-shrink: 0;
2107
+ width: 48px;
2108
+ height: 48px;
2109
+ display: flex;
2110
+ align-items: center;
2111
+ justify-content: center;
2112
+ border-radius: 12px;
2113
+ }
2114
+
2115
+ .network-icon.btc {
2116
+ background: linear-gradient(135deg, #f7931a 0%, #d97706 100%);
2117
+ color: white;
2118
+ }
2119
+
2120
+ .network-icon.eth {
2121
+ background: linear-gradient(135deg, #627eea 0%, #4f46e5 100%);
2122
+ color: white;
2123
+ }
2124
+
2125
+ .network-icon.sol {
2126
+ background: linear-gradient(135deg, #9945ff 0%, #14f195 100%);
2127
+ color: white;
2128
+ }
2129
+
2130
+ .network-icon.sui {
2131
+ background: linear-gradient(135deg, #4da2ff 0%, #1a6ed8 100%);
2132
+ color: white;
2133
+ }
2134
+
2135
+ .network-icon.monad {
2136
+ background: linear-gradient(135deg, #a855f7 0%, #6d28d9 100%);
2137
+ color: white;
2138
+ }
2139
+
2140
+ .network-icon.ada {
2141
+ background: linear-gradient(135deg, #0033ad 0%, #001d6e 100%);
2142
+ color: white;
2143
+ }
2144
+
2145
+ .network-info {
2146
+ flex: 1;
2147
+ min-width: 0;
2148
+ }
2149
+
2150
+ .network-name-row {
2151
+ display: flex;
2152
+ justify-content: space-between;
2153
+ align-items: center;
2154
+ margin-bottom: 8px;
2155
+ }
2156
+
2157
+ .network-name-row .network-name {
2158
+ font-size: 14px;
2159
+ font-weight: 600;
2160
+ color: var(--white);
2161
+ }
2162
+
2163
+ .derivation-path {
2164
+ font-family: var(--font-mono);
2165
+ font-size: 10px;
2166
+ color: var(--white-40);
2167
+ background: var(--white-05);
2168
+ padding: 2px 6px;
2169
+ border-radius: 4px;
2170
+ }
2171
+
2172
+ .network-address-link {
2173
+ display: flex;
2174
+ align-items: center;
2175
+ gap: 6px;
2176
+ margin-bottom: 8px;
2177
+ text-decoration: none;
2178
+ transition: all 0.2s ease;
2179
+ }
2180
+
2181
+ .network-address-link:hover {
2182
+ color: var(--white);
2183
+ }
2184
+
2185
+ .network-address-link:hover code {
2186
+ color: var(--white);
2187
+ }
2188
+
2189
+ .network-address-link code {
2190
+ font-family: var(--font-mono);
2191
+ font-size: 11px;
2192
+ color: var(--white-60);
2193
+ overflow: hidden;
2194
+ text-overflow: ellipsis;
2195
+ white-space: nowrap;
2196
+ }
2197
+
2198
+ .network-address-link svg {
2199
+ flex-shrink: 0;
2200
+ color: var(--white-40);
2201
+ }
2202
+
2203
+ .network-balance-row {
2204
+ display: flex;
2205
+ align-items: baseline;
2206
+ gap: 6px;
2207
+ }
2208
+
2209
+ .network-balance-row .balance-value {
2210
+ font-size: 16px;
2211
+ font-weight: 600;
2212
+ color: var(--white);
2213
+ }
2214
+
2215
+ .network-balance-row .balance-unit {
2216
+ font-size: 12px;
2217
+ color: var(--white-40);
2218
+ }
2219
+
2220
+ /* =============================================================================
2221
+ Loading Overlay
2222
+ ============================================================================= */
2223
+
2224
+ .loading-overlay {
2225
+ position: fixed;
2226
+ top: 0;
2227
+ left: 0;
2228
+ width: 100%;
2229
+ height: 100%;
2230
+ background: var(--black);
2231
+ display: flex;
2232
+ flex-direction: column;
2233
+ align-items: center;
2234
+ justify-content: center;
2235
+ gap: 24px;
2236
+ z-index: 99999;
2237
+ transition: opacity 0.3s;
2238
+ }
2239
+
2240
+ .loading-overlay.hidden {
2241
+ opacity: 0;
2242
+ pointer-events: none;
2243
+ }
2244
+
2245
+ .loading-overlay.error .loading-spinner {
2246
+ border-color: #ff4444;
2247
+ border-top-color: #ff4444;
2248
+ animation: none;
2249
+ }
2250
+
2251
+ .loading-overlay.error span {
2252
+ color: #ff4444;
2253
+ }
2254
+
2255
+ .loading-spinner {
2256
+ width: 48px;
2257
+ height: 48px;
2258
+ border: 3px solid var(--white-20);
2259
+ border-top-color: var(--white);
2260
+ border-radius: 50%;
2261
+ animation: spin 1s linear infinite;
2262
+ }
2263
+
2264
+ @keyframes spin {
2265
+ to { transform: rotate(360deg); }
2266
+ }
2267
+
2268
+ .loading-overlay span {
2269
+ font-size: 14px;
2270
+ color: var(--muted);
2271
+ }
2272
+
2273
+ /* =============================================================================
2274
+ Responsive Styles
2275
+ ============================================================================= */
2276
+
2277
+ @media (max-width: 1200px) {
2278
+ .nav-links {
2279
+ gap: 12px;
2280
+ }
2281
+
2282
+ .nav-link {
2283
+ font-size: 13px;
2284
+ }
2285
+ }
2286
+
2287
+ @media (max-width: 1000px) {
2288
+ .nav-links {
2289
+ gap: 8px;
2290
+ }
2291
+
2292
+ .nav-link {
2293
+ font-size: 12px;
2294
+ }
2295
+
2296
+ .wallet-networks-grid {
2297
+ grid-template-columns: repeat(2, 1fr);
2298
+ }
2299
+ }
2300
+
2301
+ /* Tablet - switch to mobile menu */
2302
+ @media (max-width: 900px) {
2303
+ .nav-links {
2304
+ display: none;
2305
+ }
2306
+
2307
+ .nav-menu-btn {
2308
+ display: block;
2309
+ }
2310
+
2311
+ .nav-content {
2312
+ padding: 0 16px;
2313
+ }
2314
+ }
2315
+
2316
+ @media (max-width: 768px) {
2317
+ .wallet-main {
2318
+ padding-left: 16px;
2319
+ padding-right: 16px;
2320
+ padding-top: 72px;
2321
+ }
2322
+
2323
+ .content-section {
2324
+ padding: 48px 16px 80px;
2325
+ }
2326
+
2327
+ .hd-controls-row {
2328
+ flex-direction: column;
2329
+ align-items: stretch;
2330
+ }
2331
+
2332
+ .hd-key-row {
2333
+ flex-wrap: wrap;
2334
+ }
2335
+
2336
+ .hd-key-label {
2337
+ min-width: 70px;
2338
+ }
2339
+
2340
+ .hd-key-path {
2341
+ order: 3;
2342
+ width: 100%;
2343
+ margin-top: 4px;
2344
+ }
2345
+
2346
+ .hd-address-row {
2347
+ flex-direction: column;
2348
+ align-items: flex-start;
2349
+ }
2350
+
2351
+ .hd-address-info {
2352
+ flex-wrap: wrap;
2353
+ }
2354
+ }
2355
+
2356
+ @media (max-width: 600px) {
2357
+ .wallet-networks-grid {
2358
+ grid-template-columns: 1fr;
2359
+ }
2360
+ }
2361
+
2362
+ /* =============================================================================
2363
+ PKI Tab Styles
2364
+ ============================================================================= */
2365
+
2366
+ .pki-layout {
2367
+ display: grid;
2368
+ grid-template-columns: 220px 1fr;
2369
+ gap: 12px;
2370
+ min-height: 320px;
2371
+ }
2372
+
2373
+ @media (max-width: 700px) {
2374
+ .pki-layout {
2375
+ grid-template-columns: 1fr;
2376
+ }
2377
+ }
2378
+
2379
+ /* Tree Panel */
2380
+ .pki-tree-panel {
2381
+ border-right: 1px solid var(--glass-border);
2382
+ padding-right: 12px;
2383
+ overflow-y: auto;
2384
+ max-height: 420px;
2385
+ }
2386
+
2387
+ @media (max-width: 700px) {
2388
+ .pki-tree-panel {
2389
+ border-right: none;
2390
+ border-bottom: 1px solid var(--glass-border);
2391
+ padding-right: 0;
2392
+ padding-bottom: 12px;
2393
+ max-height: 200px;
2394
+ }
2395
+ }
2396
+
2397
+ .pki-tree-header {
2398
+ display: flex;
2399
+ align-items: center;
2400
+ justify-content: space-between;
2401
+ margin-bottom: 8px;
2402
+ }
2403
+
2404
+ .pki-tree-title {
2405
+ font-size: 0.85rem;
2406
+ font-weight: 600;
2407
+ color: var(--white-80);
2408
+ text-transform: uppercase;
2409
+ letter-spacing: 0.05em;
2410
+ }
2411
+
2412
+ .pki-add-org-btn {
2413
+ width: 24px;
2414
+ height: 24px;
2415
+ padding: 0;
2416
+ font-size: 1rem;
2417
+ line-height: 1;
2418
+ }
2419
+
2420
+ .pki-tree-empty {
2421
+ color: var(--white-40);
2422
+ font-size: 0.8rem;
2423
+ padding: 16px 8px;
2424
+ text-align: center;
2425
+ }
2426
+
2427
+ /* Tree Nodes */
2428
+ .pki-tree-node {
2429
+ cursor: pointer;
2430
+ padding: 4px 6px;
2431
+ border-radius: 4px;
2432
+ font-size: 0.82rem;
2433
+ color: var(--white-70);
2434
+ display: flex;
2435
+ align-items: center;
2436
+ gap: 4px;
2437
+ user-select: none;
2438
+ }
2439
+
2440
+ .pki-tree-node:hover {
2441
+ background: var(--glass-hover);
2442
+ }
2443
+
2444
+ .pki-tree-node.selected {
2445
+ background: var(--glass-hover);
2446
+ color: var(--white);
2447
+ }
2448
+
2449
+ .pki-tree-chevron {
2450
+ display: inline-block;
2451
+ width: 12px;
2452
+ height: 12px;
2453
+ transition: transform 0.15s;
2454
+ flex-shrink: 0;
2455
+ }
2456
+
2457
+ .pki-tree-chevron.expanded {
2458
+ transform: rotate(90deg);
2459
+ }
2460
+
2461
+ .pki-tree-chevron.leaf {
2462
+ visibility: hidden;
2463
+ }
2464
+
2465
+ .pki-tree-icon {
2466
+ flex-shrink: 0;
2467
+ width: 14px;
2468
+ height: 14px;
2469
+ opacity: 0.7;
2470
+ }
2471
+
2472
+ .pki-tree-label {
2473
+ flex: 1;
2474
+ overflow: hidden;
2475
+ text-overflow: ellipsis;
2476
+ white-space: nowrap;
2477
+ }
2478
+
2479
+ .pki-tree-badge {
2480
+ width: 8px;
2481
+ height: 8px;
2482
+ border-radius: 50%;
2483
+ flex-shrink: 0;
2484
+ }
2485
+
2486
+ .pki-tree-badge.valid { background: var(--success); }
2487
+ .pki-tree-badge.invalid { background: var(--monster); }
2488
+ .pki-tree-badge.none { background: var(--white-20); }
2489
+
2490
+ .pki-tree-children {
2491
+ padding-left: 16px;
2492
+ }
2493
+
2494
+ /* Detail Panel */
2495
+ .pki-detail-panel {
2496
+ overflow-y: auto;
2497
+ max-height: 420px;
2498
+ }
2499
+
2500
+ .pki-detail-empty {
2501
+ display: flex;
2502
+ flex-direction: column;
2503
+ align-items: center;
2504
+ justify-content: center;
2505
+ gap: 12px;
2506
+ height: 100%;
2507
+ min-height: 200px;
2508
+ color: var(--white-30);
2509
+ }
2510
+
2511
+ .pki-detail-empty svg {
2512
+ opacity: 0.3;
2513
+ }
2514
+
2515
+ .pki-detail-title {
2516
+ font-size: 0.95rem;
2517
+ font-weight: 600;
2518
+ color: var(--white-80);
2519
+ margin-bottom: 12px;
2520
+ }
2521
+
2522
+ /* DN Form */
2523
+ .pki-form-grid {
2524
+ grid-template-columns: 1fr 1fr 1fr;
2525
+ gap: 8px;
2526
+ }
2527
+
2528
+ @media (max-width: 600px) {
2529
+ .pki-form-grid {
2530
+ grid-template-columns: 1fr 1fr;
2531
+ }
2532
+ }
2533
+
2534
+ .pki-form-grid .glass-input-group label {
2535
+ font-size: 0.7rem;
2536
+ text-transform: uppercase;
2537
+ letter-spacing: 0.05em;
2538
+ color: var(--white-50);
2539
+ }
2540
+
2541
+ .pki-form-grid .glass-input {
2542
+ font-size: 0.82rem;
2543
+ padding: 4px 8px;
2544
+ }
2545
+
2546
+ /* Section Headers */
2547
+ .pki-section-header {
2548
+ display: flex;
2549
+ align-items: center;
2550
+ justify-content: space-between;
2551
+ margin: 12px 0 6px;
2552
+ font-size: 0.8rem;
2553
+ font-weight: 600;
2554
+ color: var(--white-60);
2555
+ text-transform: uppercase;
2556
+ letter-spacing: 0.05em;
2557
+ }
2558
+
2559
+ /* Key/Cert List Items */
2560
+ .pki-key-item, .pki-cert-item, .pki-policy-item {
2561
+ display: flex;
2562
+ align-items: center;
2563
+ gap: 8px;
2564
+ padding: 6px 8px;
2565
+ border-radius: 4px;
2566
+ font-size: 0.8rem;
2567
+ color: var(--white-70);
2568
+ cursor: pointer;
2569
+ }
2570
+
2571
+ .pki-key-item:hover, .pki-cert-item:hover, .pki-policy-item:hover {
2572
+ background: var(--glass-hover);
2573
+ }
2574
+
2575
+ .pki-key-item .pki-badge, .pki-cert-item .pki-badge {
2576
+ font-size: 0.65rem;
2577
+ padding: 1px 5px;
2578
+ border-radius: 3px;
2579
+ text-transform: uppercase;
2580
+ font-weight: 600;
2581
+ }
2582
+
2583
+ .pki-badge.signing { background: rgba(59, 130, 246, 0.2); color: var(--weapon); }
2584
+ .pki-badge.encryption { background: rgba(139, 92, 246, 0.2); color: var(--galaxy); }
2585
+ .pki-badge.root { background: rgba(239, 68, 68, 0.2); color: var(--monster); }
2586
+ .pki-badge.valid { background: rgba(16, 185, 129, 0.2); color: var(--success); }
2587
+ .pki-badge.expired { background: rgba(239, 68, 68, 0.2); color: var(--monster); }
2588
+ .pki-badge.ca { background: rgba(245, 158, 11, 0.2); color: #f59e0b; }
2589
+
2590
+ /* Info Rows */
2591
+ .pki-info-row {
2592
+ display: flex;
2593
+ align-items: baseline;
2594
+ gap: 8px;
2595
+ padding: 4px 0;
2596
+ border-bottom: 1px solid var(--white-05);
2597
+ font-size: 0.82rem;
2598
+ }
2599
+
2600
+ .pki-info-label {
2601
+ flex-shrink: 0;
2602
+ width: 80px;
2603
+ color: var(--white-50);
2604
+ font-size: 0.75rem;
2605
+ text-transform: uppercase;
2606
+ letter-spacing: 0.03em;
2607
+ }
2608
+
2609
+ .pki-info-value {
2610
+ color: var(--white-80);
2611
+ word-break: break-all;
2612
+ }
2613
+
2614
+ /* PEM Preview */
2615
+ .pki-pem-details {
2616
+ margin-top: 8px;
2617
+ }
2618
+
2619
+ .pki-pem-preview {
2620
+ font-size: 0.7rem;
2621
+ color: var(--white-50);
2622
+ background: var(--white-05);
2623
+ padding: 8px;
2624
+ border-radius: 4px;
2625
+ overflow-x: auto;
2626
+ max-height: 120px;
2627
+ white-space: pre-wrap;
2628
+ word-break: break-all;
2629
+ }
2630
+
2631
+ /* Actions Bar */
2632
+ .pki-actions-bar {
2633
+ display: flex;
2634
+ gap: 8px;
2635
+ margin-top: 12px;
2636
+ padding-top: 12px;
2637
+ border-top: 1px solid var(--glass-border);
2638
+ }
2639
+
2640
+ /* Rulesets Section */
2641
+ .pki-rulesets-section {
2642
+ margin-top: 12px;
2643
+ }
2644
+
2645
+ .pki-rulesets-content {
2646
+ padding: 8px 0;
2647
+ }
2648
+
2649
+ .pki-policy-item {
2650
+ justify-content: space-between;
2651
+ }
2652
+
2653
+ .pki-policy-name {
2654
+ flex: 1;
2655
+ }
2656
+
2657
+ .pki-policy-score {
2658
+ font-size: 0.75rem;
2659
+ font-weight: 600;
2660
+ }
2661
+
2662
+ .pki-policy-toggle {
2663
+ width: 32px;
2664
+ height: 18px;
2665
+ border-radius: 9px;
2666
+ background: var(--white-20);
2667
+ border: none;
2668
+ cursor: pointer;
2669
+ position: relative;
2670
+ transition: background 0.2s;
2671
+ }
2672
+
2673
+ .pki-policy-toggle.active {
2674
+ background: var(--success);
2675
+ }
2676
+
2677
+ .pki-policy-toggle::after {
2678
+ content: '';
2679
+ position: absolute;
2680
+ width: 14px;
2681
+ height: 14px;
2682
+ border-radius: 50%;
2683
+ background: white;
2684
+ top: 2px;
2685
+ left: 2px;
2686
+ transition: transform 0.2s;
2687
+ }
2688
+
2689
+ .pki-policy-toggle.active::after {
2690
+ transform: translateX(14px);
2691
+ }
2692
+
2693
+ /* Policy Card & Rules */
2694
+ .pki-policy-card {
2695
+ border: 1px solid var(--glass-border);
2696
+ border-radius: 6px;
2697
+ margin-bottom: 6px;
2698
+ overflow: hidden;
2699
+ }
2700
+
2701
+ .pki-policy-card .pki-policy-item {
2702
+ padding: 8px 10px;
2703
+ }
2704
+
2705
+ .pki-policy-delete {
2706
+ width: 20px;
2707
+ height: 20px;
2708
+ padding: 0;
2709
+ font-size: 0.9rem;
2710
+ line-height: 1;
2711
+ opacity: 0.5;
2712
+ }
2713
+
2714
+ .pki-policy-delete:hover { opacity: 1; }
2715
+
2716
+ .pki-policy-rules {
2717
+ padding: 4px 10px 10px;
2718
+ border-top: 1px solid var(--glass-border);
2719
+ background: var(--white-05);
2720
+ }
2721
+
2722
+ .pki-rule-row {
2723
+ display: flex;
2724
+ align-items: center;
2725
+ gap: 6px;
2726
+ padding: 4px 0;
2727
+ font-size: 0.78rem;
2728
+ color: var(--white-70);
2729
+ border-bottom: 1px solid var(--white-05);
2730
+ }
2731
+
2732
+ .pki-rule-type {
2733
+ font-weight: 500;
2734
+ flex-shrink: 0;
2735
+ }
2736
+
2737
+ .pki-rule-params {
2738
+ flex: 1;
2739
+ color: var(--white-50);
2740
+ font-size: 0.72rem;
2741
+ overflow: hidden;
2742
+ text-overflow: ellipsis;
2743
+ white-space: nowrap;
2744
+ }
2745
+
2746
+ .pki-rule-delete {
2747
+ background: none;
2748
+ border: none;
2749
+ color: var(--white-40);
2750
+ cursor: pointer;
2751
+ font-size: 0.85rem;
2752
+ padding: 0 4px;
2753
+ }
2754
+
2755
+ .pki-rule-delete:hover { color: var(--monster); }
2756
+
2757
+ .pki-add-rule-row {
2758
+ margin-top: 6px;
2759
+ }
2760
+
2761
+ .pki-rule-type-select {
2762
+ font-size: 0.78rem;
2763
+ width: 100%;
2764
+ }
2765
+
2766
+ /* Address Analysis */
2767
+ .pki-address-analysis {
2768
+ padding: 8px 0;
2769
+ }
2770
+
2771
+ .pki-address-input-row {
2772
+ display: flex;
2773
+ gap: 8px;
2774
+ align-items: flex-start;
2775
+ }
2776
+
2777
+ .pki-address-input-row .glass-textarea {
2778
+ flex: 1;
2779
+ font-size: 0.8rem;
2780
+ }
2781
+
2782
+ .pki-address-results {
2783
+ margin-top: 8px;
2784
+ }
2785
+
2786
+ .pki-address-card {
2787
+ display: flex;
2788
+ align-items: center;
2789
+ gap: 8px;
2790
+ padding: 6px 8px;
2791
+ border-bottom: 1px solid var(--white-05);
2792
+ font-size: 0.8rem;
2793
+ }
2794
+
2795
+ .pki-address-balance {
2796
+ color: var(--white-50);
2797
+ font-size: 0.75rem;
2798
+ margin-left: auto;
2799
+ }
2800
+
2801
+ .pki-address-total {
2802
+ display: flex;
2803
+ align-items: center;
2804
+ gap: 8px;
2805
+ padding: 8px 0;
2806
+ margin-top: 8px;
2807
+ border-top: 1px solid var(--glass-border);
2808
+ font-weight: 600;
2809
+ }
2810
+
2811
+ .pki-assign-addr {
2812
+ font-size: 0.7rem;
2813
+ padding: 2px 6px;
2814
+ }
2815
+
2816
+ /* =============================================================================
2817
+ vCard-First Layout Styles
2818
+ ============================================================================= */
2819
+
2820
+ /* Full-width form field */
2821
+ .full-width {
2822
+ grid-column: 1 / -1;
2823
+ }
2824
+
2825
+ /* Readonly badge */
2826
+ .readonly-badge {
2827
+ font-size: 0.7rem;
2828
+ padding: 2px 8px;
2829
+ background: var(--white-10);
2830
+ border: 1px solid var(--white-20);
2831
+ border-radius: 4px;
2832
+ color: var(--white-60);
2833
+ font-weight: 500;
2834
+ margin-left: 8px;
2835
+ }
2836
+
2837
+ /* Keys display section */
2838
+ .keys-display-section {
2839
+ margin-top: 32px;
2840
+ padding-top: 32px;
2841
+ border-top: 1px solid var(--glass-border);
2842
+ }
2843
+
2844
+ .keys-display-info {
2845
+ font-size: 0.875rem;
2846
+ color: var(--white-60);
2847
+ margin: 8px 0 16px 0;
2848
+ }
2849
+
2850
+ .keys-display-grid {
2851
+ display: grid;
2852
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
2853
+ gap: 16px;
2854
+ margin-top: 16px;
2855
+ }
2856
+
2857
+ /* Key display card */
2858
+ .key-display-card {
2859
+ background: var(--glass-bg);
2860
+ border: 1px solid var(--glass-border);
2861
+ border-radius: var(--radius-sm);
2862
+ padding: 16px;
2863
+ backdrop-filter: var(--glass-blur);
2864
+ }
2865
+
2866
+ .key-display-header {
2867
+ display: flex;
2868
+ justify-content: space-between;
2869
+ align-items: center;
2870
+ margin-bottom: 12px;
2871
+ padding-bottom: 12px;
2872
+ border-bottom: 1px solid var(--white-10);
2873
+ }
2874
+
2875
+ .key-display-label {
2876
+ font-weight: 600;
2877
+ font-size: 0.875rem;
2878
+ color: var(--white-90);
2879
+ }
2880
+
2881
+ .key-display-badge {
2882
+ font-size: 0.7rem;
2883
+ padding: 3px 8px;
2884
+ border-radius: 4px;
2885
+ font-weight: 500;
2886
+ text-transform: uppercase;
2887
+ letter-spacing: 0.5px;
2888
+ }
2889
+
2890
+ .key-display-badge.signing {
2891
+ background: rgba(59, 130, 246, 0.2);
2892
+ border: 1px solid rgba(59, 130, 246, 0.4);
2893
+ color: #60a5fa;
2894
+ }
2895
+
2896
+ .key-display-badge.encryption {
2897
+ background: rgba(16, 185, 129, 0.2);
2898
+ border: 1px solid rgba(16, 185, 129, 0.4);
2899
+ color: #34d399;
2900
+ }
2901
+
2902
+ .key-display-row {
2903
+ display: flex;
2904
+ align-items: center;
2905
+ gap: 8px;
2906
+ padding: 6px 0;
2907
+ font-size: 0.8125rem;
2908
+ }
2909
+
2910
+ .key-display-field {
2911
+ color: var(--white-60);
2912
+ min-width: 100px;
2913
+ font-weight: 500;
2914
+ }
2915
+
2916
+ .key-display-value {
2917
+ font-family: var(--font-mono);
2918
+ font-size: 0.75rem;
2919
+ color: var(--white-90);
2920
+ flex: 1;
2921
+ word-break: break-all;
2922
+ }
2923
+
2924
+ .key-display-value.truncate {
2925
+ overflow: hidden;
2926
+ text-overflow: ellipsis;
2927
+ white-space: nowrap;
2928
+ word-break: normal;
2929
+ }
2930
+
2931
+ .copy-btn-small,
2932
+ .explorer-link-small {
2933
+ padding: 4px;
2934
+ background: var(--white-10);
2935
+ border: 1px solid var(--white-20);
2936
+ border-radius: 4px;
2937
+ color: var(--white-60);
2938
+ cursor: pointer;
2939
+ transition: all 0.15s ease;
2940
+ display: inline-flex;
2941
+ align-items: center;
2942
+ justify-content: center;
2943
+ flex-shrink: 0;
2944
+ }
2945
+
2946
+ .copy-btn-small:hover,
2947
+ .explorer-link-small:hover {
2948
+ background: var(--white-20);
2949
+ color: var(--white-90);
2950
+ border-color: var(--white-30);
2951
+ }
2952
+
2953
+ /* Trust Map placeholder */
2954
+ .trust-map-placeholder {
2955
+ display: flex;
2956
+ flex-direction: column;
2957
+ align-items: center;
2958
+ justify-content: center;
2959
+ min-height: 400px;
2960
+ text-align: center;
2961
+ padding: 48px;
2962
+ color: var(--white-60);
2963
+ }
2964
+
2965
+ .trust-map-placeholder svg {
2966
+ margin-bottom: 24px;
2967
+ opacity: 0.5;
2968
+ }
2969
+
2970
+ .trust-map-placeholder h3 {
2971
+ font-size: 1.5rem;
2972
+ margin-bottom: 12px;
2973
+ color: var(--white-80);
2974
+ }
2975
+
2976
+ .trust-map-placeholder p {
2977
+ max-width: 480px;
2978
+ line-height: 1.6;
2979
+ margin-bottom: 8px;
2980
+ }
2981
+
2982
+ .trust-map-subtitle {
2983
+ font-size: 0.875rem;
2984
+ color: var(--white-50);
2985
+ }
2986
+
2987
+ /* Bond/Trust Proof intro */
2988
+ .bond-intro {
2989
+ background: var(--glass-bg);
2990
+ border: 1px solid var(--glass-border);
2991
+ border-radius: var(--radius-sm);
2992
+ padding: 20px;
2993
+ margin-bottom: 24px;
2994
+ backdrop-filter: var(--glass-blur);
2995
+ }
2996
+
2997
+ .bond-intro h4 {
2998
+ margin-bottom: 8px;
2999
+ }
3000
+
3001
+ .bond-intro p {
3002
+ font-size: 0.875rem;
3003
+ color: var(--white-70);
3004
+ line-height: 1.6;
3005
+ }
3006
+
3007
+
3008
+ /* =============================================================================
3009
+ Trust System UI Styles
3010
+ ============================================================================= */
3011
+
3012
+ /* Trust Map Controls */
3013
+ /* =============================================================================
3014
+ Trust Map - Collapsible Levels Box
3015
+ ============================================================================= */
3016
+
3017
+ .trust-levels-box {
3018
+ margin-bottom: 12px;
3019
+ background: var(--glass-bg);
3020
+ border: 1px solid var(--glass-border);
3021
+ border-radius: var(--radius-sm);
3022
+ backdrop-filter: var(--glass-blur);
3023
+ overflow: hidden;
3024
+ }
3025
+
3026
+ .trust-levels-header {
3027
+ display: flex;
3028
+ justify-content: space-between;
3029
+ align-items: center;
3030
+ padding: 10px 14px;
3031
+ cursor: pointer;
3032
+ font-size: 0.8125rem;
3033
+ font-weight: 600;
3034
+ color: var(--white-70);
3035
+ user-select: none;
3036
+ list-style: none;
3037
+ }
3038
+
3039
+ .trust-levels-header::-webkit-details-marker { display: none; }
3040
+
3041
+ .trust-levels-header .chevron-icon {
3042
+ transition: transform 0.2s ease;
3043
+ }
3044
+
3045
+ .trust-levels-box[open] .trust-levels-header .chevron-icon {
3046
+ transform: rotate(180deg);
3047
+ }
3048
+
3049
+ .trust-levels-badges {
3050
+ display: flex;
3051
+ flex-wrap: wrap;
3052
+ gap: 8px;
3053
+ padding: 0 14px 12px;
3054
+ }
3055
+
3056
+ .trust-badge {
3057
+ display: inline-flex;
3058
+ align-items: center;
3059
+ padding: 3px 10px;
3060
+ border-radius: 12px;
3061
+ font-size: 0.6875rem;
3062
+ font-weight: 600;
3063
+ letter-spacing: 0.02em;
3064
+ }
3065
+
3066
+ .trust-badge.trust-ultimate { background: rgba(139, 92, 246, 0.2); color: #a78bfa; border: 1px solid rgba(139, 92, 246, 0.3); }
3067
+ .trust-badge.trust-full { background: rgba(16, 185, 129, 0.2); color: #6ee7b7; border: 1px solid rgba(16, 185, 129, 0.3); }
3068
+ .trust-badge.trust-marginal { background: rgba(245, 158, 11, 0.2); color: #fbbf24; border: 1px solid rgba(245, 158, 11, 0.3); }
3069
+ .trust-badge.trust-unknown { background: rgba(107, 114, 128, 0.2); color: #9ca3af; border: 1px solid rgba(107, 114, 128, 0.3); }
3070
+ .trust-badge.trust-never { background: rgba(239, 68, 68, 0.2); color: #f87171; border: 1px solid rgba(239, 68, 68, 0.3); }
3071
+
3072
+ /* =============================================================================
3073
+ Trust Map - Actions Bar
3074
+ ============================================================================= */
3075
+
3076
+ .trust-actions-bar {
3077
+ display: flex;
3078
+ align-items: center;
3079
+ gap: 8px;
3080
+ margin-bottom: 12px;
3081
+ }
3082
+
3083
+ .trust-actions-right {
3084
+ margin-left: auto;
3085
+ display: flex;
3086
+ gap: 6px;
3087
+ }
3088
+
3089
+ /* =============================================================================
3090
+ Trust Map - Scan Status
3091
+ ============================================================================= */
3092
+
3093
+ .trust-scan-status {
3094
+ display: none;
3095
+ align-items: center;
3096
+ gap: 8px;
3097
+ padding: 8px 14px;
3098
+ margin-bottom: 12px;
3099
+ font-size: 0.75rem;
3100
+ color: var(--white-50);
3101
+ background: var(--white-05);
3102
+ border-radius: var(--radius-sm);
3103
+ }
3104
+
3105
+ .trust-scan-status.active {
3106
+ display: flex;
3107
+ }
3108
+
3109
+ .trust-scan-dot {
3110
+ width: 6px;
3111
+ height: 6px;
3112
+ border-radius: 50%;
3113
+ background: #10b981;
3114
+ animation: trust-pulse 1.5s ease-in-out infinite;
3115
+ }
3116
+
3117
+ @keyframes trust-pulse {
3118
+ 0%, 100% { opacity: 0.4; }
3119
+ 50% { opacity: 1; }
3120
+ }
3121
+
3122
+ .trust-scan-count {
3123
+ margin-left: auto;
3124
+ font-family: var(--font-mono);
3125
+ }
3126
+
3127
+ /* =============================================================================
3128
+ Trust Map - Scrollable Trust List
3129
+ ============================================================================= */
3130
+
3131
+ .trust-list {
3132
+ flex: 1;
3133
+ overflow-y: auto;
3134
+ min-height: 200px;
3135
+ scrollbar-width: thin;
3136
+ scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
3137
+ }
3138
+
3139
+ .trust-list::-webkit-scrollbar { width: 3px; }
3140
+ .trust-list::-webkit-scrollbar-track { background: transparent; }
3141
+ .trust-list::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.2); border-radius: 2px; }
3142
+
3143
+ .trust-list-empty {
3144
+ display: flex;
3145
+ flex-direction: column;
3146
+ align-items: center;
3147
+ justify-content: center;
3148
+ padding: 48px 24px;
3149
+ color: var(--white-30);
3150
+ text-align: center;
3151
+ }
3152
+
3153
+ .trust-list-empty p {
3154
+ margin: 8px 0 0;
3155
+ font-size: 0.875rem;
3156
+ }
3157
+
3158
+ .trust-list-subtitle {
3159
+ font-size: 0.75rem !important;
3160
+ color: var(--white-20) !important;
3161
+ }
3162
+
3163
+ /* Trust Row */
3164
+ .trust-row {
3165
+ border: 1px solid var(--glass-border);
3166
+ border-radius: 8px;
3167
+ margin-bottom: 6px;
3168
+ overflow: hidden;
3169
+ transition: border-color 0.15s ease;
3170
+ }
3171
+
3172
+ .trust-row:hover {
3173
+ border-color: var(--white-20);
3174
+ }
3175
+
3176
+ .trust-row-header {
3177
+ display: flex;
3178
+ align-items: center;
3179
+ gap: 10px;
3180
+ padding: 10px 14px;
3181
+ cursor: pointer;
3182
+ background: var(--glass-bg);
3183
+ transition: background 0.15s ease;
3184
+ user-select: none;
3185
+ }
3186
+
3187
+ .trust-row-header:hover {
3188
+ background: var(--glass-hover);
3189
+ }
3190
+
3191
+ .trust-row-address {
3192
+ font-family: var(--font-mono);
3193
+ font-size: 0.8125rem;
3194
+ color: var(--white-80);
3195
+ flex: 1;
3196
+ overflow: hidden;
3197
+ text-overflow: ellipsis;
3198
+ white-space: nowrap;
3199
+ }
3200
+
3201
+ .trust-row-chain {
3202
+ font-size: 0.625rem;
3203
+ font-weight: 700;
3204
+ letter-spacing: 0.05em;
3205
+ padding: 2px 6px;
3206
+ border-radius: 4px;
3207
+ background: var(--white-10);
3208
+ color: var(--white-60);
3209
+ }
3210
+
3211
+ .trust-row-level {
3212
+ font-size: 0.6875rem;
3213
+ font-weight: 600;
3214
+ padding: 2px 8px;
3215
+ border-radius: 10px;
3216
+ }
3217
+
3218
+ .trust-row-direction {
3219
+ font-size: 0.8125rem;
3220
+ color: var(--white-40);
3221
+ width: 20px;
3222
+ text-align: center;
3223
+ }
3224
+
3225
+ .trust-row-expand {
3226
+ color: var(--white-30);
3227
+ font-size: 0.75rem;
3228
+ transition: transform 0.2s ease;
3229
+ }
3230
+
3231
+ .trust-row.expanded .trust-row-expand {
3232
+ transform: rotate(90deg);
3233
+ }
3234
+
3235
+ /* Trust Row Detail (expanded) */
3236
+ .trust-row-detail {
3237
+ display: none;
3238
+ padding: 0 14px 14px;
3239
+ background: var(--white-05);
3240
+ border-top: 1px solid var(--glass-border);
3241
+ }
3242
+
3243
+ .trust-row.expanded .trust-row-detail {
3244
+ display: block;
3245
+ }
3246
+
3247
+ .trust-row-full-address {
3248
+ font-family: var(--font-mono);
3249
+ font-size: 0.75rem;
3250
+ color: var(--white-60);
3251
+ word-break: break-all;
3252
+ padding: 8px 0;
3253
+ border-bottom: 1px solid var(--glass-border);
3254
+ margin-bottom: 8px;
3255
+ }
3256
+
3257
+ .trust-row-txs {
3258
+ max-height: 200px;
3259
+ overflow-y: auto;
3260
+ }
3261
+
3262
+ .trust-row-tx {
3263
+ display: flex;
3264
+ align-items: center;
3265
+ gap: 10px;
3266
+ padding: 6px 0;
3267
+ font-size: 0.75rem;
3268
+ border-bottom: 1px solid rgba(255, 255, 255, 0.04);
3269
+ }
3270
+
3271
+ .trust-row-tx:last-child { border-bottom: none; }
3272
+
3273
+ .trust-row-tx-hash {
3274
+ font-family: var(--font-mono);
3275
+ color: var(--weapon);
3276
+ text-decoration: none;
3277
+ font-size: 0.6875rem;
3278
+ }
3279
+
3280
+ .trust-row-tx-hash:hover {
3281
+ text-decoration: underline;
3282
+ color: var(--white-90);
3283
+ }
3284
+
3285
+ .trust-row-tx-date {
3286
+ color: var(--white-40);
3287
+ font-size: 0.6875rem;
3288
+ margin-left: auto;
3289
+ }
3290
+
3291
+ .trust-row-tx-level {
3292
+ font-size: 0.625rem;
3293
+ padding: 1px 6px;
3294
+ border-radius: 8px;
3295
+ }
3296
+
3297
+ .trust-row-actions {
3298
+ display: flex;
3299
+ gap: 8px;
3300
+ padding-top: 10px;
3301
+ border-top: 1px solid var(--glass-border);
3302
+ margin-top: 8px;
3303
+ }
3304
+
3305
+ /* =============================================================================
3306
+ Trust Map - Modal Styles (shared)
3307
+ ============================================================================= */
3308
+
3309
+ .trust-modal .modal-glass {
3310
+ max-width: 520px;
3311
+ }
3312
+
3313
+ /* Sections with consistent spacing */
3314
+ .trust-input-section {
3315
+ margin-bottom: 20px;
3316
+ }
3317
+
3318
+ .trust-section-label {
3319
+ display: block;
3320
+ font-size: 0.75rem;
3321
+ font-weight: 600;
3322
+ letter-spacing: 0.05em;
3323
+ text-transform: uppercase;
3324
+ color: var(--white-50);
3325
+ margin-bottom: 10px;
3326
+ }
3327
+
3328
+ /* Input Tabs (Address / vCard) */
3329
+ .trust-input-tabs {
3330
+ display: flex;
3331
+ gap: 0;
3332
+ margin-bottom: 12px;
3333
+ border-radius: 8px;
3334
+ overflow: hidden;
3335
+ border: 1px solid var(--white-10);
3336
+ }
3337
+
3338
+ .trust-input-tab {
3339
+ flex: 1;
3340
+ padding: 8px 12px;
3341
+ font-size: 0.8125rem;
3342
+ font-weight: 500;
3343
+ background: var(--white-05);
3344
+ color: var(--white-50);
3345
+ border: none;
3346
+ cursor: pointer;
3347
+ transition: all 0.15s ease;
3348
+ }
3349
+
3350
+ .trust-input-tab + .trust-input-tab {
3351
+ border-left: 1px solid var(--white-10);
3352
+ }
3353
+
3354
+ .trust-input-tab.active {
3355
+ background: var(--white-10);
3356
+ color: var(--white-90);
3357
+ }
3358
+
3359
+ .trust-input-tab:hover:not(.active) {
3360
+ background: var(--white-08);
3361
+ color: var(--white-70);
3362
+ }
3363
+
3364
+ /* Address input */
3365
+ .trust-address-input {
3366
+ display: block;
3367
+ width: 100%;
3368
+ padding: 12px 14px;
3369
+ background: var(--white-05);
3370
+ border: 1px solid var(--white-10);
3371
+ border-radius: 8px;
3372
+ font-family: var(--font-mono);
3373
+ font-size: 0.875rem;
3374
+ color: var(--white-90);
3375
+ word-break: break-all;
3376
+ box-sizing: border-box;
3377
+ transition: border-color 0.15s ease;
3378
+ }
3379
+
3380
+ .trust-address-input::placeholder {
3381
+ color: var(--white-30);
3382
+ font-family: var(--font-mono);
3383
+ }
3384
+
3385
+ .trust-address-input:focus {
3386
+ outline: none;
3387
+ }
3388
+
3389
+ .trust-address-input.invalid {
3390
+ border-color: rgba(239, 68, 68, 0.4);
3391
+ }
3392
+
3393
+ .trust-address-input.invalid:focus {
3394
+ border-color: rgba(239, 68, 68, 0.6);
3395
+ }
3396
+
3397
+ .trust-address-input.valid {
3398
+ border-color: rgba(16, 185, 129, 0.4);
3399
+ }
3400
+
3401
+ .trust-address-input.valid:focus {
3402
+ border-color: rgba(16, 185, 129, 0.6);
3403
+ }
3404
+
3405
+ /* Address status line */
3406
+ .trust-address-status {
3407
+ display: flex;
3408
+ justify-content: flex-end;
3409
+ min-height: 18px;
3410
+ margin-top: 5px;
3411
+ font-size: 0.75rem;
3412
+ color: var(--white-30);
3413
+ }
3414
+
3415
+ .trust-address-status.detected {
3416
+ color: #6ee7b7;
3417
+ }
3418
+
3419
+ .trust-address-status.invalid {
3420
+ color: #f87171;
3421
+ }
3422
+
3423
+ /* VCF dropzone */
3424
+ .trust-vcf-dropzone {
3425
+ display: flex;
3426
+ flex-direction: column;
3427
+ align-items: center;
3428
+ justify-content: center;
3429
+ gap: 8px;
3430
+ padding: 24px;
3431
+ border: 2px dashed var(--white-15);
3432
+ border-radius: 10px;
3433
+ cursor: pointer;
3434
+ transition: all 0.15s ease;
3435
+ color: var(--white-40);
3436
+ font-size: 0.8125rem;
3437
+ text-align: center;
3438
+ }
3439
+
3440
+ .trust-vcf-dropzone:hover,
3441
+ .trust-vcf-dropzone.dragover {
3442
+ border-color: var(--weapon);
3443
+ background: rgba(59, 130, 246, 0.05);
3444
+ color: var(--white-60);
3445
+ }
3446
+
3447
+ .trust-vcf-dropzone svg {
3448
+ opacity: 0.4;
3449
+ }
3450
+
3451
+ /* VCF summary card */
3452
+ .trust-vcf-card {
3453
+ display: flex;
3454
+ align-items: center;
3455
+ gap: 12px;
3456
+ padding: 12px;
3457
+ background: var(--white-05);
3458
+ border: 1px solid var(--white-10);
3459
+ border-radius: 8px;
3460
+ }
3461
+
3462
+ .trust-vcf-photo {
3463
+ width: 44px;
3464
+ height: 44px;
3465
+ border-radius: 50%;
3466
+ object-fit: cover;
3467
+ flex-shrink: 0;
3468
+ }
3469
+
3470
+ .trust-vcf-info {
3471
+ flex: 1;
3472
+ min-width: 0;
3473
+ }
3474
+
3475
+ .trust-vcf-name {
3476
+ font-weight: 600;
3477
+ font-size: 0.9375rem;
3478
+ color: var(--white-90);
3479
+ line-height: 1.3;
3480
+ }
3481
+
3482
+ .trust-vcf-org, .trust-vcf-email {
3483
+ font-size: 0.8125rem;
3484
+ color: var(--white-50);
3485
+ line-height: 1.4;
3486
+ white-space: nowrap;
3487
+ overflow: hidden;
3488
+ text-overflow: ellipsis;
3489
+ }
3490
+
3491
+ .trust-vcf-addresses {
3492
+ display: flex;
3493
+ flex-direction: column;
3494
+ gap: 6px;
3495
+ }
3496
+
3497
+ .trust-vcf-addr-option {
3498
+ display: flex;
3499
+ align-items: center;
3500
+ gap: 8px;
3501
+ padding: 8px 10px;
3502
+ background: var(--white-05);
3503
+ border: 1px solid var(--white-10);
3504
+ border-radius: 6px;
3505
+ cursor: pointer;
3506
+ font-size: 0.8125rem;
3507
+ transition: border-color 0.15s;
3508
+ }
3509
+
3510
+ .trust-vcf-addr-option:hover {
3511
+ border-color: var(--white-20);
3512
+ }
3513
+
3514
+ .trust-vcf-addr-option input[type="radio"] {
3515
+ accent-color: var(--weapon);
3516
+ }
3517
+
3518
+ .trust-vcf-addr-option code {
3519
+ font-family: var(--font-mono);
3520
+ font-size: 0.8125rem;
3521
+ color: var(--white-70);
3522
+ }
3523
+
3524
+ .trust-vcf-note {
3525
+ font-size: 0.8125rem;
3526
+ color: var(--white-40);
3527
+ margin-top: 8px;
3528
+ padding: 8px;
3529
+ background: var(--white-05);
3530
+ border-radius: 6px;
3531
+ }
3532
+
3533
+ .trust-vcf-clear {
3534
+ margin-top: 10px;
3535
+ }
3536
+
3537
+ /* Trust level options */
3538
+ .trust-level-options { display: flex; flex-direction: column; gap: 6px; }
3539
+
3540
+ .trust-level-option {
3541
+ display: flex;
3542
+ align-items: center;
3543
+ gap: 10px;
3544
+ padding: 10px 12px;
3545
+ background: var(--white-03);
3546
+ border: 1px solid var(--glass-border);
3547
+ border-radius: 8px;
3548
+ cursor: pointer;
3549
+ transition: all 0.15s ease;
3550
+ }
3551
+
3552
+ .trust-level-option:hover {
3553
+ background: var(--white-05);
3554
+ border-color: var(--level-border, var(--white-20));
3555
+ }
3556
+
3557
+ .trust-level-option:has(input:checked) {
3558
+ background: rgba(255, 255, 255, 0.04);
3559
+ border-color: var(--level-border, var(--white-30));
3560
+ }
3561
+
3562
+ .trust-level-option input[type="radio"] {
3563
+ display: none;
3564
+ }
3565
+
3566
+ .trust-level-indicator {
3567
+ width: 4px;
3568
+ height: 28px;
3569
+ border-radius: 2px;
3570
+ flex-shrink: 0;
3571
+ opacity: 0.4;
3572
+ transition: opacity 0.15s ease;
3573
+ }
3574
+
3575
+ .trust-level-option:has(input:checked) .trust-level-indicator {
3576
+ opacity: 1;
3577
+ }
3578
+
3579
+ .trust-level-label { display: flex; flex-direction: column; gap: 1px; flex: 1; color: var(--white-60); transition: color 0.15s; }
3580
+ .trust-level-option:has(input:checked) .trust-level-label { color: var(--white-90); }
3581
+ .trust-level-name { font-weight: 600; font-size: 0.875rem; }
3582
+ .trust-level-desc { font-size: 0.75rem; color: var(--white-40); }
3583
+ .trust-level-option:has(input:checked) .trust-level-desc { color: var(--white-50); }
3584
+
3585
+
3586
+ /* Modal actions */
3587
+ .trust-modal-actions {
3588
+ display: flex;
3589
+ gap: 10px;
3590
+ justify-content: flex-end;
3591
+ padding-top: 4px;
3592
+ }
3593
+
3594
+ /* Trust Warning */
3595
+ .trust-warning {
3596
+ display: flex;
3597
+ flex-direction: column;
3598
+ align-items: center;
3599
+ text-align: center;
3600
+ padding: 24px;
3601
+ background: rgba(239, 68, 68, 0.1);
3602
+ border: 1px solid rgba(239, 68, 68, 0.3);
3603
+ border-radius: 8px;
3604
+ margin-bottom: 24px;
3605
+ }
3606
+
3607
+ .trust-warning svg { margin-bottom: 16px; color: var(--monster); }
3608
+ .trust-warning p { line-height: 1.6; color: var(--white-70); margin-bottom: 12px; }
3609
+ .trust-warning p:last-child { margin-bottom: 0; }
3610
+ .trust-warning strong { color: var(--monster); }
3611
+
3612
+ .trust-tx-hash { margin-bottom: 24px; }
3613
+ .trust-tx-hash label { display: block; font-size: 0.875rem; color: var(--white-60); margin-bottom: 8px; }
3614
+ .trust-tx-hash code {
3615
+ display: block;
3616
+ padding: 12px;
3617
+ background: var(--white-05);
3618
+ border: 1px solid var(--white-10);
3619
+ border-radius: 8px;
3620
+ font-family: var(--font-mono);
3621
+ font-size: 0.875rem;
3622
+ color: var(--white-90);
3623
+ }
3624
+
3625
+ /* =============================================================================
3626
+ Trust Map - Rules Builder
3627
+ ============================================================================= */
3628
+
3629
+ .trust-rules-list {
3630
+ display: flex;
3631
+ flex-direction: column;
3632
+ gap: 10px;
3633
+ margin-bottom: 16px;
3634
+ max-height: 350px;
3635
+ overflow-y: auto;
3636
+ }
3637
+
3638
+ .trust-rule-item {
3639
+ display: flex;
3640
+ align-items: center;
3641
+ gap: 8px;
3642
+ padding: 10px 12px;
3643
+ background: var(--glass-bg);
3644
+ border: 1px solid var(--glass-border);
3645
+ border-radius: 8px;
3646
+ }
3647
+
3648
+ .trust-rule-item select,
3649
+ .trust-rule-item input {
3650
+ background: var(--white-05);
3651
+ border: 1px solid var(--white-10);
3652
+ border-radius: 6px;
3653
+ color: var(--white-90);
3654
+ font-size: 0.75rem;
3655
+ padding: 4px 8px;
3656
+ }
3657
+
3658
+ .trust-rule-item select { min-width: 100px; }
3659
+ .trust-rule-item input[type="number"] { width: 60px; }
3660
+
3661
+ .trust-rule-delete {
3662
+ background: none;
3663
+ border: none;
3664
+ color: var(--white-30);
3665
+ cursor: pointer;
3666
+ padding: 4px;
3667
+ font-size: 1rem;
3668
+ line-height: 1;
3669
+ }
3670
+
3671
+ .trust-rule-delete:hover { color: #f87171; }
3672
+
3673
+ .trust-rules-empty {
3674
+ text-align: center;
3675
+ padding: 24px;
3676
+ color: var(--white-30);
3677
+ font-size: 0.8125rem;
3678
+ }
3679
+
3680
+ /* =============================================================================
3681
+ Trust Map - Mobile
3682
+ ============================================================================= */
3683
+
3684
+ @media (max-width: 768px) {
3685
+ .trust-actions-bar { flex-wrap: wrap; }
3686
+ .trust-levels-badges { gap: 6px; }
3687
+ .trust-row-header { padding: 8px 10px; gap: 6px; }
3688
+ .trust-row-address { font-size: 0.75rem; }
3689
+ }
3690
+
3691
+
3692
+ /* =============================================================================
3693
+ Compact vCard Form Styles
3694
+ ============================================================================= */
3695
+
3696
+ .vcard-grid {
3697
+ gap: 12px !important;
3698
+ }
3699
+
3700
+ .glass-input.compact {
3701
+ padding: 8px 12px;
3702
+ font-size: 0.875rem;
3703
+ min-height: unset;
3704
+ }
3705
+
3706
+ .glass-input-group label {
3707
+ font-size: 0.75rem;
3708
+ margin-bottom: 4px;
3709
+ font-weight: 500;
3710
+ }
3711
+
3712
+ .glass-input-group {
3713
+ margin-bottom: 0;
3714
+ }
3715
+
3716
+ /* Adjust photo preview for compact layout */
3717
+ .photo-preview {
3718
+ width: 80px;
3719
+ height: 80px;
3720
+ }
3721
+
3722
+ .photo-actions {
3723
+ gap: 6px;
3724
+ }
3725
+
3726
+ .photo-actions .glass-btn {
3727
+ padding: 6px 12px;
3728
+ font-size: 0.8125rem;
3729
+ }
3730
+
3731
+ /* Keys display section spacing */
3732
+ .keys-display-section {
3733
+ margin-top: 24px;
3734
+ padding-top: 24px;
3735
+ }
3736
+
3737
+ .keys-display-info {
3738
+ margin: 6px 0 12px 0;
3739
+ }
3740
+
3741
+ /* =============================================================================
3742
+ Clean vCard Form Styles (Modern Design)
3743
+ ============================================================================= */
3744
+
3745
+ .identity-form {
3746
+ margin: 0;
3747
+ min-width: 0;
3748
+ max-width: 100%;
3749
+ overflow: hidden;
3750
+ }
3751
+
3752
+ .vcard-form-stack {
3753
+ display: flex;
3754
+ flex-direction: column;
3755
+ gap: 16px;
3756
+ max-width: 100%;
3757
+ overflow: hidden;
3758
+ }
3759
+
3760
+ .vcard-form-row {
3761
+ display: grid;
3762
+ grid-template-columns: 1fr 1fr;
3763
+ gap: 12px;
3764
+ min-width: 0;
3765
+ max-width: 100%;
3766
+ }
3767
+
3768
+ .vcard-form-row.name-row {
3769
+ grid-template-columns: 0.5fr 1.5fr 1fr;
3770
+ min-width: 0;
3771
+ }
3772
+
3773
+ .vcard-form-row.name-row-2 {
3774
+ grid-template-columns: 2fr 0.75fr;
3775
+ }
3776
+
3777
+ .vcard-form-row.address-row {
3778
+ grid-template-columns: 2fr 1fr 1fr;
3779
+ }
3780
+
3781
+ .vcard-input-group {
3782
+ display: flex;
3783
+ flex-direction: column;
3784
+ gap: 6px;
3785
+ min-width: 0;
3786
+ }
3787
+
3788
+ .vcard-input-group.vcard-input-sm {
3789
+ min-width: 80px;
3790
+ }
3791
+
3792
+ .vcard-input-group label {
3793
+ font-size: 0.8125rem;
3794
+ font-weight: 500;
3795
+ color: var(--white-70);
3796
+ letter-spacing: 0.01em;
3797
+ margin: 0;
3798
+ }
3799
+
3800
+ .vcard-input {
3801
+ background: rgba(255, 255, 255, 0.05);
3802
+ border: 1px solid rgba(255, 255, 255, 0.1);
3803
+ border-radius: 8px;
3804
+ min-width: 0;
3805
+ box-sizing: border-box;
3806
+ padding: 10px 14px;
3807
+ font-size: 0.9375rem;
3808
+ color: var(--white-90);
3809
+ font-family: var(--font-sans);
3810
+ transition: all 0.2s ease;
3811
+ outline: none;
3812
+ }
3813
+
3814
+ .vcard-input::placeholder {
3815
+ color: var(--white-40);
3816
+ }
3817
+
3818
+ .vcard-input:focus {
3819
+ background: rgba(255, 255, 255, 0.08);
3820
+ border-color: rgba(255, 255, 255, 0.25);
3821
+ box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.05);
3822
+ }
3823
+
3824
+ .vcard-input:hover:not(:focus) {
3825
+ border-color: rgba(255, 255, 255, 0.15);
3826
+ }
3827
+
3828
+ /* Photo section - see final override section below */
3829
+
3830
+ .photo-preview {
3831
+ width: 96px;
3832
+ height: 96px;
3833
+ border-radius: 12px;
3834
+ background: rgba(255, 255, 255, 0.05);
3835
+ border: 1px solid rgba(255, 255, 255, 0.1);
3836
+ display: flex;
3837
+ align-items: center;
3838
+ justify-content: center;
3839
+ overflow: hidden;
3840
+ flex-shrink: 0;
3841
+ }
3842
+
3843
+ .photo-placeholder-icon {
3844
+ width: 32px;
3845
+ height: 32px;
3846
+ color: var(--white-30);
3847
+ }
3848
+
3849
+ .photo-actions {
3850
+ display: flex;
3851
+ gap: 8px;
3852
+ flex-wrap: wrap;
3853
+ }
3854
+
3855
+ .photo-actions .glass-btn {
3856
+ padding: 8px 16px;
3857
+ font-size: 0.8125rem;
3858
+ border-radius: 6px;
3859
+ }
3860
+
3861
+ /* Keys display section */
3862
+ .keys-display-section {
3863
+ margin-top: 32px;
3864
+ padding-top: 32px;
3865
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
3866
+ }
3867
+
3868
+ .keys-display-section .section-label {
3869
+ font-size: 0.9375rem;
3870
+ font-weight: 600;
3871
+ margin-bottom: 8px;
3872
+ }
3873
+
3874
+ .keys-display-info {
3875
+ font-size: 0.8125rem;
3876
+ color: var(--white-60);
3877
+ margin: 0 0 16px 0;
3878
+ }
3879
+
3880
+ /* Make vcard tab a flex column so footer stays at bottom */
3881
+ #vcard-tab-content.active {
3882
+ display: flex !important;
3883
+ flex-direction: column;
3884
+ overflow: hidden;
3885
+ }
3886
+
3887
+ #vcard-tab-content #vcard-form-view,
3888
+ #vcard-tab-content #vcard-result-view {
3889
+ flex: 1 1 auto;
3890
+ overflow-y: auto;
3891
+ overflow-x: hidden;
3892
+ min-height: 0;
3893
+ scrollbar-width: thin;
3894
+ scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
3895
+ }
3896
+
3897
+ /* Actions footer - fixed height bar at bottom of tab */
3898
+ .vcard-actions-footer {
3899
+ flex: 0 0 48px;
3900
+ display: flex;
3901
+ gap: 16px;
3902
+ align-items: center;
3903
+ justify-content: center;
3904
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
3905
+ margin: 0 -24px;
3906
+ padding-top: 25px;
3907
+ width: calc(100% + 48px);
3908
+ }
3909
+
3910
+ .vcard-export-btn,
3911
+ .vcard-import-btn {
3912
+ padding: 10px 28px;
3913
+ font-size: 0.9375rem;
3914
+ }
3915
+
3916
+ .vcard-export-btn {
3917
+ background: rgba(255, 255, 255, 0.95) !important;
3918
+ color: #111 !important;
3919
+ border: none !important;
3920
+ font-weight: 600;
3921
+ }
3922
+
3923
+ .vcard-export-btn:hover {
3924
+ background: #fff !important;
3925
+ }
3926
+
3927
+ .vcard-import-btn {
3928
+ background: rgba(255, 255, 255, 0.08) !important;
3929
+ color: rgba(255, 255, 255, 0.7) !important;
3930
+ border: 1px solid rgba(255, 255, 255, 0.1) !important;
3931
+ cursor: pointer;
3932
+ }
3933
+
3934
+ .vcard-import-btn:hover {
3935
+ background: rgba(255, 255, 255, 0.12) !important;
3936
+ color: rgba(255, 255, 255, 0.9) !important;
3937
+ }
3938
+
3939
+ /* Readonly badge */
3940
+ .readonly-badge {
3941
+ font-size: 0.6875rem;
3942
+ padding: 2px 8px;
3943
+ background: rgba(255, 255, 255, 0.08);
3944
+ border: 1px solid rgba(255, 255, 255, 0.15);
3945
+ border-radius: 4px;
3946
+ color: var(--white-60);
3947
+ font-weight: 500;
3948
+ margin-left: 8px;
3949
+ letter-spacing: 0.03em;
3950
+ text-transform: uppercase;
3951
+ }
3952
+
3953
+ /* Mobile responsive */
3954
+ @media (max-width: 640px) {
3955
+ .vcard-form-row {
3956
+ grid-template-columns: 1fr;
3957
+ }
3958
+
3959
+ .vcard-form-row.name-row {
3960
+ grid-template-columns: 1fr 1fr;
3961
+ }
3962
+
3963
+ .vcard-form-row.name-row-2 {
3964
+ grid-template-columns: 1fr;
3965
+ }
3966
+
3967
+ .vcard-form-row.address-row {
3968
+ grid-template-columns: 1fr;
3969
+ }
3970
+
3971
+ .photo-upload-section {
3972
+ flex-direction: column;
3973
+ align-items: flex-start;
3974
+ }
3975
+ }
3976
+
3977
+
3978
+ /* =============================================================================
3979
+ Photo Left Align & Fixed Tabs with Scrollable Body
3980
+ ============================================================================= */
3981
+
3982
+ /* Photo section - see final override section below */
3983
+
3984
+ /* Fixed tabs with scrollable body */
3985
+ .modal-wide .modal-body {
3986
+ display: flex;
3987
+ flex-direction: column;
3988
+ flex: 1;
3989
+ min-height: 0;
3990
+ overflow: hidden;
3991
+ min-width: 0;
3992
+ }
3993
+
3994
+ .modal-tabs {
3995
+ flex-shrink: 0;
3996
+ position: sticky;
3997
+ top: 0;
3998
+ z-index: 10;
3999
+ background: var(--glass-bg);
4000
+ backdrop-filter: var(--glass-blur);
4001
+ border-bottom: 1px solid var(--glass-border);
4002
+ margin: -24px -24px 0 -24px;
4003
+ padding: 12px 24px;
4004
+ }
4005
+
4006
+ .modal-tab-content {
4007
+ flex: 1;
4008
+ overflow-y: auto;
4009
+ overflow-x: hidden;
4010
+
4011
+ scrollbar-width: thin;
4012
+ scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
4013
+ }
4014
+
4015
+ .modal-tab-content::-webkit-scrollbar {
4016
+ width: 3px;
4017
+ }
4018
+
4019
+ .modal-tab-content::-webkit-scrollbar-track {
4020
+ background: transparent;
4021
+ }
4022
+
4023
+ .modal-tab-content::-webkit-scrollbar-thumb {
4024
+ background: rgba(255, 255, 255, 0.2);
4025
+ border-radius: 3px;
4026
+ }
4027
+
4028
+ .modal-tab-content::-webkit-scrollbar-thumb:hover {
4029
+ background: rgba(255, 255, 255, 0.3);
4030
+ }
4031
+
4032
+ /* Ensure content doesn't get cut off */
4033
+ .modal-tab-content.active {
4034
+ display: block;
4035
+ }
4036
+
4037
+
4038
+ /* =============================================================================
4039
+ Fix Photo Upload Section
4040
+ ============================================================================= */
4041
+
4042
+ /* Override photo section - ensure left alignment */
4043
+ .photo-upload-section {
4044
+ display: flex;
4045
+ flex-direction: column;
4046
+ align-items: center;
4047
+ gap: 10px;
4048
+ margin-top: 24px;
4049
+ margin-bottom: 24px;
4050
+ padding-bottom: 24px;
4051
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
4052
+ }
4053
+
4054
+ .photo-preview {
4055
+ width: 96px;
4056
+ height: 96px;
4057
+ border-radius: 12px;
4058
+ background: rgba(255, 255, 255, 0.05);
4059
+ border: 1px solid rgba(255, 255, 255, 0.1);
4060
+ display: flex;
4061
+ align-items: center;
4062
+ justify-content: center;
4063
+ overflow: hidden;
4064
+ flex-shrink: 0;
4065
+ }
4066
+
4067
+ .photo-placeholder-icon {
4068
+ width: 32px;
4069
+ height: 32px;
4070
+ color: var(--white-30);
4071
+ }
4072
+
4073
+ .photo-actions {
4074
+ display: flex;
4075
+ gap: 8px;
4076
+ flex-wrap: wrap;
4077
+ align-items: center;
4078
+ justify-content: center;
4079
+ }
4080
+
4081
+ .photo-actions .glass-btn {
4082
+ padding: 8px 16px;
4083
+ font-size: 0.8125rem;
4084
+ border-radius: 6px;
4085
+ }
4086
+
4087
+
4088
+ /* =============================================================================
4089
+ Homepage Sections
4090
+ ============================================================================= */
4091
+
4092
+ .hero-section {
4093
+ padding: 160px 24px 80px;
4094
+ text-align: center;
4095
+ position: relative;
4096
+ z-index: 1;
4097
+ }
4098
+
4099
+ .hero-content {
4100
+ max-width: 720px;
4101
+ margin: 0 auto;
4102
+ }
4103
+
4104
+ .hero-title {
4105
+ font-size: clamp(2.5rem, 6vw, 4rem);
4106
+ font-weight: 700;
4107
+ letter-spacing: -0.03em;
4108
+ line-height: 1.1;
4109
+ margin-bottom: 24px;
4110
+ }
4111
+
4112
+ .text-gradient {
4113
+ background: linear-gradient(135deg, #3b82f6, #60a5fa);
4114
+ -webkit-background-clip: text;
4115
+ -webkit-text-fill-color: transparent;
4116
+ background-clip: text;
4117
+ }
4118
+
4119
+ .hero-subtitle {
4120
+ font-size: 1.125rem;
4121
+ color: var(--white-60);
4122
+ line-height: 1.7;
4123
+ margin-bottom: 40px;
4124
+ }
4125
+
4126
+ .hero-actions {
4127
+ display: flex;
4128
+ gap: 16px;
4129
+ justify-content: center;
4130
+ flex-wrap: wrap;
4131
+ }
4132
+
4133
+ .hero-btn {
4134
+ padding: 14px 28px !important;
4135
+ font-size: 1rem !important;
4136
+ display: inline-flex;
4137
+ align-items: center;
4138
+ gap: 8px;
4139
+ }
4140
+
4141
+ .homepage-section {
4142
+ padding: 80px 24px;
4143
+ position: relative;
4144
+ z-index: 1;
4145
+ }
4146
+
4147
+ .page-section {
4148
+ min-height: 100vh;
4149
+ display: flex;
4150
+ flex-direction: column;
4151
+ justify-content: center;
4152
+ scroll-margin-top: 60px;
4153
+ }
4154
+
4155
+ .hero-section.page-section {
4156
+ justify-content: center;
4157
+ }
4158
+
4159
+ html {
4160
+ scroll-behavior: smooth;
4161
+ }
4162
+
4163
+ .section-container {
4164
+ max-width: 1100px;
4165
+ margin: 0 auto;
4166
+ }
4167
+
4168
+ .section-container.section-sm {
4169
+ max-width: 720px;
4170
+ }
4171
+
4172
+ .section-heading {
4173
+ text-align: center;
4174
+ font-size: 1.75rem;
4175
+ font-weight: 600;
4176
+ margin-bottom: 48px;
4177
+ letter-spacing: -0.02em;
4178
+ }
4179
+
4180
+ .section-subheading {
4181
+ text-align: center;
4182
+ color: var(--white-50);
4183
+ font-size: 1rem;
4184
+ max-width: 600px;
4185
+ margin: -32px auto 48px;
4186
+ }
4187
+
4188
+ .glass-card {
4189
+ background: var(--glass-bg);
4190
+ border: 1px solid var(--glass-border);
4191
+ border-radius: var(--radius-sm);
4192
+ backdrop-filter: var(--glass-blur);
4193
+ -webkit-backdrop-filter: var(--glass-blur);
4194
+ }
4195
+
4196
+ .features-grid {
4197
+ display: grid;
4198
+ grid-template-columns: repeat(3, 1fr);
4199
+ gap: 20px;
4200
+ }
4201
+
4202
+ .feature-card {
4203
+ padding: 28px;
4204
+ transition: border-color 0.2s;
4205
+ }
4206
+
4207
+ .feature-card:hover {
4208
+ border-color: var(--white-20);
4209
+ }
4210
+
4211
+ .feature-card .feature-icon {
4212
+ width: 40px;
4213
+ height: 40px;
4214
+ margin-bottom: 16px;
4215
+ color: #60a5fa;
4216
+ }
4217
+
4218
+ .feature-card .feature-icon svg {
4219
+ width: 100%;
4220
+ height: 100%;
4221
+ }
4222
+
4223
+ .feature-card h3 {
4224
+ font-size: 1rem;
4225
+ font-weight: 600;
4226
+ margin-bottom: 8px;
4227
+ }
4228
+
4229
+ .feature-card p {
4230
+ font-size: 0.875rem;
4231
+ color: var(--white-50);
4232
+ line-height: 1.6;
4233
+ }
4234
+
4235
+ .code-block {
4236
+ background: rgba(20, 20, 22, 0.8);
4237
+ border: 1px solid var(--glass-border);
4238
+ border-radius: var(--radius-sm);
4239
+ overflow: hidden;
4240
+ }
4241
+
4242
+ .code-block-header {
4243
+ display: flex;
4244
+ justify-content: space-between;
4245
+ align-items: center;
4246
+ padding: 10px 16px;
4247
+ background: var(--white-05);
4248
+ border-bottom: 1px solid var(--glass-border);
4249
+ }
4250
+
4251
+ .code-lang {
4252
+ font-size: 0.75rem;
4253
+ color: var(--white-40);
4254
+ font-family: var(--font-mono);
4255
+ text-transform: uppercase;
4256
+ letter-spacing: 0.05em;
4257
+ }
4258
+
4259
+ .code-copy-btn {
4260
+ background: none;
4261
+ border: none;
4262
+ color: var(--white-40);
4263
+ cursor: pointer;
4264
+ padding: 4px;
4265
+ transition: color 0.2s;
4266
+ }
4267
+
4268
+ .code-copy-btn:hover {
4269
+ color: var(--white-80);
4270
+ }
4271
+
4272
+ .code-block pre {
4273
+ padding: 20px;
4274
+ margin: 0;
4275
+ overflow-x: auto;
4276
+ font-family: var(--font-mono);
4277
+ font-size: 0.8125rem;
4278
+ line-height: 1.7;
4279
+ color: var(--white-70);
4280
+ }
4281
+
4282
+ .chains-grid {
4283
+ display: grid;
4284
+ grid-template-columns: repeat(4, 1fr);
4285
+ gap: 16px;
4286
+ }
4287
+
4288
+ .chain-card {
4289
+ padding: 20px;
4290
+ text-align: center;
4291
+ }
4292
+
4293
+ .chain-card strong {
4294
+ display: block;
4295
+ font-size: 0.9375rem;
4296
+ margin-bottom: 4px;
4297
+ }
4298
+
4299
+ .chain-card span {
4300
+ font-size: 0.75rem;
4301
+ color: var(--white-40);
4302
+ }
4303
+
4304
+ .adversarial-card {
4305
+ padding: 40px;
4306
+ }
4307
+
4308
+ .adversarial-intro {
4309
+ display: flex;
4310
+ gap: 20px;
4311
+ margin-bottom: 40px;
4312
+ }
4313
+
4314
+ .adversarial-intro-icon {
4315
+ flex-shrink: 0;
4316
+ }
4317
+
4318
+ .adversarial-intro h3 {
4319
+ font-size: 1.125rem;
4320
+ font-weight: 600;
4321
+ margin-bottom: 8px;
4322
+ }
4323
+
4324
+ .adversarial-intro p {
4325
+ font-size: 0.875rem;
4326
+ color: var(--white-60);
4327
+ line-height: 1.7;
4328
+ }
4329
+
4330
+ .adversarial-flow {
4331
+ display: flex;
4332
+ align-items: center;
4333
+ justify-content: center;
4334
+ gap: 8px;
4335
+ margin-bottom: 40px;
4336
+ padding: 24px 0;
4337
+ flex-wrap: wrap;
4338
+ }
4339
+
4340
+ .flow-step {
4341
+ display: flex;
4342
+ flex-direction: column;
4343
+ align-items: center;
4344
+ gap: 8px;
4345
+ }
4346
+
4347
+ .flow-step-icon {
4348
+ width: 48px;
4349
+ height: 48px;
4350
+ border-radius: 12px;
4351
+ display: flex;
4352
+ align-items: center;
4353
+ justify-content: center;
4354
+ }
4355
+
4356
+ .flow-step-label {
4357
+ font-size: 0.6875rem;
4358
+ color: var(--white-50);
4359
+ white-space: nowrap;
4360
+ }
4361
+
4362
+ .flow-arrow {
4363
+ color: var(--white-20);
4364
+ }
4365
+
4366
+ .adversarial-principles {
4367
+ display: grid;
4368
+ grid-template-columns: repeat(2, 1fr);
4369
+ gap: 24px;
4370
+ margin-bottom: 32px;
4371
+ }
4372
+
4373
+ .principle {
4374
+ display: flex;
4375
+ gap: 12px;
4376
+ }
4377
+
4378
+ .principle-icon {
4379
+ flex-shrink: 0;
4380
+ color: var(--white-40);
4381
+ margin-top: 2px;
4382
+ }
4383
+
4384
+ .principle h4 {
4385
+ font-size: 0.875rem;
4386
+ font-weight: 600;
4387
+ margin-bottom: 4px;
4388
+ }
4389
+
4390
+ .principle p {
4391
+ font-size: 0.8125rem;
4392
+ color: var(--white-50);
4393
+ line-height: 1.6;
4394
+ }
4395
+
4396
+ .site-footer {
4397
+ padding: 40px 24px;
4398
+ border-top: 1px solid var(--glass-border);
4399
+ position: relative;
4400
+ z-index: 1;
4401
+ }
4402
+
4403
+ .site-footer .footer-content {
4404
+ max-width: 1100px;
4405
+ margin: 0 auto;
4406
+ display: flex;
4407
+ justify-content: space-between;
4408
+ align-items: center;
4409
+ }
4410
+
4411
+ .site-footer p {
4412
+ font-size: 0.8125rem;
4413
+ color: var(--white-40);
4414
+ }
4415
+
4416
+ .footer-links {
4417
+ display: flex;
4418
+ gap: 24px;
4419
+ }
4420
+
4421
+ .footer-links a {
4422
+ font-size: 0.8125rem;
4423
+ color: var(--white-50);
4424
+ text-decoration: none;
4425
+ transition: color 0.2s;
4426
+ }
4427
+
4428
+ .footer-links a:hover {
4429
+ color: var(--white);
4430
+ }
4431
+
4432
+ #version-tag {
4433
+ font-family: var(--font-mono);
4434
+ font-size: 0.75rem;
4435
+ color: var(--white-25);
4436
+ }
4437
+
4438
+ .nav-link {
4439
+ color: var(--white-60);
4440
+ text-decoration: none;
4441
+ font-size: 0.875rem;
4442
+ transition: color 0.2s;
4443
+ }
4444
+
4445
+ .nav-link:hover {
4446
+ color: var(--white);
4447
+ }
4448
+
4449
+ @media (max-width: 768px) {
4450
+ .features-grid { grid-template-columns: 1fr; }
4451
+ .chains-grid { grid-template-columns: repeat(2, 1fr); }
4452
+ .adversarial-principles { grid-template-columns: 1fr; }
4453
+ .adversarial-card { padding: 24px; }
4454
+ .adversarial-intro { flex-direction: column; }
4455
+ .adversarial-flow .flow-arrow { display: none; }
4456
+ .adversarial-flow {
4457
+ display: grid;
4458
+ grid-template-columns: repeat(3, 1fr);
4459
+ justify-items: center;
4460
+ }
4461
+ .site-footer .footer-content {
4462
+ flex-direction: column;
4463
+ gap: 16px;
4464
+ text-align: center;
4465
+ }
4466
+ .hero-section { padding: 120px 24px 60px; }
4467
+ }
4468
+
4469
+ /* Example Tabs (Quick Start section) */
4470
+ .example-tabs {
4471
+ display: flex;
4472
+ gap: 0;
4473
+ margin-bottom: 0;
4474
+ border-radius: 8px 8px 0 0;
4475
+ overflow: hidden;
4476
+ border: 1px solid var(--white-10);
4477
+ border-bottom: none;
4478
+ }
4479
+
4480
+ .example-tab {
4481
+ flex: 1;
4482
+ padding: 10px 16px;
4483
+ font-size: 0.8125rem;
4484
+ font-weight: 500;
4485
+ font-family: inherit;
4486
+ background: var(--white-05);
4487
+ color: var(--white-50);
4488
+ border: none;
4489
+ cursor: pointer;
4490
+ transition: all 0.15s ease;
4491
+ }
4492
+
4493
+ .example-tab + .example-tab {
4494
+ border-left: 1px solid var(--white-10);
4495
+ }
4496
+
4497
+ .example-tab.active {
4498
+ background: var(--white-10);
4499
+ color: var(--white-90);
4500
+ }
4501
+
4502
+ .example-tab:hover:not(.active) {
4503
+ background: var(--white-08);
4504
+ color: var(--white-70);
4505
+ }
4506
+
4507
+ .example-tabs + .code-block {
4508
+ border-radius: 0 0 12px 12px;
4509
+ }
4510
+
4511
+ .example-tabs + .code-block .code-block-header {
4512
+ border-radius: 0;
4513
+ }
4514
+
4515
+ .example-code {
4516
+ display: none;
4517
+ }
4518
+
4519
+ .example-code.active {
4520
+ display: block;
4521
+ }