@rhinestone/deposit-modal 0.3.0-alpha.9 → 0.3.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/README.md +76 -0
- package/dist/{DepositModalReown-I7I3KLD2.mjs → DepositModalReown-G7UX4IBZ.mjs} +6 -4
- package/dist/{DepositModalReown-XUA47RYZ.cjs → DepositModalReown-MECHBE6P.cjs} +9 -7
- package/dist/{QRCode-KG47KTGX.cjs → QRCode-5DXFNKI2.cjs} +1 -1
- package/dist/{QRCode-YJ3EGWQS.mjs → QRCode-WUC652SH.mjs} +1 -1
- package/dist/{WithdrawModalReown-KN2DGOXR.mjs → WithdrawModalReown-CUJAFUQM.mjs} +5 -4
- package/dist/{WithdrawModalReown-JATYMQYP.cjs → WithdrawModalReown-WJ6VBZKK.cjs} +8 -7
- package/dist/{constants-DqVn968d.d.ts → caip-CsslyHGL.d.cts} +11 -1
- package/dist/{constants-DqVn968d.d.cts → caip-CsslyHGL.d.ts} +11 -1
- package/dist/{chunk-TJG2AFPS.mjs → chunk-3C35DVPE.mjs} +1048 -829
- package/dist/{chunk-SZIYS42B.mjs → chunk-6YRDD462.mjs} +63 -3
- package/dist/chunk-AJHFNHG3.cjs +295 -0
- package/dist/chunk-BAEB5AFZ.mjs +212 -0
- package/dist/{chunk-KE4MRCFN.mjs → chunk-DZQD3DAV.mjs} +26 -17
- package/dist/{chunk-G5Q4QBWX.cjs → chunk-LEL6GMEQ.cjs} +111 -102
- package/dist/{chunk-7JIDIX27.cjs → chunk-MILJQWPT.cjs} +73 -13
- package/dist/{chunk-MMXUBBGK.cjs → chunk-MQIJZNTP.cjs} +1026 -807
- package/dist/{chunk-4BUMVXPS.mjs → chunk-QYSCCX4K.mjs} +2237 -871
- package/dist/chunk-R5CPOBCF.cjs +212 -0
- package/dist/{chunk-OISMGA2L.mjs → chunk-R5WDHHVM.mjs} +2 -12
- package/dist/{chunk-ZVG4JDKZ.cjs → chunk-SPUZLWQS.cjs} +2285 -919
- package/dist/chunk-TQ2AYMWS.mjs +295 -0
- package/dist/{chunk-KIPKYPNF.cjs → chunk-ULEAK63T.cjs} +6 -16
- package/dist/constants.cjs +6 -2
- package/dist/constants.d.cts +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.mjs +5 -1
- package/dist/deposit.cjs +6 -4
- package/dist/deposit.d.cts +4 -4
- package/dist/deposit.d.ts +4 -4
- package/dist/deposit.mjs +5 -3
- package/dist/index.cjs +21 -6
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.mjs +22 -7
- package/dist/polymarket.cjs +64 -0
- package/dist/polymarket.d.cts +57 -0
- package/dist/polymarket.d.ts +57 -0
- package/dist/polymarket.mjs +64 -0
- package/dist/styles.css +719 -75
- package/dist/{types-D8Q4TMk7.d.cts → types-RzfAD14B.d.cts} +65 -2
- package/dist/{types-D8Q4TMk7.d.ts → types-RzfAD14B.d.ts} +65 -2
- package/dist/withdraw.cjs +5 -4
- package/dist/withdraw.d.cts +4 -4
- package/dist/withdraw.d.ts +4 -4
- package/dist/withdraw.mjs +4 -3
- package/package.json +55 -18
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
|
-
|
|
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;
|
|
384
400
|
}
|
|
385
401
|
|
|
386
|
-
.rs-modal-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
.rs-modal-body::-webkit-scrollbar-thumb:hover {
|
|
392
|
-
background-color: var(--rs-muted-foreground);
|
|
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
|
|
@@ -2782,7 +2817,7 @@
|
|
|
2782
2817
|
.rs-withdraw-dropdown-arrow {
|
|
2783
2818
|
width: 24px;
|
|
2784
2819
|
height: 24px;
|
|
2785
|
-
color:
|
|
2820
|
+
color: #9f9fa9;
|
|
2786
2821
|
transition: transform 0.15s;
|
|
2787
2822
|
}
|
|
2788
2823
|
|
|
@@ -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
|
}
|
|
@@ -3085,7 +3123,7 @@
|
|
|
3085
3123
|
display: flex;
|
|
3086
3124
|
align-items: center;
|
|
3087
3125
|
gap: 8px;
|
|
3088
|
-
padding-top:
|
|
3126
|
+
padding-top: 8px;
|
|
3089
3127
|
font-size: 12px;
|
|
3090
3128
|
color: var(--rs-muted);
|
|
3091
3129
|
}
|
|
@@ -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);
|
|
@@ -3205,7 +3246,7 @@
|
|
|
3205
3246
|
.rs-deposit-address-dropdown-chevron {
|
|
3206
3247
|
width: 24px;
|
|
3207
3248
|
height: 24px;
|
|
3208
|
-
color:
|
|
3249
|
+
color: #9f9fa9;
|
|
3209
3250
|
margin-left: auto;
|
|
3210
3251
|
flex-shrink: 0;
|
|
3211
3252
|
transition: transform 0.15s ease;
|
|
@@ -3226,10 +3267,10 @@
|
|
|
3226
3267
|
border: 1px solid var(--rs-surface-subtle);
|
|
3227
3268
|
border-radius: var(--rs-radius-sm);
|
|
3228
3269
|
box-shadow: var(--rs-shadow-dropdown);
|
|
3229
|
-
padding:
|
|
3270
|
+
padding: 8px;
|
|
3230
3271
|
display: flex;
|
|
3231
3272
|
flex-direction: column;
|
|
3232
|
-
gap:
|
|
3273
|
+
gap: 0;
|
|
3233
3274
|
max-height: 240px;
|
|
3234
3275
|
overflow-y: auto;
|
|
3235
3276
|
overscroll-behavior: none;
|
|
@@ -3241,8 +3282,8 @@
|
|
|
3241
3282
|
align-items: center;
|
|
3242
3283
|
gap: 6px;
|
|
3243
3284
|
width: 100%;
|
|
3244
|
-
padding:
|
|
3245
|
-
border-radius:
|
|
3285
|
+
padding: 8px 4px;
|
|
3286
|
+
border-radius: 4px;
|
|
3246
3287
|
border: none;
|
|
3247
3288
|
background: transparent;
|
|
3248
3289
|
color: var(--rs-foreground);
|
|
@@ -3251,12 +3292,12 @@
|
|
|
3251
3292
|
line-height: normal;
|
|
3252
3293
|
cursor: pointer;
|
|
3253
3294
|
text-align: left;
|
|
3254
|
-
transition:
|
|
3295
|
+
transition: background-color 0.1s;
|
|
3255
3296
|
font-family: inherit;
|
|
3256
3297
|
}
|
|
3257
3298
|
|
|
3258
3299
|
.rs-deposit-address-dropdown-item:hover {
|
|
3259
|
-
|
|
3300
|
+
background: var(--rs-surface);
|
|
3260
3301
|
}
|
|
3261
3302
|
|
|
3262
3303
|
.rs-deposit-address-dropdown-item--active {
|
|
@@ -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 {
|
|
@@ -3323,6 +3343,95 @@
|
|
|
3323
3343
|
word-break: break-all;
|
|
3324
3344
|
}
|
|
3325
3345
|
|
|
3346
|
+
/* Visually hidden but exposed to assistive tech — used by the skeleton's
|
|
3347
|
+
"Preparing…" status, whose visual placeholders are all aria-hidden. */
|
|
3348
|
+
.rs-sr-only {
|
|
3349
|
+
position: absolute;
|
|
3350
|
+
width: 1px;
|
|
3351
|
+
height: 1px;
|
|
3352
|
+
padding: 0;
|
|
3353
|
+
margin: -1px;
|
|
3354
|
+
overflow: hidden;
|
|
3355
|
+
clip: rect(0, 0, 0, 0);
|
|
3356
|
+
white-space: nowrap;
|
|
3357
|
+
border: 0;
|
|
3358
|
+
}
|
|
3359
|
+
|
|
3360
|
+
/* Loading placeholders for DepositAddressSkeleton — grey blocks that pulse
|
|
3361
|
+
while the smart account / deposit address are being prepared. Uses
|
|
3362
|
+
--color-gray4 (zinc-200 light / zinc-800 dark) so it reads on the well in
|
|
3363
|
+
both themes. */
|
|
3364
|
+
.rs-skeleton {
|
|
3365
|
+
background: var(--color-gray4);
|
|
3366
|
+
border-radius: 8px;
|
|
3367
|
+
animation: rs-skeleton-pulse 1.6s ease-in-out infinite;
|
|
3368
|
+
}
|
|
3369
|
+
|
|
3370
|
+
.rs-skeleton-qr {
|
|
3371
|
+
width: 190px;
|
|
3372
|
+
height: 190px;
|
|
3373
|
+
}
|
|
3374
|
+
|
|
3375
|
+
.rs-skeleton-address {
|
|
3376
|
+
height: 12px;
|
|
3377
|
+
margin: 0 16px 12px;
|
|
3378
|
+
border-radius: 8px;
|
|
3379
|
+
}
|
|
3380
|
+
|
|
3381
|
+
/* DappImportAssetSelectSkeleton rows. `-fill` floods a shaped container
|
|
3382
|
+
(token icon / chain badge circles); `-text` mimics a one-line text block
|
|
3383
|
+
at the asset row's font sizes. */
|
|
3384
|
+
.rs-skeleton-fill {
|
|
3385
|
+
display: block;
|
|
3386
|
+
width: 100%;
|
|
3387
|
+
height: 100%;
|
|
3388
|
+
border-radius: inherit;
|
|
3389
|
+
}
|
|
3390
|
+
|
|
3391
|
+
.rs-skeleton-text {
|
|
3392
|
+
display: inline-block;
|
|
3393
|
+
height: 12px;
|
|
3394
|
+
border-radius: 6px;
|
|
3395
|
+
}
|
|
3396
|
+
|
|
3397
|
+
.rs-skeleton-text--name {
|
|
3398
|
+
width: 96px;
|
|
3399
|
+
height: 14px;
|
|
3400
|
+
}
|
|
3401
|
+
|
|
3402
|
+
.rs-skeleton-text--balance {
|
|
3403
|
+
width: 64px;
|
|
3404
|
+
}
|
|
3405
|
+
|
|
3406
|
+
.rs-skeleton-text--usd {
|
|
3407
|
+
width: 48px;
|
|
3408
|
+
}
|
|
3409
|
+
|
|
3410
|
+
.rs-asset-row--skeleton {
|
|
3411
|
+
cursor: default;
|
|
3412
|
+
pointer-events: none;
|
|
3413
|
+
}
|
|
3414
|
+
|
|
3415
|
+
/* Inline placeholder sized to the fee value (e.g. "$0.04") while the
|
|
3416
|
+
pre-deposit quote resolves. Stays put if the quote fails. */
|
|
3417
|
+
.rs-skeleton-fee {
|
|
3418
|
+
display: inline-block;
|
|
3419
|
+
width: 36px;
|
|
3420
|
+
height: 13px;
|
|
3421
|
+
border-radius: 4px;
|
|
3422
|
+
vertical-align: middle;
|
|
3423
|
+
}
|
|
3424
|
+
|
|
3425
|
+
@keyframes rs-skeleton-pulse {
|
|
3426
|
+
0%,
|
|
3427
|
+
100% {
|
|
3428
|
+
opacity: 1;
|
|
3429
|
+
}
|
|
3430
|
+
50% {
|
|
3431
|
+
opacity: 0.5;
|
|
3432
|
+
}
|
|
3433
|
+
}
|
|
3434
|
+
|
|
3326
3435
|
.rs-deposit-address-copy {
|
|
3327
3436
|
display: flex;
|
|
3328
3437
|
align-items: center;
|
|
@@ -3336,6 +3445,7 @@
|
|
|
3336
3445
|
color: var(--rs-foreground);
|
|
3337
3446
|
font-size: 14px;
|
|
3338
3447
|
font-weight: 500;
|
|
3448
|
+
line-height: normal;
|
|
3339
3449
|
font-family: inherit;
|
|
3340
3450
|
cursor: pointer;
|
|
3341
3451
|
transition: background-color 0.15s;
|
|
@@ -3440,8 +3550,8 @@
|
|
|
3440
3550
|
.rs-deposit-notifications {
|
|
3441
3551
|
position: absolute;
|
|
3442
3552
|
bottom: 12px;
|
|
3443
|
-
left:
|
|
3444
|
-
right:
|
|
3553
|
+
left: 0;
|
|
3554
|
+
right: 0;
|
|
3445
3555
|
z-index: 10;
|
|
3446
3556
|
display: flex;
|
|
3447
3557
|
flex-direction: column;
|
|
@@ -3498,7 +3608,8 @@
|
|
|
3498
3608
|
justify-content: center;
|
|
3499
3609
|
}
|
|
3500
3610
|
|
|
3501
|
-
.rs-deposit-notification-badge svg
|
|
3611
|
+
.rs-deposit-notification-badge--complete svg,
|
|
3612
|
+
.rs-deposit-notification-badge--failed svg {
|
|
3502
3613
|
width: 20px;
|
|
3503
3614
|
height: 20px;
|
|
3504
3615
|
}
|
|
@@ -3518,9 +3629,29 @@
|
|
|
3518
3629
|
color: var(--rs-icon-secondary);
|
|
3519
3630
|
}
|
|
3520
3631
|
|
|
3521
|
-
.rs-deposit-notification-
|
|
3632
|
+
.rs-deposit-notification-spinner {
|
|
3522
3633
|
width: 42px;
|
|
3523
3634
|
height: 42px;
|
|
3635
|
+
animation: rs-spin 1s linear infinite;
|
|
3636
|
+
}
|
|
3637
|
+
|
|
3638
|
+
/* Spinner ring/arc colors flip with the theme. Light: a faint zinc-200 ring
|
|
3639
|
+
with a zinc-600 arc on the near-white card. Dark: the Figma values — a
|
|
3640
|
+
zinc-300 ring with a zinc-600 arc on the #18181b card. */
|
|
3641
|
+
.rs-deposit-notification-spinner-track {
|
|
3642
|
+
stroke: #e4e4e7;
|
|
3643
|
+
}
|
|
3644
|
+
|
|
3645
|
+
.rs-deposit-notification-spinner-head {
|
|
3646
|
+
stroke: #52525c;
|
|
3647
|
+
}
|
|
3648
|
+
|
|
3649
|
+
.rs-modal[data-theme="dark"] .rs-deposit-notification-spinner-track {
|
|
3650
|
+
stroke: #d4d4d8;
|
|
3651
|
+
}
|
|
3652
|
+
|
|
3653
|
+
.rs-modal[data-theme="dark"] .rs-deposit-notification-spinner-head {
|
|
3654
|
+
stroke: #52525c;
|
|
3524
3655
|
}
|
|
3525
3656
|
|
|
3526
3657
|
.rs-deposit-notification-content {
|
|
@@ -3968,30 +4099,13 @@
|
|
|
3968
4099
|
padding-right: 2px;
|
|
3969
4100
|
}
|
|
3970
4101
|
|
|
3971
|
-
.rs-history-list::-webkit-scrollbar {
|
|
3972
|
-
width: 6px;
|
|
3973
|
-
}
|
|
3974
|
-
|
|
3975
|
-
.rs-history-list::-webkit-scrollbar-thumb {
|
|
3976
|
-
background-color: var(--rs-surface-hover);
|
|
3977
|
-
border-radius: var(--rs-radius-full);
|
|
3978
|
-
}
|
|
3979
|
-
|
|
3980
|
-
.rs-history-list::-webkit-scrollbar-thumb:hover {
|
|
3981
|
-
background-color: var(--rs-muted-foreground);
|
|
3982
|
-
}
|
|
3983
|
-
|
|
3984
|
-
.rs-history-list::-webkit-scrollbar-track {
|
|
3985
|
-
background: transparent;
|
|
3986
|
-
}
|
|
3987
|
-
|
|
3988
4102
|
/* Card */
|
|
3989
4103
|
.rs-history-card {
|
|
3990
4104
|
width: 100%;
|
|
3991
4105
|
display: flex;
|
|
3992
4106
|
flex-direction: column;
|
|
3993
|
-
gap:
|
|
3994
|
-
padding:
|
|
4107
|
+
gap: 0;
|
|
4108
|
+
padding: 12px 8px;
|
|
3995
4109
|
background: var(--rs-surface-subtle);
|
|
3996
4110
|
border: none;
|
|
3997
4111
|
border-radius: 8px;
|
|
@@ -4106,12 +4220,38 @@
|
|
|
4106
4220
|
white-space: nowrap;
|
|
4107
4221
|
}
|
|
4108
4222
|
|
|
4223
|
+
/* Collapsing wrapper that animates the detail block between closed/open. */
|
|
4224
|
+
.rs-history-card-panel {
|
|
4225
|
+
display: grid;
|
|
4226
|
+
grid-template-rows: 0fr;
|
|
4227
|
+
transition: grid-template-rows 0.25s ease;
|
|
4228
|
+
}
|
|
4229
|
+
|
|
4230
|
+
.rs-history-card--expanded .rs-history-card-panel {
|
|
4231
|
+
grid-template-rows: 1fr;
|
|
4232
|
+
}
|
|
4233
|
+
|
|
4234
|
+
.rs-history-card-panel-inner {
|
|
4235
|
+
overflow: hidden;
|
|
4236
|
+
min-height: 0;
|
|
4237
|
+
/* Keep the collapsed panel (and its tx link) out of the tab order.
|
|
4238
|
+
visibility stays "visible" through the collapse so the content is
|
|
4239
|
+
present during the height animation, then flips hidden at the end. */
|
|
4240
|
+
visibility: hidden;
|
|
4241
|
+
transition: visibility 0.25s;
|
|
4242
|
+
}
|
|
4243
|
+
|
|
4244
|
+
.rs-history-card--expanded .rs-history-card-panel-inner {
|
|
4245
|
+
visibility: visible;
|
|
4246
|
+
}
|
|
4247
|
+
|
|
4109
4248
|
/* Expanded detail block under the row. */
|
|
4110
4249
|
.rs-history-card-details {
|
|
4111
4250
|
display: flex;
|
|
4112
4251
|
flex-direction: column;
|
|
4113
4252
|
gap: 8px;
|
|
4114
4253
|
width: 100%;
|
|
4254
|
+
padding-top: 16px;
|
|
4115
4255
|
}
|
|
4116
4256
|
|
|
4117
4257
|
.rs-history-card-link {
|
|
@@ -4301,6 +4441,12 @@
|
|
|
4301
4441
|
gap: 8px;
|
|
4302
4442
|
}
|
|
4303
4443
|
|
|
4444
|
+
/* Figma gives subtitle headers a 12px icon→title gap (vs 8px for title-only
|
|
4445
|
+
headers like the QR screen). */
|
|
4446
|
+
.rs-body-header:has(.rs-body-header-subtitle) {
|
|
4447
|
+
gap: 12px;
|
|
4448
|
+
}
|
|
4449
|
+
|
|
4304
4450
|
.rs-body-header-icon {
|
|
4305
4451
|
display: inline-flex;
|
|
4306
4452
|
align-items: center;
|
|
@@ -4349,11 +4495,81 @@
|
|
|
4349
4495
|
.rs-body-header-subtitle {
|
|
4350
4496
|
font-size: 14px;
|
|
4351
4497
|
font-weight: 500;
|
|
4352
|
-
line-height:
|
|
4498
|
+
line-height: normal;
|
|
4353
4499
|
color: var(--rs-muted);
|
|
4354
4500
|
margin: 0;
|
|
4355
4501
|
}
|
|
4356
4502
|
|
|
4503
|
+
/* Ticker — per-digit odometer-style animation for the live timer.
|
|
4504
|
+
Each slot clips its content; the outgoing digit slides up and out while
|
|
4505
|
+
the incoming digit slides up from below. Static chars (e.g. ":") never
|
|
4506
|
+
change so they never animate. */
|
|
4507
|
+
|
|
4508
|
+
.rs-ticker {
|
|
4509
|
+
display: inline-flex;
|
|
4510
|
+
font-variant-numeric: tabular-nums;
|
|
4511
|
+
line-height: 1;
|
|
4512
|
+
}
|
|
4513
|
+
|
|
4514
|
+
.rs-ticker-slot {
|
|
4515
|
+
position: relative;
|
|
4516
|
+
display: inline-block;
|
|
4517
|
+
overflow: hidden;
|
|
4518
|
+
height: 1em;
|
|
4519
|
+
line-height: 1;
|
|
4520
|
+
vertical-align: baseline;
|
|
4521
|
+
}
|
|
4522
|
+
|
|
4523
|
+
.rs-ticker-in,
|
|
4524
|
+
.rs-ticker-out {
|
|
4525
|
+
display: inline-block;
|
|
4526
|
+
line-height: 1;
|
|
4527
|
+
}
|
|
4528
|
+
|
|
4529
|
+
.rs-ticker-out {
|
|
4530
|
+
position: absolute;
|
|
4531
|
+
top: 0;
|
|
4532
|
+
left: 0;
|
|
4533
|
+
right: 0;
|
|
4534
|
+
animation: rs-ticker-out 320ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
4535
|
+
}
|
|
4536
|
+
|
|
4537
|
+
.rs-ticker-in {
|
|
4538
|
+
animation: rs-ticker-in 320ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
4539
|
+
}
|
|
4540
|
+
|
|
4541
|
+
@keyframes rs-ticker-out {
|
|
4542
|
+
from {
|
|
4543
|
+
transform: translateY(0);
|
|
4544
|
+
opacity: 1;
|
|
4545
|
+
}
|
|
4546
|
+
to {
|
|
4547
|
+
transform: translateY(-70%);
|
|
4548
|
+
opacity: 0;
|
|
4549
|
+
}
|
|
4550
|
+
}
|
|
4551
|
+
|
|
4552
|
+
@keyframes rs-ticker-in {
|
|
4553
|
+
from {
|
|
4554
|
+
transform: translateY(70%);
|
|
4555
|
+
opacity: 0;
|
|
4556
|
+
}
|
|
4557
|
+
to {
|
|
4558
|
+
transform: translateY(0);
|
|
4559
|
+
opacity: 1;
|
|
4560
|
+
}
|
|
4561
|
+
}
|
|
4562
|
+
|
|
4563
|
+
@media (prefers-reduced-motion: reduce) {
|
|
4564
|
+
.rs-ticker-in,
|
|
4565
|
+
.rs-ticker-out {
|
|
4566
|
+
animation: none;
|
|
4567
|
+
}
|
|
4568
|
+
.rs-ticker-out {
|
|
4569
|
+
display: none;
|
|
4570
|
+
}
|
|
4571
|
+
}
|
|
4572
|
+
|
|
4357
4573
|
/* List row — Figma "oauth button" pattern */
|
|
4358
4574
|
|
|
4359
4575
|
.rs-list {
|
|
@@ -4531,3 +4747,431 @@
|
|
|
4531
4747
|
border: 1px solid var(--rs-border);
|
|
4532
4748
|
background-color: var(--rs-background);
|
|
4533
4749
|
}
|
|
4750
|
+
|
|
4751
|
+
/* =============================================================================
|
|
4752
|
+
Fiat On-Ramp (Swapped iframe flow)
|
|
4753
|
+
============================================================================= */
|
|
4754
|
+
|
|
4755
|
+
/* `.rs-fiat-onramp` is a marker class on the .rs-screen root so the
|
|
4756
|
+
modal-content `:has()` rules below can size correctly. Layout (padding,
|
|
4757
|
+
gap, flex direction) comes from .rs-screen itself, identical to
|
|
4758
|
+
ConnectStep — keeps the top of the page visually unchanged across the
|
|
4759
|
+
payment-method picker → Swapped iframe transition. */
|
|
4760
|
+
|
|
4761
|
+
.rs-fiat-onramp-banner {
|
|
4762
|
+
display: flex;
|
|
4763
|
+
flex-direction: column;
|
|
4764
|
+
gap: 2px;
|
|
4765
|
+
padding: 8px 12px;
|
|
4766
|
+
border-radius: var(--rs-radius-sm);
|
|
4767
|
+
font-size: 12px;
|
|
4768
|
+
line-height: 1.35;
|
|
4769
|
+
border: 1px solid var(--rs-border);
|
|
4770
|
+
}
|
|
4771
|
+
|
|
4772
|
+
.rs-fiat-onramp-banner--info {
|
|
4773
|
+
background: var(--rs-background-secondary);
|
|
4774
|
+
color: var(--rs-foreground);
|
|
4775
|
+
}
|
|
4776
|
+
|
|
4777
|
+
.rs-fiat-onramp-banner--success {
|
|
4778
|
+
background: rgba(34, 197, 94, 0.08);
|
|
4779
|
+
border-color: rgba(34, 197, 94, 0.35);
|
|
4780
|
+
color: var(--rs-foreground);
|
|
4781
|
+
}
|
|
4782
|
+
|
|
4783
|
+
.rs-fiat-onramp-banner--warning {
|
|
4784
|
+
background: rgba(234, 179, 8, 0.08);
|
|
4785
|
+
border-color: rgba(234, 179, 8, 0.4);
|
|
4786
|
+
color: var(--rs-foreground);
|
|
4787
|
+
}
|
|
4788
|
+
|
|
4789
|
+
.rs-fiat-onramp-banner-title {
|
|
4790
|
+
font-weight: 600;
|
|
4791
|
+
}
|
|
4792
|
+
|
|
4793
|
+
.rs-fiat-onramp-banner-detail {
|
|
4794
|
+
color: var(--rs-muted);
|
|
4795
|
+
}
|
|
4796
|
+
|
|
4797
|
+
/* Iframe wrap sized to Swapped's documented dimensions — 400×482 for the
|
|
4798
|
+
fiat on-ramp, 445×585 for Connect (overrides below). Centered horizontally
|
|
4799
|
+
inside the modal so the step body can have header padding. */
|
|
4800
|
+
.rs-fiat-onramp-iframe-wrap {
|
|
4801
|
+
position: relative;
|
|
4802
|
+
width: 100%;
|
|
4803
|
+
max-width: 400px;
|
|
4804
|
+
min-height: 482px;
|
|
4805
|
+
margin: 0 auto;
|
|
4806
|
+
border-radius: var(--rs-radius);
|
|
4807
|
+
overflow: hidden;
|
|
4808
|
+
}
|
|
4809
|
+
|
|
4810
|
+
.rs-fiat-onramp[data-variant="connect"] .rs-fiat-onramp-iframe-wrap {
|
|
4811
|
+
max-width: 445px;
|
|
4812
|
+
min-height: 585px;
|
|
4813
|
+
}
|
|
4814
|
+
|
|
4815
|
+
.rs-fiat-onramp-iframe {
|
|
4816
|
+
display: block;
|
|
4817
|
+
width: 100%;
|
|
4818
|
+
height: 482px;
|
|
4819
|
+
min-height: 482px;
|
|
4820
|
+
border: 0;
|
|
4821
|
+
background: var(--rs-background);
|
|
4822
|
+
}
|
|
4823
|
+
|
|
4824
|
+
.rs-fiat-onramp[data-variant="connect"] .rs-fiat-onramp-iframe {
|
|
4825
|
+
height: 585px;
|
|
4826
|
+
min-height: 585px;
|
|
4827
|
+
}
|
|
4828
|
+
|
|
4829
|
+
.rs-fiat-onramp-loading,
|
|
4830
|
+
.rs-fiat-onramp-error {
|
|
4831
|
+
position: absolute;
|
|
4832
|
+
inset: 0;
|
|
4833
|
+
display: flex;
|
|
4834
|
+
flex-direction: column;
|
|
4835
|
+
align-items: center;
|
|
4836
|
+
justify-content: center;
|
|
4837
|
+
gap: 12px;
|
|
4838
|
+
text-align: center;
|
|
4839
|
+
background: var(--rs-background);
|
|
4840
|
+
color: var(--rs-foreground);
|
|
4841
|
+
padding: 16px;
|
|
4842
|
+
}
|
|
4843
|
+
|
|
4844
|
+
.rs-fiat-onramp-retry {
|
|
4845
|
+
padding: 6px 14px;
|
|
4846
|
+
border: 1px solid var(--rs-border);
|
|
4847
|
+
border-radius: var(--rs-radius-sm);
|
|
4848
|
+
background: var(--rs-background-secondary);
|
|
4849
|
+
color: var(--rs-foreground);
|
|
4850
|
+
font-size: 12px;
|
|
4851
|
+
font-weight: 500;
|
|
4852
|
+
font-family: inherit;
|
|
4853
|
+
cursor: pointer;
|
|
4854
|
+
}
|
|
4855
|
+
|
|
4856
|
+
.rs-fiat-onramp-retry:hover {
|
|
4857
|
+
background: var(--rs-border);
|
|
4858
|
+
}
|
|
4859
|
+
|
|
4860
|
+
/* =============================================================================
|
|
4861
|
+
Exchange picker (Swapped Connect)
|
|
4862
|
+
============================================================================= */
|
|
4863
|
+
|
|
4864
|
+
.rs-exchange-grid {
|
|
4865
|
+
display: grid;
|
|
4866
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
4867
|
+
gap: 8px;
|
|
4868
|
+
}
|
|
4869
|
+
|
|
4870
|
+
.rs-exchange-card {
|
|
4871
|
+
display: flex;
|
|
4872
|
+
min-width: 0;
|
|
4873
|
+
min-height: 104px;
|
|
4874
|
+
flex-direction: column;
|
|
4875
|
+
align-items: center;
|
|
4876
|
+
justify-content: center;
|
|
4877
|
+
gap: 10px;
|
|
4878
|
+
padding: 12px 8px;
|
|
4879
|
+
border: 1px solid var(--rs-background-secondary);
|
|
4880
|
+
border-radius: 8px;
|
|
4881
|
+
background: var(--rs-background-secondary);
|
|
4882
|
+
color: var(--rs-foreground);
|
|
4883
|
+
font-family: inherit;
|
|
4884
|
+
cursor: pointer;
|
|
4885
|
+
transition:
|
|
4886
|
+
background-color 0.15s,
|
|
4887
|
+
border-color 0.15s;
|
|
4888
|
+
}
|
|
4889
|
+
|
|
4890
|
+
.rs-exchange-card:hover:not(:disabled) {
|
|
4891
|
+
background: var(--rs-surface-hover);
|
|
4892
|
+
border-color: var(--rs-surface-hover);
|
|
4893
|
+
}
|
|
4894
|
+
|
|
4895
|
+
.rs-exchange-card:focus-visible {
|
|
4896
|
+
outline: 2px solid var(--rs-border-accent);
|
|
4897
|
+
outline-offset: 2px;
|
|
4898
|
+
}
|
|
4899
|
+
|
|
4900
|
+
.rs-exchange-card-logo {
|
|
4901
|
+
display: inline-flex;
|
|
4902
|
+
align-items: center;
|
|
4903
|
+
justify-content: center;
|
|
4904
|
+
width: 44px;
|
|
4905
|
+
height: 44px;
|
|
4906
|
+
border-radius: 10px;
|
|
4907
|
+
background: var(--rs-surface);
|
|
4908
|
+
color: #71717b;
|
|
4909
|
+
overflow: hidden;
|
|
4910
|
+
}
|
|
4911
|
+
|
|
4912
|
+
.rs-exchange-card-logo img,
|
|
4913
|
+
.rs-exchange-card-logo svg {
|
|
4914
|
+
width: 28px;
|
|
4915
|
+
height: 28px;
|
|
4916
|
+
display: block;
|
|
4917
|
+
object-fit: contain;
|
|
4918
|
+
}
|
|
4919
|
+
|
|
4920
|
+
.rs-exchange-card-name {
|
|
4921
|
+
width: 100%;
|
|
4922
|
+
min-width: 0;
|
|
4923
|
+
font-size: 14px;
|
|
4924
|
+
font-weight: 500;
|
|
4925
|
+
line-height: 1.25;
|
|
4926
|
+
color: var(--rs-foreground);
|
|
4927
|
+
text-align: center;
|
|
4928
|
+
overflow: hidden;
|
|
4929
|
+
text-overflow: ellipsis;
|
|
4930
|
+
white-space: nowrap;
|
|
4931
|
+
}
|
|
4932
|
+
|
|
4933
|
+
.rs-exchange-select-state {
|
|
4934
|
+
min-height: 184px;
|
|
4935
|
+
display: flex;
|
|
4936
|
+
flex-direction: column;
|
|
4937
|
+
align-items: center;
|
|
4938
|
+
justify-content: center;
|
|
4939
|
+
gap: 12px;
|
|
4940
|
+
text-align: center;
|
|
4941
|
+
color: var(--rs-foreground);
|
|
4942
|
+
}
|
|
4943
|
+
|
|
4944
|
+
.rs-exchange-select-state-title {
|
|
4945
|
+
font-size: 14px;
|
|
4946
|
+
font-weight: 600;
|
|
4947
|
+
line-height: 1.35;
|
|
4948
|
+
}
|
|
4949
|
+
|
|
4950
|
+
/* =============================================================================
|
|
4951
|
+
Modal sizing for the Swapped iframe step
|
|
4952
|
+
=============================================================================
|
|
4953
|
+
Modal stays at the default 400px width for the fiat variant (matches
|
|
4954
|
+
Swapped's 400×482 iframe edge-to-edge). Connect needs 445px because its
|
|
4955
|
+
iframe is 445×585. Height grows with the Rhinestone chrome (header
|
|
4956
|
+
icon/title/subtitle + iframe + PoweredBy); cap to viewport so smaller
|
|
4957
|
+
laptops get a scrollable modal-body instead of overflowing the screen. */
|
|
4958
|
+
|
|
4959
|
+
/* Connect's iframe is 445×585 (vs fiat's 400×482). To preserve the same
|
|
4960
|
+
12px horizontal padding as ConnectStep while still giving Swapped's
|
|
4961
|
+
Connect iframe its documented width, widen the modal by 24px (12 each
|
|
4962
|
+
side) → 469px. Applied from the moment the user enters exchange-connect
|
|
4963
|
+
mode (`data-flow-mode` on rs-modal-body) — not just the iframe step —
|
|
4964
|
+
so the modal width is stable across SetupStep → SwappedIframeStep.
|
|
4965
|
+
Fiat keeps the default 400px modal; its iframe renders at 376px
|
|
4966
|
+
content-width, matching the visual width of ConnectStep's list rows. */
|
|
4967
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"]) {
|
|
4968
|
+
max-width: 469px;
|
|
4969
|
+
}
|
|
4970
|
+
|
|
4971
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"]),
|
|
4972
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"]) {
|
|
4973
|
+
max-height: calc(100vh - 40px);
|
|
4974
|
+
}
|
|
4975
|
+
|
|
4976
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"]) .rs-modal-body,
|
|
4977
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"]) .rs-modal-body {
|
|
4978
|
+
/* `overflow-x: hidden` is explicit because a `visible` x-axis with an
|
|
4979
|
+
`auto` y-axis gets promoted to `auto` on both axes, which paints a
|
|
4980
|
+
phantom horizontal scrollbar even when content fits horizontally. */
|
|
4981
|
+
overflow: hidden auto;
|
|
4982
|
+
}
|
|
4983
|
+
|
|
4984
|
+
/* Pre-size the modal-content to the eventual iframe-mounted height for
|
|
4985
|
+
the iframe-phase only:
|
|
4986
|
+
- `[data-step-type="setup"]` — brief pre-flight before SwappedIframeStep mounts
|
|
4987
|
+
- `:has(...) .rs-fiat-onramp` — SwappedIframeStep's iframe phase is in DOM
|
|
4988
|
+
The tracker phase (.rs-swapped-tracker) is naturally shorter and is
|
|
4989
|
+
excluded so the modal shrinks down to its content instead of leaving
|
|
4990
|
+
a tall empty area below the tracker. Applied on modal-content (not
|
|
4991
|
+
modal-body) so the transition on its min-height animates smoothly
|
|
4992
|
+
when the iframe→tracker phase swap fires. */
|
|
4993
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"][data-step-type="setup"]),
|
|
4994
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="fiat-onramp"] .rs-fiat-onramp) {
|
|
4995
|
+
min-height: 691px;
|
|
4996
|
+
}
|
|
4997
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"][data-step-type="setup"]),
|
|
4998
|
+
.rs-modal-content:has(.rs-modal-body[data-flow-mode="exchange-connect"] .rs-fiat-onramp) {
|
|
4999
|
+
min-height: 794px;
|
|
5000
|
+
}
|
|
5001
|
+
|
|
5002
|
+
/* =============================================================================
|
|
5003
|
+
Custom order tracker
|
|
5004
|
+
=============================================================================
|
|
5005
|
+
Shown after the user creates an order with Swapped — replaces the iframe
|
|
5006
|
+
until the deposit-processor reports bridge-complete. */
|
|
5007
|
+
/* Layout lives in rs-screen now — tracker just contributes the entrance
|
|
5008
|
+
animation and a marker class for any future tracker-only tweaks. The
|
|
5009
|
+
icon + title come from the shared BodyHeader so the header position
|
|
5010
|
+
matches ConnectStep and SwappedIframeStep exactly. */
|
|
5011
|
+
.rs-swapped-tracker {
|
|
5012
|
+
animation: rs-swapped-tracker-enter 250ms ease-out;
|
|
5013
|
+
}
|
|
5014
|
+
|
|
5015
|
+
@keyframes rs-swapped-tracker-enter {
|
|
5016
|
+
from {
|
|
5017
|
+
opacity: 0;
|
|
5018
|
+
}
|
|
5019
|
+
to {
|
|
5020
|
+
opacity: 1;
|
|
5021
|
+
}
|
|
5022
|
+
}
|
|
5023
|
+
|
|
5024
|
+
@keyframes rs-tracker-step-complete {
|
|
5025
|
+
0% {
|
|
5026
|
+
transform: scale(0.72);
|
|
5027
|
+
}
|
|
5028
|
+
60% {
|
|
5029
|
+
transform: scale(1.08);
|
|
5030
|
+
}
|
|
5031
|
+
100% {
|
|
5032
|
+
transform: scale(1);
|
|
5033
|
+
}
|
|
5034
|
+
}
|
|
5035
|
+
|
|
5036
|
+
.rs-swapped-tracker-steps {
|
|
5037
|
+
list-style: none;
|
|
5038
|
+
padding: 0;
|
|
5039
|
+
margin: 0;
|
|
5040
|
+
display: flex;
|
|
5041
|
+
flex-direction: column;
|
|
5042
|
+
flex-grow: 1;
|
|
5043
|
+
}
|
|
5044
|
+
|
|
5045
|
+
.rs-swapped-tracker-step {
|
|
5046
|
+
position: relative;
|
|
5047
|
+
display: flex;
|
|
5048
|
+
align-items: center;
|
|
5049
|
+
justify-content: space-between;
|
|
5050
|
+
gap: 12px;
|
|
5051
|
+
padding: 16px 0;
|
|
5052
|
+
}
|
|
5053
|
+
|
|
5054
|
+
/* Dotted vertical connector between adjacent step markers. */
|
|
5055
|
+
.rs-swapped-tracker-step + .rs-swapped-tracker-step::before {
|
|
5056
|
+
content: "";
|
|
5057
|
+
position: absolute;
|
|
5058
|
+
top: -14px;
|
|
5059
|
+
right: 11px;
|
|
5060
|
+
width: 0;
|
|
5061
|
+
height: 28px;
|
|
5062
|
+
border-left: 1.5px dotted #d4d4d8;
|
|
5063
|
+
}
|
|
5064
|
+
|
|
5065
|
+
.rs-swapped-tracker-step-label {
|
|
5066
|
+
font-size: 15px;
|
|
5067
|
+
color: var(--rs-foreground);
|
|
5068
|
+
flex-grow: 1;
|
|
5069
|
+
}
|
|
5070
|
+
|
|
5071
|
+
.rs-swapped-tracker-step-marker {
|
|
5072
|
+
width: 24px;
|
|
5073
|
+
height: 24px;
|
|
5074
|
+
border-radius: 50%;
|
|
5075
|
+
flex-shrink: 0;
|
|
5076
|
+
display: flex;
|
|
5077
|
+
align-items: center;
|
|
5078
|
+
justify-content: center;
|
|
5079
|
+
background: transparent;
|
|
5080
|
+
border: 1.5px solid #d4d4d8;
|
|
5081
|
+
color: transparent;
|
|
5082
|
+
transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
|
|
5083
|
+
}
|
|
5084
|
+
|
|
5085
|
+
.rs-swapped-tracker-step--active .rs-swapped-tracker-step-marker {
|
|
5086
|
+
border-color: #d4d4d8;
|
|
5087
|
+
background: transparent;
|
|
5088
|
+
/* Spinner SVG uses currentColor; base marker class sets color:transparent
|
|
5089
|
+
for the (hidden) ring glyph — re-establish a visible color here so the
|
|
5090
|
+
active-state spinner actually paints. */
|
|
5091
|
+
color: #18181b;
|
|
5092
|
+
}
|
|
5093
|
+
|
|
5094
|
+
.rs-swapped-tracker-step--active .rs-swapped-tracker-step-marker .rs-spinner {
|
|
5095
|
+
width: 14px;
|
|
5096
|
+
height: 14px;
|
|
5097
|
+
}
|
|
5098
|
+
|
|
5099
|
+
/* Satisfying scale-pop when a step ticks complete — the color transition
|
|
5100
|
+
alone is too subtle to register as "that just happened". */
|
|
5101
|
+
.rs-swapped-tracker-step--complete .rs-swapped-tracker-step-marker {
|
|
5102
|
+
animation: rs-tracker-step-complete 320ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
5103
|
+
background: #18181b;
|
|
5104
|
+
border-color: #18181b;
|
|
5105
|
+
color: #fff;
|
|
5106
|
+
}
|
|
5107
|
+
|
|
5108
|
+
.rs-swapped-tracker-step--complete .rs-swapped-tracker-step-marker svg {
|
|
5109
|
+
width: 14px;
|
|
5110
|
+
height: 14px;
|
|
5111
|
+
stroke-width: 3;
|
|
5112
|
+
}
|
|
5113
|
+
|
|
5114
|
+
/* Failed step marker — terminal processor failure or cancellation. Red in
|
|
5115
|
+
both themes (the failure color reads on light and dark). */
|
|
5116
|
+
.rs-swapped-tracker-step--failed .rs-swapped-tracker-step-marker {
|
|
5117
|
+
background: #fb2c36;
|
|
5118
|
+
border-color: #fb2c36;
|
|
5119
|
+
color: #fff;
|
|
5120
|
+
}
|
|
5121
|
+
|
|
5122
|
+
.rs-swapped-tracker-step--failed .rs-swapped-tracker-step-marker svg {
|
|
5123
|
+
width: 14px;
|
|
5124
|
+
height: 14px;
|
|
5125
|
+
stroke-width: 3;
|
|
5126
|
+
}
|
|
5127
|
+
|
|
5128
|
+
/* Terminal message block shown below the steps on failure / cancellation. */
|
|
5129
|
+
.rs-swapped-tracker-terminal {
|
|
5130
|
+
display: flex;
|
|
5131
|
+
flex-direction: column;
|
|
5132
|
+
align-items: center;
|
|
5133
|
+
gap: 12px;
|
|
5134
|
+
text-align: center;
|
|
5135
|
+
}
|
|
5136
|
+
|
|
5137
|
+
.rs-swapped-tracker-terminal-message {
|
|
5138
|
+
margin: 0;
|
|
5139
|
+
font-size: 14px;
|
|
5140
|
+
line-height: 1.4;
|
|
5141
|
+
color: var(--rs-foreground-secondary, #71717a);
|
|
5142
|
+
}
|
|
5143
|
+
|
|
5144
|
+
.rs-swapped-tracker-terminal--failed .rs-swapped-tracker-terminal-message {
|
|
5145
|
+
color: #fb2c36;
|
|
5146
|
+
}
|
|
5147
|
+
|
|
5148
|
+
.rs-swapped-tracker-retry {
|
|
5149
|
+
padding: 8px 16px;
|
|
5150
|
+
border: 1px solid var(--rs-border);
|
|
5151
|
+
border-radius: var(--rs-radius-sm);
|
|
5152
|
+
background: var(--rs-background-secondary);
|
|
5153
|
+
color: var(--rs-foreground);
|
|
5154
|
+
font-size: 13px;
|
|
5155
|
+
font-weight: 500;
|
|
5156
|
+
font-family: inherit;
|
|
5157
|
+
cursor: pointer;
|
|
5158
|
+
}
|
|
5159
|
+
|
|
5160
|
+
.rs-swapped-tracker-retry:hover {
|
|
5161
|
+
background: var(--rs-border);
|
|
5162
|
+
}
|
|
5163
|
+
|
|
5164
|
+
.rs-modal[data-theme="dark"] .rs-swapped-tracker-step + .rs-swapped-tracker-step::before {
|
|
5165
|
+
border-left-color: #3f3f46;
|
|
5166
|
+
}
|
|
5167
|
+
|
|
5168
|
+
.rs-modal[data-theme="dark"] .rs-swapped-tracker-step--pending .rs-swapped-tracker-step-marker,
|
|
5169
|
+
.rs-modal[data-theme="dark"] .rs-swapped-tracker-step--active .rs-swapped-tracker-step-marker {
|
|
5170
|
+
border-color: #3f3f46;
|
|
5171
|
+
}
|
|
5172
|
+
|
|
5173
|
+
.rs-modal[data-theme="dark"] .rs-swapped-tracker-step--complete .rs-swapped-tracker-step-marker {
|
|
5174
|
+
background: #fafafa;
|
|
5175
|
+
border-color: #fafafa;
|
|
5176
|
+
color: #18181b;
|
|
5177
|
+
}
|