@shapeshiftoss/swap-widget 0.4.0 → 0.5.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/index.css ADDED
@@ -0,0 +1,1591 @@
1
+ /* src/components/SwapWidget.css */
2
+ .ssw-widget {
3
+ --ssw-accent: #3861fb;
4
+ --ssw-accent-light: rgba(56, 97, 251, 0.1);
5
+ --ssw-success: #00d395;
6
+ --ssw-error: #f44336;
7
+ --ssw-warning: #ffc107;
8
+ --ssw-radius-widget: 20px;
9
+ --ssw-radius-lg: 16px;
10
+ --ssw-radius-md: 14px;
11
+ --ssw-radius-sm: 10px;
12
+ --ssw-radius-xs: 6px;
13
+ --ssw-radius-2xs: 4px;
14
+ font-family: var(--ssw-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);
15
+ width: 100%;
16
+ min-width: 420px;
17
+ max-width: 420px;
18
+ border-radius: var(--ssw-radius-widget);
19
+ overflow: hidden;
20
+ }
21
+ .ssw-widget *,
22
+ .ssw-widget *::before,
23
+ .ssw-widget *::after {
24
+ box-sizing: border-box;
25
+ }
26
+ .ssw-widget.ssw-dark {
27
+ --ssw-bg-primary: #0a0a14;
28
+ --ssw-bg-secondary: #12121c;
29
+ --ssw-bg-tertiary: #1a1a2e;
30
+ --ssw-bg-input: #0d0d16;
31
+ --ssw-bg-hover: rgba(255, 255, 255, 0.05);
32
+ --ssw-border: rgba(255, 255, 255, 0.08);
33
+ --ssw-border-hover: rgba(255, 255, 255, 0.15);
34
+ --ssw-text-primary: #ffffff;
35
+ --ssw-text-secondary: #a0a0b0;
36
+ --ssw-text-muted: #6b6b80;
37
+ background: var(--ssw-bg-secondary);
38
+ color: var(--ssw-text-primary);
39
+ }
40
+ .ssw-widget.ssw-light {
41
+ --ssw-bg-primary: #ffffff;
42
+ --ssw-bg-secondary: #f8f9fc;
43
+ --ssw-bg-tertiary: #ffffff;
44
+ --ssw-bg-input: #f0f2f5;
45
+ --ssw-bg-hover: rgba(0, 0, 0, 0.04);
46
+ --ssw-border: rgba(0, 0, 0, 0.12);
47
+ --ssw-border-hover: rgba(0, 0, 0, 0.2);
48
+ --ssw-text-primary: #1a1a2e;
49
+ --ssw-text-secondary: #4a4a60;
50
+ --ssw-text-muted: #6b6b7b;
51
+ background: var(--ssw-bg-secondary);
52
+ color: var(--ssw-text-primary);
53
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);
54
+ }
55
+ .ssw-header {
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: space-between;
59
+ padding: 16px 20px;
60
+ border-bottom: 1px solid var(--ssw-border);
61
+ }
62
+ .ssw-header-title {
63
+ font-size: 16px;
64
+ font-weight: 600;
65
+ color: var(--ssw-text-primary);
66
+ }
67
+ .ssw-header-actions {
68
+ display: flex;
69
+ align-items: center;
70
+ gap: 8px;
71
+ }
72
+ .ssw-connect-btn {
73
+ display: flex;
74
+ align-items: center;
75
+ gap: 6px;
76
+ padding: 8px 12px;
77
+ border: 1px solid var(--ssw-border);
78
+ background: var(--ssw-bg-tertiary);
79
+ border-radius: var(--ssw-radius-sm);
80
+ color: var(--ssw-text-primary);
81
+ font-size: 13px;
82
+ font-weight: 500;
83
+ cursor: pointer;
84
+ transition: all 0.15s ease;
85
+ }
86
+ .ssw-connect-btn:hover {
87
+ background: var(--ssw-bg-hover);
88
+ border-color: var(--ssw-accent);
89
+ }
90
+ .ssw-connect-btn.ssw-connected {
91
+ background: color-mix(in srgb, var(--ssw-accent) 15%, var(--ssw-bg-tertiary));
92
+ border-color: color-mix(in srgb, var(--ssw-accent) 40%, transparent);
93
+ }
94
+ .ssw-connect-btn.ssw-wrong-network {
95
+ background: color-mix(in srgb, var(--ssw-error) 15%, var(--ssw-bg-tertiary));
96
+ border-color: var(--ssw-error);
97
+ color: var(--ssw-error);
98
+ }
99
+ .ssw-settings-btn {
100
+ padding: 8px;
101
+ border: none;
102
+ background: none;
103
+ border-radius: var(--ssw-radius-sm);
104
+ color: var(--ssw-text-secondary);
105
+ cursor: pointer;
106
+ transition: all 0.15s ease;
107
+ }
108
+ .ssw-settings-btn:hover {
109
+ color: var(--ssw-text-primary);
110
+ background: var(--ssw-bg-hover);
111
+ }
112
+ .ssw-swap-container {
113
+ padding: 16px;
114
+ display: flex;
115
+ flex-direction: column;
116
+ gap: 4px;
117
+ position: relative;
118
+ }
119
+ .ssw-token-section {
120
+ background: var(--ssw-bg-tertiary);
121
+ border-radius: var(--ssw-radius-lg);
122
+ padding: 16px;
123
+ border: 1px solid var(--ssw-border);
124
+ transition: border-color 0.15s ease;
125
+ }
126
+ .ssw-token-section:focus-within {
127
+ border-color: var(--ssw-accent);
128
+ }
129
+ .ssw-section-header {
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: space-between;
133
+ margin-bottom: 8px;
134
+ }
135
+ .ssw-section-label {
136
+ font-size: 13px;
137
+ font-weight: 500;
138
+ color: var(--ssw-text-secondary);
139
+ }
140
+ .ssw-input-row {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 12px;
144
+ }
145
+ .ssw-amount-input {
146
+ flex: 1;
147
+ background: none;
148
+ border: none;
149
+ font-size: 32px;
150
+ font-weight: 500;
151
+ color: var(--ssw-text-primary);
152
+ outline: none;
153
+ min-width: 0;
154
+ }
155
+ .ssw-amount-input::placeholder {
156
+ color: var(--ssw-text-muted);
157
+ }
158
+ .ssw-token-btn {
159
+ display: flex;
160
+ align-items: center;
161
+ gap: 10px;
162
+ padding: 8px 12px;
163
+ border: none;
164
+ background: var(--ssw-bg-secondary);
165
+ border-radius: var(--ssw-radius-sm);
166
+ cursor: pointer;
167
+ transition: all 0.15s ease;
168
+ flex-shrink: 0;
169
+ }
170
+ .ssw-token-btn:hover {
171
+ background: var(--ssw-bg-hover);
172
+ }
173
+ .ssw-token-icon {
174
+ width: 32px;
175
+ height: 32px;
176
+ border-radius: 50%;
177
+ object-fit: contain;
178
+ }
179
+ .ssw-token-icon-placeholder {
180
+ width: 32px;
181
+ height: 32px;
182
+ border-radius: 50%;
183
+ background: var(--ssw-accent);
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: center;
187
+ font-size: 14px;
188
+ font-weight: 600;
189
+ color: white;
190
+ }
191
+ .ssw-token-info {
192
+ display: flex;
193
+ flex-direction: column;
194
+ align-items: flex-start;
195
+ gap: 2px;
196
+ }
197
+ .ssw-token-symbol {
198
+ font-size: 15px;
199
+ font-weight: 600;
200
+ color: var(--ssw-text-primary);
201
+ }
202
+ .ssw-token-chain {
203
+ font-size: 12px;
204
+ color: var(--ssw-text-secondary);
205
+ }
206
+ .ssw-token-btn svg {
207
+ color: var(--ssw-text-muted);
208
+ }
209
+ .ssw-token-btn-locked {
210
+ cursor: default;
211
+ }
212
+ .ssw-token-btn-locked:hover {
213
+ background: var(--ssw-bg-secondary);
214
+ }
215
+ .ssw-section-footer {
216
+ display: flex;
217
+ align-items: center;
218
+ justify-content: space-between;
219
+ margin-top: 8px;
220
+ }
221
+ .ssw-balance {
222
+ font-size: 12px;
223
+ color: var(--ssw-text-muted);
224
+ }
225
+ .ssw-balance-skeleton {
226
+ width: 80px;
227
+ height: 14px;
228
+ border-radius: var(--ssw-radius-2xs);
229
+ background:
230
+ linear-gradient(
231
+ 90deg,
232
+ var(--ssw-bg-hover) 25%,
233
+ var(--ssw-border) 50%,
234
+ var(--ssw-bg-hover) 75%);
235
+ background-size: 200% 100%;
236
+ animation: ssw-skeleton-shimmer 1.5s infinite;
237
+ }
238
+ @keyframes ssw-skeleton-shimmer {
239
+ 0% {
240
+ background-position: 200% 0;
241
+ }
242
+ 100% {
243
+ background-position: -200% 0;
244
+ }
245
+ }
246
+ .ssw-usd-value {
247
+ font-size: 13px;
248
+ color: var(--ssw-text-muted);
249
+ }
250
+ .ssw-usd-value-toggle {
251
+ background: none;
252
+ border: none;
253
+ padding: 0;
254
+ font: inherit;
255
+ font-size: 13px;
256
+ color: var(--ssw-text-muted);
257
+ cursor: pointer;
258
+ display: inline-flex;
259
+ align-items: center;
260
+ gap: 4px;
261
+ }
262
+ .ssw-usd-value-toggle:hover {
263
+ color: var(--ssw-text-secondary);
264
+ }
265
+ .ssw-fiat-prefix {
266
+ font-size: 32px;
267
+ font-weight: 500;
268
+ color: var(--ssw-text-primary);
269
+ margin-right: -8px;
270
+ }
271
+ .ssw-swap-divider {
272
+ display: flex;
273
+ justify-content: center;
274
+ margin: -12px 0;
275
+ position: relative;
276
+ z-index: 10;
277
+ }
278
+ .ssw-swap-btn {
279
+ width: 36px;
280
+ height: 36px;
281
+ border: 4px solid var(--ssw-bg-secondary);
282
+ background: var(--ssw-bg-tertiary);
283
+ border-radius: var(--ssw-radius-sm);
284
+ display: flex;
285
+ align-items: center;
286
+ justify-content: center;
287
+ cursor: pointer;
288
+ color: var(--ssw-text-secondary);
289
+ transition:
290
+ color 0.15s ease,
291
+ background 0.15s ease,
292
+ transform 0.3s ease;
293
+ }
294
+ .ssw-swap-btn:hover {
295
+ color: var(--ssw-text-primary);
296
+ background: var(--ssw-bg-hover);
297
+ }
298
+ .ssw-swap-btn:active {
299
+ transform: rotate(180deg);
300
+ }
301
+ .ssw-swap-btn:disabled {
302
+ opacity: 0.4;
303
+ cursor: not-allowed;
304
+ }
305
+ .ssw-swap-btn:disabled:hover {
306
+ color: var(--ssw-text-secondary);
307
+ background: var(--ssw-bg-tertiary);
308
+ }
309
+ .ssw-swap-btn:disabled:active {
310
+ transform: none;
311
+ }
312
+ .ssw-receive-row {
313
+ margin-top: 12px;
314
+ background: var(--ssw-bg-tertiary);
315
+ border: 1px solid var(--ssw-border);
316
+ border-radius: var(--ssw-radius-lg);
317
+ padding: 12px 16px;
318
+ transition: box-shadow 0.15s ease;
319
+ }
320
+ .ssw-receive-row:focus-within {
321
+ border-color: var(--ssw-accent);
322
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
323
+ }
324
+ .ssw-receive-row-resolved {
325
+ display: flex;
326
+ align-items: center;
327
+ justify-content: space-between;
328
+ gap: 12px;
329
+ }
330
+ .ssw-receive-label {
331
+ font-size: 13px;
332
+ font-weight: 500;
333
+ color: var(--ssw-text-secondary);
334
+ flex-shrink: 0;
335
+ }
336
+ .ssw-receive-resolved-value {
337
+ display: flex;
338
+ align-items: center;
339
+ gap: 8px;
340
+ min-width: 0;
341
+ min-height: 22px;
342
+ }
343
+ .ssw-receive-address {
344
+ font-size: 13px;
345
+ font-family: monospace;
346
+ color: var(--ssw-text-primary);
347
+ overflow: hidden;
348
+ text-overflow: ellipsis;
349
+ }
350
+ .ssw-receive-edit-btn {
351
+ display: flex;
352
+ align-items: center;
353
+ justify-content: center;
354
+ padding: 4px;
355
+ background: none;
356
+ border: none;
357
+ color: var(--ssw-text-muted);
358
+ cursor: pointer;
359
+ border-radius: var(--ssw-radius-2xs);
360
+ transition: color 0.15s ease, background 0.15s ease;
361
+ flex-shrink: 0;
362
+ }
363
+ .ssw-receive-edit-btn:hover {
364
+ color: var(--ssw-accent);
365
+ background: var(--ssw-bg-hover);
366
+ }
367
+ .ssw-receive-row-input {
368
+ display: flex;
369
+ flex-direction: column;
370
+ gap: 10px;
371
+ }
372
+ .ssw-receive-header {
373
+ display: flex;
374
+ align-items: baseline;
375
+ justify-content: space-between;
376
+ gap: 8px;
377
+ flex-wrap: wrap;
378
+ }
379
+ .ssw-receive-input-wrapper {
380
+ display: flex;
381
+ align-items: center;
382
+ gap: 8px;
383
+ padding: 10px 12px;
384
+ background: var(--ssw-bg-secondary);
385
+ border: 1px solid var(--ssw-border);
386
+ border-radius: var(--ssw-radius-sm);
387
+ }
388
+ .ssw-receive-input-wrapper.ssw-invalid {
389
+ border-color: var(--ssw-error);
390
+ }
391
+ .ssw-receive-input {
392
+ flex: 1;
393
+ background: none;
394
+ border: none;
395
+ outline: none;
396
+ font-size: 14px;
397
+ font-family: monospace;
398
+ color: var(--ssw-text-primary);
399
+ min-width: 0;
400
+ }
401
+ .ssw-receive-input::placeholder {
402
+ color: var(--ssw-text-muted);
403
+ font-family: var(--ssw-font-family);
404
+ }
405
+ .ssw-receive-inline-actions {
406
+ display: flex;
407
+ align-items: center;
408
+ gap: 4px;
409
+ flex-shrink: 0;
410
+ }
411
+ .ssw-receive-icon-btn {
412
+ display: flex;
413
+ align-items: center;
414
+ justify-content: center;
415
+ width: 28px;
416
+ height: 28px;
417
+ padding: 0;
418
+ border: none;
419
+ border-radius: var(--ssw-radius-xs);
420
+ cursor: pointer;
421
+ transition: background 0.15s ease, color 0.15s ease;
422
+ }
423
+ .ssw-receive-accept {
424
+ color: var(--ssw-success);
425
+ background: color-mix(in srgb, var(--ssw-success) 14%, transparent);
426
+ }
427
+ .ssw-receive-accept:hover:not(:disabled) {
428
+ background: color-mix(in srgb, var(--ssw-success) 26%, transparent);
429
+ }
430
+ .ssw-receive-accept:disabled {
431
+ color: var(--ssw-text-muted);
432
+ background: none;
433
+ cursor: not-allowed;
434
+ }
435
+ .ssw-receive-reset {
436
+ color: var(--ssw-error);
437
+ background: color-mix(in srgb, var(--ssw-error) 12%, transparent);
438
+ }
439
+ .ssw-receive-reset:hover {
440
+ background: color-mix(in srgb, var(--ssw-error) 24%, transparent);
441
+ }
442
+ .ssw-receive-error {
443
+ font-size: 12px;
444
+ color: var(--ssw-error);
445
+ }
446
+ .ssw-receive-row.ssw-attention {
447
+ box-shadow: 0 0 16px -2px var(--ssw-accent);
448
+ }
449
+ .ssw-quotes {
450
+ padding: 0 16px 16px;
451
+ }
452
+ .ssw-network-fee {
453
+ display: flex;
454
+ align-items: center;
455
+ justify-content: space-between;
456
+ padding: 0 20px;
457
+ margin-bottom: 8px;
458
+ }
459
+ .ssw-network-fee-label {
460
+ font-size: 13px;
461
+ color: var(--ssw-text-muted);
462
+ }
463
+ .ssw-network-fee-value {
464
+ font-size: 13px;
465
+ font-weight: 500;
466
+ color: var(--ssw-text-secondary);
467
+ }
468
+ .ssw-action-btn {
469
+ width: calc(100% - 32px);
470
+ margin: 0 16px 16px;
471
+ padding: 16px;
472
+ border: none;
473
+ border-radius: var(--ssw-radius-md);
474
+ background: var(--ssw-accent);
475
+ color: white;
476
+ font-size: 16px;
477
+ font-weight: 600;
478
+ cursor: pointer;
479
+ transition: all 0.15s ease;
480
+ }
481
+ .ssw-action-btn:hover:not(:disabled) {
482
+ filter: brightness(1.1);
483
+ }
484
+ .ssw-action-btn:disabled {
485
+ background: var(--ssw-bg-tertiary);
486
+ color: var(--ssw-text-muted);
487
+ cursor: not-allowed;
488
+ }
489
+ .ssw-action-btn.ssw-secondary {
490
+ background: color-mix(in srgb, var(--ssw-accent) 15%, var(--ssw-bg-tertiary));
491
+ color: var(--ssw-text-primary);
492
+ border: 1px solid color-mix(in srgb, var(--ssw-accent) 40%, transparent);
493
+ }
494
+ .ssw-action-btn.ssw-secondary:hover:not(:disabled) {
495
+ background: color-mix(in srgb, var(--ssw-accent) 25%, var(--ssw-bg-tertiary));
496
+ filter: none;
497
+ }
498
+ .ssw-powered-by {
499
+ padding: 12px 16px;
500
+ display: flex;
501
+ align-items: center;
502
+ justify-content: center;
503
+ gap: 4px;
504
+ font-size: 12px;
505
+ color: var(--ssw-text-muted);
506
+ border-top: 1px solid var(--ssw-border);
507
+ }
508
+ .ssw-powered-by a {
509
+ color: var(--ssw-accent);
510
+ text-decoration: none;
511
+ font-weight: 500;
512
+ }
513
+ .ssw-powered-by-link {
514
+ display: inline-flex;
515
+ align-items: center;
516
+ gap: 4px;
517
+ }
518
+ .ssw-powered-by a:hover {
519
+ opacity: 0.8;
520
+ }
521
+ .ssw-tx-status {
522
+ display: flex;
523
+ align-items: center;
524
+ gap: 12px;
525
+ padding: 12px 16px;
526
+ margin: 0 16px 16px;
527
+ border-radius: var(--ssw-radius-sm);
528
+ background: var(--ssw-bg-tertiary);
529
+ border: 1px solid var(--ssw-border);
530
+ }
531
+ .ssw-tx-status-pending {
532
+ border-color: var(--ssw-accent);
533
+ background: var(--ssw-accent-light);
534
+ }
535
+ .ssw-tx-status-success {
536
+ border-color: var(--ssw-success);
537
+ background: rgba(0, 211, 149, 0.1);
538
+ }
539
+ .ssw-tx-status-error {
540
+ border-color: var(--ssw-error);
541
+ background: rgba(244, 67, 54, 0.1);
542
+ }
543
+ .ssw-tx-status-icon {
544
+ flex-shrink: 0;
545
+ display: flex;
546
+ align-items: center;
547
+ justify-content: center;
548
+ width: 24px;
549
+ height: 24px;
550
+ }
551
+ .ssw-tx-status-pending .ssw-tx-status-icon {
552
+ color: var(--ssw-accent);
553
+ }
554
+ .ssw-tx-status-success .ssw-tx-status-icon {
555
+ color: var(--ssw-success);
556
+ }
557
+ .ssw-tx-status-error .ssw-tx-status-icon {
558
+ color: var(--ssw-error);
559
+ }
560
+ .ssw-tx-status-content {
561
+ flex: 1;
562
+ display: flex;
563
+ flex-direction: row;
564
+ align-items: center;
565
+ gap: 8px;
566
+ min-width: 0;
567
+ flex-wrap: wrap;
568
+ }
569
+ .ssw-tx-status-message {
570
+ font-size: 14px;
571
+ font-weight: 500;
572
+ color: var(--ssw-text-primary);
573
+ word-break: break-word;
574
+ }
575
+ .ssw-tx-status-link {
576
+ font-size: 13px;
577
+ color: var(--ssw-accent);
578
+ text-decoration: none;
579
+ }
580
+ .ssw-tx-status-link:hover {
581
+ text-decoration: underline;
582
+ }
583
+ .ssw-tx-status-close {
584
+ flex-shrink: 0;
585
+ background: none;
586
+ border: none;
587
+ padding: 4px;
588
+ cursor: pointer;
589
+ color: var(--ssw-text-muted);
590
+ transition: color 0.15s ease;
591
+ }
592
+ .ssw-tx-status-close:hover {
593
+ color: var(--ssw-text-primary);
594
+ }
595
+ @keyframes ssw-spin {
596
+ from {
597
+ transform: rotate(0deg);
598
+ }
599
+ to {
600
+ transform: rotate(360deg);
601
+ }
602
+ }
603
+ .ssw-spinner {
604
+ animation: ssw-spin 1s linear infinite;
605
+ }
606
+ .ssw-step-container {
607
+ min-height: 320px;
608
+ display: flex;
609
+ flex-direction: column;
610
+ }
611
+ .ssw-step-screen {
612
+ display: flex;
613
+ flex-direction: column;
614
+ align-items: center;
615
+ justify-content: center;
616
+ padding: 40px 32px;
617
+ flex: 1;
618
+ text-align: center;
619
+ animation: ssw-step-enter 0.25s ease;
620
+ }
621
+ @keyframes ssw-step-enter {
622
+ from {
623
+ opacity: 0;
624
+ transform: translateY(6px);
625
+ }
626
+ to {
627
+ opacity: 1;
628
+ transform: translateY(0);
629
+ }
630
+ }
631
+ .ssw-step-icon-circle {
632
+ width: 72px;
633
+ height: 72px;
634
+ border-radius: 50%;
635
+ display: flex;
636
+ align-items: center;
637
+ justify-content: center;
638
+ border-width: 2px;
639
+ border-style: solid;
640
+ flex-shrink: 0;
641
+ }
642
+ .ssw-step-icon-circle.ssw-ic-accent {
643
+ background: var(--ssw-accent-light);
644
+ border-color: var(--ssw-accent);
645
+ color: var(--ssw-accent);
646
+ }
647
+ .ssw-step-icon-circle.ssw-ic-success {
648
+ background: rgba(0, 211, 149, 0.1);
649
+ border-color: var(--ssw-success);
650
+ color: var(--ssw-success);
651
+ }
652
+ .ssw-step-icon-circle.ssw-ic-error {
653
+ background: rgba(244, 67, 54, 0.1);
654
+ border-color: var(--ssw-error);
655
+ color: var(--ssw-error);
656
+ }
657
+ .ssw-step-title {
658
+ font-size: 20px;
659
+ font-weight: 600;
660
+ color: var(--ssw-text-primary);
661
+ margin-top: 20px;
662
+ }
663
+ .ssw-step-subtitle {
664
+ font-size: 14px;
665
+ color: var(--ssw-text-secondary);
666
+ margin-top: 8px;
667
+ max-width: 280px;
668
+ line-height: 1.5;
669
+ }
670
+ .ssw-step-explorer-link {
671
+ display: inline-flex;
672
+ align-items: center;
673
+ gap: 4px;
674
+ font-size: 13px;
675
+ color: var(--ssw-accent);
676
+ text-decoration: none;
677
+ margin-top: 16px;
678
+ padding: 6px 12px;
679
+ border-radius: var(--ssw-radius-xs);
680
+ background: var(--ssw-accent-light);
681
+ transition: opacity 0.15s ease;
682
+ }
683
+ .ssw-step-explorer-link:hover {
684
+ opacity: 0.8;
685
+ }
686
+ .ssw-step-actions {
687
+ display: flex;
688
+ gap: 10px;
689
+ margin-top: 24px;
690
+ width: 100%;
691
+ max-width: 320px;
692
+ }
693
+ .ssw-step-actions .ssw-action-btn {
694
+ flex: 1;
695
+ width: auto;
696
+ margin: 0;
697
+ white-space: nowrap;
698
+ }
699
+ .ssw-step-actions .ssw-secondary {
700
+ background: var(--ssw-bg-tertiary);
701
+ border: 1px solid var(--ssw-border);
702
+ color: var(--ssw-text-secondary);
703
+ }
704
+ .ssw-step-actions .ssw-secondary:hover {
705
+ border-color: var(--ssw-border-hover);
706
+ color: var(--ssw-text-primary);
707
+ }
708
+ .ssw-btn-outline .ssw-action-btn {
709
+ background: transparent;
710
+ border: 1px solid var(--ssw-border);
711
+ color: var(--ssw-text-primary);
712
+ }
713
+ .ssw-btn-outline .ssw-action-btn:hover:not(:disabled) {
714
+ border-color: var(--ssw-accent);
715
+ background: var(--ssw-accent-light);
716
+ filter: none;
717
+ }
718
+ .ssw-btn-outline .ssw-action-btn:disabled {
719
+ background: transparent;
720
+ border-color: var(--ssw-border);
721
+ color: var(--ssw-text-muted);
722
+ }
723
+ .ssw-btn-outline .ssw-action-btn.ssw-secondary {
724
+ background: transparent;
725
+ border: 1px solid var(--ssw-border);
726
+ color: var(--ssw-text-secondary);
727
+ }
728
+ .ssw-btn-outline .ssw-action-btn.ssw-secondary:hover:not(:disabled) {
729
+ border-color: var(--ssw-border-hover);
730
+ color: var(--ssw-text-primary);
731
+ background: var(--ssw-bg-hover);
732
+ }
733
+
734
+ /* src/components/QuoteSelector.css */
735
+ .ssw-quote-selector {
736
+ width: 100%;
737
+ padding: 14px 16px;
738
+ border-radius: var(--ssw-radius-md);
739
+ background: var(--ssw-bg-tertiary);
740
+ border: 1px solid var(--ssw-border);
741
+ cursor: pointer;
742
+ transition: all 0.15s ease;
743
+ display: flex;
744
+ align-items: center;
745
+ justify-content: space-between;
746
+ gap: 12px;
747
+ }
748
+ .ssw-quote-selector:hover {
749
+ border-color: var(--ssw-border-hover);
750
+ background: var(--ssw-bg-hover);
751
+ }
752
+ .ssw-quote-selector.ssw-loading {
753
+ cursor: default;
754
+ justify-content: center;
755
+ }
756
+ .ssw-quote-selector.ssw-loading:hover {
757
+ border-color: var(--ssw-border);
758
+ background: var(--ssw-bg-tertiary);
759
+ }
760
+ .ssw-quote-loading {
761
+ display: flex;
762
+ align-items: center;
763
+ justify-content: center;
764
+ gap: 10px;
765
+ color: var(--ssw-text-secondary);
766
+ font-size: 14px;
767
+ }
768
+ .ssw-spinner-small {
769
+ width: 16px;
770
+ height: 16px;
771
+ border: 2px solid var(--ssw-border);
772
+ border-top-color: var(--ssw-accent);
773
+ border-radius: 50%;
774
+ animation: ssw-spin 0.8s linear infinite;
775
+ }
776
+ @keyframes ssw-spin {
777
+ to {
778
+ transform: rotate(360deg);
779
+ }
780
+ }
781
+ .ssw-quote-left {
782
+ display: flex;
783
+ flex-direction: column;
784
+ gap: 4px;
785
+ align-items: flex-start;
786
+ }
787
+ .ssw-quote-provider {
788
+ display: flex;
789
+ align-items: center;
790
+ gap: 10px;
791
+ }
792
+ .ssw-quote-provider-icon {
793
+ width: 20px;
794
+ height: 20px;
795
+ border-radius: var(--ssw-radius-xs);
796
+ object-fit: contain;
797
+ background: var(--ssw-bg-secondary);
798
+ }
799
+ .ssw-quote-provider-icon-placeholder {
800
+ width: 20px;
801
+ height: 20px;
802
+ border-radius: var(--ssw-radius-xs);
803
+ display: flex;
804
+ align-items: center;
805
+ justify-content: center;
806
+ font-size: 12px;
807
+ font-weight: 600;
808
+ color: white;
809
+ }
810
+ .ssw-quote-provider-name {
811
+ font-size: 14px;
812
+ font-weight: 600;
813
+ color: var(--ssw-text-primary);
814
+ }
815
+ .ssw-quote-best-tag {
816
+ padding: 3px 7px;
817
+ border-radius: var(--ssw-radius-xs);
818
+ background: var(--ssw-accent);
819
+ color: white;
820
+ font-size: 10px;
821
+ font-weight: 600;
822
+ text-transform: uppercase;
823
+ letter-spacing: 0.03em;
824
+ }
825
+ .ssw-quote-usd {
826
+ font-size: 13px;
827
+ color: var(--ssw-text-secondary);
828
+ padding-left: 38px;
829
+ }
830
+ .ssw-quote-right {
831
+ display: flex;
832
+ flex-direction: column;
833
+ align-items: flex-end;
834
+ gap: 4px;
835
+ }
836
+ .ssw-quote-amount-row {
837
+ display: flex;
838
+ align-items: baseline;
839
+ gap: 5px;
840
+ }
841
+ .ssw-quote-amount {
842
+ font-size: 17px;
843
+ font-weight: 600;
844
+ color: var(--ssw-text-primary);
845
+ }
846
+ .ssw-quote-symbol {
847
+ font-size: 13px;
848
+ color: var(--ssw-text-secondary);
849
+ font-weight: 500;
850
+ }
851
+ .ssw-quote-more {
852
+ display: flex;
853
+ align-items: center;
854
+ gap: 3px;
855
+ font-size: 12px;
856
+ color: var(--ssw-accent);
857
+ font-weight: 500;
858
+ }
859
+ .ssw-quote-more svg {
860
+ opacity: 0.9;
861
+ }
862
+
863
+ /* src/components/QuotesModal.css */
864
+ .ssw-quotes-modal-backdrop {
865
+ position: fixed;
866
+ inset: 0;
867
+ background: rgba(0, 0, 0, 0.75);
868
+ backdrop-filter: blur(8px);
869
+ display: flex;
870
+ align-items: center;
871
+ justify-content: center;
872
+ z-index: 1000;
873
+ padding: 20px;
874
+ animation: ssw-fade-in 0.15s ease;
875
+ }
876
+ @keyframes ssw-fade-in {
877
+ from {
878
+ opacity: 0;
879
+ }
880
+ to {
881
+ opacity: 1;
882
+ }
883
+ }
884
+ .ssw-quotes-modal {
885
+ width: 100%;
886
+ max-width: 400px;
887
+ max-height: 70vh;
888
+ background: var(--ssw-bg-secondary, #12121c);
889
+ border-radius: var(--ssw-radius-widget);
890
+ border: 1px solid var(--ssw-border, rgba(255, 255, 255, 0.08));
891
+ display: flex;
892
+ flex-direction: column;
893
+ overflow: hidden;
894
+ animation: ssw-slide-up 0.2s ease;
895
+ }
896
+ @keyframes ssw-slide-up {
897
+ from {
898
+ opacity: 0;
899
+ transform: translateY(10px);
900
+ }
901
+ to {
902
+ opacity: 1;
903
+ transform: translateY(0);
904
+ }
905
+ }
906
+ .ssw-quotes-modal-header {
907
+ display: flex;
908
+ align-items: flex-start;
909
+ justify-content: space-between;
910
+ padding: 20px 20px 16px;
911
+ flex-shrink: 0;
912
+ }
913
+ .ssw-quotes-header-content {
914
+ display: flex;
915
+ flex-direction: column;
916
+ gap: 4px;
917
+ }
918
+ .ssw-quotes-modal-title {
919
+ font-size: 18px;
920
+ font-weight: 600;
921
+ color: var(--ssw-text-primary, #ffffff);
922
+ margin: 0;
923
+ }
924
+ .ssw-quotes-modal-subtitle {
925
+ font-size: 13px;
926
+ color: var(--ssw-text-secondary, #a0a0b0);
927
+ }
928
+ .ssw-quotes-modal-close {
929
+ padding: 6px;
930
+ border: none;
931
+ background: none;
932
+ border-radius: var(--ssw-radius-xs);
933
+ color: var(--ssw-text-muted, #6b6b80);
934
+ cursor: pointer;
935
+ transition: all 0.15s ease;
936
+ display: flex;
937
+ align-items: center;
938
+ justify-content: center;
939
+ margin: -2px -6px 0 0;
940
+ }
941
+ .ssw-quotes-modal-close:hover {
942
+ color: var(--ssw-text-primary, #ffffff);
943
+ background: var(--ssw-bg-hover, rgba(255, 255, 255, 0.05));
944
+ }
945
+ .ssw-quotes-modal-list {
946
+ flex: 1;
947
+ overflow-y: auto;
948
+ padding: 0 12px 12px;
949
+ display: flex;
950
+ flex-direction: column;
951
+ gap: 6px;
952
+ scrollbar-width: thin;
953
+ scrollbar-color: var(--ssw-border) transparent;
954
+ }
955
+ .ssw-quotes-modal-list::-webkit-scrollbar {
956
+ width: 6px;
957
+ }
958
+ .ssw-quotes-modal-list::-webkit-scrollbar-track {
959
+ background: transparent;
960
+ }
961
+ .ssw-quotes-modal-list::-webkit-scrollbar-thumb {
962
+ background: var(--ssw-border);
963
+ border-radius: 3px;
964
+ }
965
+ .ssw-quotes-modal-list::-webkit-scrollbar-thumb:hover {
966
+ background: var(--ssw-border-hover);
967
+ }
968
+ .ssw-quote-row {
969
+ display: flex;
970
+ align-items: center;
971
+ justify-content: space-between;
972
+ padding: 14px 16px;
973
+ border: 1px solid transparent;
974
+ border-radius: var(--ssw-radius-md);
975
+ background: var(--ssw-bg-tertiary, #1a1a2e);
976
+ cursor: pointer;
977
+ transition: all 0.15s ease;
978
+ text-align: left;
979
+ width: 100%;
980
+ gap: 12px;
981
+ }
982
+ .ssw-quote-row:hover {
983
+ background: var(--ssw-bg-hover, rgba(255, 255, 255, 0.05));
984
+ }
985
+ .ssw-quote-row.ssw-best {
986
+ border-color: var(--ssw-accent, #3861fb);
987
+ background: color-mix(in srgb, var(--ssw-accent, #3861fb) 6%, transparent);
988
+ }
989
+ .ssw-quote-row.ssw-best:hover {
990
+ background: color-mix(in srgb, var(--ssw-accent, #3861fb) 12%, transparent);
991
+ }
992
+ .ssw-quote-row.ssw-selected {
993
+ border-color: var(--ssw-success, #00d395);
994
+ background: rgba(0, 211, 149, 0.06);
995
+ }
996
+ .ssw-quote-row-left {
997
+ display: flex;
998
+ align-items: center;
999
+ gap: 12px;
1000
+ min-width: 0;
1001
+ }
1002
+ .ssw-quote-row-icon {
1003
+ width: 36px;
1004
+ height: 36px;
1005
+ border-radius: var(--ssw-radius-sm);
1006
+ object-fit: contain;
1007
+ background: var(--ssw-bg-secondary, #12121c);
1008
+ flex-shrink: 0;
1009
+ }
1010
+ .ssw-quote-row-icon-placeholder {
1011
+ width: 36px;
1012
+ height: 36px;
1013
+ border-radius: var(--ssw-radius-sm);
1014
+ display: flex;
1015
+ align-items: center;
1016
+ justify-content: center;
1017
+ font-size: 15px;
1018
+ font-weight: 600;
1019
+ color: white;
1020
+ flex-shrink: 0;
1021
+ }
1022
+ .ssw-quote-row-info {
1023
+ display: flex;
1024
+ flex-direction: column;
1025
+ gap: 2px;
1026
+ min-width: 0;
1027
+ }
1028
+ .ssw-quote-row-name-row {
1029
+ display: flex;
1030
+ align-items: center;
1031
+ gap: 8px;
1032
+ flex-wrap: wrap;
1033
+ }
1034
+ .ssw-quote-row-name {
1035
+ font-size: 14px;
1036
+ font-weight: 600;
1037
+ color: var(--ssw-text-primary, #ffffff);
1038
+ }
1039
+ .ssw-quote-row-best {
1040
+ padding: 2px 6px;
1041
+ border-radius: var(--ssw-radius-2xs);
1042
+ background: var(--ssw-accent, #3861fb);
1043
+ color: white;
1044
+ font-size: 9px;
1045
+ font-weight: 700;
1046
+ text-transform: uppercase;
1047
+ letter-spacing: 0.04em;
1048
+ }
1049
+ .ssw-quote-row-diff {
1050
+ padding: 2px 6px;
1051
+ border-radius: var(--ssw-radius-2xs);
1052
+ background: rgba(239, 68, 68, 0.12);
1053
+ color: #ef4444;
1054
+ font-size: 10px;
1055
+ font-weight: 600;
1056
+ }
1057
+ .ssw-quote-row-time {
1058
+ font-size: 12px;
1059
+ color: var(--ssw-text-muted, #6b6b80);
1060
+ }
1061
+ .ssw-quote-row-right {
1062
+ display: flex;
1063
+ flex-direction: column;
1064
+ align-items: flex-end;
1065
+ gap: 2px;
1066
+ flex-shrink: 0;
1067
+ }
1068
+ .ssw-quote-row-amount {
1069
+ font-size: 15px;
1070
+ font-weight: 600;
1071
+ color: var(--ssw-text-primary, #ffffff);
1072
+ }
1073
+ .ssw-quote-row-symbol {
1074
+ font-size: 13px;
1075
+ font-weight: 500;
1076
+ color: var(--ssw-text-secondary, #a0a0b0);
1077
+ }
1078
+ .ssw-quote-row-usd {
1079
+ font-size: 12px;
1080
+ color: var(--ssw-text-muted, #6b6b80);
1081
+ }
1082
+
1083
+ /* src/components/SettingsModal.css */
1084
+ .ssw-settings-modal {
1085
+ background: var(--ssw-bg-secondary);
1086
+ border-radius: var(--ssw-radius-lg);
1087
+ width: 100%;
1088
+ max-width: 400px;
1089
+ overflow: hidden;
1090
+ box-shadow: 0 24px 48px rgba(0, 0, 0, 0.2);
1091
+ animation: ssw-settings-slide-up 0.2s ease;
1092
+ }
1093
+ @keyframes ssw-settings-slide-up {
1094
+ from {
1095
+ opacity: 0;
1096
+ transform: translateY(10px);
1097
+ }
1098
+ to {
1099
+ opacity: 1;
1100
+ transform: translateY(0);
1101
+ }
1102
+ }
1103
+ .ssw-settings-content {
1104
+ padding: 20px 24px 24px;
1105
+ }
1106
+ .ssw-settings-section {
1107
+ display: flex;
1108
+ flex-direction: column;
1109
+ gap: 12px;
1110
+ }
1111
+ .ssw-settings-label {
1112
+ display: flex;
1113
+ align-items: center;
1114
+ gap: 6px;
1115
+ font-size: 14px;
1116
+ font-weight: 500;
1117
+ color: var(--ssw-text-secondary);
1118
+ }
1119
+ .ssw-info-btn {
1120
+ background: none;
1121
+ border: none;
1122
+ padding: 2px;
1123
+ cursor: pointer;
1124
+ color: var(--ssw-text-muted);
1125
+ border-radius: 50%;
1126
+ transition: color 0.15s ease;
1127
+ }
1128
+ .ssw-info-btn:hover {
1129
+ color: var(--ssw-text-secondary);
1130
+ }
1131
+ .ssw-slippage-options {
1132
+ display: flex;
1133
+ gap: 8px;
1134
+ }
1135
+ .ssw-slippage-btn {
1136
+ flex: 1;
1137
+ padding: 10px 12px;
1138
+ border: 1px solid var(--ssw-border);
1139
+ border-radius: var(--ssw-radius-sm);
1140
+ background: var(--ssw-bg-tertiary);
1141
+ color: var(--ssw-text-primary);
1142
+ font-size: 14px;
1143
+ font-weight: 500;
1144
+ cursor: pointer;
1145
+ transition: all 0.15s ease;
1146
+ }
1147
+ .ssw-slippage-btn:hover {
1148
+ border-color: var(--ssw-accent);
1149
+ }
1150
+ .ssw-slippage-btn.ssw-selected {
1151
+ background: var(--ssw-accent-light);
1152
+ border-color: var(--ssw-accent);
1153
+ color: var(--ssw-accent);
1154
+ }
1155
+ .ssw-slippage-custom {
1156
+ flex: 1.2;
1157
+ position: relative;
1158
+ display: flex;
1159
+ align-items: center;
1160
+ }
1161
+ .ssw-slippage-custom input {
1162
+ width: 100%;
1163
+ padding: 10px 28px 10px 12px;
1164
+ border: 1px solid var(--ssw-border);
1165
+ border-radius: var(--ssw-radius-sm);
1166
+ background: var(--ssw-bg-tertiary);
1167
+ color: var(--ssw-text-primary);
1168
+ font-size: 14px;
1169
+ font-weight: 500;
1170
+ outline: none;
1171
+ transition: border-color 0.15s ease;
1172
+ }
1173
+ .ssw-slippage-custom input:focus {
1174
+ border-color: var(--ssw-accent);
1175
+ }
1176
+ .ssw-slippage-custom input::placeholder {
1177
+ color: var(--ssw-text-muted);
1178
+ font-weight: 400;
1179
+ }
1180
+ .ssw-slippage-custom.ssw-selected input {
1181
+ background: var(--ssw-accent-light);
1182
+ border-color: var(--ssw-accent);
1183
+ }
1184
+ .ssw-slippage-suffix {
1185
+ position: absolute;
1186
+ right: 12px;
1187
+ color: var(--ssw-text-secondary);
1188
+ font-size: 14px;
1189
+ pointer-events: none;
1190
+ }
1191
+ .ssw-slippage-warning {
1192
+ display: flex;
1193
+ align-items: flex-start;
1194
+ gap: 8px;
1195
+ padding: 10px 12px;
1196
+ border-radius: var(--ssw-radius-sm);
1197
+ background: rgba(255, 193, 7, 0.1);
1198
+ color: #ffc107;
1199
+ font-size: 13px;
1200
+ line-height: 1.4;
1201
+ }
1202
+ .ssw-slippage-warning svg {
1203
+ flex-shrink: 0;
1204
+ margin-top: 1px;
1205
+ }
1206
+ .ssw-slippage-warning.ssw-error {
1207
+ background: rgba(244, 67, 54, 0.1);
1208
+ color: #f44336;
1209
+ }
1210
+
1211
+ /* src/components/TokenSelectModal.css */
1212
+ .ssw-modal-backdrop {
1213
+ position: fixed;
1214
+ inset: 0;
1215
+ background: rgba(0, 0, 0, 0.6);
1216
+ backdrop-filter: blur(4px);
1217
+ display: flex;
1218
+ align-items: center;
1219
+ justify-content: center;
1220
+ z-index: 1000;
1221
+ padding: 16px;
1222
+ animation: ssw-fade-in 0.15s ease;
1223
+ }
1224
+ @keyframes ssw-fade-in {
1225
+ from {
1226
+ opacity: 0;
1227
+ }
1228
+ to {
1229
+ opacity: 1;
1230
+ }
1231
+ }
1232
+ .ssw-modal {
1233
+ background: var(--ssw-bg-secondary);
1234
+ border-radius: var(--ssw-radius-lg);
1235
+ width: 100%;
1236
+ max-width: 680px;
1237
+ max-height: 80vh;
1238
+ display: flex;
1239
+ flex-direction: column;
1240
+ overflow: hidden;
1241
+ box-shadow: 0 24px 48px rgba(0, 0, 0, 0.2);
1242
+ animation: ssw-slide-up 0.2s ease;
1243
+ }
1244
+ @keyframes ssw-slide-up {
1245
+ from {
1246
+ opacity: 0;
1247
+ transform: translateY(10px);
1248
+ }
1249
+ to {
1250
+ opacity: 1;
1251
+ transform: translateY(0);
1252
+ }
1253
+ }
1254
+ .ssw-modal-header {
1255
+ display: flex;
1256
+ align-items: center;
1257
+ justify-content: space-between;
1258
+ padding: 20px 24px;
1259
+ border-bottom: 1px solid var(--ssw-border);
1260
+ }
1261
+ .ssw-modal-title {
1262
+ font-size: 18px;
1263
+ font-weight: 600;
1264
+ color: var(--ssw-text-primary);
1265
+ margin: 0;
1266
+ }
1267
+ .ssw-modal-close {
1268
+ background: none;
1269
+ border: none;
1270
+ padding: 8px;
1271
+ cursor: pointer;
1272
+ color: var(--ssw-text-secondary);
1273
+ border-radius: var(--ssw-radius-xs);
1274
+ transition: all 0.15s ease;
1275
+ }
1276
+ .ssw-modal-close:hover {
1277
+ background: var(--ssw-bg-hover);
1278
+ color: var(--ssw-text-primary);
1279
+ }
1280
+ .ssw-modal-content {
1281
+ display: flex;
1282
+ flex: 1;
1283
+ min-height: 0;
1284
+ }
1285
+ .ssw-chain-sidebar {
1286
+ width: 200px;
1287
+ border-right: 1px solid var(--ssw-border);
1288
+ display: flex;
1289
+ flex-direction: column;
1290
+ background: var(--ssw-bg-tertiary);
1291
+ }
1292
+ .ssw-search-wrapper {
1293
+ position: relative;
1294
+ padding: 16px;
1295
+ }
1296
+ .ssw-search-icon {
1297
+ position: absolute;
1298
+ left: 28px;
1299
+ top: 50%;
1300
+ transform: translateY(-50%);
1301
+ color: var(--ssw-text-muted);
1302
+ pointer-events: none;
1303
+ }
1304
+ .ssw-chain-search,
1305
+ .ssw-token-search {
1306
+ width: 100%;
1307
+ padding: 10px 12px 10px 36px;
1308
+ border: 1px solid var(--ssw-border);
1309
+ border-radius: var(--ssw-radius-sm);
1310
+ background: var(--ssw-bg-input);
1311
+ color: var(--ssw-text-primary);
1312
+ font-size: 14px;
1313
+ outline: none;
1314
+ transition: border-color 0.15s ease;
1315
+ }
1316
+ .ssw-chain-search:focus,
1317
+ .ssw-token-search:focus {
1318
+ border-color: var(--ssw-accent);
1319
+ }
1320
+ .ssw-chain-search::placeholder,
1321
+ .ssw-token-search::placeholder {
1322
+ color: var(--ssw-text-muted);
1323
+ }
1324
+ .ssw-chain-list {
1325
+ flex: 1;
1326
+ overflow-y: auto;
1327
+ padding: 0 8px 16px;
1328
+ scrollbar-width: thin;
1329
+ scrollbar-color: var(--ssw-border) transparent;
1330
+ min-height: 300px;
1331
+ }
1332
+ .ssw-chain-list::-webkit-scrollbar {
1333
+ width: 6px;
1334
+ }
1335
+ .ssw-chain-list::-webkit-scrollbar-track {
1336
+ background: transparent;
1337
+ }
1338
+ .ssw-chain-list::-webkit-scrollbar-thumb {
1339
+ background: var(--ssw-border);
1340
+ border-radius: 3px;
1341
+ }
1342
+ .ssw-chain-list::-webkit-scrollbar-thumb:hover {
1343
+ background: var(--ssw-border-hover);
1344
+ }
1345
+ .ssw-chain-item {
1346
+ display: flex;
1347
+ align-items: center;
1348
+ gap: 10px;
1349
+ width: 100%;
1350
+ padding: 10px 12px;
1351
+ border: none;
1352
+ background: none;
1353
+ border-radius: var(--ssw-radius-sm);
1354
+ cursor: pointer;
1355
+ transition: background 0.15s ease;
1356
+ text-align: left;
1357
+ }
1358
+ .ssw-chain-item:hover {
1359
+ background: var(--ssw-bg-hover);
1360
+ }
1361
+ .ssw-chain-item.ssw-selected {
1362
+ background: var(--ssw-accent-light);
1363
+ }
1364
+ .ssw-chain-icon,
1365
+ .ssw-chain-icon-placeholder,
1366
+ .ssw-chain-icon-multi {
1367
+ width: 28px;
1368
+ height: 28px;
1369
+ border-radius: var(--ssw-radius-xs);
1370
+ flex-shrink: 0;
1371
+ }
1372
+ .ssw-chain-icon {
1373
+ object-fit: contain;
1374
+ }
1375
+ .ssw-chain-icon-placeholder {
1376
+ display: flex;
1377
+ align-items: center;
1378
+ justify-content: center;
1379
+ font-size: 12px;
1380
+ font-weight: 600;
1381
+ color: white;
1382
+ }
1383
+ .ssw-chain-icon-multi {
1384
+ display: flex;
1385
+ align-items: center;
1386
+ justify-content: center;
1387
+ background: var(--ssw-bg-hover);
1388
+ font-size: 14px;
1389
+ }
1390
+ .ssw-chain-name {
1391
+ font-size: 14px;
1392
+ font-weight: 500;
1393
+ color: var(--ssw-text-primary);
1394
+ white-space: nowrap;
1395
+ overflow: hidden;
1396
+ text-overflow: ellipsis;
1397
+ }
1398
+ .ssw-token-panel {
1399
+ flex: 1;
1400
+ display: flex;
1401
+ flex-direction: column;
1402
+ min-width: 0;
1403
+ }
1404
+ .ssw-token-list {
1405
+ flex: 1;
1406
+ overflow-y: auto;
1407
+ padding: 0 16px 16px;
1408
+ scrollbar-width: thin;
1409
+ scrollbar-color: var(--ssw-border) transparent;
1410
+ }
1411
+ .ssw-token-list::-webkit-scrollbar {
1412
+ width: 6px;
1413
+ }
1414
+ .ssw-token-list::-webkit-scrollbar-track {
1415
+ background: transparent;
1416
+ }
1417
+ .ssw-token-list::-webkit-scrollbar-thumb {
1418
+ background: var(--ssw-border);
1419
+ border-radius: 3px;
1420
+ }
1421
+ .ssw-token-list::-webkit-scrollbar-thumb:hover {
1422
+ background: var(--ssw-border-hover);
1423
+ }
1424
+ .ssw-token-item {
1425
+ display: flex;
1426
+ align-items: center;
1427
+ gap: 12px;
1428
+ width: 100%;
1429
+ padding: 12px;
1430
+ border: none;
1431
+ background: none;
1432
+ border-radius: var(--ssw-radius-sm);
1433
+ cursor: pointer;
1434
+ transition: background 0.15s ease;
1435
+ text-align: left;
1436
+ animation: ssw-token-fade-in 0.2s ease backwards;
1437
+ }
1438
+ @keyframes ssw-token-fade-in {
1439
+ from {
1440
+ opacity: 0;
1441
+ transform: translateY(4px);
1442
+ }
1443
+ to {
1444
+ opacity: 1;
1445
+ transform: translateY(0);
1446
+ }
1447
+ }
1448
+ .ssw-token-item:hover {
1449
+ background: var(--ssw-bg-hover);
1450
+ }
1451
+ .ssw-token-icon-wrapper {
1452
+ position: relative;
1453
+ width: 40px;
1454
+ height: 40px;
1455
+ flex-shrink: 0;
1456
+ }
1457
+ .ssw-token-icon,
1458
+ .ssw-token-icon-placeholder {
1459
+ width: 40px;
1460
+ height: 40px;
1461
+ border-radius: 50%;
1462
+ }
1463
+ .ssw-token-icon {
1464
+ object-fit: contain;
1465
+ }
1466
+ .ssw-token-icon-placeholder {
1467
+ display: flex;
1468
+ align-items: center;
1469
+ justify-content: center;
1470
+ font-size: 16px;
1471
+ font-weight: 600;
1472
+ color: white;
1473
+ }
1474
+ .ssw-token-chain-badge {
1475
+ position: absolute;
1476
+ bottom: -2px;
1477
+ right: -2px;
1478
+ width: 16px;
1479
+ height: 16px;
1480
+ border-radius: var(--ssw-radius-2xs);
1481
+ border: 2px solid var(--ssw-bg-secondary);
1482
+ background: var(--ssw-bg-secondary);
1483
+ }
1484
+ .ssw-token-info {
1485
+ display: flex;
1486
+ flex-direction: column;
1487
+ gap: 2px;
1488
+ min-width: 0;
1489
+ }
1490
+ .ssw-token-symbol {
1491
+ font-size: 15px;
1492
+ font-weight: 600;
1493
+ color: var(--ssw-text-primary);
1494
+ }
1495
+ .ssw-token-name {
1496
+ font-size: 13px;
1497
+ color: var(--ssw-text-secondary);
1498
+ white-space: nowrap;
1499
+ overflow: hidden;
1500
+ text-overflow: ellipsis;
1501
+ }
1502
+ .ssw-token-right {
1503
+ margin-left: auto;
1504
+ display: flex;
1505
+ flex-direction: column;
1506
+ align-items: flex-end;
1507
+ gap: 2px;
1508
+ flex-shrink: 0;
1509
+ }
1510
+ .ssw-token-fiat-value {
1511
+ font-size: 14px;
1512
+ font-weight: 500;
1513
+ color: var(--ssw-text-primary);
1514
+ }
1515
+ .ssw-token-balance {
1516
+ font-size: 13px;
1517
+ font-weight: 400;
1518
+ color: var(--ssw-text-secondary);
1519
+ }
1520
+ .ssw-token-balance-skeleton {
1521
+ width: 60px;
1522
+ height: 14px;
1523
+ border-radius: var(--ssw-radius-2xs);
1524
+ background:
1525
+ linear-gradient(
1526
+ 90deg,
1527
+ var(--ssw-bg-hover) 25%,
1528
+ var(--ssw-border) 50%,
1529
+ var(--ssw-bg-hover) 75%);
1530
+ background-size: 200% 100%;
1531
+ animation: ssw-skeleton-shimmer 1.5s infinite;
1532
+ flex-shrink: 0;
1533
+ }
1534
+ @keyframes ssw-skeleton-shimmer {
1535
+ 0% {
1536
+ background-position: 200% 0;
1537
+ }
1538
+ 100% {
1539
+ background-position: -200% 0;
1540
+ }
1541
+ }
1542
+ .ssw-loading,
1543
+ .ssw-empty {
1544
+ display: flex;
1545
+ flex-direction: column;
1546
+ align-items: center;
1547
+ justify-content: center;
1548
+ gap: 12px;
1549
+ padding: 48px 24px;
1550
+ color: var(--ssw-text-secondary);
1551
+ font-size: 14px;
1552
+ }
1553
+ .ssw-spinner {
1554
+ width: 24px;
1555
+ height: 24px;
1556
+ border: 2px solid var(--ssw-border);
1557
+ border-top-color: var(--ssw-accent);
1558
+ border-radius: 50%;
1559
+ animation: ssw-spin 0.8s linear infinite;
1560
+ }
1561
+ @keyframes ssw-spin {
1562
+ to {
1563
+ transform: rotate(360deg);
1564
+ }
1565
+ }
1566
+ @media (max-width: 600px) {
1567
+ .ssw-modal {
1568
+ max-height: 90vh;
1569
+ }
1570
+ .ssw-modal-content {
1571
+ flex-direction: column;
1572
+ }
1573
+ .ssw-chain-sidebar {
1574
+ width: 100%;
1575
+ border-right: none;
1576
+ border-bottom: 1px solid var(--ssw-border);
1577
+ max-height: 200px;
1578
+ }
1579
+ .ssw-chain-list {
1580
+ display: flex;
1581
+ flex-wrap: wrap;
1582
+ gap: 8px;
1583
+ padding: 0 16px 16px;
1584
+ }
1585
+ .ssw-chain-item {
1586
+ padding: 8px 12px;
1587
+ }
1588
+ .ssw-chain-name {
1589
+ font-size: 13px;
1590
+ }
1591
+ }