@rhinestone/deposit-modal 0.3.0-alpha.12 → 0.3.0-alpha.14
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/README.md +59 -0
- package/dist/{DepositModalReown-EC4DJ3EC.cjs → DepositModalReown-4I47KSPN.cjs} +6 -6
- package/dist/{DepositModalReown-QOTUF4JC.mjs → DepositModalReown-DIUIB3MU.mjs} +3 -3
- package/dist/{QRCode-KG47KTGX.cjs → QRCode-5DXFNKI2.cjs} +1 -1
- package/dist/{QRCode-YJ3EGWQS.mjs → QRCode-WUC652SH.mjs} +1 -1
- package/dist/{WithdrawModalReown-QEQPCSWT.mjs → WithdrawModalReown-WRUEALDP.mjs} +3 -3
- package/dist/{WithdrawModalReown-Z5JVENP6.cjs → WithdrawModalReown-Y3NRAKXJ.cjs} +6 -6
- package/dist/{chunk-YI63OMXN.cjs → chunk-2NUXDEEO.cjs} +57 -57
- package/dist/{chunk-I5G5ULRP.cjs → chunk-3CYGTYMY.cjs} +1322 -320
- package/dist/{chunk-WVE3JN3C.mjs → chunk-4ZN726P5.mjs} +345 -54
- package/dist/{chunk-QXIJLRKC.mjs → chunk-JTMGFWXO.mjs} +1 -1
- package/dist/{chunk-FGVSNARE.cjs → chunk-JTULAFMU.cjs} +2 -2
- package/dist/{chunk-2TWQGPPB.cjs → chunk-N4XRQPVA.cjs} +374 -83
- package/dist/{chunk-7MZNQ4C2.mjs → chunk-VD4WTEHP.mjs} +2 -2
- package/dist/{chunk-HR6BABPX.mjs → chunk-XG474KUR.mjs} +1433 -431
- package/dist/deposit.cjs +3 -3
- package/dist/deposit.d.cts +2 -2
- package/dist/deposit.d.ts +2 -2
- package/dist/deposit.mjs +2 -2
- package/dist/index.cjs +4 -4
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +3 -3
- package/dist/styles.css +525 -66
- package/dist/{types-D6wrO4Ow.d.cts → types-C8i2ebY1.d.cts} +25 -0
- package/dist/{types-D6wrO4Ow.d.ts → types-C8i2ebY1.d.ts} +25 -0
- package/dist/withdraw.cjs +3 -3
- package/dist/withdraw.d.cts +2 -2
- package/dist/withdraw.d.ts +2 -2
- package/dist/withdraw.mjs +2 -2
- package/package.json +3 -3
package/dist/styles.css
CHANGED
|
@@ -284,6 +284,11 @@
|
|
|
284
284
|
/* Cap the modal at 600px (or viewport-40 on tiny screens) so long lists
|
|
285
285
|
scroll inside instead of growing the modal. */
|
|
286
286
|
max-height: min(600px, calc(100vh - 40px));
|
|
287
|
+
/* Explicit 0 (not the `auto` default) so the min-height transition
|
|
288
|
+
below has a definite starting value when :has() rules later raise
|
|
289
|
+
it to the iframe-mounted height. Transitions from `auto` are
|
|
290
|
+
unreliable in browsers and tend to apply instantly. */
|
|
291
|
+
min-height: 0;
|
|
287
292
|
display: flex;
|
|
288
293
|
flex-direction: column;
|
|
289
294
|
margin: 20px;
|
|
@@ -292,7 +297,18 @@
|
|
|
292
297
|
border: 1px solid var(--rs-border);
|
|
293
298
|
border-radius: var(--rs-radius-lg);
|
|
294
299
|
transform: scale(0.95);
|
|
295
|
-
transition:
|
|
300
|
+
transition:
|
|
301
|
+
transform 0.2s ease,
|
|
302
|
+
/* Smooth resize when the user moves between steps with different
|
|
303
|
+
widths (e.g. ConnectStep 400 → Connect-via-Swapped 469) instead of
|
|
304
|
+
a hard pop. */
|
|
305
|
+
max-width 240ms cubic-bezier(0.22, 1, 0.36, 1),
|
|
306
|
+
/* Same for height: when a flow starts that pre-reserves the iframe
|
|
307
|
+
size (via the min-height :has() rules below), grow smoothly from
|
|
308
|
+
the previous step's height instead of jumping. Min-height is on
|
|
309
|
+
modal-content rather than modal-body so the transitioned property
|
|
310
|
+
lives on an element that survives step swaps. */
|
|
311
|
+
min-height 280ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
296
312
|
}
|
|
297
313
|
|
|
298
314
|
.rs-modal-content[data-theme="dark"] {
|
|
@@ -375,21 +391,17 @@
|
|
|
375
391
|
padding-inline: 16px;
|
|
376
392
|
}
|
|
377
393
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
.rs-modal-
|
|
383
|
-
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
.rs-modal-body::-webkit-scrollbar-thumb {
|
|
387
|
-
background-color: var(--rs-surface-hover);
|
|
388
|
-
border-radius: var(--rs-radius-full);
|
|
394
|
+
/* Scrollbars are hidden throughout the modal UI. The portfolio list
|
|
395
|
+
(.rs-asset-list) is the sole exception — it keeps a visible scrollbar since
|
|
396
|
+
it's a long, independently-scrolling list. The :not() exemption also keeps
|
|
397
|
+
this rule's specificity above the per-container scrollbar rules elsewhere. */
|
|
398
|
+
.rs-modal *:not(.rs-asset-list) {
|
|
399
|
+
scrollbar-width: none;
|
|
389
400
|
}
|
|
390
401
|
|
|
391
|
-
.rs-modal-
|
|
392
|
-
|
|
402
|
+
.rs-modal *:not(.rs-asset-list)::-webkit-scrollbar {
|
|
403
|
+
width: 0;
|
|
404
|
+
height: 0;
|
|
393
405
|
}
|
|
394
406
|
|
|
395
407
|
/* =============================================================================
|
|
@@ -1095,7 +1107,10 @@
|
|
|
1095
1107
|
display: flex;
|
|
1096
1108
|
flex-direction: column;
|
|
1097
1109
|
gap: 4px;
|
|
1098
|
-
|
|
1110
|
+
/* Figma's asset list is 284px — exactly 4 rows (4×68 + 3×4 gaps). Cap here
|
|
1111
|
+
so wallets with many assets scroll inside instead of growing the modal
|
|
1112
|
+
past the design's height. */
|
|
1113
|
+
max-height: 284px;
|
|
1099
1114
|
overflow-y: auto;
|
|
1100
1115
|
overscroll-behavior: contain;
|
|
1101
1116
|
/* Pull rows back to the row's natural left edge inside a scrollable
|
|
@@ -1300,6 +1315,11 @@
|
|
|
1300
1315
|
justify-content: center;
|
|
1301
1316
|
gap: 4px;
|
|
1302
1317
|
width: 100%;
|
|
1318
|
+
/* `border-box` so the 16px side padding counts INTO the 100% width
|
|
1319
|
+
instead of adding 32px on top of it (which otherwise pushes the
|
|
1320
|
+
footer past containers with their own horizontal padding — e.g.
|
|
1321
|
+
the tracker — and paints a phantom horizontal scrollbar). */
|
|
1322
|
+
box-sizing: border-box;
|
|
1303
1323
|
padding: 0 16px 16px;
|
|
1304
1324
|
font-size: 11px;
|
|
1305
1325
|
font-weight: 500;
|
|
@@ -1660,6 +1680,21 @@
|
|
|
1660
1680
|
manages the vertical rhythm between body slot and powered-by. */
|
|
1661
1681
|
padding: 0;
|
|
1662
1682
|
gap: 16px;
|
|
1683
|
+
/* Each screen fades in on mount so step-to-step transitions feel
|
|
1684
|
+
progressive instead of a hard swap. Short enough that the user
|
|
1685
|
+
doesn't perceive a delay; long enough to look intentional. */
|
|
1686
|
+
animation: rs-screen-enter 180ms ease-out;
|
|
1687
|
+
}
|
|
1688
|
+
|
|
1689
|
+
@keyframes rs-screen-enter {
|
|
1690
|
+
from {
|
|
1691
|
+
opacity: 0;
|
|
1692
|
+
transform: translateY(4px);
|
|
1693
|
+
}
|
|
1694
|
+
to {
|
|
1695
|
+
opacity: 1;
|
|
1696
|
+
transform: translateY(0);
|
|
1697
|
+
}
|
|
1663
1698
|
}
|
|
1664
1699
|
|
|
1665
1700
|
/* Body slot — direct child of .rs-screen. Always uses a 16px internal
|
|
@@ -2968,11 +3003,13 @@
|
|
|
2968
3003
|
align-items: center;
|
|
2969
3004
|
justify-content: space-between;
|
|
2970
3005
|
gap: 6px;
|
|
3006
|
+
white-space: nowrap;
|
|
2971
3007
|
}
|
|
2972
3008
|
|
|
2973
3009
|
.rs-deposit-address-min {
|
|
2974
3010
|
display: inline-flex;
|
|
2975
3011
|
align-items: center;
|
|
3012
|
+
flex-shrink: 0;
|
|
2976
3013
|
gap: 4px;
|
|
2977
3014
|
font-size: 11px;
|
|
2978
3015
|
font-weight: 500;
|
|
@@ -2980,8 +3017,8 @@
|
|
|
2980
3017
|
}
|
|
2981
3018
|
|
|
2982
3019
|
.rs-deposit-address-min-icon {
|
|
2983
|
-
width:
|
|
2984
|
-
height:
|
|
3020
|
+
width: 12px;
|
|
3021
|
+
height: 12px;
|
|
2985
3022
|
flex-shrink: 0;
|
|
2986
3023
|
color: var(--rs-icon-secondary);
|
|
2987
3024
|
}
|
|
@@ -3005,6 +3042,7 @@
|
|
|
3005
3042
|
border: none;
|
|
3006
3043
|
cursor: pointer;
|
|
3007
3044
|
font-family: inherit;
|
|
3045
|
+
line-height: normal;
|
|
3008
3046
|
color: var(--rs-muted);
|
|
3009
3047
|
text-align: left;
|
|
3010
3048
|
}
|
|
@@ -3166,7 +3204,10 @@
|
|
|
3166
3204
|
align-items: center;
|
|
3167
3205
|
gap: 8px;
|
|
3168
3206
|
width: 100%;
|
|
3169
|
-
|
|
3207
|
+
/* 11px vertical (not 12) so the 1px border lands the input at Figma's
|
|
3208
|
+
48px total height — Figma draws the stroke inside the box, CSS adds it
|
|
3209
|
+
outside. Horizontal stays 12px to match the design. */
|
|
3210
|
+
padding: 11px 12px;
|
|
3170
3211
|
background: var(--rs-surface-subtle);
|
|
3171
3212
|
border-radius: 8px;
|
|
3172
3213
|
border: 1px solid var(--rs-surface-subtle);
|
|
@@ -3274,39 +3315,18 @@
|
|
|
3274
3315
|
border-radius: 8px;
|
|
3275
3316
|
}
|
|
3276
3317
|
|
|
3277
|
-
/* Mid-refetch: dim the address/QR and block interaction so a stale
|
|
3278
|
-
registration can't be copied or scanned until setup is ready again. */
|
|
3279
|
-
.rs-deposit-address-well--updating {
|
|
3280
|
-
opacity: 0.4;
|
|
3281
|
-
pointer-events: none;
|
|
3282
|
-
filter: grayscale(0.3);
|
|
3283
|
-
transition: opacity 0.15s;
|
|
3284
|
-
}
|
|
3285
|
-
|
|
3286
|
-
.rs-deposit-address-updating {
|
|
3287
|
-
display: flex;
|
|
3288
|
-
align-items: center;
|
|
3289
|
-
justify-content: center;
|
|
3290
|
-
gap: 8px;
|
|
3291
|
-
width: 100%;
|
|
3292
|
-
padding: 10px 12px;
|
|
3293
|
-
font-size: 14px;
|
|
3294
|
-
font-weight: 500;
|
|
3295
|
-
color: var(--rs-muted);
|
|
3296
|
-
}
|
|
3297
|
-
|
|
3298
3318
|
.rs-deposit-address-qr {
|
|
3299
3319
|
display: flex;
|
|
3300
3320
|
align-items: center;
|
|
3301
3321
|
justify-content: center;
|
|
3302
|
-
padding:
|
|
3322
|
+
padding: 16px;
|
|
3303
3323
|
}
|
|
3304
3324
|
|
|
3305
3325
|
.rs-deposit-address-qr canvas,
|
|
3306
3326
|
.rs-deposit-address-qr svg {
|
|
3307
3327
|
display: block;
|
|
3308
|
-
width:
|
|
3309
|
-
height:
|
|
3328
|
+
width: 190px;
|
|
3329
|
+
height: 190px;
|
|
3310
3330
|
}
|
|
3311
3331
|
|
|
3312
3332
|
.rs-deposit-address-value {
|
|
@@ -3348,8 +3368,8 @@
|
|
|
3348
3368
|
}
|
|
3349
3369
|
|
|
3350
3370
|
.rs-skeleton-qr {
|
|
3351
|
-
width:
|
|
3352
|
-
height:
|
|
3371
|
+
width: 190px;
|
|
3372
|
+
height: 190px;
|
|
3353
3373
|
}
|
|
3354
3374
|
|
|
3355
3375
|
.rs-skeleton-address {
|
|
@@ -3381,6 +3401,7 @@
|
|
|
3381
3401
|
color: var(--rs-foreground);
|
|
3382
3402
|
font-size: 14px;
|
|
3383
3403
|
font-weight: 500;
|
|
3404
|
+
line-height: normal;
|
|
3384
3405
|
font-family: inherit;
|
|
3385
3406
|
cursor: pointer;
|
|
3386
3407
|
transition: background-color 0.15s;
|
|
@@ -3485,8 +3506,8 @@
|
|
|
3485
3506
|
.rs-deposit-notifications {
|
|
3486
3507
|
position: absolute;
|
|
3487
3508
|
bottom: 12px;
|
|
3488
|
-
left:
|
|
3489
|
-
right:
|
|
3509
|
+
left: 0;
|
|
3510
|
+
right: 0;
|
|
3490
3511
|
z-index: 10;
|
|
3491
3512
|
display: flex;
|
|
3492
3513
|
flex-direction: column;
|
|
@@ -3543,7 +3564,8 @@
|
|
|
3543
3564
|
justify-content: center;
|
|
3544
3565
|
}
|
|
3545
3566
|
|
|
3546
|
-
.rs-deposit-notification-badge svg
|
|
3567
|
+
.rs-deposit-notification-badge--complete svg,
|
|
3568
|
+
.rs-deposit-notification-badge--failed svg {
|
|
3547
3569
|
width: 20px;
|
|
3548
3570
|
height: 20px;
|
|
3549
3571
|
}
|
|
@@ -3563,9 +3585,29 @@
|
|
|
3563
3585
|
color: var(--rs-icon-secondary);
|
|
3564
3586
|
}
|
|
3565
3587
|
|
|
3566
|
-
.rs-deposit-notification-
|
|
3588
|
+
.rs-deposit-notification-spinner {
|
|
3567
3589
|
width: 42px;
|
|
3568
3590
|
height: 42px;
|
|
3591
|
+
animation: rs-spin 1s linear infinite;
|
|
3592
|
+
}
|
|
3593
|
+
|
|
3594
|
+
/* Spinner ring/arc colors flip with the theme. Light: a faint zinc-200 ring
|
|
3595
|
+
with a zinc-600 arc on the near-white card. Dark: the Figma values — a
|
|
3596
|
+
zinc-300 ring with a zinc-600 arc on the #18181b card. */
|
|
3597
|
+
.rs-deposit-notification-spinner-track {
|
|
3598
|
+
stroke: #e4e4e7;
|
|
3599
|
+
}
|
|
3600
|
+
|
|
3601
|
+
.rs-deposit-notification-spinner-head {
|
|
3602
|
+
stroke: #52525c;
|
|
3603
|
+
}
|
|
3604
|
+
|
|
3605
|
+
.rs-modal[data-theme="dark"] .rs-deposit-notification-spinner-track {
|
|
3606
|
+
stroke: #d4d4d8;
|
|
3607
|
+
}
|
|
3608
|
+
|
|
3609
|
+
.rs-modal[data-theme="dark"] .rs-deposit-notification-spinner-head {
|
|
3610
|
+
stroke: #52525c;
|
|
3569
3611
|
}
|
|
3570
3612
|
|
|
3571
3613
|
.rs-deposit-notification-content {
|
|
@@ -4013,23 +4055,6 @@
|
|
|
4013
4055
|
padding-right: 2px;
|
|
4014
4056
|
}
|
|
4015
4057
|
|
|
4016
|
-
.rs-history-list::-webkit-scrollbar {
|
|
4017
|
-
width: 6px;
|
|
4018
|
-
}
|
|
4019
|
-
|
|
4020
|
-
.rs-history-list::-webkit-scrollbar-thumb {
|
|
4021
|
-
background-color: var(--rs-surface-hover);
|
|
4022
|
-
border-radius: var(--rs-radius-full);
|
|
4023
|
-
}
|
|
4024
|
-
|
|
4025
|
-
.rs-history-list::-webkit-scrollbar-thumb:hover {
|
|
4026
|
-
background-color: var(--rs-muted-foreground);
|
|
4027
|
-
}
|
|
4028
|
-
|
|
4029
|
-
.rs-history-list::-webkit-scrollbar-track {
|
|
4030
|
-
background: transparent;
|
|
4031
|
-
}
|
|
4032
|
-
|
|
4033
4058
|
/* Card */
|
|
4034
4059
|
.rs-history-card {
|
|
4035
4060
|
width: 100%;
|
|
@@ -4372,6 +4397,12 @@
|
|
|
4372
4397
|
gap: 8px;
|
|
4373
4398
|
}
|
|
4374
4399
|
|
|
4400
|
+
/* Figma gives subtitle headers a 12px icon→title gap (vs 8px for title-only
|
|
4401
|
+
headers like the QR screen). */
|
|
4402
|
+
.rs-body-header:has(.rs-body-header-subtitle) {
|
|
4403
|
+
gap: 12px;
|
|
4404
|
+
}
|
|
4405
|
+
|
|
4375
4406
|
.rs-body-header-icon {
|
|
4376
4407
|
display: inline-flex;
|
|
4377
4408
|
align-items: center;
|
|
@@ -4420,7 +4451,7 @@
|
|
|
4420
4451
|
.rs-body-header-subtitle {
|
|
4421
4452
|
font-size: 14px;
|
|
4422
4453
|
font-weight: 500;
|
|
4423
|
-
line-height:
|
|
4454
|
+
line-height: normal;
|
|
4424
4455
|
color: var(--rs-muted);
|
|
4425
4456
|
margin: 0;
|
|
4426
4457
|
}
|
|
@@ -4672,3 +4703,431 @@
|
|
|
4672
4703
|
border: 1px solid var(--rs-border);
|
|
4673
4704
|
background-color: var(--rs-background);
|
|
4674
4705
|
}
|
|
4706
|
+
|
|
4707
|
+
/* =============================================================================
|
|
4708
|
+
Fiat On-Ramp (Swapped iframe flow)
|
|
4709
|
+
============================================================================= */
|
|
4710
|
+
|
|
4711
|
+
/* `.rs-fiat-onramp` is a marker class on the .rs-screen root so the
|
|
4712
|
+
modal-content `:has()` rules below can size correctly. Layout (padding,
|
|
4713
|
+
gap, flex direction) comes from .rs-screen itself, identical to
|
|
4714
|
+
ConnectStep — keeps the top of the page visually unchanged across the
|
|
4715
|
+
payment-method picker → Swapped iframe transition. */
|
|
4716
|
+
|
|
4717
|
+
.rs-fiat-onramp-banner {
|
|
4718
|
+
display: flex;
|
|
4719
|
+
flex-direction: column;
|
|
4720
|
+
gap: 2px;
|
|
4721
|
+
padding: 8px 12px;
|
|
4722
|
+
border-radius: var(--rs-radius-sm);
|
|
4723
|
+
font-size: 12px;
|
|
4724
|
+
line-height: 1.35;
|
|
4725
|
+
border: 1px solid var(--rs-border);
|
|
4726
|
+
}
|
|
4727
|
+
|
|
4728
|
+
.rs-fiat-onramp-banner--info {
|
|
4729
|
+
background: var(--rs-background-secondary);
|
|
4730
|
+
color: var(--rs-foreground);
|
|
4731
|
+
}
|
|
4732
|
+
|
|
4733
|
+
.rs-fiat-onramp-banner--success {
|
|
4734
|
+
background: rgba(34, 197, 94, 0.08);
|
|
4735
|
+
border-color: rgba(34, 197, 94, 0.35);
|
|
4736
|
+
color: var(--rs-foreground);
|
|
4737
|
+
}
|
|
4738
|
+
|
|
4739
|
+
.rs-fiat-onramp-banner--warning {
|
|
4740
|
+
background: rgba(234, 179, 8, 0.08);
|
|
4741
|
+
border-color: rgba(234, 179, 8, 0.4);
|
|
4742
|
+
color: var(--rs-foreground);
|
|
4743
|
+
}
|
|
4744
|
+
|
|
4745
|
+
.rs-fiat-onramp-banner-title {
|
|
4746
|
+
font-weight: 600;
|
|
4747
|
+
}
|
|
4748
|
+
|
|
4749
|
+
.rs-fiat-onramp-banner-detail {
|
|
4750
|
+
color: var(--rs-muted);
|
|
4751
|
+
}
|
|
4752
|
+
|
|
4753
|
+
/* Iframe wrap sized to Swapped's documented dimensions — 400×482 for the
|
|
4754
|
+
fiat on-ramp, 445×585 for Connect (overrides below). Centered horizontally
|
|
4755
|
+
inside the modal so the step body can have header padding. */
|
|
4756
|
+
.rs-fiat-onramp-iframe-wrap {
|
|
4757
|
+
position: relative;
|
|
4758
|
+
width: 100%;
|
|
4759
|
+
max-width: 400px;
|
|
4760
|
+
min-height: 482px;
|
|
4761
|
+
margin: 0 auto;
|
|
4762
|
+
border-radius: var(--rs-radius);
|
|
4763
|
+
overflow: hidden;
|
|
4764
|
+
}
|
|
4765
|
+
|
|
4766
|
+
.rs-fiat-onramp[data-variant="connect"] .rs-fiat-onramp-iframe-wrap {
|
|
4767
|
+
max-width: 445px;
|
|
4768
|
+
min-height: 585px;
|
|
4769
|
+
}
|
|
4770
|
+
|
|
4771
|
+
.rs-fiat-onramp-iframe {
|
|
4772
|
+
display: block;
|
|
4773
|
+
width: 100%;
|
|
4774
|
+
height: 482px;
|
|
4775
|
+
min-height: 482px;
|
|
4776
|
+
border: 0;
|
|
4777
|
+
background: var(--rs-background);
|
|
4778
|
+
}
|
|
4779
|
+
|
|
4780
|
+
.rs-fiat-onramp[data-variant="connect"] .rs-fiat-onramp-iframe {
|
|
4781
|
+
height: 585px;
|
|
4782
|
+
min-height: 585px;
|
|
4783
|
+
}
|
|
4784
|
+
|
|
4785
|
+
.rs-fiat-onramp-loading,
|
|
4786
|
+
.rs-fiat-onramp-error {
|
|
4787
|
+
position: absolute;
|
|
4788
|
+
inset: 0;
|
|
4789
|
+
display: flex;
|
|
4790
|
+
flex-direction: column;
|
|
4791
|
+
align-items: center;
|
|
4792
|
+
justify-content: center;
|
|
4793
|
+
gap: 12px;
|
|
4794
|
+
text-align: center;
|
|
4795
|
+
background: var(--rs-background);
|
|
4796
|
+
color: var(--rs-foreground);
|
|
4797
|
+
padding: 16px;
|
|
4798
|
+
}
|
|
4799
|
+
|
|
4800
|
+
.rs-fiat-onramp-retry {
|
|
4801
|
+
padding: 6px 14px;
|
|
4802
|
+
border: 1px solid var(--rs-border);
|
|
4803
|
+
border-radius: var(--rs-radius-sm);
|
|
4804
|
+
background: var(--rs-background-secondary);
|
|
4805
|
+
color: var(--rs-foreground);
|
|
4806
|
+
font-size: 12px;
|
|
4807
|
+
font-weight: 500;
|
|
4808
|
+
font-family: inherit;
|
|
4809
|
+
cursor: pointer;
|
|
4810
|
+
}
|
|
4811
|
+
|
|
4812
|
+
.rs-fiat-onramp-retry:hover {
|
|
4813
|
+
background: var(--rs-border);
|
|
4814
|
+
}
|
|
4815
|
+
|
|
4816
|
+
/* =============================================================================
|
|
4817
|
+
Exchange picker (Swapped Connect)
|
|
4818
|
+
============================================================================= */
|
|
4819
|
+
|
|
4820
|
+
.rs-exchange-grid {
|
|
4821
|
+
display: grid;
|
|
4822
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
4823
|
+
gap: 8px;
|
|
4824
|
+
}
|
|
4825
|
+
|
|
4826
|
+
.rs-exchange-card {
|
|
4827
|
+
display: flex;
|
|
4828
|
+
min-width: 0;
|
|
4829
|
+
min-height: 104px;
|
|
4830
|
+
flex-direction: column;
|
|
4831
|
+
align-items: center;
|
|
4832
|
+
justify-content: center;
|
|
4833
|
+
gap: 10px;
|
|
4834
|
+
padding: 12px 8px;
|
|
4835
|
+
border: 1px solid var(--rs-background-secondary);
|
|
4836
|
+
border-radius: 8px;
|
|
4837
|
+
background: var(--rs-background-secondary);
|
|
4838
|
+
color: var(--rs-foreground);
|
|
4839
|
+
font-family: inherit;
|
|
4840
|
+
cursor: pointer;
|
|
4841
|
+
transition:
|
|
4842
|
+
background-color 0.15s,
|
|
4843
|
+
border-color 0.15s;
|
|
4844
|
+
}
|
|
4845
|
+
|
|
4846
|
+
.rs-exchange-card:hover:not(:disabled) {
|
|
4847
|
+
background: var(--rs-surface-hover);
|
|
4848
|
+
border-color: var(--rs-surface-hover);
|
|
4849
|
+
}
|
|
4850
|
+
|
|
4851
|
+
.rs-exchange-card:focus-visible {
|
|
4852
|
+
outline: 2px solid var(--rs-border-accent);
|
|
4853
|
+
outline-offset: 2px;
|
|
4854
|
+
}
|
|
4855
|
+
|
|
4856
|
+
.rs-exchange-card-logo {
|
|
4857
|
+
display: inline-flex;
|
|
4858
|
+
align-items: center;
|
|
4859
|
+
justify-content: center;
|
|
4860
|
+
width: 44px;
|
|
4861
|
+
height: 44px;
|
|
4862
|
+
border-radius: 10px;
|
|
4863
|
+
background: var(--rs-surface);
|
|
4864
|
+
color: #71717b;
|
|
4865
|
+
overflow: hidden;
|
|
4866
|
+
}
|
|
4867
|
+
|
|
4868
|
+
.rs-exchange-card-logo img,
|
|
4869
|
+
.rs-exchange-card-logo svg {
|
|
4870
|
+
width: 28px;
|
|
4871
|
+
height: 28px;
|
|
4872
|
+
display: block;
|
|
4873
|
+
object-fit: contain;
|
|
4874
|
+
}
|
|
4875
|
+
|
|
4876
|
+
.rs-exchange-card-name {
|
|
4877
|
+
width: 100%;
|
|
4878
|
+
min-width: 0;
|
|
4879
|
+
font-size: 14px;
|
|
4880
|
+
font-weight: 500;
|
|
4881
|
+
line-height: 1.25;
|
|
4882
|
+
color: var(--rs-foreground);
|
|
4883
|
+
text-align: center;
|
|
4884
|
+
overflow: hidden;
|
|
4885
|
+
text-overflow: ellipsis;
|
|
4886
|
+
white-space: nowrap;
|
|
4887
|
+
}
|
|
4888
|
+
|
|
4889
|
+
.rs-exchange-select-state {
|
|
4890
|
+
min-height: 184px;
|
|
4891
|
+
display: flex;
|
|
4892
|
+
flex-direction: column;
|
|
4893
|
+
align-items: center;
|
|
4894
|
+
justify-content: center;
|
|
4895
|
+
gap: 12px;
|
|
4896
|
+
text-align: center;
|
|
4897
|
+
color: var(--rs-foreground);
|
|
4898
|
+
}
|
|
4899
|
+
|
|
4900
|
+
.rs-exchange-select-state-title {
|
|
4901
|
+
font-size: 14px;
|
|
4902
|
+
font-weight: 600;
|
|
4903
|
+
line-height: 1.35;
|
|
4904
|
+
}
|
|
4905
|
+
|
|
4906
|
+
/* =============================================================================
|
|
4907
|
+
Modal sizing for the Swapped iframe step
|
|
4908
|
+
=============================================================================
|
|
4909
|
+
Modal stays at the default 400px width for the fiat variant (matches
|
|
4910
|
+
Swapped's 400×482 iframe edge-to-edge). Connect needs 445px because its
|
|
4911
|
+
iframe is 445×585. Height grows with the Rhinestone chrome (header
|
|
4912
|
+
icon/title/subtitle + iframe + PoweredBy); cap to viewport so smaller
|
|
4913
|
+
laptops get a scrollable modal-body instead of overflowing the screen. */
|
|
4914
|
+
|
|
4915
|
+
/* Connect's iframe is 445×585 (vs fiat's 400×482). To preserve the same
|
|
4916
|
+
12px horizontal padding as ConnectStep while still giving Swapped's
|
|
4917
|
+
Connect iframe its documented width, widen the modal by 24px (12 each
|
|
4918
|
+
side) → 469px. Applied from the moment the user enters exchange-connect
|
|
4919
|
+
mode (`data-flow-mode` on rs-modal-body) — not just the iframe step —
|
|
4920
|
+
so the modal width is stable across SetupStep → SwappedIframeStep.
|
|
4921
|
+
Fiat keeps the default 400px modal; its iframe renders at 376px
|
|
4922
|
+
content-width, matching the visual width of ConnectStep's list rows. */
|
|
4923
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"]) {
|
|
4924
|
+
max-width: 469px;
|
|
4925
|
+
}
|
|
4926
|
+
|
|
4927
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"]),
|
|
4928
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"]) {
|
|
4929
|
+
max-height: calc(100vh - 40px);
|
|
4930
|
+
}
|
|
4931
|
+
|
|
4932
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"]) .rs-modal-body,
|
|
4933
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"]) .rs-modal-body {
|
|
4934
|
+
/* `overflow-x: hidden` is explicit because a `visible` x-axis with an
|
|
4935
|
+
`auto` y-axis gets promoted to `auto` on both axes, which paints a
|
|
4936
|
+
phantom horizontal scrollbar even when content fits horizontally. */
|
|
4937
|
+
overflow: hidden auto;
|
|
4938
|
+
}
|
|
4939
|
+
|
|
4940
|
+
/* Pre-size the modal-content to the eventual iframe-mounted height for
|
|
4941
|
+
the iframe-phase only:
|
|
4942
|
+
- `[data-step-type="setup"]` — brief pre-flight before SwappedIframeStep mounts
|
|
4943
|
+
- `:has(...) .rs-fiat-onramp` — SwappedIframeStep's iframe phase is in DOM
|
|
4944
|
+
The tracker phase (.rs-swapped-tracker) is naturally shorter and is
|
|
4945
|
+
excluded so the modal shrinks down to its content instead of leaving
|
|
4946
|
+
a tall empty area below the tracker. Applied on modal-content (not
|
|
4947
|
+
modal-body) so the transition on its min-height animates smoothly
|
|
4948
|
+
when the iframe→tracker phase swap fires. */
|
|
4949
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"][data-step-type="setup"]),
|
|
4950
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"] .rs-fiat-onramp) {
|
|
4951
|
+
min-height: 691px;
|
|
4952
|
+
}
|
|
4953
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"][data-step-type="setup"]),
|
|
4954
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"] .rs-fiat-onramp) {
|
|
4955
|
+
min-height: 794px;
|
|
4956
|
+
}
|
|
4957
|
+
|
|
4958
|
+
/* =============================================================================
|
|
4959
|
+
Custom order tracker
|
|
4960
|
+
=============================================================================
|
|
4961
|
+
Shown after the user creates an order with Swapped — replaces the iframe
|
|
4962
|
+
until the deposit-processor reports bridge-complete. */
|
|
4963
|
+
/* Layout lives in rs-screen now — tracker just contributes the entrance
|
|
4964
|
+
animation and a marker class for any future tracker-only tweaks. The
|
|
4965
|
+
icon + title come from the shared BodyHeader so the header position
|
|
4966
|
+
matches ConnectStep and SwappedIframeStep exactly. */
|
|
4967
|
+
.rs-swapped-tracker {
|
|
4968
|
+
animation: rs-swapped-tracker-enter 250ms ease-out;
|
|
4969
|
+
}
|
|
4970
|
+
|
|
4971
|
+
@keyframes rs-swapped-tracker-enter {
|
|
4972
|
+
from {
|
|
4973
|
+
opacity: 0;
|
|
4974
|
+
}
|
|
4975
|
+
to {
|
|
4976
|
+
opacity: 1;
|
|
4977
|
+
}
|
|
4978
|
+
}
|
|
4979
|
+
|
|
4980
|
+
@keyframes rs-tracker-step-complete {
|
|
4981
|
+
0% {
|
|
4982
|
+
transform: scale(0.72);
|
|
4983
|
+
}
|
|
4984
|
+
60% {
|
|
4985
|
+
transform: scale(1.08);
|
|
4986
|
+
}
|
|
4987
|
+
100% {
|
|
4988
|
+
transform: scale(1);
|
|
4989
|
+
}
|
|
4990
|
+
}
|
|
4991
|
+
|
|
4992
|
+
.rs-swapped-tracker-steps {
|
|
4993
|
+
list-style: none;
|
|
4994
|
+
padding: 0;
|
|
4995
|
+
margin: 0;
|
|
4996
|
+
display: flex;
|
|
4997
|
+
flex-direction: column;
|
|
4998
|
+
flex-grow: 1;
|
|
4999
|
+
}
|
|
5000
|
+
|
|
5001
|
+
.rs-swapped-tracker-step {
|
|
5002
|
+
position: relative;
|
|
5003
|
+
display: flex;
|
|
5004
|
+
align-items: center;
|
|
5005
|
+
justify-content: space-between;
|
|
5006
|
+
gap: 12px;
|
|
5007
|
+
padding: 16px 0;
|
|
5008
|
+
}
|
|
5009
|
+
|
|
5010
|
+
/* Dotted vertical connector between adjacent step markers. */
|
|
5011
|
+
.rs-swapped-tracker-step + .rs-swapped-tracker-step::before {
|
|
5012
|
+
content: "";
|
|
5013
|
+
position: absolute;
|
|
5014
|
+
top: -14px;
|
|
5015
|
+
right: 11px;
|
|
5016
|
+
width: 0;
|
|
5017
|
+
height: 28px;
|
|
5018
|
+
border-left: 1.5px dotted #d4d4d8;
|
|
5019
|
+
}
|
|
5020
|
+
|
|
5021
|
+
.rs-swapped-tracker-step-label {
|
|
5022
|
+
font-size: 15px;
|
|
5023
|
+
color: var(--rs-foreground);
|
|
5024
|
+
flex-grow: 1;
|
|
5025
|
+
}
|
|
5026
|
+
|
|
5027
|
+
.rs-swapped-tracker-step-marker {
|
|
5028
|
+
width: 24px;
|
|
5029
|
+
height: 24px;
|
|
5030
|
+
border-radius: 50%;
|
|
5031
|
+
flex-shrink: 0;
|
|
5032
|
+
display: flex;
|
|
5033
|
+
align-items: center;
|
|
5034
|
+
justify-content: center;
|
|
5035
|
+
background: transparent;
|
|
5036
|
+
border: 1.5px solid #d4d4d8;
|
|
5037
|
+
color: transparent;
|
|
5038
|
+
transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
|
|
5039
|
+
}
|
|
5040
|
+
|
|
5041
|
+
.rs-swapped-tracker-step--active .rs-swapped-tracker-step-marker {
|
|
5042
|
+
border-color: #d4d4d8;
|
|
5043
|
+
background: transparent;
|
|
5044
|
+
/* Spinner SVG uses currentColor; base marker class sets color:transparent
|
|
5045
|
+
for the (hidden) ring glyph — re-establish a visible color here so the
|
|
5046
|
+
active-state spinner actually paints. */
|
|
5047
|
+
color: #18181b;
|
|
5048
|
+
}
|
|
5049
|
+
|
|
5050
|
+
.rs-swapped-tracker-step--active .rs-swapped-tracker-step-marker .rs-spinner {
|
|
5051
|
+
width: 14px;
|
|
5052
|
+
height: 14px;
|
|
5053
|
+
}
|
|
5054
|
+
|
|
5055
|
+
/* Satisfying scale-pop when a step ticks complete — the color transition
|
|
5056
|
+
alone is too subtle to register as "that just happened". */
|
|
5057
|
+
.rs-swapped-tracker-step--complete .rs-swapped-tracker-step-marker {
|
|
5058
|
+
animation: rs-tracker-step-complete 320ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
5059
|
+
background: #18181b;
|
|
5060
|
+
border-color: #18181b;
|
|
5061
|
+
color: #fff;
|
|
5062
|
+
}
|
|
5063
|
+
|
|
5064
|
+
.rs-swapped-tracker-step--complete .rs-swapped-tracker-step-marker svg {
|
|
5065
|
+
width: 14px;
|
|
5066
|
+
height: 14px;
|
|
5067
|
+
stroke-width: 3;
|
|
5068
|
+
}
|
|
5069
|
+
|
|
5070
|
+
/* Failed step marker — terminal processor failure or cancellation. Red in
|
|
5071
|
+
both themes (the failure color reads on light and dark). */
|
|
5072
|
+
.rs-swapped-tracker-step--failed .rs-swapped-tracker-step-marker {
|
|
5073
|
+
background: #fb2c36;
|
|
5074
|
+
border-color: #fb2c36;
|
|
5075
|
+
color: #fff;
|
|
5076
|
+
}
|
|
5077
|
+
|
|
5078
|
+
.rs-swapped-tracker-step--failed .rs-swapped-tracker-step-marker svg {
|
|
5079
|
+
width: 14px;
|
|
5080
|
+
height: 14px;
|
|
5081
|
+
stroke-width: 3;
|
|
5082
|
+
}
|
|
5083
|
+
|
|
5084
|
+
/* Terminal message block shown below the steps on failure / cancellation. */
|
|
5085
|
+
.rs-swapped-tracker-terminal {
|
|
5086
|
+
display: flex;
|
|
5087
|
+
flex-direction: column;
|
|
5088
|
+
align-items: center;
|
|
5089
|
+
gap: 12px;
|
|
5090
|
+
text-align: center;
|
|
5091
|
+
}
|
|
5092
|
+
|
|
5093
|
+
.rs-swapped-tracker-terminal-message {
|
|
5094
|
+
margin: 0;
|
|
5095
|
+
font-size: 14px;
|
|
5096
|
+
line-height: 1.4;
|
|
5097
|
+
color: var(--rs-foreground-secondary, #71717a);
|
|
5098
|
+
}
|
|
5099
|
+
|
|
5100
|
+
.rs-swapped-tracker-terminal--failed .rs-swapped-tracker-terminal-message {
|
|
5101
|
+
color: #fb2c36;
|
|
5102
|
+
}
|
|
5103
|
+
|
|
5104
|
+
.rs-swapped-tracker-retry {
|
|
5105
|
+
padding: 8px 16px;
|
|
5106
|
+
border: 1px solid var(--rs-border);
|
|
5107
|
+
border-radius: var(--rs-radius-sm);
|
|
5108
|
+
background: var(--rs-background-secondary);
|
|
5109
|
+
color: var(--rs-foreground);
|
|
5110
|
+
font-size: 13px;
|
|
5111
|
+
font-weight: 500;
|
|
5112
|
+
font-family: inherit;
|
|
5113
|
+
cursor: pointer;
|
|
5114
|
+
}
|
|
5115
|
+
|
|
5116
|
+
.rs-swapped-tracker-retry:hover {
|
|
5117
|
+
background: var(--rs-border);
|
|
5118
|
+
}
|
|
5119
|
+
|
|
5120
|
+
.rs-modal[data-theme="dark"] .rs-swapped-tracker-step + .rs-swapped-tracker-step::before {
|
|
5121
|
+
border-left-color: #3f3f46;
|
|
5122
|
+
}
|
|
5123
|
+
|
|
5124
|
+
.rs-modal[data-theme="dark"] .rs-swapped-tracker-step--pending .rs-swapped-tracker-step-marker,
|
|
5125
|
+
.rs-modal[data-theme="dark"] .rs-swapped-tracker-step--active .rs-swapped-tracker-step-marker {
|
|
5126
|
+
border-color: #3f3f46;
|
|
5127
|
+
}
|
|
5128
|
+
|
|
5129
|
+
.rs-modal[data-theme="dark"] .rs-swapped-tracker-step--complete .rs-swapped-tracker-step-marker {
|
|
5130
|
+
background: #fafafa;
|
|
5131
|
+
border-color: #fafafa;
|
|
5132
|
+
color: #18181b;
|
|
5133
|
+
}
|