@forge-connect/react 0.1.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -1,11 +1,182 @@
1
- /* ForgeConnect Modal – all classes prefixed with fc- */
1
+ /* ForgeConnect Modal */
2
2
 
3
3
  :root {
4
4
  --fc-accent: #8b5cf6;
5
- --fc-radius: 12px;
5
+ --fc-radius: 20px;
6
+ --fc-radius-sm: 12px;
6
7
  --fc-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
7
8
  }
8
9
 
10
+ /* ── Theme Variables ── */
11
+
12
+ /* Light theme (solid) */
13
+ .fc-modal-content[data-theme='light'] {
14
+ --fc-bg: #ffffff;
15
+ --fc-border: #e8e8e8;
16
+ --fc-shadow: 0 8px 32px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04);
17
+ --fc-text: #1a1a1a;
18
+ --fc-input-bg: #ffffff;
19
+ --fc-input-border: #e0e0e0;
20
+ --fc-btn-card-bg: #ffffff;
21
+ --fc-btn-card-border: #e5e5e5;
22
+ --fc-btn-card-hover-bg: #fafafa;
23
+ --fc-btn-card-hover-border: #d0d0d0;
24
+ --fc-btn-secondary-bg: #f5f5f5;
25
+ --fc-btn-secondary-border: #e5e5e5;
26
+ --fc-btn-secondary-hover: #eeeeee;
27
+ --fc-icon-bg: #f5f5f5;
28
+ --fc-icon-bg-alt: #f0f0f0;
29
+ --fc-item-bg: #f9f9f9;
30
+ --fc-item-border: #eeeeee;
31
+ --fc-item-hover: #f3f3f3;
32
+ --fc-tab-bg: #f5f5f5;
33
+ --fc-tab-active-bg: #ffffff;
34
+ --fc-tab-active-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
35
+ --fc-installed-dot-border: #ffffff;
36
+ --fc-badge-muted-bg: #f0f0f0;
37
+ --fc-badge-muted-color: #666666;
38
+ --fc-badge-install-color: #888888;
39
+ --fc-other-wallets-bg: #ede9fe;
40
+ --fc-other-wallets-color: #8b5cf6;
41
+ --fc-error-bg: #fef2f2;
42
+ --fc-error-border: #fecaca;
43
+ --fc-error-color: #dc2626;
44
+ --fc-toggle-bg: rgba(0, 0, 0, 0.03);
45
+ --fc-toggle-hover-bg: rgba(0, 0, 0, 0.06);
46
+ --fc-toggle-track-bg: rgba(0, 0, 0, 0.15);
47
+ --fc-recovery-bg: #f5f5f5;
48
+ --fc-recovery-border: #e8e8e8;
49
+ --fc-backdrop: none;
50
+ --fc-webkit-backdrop: none;
51
+ }
52
+
53
+ /* Dark theme (solid) */
54
+ .fc-modal-content[data-theme='dark'] {
55
+ --fc-bg: #1a1a1a;
56
+ --fc-border: #2a2a2a;
57
+ --fc-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), 0 2px 8px rgba(0, 0, 0, 0.2);
58
+ --fc-text: #f0f0f0;
59
+ --fc-input-bg: #222222;
60
+ --fc-input-border: #333333;
61
+ --fc-btn-card-bg: #222222;
62
+ --fc-btn-card-border: #333333;
63
+ --fc-btn-card-hover-bg: #2a2a2a;
64
+ --fc-btn-card-hover-border: #404040;
65
+ --fc-btn-secondary-bg: #2a2a2a;
66
+ --fc-btn-secondary-border: #333333;
67
+ --fc-btn-secondary-hover: #333333;
68
+ --fc-icon-bg: #2a2a2a;
69
+ --fc-icon-bg-alt: #2a2a2a;
70
+ --fc-item-bg: #222222;
71
+ --fc-item-border: #2a2a2a;
72
+ --fc-item-hover: #282828;
73
+ --fc-tab-bg: #222222;
74
+ --fc-tab-active-bg: #333333;
75
+ --fc-tab-active-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
76
+ --fc-installed-dot-border: #222222;
77
+ --fc-badge-muted-bg: #333333;
78
+ --fc-badge-muted-color: #999999;
79
+ --fc-badge-install-color: #888888;
80
+ --fc-other-wallets-bg: #2d2040;
81
+ --fc-other-wallets-color: #a78bfa;
82
+ --fc-error-bg: rgba(220, 38, 38, 0.1);
83
+ --fc-error-border: rgba(220, 38, 38, 0.2);
84
+ --fc-error-color: #fca5a5;
85
+ --fc-toggle-bg: rgba(255, 255, 255, 0.04);
86
+ --fc-toggle-hover-bg: rgba(255, 255, 255, 0.08);
87
+ --fc-toggle-track-bg: rgba(255, 255, 255, 0.12);
88
+ --fc-recovery-bg: #2a2a2a;
89
+ --fc-recovery-border: #333333;
90
+ --fc-backdrop: none;
91
+ --fc-webkit-backdrop: none;
92
+ }
93
+
94
+ /* Glass theme (frosted glass - light) */
95
+ .fc-modal-content[data-theme='glass'] {
96
+ --fc-bg: rgba(255, 255, 255, 0.45);
97
+ --fc-border: rgba(255, 255, 255, 0.6);
98
+ --fc-shadow:
99
+ inset 0 0 0 0.5px rgba(255, 255, 255, 0.5),
100
+ 0 8px 32px rgba(0, 0, 0, 0.08);
101
+ --fc-text: #1a1a1a;
102
+ --fc-input-bg: #ffffff;
103
+ --fc-input-border: #e0e0e0;
104
+ --fc-btn-card-bg: #ffffff;
105
+ --fc-btn-card-border: #e5e5e5;
106
+ --fc-btn-card-hover-bg: #fafafa;
107
+ --fc-btn-card-hover-border: #d0d0d0;
108
+ --fc-btn-secondary-bg: #f5f5f5;
109
+ --fc-btn-secondary-border: #e5e5e5;
110
+ --fc-btn-secondary-hover: #eeeeee;
111
+ --fc-icon-bg: #f5f5f5;
112
+ --fc-icon-bg-alt: #f0f0f0;
113
+ --fc-item-bg: #f9f9f9;
114
+ --fc-item-border: #eeeeee;
115
+ --fc-item-hover: #f3f3f3;
116
+ --fc-tab-bg: #f5f5f5;
117
+ --fc-tab-active-bg: #ffffff;
118
+ --fc-tab-active-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
119
+ --fc-installed-dot-border: #ffffff;
120
+ --fc-badge-muted-bg: #f0f0f0;
121
+ --fc-badge-muted-color: #666666;
122
+ --fc-badge-install-color: #888888;
123
+ --fc-other-wallets-bg: #ede9fe;
124
+ --fc-other-wallets-color: #8b5cf6;
125
+ --fc-error-bg: #fef2f2;
126
+ --fc-error-border: #fecaca;
127
+ --fc-error-color: #dc2626;
128
+ --fc-toggle-bg: rgba(0, 0, 0, 0.03);
129
+ --fc-toggle-hover-bg: rgba(0, 0, 0, 0.06);
130
+ --fc-toggle-track-bg: rgba(0, 0, 0, 0.15);
131
+ --fc-recovery-bg: #f5f5f5;
132
+ --fc-recovery-border: #e8e8e8;
133
+ --fc-backdrop: blur(40px) saturate(1.2);
134
+ --fc-webkit-backdrop: blur(40px) saturate(1.2);
135
+ }
136
+
137
+ /* Glass-dark variant */
138
+ .fc-modal-content[data-theme='glass'][data-glass-dark] {
139
+ --fc-bg: rgba(30, 30, 40, 0.45);
140
+ --fc-border: rgba(255, 255, 255, 0.12);
141
+ --fc-shadow:
142
+ inset 0 0 0 0.5px rgba(255, 255, 255, 0.06),
143
+ 0 8px 32px rgba(0, 0, 0, 0.2);
144
+ --fc-text: #f0f0f0;
145
+ --fc-input-bg: #222222;
146
+ --fc-input-border: #333333;
147
+ --fc-btn-card-bg: #222222;
148
+ --fc-btn-card-border: #333333;
149
+ --fc-btn-card-hover-bg: #2a2a2a;
150
+ --fc-btn-card-hover-border: #404040;
151
+ --fc-btn-secondary-bg: #2a2a2a;
152
+ --fc-btn-secondary-border: #333333;
153
+ --fc-btn-secondary-hover: #333333;
154
+ --fc-icon-bg: #2a2a2a;
155
+ --fc-icon-bg-alt: #2a2a2a;
156
+ --fc-item-bg: #222222;
157
+ --fc-item-border: #2a2a2a;
158
+ --fc-item-hover: #282828;
159
+ --fc-tab-bg: #222222;
160
+ --fc-tab-active-bg: #333333;
161
+ --fc-tab-active-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
162
+ --fc-installed-dot-border: #222222;
163
+ --fc-badge-muted-bg: #333333;
164
+ --fc-badge-muted-color: #999999;
165
+ --fc-badge-install-color: #888888;
166
+ --fc-other-wallets-bg: #2d2040;
167
+ --fc-other-wallets-color: #a78bfa;
168
+ --fc-error-bg: rgba(220, 38, 38, 0.1);
169
+ --fc-error-border: rgba(220, 38, 38, 0.2);
170
+ --fc-error-color: #fca5a5;
171
+ --fc-toggle-bg: rgba(255, 255, 255, 0.04);
172
+ --fc-toggle-hover-bg: rgba(255, 255, 255, 0.08);
173
+ --fc-toggle-track-bg: rgba(255, 255, 255, 0.12);
174
+ --fc-recovery-bg: #2a2a2a;
175
+ --fc-recovery-border: #333333;
176
+ --fc-backdrop: blur(40px) saturate(1.3);
177
+ --fc-webkit-backdrop: blur(40px) saturate(1.3);
178
+ }
179
+
9
180
  /* ── Overlay ── */
10
181
 
11
182
  .fc-overlay {
@@ -15,202 +186,389 @@
15
186
  display: flex;
16
187
  align-items: center;
17
188
  justify-content: center;
18
- background: rgba(0, 0, 0, 0.5);
19
- backdrop-filter: blur(4px);
20
- animation: fc-fade-in 0.15s ease-out;
189
+ background: rgba(0, 0, 0, 0.4);
190
+ animation: fc-fade-in 0.2s ease-out;
21
191
  }
22
192
 
23
193
  .fc-modal {
24
194
  position: relative;
25
195
  width: 100%;
26
- max-width: 420px;
196
+ max-width: 400px;
27
197
  max-height: 90vh;
28
198
  overflow-y: auto;
29
199
  margin: 16px;
30
200
  border-radius: var(--fc-radius);
31
- animation: fc-slide-up 0.2s ease-out;
201
+ animation: fc-slide-up 0.25s ease-out;
32
202
  }
33
203
 
34
204
  .fc-modal-close {
35
205
  position: absolute;
36
- top: 12px;
37
- right: 12px;
206
+ top: 14px;
207
+ right: 14px;
38
208
  z-index: 1;
39
209
  display: flex;
40
210
  align-items: center;
41
211
  justify-content: center;
42
- width: 32px;
43
- height: 32px;
212
+ width: 28px;
213
+ height: 28px;
44
214
  padding: 0;
45
215
  border: none;
46
- border-radius: 8px;
216
+ border-radius: 50%;
47
217
  background: transparent;
48
218
  color: inherit;
49
219
  cursor: pointer;
50
- opacity: 0.5;
220
+ opacity: 0.35;
51
221
  transition: opacity 0.15s, background 0.15s;
52
222
  }
53
223
 
54
224
  .fc-modal-close:hover {
55
- opacity: 1;
56
- background: rgba(128, 128, 128, 0.15);
225
+ opacity: 0.7;
226
+ background: rgba(128, 128, 128, 0.1);
57
227
  }
58
228
 
59
- /* ── Content ── */
229
+ /* ── Modal Content ── */
60
230
 
61
231
  .fc-modal-content {
62
- padding: 32px 28px 28px;
232
+ padding: 36px 28px 24px;
63
233
  font-family: var(--fc-font);
64
234
  font-size: 14px;
65
235
  line-height: 1.5;
236
+ border-radius: var(--fc-radius);
237
+ background: var(--fc-bg);
238
+ border: 1px solid var(--fc-border);
239
+ box-shadow: var(--fc-shadow);
240
+ color: var(--fc-text);
241
+ backdrop-filter: var(--fc-backdrop);
242
+ -webkit-backdrop-filter: var(--fc-webkit-backdrop);
66
243
  }
67
244
 
68
- .fc-modal-content[data-theme='light'] {
69
- background: #ffffff;
70
- color: #1a1a2e;
71
- }
72
-
73
- .fc-modal-content[data-theme='dark'] {
74
- background: #1a1a2e;
75
- color: #e4e4eb;
76
- }
245
+ /* ── Logo / Branding ── */
77
246
 
78
247
  .fc-logo {
79
- display: block;
248
+ display: flex;
249
+ align-items: center;
250
+ justify-content: center;
80
251
  width: 48px;
81
252
  height: 48px;
82
253
  margin: 0 auto 16px;
83
254
  object-fit: contain;
84
255
  }
85
256
 
257
+ img.fc-logo {
258
+ display: block;
259
+ }
260
+
261
+ .fc-logo > svg {
262
+ width: 100%;
263
+ height: 100%;
264
+ }
265
+
266
+ .fc-branding {
267
+ margin: 0 0 4px;
268
+ font-size: 12px;
269
+ font-weight: 500;
270
+ text-align: center;
271
+ letter-spacing: 0.02em;
272
+ opacity: 0.35;
273
+ }
274
+
86
275
  .fc-modal-title {
87
276
  margin: 0 0 24px;
88
- font-size: 22px;
277
+ font-size: 20px;
89
278
  font-weight: 600;
90
279
  text-align: center;
91
280
  }
92
281
 
93
- /* ── Buttons ── */
282
+ /* ── Legal links ── */
283
+
284
+ .fc-legal {
285
+ margin: 20px 0 0;
286
+ font-size: 11px;
287
+ text-align: center;
288
+ line-height: 1.5;
289
+ opacity: 0.4;
290
+ }
291
+
292
+ .fc-legal-link {
293
+ color: inherit;
294
+ text-decoration: underline;
295
+ text-underline-offset: 2px;
296
+ }
297
+
298
+ .fc-legal-link:hover {
299
+ opacity: 0.7;
300
+ }
301
+
302
+
303
+ /* ── Buttons (base) ── */
94
304
 
95
305
  .fc-btn {
96
306
  display: flex;
97
307
  align-items: center;
98
- justify-content: center;
99
- gap: 10px;
308
+ gap: 12px;
100
309
  width: 100%;
101
- padding: 10px 16px;
310
+ padding: 0;
102
311
  border: none;
103
- border-radius: 8px;
312
+ border-radius: var(--fc-radius-sm);
104
313
  font-family: var(--fc-font);
105
314
  font-size: 14px;
106
315
  font-weight: 500;
107
316
  cursor: pointer;
108
- transition: background 0.15s, opacity 0.15s, box-shadow 0.15s;
317
+ transition: background 0.15s, border-color 0.15s, box-shadow 0.15s;
109
318
  }
110
319
 
111
320
  .fc-btn:disabled {
112
- opacity: 0.6;
321
+ opacity: 0.5;
113
322
  cursor: not-allowed;
114
323
  }
115
324
 
325
+ /* ── Primary button ── */
326
+
116
327
  .fc-btn-primary {
328
+ justify-content: center;
329
+ padding: 11px 16px;
117
330
  background: var(--fc-accent);
118
331
  color: #fff;
119
332
  }
120
333
 
121
334
  .fc-btn-primary:hover:not(:disabled) {
122
- filter: brightness(1.1);
335
+ filter: brightness(1.06);
123
336
  }
124
337
 
125
- .fc-btn-secondary {
126
- background: transparent;
127
- border: 1px solid rgba(128, 128, 128, 0.3);
338
+ /* ── Card-style buttons (method select, OAuth, wallet) ── */
339
+
340
+ .fc-btn-method,
341
+ .fc-btn-oauth,
342
+ .fc-btn-wallet {
343
+ padding: 10px 14px;
344
+ margin-bottom: 6px;
345
+ background: var(--fc-btn-card-bg);
346
+ border: 1px solid var(--fc-btn-card-border);
347
+ color: var(--fc-text);
128
348
  }
129
349
 
130
- [data-theme='light'] .fc-btn-secondary {
131
- color: #1a1a2e;
350
+ .fc-btn-method:hover:not(:disabled),
351
+ .fc-btn-oauth:hover:not(:disabled),
352
+ .fc-btn-wallet:hover:not(:disabled) {
353
+ background: var(--fc-btn-card-hover-bg);
354
+ border-color: var(--fc-btn-card-hover-border);
132
355
  }
133
356
 
134
- [data-theme='dark'] .fc-btn-secondary {
135
- color: #e4e4eb;
357
+ /* ── Secondary button ── */
358
+
359
+ .fc-btn-secondary {
360
+ justify-content: center;
361
+ padding: 11px 16px;
362
+ background: var(--fc-btn-secondary-bg);
363
+ border: 1px solid var(--fc-btn-secondary-border);
364
+ color: var(--fc-text);
136
365
  }
137
366
 
138
367
  .fc-btn-secondary:hover:not(:disabled) {
139
- background: rgba(128, 128, 128, 0.08);
368
+ background: var(--fc-btn-secondary-hover);
140
369
  }
141
370
 
142
- .fc-btn-method {
143
- background: transparent;
144
- border: 1px solid rgba(128, 128, 128, 0.3);
145
- margin-bottom: 8px;
371
+ /* ── Login button (standalone) ── */
372
+
373
+ .fc-btn-login {
374
+ display: inline-flex;
375
+ width: auto;
376
+ padding: 8px 20px;
377
+ background: var(--fc-accent);
378
+ color: #fff;
379
+ border: none;
380
+ border-radius: var(--fc-radius-sm);
381
+ font-family: var(--fc-font);
382
+ font-size: 14px;
383
+ font-weight: 500;
384
+ cursor: pointer;
385
+ transition: filter 0.15s;
146
386
  }
147
387
 
148
- [data-theme='light'] .fc-btn-method {
149
- color: #1a1a2e;
388
+ .fc-btn-login:hover:not(:disabled) {
389
+ filter: brightness(1.06);
150
390
  }
151
391
 
152
- [data-theme='dark'] .fc-btn-method {
153
- color: #e4e4eb;
392
+ /* ── Method / Wallet icon containers ── */
393
+
394
+ .fc-method-icon-wrap {
395
+ display: flex;
396
+ align-items: center;
397
+ justify-content: center;
398
+ width: 32px;
399
+ height: 32px;
400
+ border-radius: 8px;
401
+ flex-shrink: 0;
402
+ background: var(--fc-icon-bg);
154
403
  }
155
404
 
156
- .fc-btn-method:hover:not(:disabled) {
157
- background: rgba(128, 128, 128, 0.08);
158
- border-color: var(--fc-accent);
405
+ .fc-method-icon {
406
+ flex-shrink: 0;
159
407
  }
160
408
 
161
- .fc-btn-oauth {
162
- background: transparent;
163
- border: 1px solid rgba(128, 128, 128, 0.3);
164
- margin-bottom: 8px;
409
+ .fc-btn-name {
410
+ flex: 1;
411
+ text-align: left;
412
+ font-weight: 500;
165
413
  }
166
414
 
167
- [data-theme='light'] .fc-btn-oauth {
168
- color: #1a1a2e;
415
+ /* ── Wallet-specific ── */
416
+
417
+ .fc-wallet-list {
418
+ display: flex;
419
+ flex-direction: column;
420
+ gap: 0;
169
421
  }
170
422
 
171
- [data-theme='dark'] .fc-btn-oauth {
172
- color: #e4e4eb;
423
+ .fc-wallet-icon {
424
+ width: 32px;
425
+ height: 32px;
426
+ border-radius: 8px;
427
+ flex-shrink: 0;
173
428
  }
174
429
 
175
- .fc-btn-oauth:hover:not(:disabled) {
176
- background: rgba(128, 128, 128, 0.08);
430
+ .fc-wallet-name {
431
+ flex: 1;
432
+ text-align: left;
433
+ font-weight: 500;
177
434
  }
178
435
 
179
- .fc-btn-wallet {
180
- background: transparent;
181
- border: 1px solid rgba(128, 128, 128, 0.3);
182
- margin-bottom: 8px;
436
+ /* Installed dot (green) */
437
+ .fc-installed-dot {
438
+ position: relative;
183
439
  }
184
440
 
185
- [data-theme='light'] .fc-btn-wallet {
186
- color: #1a1a2e;
441
+ .fc-installed-dot::after {
442
+ content: '';
443
+ position: absolute;
444
+ top: -1px;
445
+ right: -1px;
446
+ width: 8px;
447
+ height: 8px;
448
+ border-radius: 50%;
449
+ background: #22c55e;
450
+ border: 2px solid var(--fc-installed-dot-border);
451
+ }
452
+
453
+ /* Preferred badge */
454
+ .fc-badge-preferred {
455
+ font-size: 11px;
456
+ font-weight: 500;
457
+ padding: 3px 10px;
458
+ border-radius: 20px;
459
+ flex-shrink: 0;
460
+ background: var(--fc-badge-muted-bg);
461
+ color: var(--fc-badge-muted-color);
187
462
  }
188
463
 
189
- [data-theme='dark'] .fc-btn-wallet {
190
- color: #e4e4eb;
464
+ /* Install badge */
465
+ .fc-badge-install {
466
+ font-size: 11px;
467
+ font-weight: 500;
468
+ padding: 3px 10px;
469
+ border-radius: 20px;
470
+ margin-left: auto;
471
+ flex-shrink: 0;
472
+ background: var(--fc-badge-muted-bg);
473
+ color: var(--fc-badge-install-color);
191
474
  }
192
475
 
193
- .fc-btn-wallet:hover:not(:disabled) {
194
- background: rgba(128, 128, 128, 0.08);
476
+ /* Other wallets button icon */
477
+ .fc-other-wallets-icon {
478
+ display: flex;
479
+ align-items: center;
480
+ justify-content: center;
481
+ width: 32px;
482
+ height: 32px;
483
+ border-radius: 8px;
484
+ flex-shrink: 0;
485
+ background: var(--fc-other-wallets-bg);
486
+ color: var(--fc-other-wallets-color);
195
487
  }
196
488
 
197
- .fc-btn-login {
198
- display: inline-flex;
199
- width: auto;
200
- padding: 8px 20px;
489
+ .fc-wallet-address {
490
+ font-family: monospace;
491
+ font-size: 15px;
492
+ font-weight: 600;
493
+ }
494
+
495
+ /* Cold wallet toggle */
496
+ .fc-cold-wallet-toggle {
497
+ display: flex;
498
+ align-items: center;
499
+ gap: 10px;
500
+ margin: 10px 0 2px;
501
+ padding: 10px 14px;
502
+ border-radius: 10px;
503
+ font-size: 13px;
504
+ cursor: pointer;
505
+ user-select: none;
506
+ transition: background 0.15s;
507
+ background: var(--fc-toggle-bg);
508
+ }
509
+
510
+ .fc-cold-wallet-toggle:hover {
511
+ background: var(--fc-toggle-hover-bg);
512
+ }
513
+
514
+ .fc-cold-wallet-toggle input {
515
+ position: absolute;
516
+ opacity: 0;
517
+ width: 0;
518
+ height: 0;
519
+ }
520
+
521
+ .fc-cold-wallet-toggle .fc-toggle-track {
522
+ position: relative;
523
+ flex-shrink: 0;
524
+ width: 36px;
525
+ height: 20px;
526
+ border-radius: 10px;
527
+ transition: background 0.2s;
528
+ background: var(--fc-toggle-track-bg);
529
+ }
530
+
531
+ .fc-cold-wallet-toggle input:checked + .fc-toggle-track {
201
532
  background: var(--fc-accent);
202
- color: #fff;
203
- border: none;
204
- border-radius: 8px;
205
- font-family: var(--fc-font);
206
- font-size: 14px;
533
+ }
534
+
535
+ .fc-toggle-track::after {
536
+ content: '';
537
+ position: absolute;
538
+ top: 2px;
539
+ left: 2px;
540
+ width: 16px;
541
+ height: 16px;
542
+ border-radius: 50%;
543
+ background: #fff;
544
+ transition: transform 0.2s;
545
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
546
+ }
547
+
548
+ .fc-cold-wallet-toggle input:checked + .fc-toggle-track::after {
549
+ transform: translateX(16px);
550
+ }
551
+
552
+ .fc-cold-wallet-label {
553
+ display: flex;
554
+ flex-direction: column;
555
+ gap: 1px;
556
+ line-height: 1.3;
557
+ }
558
+
559
+ .fc-cold-wallet-label span:first-child {
207
560
  font-weight: 500;
208
- cursor: pointer;
209
- transition: filter 0.15s;
561
+ font-size: 13px;
210
562
  }
211
563
 
212
- .fc-btn-login:hover:not(:disabled) {
213
- filter: brightness(1.1);
564
+ .fc-cold-wallet-label span:last-child {
565
+ font-size: 11px;
566
+ opacity: 0.5;
567
+ }
568
+
569
+ .fc-oauth-group {
570
+ display: flex;
571
+ flex-direction: column;
214
572
  }
215
573
 
216
574
  /* ── Form Elements ── */
@@ -231,25 +589,16 @@
231
589
 
232
590
  .fc-input {
233
591
  width: 100%;
234
- padding: 10px 12px;
235
- border: 1px solid rgba(128, 128, 128, 0.3);
236
- border-radius: 8px;
592
+ padding: 11px 14px;
593
+ border-radius: var(--fc-radius-sm);
237
594
  font-family: var(--fc-font);
238
595
  font-size: 14px;
239
596
  outline: none;
240
597
  transition: border-color 0.15s, box-shadow 0.15s;
241
598
  box-sizing: border-box;
242
- }
243
-
244
- [data-theme='light'] .fc-input {
245
- background: #fff;
246
- color: #1a1a2e;
247
- }
248
-
249
- [data-theme='dark'] .fc-input {
250
- background: rgba(255, 255, 255, 0.06);
251
- color: #e4e4eb;
252
- border-color: rgba(255, 255, 255, 0.15);
599
+ background: var(--fc-input-bg);
600
+ color: var(--fc-text);
601
+ border: 1px solid var(--fc-input-border);
253
602
  }
254
603
 
255
604
  .fc-input:focus {
@@ -258,7 +607,7 @@
258
607
  }
259
608
 
260
609
  .fc-input::placeholder {
261
- opacity: 0.5;
610
+ opacity: 0.4;
262
611
  }
263
612
 
264
613
  /* ── OTP Digits ── */
@@ -277,21 +626,12 @@
277
626
  font-size: 20px;
278
627
  font-weight: 600;
279
628
  font-family: var(--fc-font);
280
- border: 1px solid rgba(128, 128, 128, 0.3);
281
- border-radius: 8px;
629
+ border-radius: var(--fc-radius-sm);
282
630
  outline: none;
283
631
  transition: border-color 0.15s, box-shadow 0.15s;
284
- }
285
-
286
- [data-theme='light'] .fc-otp-digit {
287
- background: #fff;
288
- color: #1a1a2e;
289
- }
290
-
291
- [data-theme='dark'] .fc-otp-digit {
292
- background: rgba(255, 255, 255, 0.06);
293
- color: #e4e4eb;
294
- border-color: rgba(255, 255, 255, 0.15);
632
+ background: var(--fc-input-bg);
633
+ color: var(--fc-text);
634
+ border: 1px solid var(--fc-input-border);
295
635
  }
296
636
 
297
637
  .fc-otp-digit:focus {
@@ -316,36 +656,29 @@
316
656
  margin: 8px 0;
317
657
  font-size: 13px;
318
658
  text-align: center;
319
- opacity: 0.8;
659
+ opacity: 0.6;
320
660
  }
321
661
 
322
662
  .fc-text-muted {
323
- opacity: 0.5;
663
+ opacity: 0.35;
324
664
  }
325
665
 
326
666
  .fc-error {
327
667
  margin: 4px 0;
328
668
  padding: 8px 12px;
329
- border-radius: 6px;
669
+ border-radius: 10px;
330
670
  font-size: 13px;
331
671
  text-align: center;
332
- }
333
-
334
- [data-theme='light'] .fc-error {
335
- background: #fef2f2;
336
- color: #dc2626;
337
- }
338
-
339
- [data-theme='dark'] .fc-error {
340
- background: rgba(220, 38, 38, 0.15);
341
- color: #fca5a5;
672
+ background: var(--fc-error-bg);
673
+ border: 1px solid var(--fc-error-border);
674
+ color: var(--fc-error-color);
342
675
  }
343
676
 
344
677
  .fc-switch {
345
- margin: 16px 0 0;
678
+ margin: 14px 0 0;
346
679
  font-size: 13px;
347
680
  text-align: center;
348
- opacity: 0.7;
681
+ opacity: 0.5;
349
682
  }
350
683
 
351
684
  .fc-link {
@@ -370,11 +703,11 @@
370
703
  display: flex;
371
704
  align-items: center;
372
705
  gap: 12px;
373
- margin: 16px 0;
706
+ margin: 14px 0;
374
707
  font-size: 12px;
375
708
  text-transform: uppercase;
376
709
  letter-spacing: 0.05em;
377
- opacity: 0.5;
710
+ opacity: 0.3;
378
711
  }
379
712
 
380
713
  .fc-divider::before,
@@ -391,8 +724,12 @@
391
724
  .fc-oauth-icon {
392
725
  display: flex;
393
726
  align-items: center;
394
- width: 20px;
395
- height: 20px;
727
+ justify-content: center;
728
+ width: 32px;
729
+ height: 32px;
730
+ border-radius: 8px;
731
+ flex-shrink: 0;
732
+ background: var(--fc-icon-bg);
396
733
  }
397
734
 
398
735
  .fc-oauth-icon svg {
@@ -400,28 +737,131 @@
400
737
  height: 20px;
401
738
  }
402
739
 
403
- /* ── Wallet ── */
740
+ /* ── Success View ── */
404
741
 
405
- .fc-method-icon {
406
- flex-shrink: 0;
742
+ .fc-success {
743
+ display: flex;
744
+ flex-direction: column;
745
+ align-items: center;
746
+ justify-content: center;
747
+ padding: 32px 0;
748
+ animation: fc-fade-in 0.3s ease-out;
407
749
  }
408
750
 
409
- .fc-wallet-list {
751
+ .fc-success-icon {
752
+ width: 64px;
753
+ height: 64px;
754
+ margin-bottom: 16px;
755
+ }
756
+
757
+ .fc-success-check {
758
+ width: 64px;
759
+ height: 64px;
760
+ }
761
+
762
+ .fc-success-circle {
763
+ stroke: #22c55e;
764
+ stroke-width: 2.5;
765
+ stroke-dasharray: 151;
766
+ stroke-dashoffset: 151;
767
+ animation: fc-circle-draw 0.5s ease-out 0.1s forwards;
768
+ }
769
+
770
+ .fc-success-tick {
771
+ stroke: #22c55e;
772
+ stroke-width: 3;
773
+ stroke-linecap: round;
774
+ stroke-linejoin: round;
775
+ stroke-dasharray: 36;
776
+ stroke-dashoffset: 36;
777
+ animation: fc-tick-draw 0.35s ease-out 0.45s forwards;
778
+ }
779
+
780
+ .fc-success-text {
781
+ margin: 0;
782
+ font-size: 16px;
783
+ font-weight: 600;
784
+ opacity: 0;
785
+ animation: fc-fade-in 0.3s ease-out 0.6s forwards;
786
+ }
787
+
788
+ /* ── Error View ── */
789
+
790
+ .fc-error-view {
410
791
  display: flex;
411
792
  flex-direction: column;
412
- gap: 0;
793
+ align-items: center;
794
+ justify-content: center;
795
+ padding: 32px 0;
796
+ animation: fc-fade-in 0.3s ease-out;
413
797
  }
414
798
 
415
- .fc-wallet-icon {
416
- width: 24px;
417
- height: 24px;
418
- border-radius: 4px;
799
+ .fc-error-icon {
800
+ width: 64px;
801
+ height: 64px;
802
+ margin-bottom: 16px;
419
803
  }
420
804
 
421
- .fc-wallet-address {
422
- font-family: monospace;
423
- font-size: 15px;
805
+ .fc-error-check {
806
+ width: 64px;
807
+ height: 64px;
808
+ }
809
+
810
+ .fc-error-circle {
811
+ stroke: #dc2626;
812
+ stroke-width: 2.5;
813
+ stroke-dasharray: 151;
814
+ stroke-dashoffset: 151;
815
+ animation: fc-circle-draw 0.5s ease-out 0.1s forwards;
816
+ }
817
+
818
+ .fc-error-cross-1 {
819
+ stroke: #dc2626;
820
+ stroke-width: 3;
821
+ stroke-linecap: round;
822
+ stroke-dasharray: 28.28;
823
+ stroke-dashoffset: 28.28;
824
+ animation: fc-cross-draw 0.3s ease-out 0.45s forwards;
825
+ }
826
+
827
+ .fc-error-cross-2 {
828
+ stroke: #dc2626;
829
+ stroke-width: 3;
830
+ stroke-linecap: round;
831
+ stroke-dasharray: 28.28;
832
+ stroke-dashoffset: 28.28;
833
+ animation: fc-cross-draw 0.3s ease-out 0.6s forwards;
834
+ }
835
+
836
+ .fc-error-text {
837
+ margin: 0;
838
+ font-size: 16px;
424
839
  font-weight: 600;
840
+ opacity: 0;
841
+ animation: fc-fade-in 0.3s ease-out 0.75s forwards;
842
+ }
843
+
844
+ .fc-error-subtext {
845
+ margin: 6px 0 0;
846
+ font-size: 14px;
847
+ color: var(--fc-error-color, #dc2626);
848
+ text-align: center;
849
+ opacity: 0;
850
+ animation: fc-fade-in 0.3s ease-out 0.85s forwards;
851
+ }
852
+
853
+ .fc-error-actions {
854
+ display: flex;
855
+ gap: 8px;
856
+ margin-top: 16px;
857
+ opacity: 0;
858
+ animation: fc-fade-in 0.3s ease-out 0.95s forwards;
859
+ }
860
+
861
+ .fc-error-actions .fc-btn {
862
+ width: auto;
863
+ min-width: 100px;
864
+ padding: 10px 20px;
425
865
  }
426
866
 
427
867
  /* ── Animations ── */
@@ -441,3 +881,426 @@
441
881
  transform: translateY(0) scale(1);
442
882
  }
443
883
  }
884
+
885
+ @keyframes fc-circle-draw {
886
+ to { stroke-dashoffset: 0; }
887
+ }
888
+
889
+ @keyframes fc-tick-draw {
890
+ to { stroke-dashoffset: 0; }
891
+ }
892
+
893
+ @keyframes fc-cross-draw {
894
+ to { stroke-dashoffset: 0; }
895
+ }
896
+
897
+ @keyframes fc-spin {
898
+ from { transform: rotate(0deg); }
899
+ to { transform: rotate(360deg); }
900
+ }
901
+
902
+ .fc-spin {
903
+ animation: fc-spin 0.7s linear infinite;
904
+ }
905
+
906
+ /* ── Account Hero ── */
907
+
908
+ .fc-account-hero {
909
+ display: flex;
910
+ align-items: center;
911
+ gap: 12px;
912
+ margin-bottom: 20px;
913
+ }
914
+
915
+ .fc-account-hero-avatar {
916
+ width: 44px;
917
+ height: 44px;
918
+ border-radius: 50%;
919
+ object-fit: cover;
920
+ flex-shrink: 0;
921
+ }
922
+
923
+ .fc-account-hero-avatar-placeholder {
924
+ display: flex;
925
+ align-items: center;
926
+ justify-content: center;
927
+ font-size: 17px;
928
+ font-weight: 600;
929
+ color: #fff;
930
+ background: var(--fc-accent);
931
+ }
932
+
933
+ .fc-account-hero-info {
934
+ display: flex;
935
+ flex-direction: column;
936
+ gap: 1px;
937
+ min-width: 0;
938
+ }
939
+
940
+ .fc-account-hero-name {
941
+ font-size: 15px;
942
+ font-weight: 600;
943
+ overflow: hidden;
944
+ text-overflow: ellipsis;
945
+ white-space: nowrap;
946
+ }
947
+
948
+ .fc-account-hero-email {
949
+ font-size: 12px;
950
+ opacity: 0.45;
951
+ overflow: hidden;
952
+ text-overflow: ellipsis;
953
+ white-space: nowrap;
954
+ }
955
+
956
+ /* ── Account Tabs ── */
957
+
958
+ .fc-account-tabs {
959
+ display: flex;
960
+ gap: 4px;
961
+ margin-bottom: 20px;
962
+ padding: 3px;
963
+ border-radius: 10px;
964
+ overflow-x: auto;
965
+ background: var(--fc-tab-bg);
966
+ }
967
+
968
+ .fc-account-tab {
969
+ flex: 1;
970
+ padding: 7px 12px;
971
+ border: none;
972
+ border-radius: 8px;
973
+ background: transparent;
974
+ font-family: var(--fc-font);
975
+ font-size: 12px;
976
+ font-weight: 500;
977
+ cursor: pointer;
978
+ transition: background 0.15s, color 0.15s;
979
+ white-space: nowrap;
980
+ color: inherit;
981
+ opacity: 0.5;
982
+ }
983
+
984
+ .fc-account-tab:hover {
985
+ opacity: 0.8;
986
+ }
987
+
988
+ .fc-account-tab-active {
989
+ opacity: 1;
990
+ background: var(--fc-tab-active-bg);
991
+ box-shadow: var(--fc-tab-active-shadow);
992
+ }
993
+
994
+ /* ── Account Button ── */
995
+
996
+ .fc-btn-account {
997
+ display: inline-flex;
998
+ align-items: center;
999
+ gap: 8px;
1000
+ padding: 6px 14px 6px 6px;
1001
+ border: none;
1002
+ border-radius: 999px;
1003
+ font-family: var(--fc-font);
1004
+ font-size: 13px;
1005
+ font-weight: 500;
1006
+ cursor: pointer;
1007
+ transition: background 0.15s, box-shadow 0.15s;
1008
+ background: rgba(128, 128, 128, 0.08);
1009
+ color: inherit;
1010
+ }
1011
+
1012
+ .fc-btn-account:hover {
1013
+ background: rgba(128, 128, 128, 0.15);
1014
+ }
1015
+
1016
+ /* ── Account Avatar ── */
1017
+
1018
+ .fc-account-avatar {
1019
+ width: 28px;
1020
+ height: 28px;
1021
+ border-radius: 50%;
1022
+ object-fit: cover;
1023
+ flex-shrink: 0;
1024
+ }
1025
+
1026
+ .fc-account-avatar-placeholder {
1027
+ display: flex;
1028
+ align-items: center;
1029
+ justify-content: center;
1030
+ width: 28px;
1031
+ height: 28px;
1032
+ border-radius: 50%;
1033
+ flex-shrink: 0;
1034
+ font-size: 12px;
1035
+ font-weight: 600;
1036
+ color: #fff;
1037
+ background: var(--fc-accent);
1038
+ }
1039
+
1040
+ /* ── Account Section Description ── */
1041
+
1042
+ .fc-account-section-desc {
1043
+ font-size: 12px;
1044
+ opacity: 0.4;
1045
+ margin: 0 0 12px;
1046
+ line-height: 1.4;
1047
+ }
1048
+
1049
+ /* ── Account Item (list row) ── */
1050
+
1051
+ .fc-account-item {
1052
+ display: flex;
1053
+ align-items: center;
1054
+ justify-content: space-between;
1055
+ padding: 10px 12px;
1056
+ border-radius: 10px;
1057
+ margin-bottom: 6px;
1058
+ gap: 10px;
1059
+ background: var(--fc-item-bg);
1060
+ border: 1px solid var(--fc-item-border);
1061
+ }
1062
+
1063
+ .fc-account-item-icon {
1064
+ display: flex;
1065
+ align-items: center;
1066
+ justify-content: center;
1067
+ width: 32px;
1068
+ height: 32px;
1069
+ border-radius: 8px;
1070
+ flex-shrink: 0;
1071
+ background: var(--fc-icon-bg-alt);
1072
+ }
1073
+
1074
+ .fc-account-item-icon svg {
1075
+ width: 16px;
1076
+ height: 16px;
1077
+ }
1078
+
1079
+ .fc-account-item-info {
1080
+ display: flex;
1081
+ flex-direction: column;
1082
+ gap: 2px;
1083
+ min-width: 0;
1084
+ flex: 1;
1085
+ }
1086
+
1087
+ .fc-account-item-label {
1088
+ font-size: 13px;
1089
+ font-weight: 500;
1090
+ }
1091
+
1092
+ .fc-account-item-detail {
1093
+ font-size: 11px;
1094
+ font-family: monospace;
1095
+ opacity: 0.5;
1096
+ overflow: hidden;
1097
+ text-overflow: ellipsis;
1098
+ white-space: nowrap;
1099
+ }
1100
+
1101
+ .fc-account-item-actions {
1102
+ display: flex;
1103
+ align-items: center;
1104
+ gap: 6px;
1105
+ flex-shrink: 0;
1106
+ }
1107
+
1108
+ /* ── Small Danger Button ── */
1109
+
1110
+ .fc-btn-danger-sm {
1111
+ padding: 4px 10px;
1112
+ border: none;
1113
+ border-radius: 6px;
1114
+ font-family: var(--fc-font);
1115
+ font-size: 11px;
1116
+ font-weight: 500;
1117
+ cursor: pointer;
1118
+ transition: background 0.15s;
1119
+ background: rgba(220, 38, 38, 0.1);
1120
+ color: #dc2626;
1121
+ }
1122
+
1123
+ .fc-btn-danger-sm:hover {
1124
+ background: rgba(220, 38, 38, 0.18);
1125
+ }
1126
+
1127
+ .fc-btn-danger-sm:disabled {
1128
+ opacity: 0.4;
1129
+ cursor: not-allowed;
1130
+ }
1131
+
1132
+ /* ── Small Primary Button ── */
1133
+
1134
+ .fc-btn-primary-sm {
1135
+ padding: 4px 10px;
1136
+ border: none;
1137
+ border-radius: 6px;
1138
+ font-family: var(--fc-font);
1139
+ font-size: 11px;
1140
+ font-weight: 500;
1141
+ cursor: pointer;
1142
+ transition: background 0.15s;
1143
+ background: var(--fc-accent);
1144
+ color: #fff;
1145
+ }
1146
+
1147
+ .fc-btn-primary-sm:hover {
1148
+ filter: brightness(1.06);
1149
+ }
1150
+
1151
+ .fc-btn-primary-sm:disabled {
1152
+ opacity: 0.4;
1153
+ cursor: not-allowed;
1154
+ }
1155
+
1156
+ /* ── Badges ── */
1157
+
1158
+ .fc-badge-verified {
1159
+ display: inline-block;
1160
+ padding: 2px 8px;
1161
+ border-radius: 20px;
1162
+ font-size: 10px;
1163
+ font-weight: 500;
1164
+ background: rgba(34, 197, 94, 0.12);
1165
+ color: #22c55e;
1166
+ }
1167
+
1168
+ .fc-badge-primary {
1169
+ display: inline-block;
1170
+ padding: 2px 8px;
1171
+ border-radius: 20px;
1172
+ font-size: 10px;
1173
+ font-weight: 500;
1174
+ background: rgba(139, 92, 246, 0.12);
1175
+ color: var(--fc-accent);
1176
+ }
1177
+
1178
+ /* ── Account Empty State ── */
1179
+
1180
+ .fc-account-empty {
1181
+ padding: 16px 0;
1182
+ text-align: center;
1183
+ font-size: 13px;
1184
+ opacity: 0.4;
1185
+ }
1186
+
1187
+ /* ── Account Footer ── */
1188
+
1189
+ .fc-account-footer {
1190
+ margin-top: 16px;
1191
+ padding-top: 14px;
1192
+ border-top: 1px solid rgba(128, 128, 128, 0.12);
1193
+ display: flex;
1194
+ justify-content: center;
1195
+ }
1196
+
1197
+ .fc-btn-logout {
1198
+ display: inline-flex;
1199
+ align-items: center;
1200
+ gap: 6px;
1201
+ padding: 6px 16px;
1202
+ border: none;
1203
+ border-radius: 8px;
1204
+ background: transparent;
1205
+ font-family: var(--fc-font);
1206
+ font-size: 13px;
1207
+ font-weight: 500;
1208
+ cursor: pointer;
1209
+ opacity: 0.45;
1210
+ transition: opacity 0.15s, background 0.15s;
1211
+ color: inherit;
1212
+ }
1213
+
1214
+ .fc-btn-logout:hover {
1215
+ opacity: 0.7;
1216
+ background: rgba(128, 128, 128, 0.06);
1217
+ }
1218
+
1219
+ /* ── Security Card ── */
1220
+
1221
+ .fc-security-card {
1222
+ display: flex;
1223
+ align-items: center;
1224
+ gap: 12px;
1225
+ padding: 14px;
1226
+ border-radius: 12px;
1227
+ margin-bottom: 6px;
1228
+ cursor: pointer;
1229
+ transition: background 0.15s;
1230
+ border: none;
1231
+ width: 100%;
1232
+ font-family: var(--fc-font);
1233
+ text-align: left;
1234
+ color: inherit;
1235
+ background: var(--fc-item-bg);
1236
+ border: 1px solid var(--fc-item-border);
1237
+ }
1238
+
1239
+ .fc-security-card:hover {
1240
+ background: var(--fc-item-hover);
1241
+ }
1242
+
1243
+ .fc-security-card-icon {
1244
+ display: flex;
1245
+ align-items: center;
1246
+ justify-content: center;
1247
+ width: 36px;
1248
+ height: 36px;
1249
+ border-radius: 10px;
1250
+ flex-shrink: 0;
1251
+ background: var(--fc-icon-bg-alt);
1252
+ }
1253
+
1254
+ .fc-security-card-icon svg {
1255
+ width: 18px;
1256
+ height: 18px;
1257
+ }
1258
+
1259
+ .fc-security-card-info {
1260
+ display: flex;
1261
+ flex-direction: column;
1262
+ gap: 2px;
1263
+ flex: 1;
1264
+ min-width: 0;
1265
+ }
1266
+
1267
+ .fc-security-card-label {
1268
+ font-size: 13px;
1269
+ font-weight: 500;
1270
+ }
1271
+
1272
+ .fc-security-card-detail {
1273
+ font-size: 11px;
1274
+ opacity: 0.5;
1275
+ }
1276
+
1277
+ .fc-security-card-chevron {
1278
+ flex-shrink: 0;
1279
+ opacity: 0.3;
1280
+ }
1281
+
1282
+ .fc-security-card-chevron svg {
1283
+ width: 16px;
1284
+ height: 16px;
1285
+ }
1286
+
1287
+ /* ── Recovery Code Grid ── */
1288
+
1289
+ .fc-recovery-grid {
1290
+ display: grid;
1291
+ grid-template-columns: 1fr 1fr;
1292
+ gap: 6px;
1293
+ margin: 12px 0;
1294
+ }
1295
+
1296
+ .fc-recovery-code {
1297
+ padding: 8px 12px;
1298
+ border-radius: 8px;
1299
+ font-family: monospace;
1300
+ font-size: 13px;
1301
+ text-align: center;
1302
+ font-weight: 500;
1303
+ background: var(--fc-recovery-bg);
1304
+ border: 1px solid var(--fc-recovery-border);
1305
+ color: var(--fc-text);
1306
+ }