hd-wallet-ui 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/styles/main.css CHANGED
@@ -1888,6 +1888,805 @@ body:has(.modal.active) .nav-bar {
1888
1888
  color: var(--accent-primary);
1889
1889
  }
1890
1890
 
1891
+ /* =============================================================================
1892
+ Wallet Tab (Phantom-style)
1893
+ ============================================================================= */
1894
+
1895
+ /* Portfolio Hero */
1896
+ .ph-portfolio {
1897
+ text-align: center;
1898
+ padding: 24px 0 20px;
1899
+ }
1900
+
1901
+ .ph-portfolio-value {
1902
+ font-size: 36px;
1903
+ font-weight: 700;
1904
+ color: var(--white);
1905
+ letter-spacing: -0.02em;
1906
+ line-height: 1.1;
1907
+ font-family: var(--font-mono);
1908
+ }
1909
+
1910
+ .ph-portfolio-label {
1911
+ font-size: 13px;
1912
+ color: var(--muted);
1913
+ margin-top: 4px;
1914
+ }
1915
+
1916
+ .ph-portfolio-xpub {
1917
+ display: flex;
1918
+ align-items: center;
1919
+ justify-content: center;
1920
+ gap: 6px;
1921
+ margin-top: 10px;
1922
+ }
1923
+
1924
+ .ph-xpub-text {
1925
+ font-size: 11px;
1926
+ color: var(--white-40);
1927
+ max-width: 200px;
1928
+ overflow: hidden;
1929
+ text-overflow: ellipsis;
1930
+ white-space: nowrap;
1931
+ }
1932
+
1933
+ .ph-xpub-copy {
1934
+ padding: 2px;
1935
+ opacity: 0.4;
1936
+ transition: opacity 0.15s;
1937
+ }
1938
+
1939
+ .ph-xpub-copy:hover {
1940
+ opacity: 1;
1941
+ }
1942
+
1943
+ /* Wallet Selector */
1944
+ .wallet-selector-row {
1945
+ display: flex;
1946
+ align-items: flex-start;
1947
+ justify-content: flex-start;
1948
+ gap: 0;
1949
+ padding: 0 4px 16px;
1950
+ }
1951
+
1952
+ .wallet-selector-control {
1953
+ display: flex;
1954
+ align-items: center;
1955
+ gap: 8px;
1956
+ width: 100%;
1957
+ min-width: 0;
1958
+ max-width: 560px;
1959
+ }
1960
+
1961
+ .wallet-selector-input.glass-input.compact {
1962
+ flex: 1;
1963
+ width: 100%;
1964
+ min-width: 320px;
1965
+ max-width: none;
1966
+ height: 34px;
1967
+ font-size: 13px;
1968
+ text-align: left;
1969
+ appearance: none;
1970
+ -webkit-appearance: none;
1971
+ -moz-appearance: none;
1972
+ padding-right: 36px;
1973
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 6l4.5 4 4.5-4' stroke='rgba(255,255,255,0.9)' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
1974
+ background-repeat: no-repeat;
1975
+ background-position: right 11px center;
1976
+ }
1977
+
1978
+ #wallet-manage-btn {
1979
+ flex-shrink: 0;
1980
+ }
1981
+
1982
+ /* Action Buttons Row */
1983
+ .ph-actions {
1984
+ display: flex;
1985
+ flex-wrap: wrap;
1986
+ justify-content: center;
1987
+ gap: 12px 20px;
1988
+ padding: 0 0 20px;
1989
+ }
1990
+
1991
+ .ph-action-btn {
1992
+ display: flex;
1993
+ flex-direction: column;
1994
+ align-items: center;
1995
+ gap: 6px;
1996
+ background: none;
1997
+ border: none;
1998
+ color: var(--white-80);
1999
+ cursor: pointer;
2000
+ padding: 0;
2001
+ transition: color 0.15s;
2002
+ }
2003
+
2004
+ .ph-action-btn:hover {
2005
+ color: var(--white);
2006
+ }
2007
+
2008
+ .ph-action-btn:hover .ph-action-icon {
2009
+ background: rgba(171, 130, 255, 0.25);
2010
+ border-color: rgba(171, 130, 255, 0.4);
2011
+ }
2012
+
2013
+ .ph-action-icon {
2014
+ width: 44px;
2015
+ height: 44px;
2016
+ border-radius: 50%;
2017
+ background: var(--white-05);
2018
+ border: 1px solid var(--glass-border);
2019
+ display: flex;
2020
+ align-items: center;
2021
+ justify-content: center;
2022
+ transition: all 0.2s ease;
2023
+ }
2024
+
2025
+ .ph-action-btn span {
2026
+ font-size: 11px;
2027
+ color: var(--muted);
2028
+ font-weight: 500;
2029
+ }
2030
+
2031
+ .ph-action-wrap {
2032
+ position: relative;
2033
+ display: inline-flex;
2034
+ flex-direction: column;
2035
+ align-items: center;
2036
+ }
2037
+
2038
+ .ph-action-menu {
2039
+ position: absolute;
2040
+ top: calc(100% + 10px);
2041
+ left: 50%;
2042
+ transform: translateX(-50%);
2043
+ min-width: 168px;
2044
+ padding: 8px;
2045
+ border-radius: 12px;
2046
+ border: 1px solid var(--glass-border);
2047
+ background: rgba(28, 28, 31, 0.96);
2048
+ backdrop-filter: var(--glass-blur);
2049
+ -webkit-backdrop-filter: var(--glass-blur);
2050
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.35);
2051
+ z-index: 30;
2052
+ display: none;
2053
+ flex-direction: column;
2054
+ gap: 6px;
2055
+ }
2056
+
2057
+ .ph-action-menu.visible {
2058
+ display: flex;
2059
+ }
2060
+
2061
+ .ph-action-menu-item {
2062
+ border: 1px solid var(--glass-border);
2063
+ border-radius: 8px;
2064
+ background: var(--white-03);
2065
+ color: var(--white-80);
2066
+ font-size: 12px;
2067
+ font-weight: 500;
2068
+ text-align: left;
2069
+ padding: 8px 10px;
2070
+ cursor: pointer;
2071
+ transition: all 0.15s ease;
2072
+ }
2073
+
2074
+ .ph-action-menu-item:hover:not(:disabled) {
2075
+ background: var(--white-10);
2076
+ color: var(--white);
2077
+ }
2078
+
2079
+ .ph-action-menu-item:disabled {
2080
+ opacity: 0.45;
2081
+ cursor: not-allowed;
2082
+ }
2083
+
2084
+ /* Scan Status */
2085
+ .ph-scan-status {
2086
+ display: flex;
2087
+ align-items: center;
2088
+ gap: 8px;
2089
+ padding: 10px 14px;
2090
+ margin-bottom: 8px;
2091
+ font-size: 12px;
2092
+ color: var(--muted);
2093
+ background: var(--white-05);
2094
+ border-radius: 12px;
2095
+ }
2096
+
2097
+ .wallet-scan-spinner {
2098
+ width: 14px;
2099
+ height: 14px;
2100
+ border: 2px solid var(--glass-border);
2101
+ border-top-color: #AB82FF;
2102
+ border-radius: 50%;
2103
+ animation: spin 0.8s linear infinite;
2104
+ }
2105
+
2106
+ @keyframes spin {
2107
+ to { transform: rotate(360deg); }
2108
+ }
2109
+
2110
+ /* Token List */
2111
+ .ph-token-list {
2112
+ display: flex;
2113
+ flex-direction: column;
2114
+ gap: 2px;
2115
+ max-height: 340px;
2116
+ overflow-y: auto;
2117
+ scrollbar-width: thin;
2118
+ scrollbar-color: var(--glass-border) transparent;
2119
+ }
2120
+
2121
+ .ph-token-empty {
2122
+ display: flex;
2123
+ flex-direction: column;
2124
+ align-items: center;
2125
+ justify-content: center;
2126
+ gap: 8px;
2127
+ padding: 40px 16px;
2128
+ color: var(--muted);
2129
+ }
2130
+
2131
+ .ph-token-empty p {
2132
+ margin: 0;
2133
+ font-size: 14px;
2134
+ font-weight: 500;
2135
+ }
2136
+
2137
+ .ph-token-empty-sub {
2138
+ font-size: 12px !important;
2139
+ font-weight: 400 !important;
2140
+ color: var(--white-40) !important;
2141
+ }
2142
+
2143
+ /* Token Row */
2144
+ .ph-token-row {
2145
+ display: flex;
2146
+ align-items: center;
2147
+ gap: 12px;
2148
+ padding: 12px 14px;
2149
+ border-radius: 12px;
2150
+ cursor: pointer;
2151
+ transition: background 0.15s ease;
2152
+ }
2153
+
2154
+ .ph-token-row:hover {
2155
+ background: var(--white-05);
2156
+ }
2157
+
2158
+ .ph-token-inactive {
2159
+ opacity: 0.45;
2160
+ }
2161
+
2162
+ .ph-token-icon {
2163
+ width: 40px;
2164
+ height: 40px;
2165
+ border-radius: 50%;
2166
+ display: flex;
2167
+ align-items: center;
2168
+ justify-content: center;
2169
+ font-size: 18px;
2170
+ font-weight: 700;
2171
+ color: white;
2172
+ flex-shrink: 0;
2173
+ }
2174
+
2175
+ .ph-token-info {
2176
+ flex: 1;
2177
+ min-width: 0;
2178
+ }
2179
+
2180
+ .ph-token-name {
2181
+ font-size: 14px;
2182
+ font-weight: 600;
2183
+ color: var(--white);
2184
+ line-height: 1.3;
2185
+ }
2186
+
2187
+ .ph-token-path {
2188
+ font-size: 11px;
2189
+ color: var(--white-40);
2190
+ font-family: var(--font-mono);
2191
+ overflow: hidden;
2192
+ text-overflow: ellipsis;
2193
+ white-space: nowrap;
2194
+ }
2195
+
2196
+ .ph-token-amounts {
2197
+ text-align: right;
2198
+ flex-shrink: 0;
2199
+ }
2200
+
2201
+ .ph-token-balance {
2202
+ font-size: 14px;
2203
+ font-weight: 600;
2204
+ color: var(--white);
2205
+ white-space: nowrap;
2206
+ }
2207
+
2208
+ .ph-token-fiat {
2209
+ font-size: 12px;
2210
+ color: var(--muted);
2211
+ white-space: nowrap;
2212
+ }
2213
+
2214
+ /* Wallet Overlay Views (Settings, Send) */
2215
+ .wallet-overlay-view {
2216
+ animation: fadeSlideIn 0.2s ease;
2217
+ }
2218
+
2219
+ @keyframes fadeSlideIn {
2220
+ from { opacity: 0; transform: translateX(20px); }
2221
+ to { opacity: 1; transform: translateX(0); }
2222
+ }
2223
+
2224
+ .wallet-overlay-header {
2225
+ display: flex;
2226
+ align-items: center;
2227
+ gap: 12px;
2228
+ padding: 4px 0 16px;
2229
+ border-bottom: 1px solid var(--glass-border);
2230
+ margin-bottom: 16px;
2231
+ }
2232
+
2233
+ .wallet-overlay-header h4 {
2234
+ margin: 0;
2235
+ font-size: 16px;
2236
+ font-weight: 600;
2237
+ color: var(--white);
2238
+ }
2239
+
2240
+ .wallet-back-btn {
2241
+ display: flex;
2242
+ align-items: center;
2243
+ gap: 4px;
2244
+ background: none;
2245
+ border: none;
2246
+ color: var(--white-70);
2247
+ font-size: 13px;
2248
+ cursor: pointer;
2249
+ padding: 6px 10px;
2250
+ border-radius: 8px;
2251
+ transition: all 0.15s;
2252
+ }
2253
+
2254
+ .wallet-back-btn:hover {
2255
+ background: var(--white-05);
2256
+ color: var(--white);
2257
+ }
2258
+
2259
+ .wallet-overlay-body {
2260
+ display: flex;
2261
+ flex-direction: column;
2262
+ gap: 20px;
2263
+ max-height: 480px;
2264
+ overflow-y: auto;
2265
+ scrollbar-width: thin;
2266
+ scrollbar-color: var(--glass-border) transparent;
2267
+ }
2268
+
2269
+ .wallet-export-body {
2270
+ max-height: 560px;
2271
+ }
2272
+
2273
+ /* Wallet manager layout: pin headers, scroll only wallet list rows */
2274
+ #wallet-wallets-view {
2275
+ flex-direction: column;
2276
+ height: 100%;
2277
+ min-height: 0;
2278
+ overflow: hidden;
2279
+ }
2280
+
2281
+ #wallet-wallets-view .wallet-overlay-body {
2282
+ flex: 1;
2283
+ min-height: 0;
2284
+ max-height: none;
2285
+ overflow: hidden;
2286
+ }
2287
+
2288
+ #wallet-wallets-view .settings-group {
2289
+ flex: 1;
2290
+ min-height: 0;
2291
+ display: flex;
2292
+ flex-direction: column;
2293
+ }
2294
+
2295
+ .wallet-wallets-header {
2296
+ justify-content: space-between;
2297
+ }
2298
+
2299
+ .wallet-overlay-title-row {
2300
+ display: flex;
2301
+ align-items: center;
2302
+ gap: 12px;
2303
+ min-width: 0;
2304
+ }
2305
+
2306
+ .wallet-wallets-header h4 {
2307
+ line-height: 1;
2308
+ display: flex;
2309
+ align-items: center;
2310
+ }
2311
+
2312
+ .wallet-wallets-header .wallet-back-btn {
2313
+ line-height: 1;
2314
+ }
2315
+
2316
+ .wallet-wallets-header #wallet-new-btn {
2317
+ display: inline-flex;
2318
+ align-items: center;
2319
+ line-height: 1;
2320
+ flex-shrink: 0;
2321
+ }
2322
+
2323
+ .wallet-manage-tabs {
2324
+ display: inline-flex;
2325
+ align-items: center;
2326
+ gap: 6px;
2327
+ padding: 4px;
2328
+ border: 1px solid var(--glass-border);
2329
+ border-radius: 12px;
2330
+ background: var(--white-03);
2331
+ width: fit-content;
2332
+ }
2333
+
2334
+ .wallet-manage-tab {
2335
+ border: none;
2336
+ background: transparent;
2337
+ color: var(--white-60);
2338
+ font-size: 12px;
2339
+ font-weight: 600;
2340
+ line-height: 1;
2341
+ padding: 8px 12px;
2342
+ border-radius: 8px;
2343
+ cursor: pointer;
2344
+ transition: all 0.15s ease;
2345
+ }
2346
+
2347
+ .wallet-manage-tab.active {
2348
+ background: var(--white-15);
2349
+ color: var(--white);
2350
+ }
2351
+
2352
+ .wallet-manage-tab:hover:not(.active) {
2353
+ color: var(--white-80);
2354
+ background: var(--white-08);
2355
+ }
2356
+
2357
+ /* Settings Groups */
2358
+ .settings-group {
2359
+ border: 1px solid var(--glass-border);
2360
+ border-radius: 12px;
2361
+ padding: 16px;
2362
+ background: var(--white-05);
2363
+ }
2364
+
2365
+ .settings-group-header {
2366
+ display: flex;
2367
+ align-items: center;
2368
+ justify-content: space-between;
2369
+ margin-bottom: 12px;
2370
+ }
2371
+
2372
+ .settings-group-label {
2373
+ font-size: 13px;
2374
+ font-weight: 600;
2375
+ color: var(--white-70);
2376
+ text-transform: uppercase;
2377
+ letter-spacing: 0.05em;
2378
+ }
2379
+
2380
+ /* Wallet Name List */
2381
+ .wallet-name-list {
2382
+ display: flex;
2383
+ flex-direction: column;
2384
+ gap: 8px;
2385
+ min-height: 0;
2386
+ flex: 1;
2387
+ overflow-y: auto;
2388
+ padding-right: 4px;
2389
+ scrollbar-width: thin;
2390
+ scrollbar-color: var(--glass-border) transparent;
2391
+ }
2392
+
2393
+ .wallet-name-row {
2394
+ display: grid;
2395
+ grid-template-columns: minmax(0, 1fr) auto auto;
2396
+ align-items: center;
2397
+ gap: 10px;
2398
+ }
2399
+
2400
+ .wallet-name-cell {
2401
+ min-width: 0;
2402
+ display: flex;
2403
+ flex-direction: column;
2404
+ gap: 6px;
2405
+ }
2406
+
2407
+ .wallet-name-input {
2408
+ width: 100%;
2409
+ min-width: 0;
2410
+ font-size: 13px;
2411
+ }
2412
+
2413
+ .wallet-derivation-path {
2414
+ font-size: 10px;
2415
+ line-height: 1.35;
2416
+ color: var(--white-40);
2417
+ font-family: var(--font-mono);
2418
+ white-space: nowrap;
2419
+ overflow: hidden;
2420
+ text-overflow: ellipsis;
2421
+ }
2422
+
2423
+ .wallet-account-count {
2424
+ font-size: 12px;
2425
+ color: var(--muted);
2426
+ white-space: nowrap;
2427
+ }
2428
+
2429
+ .wallet-status-btn {
2430
+ white-space: nowrap;
2431
+ min-width: 74px;
2432
+ justify-content: center;
2433
+ }
2434
+
2435
+ .wallet-manage-empty {
2436
+ color: var(--white-50);
2437
+ font-size: 13px;
2438
+ padding: 8px 4px;
2439
+ }
2440
+
2441
+ .wallet-selected-path {
2442
+ font-size: 12px;
2443
+ color: var(--white-80);
2444
+ background: var(--white-03);
2445
+ border: 1px solid var(--glass-border);
2446
+ border-radius: 8px;
2447
+ padding: 8px 10px;
2448
+ margin-bottom: 10px;
2449
+ }
2450
+
2451
+ /* Custom Derivation Path */
2452
+ .settings-custom-path {
2453
+ margin-top: 8px;
2454
+ }
2455
+
2456
+ .settings-custom-path label {
2457
+ display: block;
2458
+ font-size: 12px;
2459
+ color: var(--white-60);
2460
+ margin-bottom: 6px;
2461
+ }
2462
+
2463
+ .custom-path-row {
2464
+ display: flex;
2465
+ gap: 8px;
2466
+ align-items: center;
2467
+ }
2468
+
2469
+ .custom-path-row select {
2470
+ width: 70px;
2471
+ flex-shrink: 0;
2472
+ }
2473
+
2474
+ .custom-path-row input {
2475
+ flex: 1;
2476
+ min-width: 0;
2477
+ }
2478
+
2479
+ .wallet-export-options {
2480
+ display: grid;
2481
+ grid-template-columns: 1fr;
2482
+ gap: 10px;
2483
+ }
2484
+
2485
+ .export-option-card {
2486
+ border: 1px solid var(--glass-border);
2487
+ background: var(--white-03);
2488
+ border-radius: 10px;
2489
+ }
2490
+
2491
+ .export-option-card .export-label {
2492
+ font-size: 14px;
2493
+ font-weight: 600;
2494
+ }
2495
+
2496
+ .export-option-card .export-desc {
2497
+ font-size: 12px;
2498
+ color: var(--white-50);
2499
+ }
2500
+
2501
+ /* Wallet Group Headers in Token List */
2502
+ .ph-wallet-header {
2503
+ font-size: 11px;
2504
+ font-weight: 600;
2505
+ color: var(--white-40);
2506
+ text-transform: uppercase;
2507
+ letter-spacing: 0.05em;
2508
+ padding: 12px 14px 4px;
2509
+ }
2510
+
2511
+ .ph-wallet-header:first-child {
2512
+ padding-top: 4px;
2513
+ }
2514
+
2515
+ /* Send Flow Styles */
2516
+ .send-field-group {
2517
+ margin-bottom: 16px;
2518
+ }
2519
+
2520
+ .send-label {
2521
+ display: block;
2522
+ font-size: 12px;
2523
+ font-weight: 500;
2524
+ color: var(--white-60);
2525
+ margin-bottom: 6px;
2526
+ }
2527
+
2528
+ .send-balance-display {
2529
+ font-size: 12px;
2530
+ color: var(--muted);
2531
+ margin-top: 4px;
2532
+ }
2533
+
2534
+ .send-amount-row {
2535
+ display: flex;
2536
+ align-items: center;
2537
+ gap: 8px;
2538
+ }
2539
+
2540
+ .send-amount-row input {
2541
+ flex: 1;
2542
+ min-width: 0;
2543
+ }
2544
+
2545
+ .send-currency-label {
2546
+ font-size: 13px;
2547
+ font-weight: 600;
2548
+ color: var(--white-70);
2549
+ min-width: 32px;
2550
+ }
2551
+
2552
+ .send-fiat-estimate {
2553
+ font-size: 12px;
2554
+ color: var(--muted);
2555
+ margin-top: 4px;
2556
+ min-height: 16px;
2557
+ }
2558
+
2559
+ .send-fee-display {
2560
+ display: flex;
2561
+ align-items: center;
2562
+ justify-content: space-between;
2563
+ padding: 10px 14px;
2564
+ margin-bottom: 16px;
2565
+ background: var(--white-05);
2566
+ border-radius: 10px;
2567
+ font-size: 13px;
2568
+ color: var(--white-60);
2569
+ }
2570
+
2571
+ .send-review-card {
2572
+ border: 1px solid var(--glass-border);
2573
+ border-radius: 12px;
2574
+ padding: 16px;
2575
+ margin-bottom: 16px;
2576
+ background: var(--white-05);
2577
+ }
2578
+
2579
+ .send-review-row {
2580
+ display: flex;
2581
+ justify-content: space-between;
2582
+ align-items: center;
2583
+ padding: 8px 0;
2584
+ font-size: 13px;
2585
+ color: var(--white-70);
2586
+ }
2587
+
2588
+ .send-review-row + .send-review-row {
2589
+ border-top: 1px solid var(--glass-border);
2590
+ }
2591
+
2592
+ .send-review-row span:first-child {
2593
+ color: var(--muted);
2594
+ }
2595
+
2596
+ .send-review-row code {
2597
+ font-size: 12px;
2598
+ max-width: 200px;
2599
+ overflow: hidden;
2600
+ text-overflow: ellipsis;
2601
+ white-space: nowrap;
2602
+ }
2603
+
2604
+ .send-review-total {
2605
+ font-weight: 600;
2606
+ color: var(--white) !important;
2607
+ }
2608
+
2609
+ .send-review-total span:first-child {
2610
+ color: var(--white-70) !important;
2611
+ }
2612
+
2613
+ .send-status {
2614
+ margin-top: 12px;
2615
+ padding: 10px 14px;
2616
+ border-radius: 10px;
2617
+ font-size: 13px;
2618
+ text-align: center;
2619
+ }
2620
+
2621
+ .send-status code {
2622
+ font-size: 11px;
2623
+ word-break: break-all;
2624
+ }
2625
+
2626
+ .send-status-pending {
2627
+ background: rgba(171, 130, 255, 0.1);
2628
+ border: 1px solid rgba(171, 130, 255, 0.3);
2629
+ color: #AB82FF;
2630
+ }
2631
+
2632
+ .send-status-success {
2633
+ background: rgba(34, 197, 94, 0.1);
2634
+ border: 1px solid rgba(34, 197, 94, 0.3);
2635
+ color: #22c55e;
2636
+ }
2637
+
2638
+ .send-status-error {
2639
+ background: rgba(239, 68, 68, 0.1);
2640
+ border: 1px solid rgba(239, 68, 68, 0.3);
2641
+ color: #ef4444;
2642
+ }
2643
+
2644
+ /* Receive overlay */
2645
+ .wallet-receive-overlay {
2646
+ display: none;
2647
+ position: absolute;
2648
+ inset: 0;
2649
+ z-index: 50;
2650
+ background: rgba(15, 23, 42, 0.92);
2651
+ backdrop-filter: blur(12px);
2652
+ align-items: center;
2653
+ justify-content: center;
2654
+ flex-direction: column;
2655
+ }
2656
+
2657
+ .wallet-receive-card {
2658
+ text-align: center;
2659
+ padding: 32px 24px;
2660
+ }
2661
+
2662
+ .wallet-receive-card h4 {
2663
+ margin: 0 0 4px;
2664
+ font-size: 16px;
2665
+ font-weight: 600;
2666
+ color: var(--white);
2667
+ }
2668
+
2669
+ .wallet-receive-card canvas {
2670
+ border-radius: 12px;
2671
+ margin: 16px 0;
2672
+ }
2673
+
2674
+ .wallet-receive-address {
2675
+ display: block;
2676
+ font-size: 12px;
2677
+ color: var(--white-60);
2678
+ word-break: break-all;
2679
+ margin: 0 auto 20px;
2680
+ max-width: 260px;
2681
+ line-height: 1.5;
2682
+ }
2683
+
2684
+ .wallet-receive-actions {
2685
+ display: flex;
2686
+ gap: 10px;
2687
+ justify-content: center;
2688
+ }
2689
+
1891
2690
  .trust-summary {
1892
2691
  margin-top: 16px;
1893
2692
  padding: 24px;
@@ -2358,6 +3157,27 @@ body:has(.modal.active) .nav-bar {
2358
3157
  .hd-address-info {
2359
3158
  flex-wrap: wrap;
2360
3159
  }
3160
+
3161
+ .wallet-selector-row {
3162
+ flex-direction: column;
3163
+ align-items: stretch;
3164
+ gap: 8px;
3165
+ }
3166
+
3167
+ .wallet-selector-control {
3168
+ width: 100%;
3169
+ max-width: none;
3170
+ }
3171
+
3172
+ .wallet-selector-input.glass-input.compact {
3173
+ flex: 1;
3174
+ width: 100%;
3175
+ min-width: 0;
3176
+ }
3177
+
3178
+ .ph-actions {
3179
+ gap: 10px 14px;
3180
+ }
2361
3181
  }
2362
3182
 
2363
3183
  @media (max-width: 600px) {
@@ -3878,27 +4698,130 @@ body:has(.modal.active) .nav-bar {
3878
4698
  margin-bottom: 8px;
3879
4699
  }
3880
4700
 
3881
- .keys-display-info {
3882
- font-size: 0.8125rem;
3883
- color: var(--white-60);
3884
- margin: 0 0 16px 0;
4701
+ .keys-display-info {
4702
+ font-size: 0.8125rem;
4703
+ color: var(--white-60);
4704
+ margin: 0 0 16px 0;
4705
+ }
4706
+
4707
+ /* Make vcard tab a flex column so footer stays at bottom */
4708
+ #vcard-tab-content.active {
4709
+ display: flex !important;
4710
+ flex-direction: column;
4711
+ overflow: hidden;
4712
+ }
4713
+
4714
+ #vcard-tab-content #vcard-form-view,
4715
+ #vcard-tab-content #vcard-result-view {
4716
+ flex: 1 1 auto;
4717
+ overflow-y: auto;
4718
+ overflow-x: hidden;
4719
+ min-height: 0;
4720
+ scrollbar-width: thin;
4721
+ scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
4722
+ }
4723
+
4724
+ #vcard-result-view {
4725
+ display: flex;
4726
+ flex-direction: column;
4727
+ align-items: center;
4728
+ gap: 24px;
4729
+ padding: 24px 16px;
4730
+ }
4731
+
4732
+ #vcard-result-view .qr-container {
4733
+ display: flex;
4734
+ justify-content: center;
4735
+ }
4736
+
4737
+ #vcard-result-view .vcard-result-actions {
4738
+ display: flex;
4739
+ gap: 12px;
4740
+ justify-content: center;
4741
+ width: 100%;
4742
+ max-width: 320px;
4743
+ }
4744
+
4745
+ #vcard-result-view .vcard-result-actions .glass-btn {
4746
+ flex: 1;
4747
+ }
4748
+
4749
+ #vcard-result-view .vcard-back-btn {
4750
+ margin-top: 4px;
4751
+ }
4752
+
4753
+ .vcard-view-toggle {
4754
+ display: flex;
4755
+ gap: 0;
4756
+ border-radius: 8px;
4757
+ overflow: hidden;
4758
+ border: 1px solid var(--white-10);
4759
+ }
4760
+
4761
+ .vcard-toggle-btn {
4762
+ padding: 6px 20px;
4763
+ font-size: 0.8rem;
4764
+ font-weight: 500;
4765
+ background: transparent;
4766
+ color: var(--white-50);
4767
+ border: none;
4768
+ cursor: pointer;
4769
+ transition: background 0.2s, color 0.2s;
4770
+ }
4771
+
4772
+ .vcard-toggle-btn.active {
4773
+ background: var(--white-10);
4774
+ color: var(--white-90);
4775
+ }
4776
+
4777
+ .vcard-toggle-btn:hover:not(.active) {
4778
+ background: var(--white-05);
4779
+ }
4780
+
4781
+ .vcard-raw-view {
4782
+ width: 100%;
4783
+ max-width: 400px;
4784
+ max-height: 300px;
4785
+ overflow: auto;
4786
+ background: rgba(0, 0, 0, 0.3);
4787
+ border: 1px solid var(--white-10);
4788
+ border-radius: 8px;
4789
+ padding: 12px;
4790
+ font-size: 0.7rem;
4791
+ line-height: 1.4;
4792
+ color: var(--white-70);
4793
+ white-space: pre-wrap;
4794
+ word-break: break-all;
4795
+ scrollbar-width: thin;
4796
+ }
4797
+
4798
+ /* Signature badges */
4799
+ .vcard-sig-badge {
4800
+ display: flex;
4801
+ align-items: center;
4802
+ gap: 6px;
4803
+ padding: 6px 12px;
4804
+ border-radius: 8px;
4805
+ font-size: 0.8rem;
4806
+ line-height: 1;
4807
+ }
4808
+
4809
+ .vcard-sig-badge.sig-verified {
4810
+ background: rgba(34, 197, 94, 0.1);
4811
+ border: 1px solid rgba(34, 197, 94, 0.25);
4812
+ color: #22c55e;
3885
4813
  }
3886
4814
 
3887
- /* Make vcard tab a flex column so footer stays at bottom */
3888
- #vcard-tab-content.active {
3889
- display: flex !important;
3890
- flex-direction: column;
3891
- overflow: hidden;
4815
+ .vcard-sig-badge.sig-unsigned {
4816
+ background: rgba(255, 255, 255, 0.05);
4817
+ border: 1px solid rgba(255, 255, 255, 0.1);
4818
+ color: var(--white-50);
3892
4819
  }
3893
4820
 
3894
- #vcard-tab-content #vcard-form-view,
3895
- #vcard-tab-content #vcard-result-view {
3896
- flex: 1 1 auto;
3897
- overflow-y: auto;
3898
- overflow-x: hidden;
3899
- min-height: 0;
3900
- scrollbar-width: thin;
3901
- scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
4821
+ .vcard-sig-badge.sig-invalid {
4822
+ background: rgba(239, 68, 68, 0.1);
4823
+ border: 1px solid rgba(239, 68, 68, 0.25);
4824
+ color: #f87171;
3902
4825
  }
3903
4826
 
3904
4827
  /* Actions footer - fixed height bar at bottom of tab */
@@ -3914,32 +4837,44 @@ body:has(.modal.active) .nav-bar {
3914
4837
  width: calc(100% + 48px);
3915
4838
  }
3916
4839
 
3917
- .vcard-export-btn,
3918
- .vcard-import-btn {
3919
- padding: 10px 28px;
3920
- font-size: 0.9375rem;
4840
+ /* Split button group (Export / Import vCard) */
4841
+ .vcard-split-btn-group {
4842
+ display: inline-flex;
4843
+ border-radius: var(--radius-sm, 14px);
4844
+ overflow: hidden;
4845
+ border: 1px solid rgba(255, 255, 255, 0.15);
3921
4846
  }
3922
4847
 
3923
- .vcard-export-btn {
3924
- background: rgba(255, 255, 255, 0.95) !important;
3925
- color: #111 !important;
4848
+ .vcard-split-btn {
4849
+ padding: 10px 24px !important;
4850
+ font-size: 0.9375rem !important;
4851
+ border-radius: 0 !important;
3926
4852
  border: none !important;
3927
4853
  font-weight: 600;
4854
+ cursor: pointer;
4855
+ display: inline-flex;
4856
+ align-items: center;
4857
+ justify-content: center;
4858
+ }
4859
+
4860
+ .vcard-split-export {
4861
+ background: rgba(255, 255, 255, 0.95) !important;
4862
+ color: #111 !important;
4863
+ border-right: 1px solid rgba(0, 0, 0, 0.15) !important;
3928
4864
  }
3929
4865
 
3930
- .vcard-export-btn:hover {
4866
+ .vcard-split-export:hover {
3931
4867
  background: #fff !important;
3932
4868
  }
3933
4869
 
3934
- .vcard-import-btn {
4870
+ .vcard-split-import {
3935
4871
  background: rgba(255, 255, 255, 0.08) !important;
3936
4872
  color: rgba(255, 255, 255, 0.7) !important;
3937
- border: 1px solid rgba(255, 255, 255, 0.1) !important;
3938
4873
  cursor: pointer;
3939
4874
  }
3940
4875
 
3941
- .vcard-import-btn:hover {
3942
- background: rgba(255, 255, 255, 0.12) !important;
4876
+ .vcard-split-import:hover {
4877
+ background: rgba(255, 255, 255, 0.14) !important;
3943
4878
  color: rgba(255, 255, 255, 0.9) !important;
3944
4879
  }
3945
4880
 
@@ -4035,29 +4970,79 @@ body:has(.modal.active) .nav-bar {
4035
4970
  Fix Photo Upload Section
4036
4971
  ============================================================================= */
4037
4972
 
4038
- /* Override photo section - ensure left alignment */
4039
- .photo-upload-section {
4973
+ /* Identity card - driver's license layout */
4974
+ .identity-card {
4975
+ display: grid;
4976
+ grid-template-columns: 40% minmax(0, 1fr);
4977
+ grid-template-areas: "photo info";
4978
+ column-gap: 20px;
4979
+ align-items: center;
4980
+ padding: 20px;
4981
+ background: var(--glass-bg);
4982
+ border: 1px solid var(--glass-border);
4983
+ border-radius: var(--radius-sm, 14px);
4984
+ backdrop-filter: var(--glass-blur);
4985
+ -webkit-backdrop-filter: var(--glass-blur);
4986
+ margin-top: 16px;
4987
+ margin-bottom: 16px;
4988
+ }
4989
+
4990
+ .identity-card-photo {
4991
+ grid-area: photo;
4040
4992
  display: flex;
4041
4993
  flex-direction: column;
4042
- align-items: center;
4043
- gap: 10px;
4044
- margin-top: 24px;
4045
- margin-bottom: 24px;
4046
- padding-bottom: 24px;
4047
- border-bottom: 1px solid rgba(255, 255, 255, 0.08);
4994
+ align-items: stretch;
4995
+ align-self: center;
4996
+ width: 100%;
4048
4997
  }
4049
4998
 
4050
- .photo-preview {
4051
- width: 96px;
4052
- height: 96px;
4053
- border-radius: 12px;
4054
- background: rgba(255, 255, 255, 0.05);
4999
+ .identity-card-photo .photo-preview {
5000
+ width: 100%;
5001
+ aspect-ratio: 1 / 1;
5002
+ border-radius: 8px;
5003
+ background: rgba(0, 0, 0, 0.28);
4055
5004
  border: 1px solid rgba(255, 255, 255, 0.1);
4056
5005
  display: flex;
4057
5006
  align-items: center;
4058
5007
  justify-content: center;
4059
5008
  overflow: hidden;
4060
- flex-shrink: 0;
5009
+ position: relative;
5010
+ cursor: pointer;
5011
+ }
5012
+
5013
+ .identity-card-photo .photo-preview img,
5014
+ .identity-card-photo .photo-preview video {
5015
+ width: 100%;
5016
+ height: 100%;
5017
+ object-fit: contain;
5018
+ }
5019
+
5020
+ .identity-card-photo .photo-actions {
5021
+ display: none;
5022
+ position: absolute;
5023
+ inset: 0;
5024
+ margin-top: 0;
5025
+ width: 100%;
5026
+ height: 100%;
5027
+ flex-direction: row;
5028
+ flex-wrap: nowrap;
5029
+ gap: 8px;
5030
+ justify-content: center;
5031
+ align-items: center;
5032
+ background: rgba(0, 0, 0, 0.5);
5033
+ z-index: 2;
5034
+ padding: 10px;
5035
+ }
5036
+
5037
+ .identity-card-photo .photo-actions.visible {
5038
+ display: flex;
5039
+ }
5040
+
5041
+ .identity-card-photo .photo-actions .glass-btn {
5042
+ width: auto;
5043
+ min-width: 92px;
5044
+ max-width: none;
5045
+ justify-content: center;
4061
5046
  }
4062
5047
 
4063
5048
  .photo-placeholder-icon {
@@ -4066,6 +5051,243 @@ body:has(.modal.active) .nav-bar {
4066
5051
  color: var(--white-30);
4067
5052
  }
4068
5053
 
5054
+ .photo-edit-overlay {
5055
+ border: 1px solid rgba(255, 255, 255, 0.16);
5056
+ position: absolute;
5057
+ top: 6px;
5058
+ left: 6px;
5059
+ width: 28px;
5060
+ height: 28px;
5061
+ border-radius: 6px;
5062
+ background: rgba(0, 0, 0, 0.45);
5063
+ display: flex;
5064
+ align-items: center;
5065
+ justify-content: center;
5066
+ color: var(--white-70);
5067
+ cursor: pointer;
5068
+ transition: background 0.2s;
5069
+ z-index: 3;
5070
+ padding: 0;
5071
+ }
5072
+
5073
+ .photo-preview:hover .photo-edit-overlay {
5074
+ background: rgba(0, 0, 0, 0.65);
5075
+ color: var(--white-90);
5076
+ }
5077
+
5078
+ .photo-edit-overlay .photo-close-icon {
5079
+ display: none;
5080
+ }
5081
+
5082
+ .photo-edit-overlay.is-open .photo-edit-icon {
5083
+ display: none;
5084
+ }
5085
+
5086
+ .photo-edit-overlay.is-open .photo-close-icon {
5087
+ display: block;
5088
+ }
5089
+
5090
+ .identity-card-info {
5091
+ grid-area: info;
5092
+ position: relative;
5093
+ display: flex;
5094
+ flex-direction: column;
5095
+ gap: 4px;
5096
+ justify-content: center;
5097
+ align-self: center;
5098
+ padding-right: 40px;
5099
+ min-width: 0;
5100
+ }
5101
+
5102
+ .identity-card-name {
5103
+ font-size: 1.1rem;
5104
+ font-weight: 600;
5105
+ color: var(--white-90);
5106
+ letter-spacing: -0.01em;
5107
+ word-wrap: break-word;
5108
+ overflow-wrap: break-word;
5109
+ line-height: 1.4;
5110
+ }
5111
+
5112
+ .identity-card-name .nickname {
5113
+ font-weight: 400;
5114
+ color: var(--white-50);
5115
+ }
5116
+
5117
+ .identity-card-detail {
5118
+ font-size: 0.85rem;
5119
+ color: var(--white-60);
5120
+ overflow: hidden;
5121
+ text-overflow: ellipsis;
5122
+ white-space: nowrap;
5123
+ }
5124
+
5125
+ .identity-card-detail:empty {
5126
+ display: none;
5127
+ }
5128
+
5129
+ /* Identity edit button (pencil icon in card) */
5130
+ .identity-edit-btn {
5131
+ position: absolute;
5132
+ top: 0;
5133
+ right: 0;
5134
+ background: rgba(255, 255, 255, 0.08);
5135
+ border: 1px solid rgba(255, 255, 255, 0.12);
5136
+ border-radius: 8px;
5137
+ color: var(--white-50);
5138
+ padding: 6px;
5139
+ cursor: pointer;
5140
+ display: flex;
5141
+ align-items: center;
5142
+ justify-content: center;
5143
+ transition: all 0.2s;
5144
+ }
5145
+
5146
+ .identity-edit-btn:hover {
5147
+ background: rgba(255, 255, 255, 0.15);
5148
+ color: var(--white-90);
5149
+ }
5150
+
5151
+ /* Identity edit view — flex column with scrollable body + fixed footer */
5152
+ .identity-edit-view {
5153
+ display: flex;
5154
+ flex-direction: column;
5155
+ height: 100%;
5156
+ max-height: calc(100vh - 240px);
5157
+ }
5158
+
5159
+ .identity-edit-scroll {
5160
+ flex: 1;
5161
+ overflow-y: auto;
5162
+ overflow-x: hidden;
5163
+ padding-bottom: 8px;
5164
+ }
5165
+
5166
+ .identity-edit-scroll::-webkit-scrollbar {
5167
+ width: 3px;
5168
+ }
5169
+
5170
+ .identity-edit-scroll::-webkit-scrollbar-thumb {
5171
+ background: rgba(255, 255, 255, 0.2);
5172
+ border-radius: 3px;
5173
+ }
5174
+
5175
+ .identity-edit-actions {
5176
+ flex-shrink: 0;
5177
+ display: flex;
5178
+ gap: 12px;
5179
+ justify-content: flex-end;
5180
+ padding: 16px 0 0;
5181
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
5182
+ }
5183
+
5184
+ /* Header xpub label */
5185
+ .account-address-label {
5186
+ font-size: 11px;
5187
+ color: var(--white-40);
5188
+ font-family: var(--font-mono, 'SF Mono', monospace);
5189
+ letter-spacing: 0.06em;
5190
+ text-transform: uppercase;
5191
+ flex-shrink: 0;
5192
+ }
5193
+
5194
+ /* Messaging sub-tabs */
5195
+ .messaging-sub-tabs {
5196
+ display: flex;
5197
+ gap: 0;
5198
+ margin-bottom: 16px;
5199
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
5200
+ }
5201
+
5202
+ .messaging-sub-tab {
5203
+ padding: 8px 16px;
5204
+ background: transparent;
5205
+ border: none;
5206
+ border-bottom: 2px solid transparent;
5207
+ margin-bottom: -1px;
5208
+ color: var(--white-50);
5209
+ font-family: var(--font-sans);
5210
+ font-size: 13px;
5211
+ font-weight: 500;
5212
+ cursor: pointer;
5213
+ transition: color 0.2s, border-color 0.2s;
5214
+ }
5215
+
5216
+ .messaging-sub-tab:hover {
5217
+ color: var(--white-80);
5218
+ }
5219
+
5220
+ .messaging-sub-tab.active {
5221
+ color: var(--white);
5222
+ border-bottom-color: var(--white-60);
5223
+ }
5224
+
5225
+ .messaging-sub-content {
5226
+ display: none;
5227
+ }
5228
+
5229
+ .messaging-sub-content.active {
5230
+ display: block;
5231
+ }
5232
+
5233
+ @media (max-width: 640px) {
5234
+ .identity-card {
5235
+ grid-template-columns: 1fr;
5236
+ grid-template-areas:
5237
+ "photo"
5238
+ "info";
5239
+ row-gap: 14px;
5240
+ padding: 14px;
5241
+ text-align: center;
5242
+ }
5243
+
5244
+ .identity-card-photo {
5245
+ align-items: center;
5246
+ max-width: 160px;
5247
+ margin: 0 auto;
5248
+ }
5249
+
5250
+ .identity-card-photo .photo-preview {
5251
+ width: 100%;
5252
+ aspect-ratio: 1 / 1;
5253
+ }
5254
+
5255
+ .identity-card-photo .photo-actions {
5256
+ width: 100%;
5257
+ justify-content: center;
5258
+ padding: 8px;
5259
+ }
5260
+
5261
+ .identity-card-photo .photo-actions .glass-btn {
5262
+ min-width: 82px;
5263
+ }
5264
+
5265
+ .identity-card-info {
5266
+ align-items: center;
5267
+ padding-right: 0;
5268
+ }
5269
+
5270
+ .identity-card-name {
5271
+ font-size: 1rem;
5272
+ }
5273
+
5274
+ .identity-card-detail {
5275
+ font-size: 0.8rem;
5276
+ }
5277
+ }
5278
+
5279
+ /* Legacy photo section (kept for compatibility) */
5280
+ .photo-upload-section {
5281
+ display: flex;
5282
+ flex-direction: column;
5283
+ align-items: center;
5284
+ gap: 10px;
5285
+ margin-top: 24px;
5286
+ margin-bottom: 24px;
5287
+ padding-bottom: 24px;
5288
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
5289
+ }
5290
+
4069
5291
  .photo-actions {
4070
5292
  display: flex;
4071
5293
  gap: 8px;