@coinlist-co/react 0.12.1-rc.df659d8 → 0.12.1-rc.f2804ef

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.
@@ -59,6 +59,7 @@ __export(client_exports, {
59
59
  OAUTH_STATE_KEY: () => OAUTH_STATE_KEY,
60
60
  OfferAssetCard: () => OfferAssetCard,
61
61
  OfferAssetCardUi: () => OfferAssetCardUi,
62
+ OfferLogoUi: () => OfferLogoUi,
62
63
  OfferSaleCard: () => OfferSaleCard,
63
64
  OfferSaleCardUi: () => OfferSaleCardUi,
64
65
  OffersAssetGrid: () => OffersAssetGrid,
@@ -120,6 +121,7 @@ __export(client_exports, {
120
121
  quoteOverAsks: () => quoteOverAsks,
121
122
  stablecoinIconUrl: () => stablecoinIconUrl,
122
123
  submitErc20Approval: () => submitErc20Approval,
124
+ tokenLogoSrcSet: () => tokenLogoSrcSet,
123
125
  tokenLogoUrl: () => tokenLogoUrl,
124
126
  tokenMetadataOf: () => tokenMetadataOf,
125
127
  useCheckoutOfferTokenMetadata: () => useCheckoutOfferTokenMetadata,
@@ -162,6 +164,7 @@ __export(client_exports, {
162
164
  useTaxDocument: () => useTaxDocument,
163
165
  useTaxDocumentModalViewModel: () => useTaxDocumentModalViewModel,
164
166
  useTokenMetadata: () => useTokenMetadata,
167
+ useTokenRegistry: () => useTokenRegistry,
165
168
  validateAmount: () => validateAmount,
166
169
  validateSellAmount: () => validateSellAmount,
167
170
  validateSuperstateAmount: () => validateSuperstateAmount
@@ -1317,8 +1320,15 @@ async function fetchAllPages(fetchPage, baseParams) {
1317
1320
  // src/universal/types/pagination.ts
1318
1321
  var Cursor = (value) => value;
1319
1322
  var PaginatedResponse = {
1320
- fromDto: (dto, itemMapper) => ({
1321
- data: dto.data.map(itemMapper),
1323
+ fromDto: (dto, itemMapper) => PaginatedResponse.fromDtoPage(dto, (items) => items.map(itemMapper)),
1324
+ /**
1325
+ * For a mapper that decides the page as a whole - one that drops items it
1326
+ * cannot map, such as `Offer.listFromDto` - rather than item by item. The
1327
+ * cursors are the wire's either way: dropping an item changes what the
1328
+ * page holds, not where the next page starts.
1329
+ */
1330
+ fromDtoPage: (dto, pageMapper) => ({
1331
+ data: pageMapper(dto.data),
1322
1332
  startingAfter: dto.starting_after ? Cursor(dto.starting_after) : null,
1323
1333
  startingBefore: dto.starting_before ? Cursor(dto.starting_before) : null
1324
1334
  })
@@ -1351,6 +1361,40 @@ var Asset = {
1351
1361
  })
1352
1362
  };
1353
1363
 
1364
+ // src/universal/core/shared/utils/wire.ts
1365
+ function unknownTypeError(dto, model) {
1366
+ const type = dto.type;
1367
+ throw new ValidationError(
1368
+ `${model}.type: unknown type ${JSON.stringify(type)}`
1369
+ );
1370
+ }
1371
+ function requiredString(value, field) {
1372
+ const text = notBlankStringOrNull(value);
1373
+ if (text === null) {
1374
+ throw new ValidationError(
1375
+ `${field}: expected a non-blank string, got ${typeof value === "string" ? "a blank string" : String(value)}`
1376
+ );
1377
+ }
1378
+ return text;
1379
+ }
1380
+ function requiredDate(value, field) {
1381
+ const date = typeof value === "string" ? new Date(value) : null;
1382
+ if (date === null || Number.isNaN(date.getTime())) {
1383
+ throw new ValidationError(
1384
+ `${field}: expected a date, got ${JSON.stringify(value)}`
1385
+ );
1386
+ }
1387
+ return date;
1388
+ }
1389
+ function requiredArray(value, field) {
1390
+ if (!Array.isArray(value)) {
1391
+ throw new ValidationError(
1392
+ `${field}: expected an array, got ${typeof value}`
1393
+ );
1394
+ }
1395
+ return value;
1396
+ }
1397
+
1354
1398
  // src/universal/types/blockchain/core.ts
1355
1399
  var ETHEREUM_CHAINS = {
1356
1400
  ethereum_mainnet: true,
@@ -1444,25 +1488,69 @@ var Bps = (value) => value;
1444
1488
  // src/universal/types/offer.ts
1445
1489
  var OfferId = (value) => value;
1446
1490
  var OfferSlug = (value) => value;
1491
+ var OFFER_TYPES = {
1492
+ "coinlist::token_sale": true,
1493
+ "superstate::swap": true,
1494
+ "ondo::swap": true
1495
+ };
1496
+ var isOfferType = (value) => Object.keys(OFFER_TYPES).includes(value);
1497
+ var OfferEditorial = {
1498
+ /**
1499
+ * `model` prefixes the field in the error (`'Offer'`, `'OfferDetail'`), so
1500
+ * the same three checks name the payload that failed them.
1501
+ */
1502
+ fromDto: (dto, model) => ({
1503
+ tagline: requiredString(dto.tagline, `${model}.tagline`),
1504
+ bannerUrl: requiredString(dto.banner_url, `${model}.banner_url`),
1505
+ startsAt: requiredDate(dto.starts_at, `${model}.starts_at`)
1506
+ })
1507
+ };
1447
1508
  var Offer = {
1448
1509
  fromDto: (dto) => {
1449
- if (!Array.isArray(dto.tokens)) {
1450
- throw new ValidationError(
1451
- `Offer.tokens: expected an array, got ${typeof dto.tokens}`
1452
- );
1453
- }
1454
- return {
1510
+ const tokens = requiredArray(dto.tokens, "Offer.tokens");
1511
+ const base2 = {
1455
1512
  id: OfferId(dto.id),
1456
1513
  slug: OfferSlug(dto.slug),
1457
- type: dto.type,
1458
- tagline: dto.tagline,
1459
- bannerUrl: dto.banner_url,
1460
- logoUrl: dto.logo_url,
1461
- startsAt: new Date(dto.starts_at),
1462
1514
  endsAt: dto.ends_at ? new Date(dto.ends_at) : null,
1463
- tokens: OfferToken.listFromDto(dto.tokens)
1515
+ tokens: OfferToken.listFromDto(tokens)
1464
1516
  };
1465
- }
1517
+ switch (dto.type) {
1518
+ case "coinlist::token_sale":
1519
+ return {
1520
+ ...base2,
1521
+ ...OfferEditorial.fromDto(dto, "Offer"),
1522
+ type: dto.type,
1523
+ logoUrl: requiredString(dto.logo_url, "Offer.logo_url")
1524
+ };
1525
+ case "superstate::swap":
1526
+ return {
1527
+ ...base2,
1528
+ ...OfferEditorial.fromDto(dto, "Offer"),
1529
+ type: dto.type,
1530
+ logoUrl: notBlankStringOrNull(dto.logo_url)
1531
+ };
1532
+ // `tagline`, `banner_url` and `starts_at` arrive as `null` and are left
1533
+ // on the wire: copying them would hand every consumer a `startsAt` that
1534
+ // is 1970 for one variant and a date for the others.
1535
+ case "ondo::swap":
1536
+ return {
1537
+ ...base2,
1538
+ type: dto.type,
1539
+ logoUrl: notBlankStringOrNull(dto.logo_url)
1540
+ };
1541
+ default:
1542
+ return unknownTypeError(dto, "Offer");
1543
+ }
1544
+ },
1545
+ /**
1546
+ * Maps a page of offers, dropping every offer whose `type` this SDK does not
1547
+ * name. The same reasoning as {@link OfferToken.listFromDto}: a plain `.map`
1548
+ * would throw out of `fromDto` and, through `PaginatedResponse.fromDto`,
1549
+ * reject the whole page, so one offer of an unknown type would blank the
1550
+ * grid for every offer beside it. A single offer fetched by id still
1551
+ * throws, because there is nothing beside it to keep.
1552
+ */
1553
+ listFromDto: (dtos) => dtos.filter((dto) => isOfferType(dto.type)).map(Offer.fromDto)
1466
1554
  };
1467
1555
  var OfferToken = {
1468
1556
  fromDto: (dto) => ({
@@ -1499,76 +1587,69 @@ var OfferSwapContract = {
1499
1587
  };
1500
1588
  var OfferDetail = {
1501
1589
  fromDto: (dto) => {
1502
- if (!Array.isArray(dto.funding_assets)) {
1503
- throw new ValidationError(
1504
- `OfferDetail.funding_assets: expected an array, got ${typeof dto.funding_assets}`
1505
- );
1506
- }
1507
- if (!Array.isArray(dto.options)) {
1508
- throw new ValidationError(
1509
- `OfferDetail.options: expected an array, got ${typeof dto.options}`
1510
- );
1511
- }
1512
- if (!Array.isArray(dto.terms)) {
1513
- throw new ValidationError(
1514
- `OfferDetail.terms: expected an array, got ${typeof dto.terms}`
1515
- );
1516
- }
1517
- if (!Array.isArray(dto.links)) {
1518
- throw new ValidationError(
1519
- `OfferDetail.links: expected an array, got ${typeof dto.links}`
1520
- );
1521
- }
1522
- if (!Array.isArray(dto.faqs)) {
1523
- throw new ValidationError(
1524
- `OfferDetail.faqs: expected an array, got ${typeof dto.faqs}`
1525
- );
1526
- }
1527
- if (!Array.isArray(dto.milestones)) {
1528
- throw new ValidationError(
1529
- `OfferDetail.milestones: expected an array, got ${typeof dto.milestones}`
1530
- );
1531
- }
1532
- if (!Array.isArray(dto.tokens)) {
1533
- throw new ValidationError(
1534
- `OfferDetail.tokens: expected an array, got ${typeof dto.tokens}`
1535
- );
1536
- }
1537
- const swapContracts = dto.swap_contracts === void 0 ? [] : dto.swap_contracts;
1538
- if (!Array.isArray(swapContracts)) {
1539
- throw new ValidationError(
1540
- `OfferDetail.swap_contracts: expected an array, got ${typeof swapContracts}`
1541
- );
1542
- }
1590
+ const fundingAssets = requiredArray(
1591
+ dto.funding_assets,
1592
+ "OfferDetail.funding_assets"
1593
+ );
1594
+ const options = requiredArray(dto.options, "OfferDetail.options");
1595
+ const terms = requiredArray(dto.terms, "OfferDetail.terms");
1596
+ const links = requiredArray(dto.links, "OfferDetail.links");
1597
+ const faqs = requiredArray(dto.faqs, "OfferDetail.faqs");
1598
+ const milestones = requiredArray(dto.milestones, "OfferDetail.milestones");
1599
+ const tokens = requiredArray(dto.tokens, "OfferDetail.tokens");
1543
1600
  const isin = notBlankStringOrNull(dto.isin);
1544
1601
  const ticker = notBlankStringOrNull(dto.ticker);
1545
- return {
1602
+ const base2 = {
1546
1603
  id: OfferId(dto.id),
1547
1604
  slug: OfferSlug(dto.slug),
1548
- type: dto.type,
1549
1605
  name: dto.name,
1550
1606
  asset: Asset.fromDto(dto.asset),
1551
- fundingAssets: dto.funding_assets.map(Asset.fromDto),
1552
- tokens: OfferToken.listFromDto(dto.tokens),
1553
- swapContracts: swapContracts.map(OfferSwapContract.fromDto),
1607
+ fundingAssets: fundingAssets.map(Asset.fromDto),
1608
+ tokens: OfferToken.listFromDto(tokens),
1554
1609
  about: notBlankStringOrNull(dto.about),
1555
- tagline: dto.tagline,
1556
- bannerUrl: dto.banner_url,
1557
- logoUrl: dto.logo_url,
1558
1610
  category: dto.category,
1559
1611
  issuer: notBlankStringOrNull(dto.issuer),
1560
1612
  isin: isin === null ? null : Isin(isin),
1561
1613
  ticker: ticker === null ? null : Ticker(ticker),
1562
1614
  instrumentType: notBlankStringOrNull(dto.instrument_type),
1563
1615
  listingVenue: notBlankStringOrNull(dto.listing_venue),
1564
- startsAt: new Date(dto.starts_at),
1565
1616
  endsAt: dto.ends_at ? new Date(dto.ends_at) : null,
1566
- faqs: dto.faqs.map(FaqItem.fromDto),
1567
- links: dto.links.map(Link.fromDto),
1568
- milestones: dto.milestones.map(Milestone.fromDto),
1569
- options: dto.options.map(OfferOption.fromDto),
1570
- terms: dto.terms.map(TermItem.fromDto)
1617
+ faqs: faqs.map(FaqItem.fromDto),
1618
+ links: links.map(Link.fromDto),
1619
+ milestones: milestones.map(Milestone.fromDto),
1620
+ options: options.map(OfferOption.fromDto),
1621
+ terms: terms.map(TermItem.fromDto)
1571
1622
  };
1623
+ switch (dto.type) {
1624
+ case "coinlist::token_sale":
1625
+ return {
1626
+ ...base2,
1627
+ ...OfferEditorial.fromDto(dto, "OfferDetail"),
1628
+ type: dto.type,
1629
+ logoUrl: requiredString(dto.logo_url, "OfferDetail.logo_url")
1630
+ };
1631
+ case "superstate::swap":
1632
+ return {
1633
+ ...base2,
1634
+ ...OfferEditorial.fromDto(dto, "OfferDetail"),
1635
+ type: dto.type,
1636
+ logoUrl: notBlankStringOrNull(dto.logo_url)
1637
+ };
1638
+ // `tagline`, `banner_url` and `starts_at` arrive as `null` and are left
1639
+ // on the wire, as in `Offer.fromDto`.
1640
+ case "ondo::swap":
1641
+ return {
1642
+ ...base2,
1643
+ type: dto.type,
1644
+ logoUrl: notBlankStringOrNull(dto.logo_url),
1645
+ swapContracts: requiredArray(
1646
+ dto.swap_contracts,
1647
+ "OfferDetail.swap_contracts"
1648
+ ).map(OfferSwapContract.fromDto)
1649
+ };
1650
+ default:
1651
+ return unknownTypeError(dto, "OfferDetail");
1652
+ }
1572
1653
  }
1573
1654
  };
1574
1655
  var OfferOption = {
@@ -1787,7 +1868,7 @@ var TOKEN_REGISTRY = {
1787
1868
 
1788
1869
  // src/universal/core/checkout/ondo/constants.ts
1789
1870
  var ONDO_POLL_INTERVAL_MS = 15e3;
1790
- var ONDO_QUOTE_EXPIRY_THRESHOLD_MS = 5e3;
1871
+ var ONDO_QUOTE_MAX_TTL_MS = 15e3;
1791
1872
  var DEFAULT_ONDO_AMOUNT_TO_COMPUTE_PRICE = DecimalString("1000");
1792
1873
  var ONDO_SETTLEMENT_ASSET = USDC_SYMBOL;
1793
1874
  var DEFAULT_ONDO_SELL_TOKENS_TO_COMPUTE_PRICE = 1;
@@ -1810,6 +1891,9 @@ function computeOndoSellPrice(transaction) {
1810
1891
  shares: spendInputAmount
1811
1892
  });
1812
1893
  }
1894
+ function ondoQuoteOfferDeadline(expiresAt, nowMs = Date.now()) {
1895
+ return new Date(Math.min(expiresAt.getTime(), nowMs + ONDO_QUOTE_MAX_TTL_MS));
1896
+ }
1813
1897
  function grossProceeds(expected) {
1814
1898
  const raw = expected.quantity.raw + expected.fee.raw;
1815
1899
  if (raw > MAX_UINT_256) {
@@ -3495,7 +3579,7 @@ async function fetchOffersPage(api, params, clientCreds) {
3495
3579
  Attributes.clientCredentials(clientCreds)
3496
3580
  )
3497
3581
  });
3498
- return PaginatedResponse.fromDto(pageDto, Offer.fromDto);
3582
+ return PaginatedResponse.fromDtoPage(pageDto, Offer.listFromDto);
3499
3583
  }
3500
3584
  async function fetchOfferDetails(api, id, clientCreds) {
3501
3585
  const dto = await api.send({
@@ -3757,6 +3841,52 @@ var Erc20NamespaceImpl = class {
3757
3841
  }
3758
3842
  };
3759
3843
 
3844
+ // src/universal/core/tokens/token-registry-snapshot.ts
3845
+ var TokenRegistrySnapshot = {
3846
+ /** Indexes a `tokens.list()` result. `[]` is a valid, empty snapshot. */
3847
+ fromTokens: (tokens) => ({
3848
+ tokens,
3849
+ byKey: new Map(
3850
+ tokens.map((token) => [registryKey(token.identifier), token])
3851
+ )
3852
+ }),
3853
+ /**
3854
+ * The registry's entry for one token, or `null` when it lists none. The
3855
+ * registry is curated, so `null` is an ordinary answer rather than an
3856
+ * error, and callers fall back to their own display defaults.
3857
+ */
3858
+ get: (snapshot, token) => snapshot.byKey.get(registryKey(token)) ?? null,
3859
+ /**
3860
+ * The registry's entry for the token an offer is *about*, or `null` when
3861
+ * it lists none of them.
3862
+ *
3863
+ * Resolution follows {@link offerDisplayTokens}: the token a sale
3864
+ * distributes or a swap hands over, never the funding token the user pays
3865
+ * with. An offer deployed on several chains carries one such token per
3866
+ * chain, and the first the registry knows wins - they are the same asset,
3867
+ * so any listed one answers for the offer.
3868
+ */
3869
+ forOffer: (snapshot, offer) => {
3870
+ for (const token of offerDisplayTokens(offer)) {
3871
+ const metadata = TokenRegistrySnapshot.get(snapshot, token);
3872
+ if (metadata !== null) {
3873
+ return metadata;
3874
+ }
3875
+ }
3876
+ return null;
3877
+ }
3878
+ };
3879
+ function offerDisplayTokens(offer) {
3880
+ const swaps = offer.tokens.filter((token) => token.role === "swap");
3881
+ const distributions = offer.tokens.filter(
3882
+ (token) => token.role === "distribution"
3883
+ );
3884
+ return [...swaps, ...distributions];
3885
+ }
3886
+ function registryKey(token) {
3887
+ return `${token.chain}:${token.address.toLowerCase()}`;
3888
+ }
3889
+
3760
3890
  // src/universal/api/nabu/tokens.ts
3761
3891
  var import_viem6 = require("viem");
3762
3892
 
@@ -4957,7 +5087,7 @@ var CoinListProvider = CoinListContextProvider;
4957
5087
  var import_react4 = require("react");
4958
5088
 
4959
5089
  // src/client/generated/sdk-styles.gen.ts
4960
- var sdkStyles = '/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--clcosdk-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--clcosdk-color-red-400:oklch(70.4% .191 22.216);--clcosdk-color-red-500:oklch(63.7% .237 25.331);--clcosdk-color-amber-500:oklch(76.9% .188 70.08);--clcosdk-color-gray-400:oklch(70.7% .022 261.325);--clcosdk-color-gray-500:oklch(55.1% .027 264.364);--clcosdk-color-black:#000;--clcosdk-spacing:.25rem;--clcosdk-container-sm:24rem;--clcosdk-container-md:28rem;--clcosdk-container-xl:36rem;--clcosdk-text-xs:.75rem;--clcosdk-text-xs--line-height:calc(1 / .75);--clcosdk-text-sm:.875rem;--clcosdk-text-sm--line-height:calc(1.25 / .875);--clcosdk-text-base:1rem;--clcosdk-text-base--line-height:calc(1.5 / 1);--clcosdk-text-lg:1.125rem;--clcosdk-text-lg--line-height:calc(1.75 / 1.125);--clcosdk-font-weight-normal:400;--clcosdk-font-weight-medium:500;--clcosdk-font-weight-semibold:600;--clcosdk-radius-md:.375rem;--clcosdk-radius-lg:.5rem;--clcosdk-radius-xl:.75rem;--clcosdk-radius-2xl:1rem;--clcosdk-ease-out:cubic-bezier(0, 0, .2, 1);--clcosdk-ease-in-out:cubic-bezier(.4, 0, .2, 1);--clcosdk-animate-spin:spin 1s linear infinite;--clcosdk-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--clcosdk-color-brand-primary:var(--color-brand-primary)}}@layer base{.clco-sdk-root{--color-brand-primary:#171717;--color-brand-primary-hover:#000;--color-brand-primary-active:#262626;--color-accent:#2b3a67;--color-accent-hover:#243057;--color-accent-active:#1d2647;--color-accent-focus:#c7d2fe;--color-accent-subtle:#eef1f8;--color-text-primary:#171717;--color-text-secondary:#8c8c8c;--color-text-disabled:#d1d1d1;--color-text-inverse:#fff;--color-background:#fff;--color-surface:#fafafa;--color-section:#f3f3f3;--color-border:#e5e5e5;--color-divider:#ececec;--color-overlay:#00000080;--color-positive:#15803d;--color-positive-subtle:#dcfce7;--color-negative:#dc2626;--color-negative-subtle:#fee2e2;--color-success:#2c8c5e;--color-success-subtle:#e6f4ec;--color-success-border:#cfe9db;--color-warning:#e08a1a;--color-warning-subtle:#fff7ed;--color-warning-border:#fdead7;--color-error:#b42318;--color-error-subtle:#feeceb;--color-error-border:#fbd5d2;--shadow-step-active:0px 0px 10px 0px #0000001a;--shadow-dialog:0px 8px 32px 0px #0000001a;--btn-primary-gradient:linear-gradient(180deg, #262626 0%, #1c1c1c 50%, #0f0f0f 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #00000059, inset 0px 1px 2px 0px #ffffff2e, inset 0px 1px 0px 0px #ffffff1a;--sale-card-surface:linear-gradient(to top, #0a0a0a 0%, #1a1a1a 100%);--color-sale-card-text:#f4f4f5;--color-sale-card-text-muted:#a1a1aa;--color-sale-card-text-strong:#fff;--color-sale-card-border:#ffffff40;--color-sale-card-chrome-border:#ffffff4d;--color-sale-card-chrome-bg:#ffffff26;--color-sale-card-chrome-emphasis-border:#fff6;--color-sale-card-chrome-emphasis-bg:#ffffff40;--color-sale-card-focus-ring:#ffffff80}@media (prefers-color-scheme:dark){.clco-sdk-root:not(:where(.light,.light *)){--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6}}:where(.dark,.dark *) .clco-sdk-root{--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6}.clco-sdk-root{color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif}.clco-sdk-root *,.clco-sdk-root :before,.clco-sdk-root :after{box-sizing:border-box}.clco-sdk-root button{appearance:none;cursor:pointer;font:inherit;color:inherit;background:0 0;border:none;padding:0}.clco-sdk-root input,.clco-sdk-root textarea,.clco-sdk-root select{font:inherit;color:inherit;background:0 0;border:none;border-radius:0;padding:0}.clco-sdk-root a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.clco-sdk-root ul,.clco-sdk-root ol{margin:0;padding:0;list-style:none}.clco-sdk-root h1,.clco-sdk-root h2,.clco-sdk-root h3,.clco-sdk-root h4,.clco-sdk-root h5,.clco-sdk-root h6,.clco-sdk-root p,.clco-sdk-root figure,.clco-sdk-root blockquote,.clco-sdk-root dl,.clco-sdk-root dd,.clco-sdk-root pre{margin:0}.clco-sdk-root img,.clco-sdk-root svg{max-width:100%;display:block}@keyframes clco-status-ping{0%{opacity:.7;transform:scale(1)}75%,to{opacity:0;transform:scale(3.25)}}.clco-sdk-root .clcosdk-status-dot-ping{animation:1.6s cubic-bezier(0,0,.2,1) infinite clco-status-ping}@media (prefers-reduced-motion:reduce){.clco-sdk-root .clcosdk-status-dot-ping{opacity:0;animation:none}}}@layer components;@layer utilities{.clcosdk\\:pointer-events-none{pointer-events:none}.clcosdk\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.clcosdk\\:absolute{position:absolute}.clcosdk\\:fixed{position:fixed}.clcosdk\\:relative{position:relative}.clcosdk\\:inset-0{inset:0}.clcosdk\\:top-1\\/2{top:50%}.clcosdk\\:top-4{top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:top-full{top:100%}.clcosdk\\:-right-0\\.5{right:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:right-4{right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:right-\\[-14\\%\\]{right:-14%}.clcosdk\\:-bottom-0\\.5{bottom:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:bottom-full{bottom:100%}.clcosdk\\:left-1\\/2{left:50%}.clcosdk\\:z-0{z-index:0}.clcosdk\\:z-10{z-index:10}.clcosdk\\:z-50{z-index:50}.clcosdk\\:order-1{order:1}.clcosdk\\:order-2{order:2}.clcosdk\\:mt-2{margin-top:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:mt-4{margin-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:mt-auto{margin-top:auto}.clcosdk\\:mb-2{margin-bottom:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:flex{display:flex}.clcosdk\\:grid{display:grid}.clcosdk\\:inline-flex{display:inline-flex}.clcosdk\\:size-2{width:calc(var(--clcosdk-spacing) * 2);height:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:size-3{width:calc(var(--clcosdk-spacing) * 3);height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:size-3\\.5{width:calc(var(--clcosdk-spacing) * 3.5);height:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:size-4{width:calc(var(--clcosdk-spacing) * 4);height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:size-5{width:calc(var(--clcosdk-spacing) * 5);height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:size-10{width:calc(var(--clcosdk-spacing) * 10);height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:size-16{width:calc(var(--clcosdk-spacing) * 16);height:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:size-24{width:calc(var(--clcosdk-spacing) * 24);height:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:size-\\[15rem\\]{width:15rem;height:15rem}.clcosdk\\:size-full{width:100%;height:100%}.clcosdk\\:h-1{height:var(--clcosdk-spacing)}.clcosdk\\:h-3{height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:h-4{height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:h-5{height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:h-6{height:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:h-8{height:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:h-10{height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:h-11{height:calc(var(--clcosdk-spacing) * 11)}.clcosdk\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:h-14{height:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:h-\\[1em\\]{height:1em}.clcosdk\\:h-\\[18px\\]{height:18px}.clcosdk\\:h-\\[54px\\]{height:54px}.clcosdk\\:h-\\[71px\\]{height:71px}.clcosdk\\:h-auto{height:auto}.clcosdk\\:h-full{height:100%}.clcosdk\\:h-px{height:1px}.clcosdk\\:max-h-\\[92vh\\]{max-height:92vh}.clcosdk\\:max-h-full{max-height:100%}.clcosdk\\:min-h-0{min-height:0}.clcosdk\\:min-h-9{min-height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:min-h-40{min-height:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:min-h-\\[1lh\\]{min-height:1lh}.clcosdk\\:min-h-screen{min-height:100vh}.clcosdk\\:w-1{width:var(--clcosdk-spacing)}.clcosdk\\:w-4{width:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:w-5{width:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:w-6{width:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:w-8{width:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:w-10{width:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:w-16{width:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:w-20{width:calc(var(--clcosdk-spacing) * 20)}.clcosdk\\:w-24{width:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:w-28{width:calc(var(--clcosdk-spacing) * 28)}.clcosdk\\:w-32{width:calc(var(--clcosdk-spacing) * 32)}.clcosdk\\:w-40{width:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:w-48{width:calc(var(--clcosdk-spacing) * 48)}.clcosdk\\:w-80{width:calc(var(--clcosdk-spacing) * 80)}.clcosdk\\:w-96{width:calc(var(--clcosdk-spacing) * 96)}.clcosdk\\:w-\\[16px\\]{width:16px}.clcosdk\\:w-\\[28rem\\]{width:28rem}.clcosdk\\:w-\\[448px\\]{width:448px}.clcosdk\\:w-auto{width:auto}.clcosdk\\:w-component{width:448px}.clcosdk\\:w-fit{width:fit-content}.clcosdk\\:w-full{width:100%}.clcosdk\\:w-max{width:max-content}.clcosdk\\:max-w-\\[16rem\\]{max-width:16rem}.clcosdk\\:max-w-\\[28rem\\]{max-width:28rem}.clcosdk\\:max-w-\\[30rem\\]{max-width:30rem}.clcosdk\\:max-w-\\[40rem\\]{max-width:40rem}.clcosdk\\:max-w-\\[56rem\\]{max-width:56rem}.clcosdk\\:max-w-\\[64rem\\]{max-width:64rem}.clcosdk\\:max-w-\\[760px\\]{max-width:760px}.clcosdk\\:max-w-full{max-width:100%}.clcosdk\\:max-w-md{max-width:var(--clcosdk-container-md)}.clcosdk\\:max-w-sm{max-width:var(--clcosdk-container-sm)}.clcosdk\\:max-w-xl{max-width:var(--clcosdk-container-xl)}.clcosdk\\:min-w-0{min-width:0}.clcosdk\\:flex-1{flex:1}.clcosdk\\:shrink-0{flex-shrink:0}.clcosdk\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:rotate-90{rotate:90deg}.clcosdk\\:rotate-180{rotate:180deg}.clcosdk\\:animate-pulse{animation:var(--clcosdk-animate-pulse)}.clcosdk\\:animate-spin{animation:var(--clcosdk-animate-spin)}.clcosdk\\:cursor-pointer{cursor:pointer}.clcosdk\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.clcosdk\\:grid-rows-\\[0fr\\]{grid-template-rows:0fr}.clcosdk\\:grid-rows-\\[1fr\\]{grid-template-rows:1fr}.clcosdk\\:flex-col{flex-direction:column}.clcosdk\\:flex-wrap{flex-wrap:wrap}.clcosdk\\:items-center{align-items:center}.clcosdk\\:items-end{align-items:flex-end}.clcosdk\\:items-start{align-items:flex-start}.clcosdk\\:justify-between{justify-content:space-between}.clcosdk\\:justify-center{justify-content:center}.clcosdk\\:justify-end{justify-content:flex-end}.clcosdk\\:gap-1{gap:var(--clcosdk-spacing)}.clcosdk\\:gap-1\\.5{gap:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:gap-2{gap:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:gap-2\\.5{gap:calc(var(--clcosdk-spacing) * 2.5)}.clcosdk\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:gap-\\[5px\\]{gap:5px}:where(.clcosdk\\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.clcosdk\\:divide-border>:not(:last-child)){border-color:var(--color-border)}:where(.clcosdk\\:divide-divider>:not(:last-child)){border-color:var(--color-divider)}.clcosdk\\:self-start{align-self:flex-start}.clcosdk\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.clcosdk\\:overflow-hidden{overflow:hidden}.clcosdk\\:overflow-y-auto{overflow-y:auto}.clcosdk\\:rounded{border-radius:.25rem}.clcosdk\\:rounded-2xl{border-radius:var(--clcosdk-radius-2xl)}.clcosdk\\:rounded-\\[20px\\]{border-radius:20px}.clcosdk\\:rounded-\\[28px\\]{border-radius:28px}.clcosdk\\:rounded-btn{border-radius:12px}.clcosdk\\:rounded-card{border-radius:24px}.clcosdk\\:rounded-full{border-radius:3.40282e38px}.clcosdk\\:rounded-lg{border-radius:var(--clcosdk-radius-lg)}.clcosdk\\:rounded-md{border-radius:var(--clcosdk-radius-md)}.clcosdk\\:rounded-xl{border-radius:var(--clcosdk-radius-xl)}.clcosdk\\:border{border-style:var(--tw-border-style);border-width:1px}.clcosdk\\:border-2{border-style:var(--tw-border-style);border-width:2px}.clcosdk\\:border-\\[1\\.5px\\]{border-style:var(--tw-border-style);border-width:1.5px}.clcosdk\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.clcosdk\\:border-accent\\/60{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:border-accent\\/60{border-color:color-mix(in oklab, var(--color-accent) 60%, transparent)}}.clcosdk\\:border-amber-500{border-color:var(--clcosdk-color-amber-500)}.clcosdk\\:border-background{border-color:var(--color-background)}.clcosdk\\:border-border{border-color:var(--color-border)}.clcosdk\\:border-brand-primary{border-color:var(--color-brand-primary)}.clcosdk\\:border-current{border-color:currentColor}.clcosdk\\:border-divider{border-color:var(--color-divider)}.clcosdk\\:border-error-border{border-color:var(--color-error-border)}.clcosdk\\:border-sale-card-border{border-color:var(--color-sale-card-border)}.clcosdk\\:border-sale-card-chrome-border{border-color:var(--color-sale-card-chrome-border)}.clcosdk\\:border-success-border{border-color:var(--color-success-border)}.clcosdk\\:border-warning-border{border-color:var(--color-warning-border)}.clcosdk\\:border-t-transparent{border-top-color:#0000}.clcosdk\\:bg-background{background-color:var(--color-background)}.clcosdk\\:bg-black\\/50{background-color:var(--clcosdk-color-black)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:bg-black\\/50{background-color:color-mix(in oklab, var(--clcosdk-color-black) 50%, transparent)}}.clcosdk\\:bg-brand-primary{background-color:var(--color-brand-primary)}.clcosdk\\:bg-divider{background-color:var(--color-divider)}.clcosdk\\:bg-error-subtle{background-color:var(--color-error-subtle)}.clcosdk\\:bg-overlay{background-color:var(--color-overlay)}.clcosdk\\:bg-positive{background-color:var(--color-positive)}.clcosdk\\:bg-positive-subtle{background-color:var(--color-positive-subtle)}.clcosdk\\:bg-sale-card-chrome-bg{background-color:var(--color-sale-card-chrome-bg)}.clcosdk\\:bg-section{background-color:var(--color-section)}.clcosdk\\:bg-success-subtle{background-color:var(--color-success-subtle)}.clcosdk\\:bg-surface{background-color:var(--color-surface)}.clcosdk\\:bg-text-disabled{background-color:var(--color-text-disabled)}.clcosdk\\:bg-text-primary{background-color:var(--color-text-primary)}.clcosdk\\:bg-transparent{background-color:#0000}.clcosdk\\:bg-warning-subtle{background-color:var(--color-warning-subtle)}.clcosdk\\:bg-\\[image\\:var\\(--btn-primary-gradient\\)\\]{background-image:var(--btn-primary-gradient)}.clcosdk\\:bg-\\[image\\:var\\(--sale-card-surface\\)\\]{background-image:var(--sale-card-surface)}.clcosdk\\:object-contain{object-fit:contain}.clcosdk\\:object-cover{object-fit:cover}.clcosdk\\:p-0{padding:0}.clcosdk\\:p-1\\.5{padding:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:p-3{padding:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:p-3\\.5{padding:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:p-5{padding:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:p-16{padding:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:px-2{padding-inline:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:px-3{padding-inline:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:px-4{padding-inline:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:px-5{padding-inline:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:py-1\\.5{padding-block:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:py-3{padding-block:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:py-8{padding-block:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:py-12{padding-block:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:pt-1{padding-top:var(--clcosdk-spacing)}.clcosdk\\:pt-4{padding-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pt-14{padding-top:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:pr-1\\.5{padding-right:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:pr-3{padding-right:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pb-4{padding-bottom:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pl-3{padding-left:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:text-center{text-align:center}.clcosdk\\:text-left{text-align:left}.clcosdk\\:text-right{text-align:right}.clcosdk\\:font-mono{font-family:var(--clcosdk-font-mono)}.clcosdk\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:text-lg{font-size:var(--clcosdk-text-lg);line-height:var(--tw-leading,var(--clcosdk-text-lg--line-height))}.clcosdk\\:text-sm{font-size:var(--clcosdk-text-sm);line-height:var(--tw-leading,var(--clcosdk-text-sm--line-height))}.clcosdk\\:text-xs{font-size:var(--clcosdk-text-xs);line-height:var(--tw-leading,var(--clcosdk-text-xs--line-height))}.clcosdk\\:text-\\[11px\\]{font-size:11px}.clcosdk\\:text-\\[12px\\]{font-size:12px}.clcosdk\\:text-\\[13px\\]{font-size:13px}.clcosdk\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:text-\\[15px\\]{font-size:15px}.clcosdk\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:text-\\[22px\\]{font-size:22px}.clcosdk\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:text-\\[36px\\]{font-size:36px}.clcosdk\\:text-\\[48px\\]{font-size:48px}.clcosdk\\:text-\\[64px\\]{font-size:64px}.clcosdk\\:leading-\\[105\\%\\]{--tw-leading:105%;line-height:105%}.clcosdk\\:leading-\\[108\\%\\]{--tw-leading:108%;line-height:108%}.clcosdk\\:leading-\\[110\\%\\]{--tw-leading:110%;line-height:110%}.clcosdk\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:leading-\\[130\\%\\]{--tw-leading:130%;line-height:130%}.clcosdk\\:leading-\\[140\\%\\]{--tw-leading:140%;line-height:140%}.clcosdk\\:leading-\\[150\\%\\]{--tw-leading:150%;line-height:150%}.clcosdk\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}.clcosdk\\:font-medium{--tw-font-weight:var(--clcosdk-font-weight-medium);font-weight:var(--clcosdk-font-weight-medium)}.clcosdk\\:font-normal{--tw-font-weight:var(--clcosdk-font-weight-normal);font-weight:var(--clcosdk-font-weight-normal)}.clcosdk\\:font-semibold{--tw-font-weight:var(--clcosdk-font-weight-semibold);font-weight:var(--clcosdk-font-weight-semibold)}.clcosdk\\:tracking-\\[0\\.12px\\]{--tw-tracking:.12px;letter-spacing:.12px}.clcosdk\\:tracking-\\[0\\.28px\\]{--tw-tracking:.28px;letter-spacing:.28px}.clcosdk\\:break-words{overflow-wrap:break-word}.clcosdk\\:whitespace-nowrap{white-space:nowrap}.clcosdk\\:text-background{color:var(--color-background)}.clcosdk\\:text-brand-primary{color:var(--color-brand-primary)}.clcosdk\\:text-error{color:var(--color-error)}.clcosdk\\:text-positive{color:var(--color-positive)}.clcosdk\\:text-sale-card-text{color:var(--color-sale-card-text)}.clcosdk\\:text-sale-card-text-muted{color:var(--color-sale-card-text-muted)}.clcosdk\\:text-sale-card-text-strong{color:var(--color-sale-card-text-strong)}.clcosdk\\:text-success{color:var(--color-success)}.clcosdk\\:text-text-disabled{color:var(--color-text-disabled)}.clcosdk\\:text-text-inverse{color:var(--color-text-inverse)}.clcosdk\\:text-text-primary{color:var(--color-text-primary)}.clcosdk\\:text-text-secondary{color:var(--color-text-secondary)}.clcosdk\\:text-warning{color:var(--color-warning)}.clcosdk\\:capitalize{text-transform:capitalize}.clcosdk\\:lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:no-underline{text-decoration-line:none}.clcosdk\\:underline{text-decoration-line:underline}.clcosdk\\:underline-offset-2{text-underline-offset:2px}.clcosdk\\:underline-offset-4{text-underline-offset:4px}.clcosdk\\:opacity-0{opacity:0}.clcosdk\\:opacity-60{opacity:.6}.clcosdk\\:shadow-\\[0_0_0_3px_rgba\\(59\\,130\\,246\\,0\\.2\\)\\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,#3b82f633);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_1px_1px_0px_rgba\\(10\\,10\\,10\\,0\\.04\\)\\,0px_8px_12px_0px_rgba\\(10\\,10\\,10\\,0\\.08\\)\\]{--tw-shadow:0px 1px 1px 0px var(--tw-shadow-color,#0a0a0a0a), 0px 8px 12px 0px var(--tw-shadow-color,#0a0a0a14);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_4px_12px_0px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\,0px_12px_28px_0px_rgba\\(0\\,0\\,0\\,0\\.13\\)\\]{--tw-shadow:0px 4px 12px 0px var(--tw-shadow-color,#00000014), 0px 12px 28px 0px var(--tw-shadow-color,#00000021);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[var\\(--btn-primary-shadow\\)\\]{--tw-shadow:var(--btn-primary-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-card{--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,#0000000d), 0px 12px 24px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-dialog{--tw-shadow:var(--shadow-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-step-active{--tw-shadow:var(--shadow-step-active);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:transition-\\[background-color\\,border-color\\]{transition-property:background-color,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.clcosdk\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.clcosdk\\:duration-500{--tw-duration:.5s;transition-duration:.5s}.clcosdk\\:ease-in-out{--tw-ease:var(--clcosdk-ease-in-out);transition-timing-function:var(--clcosdk-ease-in-out)}.clcosdk\\:ease-out{--tw-ease:var(--clcosdk-ease-out);transition-timing-function:var(--clcosdk-ease-out)}.clcosdk\\:outline-none{--tw-outline-style:none;outline-style:none}.clcosdk\\:group-focus-within\\:opacity-100:is(:where(.clcosdk\\:group):focus-within *){opacity:1}@media (hover:hover){.clcosdk\\:group-hover\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):hover *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-hover\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):hover *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:group-hover\\:opacity-100:is(:where(.clcosdk\\:group):hover *){opacity:1}}.clcosdk\\:group-focus-visible\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):focus-visible *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-focus-visible\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):focus-visible *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:placeholder\\:text-text-disabled::placeholder{color:var(--color-text-disabled)}@media (hover:hover){.clcosdk\\:hover\\:scale-\\[1\\.02\\]:hover{scale:1.02}.clcosdk\\:hover\\:border-text-disabled:hover{border-color:var(--color-text-disabled)}.clcosdk\\:hover\\:bg-\\[\\#fcdcd8\\]:hover{background-color:#fcdcd8}.clcosdk\\:hover\\:bg-border:hover{background-color:var(--color-border)}.clcosdk\\:hover\\:bg-brand-primary:hover{background-color:var(--color-brand-primary)}.clcosdk\\:hover\\:bg-brand-primary-hover:hover{background-color:var(--color-brand-primary-hover)}.clcosdk\\:hover\\:bg-section:hover{background-color:var(--color-section)}.clcosdk\\:hover\\:bg-surface:hover{background-color:var(--color-surface)}.clcosdk\\:hover\\:text-\\[\\#8b1a13\\]:hover{color:#8b1a13}.clcosdk\\:hover\\:text-text-primary:hover{color:var(--color-text-primary)}.clcosdk\\:hover\\:underline:hover{text-decoration-line:underline}.clcosdk\\:hover\\:opacity-80:hover{opacity:.8}.clcosdk\\:hover\\:opacity-90:hover{opacity:.9}}.clcosdk\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:focus-visible\\:ring-gray-400:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-400)}.clcosdk\\:focus-visible\\:ring-gray-500:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-500)}.clcosdk\\:focus-visible\\:ring-red-400:focus-visible{--tw-ring-color:var(--clcosdk-color-red-400)}.clcosdk\\:focus-visible\\:ring-red-500:focus-visible{--tw-ring-color:var(--clcosdk-color-red-500)}.clcosdk\\:focus-visible\\:ring-sale-card-focus-ring:focus-visible{--tw-ring-color:var(--color-sale-card-focus-ring)}.clcosdk\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.clcosdk\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.clcosdk\\:active\\:bg-\\[\\#d9d9d9\\]:active{background-color:#d9d9d9}.clcosdk\\:active\\:bg-\\[\\#f9c9c4\\]:active{background-color:#f9c9c4}.clcosdk\\:active\\:bg-border:active{background-color:var(--color-border)}.clcosdk\\:active\\:bg-brand-primary-active:active{background-color:var(--color-brand-primary-active)}.clcosdk\\:active\\:text-\\[\\#6d1510\\]:active{color:#6d1510}.clcosdk\\:active\\:opacity-80:active{opacity:.8}.clcosdk\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.clcosdk\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.clcosdk\\:disabled\\:opacity-40:disabled{opacity:.4}.clcosdk\\:disabled\\:opacity-50:disabled{opacity:.5}.clcosdk\\:aria-disabled\\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.clcosdk\\:aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}@media not all and (min-width:48rem){.clcosdk\\:max-md\\:hidden{display:none}.clcosdk\\:max-md\\:w-full{width:100%}.clcosdk\\:max-md\\:justify-start{justify-content:flex-start}.clcosdk\\:max-md\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:max-md\\:rounded-none{border-radius:0}.clcosdk\\:max-md\\:border-0{border-style:var(--tw-border-style);border-width:0}.clcosdk\\:max-md\\:bg-transparent{background-color:#0000}.clcosdk\\:max-md\\:p-0{padding:0}@media (hover:hover){.clcosdk\\:max-md\\:hover\\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}@media (min-width:40rem){.clcosdk\\:sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:48rem){.clcosdk\\:md\\:right-\\[-10\\%\\]{right:-10%}.clcosdk\\:md\\:order-1{order:1}.clcosdk\\:md\\:order-2{order:2}.clcosdk\\:md\\:hidden{display:none}.clcosdk\\:md\\:size-\\[20rem\\]{width:20rem;height:20rem}.clcosdk\\:md\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:h-\\[54px\\]{height:54px}.clcosdk\\:md\\:w-9{width:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-\\[minmax\\(0\\,11fr\\)_minmax\\(0\\,8fr\\)\\]{grid-template-columns:minmax(0,11fr) minmax(0,8fr)}.clcosdk\\:md\\:flex-row{flex-direction:row}.clcosdk\\:md\\:items-center{align-items:center}.clcosdk\\:md\\:items-end{align-items:flex-end}.clcosdk\\:md\\:justify-between{justify-content:space-between}.clcosdk\\:md\\:justify-end{justify-content:flex-end}.clcosdk\\:md\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:md\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:gap-x-12{column-gap:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:self-end{align-self:flex-end}.clcosdk\\:md\\:rounded-\\[40px\\]{border-radius:40px}.clcosdk\\:md\\:rounded-card{border-radius:24px}.clcosdk\\:md\\:rounded-dialog{border-radius:32px}.clcosdk\\:md\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:px-8{padding-inline:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-2{padding-right:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:pl-4{padding-left:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:md\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:md\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:md\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:md\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:md\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:md\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:not(:where(.light,.light *)):hover{background-color:#f8717133}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:where(.dark,.dark *):hover{background-color:#f8717133}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:not(:where(.light,.light *)):hover{color:#fca5a5}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:where(.dark,.dark *):hover{color:#fca5a5}}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:not(:where(.light,.light *)):active{background-color:#f871714d}}.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:where(.dark,.dark *):active{background-color:#f871714d}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-divider:not(:where(.light,.light *)):active{background-color:var(--color-divider)}}.clcosdk\\:dark\\:active\\:bg-divider:where(.dark,.dark *):active{background-color:var(--color-divider)}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:not(:where(.light,.light *)):active{color:#f87171}}.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:where(.dark,.dark *):active{color:#f87171}.clcosdk\\:\\[\\&_circle\\]\\:fill-error-subtle circle{fill:var(--color-error-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-success-subtle circle{fill:var(--color-success-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-warning-subtle circle{fill:var(--color-warning-subtle)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}';
5090
+ var sdkStyles = '/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--clcosdk-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--clcosdk-color-red-400:oklch(70.4% .191 22.216);--clcosdk-color-red-500:oklch(63.7% .237 25.331);--clcosdk-color-amber-500:oklch(76.9% .188 70.08);--clcosdk-color-gray-400:oklch(70.7% .022 261.325);--clcosdk-color-gray-500:oklch(55.1% .027 264.364);--clcosdk-color-black:#000;--clcosdk-spacing:.25rem;--clcosdk-container-sm:24rem;--clcosdk-container-md:28rem;--clcosdk-container-xl:36rem;--clcosdk-text-xs:.75rem;--clcosdk-text-xs--line-height:calc(1 / .75);--clcosdk-text-sm:.875rem;--clcosdk-text-sm--line-height:calc(1.25 / .875);--clcosdk-text-base:1rem;--clcosdk-text-base--line-height:calc(1.5 / 1);--clcosdk-text-lg:1.125rem;--clcosdk-text-lg--line-height:calc(1.75 / 1.125);--clcosdk-font-weight-normal:400;--clcosdk-font-weight-medium:500;--clcosdk-font-weight-semibold:600;--clcosdk-radius-md:.375rem;--clcosdk-radius-lg:.5rem;--clcosdk-radius-xl:.75rem;--clcosdk-radius-2xl:1rem;--clcosdk-ease-out:cubic-bezier(0, 0, .2, 1);--clcosdk-ease-in-out:cubic-bezier(.4, 0, .2, 1);--clcosdk-animate-spin:spin 1s linear infinite;--clcosdk-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--clcosdk-color-brand-primary:var(--color-brand-primary)}}@layer base{.clco-sdk-root{--color-brand-primary:#171717;--color-brand-primary-hover:#000;--color-brand-primary-active:#262626;--color-accent:#2b3a67;--color-accent-hover:#243057;--color-accent-active:#1d2647;--color-accent-focus:#c7d2fe;--color-accent-subtle:#eef1f8;--color-text-primary:#171717;--color-text-secondary:#8c8c8c;--color-text-disabled:#d1d1d1;--color-text-inverse:#fff;--color-background:#fff;--color-surface:#fafafa;--color-section:#f3f3f3;--color-border:#e5e5e5;--color-divider:#ececec;--color-overlay:#00000080;--color-positive:#15803d;--color-positive-subtle:#dcfce7;--color-negative:#dc2626;--color-negative-subtle:#fee2e2;--color-success:#2c8c5e;--color-success-subtle:#e6f4ec;--color-success-border:#cfe9db;--color-warning:#e08a1a;--color-warning-subtle:#fff7ed;--color-warning-border:#fdead7;--color-error:#b42318;--color-error-subtle:#feeceb;--color-error-border:#fbd5d2;--shadow-step-active:0px 0px 10px 0px #0000001a;--shadow-dialog:0px 8px 32px 0px #0000001a;--btn-primary-gradient:linear-gradient(180deg, #262626 0%, #1c1c1c 50%, #0f0f0f 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #00000059, inset 0px 1px 2px 0px #ffffff2e, inset 0px 1px 0px 0px #ffffff1a;--sale-card-surface:linear-gradient(to top, #0a0a0a 0%, #1a1a1a 100%);--color-sale-card-text:#f4f4f5;--color-sale-card-text-muted:#a1a1aa;--color-sale-card-text-strong:#fff;--color-sale-card-border:#ffffff40;--color-sale-card-chrome-border:#ffffff4d;--color-sale-card-chrome-bg:#ffffff26;--color-sale-card-chrome-emphasis-border:#fff6;--color-sale-card-chrome-emphasis-bg:#ffffff40;--color-sale-card-focus-ring:#ffffff80;--display-on-light:block;--display-on-dark:none}@media (prefers-color-scheme:dark){.clco-sdk-root:not(:where(.light,.light *)){--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6;--display-on-light:none;--display-on-dark:block}}:where(.dark,.dark *) .clco-sdk-root{--color-brand-primary:#f4f4f5;--color-brand-primary-hover:#fff;--color-brand-primary-active:#e4e4e7;--color-accent:#6f82c9;--color-accent-hover:#8799e4;--color-accent-active:#5b6fcf;--color-accent-focus:#6f82c959;--color-accent-subtle:#6f82c91f;--color-text-primary:#f4f4f5;--color-text-secondary:#a1a1aa;--color-text-disabled:#71717a;--color-text-inverse:#171717;--color-background:#0f1115;--color-surface:#161a20;--color-section:#20242c;--color-border:#2a2e35;--color-divider:#323741;--color-overlay:#000000b3;--color-positive:#22c55e;--color-positive-subtle:#22c55e1f;--color-negative:#ef4444;--color-negative-subtle:#ef44441f;--color-success:#34d399;--color-success-subtle:#34d3991f;--color-success-border:#34d39940;--color-warning:#f59e0b;--color-warning-subtle:#f59e0b1f;--color-warning-border:#f59e0b40;--color-error:#f87171;--color-error-subtle:#f871711f;--color-error-border:#f8717140;--shadow-step-active:0px 0px 10px 0px #00000080;--shadow-dialog:0px 8px 32px 0px #0009;--btn-primary-gradient:linear-gradient(180deg, #fafafa 0%, #f0f0f0 50%, #e4e4e7 100%);--btn-primary-shadow:inset 0px -1px 3px 0px #0000001f, inset 0px 1px 2px 0px #fff9, inset 0px 1px 0px 0px #fff6;--display-on-light:none;--display-on-dark:block}.clco-sdk-root{color:var(--color-text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,sans-serif}.clco-sdk-root *,.clco-sdk-root :before,.clco-sdk-root :after{box-sizing:border-box}.clco-sdk-root button{appearance:none;cursor:pointer;font:inherit;color:inherit;background:0 0;border:none;padding:0}.clco-sdk-root input,.clco-sdk-root textarea,.clco-sdk-root select{font:inherit;color:inherit;background:0 0;border:none;border-radius:0;padding:0}.clco-sdk-root a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.clco-sdk-root ul,.clco-sdk-root ol{margin:0;padding:0;list-style:none}.clco-sdk-root h1,.clco-sdk-root h2,.clco-sdk-root h3,.clco-sdk-root h4,.clco-sdk-root h5,.clco-sdk-root h6,.clco-sdk-root p,.clco-sdk-root figure,.clco-sdk-root blockquote,.clco-sdk-root dl,.clco-sdk-root dd,.clco-sdk-root pre{margin:0}.clco-sdk-root img,.clco-sdk-root svg{max-width:100%;display:block}@keyframes clco-status-ping{0%{opacity:.7;transform:scale(1)}75%,to{opacity:0;transform:scale(3.25)}}.clco-sdk-root .clcosdk-status-dot-ping{animation:1.6s cubic-bezier(0,0,.2,1) infinite clco-status-ping}.clco-sdk-root .clcosdk-on-light{display:var(--display-on-light)}.clco-sdk-root .clcosdk-on-dark{display:var(--display-on-dark)}@media (prefers-reduced-motion:reduce){.clco-sdk-root .clcosdk-status-dot-ping{opacity:0;animation:none}}}@layer components;@layer utilities{.clcosdk\\:pointer-events-none{pointer-events:none}.clcosdk\\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.clcosdk\\:absolute{position:absolute}.clcosdk\\:fixed{position:fixed}.clcosdk\\:relative{position:relative}.clcosdk\\:inset-0{inset:0}.clcosdk\\:top-1\\/2{top:50%}.clcosdk\\:top-4{top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:top-full{top:100%}.clcosdk\\:-right-0\\.5{right:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:right-4{right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:right-\\[-14\\%\\]{right:-14%}.clcosdk\\:-bottom-0\\.5{bottom:calc(var(--clcosdk-spacing) * -.5)}.clcosdk\\:bottom-full{bottom:100%}.clcosdk\\:left-1\\/2{left:50%}.clcosdk\\:z-0{z-index:0}.clcosdk\\:z-10{z-index:10}.clcosdk\\:z-50{z-index:50}.clcosdk\\:order-1{order:1}.clcosdk\\:order-2{order:2}.clcosdk\\:mt-2{margin-top:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:mt-4{margin-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:mt-auto{margin-top:auto}.clcosdk\\:mb-2{margin-bottom:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:flex{display:flex}.clcosdk\\:grid{display:grid}.clcosdk\\:inline-flex{display:inline-flex}.clcosdk\\:size-2{width:calc(var(--clcosdk-spacing) * 2);height:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:size-3{width:calc(var(--clcosdk-spacing) * 3);height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:size-3\\.5{width:calc(var(--clcosdk-spacing) * 3.5);height:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:size-4{width:calc(var(--clcosdk-spacing) * 4);height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:size-5{width:calc(var(--clcosdk-spacing) * 5);height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:size-10{width:calc(var(--clcosdk-spacing) * 10);height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:size-12{width:calc(var(--clcosdk-spacing) * 12);height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:size-16{width:calc(var(--clcosdk-spacing) * 16);height:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:size-24{width:calc(var(--clcosdk-spacing) * 24);height:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:size-\\[15rem\\]{width:15rem;height:15rem}.clcosdk\\:size-full{width:100%;height:100%}.clcosdk\\:h-1{height:var(--clcosdk-spacing)}.clcosdk\\:h-3{height:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:h-4{height:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:h-5{height:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:h-6{height:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:h-8{height:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:h-10{height:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:h-11{height:calc(var(--clcosdk-spacing) * 11)}.clcosdk\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:h-14{height:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:h-\\[1em\\]{height:1em}.clcosdk\\:h-\\[18px\\]{height:18px}.clcosdk\\:h-\\[54px\\]{height:54px}.clcosdk\\:h-\\[71px\\]{height:71px}.clcosdk\\:h-auto{height:auto}.clcosdk\\:h-full{height:100%}.clcosdk\\:h-px{height:1px}.clcosdk\\:max-h-\\[92vh\\]{max-height:92vh}.clcosdk\\:max-h-full{max-height:100%}.clcosdk\\:min-h-0{min-height:0}.clcosdk\\:min-h-9{min-height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:min-h-40{min-height:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:min-h-\\[1lh\\]{min-height:1lh}.clcosdk\\:min-h-screen{min-height:100vh}.clcosdk\\:w-1{width:var(--clcosdk-spacing)}.clcosdk\\:w-4{width:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:w-5{width:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:w-6{width:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:w-8{width:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:w-10{width:calc(var(--clcosdk-spacing) * 10)}.clcosdk\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:w-16{width:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:w-20{width:calc(var(--clcosdk-spacing) * 20)}.clcosdk\\:w-24{width:calc(var(--clcosdk-spacing) * 24)}.clcosdk\\:w-28{width:calc(var(--clcosdk-spacing) * 28)}.clcosdk\\:w-32{width:calc(var(--clcosdk-spacing) * 32)}.clcosdk\\:w-40{width:calc(var(--clcosdk-spacing) * 40)}.clcosdk\\:w-48{width:calc(var(--clcosdk-spacing) * 48)}.clcosdk\\:w-80{width:calc(var(--clcosdk-spacing) * 80)}.clcosdk\\:w-96{width:calc(var(--clcosdk-spacing) * 96)}.clcosdk\\:w-\\[16px\\]{width:16px}.clcosdk\\:w-\\[28rem\\]{width:28rem}.clcosdk\\:w-\\[448px\\]{width:448px}.clcosdk\\:w-auto{width:auto}.clcosdk\\:w-component{width:448px}.clcosdk\\:w-fit{width:fit-content}.clcosdk\\:w-full{width:100%}.clcosdk\\:w-max{width:max-content}.clcosdk\\:max-w-\\[16rem\\]{max-width:16rem}.clcosdk\\:max-w-\\[28rem\\]{max-width:28rem}.clcosdk\\:max-w-\\[30rem\\]{max-width:30rem}.clcosdk\\:max-w-\\[40rem\\]{max-width:40rem}.clcosdk\\:max-w-\\[56rem\\]{max-width:56rem}.clcosdk\\:max-w-\\[64rem\\]{max-width:64rem}.clcosdk\\:max-w-\\[760px\\]{max-width:760px}.clcosdk\\:max-w-full{max-width:100%}.clcosdk\\:max-w-md{max-width:var(--clcosdk-container-md)}.clcosdk\\:max-w-sm{max-width:var(--clcosdk-container-sm)}.clcosdk\\:max-w-xl{max-width:var(--clcosdk-container-xl)}.clcosdk\\:min-w-0{min-width:0}.clcosdk\\:flex-1{flex:1}.clcosdk\\:shrink-0{flex-shrink:0}.clcosdk\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:-translate-y-1\\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.clcosdk\\:rotate-90{rotate:90deg}.clcosdk\\:rotate-180{rotate:180deg}.clcosdk\\:animate-pulse{animation:var(--clcosdk-animate-pulse)}.clcosdk\\:animate-spin{animation:var(--clcosdk-animate-spin)}.clcosdk\\:cursor-pointer{cursor:pointer}.clcosdk\\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.clcosdk\\:grid-rows-\\[0fr\\]{grid-template-rows:0fr}.clcosdk\\:grid-rows-\\[1fr\\]{grid-template-rows:1fr}.clcosdk\\:flex-col{flex-direction:column}.clcosdk\\:flex-wrap{flex-wrap:wrap}.clcosdk\\:items-center{align-items:center}.clcosdk\\:items-end{align-items:flex-end}.clcosdk\\:items-start{align-items:flex-start}.clcosdk\\:justify-between{justify-content:space-between}.clcosdk\\:justify-center{justify-content:center}.clcosdk\\:justify-end{justify-content:flex-end}.clcosdk\\:gap-1{gap:var(--clcosdk-spacing)}.clcosdk\\:gap-1\\.5{gap:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:gap-2{gap:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:gap-2\\.5{gap:calc(var(--clcosdk-spacing) * 2.5)}.clcosdk\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:gap-\\[5px\\]{gap:5px}:where(.clcosdk\\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--clcosdk-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--clcosdk-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.clcosdk\\:divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.clcosdk\\:divide-border>:not(:last-child)){border-color:var(--color-border)}:where(.clcosdk\\:divide-divider>:not(:last-child)){border-color:var(--color-divider)}.clcosdk\\:self-start{align-self:flex-start}.clcosdk\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.clcosdk\\:overflow-hidden{overflow:hidden}.clcosdk\\:overflow-y-auto{overflow-y:auto}.clcosdk\\:rounded{border-radius:.25rem}.clcosdk\\:rounded-2xl{border-radius:var(--clcosdk-radius-2xl)}.clcosdk\\:rounded-\\[20px\\]{border-radius:20px}.clcosdk\\:rounded-\\[28px\\]{border-radius:28px}.clcosdk\\:rounded-btn{border-radius:12px}.clcosdk\\:rounded-card{border-radius:24px}.clcosdk\\:rounded-full{border-radius:3.40282e38px}.clcosdk\\:rounded-lg{border-radius:var(--clcosdk-radius-lg)}.clcosdk\\:rounded-md{border-radius:var(--clcosdk-radius-md)}.clcosdk\\:rounded-xl{border-radius:var(--clcosdk-radius-xl)}.clcosdk\\:border{border-style:var(--tw-border-style);border-width:1px}.clcosdk\\:border-2{border-style:var(--tw-border-style);border-width:2px}.clcosdk\\:border-\\[1\\.5px\\]{border-style:var(--tw-border-style);border-width:1.5px}.clcosdk\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.clcosdk\\:border-accent\\/60{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:border-accent\\/60{border-color:color-mix(in oklab, var(--color-accent) 60%, transparent)}}.clcosdk\\:border-amber-500{border-color:var(--clcosdk-color-amber-500)}.clcosdk\\:border-background{border-color:var(--color-background)}.clcosdk\\:border-border{border-color:var(--color-border)}.clcosdk\\:border-brand-primary{border-color:var(--color-brand-primary)}.clcosdk\\:border-current{border-color:currentColor}.clcosdk\\:border-divider{border-color:var(--color-divider)}.clcosdk\\:border-error-border{border-color:var(--color-error-border)}.clcosdk\\:border-sale-card-border{border-color:var(--color-sale-card-border)}.clcosdk\\:border-sale-card-chrome-border{border-color:var(--color-sale-card-chrome-border)}.clcosdk\\:border-success-border{border-color:var(--color-success-border)}.clcosdk\\:border-warning-border{border-color:var(--color-warning-border)}.clcosdk\\:border-t-transparent{border-top-color:#0000}.clcosdk\\:bg-background{background-color:var(--color-background)}.clcosdk\\:bg-black\\/50{background-color:var(--clcosdk-color-black)}@supports (color:color-mix(in lab, red, red)){.clcosdk\\:bg-black\\/50{background-color:color-mix(in oklab, var(--clcosdk-color-black) 50%, transparent)}}.clcosdk\\:bg-brand-primary{background-color:var(--color-brand-primary)}.clcosdk\\:bg-divider{background-color:var(--color-divider)}.clcosdk\\:bg-error-subtle{background-color:var(--color-error-subtle)}.clcosdk\\:bg-overlay{background-color:var(--color-overlay)}.clcosdk\\:bg-positive{background-color:var(--color-positive)}.clcosdk\\:bg-positive-subtle{background-color:var(--color-positive-subtle)}.clcosdk\\:bg-sale-card-chrome-bg{background-color:var(--color-sale-card-chrome-bg)}.clcosdk\\:bg-section{background-color:var(--color-section)}.clcosdk\\:bg-success-subtle{background-color:var(--color-success-subtle)}.clcosdk\\:bg-surface{background-color:var(--color-surface)}.clcosdk\\:bg-text-disabled{background-color:var(--color-text-disabled)}.clcosdk\\:bg-text-primary{background-color:var(--color-text-primary)}.clcosdk\\:bg-transparent{background-color:#0000}.clcosdk\\:bg-warning-subtle{background-color:var(--color-warning-subtle)}.clcosdk\\:bg-\\[image\\:var\\(--btn-primary-gradient\\)\\]{background-image:var(--btn-primary-gradient)}.clcosdk\\:bg-\\[image\\:var\\(--sale-card-surface\\)\\]{background-image:var(--sale-card-surface)}.clcosdk\\:object-contain{object-fit:contain}.clcosdk\\:object-cover{object-fit:cover}.clcosdk\\:p-0{padding:0}.clcosdk\\:p-1\\.5{padding:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:p-3{padding:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:p-3\\.5{padding:calc(var(--clcosdk-spacing) * 3.5)}.clcosdk\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:p-5{padding:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:p-16{padding:calc(var(--clcosdk-spacing) * 16)}.clcosdk\\:px-2{padding-inline:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:px-3{padding-inline:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:px-4{padding-inline:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:px-5{padding-inline:calc(var(--clcosdk-spacing) * 5)}.clcosdk\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:py-1\\.5{padding-block:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:py-3{padding-block:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:py-8{padding-block:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:py-12{padding-block:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:pt-1{padding-top:var(--clcosdk-spacing)}.clcosdk\\:pt-4{padding-top:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pt-14{padding-top:calc(var(--clcosdk-spacing) * 14)}.clcosdk\\:pr-1\\.5{padding-right:calc(var(--clcosdk-spacing) * 1.5)}.clcosdk\\:pr-3{padding-right:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pb-4{padding-bottom:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:pl-3{padding-left:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:text-center{text-align:center}.clcosdk\\:text-left{text-align:left}.clcosdk\\:text-right{text-align:right}.clcosdk\\:font-mono{font-family:var(--clcosdk-font-mono)}.clcosdk\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:text-lg{font-size:var(--clcosdk-text-lg);line-height:var(--tw-leading,var(--clcosdk-text-lg--line-height))}.clcosdk\\:text-sm{font-size:var(--clcosdk-text-sm);line-height:var(--tw-leading,var(--clcosdk-text-sm--line-height))}.clcosdk\\:text-xs{font-size:var(--clcosdk-text-xs);line-height:var(--tw-leading,var(--clcosdk-text-xs--line-height))}.clcosdk\\:text-\\[11px\\]{font-size:11px}.clcosdk\\:text-\\[12px\\]{font-size:12px}.clcosdk\\:text-\\[13px\\]{font-size:13px}.clcosdk\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:text-\\[15px\\]{font-size:15px}.clcosdk\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:text-\\[22px\\]{font-size:22px}.clcosdk\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:text-\\[36px\\]{font-size:36px}.clcosdk\\:text-\\[48px\\]{font-size:48px}.clcosdk\\:text-\\[64px\\]{font-size:64px}.clcosdk\\:leading-\\[105\\%\\]{--tw-leading:105%;line-height:105%}.clcosdk\\:leading-\\[108\\%\\]{--tw-leading:108%;line-height:108%}.clcosdk\\:leading-\\[110\\%\\]{--tw-leading:110%;line-height:110%}.clcosdk\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:leading-\\[130\\%\\]{--tw-leading:130%;line-height:130%}.clcosdk\\:leading-\\[140\\%\\]{--tw-leading:140%;line-height:140%}.clcosdk\\:leading-\\[150\\%\\]{--tw-leading:150%;line-height:150%}.clcosdk\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}.clcosdk\\:font-medium{--tw-font-weight:var(--clcosdk-font-weight-medium);font-weight:var(--clcosdk-font-weight-medium)}.clcosdk\\:font-normal{--tw-font-weight:var(--clcosdk-font-weight-normal);font-weight:var(--clcosdk-font-weight-normal)}.clcosdk\\:font-semibold{--tw-font-weight:var(--clcosdk-font-weight-semibold);font-weight:var(--clcosdk-font-weight-semibold)}.clcosdk\\:tracking-\\[0\\.12px\\]{--tw-tracking:.12px;letter-spacing:.12px}.clcosdk\\:tracking-\\[0\\.28px\\]{--tw-tracking:.28px;letter-spacing:.28px}.clcosdk\\:break-words{overflow-wrap:break-word}.clcosdk\\:whitespace-nowrap{white-space:nowrap}.clcosdk\\:text-background{color:var(--color-background)}.clcosdk\\:text-brand-primary{color:var(--color-brand-primary)}.clcosdk\\:text-error{color:var(--color-error)}.clcosdk\\:text-positive{color:var(--color-positive)}.clcosdk\\:text-sale-card-text{color:var(--color-sale-card-text)}.clcosdk\\:text-sale-card-text-muted{color:var(--color-sale-card-text-muted)}.clcosdk\\:text-sale-card-text-strong{color:var(--color-sale-card-text-strong)}.clcosdk\\:text-success{color:var(--color-success)}.clcosdk\\:text-text-disabled{color:var(--color-text-disabled)}.clcosdk\\:text-text-inverse{color:var(--color-text-inverse)}.clcosdk\\:text-text-primary{color:var(--color-text-primary)}.clcosdk\\:text-text-secondary{color:var(--color-text-secondary)}.clcosdk\\:text-warning{color:var(--color-warning)}.clcosdk\\:capitalize{text-transform:capitalize}.clcosdk\\:lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.clcosdk\\:no-underline{text-decoration-line:none}.clcosdk\\:underline{text-decoration-line:underline}.clcosdk\\:underline-offset-2{text-underline-offset:2px}.clcosdk\\:underline-offset-4{text-underline-offset:4px}.clcosdk\\:opacity-0{opacity:0}.clcosdk\\:opacity-60{opacity:.6}.clcosdk\\:shadow-\\[0_0_0_3px_rgba\\(59\\,130\\,246\\,0\\.2\\)\\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,#3b82f633);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_1px_1px_0px_rgba\\(10\\,10\\,10\\,0\\.04\\)\\,0px_8px_12px_0px_rgba\\(10\\,10\\,10\\,0\\.08\\)\\]{--tw-shadow:0px 1px 1px 0px var(--tw-shadow-color,#0a0a0a0a), 0px 8px 12px 0px var(--tw-shadow-color,#0a0a0a14);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[0px_4px_12px_0px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\,0px_12px_28px_0px_rgba\\(0\\,0\\,0\\,0\\.13\\)\\]{--tw-shadow:0px 4px 12px 0px var(--tw-shadow-color,#00000014), 0px 12px 28px 0px var(--tw-shadow-color,#00000021);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-\\[var\\(--btn-primary-shadow\\)\\]{--tw-shadow:var(--btn-primary-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-card{--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,#0000000d), 0px 12px 24px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-dialog{--tw-shadow:var(--shadow-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:shadow-step-active{--tw-shadow:var(--shadow-step-active);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:transition-\\[background-color\\,border-color\\]{transition-property:background-color,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.clcosdk\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.clcosdk\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.clcosdk\\:duration-500{--tw-duration:.5s;transition-duration:.5s}.clcosdk\\:ease-in-out{--tw-ease:var(--clcosdk-ease-in-out);transition-timing-function:var(--clcosdk-ease-in-out)}.clcosdk\\:ease-out{--tw-ease:var(--clcosdk-ease-out);transition-timing-function:var(--clcosdk-ease-out)}.clcosdk\\:outline-none{--tw-outline-style:none;outline-style:none}.clcosdk\\:group-focus-within\\:opacity-100:is(:where(.clcosdk\\:group):focus-within *){opacity:1}@media (hover:hover){.clcosdk\\:group-hover\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):hover *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-hover\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):hover *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:group-hover\\:opacity-100:is(:where(.clcosdk\\:group):hover *){opacity:1}}.clcosdk\\:group-focus-visible\\:border-sale-card-chrome-emphasis-border:is(:where(.clcosdk\\:group):focus-visible *){border-color:var(--color-sale-card-chrome-emphasis-border)}.clcosdk\\:group-focus-visible\\:bg-sale-card-chrome-emphasis-bg:is(:where(.clcosdk\\:group):focus-visible *){background-color:var(--color-sale-card-chrome-emphasis-bg)}.clcosdk\\:placeholder\\:text-text-disabled::placeholder{color:var(--color-text-disabled)}@media (hover:hover){.clcosdk\\:hover\\:scale-\\[1\\.02\\]:hover{scale:1.02}.clcosdk\\:hover\\:border-text-disabled:hover{border-color:var(--color-text-disabled)}.clcosdk\\:hover\\:bg-\\[\\#fcdcd8\\]:hover{background-color:#fcdcd8}.clcosdk\\:hover\\:bg-border:hover{background-color:var(--color-border)}.clcosdk\\:hover\\:bg-brand-primary:hover{background-color:var(--color-brand-primary)}.clcosdk\\:hover\\:bg-brand-primary-hover:hover{background-color:var(--color-brand-primary-hover)}.clcosdk\\:hover\\:bg-section:hover{background-color:var(--color-section)}.clcosdk\\:hover\\:bg-surface:hover{background-color:var(--color-surface)}.clcosdk\\:hover\\:text-\\[\\#8b1a13\\]:hover{color:#8b1a13}.clcosdk\\:hover\\:text-text-primary:hover{color:var(--color-text-primary)}.clcosdk\\:hover\\:underline:hover{text-decoration-line:underline}.clcosdk\\:hover\\:opacity-80:hover{opacity:.8}.clcosdk\\:hover\\:opacity-90:hover{opacity:.9}}.clcosdk\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.clcosdk\\:focus-visible\\:ring-gray-400:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-400)}.clcosdk\\:focus-visible\\:ring-gray-500:focus-visible{--tw-ring-color:var(--clcosdk-color-gray-500)}.clcosdk\\:focus-visible\\:ring-red-400:focus-visible{--tw-ring-color:var(--clcosdk-color-red-400)}.clcosdk\\:focus-visible\\:ring-red-500:focus-visible{--tw-ring-color:var(--clcosdk-color-red-500)}.clcosdk\\:focus-visible\\:ring-sale-card-focus-ring:focus-visible{--tw-ring-color:var(--color-sale-card-focus-ring)}.clcosdk\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.clcosdk\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.clcosdk\\:active\\:bg-\\[\\#d9d9d9\\]:active{background-color:#d9d9d9}.clcosdk\\:active\\:bg-\\[\\#f9c9c4\\]:active{background-color:#f9c9c4}.clcosdk\\:active\\:bg-border:active{background-color:var(--color-border)}.clcosdk\\:active\\:bg-brand-primary-active:active{background-color:var(--color-brand-primary-active)}.clcosdk\\:active\\:text-\\[\\#6d1510\\]:active{color:#6d1510}.clcosdk\\:active\\:opacity-80:active{opacity:.8}.clcosdk\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.clcosdk\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.clcosdk\\:disabled\\:opacity-40:disabled{opacity:.4}.clcosdk\\:disabled\\:opacity-50:disabled{opacity:.5}.clcosdk\\:aria-disabled\\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.clcosdk\\:aria-disabled\\:opacity-50[aria-disabled=true]{opacity:.5}@media not all and (min-width:48rem){.clcosdk\\:max-md\\:hidden{display:none}.clcosdk\\:max-md\\:w-full{width:100%}.clcosdk\\:max-md\\:justify-start{justify-content:flex-start}.clcosdk\\:max-md\\:gap-4{gap:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:max-md\\:rounded-none{border-radius:0}.clcosdk\\:max-md\\:border-0{border-style:var(--tw-border-style);border-width:0}.clcosdk\\:max-md\\:bg-transparent{background-color:#0000}.clcosdk\\:max-md\\:p-0{padding:0}@media (hover:hover){.clcosdk\\:max-md\\:hover\\:scale-100:hover{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}}}@media (min-width:40rem){.clcosdk\\:sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:48rem){.clcosdk\\:md\\:right-\\[-10\\%\\]{right:-10%}.clcosdk\\:md\\:order-1{order:1}.clcosdk\\:md\\:order-2{order:2}.clcosdk\\:md\\:hidden{display:none}.clcosdk\\:md\\:size-\\[20rem\\]{width:20rem;height:20rem}.clcosdk\\:md\\:h-9{height:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:h-12{height:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:h-\\[54px\\]{height:54px}.clcosdk\\:md\\:w-9{width:calc(var(--clcosdk-spacing) * 9)}.clcosdk\\:md\\:w-12{width:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.clcosdk\\:md\\:grid-cols-\\[minmax\\(0\\,11fr\\)_minmax\\(0\\,8fr\\)\\]{grid-template-columns:minmax(0,11fr) minmax(0,8fr)}.clcosdk\\:md\\:flex-row{flex-direction:row}.clcosdk\\:md\\:items-center{align-items:center}.clcosdk\\:md\\:items-end{align-items:flex-end}.clcosdk\\:md\\:justify-between{justify-content:space-between}.clcosdk\\:md\\:justify-end{justify-content:flex-end}.clcosdk\\:md\\:gap-3{gap:calc(var(--clcosdk-spacing) * 3)}.clcosdk\\:md\\:gap-6{gap:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:gap-x-12{column-gap:calc(var(--clcosdk-spacing) * 12)}.clcosdk\\:md\\:self-end{align-self:flex-end}.clcosdk\\:md\\:rounded-\\[40px\\]{border-radius:40px}.clcosdk\\:md\\:rounded-card{border-radius:24px}.clcosdk\\:md\\:rounded-dialog{border-radius:32px}.clcosdk\\:md\\:p-4{padding:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:p-6{padding:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:p-8{padding:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:px-6{padding-inline:calc(var(--clcosdk-spacing) * 6)}.clcosdk\\:md\\:px-8{padding-inline:calc(var(--clcosdk-spacing) * 8)}.clcosdk\\:md\\:py-2{padding-block:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-2{padding-right:calc(var(--clcosdk-spacing) * 2)}.clcosdk\\:md\\:pr-4{padding-right:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:pl-4{padding-left:calc(var(--clcosdk-spacing) * 4)}.clcosdk\\:md\\:text-base{font-size:var(--clcosdk-text-base);line-height:var(--tw-leading,var(--clcosdk-text-base--line-height))}.clcosdk\\:md\\:text-\\[14px\\]{font-size:14px}.clcosdk\\:md\\:text-\\[16px\\]{font-size:16px}.clcosdk\\:md\\:text-\\[18px\\]{font-size:18px}.clcosdk\\:md\\:text-\\[28px\\]{font-size:28px}.clcosdk\\:md\\:leading-\\[120\\%\\]{--tw-leading:120%;line-height:120%}.clcosdk\\:md\\:leading-\\[160\\%\\]{--tw-leading:160%;line-height:160%}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:not(:where(.light,.light *)):hover{background-color:#f8717133}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.20\\)\\]:where(.dark,.dark *):hover{background-color:#f8717133}}@media (prefers-color-scheme:dark){@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:not(:where(.light,.light *)):hover{color:#fca5a5}}}@media (hover:hover){.clcosdk\\:dark\\:hover\\:text-\\[\\#fca5a5\\]:where(.dark,.dark *):hover{color:#fca5a5}}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:not(:where(.light,.light *)):active{background-color:#f871714d}}.clcosdk\\:dark\\:active\\:bg-\\[rgba\\(248\\,113\\,113\\,0\\.30\\)\\]:where(.dark,.dark *):active{background-color:#f871714d}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:bg-divider:not(:where(.light,.light *)):active{background-color:var(--color-divider)}}.clcosdk\\:dark\\:active\\:bg-divider:where(.dark,.dark *):active{background-color:var(--color-divider)}@media (prefers-color-scheme:dark){.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:not(:where(.light,.light *)):active{color:#f87171}}.clcosdk\\:dark\\:active\\:text-\\[\\#f87171\\]:where(.dark,.dark *):active{color:#f87171}.clcosdk\\:\\[\\&_circle\\]\\:fill-error-subtle circle{fill:var(--color-error-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-success-subtle circle{fill:var(--color-success-subtle)}.clcosdk\\:\\[\\&_circle\\]\\:fill-warning-subtle circle{fill:var(--color-warning-subtle)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}';
4961
5091
 
4962
5092
  // src/client/CoinListStyleScope.tsx
4963
5093
  var import_jsx_runtime2 = require("react/jsx-runtime");
@@ -7465,7 +7595,7 @@ function stablecoinIconUrl(symbol) {
7465
7595
  }
7466
7596
  }
7467
7597
  function offerIconUrl(offer) {
7468
- return offer.logoUrl === "" ? null : AssetIconUrl(offer.logoUrl);
7598
+ return offer.logoUrl ? AssetIconUrl(offer.logoUrl) : null;
7469
7599
  }
7470
7600
  function tokenLogoUrl(logo, minWidth = 40) {
7471
7601
  switch (logo.kind) {
@@ -7484,6 +7614,20 @@ function tokenLogoUrl(logo, minWidth = 40) {
7484
7614
  }
7485
7615
  }
7486
7616
  }
7617
+ function tokenLogoSrcSet(logo) {
7618
+ switch (logo.kind) {
7619
+ case "VECTOR":
7620
+ return null;
7621
+ case "RASTER": {
7622
+ const candidates = logo.variants.length > 0 ? logo.variants : [logo.original];
7623
+ return [...candidates].sort((a, b) => a.width - b.width).map((image) => `${image.url} ${image.width}w`).join(", ");
7624
+ }
7625
+ default: {
7626
+ const exhaustive = logo;
7627
+ return exhaustive;
7628
+ }
7629
+ }
7630
+ }
7487
7631
  function offerAssetIconUrl(offer, tokenMetadata) {
7488
7632
  return (tokenMetadata ? tokenLogoUrl(tokenMetadata.logo) : null) ?? offerIconUrl(offer);
7489
7633
  }
@@ -8090,8 +8234,12 @@ function useOndoBuyReviewViewModel({
8090
8234
  }
8091
8235
  }, [stepInput.type]);
8092
8236
  const transaction = transactionState.type === "CONTENT" ? transactionState.transaction : null;
8237
+ const offerUntil = (0, import_react17.useMemo)(
8238
+ () => transaction === null ? null : ondoQuoteOfferDeadline(transaction.expiresAt),
8239
+ [transaction]
8240
+ );
8093
8241
  const secondsLeft = useCountdown({
8094
- until: transaction?.expiresAt ?? null,
8242
+ until: offerUntil,
8095
8243
  enabled
8096
8244
  });
8097
8245
  const quoteStatus = toQuoteStatusUi(transactionState, secondsLeft);
@@ -8215,14 +8363,11 @@ function toQuoteStatusUi(state, secondsLeft) {
8215
8363
  message: refreshErrorMessage(state.refreshError)
8216
8364
  };
8217
8365
  }
8218
- if (secondsLeft === null || isTooCloseToExpiry(secondsLeft)) {
8366
+ if (secondsLeft === null || secondsLeft === 0) {
8219
8367
  return { type: "expired" };
8220
8368
  }
8221
8369
  return { type: "valid", expiresInLabel: expiresInLabel(secondsLeft) };
8222
8370
  }
8223
- function isTooCloseToExpiry(secondsLeft) {
8224
- return secondsLeft * 1e3 <= ONDO_QUOTE_EXPIRY_THRESHOLD_MS;
8225
- }
8226
8371
  function expiresInLabel(secondsLeft) {
8227
8372
  const unit = secondsLeft === 1 ? "second" : "seconds";
8228
8373
  return `Quote expires in ${secondsLeft} ${unit}`;
@@ -8714,8 +8859,9 @@ var NO_TOKEN_ADDRESS = EvmContractAddress(
8714
8859
  "0x0000000000000000000000000000000000000000"
8715
8860
  );
8716
8861
  function offerTokenIdentifier(offer, chain) {
8717
- const byChain = offer.tokens.filter((token) => token.chain === chain);
8718
- const asset = byChain.find((token) => token.role === "swap") ?? byChain.find((token) => token.role === "distribution");
8862
+ const asset = offerDisplayTokens(offer).find(
8863
+ (token) => token.chain === chain
8864
+ );
8719
8865
  return asset === void 0 ? null : { chain, address: asset.address };
8720
8866
  }
8721
8867
  function tokenMetadataOf(state) {
@@ -10152,8 +10298,12 @@ function useOndoSellReviewViewModel({
10152
10298
  }
10153
10299
  }, [stepInput.type]);
10154
10300
  const transaction = transactionState.type === "CONTENT" ? transactionState.transaction : null;
10301
+ const offerUntil = (0, import_react26.useMemo)(
10302
+ () => transaction === null ? null : ondoQuoteOfferDeadline(transaction.expiresAt),
10303
+ [transaction]
10304
+ );
10155
10305
  const secondsLeft = useCountdown({
10156
- until: transaction?.expiresAt ?? null,
10306
+ until: offerUntil,
10157
10307
  enabled
10158
10308
  });
10159
10309
  const quoteStatus = toQuoteStatusUi2(transactionState, secondsLeft);
@@ -10282,14 +10432,11 @@ function toQuoteStatusUi2(state, secondsLeft) {
10282
10432
  message: refreshErrorMessage2(state.refreshError)
10283
10433
  };
10284
10434
  }
10285
- if (secondsLeft === null || isTooCloseToExpiry2(secondsLeft)) {
10435
+ if (secondsLeft === null || secondsLeft === 0) {
10286
10436
  return { type: "expired" };
10287
10437
  }
10288
10438
  return { type: "valid", expiresInLabel: expiresInLabel2(secondsLeft) };
10289
10439
  }
10290
- function isTooCloseToExpiry2(secondsLeft) {
10291
- return secondsLeft * 1e3 <= ONDO_QUOTE_EXPIRY_THRESHOLD_MS;
10292
- }
10293
10440
  function expiresInLabel2(secondsLeft) {
10294
10441
  const unit = secondsLeft === 1 ? "second" : "seconds";
10295
10442
  return `Quote expires in ${secondsLeft} ${unit}`;
@@ -12973,11 +13120,11 @@ function CheckoutContainer({
12973
13120
  enabled = true,
12974
13121
  className
12975
13122
  }) {
12976
- return renderOffer(offer.type, {
12977
- ondo: () => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
13123
+ return renderOffer(offer, {
13124
+ ondo: (ondoOffer) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
12978
13125
  OndoCheckoutContainer,
12979
13126
  {
12980
- offer,
13127
+ offer: ondoOffer,
12981
13128
  chain,
12982
13129
  wallets,
12983
13130
  config: config["ondo::swap"],
@@ -12985,10 +13132,10 @@ function CheckoutContainer({
12985
13132
  className
12986
13133
  }
12987
13134
  ),
12988
- superstate: () => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
13135
+ superstate: (superstateOffer) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
12989
13136
  SuperstateSwapCheckoutContainer,
12990
13137
  {
12991
- offer,
13138
+ offer: superstateOffer,
12992
13139
  chain,
12993
13140
  wallets,
12994
13141
  enabled,
@@ -12996,7 +13143,7 @@ function CheckoutContainer({
12996
13143
  className
12997
13144
  }
12998
13145
  ),
12999
- tokenSale: () => config["coinlist::token_sale"].render(offer)
13146
+ tokenSale: (tokenSaleOffer) => config["coinlist::token_sale"].render(tokenSaleOffer)
13000
13147
  });
13001
13148
  }
13002
13149
  function OndoCheckoutContainer({
@@ -13036,16 +13183,16 @@ function OndoCheckoutContainer({
13036
13183
  )
13037
13184
  });
13038
13185
  }
13039
- function renderOffer(type, branches) {
13040
- switch (type) {
13186
+ function renderOffer(offer, branches) {
13187
+ switch (offer.type) {
13041
13188
  case "ondo::swap":
13042
- return branches.ondo();
13189
+ return branches.ondo(offer);
13043
13190
  case "superstate::swap":
13044
- return branches.superstate();
13191
+ return branches.superstate(offer);
13045
13192
  case "coinlist::token_sale":
13046
- return branches.tokenSale();
13193
+ return branches.tokenSale(offer);
13047
13194
  default: {
13048
- const exhaustive = type;
13195
+ const exhaustive = offer;
13049
13196
  return exhaustive;
13050
13197
  }
13051
13198
  }
@@ -13063,6 +13210,58 @@ function renderOndoSide(side, branches) {
13063
13210
  }
13064
13211
  }
13065
13212
 
13213
+ // src/client/components/design-system/ThemedImage.tsx
13214
+ var import_jsx_runtime51 = require("react/jsx-runtime");
13215
+ function ThemedImage({
13216
+ light,
13217
+ dark,
13218
+ sizes,
13219
+ alt,
13220
+ width,
13221
+ height,
13222
+ className,
13223
+ style
13224
+ }) {
13225
+ const shared = { width, height, style };
13226
+ if (!dark) {
13227
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13228
+ "img",
13229
+ {
13230
+ src: light.src,
13231
+ srcSet: light.srcSet,
13232
+ sizes: light.srcSet ? sizes : void 0,
13233
+ className,
13234
+ alt,
13235
+ ...shared
13236
+ }
13237
+ );
13238
+ }
13239
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
13240
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13241
+ "img",
13242
+ {
13243
+ src: light.src,
13244
+ srcSet: light.srcSet,
13245
+ sizes: light.srcSet ? sizes : void 0,
13246
+ className: cn("clcosdk-on-light", className),
13247
+ alt,
13248
+ ...shared
13249
+ }
13250
+ ),
13251
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13252
+ "img",
13253
+ {
13254
+ src: dark.src,
13255
+ srcSet: dark.srcSet,
13256
+ sizes: dark.srcSet ? sizes : void 0,
13257
+ className: cn("clcosdk-on-dark", className),
13258
+ alt,
13259
+ ...shared
13260
+ }
13261
+ )
13262
+ ] });
13263
+ }
13264
+
13066
13265
  // src/client/components/offers/shared/offer-card-keyboard.ts
13067
13266
  function onOfferCardKeyDown(event, onClick) {
13068
13267
  if (event.key !== "Enter" && event.key !== " ") return;
@@ -13071,7 +13270,8 @@ function onOfferCardKeyDown(event, onClick) {
13071
13270
  }
13072
13271
 
13073
13272
  // src/client/components/offers/shared/OfferAssetCard.tsx
13074
- var import_jsx_runtime51 = require("react/jsx-runtime");
13273
+ var import_jsx_runtime52 = require("react/jsx-runtime");
13274
+ var LOGO_SIZES = "(min-width: 768px) 48px, 40px";
13075
13275
  function OfferAssetCard({
13076
13276
  offer,
13077
13277
  onClick,
@@ -13079,7 +13279,7 @@ function OfferAssetCard({
13079
13279
  containerClassName
13080
13280
  }) {
13081
13281
  const interactive = onClick !== void 0;
13082
- const card = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13282
+ const card = /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13083
13283
  "article",
13084
13284
  {
13085
13285
  className: cn(
@@ -13093,11 +13293,13 @@ function OfferAssetCard({
13093
13293
  tabIndex: interactive ? 0 : void 0,
13094
13294
  onClick,
13095
13295
  onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
13096
- children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:items-center clcosdk:gap-2.5 clcosdk:pr-3 clcosdk:md:gap-3 clcosdk:md:pr-4", children: [
13097
- offer.logoUrl ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "clcosdk:h-10 clcosdk:w-10 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-12 clcosdk:md:w-12", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13098
- "img",
13296
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:items-center clcosdk:gap-2.5 clcosdk:pr-3 clcosdk:md:gap-3 clcosdk:md:pr-4", children: [
13297
+ offer.logo ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "clcosdk:h-10 clcosdk:w-10 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-12 clcosdk:md:w-12", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13298
+ ThemedImage,
13099
13299
  {
13100
- src: offer.logoUrl,
13300
+ light: offer.logo.light,
13301
+ dark: offer.logo.dark ?? void 0,
13302
+ sizes: LOGO_SIZES,
13101
13303
  alt: "",
13102
13304
  width: 48,
13103
13305
  height: 48,
@@ -13105,8 +13307,8 @@ function OfferAssetCard({
13105
13307
  style: { maxWidth: "none", width: "100%", height: "100%" }
13106
13308
  }
13107
13309
  ) }) : null,
13108
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:flex-col clcosdk:items-start clcosdk:justify-center", children: [
13109
- offer.name ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
13310
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:flex-col clcosdk:items-start clcosdk:justify-center", children: [
13311
+ offer.name ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13110
13312
  "h2",
13111
13313
  {
13112
13314
  className: cn(
@@ -13115,13 +13317,13 @@ function OfferAssetCard({
13115
13317
  children: offer.name
13116
13318
  }
13117
13319
  ) : null,
13118
- offer.symbol ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "clcosdk:w-full clcosdk:truncate clcosdk:text-[13px] clcosdk:leading-[150%] clcosdk:font-normal clcosdk:text-text-secondary clcosdk:md:text-[14px]", children: offer.symbol }) : null
13320
+ offer.symbol ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: "clcosdk:w-full clcosdk:truncate clcosdk:text-[13px] clcosdk:leading-[150%] clcosdk:font-normal clcosdk:text-text-secondary clcosdk:md:text-[14px]", children: offer.symbol }) : null
13119
13321
  ] })
13120
13322
  ] })
13121
13323
  }
13122
13324
  );
13123
- const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: containerClassName, children: card }) : card;
13124
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(CoinListStyleScope, { children: wrapped });
13325
+ const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: containerClassName, children: card }) : card;
13326
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CoinListStyleScope, { children: wrapped });
13125
13327
  }
13126
13328
  function cardActionLabel(offer) {
13127
13329
  const parts = [offer.name, offer.symbol].filter(Boolean);
@@ -13129,7 +13331,7 @@ function cardActionLabel(offer) {
13129
13331
  }
13130
13332
 
13131
13333
  // src/client/components/offers/grid/OffersAssetGrid.tsx
13132
- var import_jsx_runtime52 = require("react/jsx-runtime");
13334
+ var import_jsx_runtime53 = require("react/jsx-runtime");
13133
13335
  var DEFAULT_MAX_COLUMNS = 3;
13134
13336
  function OffersAssetGrid({
13135
13337
  offers,
@@ -13144,14 +13346,14 @@ function OffersAssetGrid({
13144
13346
  );
13145
13347
  const maxGridWidth = `calc(${cols} * 20rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
13146
13348
  const interactive = onOfferClick !== void 0;
13147
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13349
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13148
13350
  "div",
13149
13351
  {
13150
13352
  className: cn(
13151
13353
  "clcosdk:flex clcosdk:w-full clcosdk:justify-center",
13152
13354
  containerClassName
13153
13355
  ),
13154
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13356
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13155
13357
  "div",
13156
13358
  {
13157
13359
  className: cn(
@@ -13161,7 +13363,7 @@ function OffersAssetGrid({
13161
13363
  className
13162
13364
  ),
13163
13365
  style: { maxWidth: maxGridWidth },
13164
- children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
13366
+ children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13165
13367
  OfferAssetCard,
13166
13368
  {
13167
13369
  offer,
@@ -13203,7 +13405,9 @@ function saleCardStatus({
13203
13405
  }
13204
13406
 
13205
13407
  // src/client/components/offers/shared/OfferSaleCard.tsx
13206
- var import_jsx_runtime53 = require("react/jsx-runtime");
13408
+ var import_jsx_runtime54 = require("react/jsx-runtime");
13409
+ var HEADER_LOGO_SIZES = "(min-width: 768px) 36px, 32px";
13410
+ var WATERMARK_SIZES = "(min-width: 768px) 20rem, 15rem";
13207
13411
  function OfferSaleCard({
13208
13412
  offer,
13209
13413
  onClick,
@@ -13218,7 +13422,8 @@ function OfferSaleCard({
13218
13422
  secondsLeft
13219
13423
  });
13220
13424
  const interactive = onClick !== void 0;
13221
- const card = /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
13425
+ const logo = offer.logo ? offer.logo.dark ?? offer.logo.light : null;
13426
+ const card = /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13222
13427
  "article",
13223
13428
  {
13224
13429
  className: cn(
@@ -13233,16 +13438,17 @@ function OfferSaleCard({
13233
13438
  onClick,
13234
13439
  onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
13235
13440
  children: [
13236
- offer.logoUrl ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13441
+ logo ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13237
13442
  "div",
13238
13443
  {
13239
13444
  "aria-hidden": "true",
13240
13445
  className: "clcosdk:pointer-events-none clcosdk:absolute clcosdk:top-1/2 clcosdk:right-[-14%] clcosdk:z-0 clcosdk:size-[15rem] clcosdk:-translate-y-1/2 clcosdk:md:right-[-10%] clcosdk:md:size-[20rem]",
13241
13446
  style: { mixBlendMode: "overlay" },
13242
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13243
- "img",
13447
+ children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13448
+ ThemedImage,
13244
13449
  {
13245
- src: offer.logoUrl,
13450
+ light: logo,
13451
+ sizes: WATERMARK_SIZES,
13246
13452
  alt: "",
13247
13453
  className: "clcosdk:size-full clcosdk:rounded-full clcosdk:object-cover",
13248
13454
  style: { maxWidth: "none", width: "100%", height: "100%" }
@@ -13250,12 +13456,13 @@ function OfferSaleCard({
13250
13456
  )
13251
13457
  }
13252
13458
  ) : null,
13253
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:flex clcosdk:flex-col clcosdk:gap-2 clcosdk:md:gap-3", children: [
13254
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2.5 clcosdk:md:gap-3", children: [
13255
- offer.logoUrl ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "clcosdk:h-8 clcosdk:w-8 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-9 clcosdk:md:w-9", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13256
- "img",
13459
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:flex clcosdk:flex-col clcosdk:gap-2 clcosdk:md:gap-3", children: [
13460
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2.5 clcosdk:md:gap-3", children: [
13461
+ logo ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "clcosdk:h-8 clcosdk:w-8 clcosdk:shrink-0 clcosdk:overflow-hidden clcosdk:rounded-full clcosdk:md:h-9 clcosdk:md:w-9", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13462
+ ThemedImage,
13257
13463
  {
13258
- src: offer.logoUrl,
13464
+ light: logo,
13465
+ sizes: HEADER_LOGO_SIZES,
13259
13466
  alt: "",
13260
13467
  width: 36,
13261
13468
  height: 36,
@@ -13263,7 +13470,7 @@ function OfferSaleCard({
13263
13470
  style: { maxWidth: "none", width: "100%", height: "100%" }
13264
13471
  }
13265
13472
  ) }) : null,
13266
- offer.name ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13473
+ offer.name ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13267
13474
  "h2",
13268
13475
  {
13269
13476
  className: cn(
@@ -13273,7 +13480,7 @@ function OfferSaleCard({
13273
13480
  }
13274
13481
  ) : null
13275
13482
  ] }),
13276
- offer.tagline ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13483
+ offer.tagline ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13277
13484
  "p",
13278
13485
  {
13279
13486
  className: cn(
@@ -13284,20 +13491,20 @@ function OfferSaleCard({
13284
13491
  }
13285
13492
  ) : null
13286
13493
  ] }),
13287
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:mt-auto clcosdk:flex clcosdk:h-11 clcosdk:w-full clcosdk:min-w-0 clcosdk:items-center clcosdk:justify-between clcosdk:gap-2 clcosdk:rounded-full clcosdk:border clcosdk:border-sale-card-chrome-border clcosdk:bg-sale-card-chrome-bg clcosdk:py-1.5 clcosdk:pr-1.5 clcosdk:pl-3 clcosdk:md:h-[54px] clcosdk:md:gap-3 clcosdk:md:py-2 clcosdk:md:pr-2 clcosdk:md:pl-4", children: [
13288
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2 clcosdk:md:gap-3", children: [
13289
- status.phase === "live" ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
13494
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:mt-auto clcosdk:flex clcosdk:h-11 clcosdk:w-full clcosdk:min-w-0 clcosdk:items-center clcosdk:justify-between clcosdk:gap-2 clcosdk:rounded-full clcosdk:border clcosdk:border-sale-card-chrome-border clcosdk:bg-sale-card-chrome-bg clcosdk:py-1.5 clcosdk:pr-1.5 clcosdk:pl-3 clcosdk:md:h-[54px] clcosdk:md:gap-3 clcosdk:md:py-2 clcosdk:md:pr-2 clcosdk:md:pl-4", children: [
13495
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2 clcosdk:md:gap-3", children: [
13496
+ status.phase === "live" ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13290
13497
  "span",
13291
13498
  {
13292
13499
  className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-2 clcosdk:shrink-0",
13293
13500
  "aria-hidden": "true",
13294
13501
  children: [
13295
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "clcosdk-status-dot-ping clcosdk:absolute clcosdk:inset-0 clcosdk:rounded-full clcosdk:bg-positive" }),
13296
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-full clcosdk:rounded-full clcosdk:bg-positive" })
13502
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "clcosdk-status-dot-ping clcosdk:absolute clcosdk:inset-0 clcosdk:rounded-full clcosdk:bg-positive" }),
13503
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-full clcosdk:rounded-full clcosdk:bg-positive" })
13297
13504
  ]
13298
13505
  }
13299
13506
  ) : null,
13300
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13507
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13301
13508
  "p",
13302
13509
  {
13303
13510
  className: cn(
@@ -13308,7 +13515,7 @@ function OfferSaleCard({
13308
13515
  }
13309
13516
  )
13310
13517
  ] }),
13311
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
13518
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13312
13519
  "span",
13313
13520
  {
13314
13521
  className: cn(
@@ -13318,8 +13525,8 @@ function OfferSaleCard({
13318
13525
  "aria-hidden": "true",
13319
13526
  children: [
13320
13527
  "View",
13321
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "clcosdk:max-md:hidden", children: " offer" }),
13322
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react13.ArrowRight, { className: "clcosdk:size-4", "aria-hidden": true })
13528
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "clcosdk:max-md:hidden", children: " offer" }),
13529
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react13.ArrowRight, { className: "clcosdk:size-4", "aria-hidden": true })
13323
13530
  ]
13324
13531
  }
13325
13532
  )
@@ -13327,8 +13534,8 @@ function OfferSaleCard({
13327
13534
  ]
13328
13535
  }
13329
13536
  );
13330
- const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: containerClassName, children: card }) : card;
13331
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CoinListStyleScope, { children: wrapped });
13537
+ const wrapped = containerClassName ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: containerClassName, children: card }) : card;
13538
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(CoinListStyleScope, { children: wrapped });
13332
13539
  }
13333
13540
  var SALE_PHASE_LABEL = {
13334
13541
  upcoming: "Upcoming",
@@ -13341,10 +13548,10 @@ function cardActionLabel2(offer, phase) {
13341
13548
  }
13342
13549
 
13343
13550
  // src/client/components/offers/grid/OffersGridView.tsx
13344
- var import_jsx_runtime54 = require("react/jsx-runtime");
13551
+ var import_jsx_runtime55 = require("react/jsx-runtime");
13345
13552
  var DEFAULT_MAX_COLUMNS2 = 2;
13346
13553
  function OffersGridView(props) {
13347
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(OffersGridViewBody, { ...props }) });
13554
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(OffersGridViewBody, { ...props }) });
13348
13555
  }
13349
13556
  function OffersGridViewBody({
13350
13557
  state,
@@ -13358,13 +13565,13 @@ function OffersGridViewBody({
13358
13565
  }) {
13359
13566
  switch (state.type) {
13360
13567
  case "loading":
13361
- return loading ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(LoadingState, {});
13568
+ return loading ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(LoadingState, {});
13362
13569
  case "error":
13363
- return error ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ErrorState, { message: state.message });
13570
+ return error ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ErrorState, { message: state.message });
13364
13571
  case "empty":
13365
- return emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(EmptyState, {});
13572
+ return emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(EmptyState, {});
13366
13573
  case "content":
13367
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13574
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13368
13575
  OffersGridContent,
13369
13576
  {
13370
13577
  offers: state.offers,
@@ -13394,14 +13601,14 @@ function OffersGridContent({
13394
13601
  Math.max(1, maxColumns ?? DEFAULT_MAX_COLUMNS2)
13395
13602
  );
13396
13603
  const maxGridWidth = `calc(${cols} * 28rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
13397
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13604
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13398
13605
  "div",
13399
13606
  {
13400
13607
  className: cn(
13401
13608
  "clcosdk:flex clcosdk:w-full clcosdk:justify-center",
13402
13609
  containerClassName
13403
13610
  ),
13404
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13611
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13405
13612
  "div",
13406
13613
  {
13407
13614
  className: cn(
@@ -13410,7 +13617,7 @@ function OffersGridContent({
13410
13617
  className
13411
13618
  ),
13412
13619
  style: { maxWidth: maxGridWidth },
13413
- children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13620
+ children: offers.map((offer) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13414
13621
  OfferSaleCard,
13415
13622
  {
13416
13623
  offer,
@@ -13424,17 +13631,17 @@ function OffersGridContent({
13424
13631
  );
13425
13632
  }
13426
13633
  function LoadingState() {
13427
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13634
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13428
13635
  "output",
13429
13636
  {
13430
13637
  "aria-live": "polite",
13431
13638
  className: "clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center clcosdk:rounded-2xl clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6",
13432
- children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading offers..." })
13639
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading offers..." })
13433
13640
  }
13434
13641
  );
13435
13642
  }
13436
13643
  function ErrorState({ message }) {
13437
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13644
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13438
13645
  AlertBanner,
13439
13646
  {
13440
13647
  variant: "error",
@@ -13445,13 +13652,13 @@ function ErrorState({ message }) {
13445
13652
  );
13446
13653
  }
13447
13654
  function EmptyState() {
13448
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
13655
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
13449
13656
  "output",
13450
13657
  {
13451
13658
  "aria-live": "polite",
13452
13659
  className: "clcosdk:flex clcosdk:min-h-40 clcosdk:flex-col clcosdk:items-center clcosdk:justify-center clcosdk:gap-2 clcosdk:rounded-2xl clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6 clcosdk:text-center",
13453
13660
  children: [
13454
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
13661
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13455
13662
  "p",
13456
13663
  {
13457
13664
  className: cn(
@@ -13461,14 +13668,14 @@ function EmptyState() {
13461
13668
  children: "No offers available"
13462
13669
  }
13463
13670
  ),
13464
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"), children: "Check back soon for upcoming opportunities." })
13671
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"), children: "Check back soon for upcoming opportunities." })
13465
13672
  ]
13466
13673
  }
13467
13674
  );
13468
13675
  }
13469
13676
 
13470
13677
  // src/client/hooks/offers/grid/useOffersGridViewModel.ts
13471
- var import_react37 = require("react");
13678
+ var import_react38 = require("react");
13472
13679
 
13473
13680
  // src/client/hooks/offers/data/useOffers.ts
13474
13681
  var import_react36 = require("react");
@@ -13526,36 +13733,147 @@ function useOffers(options = {}) {
13526
13733
  return { offersState };
13527
13734
  }
13528
13735
 
13736
+ // src/client/hooks/offers/shared/offer-logo.types.ts
13737
+ var CARD_LOGO_WIDTH = 96;
13738
+ var OfferLogoUi = {
13739
+ /**
13740
+ * The registry's logo for the token an offer is about, or the offer's own
13741
+ * artwork otherwise, or `null` when neither exists.
13742
+ *
13743
+ * The registry wins when both exist because it is the token's real artwork
13744
+ * where `Offer.logoUrl` is catalogue artwork, and because a swap publishes
13745
+ * without artwork more often than not - which is why `logoUrl` is `null`
13746
+ * on the swap variants.
13747
+ */
13748
+ fromOffer: (offer, tokenMetadata) => {
13749
+ const light = tokenMetadata ? logoImage(tokenMetadata.logo) : null;
13750
+ if (light !== null) {
13751
+ const dark = tokenMetadata?.logoDark ? logoImage(tokenMetadata.logoDark) : null;
13752
+ return { light, dark };
13753
+ }
13754
+ return offer.logoUrl ? { light: { src: offer.logoUrl }, dark: null } : null;
13755
+ }
13756
+ };
13757
+ function logoImage(logo) {
13758
+ const src = tokenLogoUrl(logo, CARD_LOGO_WIDTH);
13759
+ if (src === null) {
13760
+ return null;
13761
+ }
13762
+ const srcSet = tokenLogoSrcSet(logo);
13763
+ return srcSet === null ? { src } : { src, srcSet };
13764
+ }
13765
+
13529
13766
  // src/client/hooks/offers/shared/offer-sale-card.types.ts
13530
13767
  var OfferSaleCardUi = {
13531
- fromOffer: (offer) => ({
13768
+ /**
13769
+ * `tokenMetadata` is the registry's entry for the token the offer is about
13770
+ * (`TokenRegistrySnapshot.forOffer`), or `null` when it lists none. The
13771
+ * registry names win over the offer's own where both exist: they are the
13772
+ * token's canonical name and artwork, where the offer's are catalogue copy.
13773
+ */
13774
+ fromOffer: (offer, tokenMetadata = null) => ({
13532
13775
  id: offer.id,
13533
- tagline: offer.tagline,
13534
- logoUrl: offer.logoUrl,
13535
- startsAt: offer.startsAt,
13776
+ ...tokenMetadata ? { name: tokenMetadata.name } : {},
13777
+ ...saleWindow(offer),
13778
+ logo: OfferLogoUi.fromOffer(offer, tokenMetadata),
13536
13779
  endsAt: offer.endsAt
13537
13780
  }),
13538
- fromDetail: (detail) => ({
13781
+ fromDetail: (detail, tokenMetadata = null) => ({
13539
13782
  id: detail.id,
13540
- name: detail.name,
13541
- tagline: detail.tagline,
13542
- logoUrl: detail.logoUrl,
13543
- startsAt: detail.startsAt,
13783
+ name: tokenMetadata?.name ?? detail.name,
13784
+ ...saleWindow(detail),
13785
+ logo: OfferLogoUi.fromOffer(detail, tokenMetadata),
13544
13786
  endsAt: detail.endsAt
13545
13787
  })
13546
13788
  };
13789
+ function saleWindow(offer) {
13790
+ switch (offer.type) {
13791
+ case "coinlist::token_sale":
13792
+ case "superstate::swap":
13793
+ return { tagline: offer.tagline, startsAt: offer.startsAt };
13794
+ case "ondo::swap":
13795
+ return { tagline: null, startsAt: null };
13796
+ default: {
13797
+ const exhaustive = offer;
13798
+ return exhaustive;
13799
+ }
13800
+ }
13801
+ }
13802
+
13803
+ // src/client/hooks/shared/useTokenRegistry.ts
13804
+ var import_react37 = require("react");
13805
+ var DISABLED_STATE2 = { type: "DISABLED" };
13806
+ var LOADING_STATE4 = { type: "LOADING" };
13807
+ function useTokenRegistry(options = {}) {
13808
+ const { data, enabled = true } = options;
13809
+ const { coinlist, isReady } = useCoinList();
13810
+ const log = useLogger("useTokenRegistry");
13811
+ const [state, setState] = (0, import_react37.useState)(
13812
+ () => data !== void 0 ? { type: "CONTENT", registry: TokenRegistrySnapshot.fromTokens(data) } : LOADING_STATE4
13813
+ );
13814
+ const [refetchCount, setRefetchCount] = (0, import_react37.useState)(0);
13815
+ const refetch = (0, import_react37.useCallback)(() => {
13816
+ setRefetchCount((count) => count + 1);
13817
+ }, []);
13818
+ (0, import_react37.useEffect)(() => {
13819
+ let isCancelled = false;
13820
+ const seedActive = data !== void 0 && refetchCount === 0;
13821
+ if (!isReady || !enabled || seedActive) {
13822
+ return () => {
13823
+ isCancelled = true;
13824
+ };
13825
+ }
13826
+ setState(LOADING_STATE4);
13827
+ coinlist.tokens.list().then((tokens) => {
13828
+ if (!isCancelled) {
13829
+ log.debug(() => ({
13830
+ msg: "settled",
13831
+ fields: { state: "CONTENT", count: tokens.length }
13832
+ }));
13833
+ setState({
13834
+ type: "CONTENT",
13835
+ registry: TokenRegistrySnapshot.fromTokens(tokens)
13836
+ });
13837
+ }
13838
+ }).catch((error) => {
13839
+ if (!isCancelled) {
13840
+ log.failure(
13841
+ () => ({
13842
+ msg: "settled",
13843
+ fields: { state: "ERROR", reason: "generic-error" }
13844
+ }),
13845
+ error
13846
+ );
13847
+ setState({ type: "ERROR", reason: "generic-error" });
13848
+ }
13849
+ });
13850
+ return () => {
13851
+ isCancelled = true;
13852
+ };
13853
+ }, [coinlist, isReady, enabled, data, refetchCount, log]);
13854
+ return {
13855
+ // LOADING would be a lie while disabled: nothing is in flight and nothing
13856
+ // will replace it. Settled states (a seed, a previous answer) survive.
13857
+ state: !enabled && state.type === "LOADING" ? DISABLED_STATE2 : state,
13858
+ refetch
13859
+ };
13860
+ }
13547
13861
 
13548
13862
  // src/client/hooks/offers/grid/useOffersGridViewModel.ts
13549
13863
  var NOT_AUTHENTICATED_MESSAGE = "Sign in to view available offers.";
13550
13864
  var GENERIC_ERROR_MESSAGE = "Unable to load offers right now. Please try again.";
13551
13865
  function useOffersGridViewModel(options = {}) {
13552
13866
  const { data, onOfferClick, enabled = true } = options;
13553
- const { offersState } = useOffers({ data, enabled });
13554
- const state = (0, import_react37.useMemo)(
13555
- () => toUiState(offersState, onOfferClick !== void 0),
13556
- [offersState, onOfferClick]
13867
+ const { offersState } = useOffers({ data: data?.offers, enabled });
13868
+ const { state: registryState } = useTokenRegistry({
13869
+ data: data?.tokens,
13870
+ enabled
13871
+ });
13872
+ const state = (0, import_react38.useMemo)(
13873
+ () => toUiState(offersState, registryState, onOfferClick !== void 0),
13874
+ [offersState, registryState, onOfferClick]
13557
13875
  );
13558
- const onEvent = (0, import_react37.useCallback)(
13876
+ const onEvent = (0, import_react38.useCallback)(
13559
13877
  (event) => {
13560
13878
  switch (event.type) {
13561
13879
  case "ON_OFFER_CLICK": {
@@ -13578,7 +13896,7 @@ function useOffersGridViewModel(options = {}) {
13578
13896
  );
13579
13897
  return { state, onEvent };
13580
13898
  }
13581
- function toUiState(offersState, interactive) {
13899
+ function toUiState(offersState, registryState, interactive) {
13582
13900
  switch (offersState.type) {
13583
13901
  case "LOADING":
13584
13902
  return { type: "loading" };
@@ -13591,9 +13909,18 @@ function toUiState(offersState, interactive) {
13591
13909
  if (offersState.offers.length === 0) {
13592
13910
  return { type: "empty" };
13593
13911
  }
13912
+ if (registryState.type === "LOADING") {
13913
+ return { type: "loading" };
13914
+ }
13915
+ const registry = registryState.type === "CONTENT" ? registryState.registry : null;
13594
13916
  return {
13595
13917
  type: "content",
13596
- offers: offersState.offers.map(OfferSaleCardUi.fromOffer),
13918
+ offers: offersState.offers.map(
13919
+ (offer) => OfferSaleCardUi.fromOffer(
13920
+ offer,
13921
+ registry ? TokenRegistrySnapshot.forOffer(registry, offer) : null
13922
+ )
13923
+ ),
13597
13924
  interactive
13598
13925
  };
13599
13926
  }
@@ -13605,7 +13932,7 @@ function toUiState(offersState, interactive) {
13605
13932
  }
13606
13933
 
13607
13934
  // src/client/components/offers/grid/OffersGridContainer.tsx
13608
- var import_jsx_runtime55 = require("react/jsx-runtime");
13935
+ var import_jsx_runtime56 = require("react/jsx-runtime");
13609
13936
  function OffersGridContainer({
13610
13937
  data,
13611
13938
  onOfferClick,
@@ -13617,17 +13944,17 @@ function OffersGridContainer({
13617
13944
  onOfferClick,
13618
13945
  enabled
13619
13946
  });
13620
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(OffersGridView, { state, onEvent, ...viewProps });
13947
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(OffersGridView, { state, onEvent, ...viewProps });
13621
13948
  }
13622
13949
 
13623
13950
  // src/client/components/requirements/ConnectedWalletList.tsx
13624
- var import_react38 = require("react");
13625
- var import_jsx_runtime56 = require("react/jsx-runtime");
13951
+ var import_react39 = require("react");
13952
+ var import_jsx_runtime57 = require("react/jsx-runtime");
13626
13953
  function ConnectedWalletRow({
13627
13954
  wallet,
13628
13955
  onRemove
13629
13956
  }) {
13630
- const [state, setState] = (0, import_react38.useState)("idle");
13957
+ const [state, setState] = (0, import_react39.useState)("idle");
13631
13958
  const remove = async () => {
13632
13959
  if (!onRemove) return;
13633
13960
  setState("removing");
@@ -13638,8 +13965,8 @@ function ConnectedWalletRow({
13638
13965
  setState("error");
13639
13966
  }
13640
13967
  };
13641
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "clcosdk:flex clcosdk:min-h-9 clcosdk:flex-wrap clcosdk:items-center clcosdk:justify-between clcosdk:gap-2", children: [
13642
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
13968
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "clcosdk:flex clcosdk:min-h-9 clcosdk:flex-wrap clcosdk:items-center clcosdk:justify-between clcosdk:gap-2", children: [
13969
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13643
13970
  "span",
13644
13971
  {
13645
13972
  title: wallet.address,
@@ -13650,16 +13977,16 @@ function ConnectedWalletRow({
13650
13977
  children: wallet.shortAddress
13651
13978
  }
13652
13979
  ),
13653
- onRemove != null && (state === "confirming" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13654
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
13980
+ onRemove != null && (state === "confirming" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13981
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13655
13982
  "span",
13656
13983
  {
13657
13984
  className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"),
13658
13985
  children: "Remove?"
13659
13986
  }
13660
13987
  ),
13661
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ClButton, { size: "sm", variant: "destructive", onClick: remove, children: "Remove" }),
13662
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
13988
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ClButton, { size: "sm", variant: "destructive", onClick: remove, children: "Remove" }),
13989
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13663
13990
  ClButton,
13664
13991
  {
13665
13992
  size: "sm",
@@ -13668,9 +13995,9 @@ function ConnectedWalletRow({
13668
13995
  children: "Cancel"
13669
13996
  }
13670
13997
  )
13671
- ] }) : state === "error" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13672
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: cn(typeClasses.subhead, "clcosdk:text-error"), children: "Couldn't remove." }),
13673
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
13998
+ ] }) : state === "error" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
13999
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: cn(typeClasses.subhead, "clcosdk:text-error"), children: "Couldn't remove." }),
14000
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13674
14001
  ClButton,
13675
14002
  {
13676
14003
  size: "sm",
@@ -13679,7 +14006,7 @@ function ConnectedWalletRow({
13679
14006
  children: "Try again"
13680
14007
  }
13681
14008
  )
13682
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14009
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13683
14010
  ClButton,
13684
14011
  {
13685
14012
  size: "sm",
@@ -13692,7 +14019,7 @@ function ConnectedWalletRow({
13692
14019
  ] });
13693
14020
  }
13694
14021
  function ConnectedWalletList(props) {
13695
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ConnectedWalletListBody, { ...props }) });
14022
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ConnectedWalletListBody, { ...props }) });
13696
14023
  }
13697
14024
  function ConnectedWalletListBody({
13698
14025
  wallets,
@@ -13702,18 +14029,18 @@ function ConnectedWalletListBody({
13702
14029
  status = "ready",
13703
14030
  className
13704
14031
  }) {
13705
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
14032
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
13706
14033
  "div",
13707
14034
  {
13708
14035
  className: cn("clcosdk:flex clcosdk:flex-col clcosdk:gap-2", className),
13709
14036
  children: [
13710
- status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(AlertBanner, { variant: "info", content: "Loading your connected wallets\u2026" }) : status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14037
+ status === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AlertBanner, { variant: "info", content: "Loading your connected wallets\u2026" }) : status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13711
14038
  AlertBanner,
13712
14039
  {
13713
14040
  variant: "error",
13714
14041
  content: "Couldn't load your connected wallets."
13715
14042
  }
13716
- ) : wallets.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(AlertBanner, { variant: "info", content: "No wallets connected yet." }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: wallets.map((wallet) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14043
+ ) : wallets.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AlertBanner, { variant: "info", content: "No wallets connected yet." }) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: wallets.map((wallet) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13717
14044
  ConnectedWalletRow,
13718
14045
  {
13719
14046
  wallet,
@@ -13721,7 +14048,7 @@ function ConnectedWalletListBody({
13721
14048
  },
13722
14049
  wallet.id
13723
14050
  )) }),
13724
- onAdd != null && status !== "loading" && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
14051
+ onAdd != null && status !== "loading" && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
13725
14052
  ClButton,
13726
14053
  {
13727
14054
  size: "sm",
@@ -13738,9 +14065,9 @@ function ConnectedWalletListBody({
13738
14065
 
13739
14066
  // src/client/components/requirements/identity-verification/IdentityVerificationView.tsx
13740
14067
  var import_websdk_react = __toESM(require("@sumsub/websdk-react"), 1);
13741
- var import_jsx_runtime57 = require("react/jsx-runtime");
14068
+ var import_jsx_runtime58 = require("react/jsx-runtime");
13742
14069
  function IdentityVerificationView(props) {
13743
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(IdentityVerificationViewBody, { ...props }) });
14070
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(IdentityVerificationViewBody, { ...props }) });
13744
14071
  }
13745
14072
  function IdentityVerificationViewBody({
13746
14073
  state,
@@ -13749,7 +14076,7 @@ function IdentityVerificationViewBody({
13749
14076
  }) {
13750
14077
  switch (state.type) {
13751
14078
  case "loading":
13752
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
14079
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
13753
14080
  "output",
13754
14081
  {
13755
14082
  "aria-live": "polite",
@@ -13757,11 +14084,11 @@ function IdentityVerificationViewBody({
13757
14084
  "clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center",
13758
14085
  className
13759
14086
  ),
13760
- children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading identity verification..." })
14087
+ children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading identity verification..." })
13761
14088
  }
13762
14089
  );
13763
14090
  case "error":
13764
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
14091
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
13765
14092
  "div",
13766
14093
  {
13767
14094
  className: cn(
@@ -13769,13 +14096,13 @@ function IdentityVerificationViewBody({
13769
14096
  className
13770
14097
  ),
13771
14098
  children: [
13772
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AlertBanner, { variant: "error", icon: true, content: state.message }),
13773
- state.retryable && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(ClButton, { size: "sm", onClick: () => onEvent({ type: "ON_RETRY" }), children: "Try again" })
14099
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(AlertBanner, { variant: "error", icon: true, content: state.message }),
14100
+ state.retryable && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ClButton, { size: "sm", onClick: () => onEvent({ type: "ON_RETRY" }), children: "Try again" })
13774
14101
  ]
13775
14102
  }
13776
14103
  );
13777
14104
  case "ready":
13778
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: cn("clcosdk:w-full", className), children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
14105
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: cn("clcosdk:w-full", className), children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
13779
14106
  import_websdk_react.default,
13780
14107
  {
13781
14108
  accessToken: state.accessToken,
@@ -13815,25 +14142,25 @@ function toError(error) {
13815
14142
  }
13816
14143
 
13817
14144
  // src/client/hooks/requirements/identity-verification/useIdentityVerificationViewModel.ts
13818
- var import_react40 = require("react");
14145
+ var import_react41 = require("react");
13819
14146
 
13820
14147
  // src/client/hooks/requirements/data/useKycToken.ts
13821
- var import_react39 = require("react");
14148
+ var import_react40 = require("react");
13822
14149
  var IDLE_STATE = { type: "IDLE" };
13823
- var LOADING_STATE4 = { type: "LOADING" };
14150
+ var LOADING_STATE5 = { type: "LOADING" };
13824
14151
  function useKycToken(levelName, reset) {
13825
14152
  const { coinlist } = useCoinList();
13826
14153
  const log = useLogger("useKycToken");
13827
- const [kycTokenState, setKycTokenState] = (0, import_react39.useState)(IDLE_STATE);
13828
- const resetPendingRef = (0, import_react39.useRef)(reset === true);
13829
- const tokenIssuedRef = (0, import_react39.useRef)(false);
13830
- (0, import_react39.useEffect)(() => {
14154
+ const [kycTokenState, setKycTokenState] = (0, import_react40.useState)(IDLE_STATE);
14155
+ const resetPendingRef = (0, import_react40.useRef)(reset === true);
14156
+ const tokenIssuedRef = (0, import_react40.useRef)(false);
14157
+ (0, import_react40.useEffect)(() => {
13831
14158
  if (!tokenIssuedRef.current) {
13832
14159
  resetPendingRef.current = reset === true;
13833
14160
  }
13834
14161
  }, [reset]);
13835
- const fetchToken = (0, import_react39.useCallback)(async () => {
13836
- setKycTokenState(LOADING_STATE4);
14162
+ const fetchToken = (0, import_react40.useCallback)(async () => {
14163
+ setKycTokenState(LOADING_STATE5);
13837
14164
  try {
13838
14165
  const kycToken = await coinlist.requirements.createKycToken({
13839
14166
  levelName,
@@ -13866,8 +14193,8 @@ var GENERIC_ERROR_MESSAGE2 = "Unable to start identity verification right now. P
13866
14193
  function useIdentityVerificationViewModel(options = {}) {
13867
14194
  const { levelName, reset, locale, onSubmitted, onError } = options;
13868
14195
  const { kycTokenState, fetchToken } = useKycToken(levelName, reset);
13869
- const fetchedRef = (0, import_react40.useRef)(false);
13870
- (0, import_react40.useEffect)(() => {
14196
+ const fetchedRef = (0, import_react41.useRef)(false);
14197
+ (0, import_react41.useEffect)(() => {
13871
14198
  if (fetchedRef.current) {
13872
14199
  return;
13873
14200
  }
@@ -13875,7 +14202,7 @@ function useIdentityVerificationViewModel(options = {}) {
13875
14202
  fetchToken().catch(() => {
13876
14203
  });
13877
14204
  }, [fetchToken]);
13878
- const state = (0, import_react40.useMemo)(() => {
14205
+ const state = (0, import_react41.useMemo)(() => {
13879
14206
  switch (kycTokenState.type) {
13880
14207
  case "IDLE":
13881
14208
  case "LOADING":
@@ -13901,7 +14228,7 @@ function useIdentityVerificationViewModel(options = {}) {
13901
14228
  }
13902
14229
  }
13903
14230
  }, [kycTokenState, locale, fetchToken]);
13904
- const onEvent = (0, import_react40.useCallback)(
14231
+ const onEvent = (0, import_react41.useCallback)(
13905
14232
  (event) => {
13906
14233
  switch (event.type) {
13907
14234
  case "ON_RETRY":
@@ -13926,7 +14253,7 @@ function useIdentityVerificationViewModel(options = {}) {
13926
14253
  }
13927
14254
 
13928
14255
  // src/client/components/requirements/identity-verification/IdentityVerificationContainer.tsx
13929
- var import_jsx_runtime58 = require("react/jsx-runtime");
14256
+ var import_jsx_runtime59 = require("react/jsx-runtime");
13930
14257
  function IdentityVerificationContainer({
13931
14258
  levelName,
13932
14259
  reset,
@@ -13942,7 +14269,7 @@ function IdentityVerificationContainer({
13942
14269
  onSubmitted,
13943
14270
  onError
13944
14271
  });
13945
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
14272
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
13946
14273
  IdentityVerificationView,
13947
14274
  {
13948
14275
  state,
@@ -13957,7 +14284,7 @@ var import_lucide_react15 = require("lucide-react");
13957
14284
 
13958
14285
  // src/client/components/design-system/StepStatusIcon.tsx
13959
14286
  var import_lucide_react14 = require("lucide-react");
13960
- var import_jsx_runtime59 = require("react/jsx-runtime");
14287
+ var import_jsx_runtime60 = require("react/jsx-runtime");
13961
14288
  var statusConfig = {
13962
14289
  required: {
13963
14290
  Icon: import_lucide_react14.Info,
@@ -13982,7 +14309,7 @@ var statusConfig = {
13982
14309
  };
13983
14310
  function StepStatusIcon({ status, className }) {
13984
14311
  const { Icon, colorClass, fillClass } = statusConfig[status];
13985
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
14312
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
13986
14313
  Icon,
13987
14314
  {
13988
14315
  className: cn(
@@ -13997,7 +14324,7 @@ function StepStatusIcon({ status, className }) {
13997
14324
  }
13998
14325
 
13999
14326
  // src/client/components/requirements/RequirementItem.tsx
14000
- var import_jsx_runtime60 = require("react/jsx-runtime");
14327
+ var import_jsx_runtime61 = require("react/jsx-runtime");
14001
14328
  function VerificationActionZone({
14002
14329
  status,
14003
14330
  onAction,
@@ -14006,9 +14333,9 @@ function VerificationActionZone({
14006
14333
  switch (status) {
14007
14334
  case "required":
14008
14335
  if (onAction === null) return null;
14009
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
14336
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
14010
14337
  case "pending":
14011
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14338
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14012
14339
  AlertBanner,
14013
14340
  {
14014
14341
  variant: "warning",
@@ -14016,16 +14343,16 @@ function VerificationActionZone({
14016
14343
  }
14017
14344
  );
14018
14345
  case "completed":
14019
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(AlertBanner, { variant: "success", content: "Identity verified." });
14346
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(AlertBanner, { variant: "success", content: "Identity verified." });
14020
14347
  case "rejected":
14021
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14348
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14022
14349
  AlertBanner,
14023
14350
  {
14024
14351
  variant: "error",
14025
- content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14352
+ content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14026
14353
  "Verification rejected.",
14027
14354
  " ",
14028
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14355
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14029
14356
  "button",
14030
14357
  {
14031
14358
  type: "button",
@@ -14049,8 +14376,8 @@ function WalletActionZone({
14049
14376
  onRemoveWallet
14050
14377
  }) {
14051
14378
  if (multiWallet) {
14052
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14053
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14379
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14380
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14054
14381
  ConnectedWalletList,
14055
14382
  {
14056
14383
  wallets: connectedWallets,
@@ -14059,7 +14386,7 @@ function WalletActionZone({
14059
14386
  status: walletsStatus
14060
14387
  }
14061
14388
  ),
14062
- status === "rejected" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14389
+ status === "rejected" && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14063
14390
  AlertBanner,
14064
14391
  {
14065
14392
  variant: "error",
@@ -14070,21 +14397,21 @@ function WalletActionZone({
14070
14397
  }
14071
14398
  if (status === "completed") {
14072
14399
  const connected = connectedWallets[0];
14073
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14074
- onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
14075
- walletsStatus === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14400
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14401
+ onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
14402
+ walletsStatus === "loading" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14076
14403
  AlertBanner,
14077
14404
  {
14078
14405
  variant: "info",
14079
14406
  content: "Loading your connected wallet\u2026"
14080
14407
  }
14081
- ) : walletsStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14408
+ ) : walletsStatus === "error" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14082
14409
  AlertBanner,
14083
14410
  {
14084
14411
  variant: "error",
14085
14412
  content: "Couldn't load your connected wallet."
14086
14413
  }
14087
- ) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14414
+ ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14088
14415
  AlertBanner,
14089
14416
  {
14090
14417
  variant: "success",
@@ -14094,9 +14421,9 @@ function WalletActionZone({
14094
14421
  ] });
14095
14422
  }
14096
14423
  if (status === "rejected") {
14097
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
14098
- onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
14099
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14424
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
14425
+ onAction !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
14426
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14100
14427
  AlertBanner,
14101
14428
  {
14102
14429
  variant: "error",
@@ -14106,7 +14433,7 @@ function WalletActionZone({
14106
14433
  ] });
14107
14434
  }
14108
14435
  if (onAction === null) return null;
14109
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
14436
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
14110
14437
  }
14111
14438
  function RequirementItem({
14112
14439
  ui,
@@ -14118,7 +14445,7 @@ function RequirementItem({
14118
14445
  walletsStatus,
14119
14446
  onContactSupport
14120
14447
  }) {
14121
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
14448
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14122
14449
  "div",
14123
14450
  {
14124
14451
  className: cn(
@@ -14126,7 +14453,7 @@ function RequirementItem({
14126
14453
  className
14127
14454
  ),
14128
14455
  children: [
14129
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
14456
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14130
14457
  "button",
14131
14458
  {
14132
14459
  type: "button",
@@ -14134,9 +14461,9 @@ function RequirementItem({
14134
14461
  "aria-expanded": expanded,
14135
14462
  className: "clcosdk:flex clcosdk:h-14 clcosdk:w-full clcosdk:cursor-pointer clcosdk:items-center clcosdk:justify-between clcosdk:rounded-2xl clcosdk:px-2 clcosdk:transition-colors clcosdk:hover:bg-surface",
14136
14463
  children: [
14137
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
14138
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(StepStatusIcon, { status: ui.status }),
14139
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14464
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
14465
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(StepStatusIcon, { status: ui.status }),
14466
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14140
14467
  "span",
14141
14468
  {
14142
14469
  className: cn(
@@ -14147,7 +14474,7 @@ function RequirementItem({
14147
14474
  }
14148
14475
  )
14149
14476
  ] }),
14150
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14477
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14151
14478
  import_lucide_react15.ChevronRight,
14152
14479
  {
14153
14480
  className: cn(
@@ -14160,15 +14487,15 @@ function RequirementItem({
14160
14487
  ]
14161
14488
  }
14162
14489
  ),
14163
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14490
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14164
14491
  "div",
14165
14492
  {
14166
14493
  className: cn(
14167
14494
  "clcosdk:grid clcosdk:transition-[grid-template-rows] clcosdk:duration-300 clcosdk:ease-in-out",
14168
14495
  expanded ? "clcosdk:grid-rows-[1fr]" : "clcosdk:grid-rows-[0fr]"
14169
14496
  ),
14170
- children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:px-2 clcosdk:pb-4", children: [
14171
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14497
+ children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:px-2 clcosdk:pb-4", children: [
14498
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14172
14499
  "p",
14173
14500
  {
14174
14501
  className: cn(
@@ -14178,14 +14505,14 @@ function RequirementItem({
14178
14505
  children: ui.description
14179
14506
  }
14180
14507
  ),
14181
- ui.variant === "verification" ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14508
+ ui.variant === "verification" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14182
14509
  VerificationActionZone,
14183
14510
  {
14184
14511
  status: ui.status,
14185
14512
  onAction,
14186
14513
  onContactSupport
14187
14514
  }
14188
- ) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
14515
+ ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14189
14516
  WalletActionZone,
14190
14517
  {
14191
14518
  status: ui.status,
@@ -14205,9 +14532,9 @@ function RequirementItem({
14205
14532
  }
14206
14533
 
14207
14534
  // src/client/components/requirements/RequirementsChecklistView.tsx
14208
- var import_jsx_runtime61 = require("react/jsx-runtime");
14535
+ var import_jsx_runtime62 = require("react/jsx-runtime");
14209
14536
  function RequirementsChecklistView(props) {
14210
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(RequirementsChecklistViewBody, { ...props }) });
14537
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(RequirementsChecklistViewBody, { ...props }) });
14211
14538
  }
14212
14539
  function RequirementsChecklistViewBody({
14213
14540
  state,
@@ -14219,11 +14546,11 @@ function RequirementsChecklistViewBody({
14219
14546
  }) {
14220
14547
  switch (state.type) {
14221
14548
  case "loading":
14222
- return loading ?? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(LoadingState2, {});
14549
+ return loading ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(LoadingState2, {});
14223
14550
  case "not-authenticated":
14224
14551
  return unauthenticatedState ?? null;
14225
14552
  case "error":
14226
- return error ?? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14553
+ return error ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14227
14554
  AlertBanner,
14228
14555
  {
14229
14556
  variant: "error",
@@ -14233,7 +14560,7 @@ function RequirementsChecklistViewBody({
14233
14560
  }
14234
14561
  );
14235
14562
  case "content":
14236
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
14563
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14237
14564
  "div",
14238
14565
  {
14239
14566
  className: cn(
@@ -14241,11 +14568,11 @@ function RequirementsChecklistViewBody({
14241
14568
  className
14242
14569
  ),
14243
14570
  children: [
14244
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14245
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14246
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: state.description })
14571
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14572
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14573
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: state.description })
14247
14574
  ] }),
14248
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14575
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14249
14576
  RequirementItem,
14250
14577
  {
14251
14578
  ui: row.item,
@@ -14264,7 +14591,7 @@ function RequirementsChecklistViewBody({
14264
14591
  },
14265
14592
  row.id
14266
14593
  )) }),
14267
- state.ineligible && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14594
+ state.ineligible && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14268
14595
  AlertBanner,
14269
14596
  {
14270
14597
  variant: "error",
@@ -14272,7 +14599,7 @@ function RequirementsChecklistViewBody({
14272
14599
  content: "You are not eligible to participate."
14273
14600
  }
14274
14601
  ),
14275
- state.continueAction && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14602
+ state.continueAction && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14276
14603
  ClButton,
14277
14604
  {
14278
14605
  fullWidth: true,
@@ -14291,18 +14618,18 @@ function RequirementsChecklistViewBody({
14291
14618
  }
14292
14619
  }
14293
14620
  function LoadingState2() {
14294
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
14621
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14295
14622
  "output",
14296
14623
  {
14297
14624
  "aria-live": "polite",
14298
14625
  className: "clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center clcosdk:rounded-2xl clcosdk:border clcosdk:border-border clcosdk:bg-background clcosdk:p-6",
14299
- children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading requirements..." })
14626
+ children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading requirements..." })
14300
14627
  }
14301
14628
  );
14302
14629
  }
14303
14630
 
14304
14631
  // src/client/components/requirements/tax-document/TaxDocumentModalView.tsx
14305
- var import_jsx_runtime62 = require("react/jsx-runtime");
14632
+ var import_jsx_runtime63 = require("react/jsx-runtime");
14306
14633
  function TaxDocumentModalView({
14307
14634
  state,
14308
14635
  onEvent,
@@ -14311,7 +14638,7 @@ function TaxDocumentModalView({
14311
14638
  if (state.type === "hidden") {
14312
14639
  return null;
14313
14640
  }
14314
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14641
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
14315
14642
  "div",
14316
14643
  {
14317
14644
  className: cn(
@@ -14319,11 +14646,11 @@ function TaxDocumentModalView({
14319
14646
  className
14320
14647
  ),
14321
14648
  children: [
14322
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
14323
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14324
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
14649
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
14650
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
14651
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
14325
14652
  ] }),
14326
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Screen, { screen: state.screen, onEvent })
14653
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Screen, { screen: state.screen, onEvent })
14327
14654
  ]
14328
14655
  }
14329
14656
  ) }) });
@@ -14334,11 +14661,11 @@ function Screen({
14334
14661
  }) {
14335
14662
  switch (screen.type) {
14336
14663
  case "loading":
14337
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(LoadingScreen, {});
14664
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(LoadingScreen, {});
14338
14665
  case "error":
14339
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.message });
14666
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.message });
14340
14667
  case "review":
14341
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14668
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14342
14669
  ReviewScreen,
14343
14670
  {
14344
14671
  fields: screen.fields,
@@ -14349,9 +14676,9 @@ function Screen({
14349
14676
  }
14350
14677
  );
14351
14678
  case "editing":
14352
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(EditScreen, { fields: screen.fields, onEvent });
14679
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(EditScreen, { fields: screen.fields, onEvent });
14353
14680
  case "sign-only":
14354
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14681
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14355
14682
  SignOnlyScreen,
14356
14683
  {
14357
14684
  signing: screen.signing,
@@ -14366,14 +14693,14 @@ function Screen({
14366
14693
  }
14367
14694
  }
14368
14695
  function LoadingScreen() {
14369
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14696
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14370
14697
  "output",
14371
14698
  {
14372
14699
  "aria-live": "polite",
14373
14700
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
14374
- children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
14375
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
14376
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
14701
+ children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
14702
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
14703
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
14377
14704
  ] }, row))
14378
14705
  }
14379
14706
  );
@@ -14385,9 +14712,9 @@ function ReviewScreen({
14385
14712
  signError,
14386
14713
  onEvent
14387
14714
  }) {
14388
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14389
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Review your information below. If anything looks incorrect, edit before signing." }),
14390
- piiUnavailable && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14715
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14716
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Review your information below. If anything looks incorrect, edit before signing." }),
14717
+ piiUnavailable && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14391
14718
  AlertBanner,
14392
14719
  {
14393
14720
  variant: "info",
@@ -14395,27 +14722,27 @@ function ReviewScreen({
14395
14722
  content: "We don't have this information on file yet \u2014 please fill it in below."
14396
14723
  }
14397
14724
  ),
14398
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, displayValue }) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14725
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, displayValue }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
14399
14726
  "div",
14400
14727
  {
14401
14728
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
14402
14729
  children: [
14403
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14730
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14404
14731
  "span",
14405
14732
  {
14406
14733
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
14407
14734
  children: label
14408
14735
  }
14409
14736
  ),
14410
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
14737
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
14411
14738
  ]
14412
14739
  },
14413
14740
  field
14414
14741
  )) }),
14415
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.caption, "clcosdk:text-text-secondary"), children: "By signing, you certify that the information above is accurate and that you are the beneficial owner of the income this form relates to. This document cannot be edited once signed." }),
14416
- signError && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14417
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14418
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14742
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.caption, "clcosdk:text-text-secondary"), children: "By signing, you certify that the information above is accurate and that you are the beneficial owner of the income this form relates to. This document cannot be edited once signed." }),
14743
+ signError && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14744
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14745
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14419
14746
  ClButton,
14420
14747
  {
14421
14748
  fullWidth: true,
@@ -14425,7 +14752,7 @@ function ReviewScreen({
14425
14752
  children: "Sign W-8BEN"
14426
14753
  }
14427
14754
  ),
14428
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14755
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14429
14756
  ClButton,
14430
14757
  {
14431
14758
  fullWidth: true,
@@ -14442,20 +14769,20 @@ function EditScreen({
14442
14769
  fields,
14443
14770
  onEvent
14444
14771
  }) {
14445
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14446
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, placeholder, value }) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
14772
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14773
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: fields.map(({ field, label, placeholder, value }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
14447
14774
  "label",
14448
14775
  {
14449
14776
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
14450
14777
  children: [
14451
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14778
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14452
14779
  "span",
14453
14780
  {
14454
14781
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
14455
14782
  children: label
14456
14783
  }
14457
14784
  ),
14458
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14785
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14459
14786
  "input",
14460
14787
  {
14461
14788
  type: "text",
@@ -14476,9 +14803,9 @@ function EditScreen({
14476
14803
  },
14477
14804
  field
14478
14805
  )) }),
14479
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14480
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
14481
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14806
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
14807
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
14808
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14482
14809
  ClButton,
14483
14810
  {
14484
14811
  fullWidth: true,
@@ -14495,10 +14822,10 @@ function SignOnlyScreen({
14495
14822
  signError,
14496
14823
  onEvent
14497
14824
  }) {
14498
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14499
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "As an entity investor, you must complete a W-8BEN-E to confirm your foreign tax status and claim applicable treaty benefits. You'll receive an email to complete the signing." }),
14500
- signError && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14501
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
14825
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14826
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "As an entity investor, you must complete a W-8BEN-E to confirm your foreign tax status and claim applicable treaty benefits. You'll receive an email to complete the signing." }),
14827
+ signError && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(AlertBanner, { variant: "error", icon: true, content: signError }),
14828
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
14502
14829
  ClButton,
14503
14830
  {
14504
14831
  fullWidth: true,
@@ -14512,12 +14839,12 @@ function SignOnlyScreen({
14512
14839
  }
14513
14840
 
14514
14841
  // src/client/hooks/requirements/tax-document/useTaxDocumentModalViewModel.ts
14515
- var import_react42 = require("react");
14842
+ var import_react43 = require("react");
14516
14843
 
14517
14844
  // src/client/hooks/requirements/data/useTaxDocument.ts
14518
- var import_react41 = require("react");
14845
+ var import_react42 = require("react");
14519
14846
  var IDLE_SIGN = { type: "idle", error: null };
14520
- var LOADING_STATE5 = { type: "LOADING" };
14847
+ var LOADING_STATE6 = { type: "LOADING" };
14521
14848
  var SIGN_FAILED_MESSAGE = "Unable to sign document. Please try again.";
14522
14849
  var DOB_INVALID_MESSAGE = "Enter your date of birth as MM/DD/YYYY.";
14523
14850
  var FIELD_KEYS = {
@@ -14590,8 +14917,8 @@ function useTaxDocument({
14590
14917
  }) {
14591
14918
  const { coinlist, isReady } = useCoinList();
14592
14919
  const log = useLogger("useTaxDocument");
14593
- const [state, setState] = (0, import_react41.useState)(LOADING_STATE5);
14594
- (0, import_react41.useEffect)(() => {
14920
+ const [state, setState] = (0, import_react42.useState)(LOADING_STATE6);
14921
+ (0, import_react42.useEffect)(() => {
14595
14922
  let isCancelled = false;
14596
14923
  if (!isOpen) {
14597
14924
  return () => {
@@ -14599,12 +14926,12 @@ function useTaxDocument({
14599
14926
  };
14600
14927
  }
14601
14928
  if (!isReady) {
14602
- setState(LOADING_STATE5);
14929
+ setState(LOADING_STATE6);
14603
14930
  return () => {
14604
14931
  isCancelled = true;
14605
14932
  };
14606
14933
  }
14607
- setState(LOADING_STATE5);
14934
+ setState(LOADING_STATE6);
14608
14935
  coinlist.requirements.getPii().then((pii) => {
14609
14936
  if (isCancelled) return;
14610
14937
  if (pii.kind === "company") {
@@ -14632,7 +14959,7 @@ function useTaxDocument({
14632
14959
  isCancelled = true;
14633
14960
  };
14634
14961
  }, [coinlist, isReady, isOpen, log]);
14635
- const onEditField = (0, import_react41.useCallback)(
14962
+ const onEditField = (0, import_react42.useCallback)(
14636
14963
  (field, value) => {
14637
14964
  setState(
14638
14965
  (prev) => prev.type === "EDITING" ? { ...prev, fields: { ...prev.fields, [field]: value } } : prev
@@ -14640,7 +14967,7 @@ function useTaxDocument({
14640
14967
  },
14641
14968
  []
14642
14969
  );
14643
- const onStartEdit = (0, import_react41.useCallback)(() => {
14970
+ const onStartEdit = (0, import_react42.useCallback)(() => {
14644
14971
  setState(
14645
14972
  (prev) => prev.type === "REVIEW" ? {
14646
14973
  type: "EDITING",
@@ -14651,7 +14978,7 @@ function useTaxDocument({
14651
14978
  } : prev
14652
14979
  );
14653
14980
  }, []);
14654
- const onSaveEdit = (0, import_react41.useCallback)(() => {
14981
+ const onSaveEdit = (0, import_react42.useCallback)(() => {
14655
14982
  setState(
14656
14983
  (prev) => prev.type === "EDITING" ? {
14657
14984
  type: "REVIEW",
@@ -14662,7 +14989,7 @@ function useTaxDocument({
14662
14989
  } : prev
14663
14990
  );
14664
14991
  }, []);
14665
- const onCancelEdit = (0, import_react41.useCallback)(() => {
14992
+ const onCancelEdit = (0, import_react42.useCallback)(() => {
14666
14993
  setState(
14667
14994
  (prev) => prev.type === "EDITING" ? {
14668
14995
  type: "REVIEW",
@@ -14673,7 +15000,7 @@ function useTaxDocument({
14673
15000
  } : prev
14674
15001
  );
14675
15002
  }, []);
14676
- const onSign = (0, import_react41.useCallback)(() => {
15003
+ const onSign = (0, import_react42.useCallback)(() => {
14677
15004
  if (state.type !== "REVIEW" && state.type !== "SIGN_ONLY") return;
14678
15005
  if (state.type === "REVIEW" && state.fields.dob.trim() !== "" && !isValidUsDate(state.fields.dob)) {
14679
15006
  setState({
@@ -14715,19 +15042,19 @@ function useTaxDocumentModalViewModel({
14715
15042
  onSubmitted
14716
15043
  }) {
14717
15044
  const { state, onEditField, onStartEdit, onSaveEdit, onCancelEdit, onSign } = useTaxDocument({ isOpen });
14718
- (0, import_react42.useEffect)(() => {
15045
+ (0, import_react43.useEffect)(() => {
14719
15046
  if (state.type === "SUBMITTED") {
14720
15047
  onSubmitted?.(state.submission);
14721
15048
  onClose();
14722
15049
  }
14723
15050
  }, [state]);
14724
- const uiState = (0, import_react42.useMemo)(() => {
15051
+ const uiState = (0, import_react43.useMemo)(() => {
14725
15052
  if (!isOpen || state.type === "SUBMITTED") {
14726
15053
  return { type: "hidden" };
14727
15054
  }
14728
15055
  return { type: "content", title: toTitle(state), screen: toScreen(state) };
14729
15056
  }, [isOpen, state]);
14730
- const onEvent = (0, import_react42.useCallback)(
15057
+ const onEvent = (0, import_react43.useCallback)(
14731
15058
  (event) => {
14732
15059
  switch (event.type) {
14733
15060
  case "ON_CLOSE":
@@ -14810,7 +15137,7 @@ function toFieldsUi(fields) {
14810
15137
  }
14811
15138
 
14812
15139
  // src/client/components/requirements/tax-document/TaxDocumentModalContainer.tsx
14813
- var import_jsx_runtime63 = require("react/jsx-runtime");
15140
+ var import_jsx_runtime64 = require("react/jsx-runtime");
14814
15141
  function TaxDocumentModalContainer({
14815
15142
  isOpen,
14816
15143
  onClose,
@@ -14822,7 +15149,7 @@ function TaxDocumentModalContainer({
14822
15149
  onClose,
14823
15150
  onSubmitted
14824
15151
  });
14825
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
15152
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
14826
15153
  TaxDocumentModalView,
14827
15154
  {
14828
15155
  state,
@@ -14833,26 +15160,26 @@ function TaxDocumentModalContainer({
14833
15160
  }
14834
15161
 
14835
15162
  // src/client/components/requirements/VerificationOverlay.tsx
14836
- var import_jsx_runtime64 = require("react/jsx-runtime");
15163
+ var import_jsx_runtime65 = require("react/jsx-runtime");
14837
15164
  function VerificationOverlay({
14838
15165
  onClose,
14839
15166
  children
14840
15167
  }) {
14841
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(VerificationOverlayBody, { onClose, children }) });
15168
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(VerificationOverlayBody, { onClose, children }) });
14842
15169
  }
14843
15170
  function VerificationOverlayBody({
14844
15171
  onClose,
14845
15172
  children
14846
15173
  }) {
14847
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
15174
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
14848
15175
  "div",
14849
15176
  {
14850
15177
  role: "dialog",
14851
15178
  "aria-modal": "true",
14852
15179
  "aria-label": "Identity verification",
14853
15180
  className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-overlay clcosdk:p-4",
14854
- children: /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "clcosdk:relative clcosdk:flex clcosdk:max-h-[92vh] clcosdk:w-full clcosdk:max-w-[760px] clcosdk:flex-col clcosdk:overflow-y-auto clcosdk:rounded-2xl clcosdk:bg-background clcosdk:p-6 clcosdk:pt-14", children: [
14855
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
15181
+ children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:relative clcosdk:flex clcosdk:max-h-[92vh] clcosdk:w-full clcosdk:max-w-[760px] clcosdk:flex-col clcosdk:overflow-y-auto clcosdk:rounded-2xl clcosdk:bg-background clcosdk:p-6 clcosdk:pt-14", children: [
15182
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
14856
15183
  CloseButton,
14857
15184
  {
14858
15185
  onClick: onClose,
@@ -14866,18 +15193,18 @@ function VerificationOverlayBody({
14866
15193
  }
14867
15194
 
14868
15195
  // src/client/components/requirements/wallet/ConnectWalletModalView.tsx
14869
- var import_react43 = require("react");
14870
- var import_jsx_runtime65 = require("react/jsx-runtime");
15196
+ var import_react44 = require("react");
15197
+ var import_jsx_runtime66 = require("react/jsx-runtime");
14871
15198
  function ConnectWalletModalView({
14872
15199
  state,
14873
15200
  onEvent,
14874
15201
  className
14875
15202
  }) {
14876
- const titleId = (0, import_react43.useId)();
15203
+ const titleId = (0, import_react44.useId)();
14877
15204
  if (state.type === "hidden") {
14878
15205
  return null;
14879
15206
  }
14880
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
15207
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CoinListStyleScope, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-black/50 clcosdk:p-4", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
14881
15208
  "div",
14882
15209
  {
14883
15210
  role: "dialog",
@@ -14888,8 +15215,8 @@ function ConnectWalletModalView({
14888
15215
  className
14889
15216
  ),
14890
15217
  children: [
14891
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
14892
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15218
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
15219
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14893
15220
  "h3",
14894
15221
  {
14895
15222
  id: titleId,
@@ -14897,9 +15224,9 @@ function ConnectWalletModalView({
14897
15224
  children: "Connect your wallet"
14898
15225
  }
14899
15226
  ),
14900
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
15227
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
14901
15228
  ] }),
14902
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15229
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14903
15230
  Screen2,
14904
15231
  {
14905
15232
  screen: state.screen,
@@ -14918,9 +15245,9 @@ function Screen2({
14918
15245
  }) {
14919
15246
  switch (screen.type) {
14920
15247
  case "needs-wallet":
14921
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14922
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Connect an external wallet to prove ownership and bind it to this offer." }),
14923
- canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15248
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15249
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Connect an external wallet to prove ownership and bind it to this offer." }),
15250
+ canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14924
15251
  ClButton,
14925
15252
  {
14926
15253
  fullWidth: true,
@@ -14930,23 +15257,23 @@ function Screen2({
14930
15257
  )
14931
15258
  ] });
14932
15259
  case "ready":
14933
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
14934
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Sign a message with your connected wallet to prove you own it. This does not cost gas or move any funds." }),
14935
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: [
14936
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15260
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
15261
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Sign a message with your connected wallet to prove you own it. This does not cost gas or move any funds." }),
15262
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: [
15263
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14937
15264
  "span",
14938
15265
  {
14939
15266
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
14940
15267
  children: "Wallet address"
14941
15268
  }
14942
15269
  ),
14943
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: screen.shortAddress })
15270
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: screen.shortAddress })
14944
15271
  ] }),
14945
15272
  screen.signError && // Live region: the error is inserted async after a failed attempt,
14946
15273
  // so screen readers need it announced rather than silently
14947
15274
  // rendered.
14948
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.signError }) }),
14949
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15275
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { role: "alert", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(AlertBanner, { variant: "error", icon: true, content: screen.signError }) }),
15276
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14950
15277
  ClButton,
14951
15278
  {
14952
15279
  fullWidth: true,
@@ -14957,7 +15284,7 @@ function Screen2({
14957
15284
  children: "Sign & connect"
14958
15285
  }
14959
15286
  ),
14960
- canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
15287
+ canRequestConnect && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
14961
15288
  ClButton,
14962
15289
  {
14963
15290
  fullWidth: true,
@@ -14976,10 +15303,10 @@ function Screen2({
14976
15303
  }
14977
15304
 
14978
15305
  // src/client/hooks/requirements/wallet/useConnectWalletModalViewModel.ts
14979
- var import_react45 = require("react");
15306
+ var import_react46 = require("react");
14980
15307
 
14981
15308
  // src/client/hooks/requirements/data/useConnectWallet.ts
14982
- var import_react44 = require("react");
15309
+ var import_react45 = require("react");
14983
15310
 
14984
15311
  // src/client/core/wallets/connect-external-wallet.ts
14985
15312
  var DEFAULT_STATEMENT = "Sign this message to prove you own this wallet. This does not cost gas or move funds.";
@@ -15110,24 +15437,24 @@ function useConnectWallet({
15110
15437
  statement
15111
15438
  }) {
15112
15439
  const { coinlist } = useCoinList();
15113
- const [state, setState] = (0, import_react44.useState)(
15440
+ const [state, setState] = (0, import_react45.useState)(
15114
15441
  () => wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
15115
15442
  );
15116
- const attempt = (0, import_react44.useRef)(0);
15117
- (0, import_react44.useEffect)(() => {
15443
+ const attempt = (0, import_react45.useRef)(0);
15444
+ (0, import_react45.useEffect)(() => {
15118
15445
  attempt.current += 1;
15119
15446
  if (!isOpen) return;
15120
15447
  setState(
15121
15448
  wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
15122
15449
  );
15123
15450
  }, [isOpen, wallet?.address]);
15124
- (0, import_react44.useEffect)(
15451
+ (0, import_react45.useEffect)(
15125
15452
  () => () => {
15126
15453
  attempt.current += 1;
15127
15454
  },
15128
15455
  []
15129
15456
  );
15130
- const onSign = (0, import_react44.useCallback)(() => {
15457
+ const onSign = (0, import_react45.useCallback)(() => {
15131
15458
  if (!wallet || state.type !== "READY") return;
15132
15459
  attempt.current += 1;
15133
15460
  const gen = attempt.current;
@@ -15189,13 +15516,13 @@ function useConnectWalletModalViewModel({
15189
15516
  challengeType,
15190
15517
  statement
15191
15518
  });
15192
- (0, import_react45.useEffect)(() => {
15519
+ (0, import_react46.useEffect)(() => {
15193
15520
  if (state.type === "CONNECTED") {
15194
15521
  onConnected?.(state.binding);
15195
15522
  onClose();
15196
15523
  }
15197
15524
  }, [state]);
15198
- const uiState = (0, import_react45.useMemo)(() => {
15525
+ const uiState = (0, import_react46.useMemo)(() => {
15199
15526
  if (!isOpen || state.type === "CONNECTED") {
15200
15527
  return { type: "hidden" };
15201
15528
  }
@@ -15220,7 +15547,7 @@ function useConnectWalletModalViewModel({
15220
15547
  canRequestConnect
15221
15548
  };
15222
15549
  }, [isOpen, state, onRequestConnect]);
15223
- const onEvent = (0, import_react45.useCallback)(
15550
+ const onEvent = (0, import_react46.useCallback)(
15224
15551
  (event) => {
15225
15552
  switch (event.type) {
15226
15553
  case "ON_CLOSE":
@@ -15244,13 +15571,13 @@ function useConnectWalletModalViewModel({
15244
15571
  }
15245
15572
 
15246
15573
  // src/client/components/requirements/wallet/ConnectWalletModalContainer.tsx
15247
- var import_jsx_runtime66 = require("react/jsx-runtime");
15574
+ var import_jsx_runtime67 = require("react/jsx-runtime");
15248
15575
  function ConnectWalletModalContainer({
15249
15576
  className,
15250
15577
  ...options
15251
15578
  }) {
15252
15579
  const { state, onEvent } = useConnectWalletModalViewModel(options);
15253
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
15580
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
15254
15581
  ConnectWalletModalView,
15255
15582
  {
15256
15583
  state,
@@ -15261,11 +15588,11 @@ function ConnectWalletModalContainer({
15261
15588
  }
15262
15589
 
15263
15590
  // src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
15264
- var import_react48 = require("react");
15591
+ var import_react49 = require("react");
15265
15592
 
15266
15593
  // src/client/hooks/requirements/data/useOptionAddresses.ts
15267
- var import_react46 = require("react");
15268
- var LOADING_STATE6 = { type: "LOADING" };
15594
+ var import_react47 = require("react");
15595
+ var LOADING_STATE7 = { type: "LOADING" };
15269
15596
  var EMPTY_STATE = {
15270
15597
  type: "CONTENT",
15271
15598
  addresses: []
@@ -15274,19 +15601,19 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15274
15601
  const { coinlist, isReady } = useCoinList();
15275
15602
  const log = useLogger("useOptionAddresses");
15276
15603
  const { data, enabled = true } = options;
15277
- const [addressesState, setAddressesState] = (0, import_react46.useState)(
15278
- data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE6
15604
+ const [addressesState, setAddressesState] = (0, import_react47.useState)(
15605
+ data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE7
15279
15606
  );
15280
- const [fetchKey, setFetchKey] = (0, import_react46.useState)(0);
15281
- const refetch = (0, import_react46.useCallback)(() => setFetchKey((k) => k + 1), []);
15282
- const disconnect = (0, import_react46.useCallback)(
15607
+ const [fetchKey, setFetchKey] = (0, import_react47.useState)(0);
15608
+ const refetch = (0, import_react47.useCallback)(() => setFetchKey((k) => k + 1), []);
15609
+ const disconnect = (0, import_react47.useCallback)(
15283
15610
  async (addressId) => {
15284
15611
  await coinlist.wallets.remove({ offerId, addressId });
15285
15612
  refetch();
15286
15613
  },
15287
15614
  [coinlist, offerId, refetch]
15288
15615
  );
15289
- (0, import_react46.useEffect)(() => {
15616
+ (0, import_react47.useEffect)(() => {
15290
15617
  let isCancelled = false;
15291
15618
  if (!enabled) {
15292
15619
  setAddressesState(
@@ -15298,7 +15625,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15298
15625
  }
15299
15626
  if (!isReady) {
15300
15627
  if (data === void 0) {
15301
- setAddressesState(LOADING_STATE6);
15628
+ setAddressesState(LOADING_STATE7);
15302
15629
  }
15303
15630
  return () => {
15304
15631
  isCancelled = true;
@@ -15315,7 +15642,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15315
15642
  isCancelled = true;
15316
15643
  };
15317
15644
  }
15318
- setAddressesState(LOADING_STATE6);
15645
+ setAddressesState(LOADING_STATE7);
15319
15646
  coinlist.wallets.list({ offerId, offerOptionId }).then((addresses) => {
15320
15647
  if (!isCancelled) {
15321
15648
  log.debug(() => ({
@@ -15342,18 +15669,18 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
15342
15669
  }
15343
15670
 
15344
15671
  // src/client/hooks/requirements/data/useRequirements.ts
15345
- var import_react47 = require("react");
15346
- var LOADING_STATE7 = { type: "LOADING" };
15672
+ var import_react48 = require("react");
15673
+ var LOADING_STATE8 = { type: "LOADING" };
15347
15674
  function useRequirements(offerId, options = {}) {
15348
15675
  const { coinlist, isReady } = useCoinList();
15349
15676
  const log = useLogger("useRequirements");
15350
15677
  const { data, enabled = true } = options;
15351
- const [requirementsState, setRequirementsState] = (0, import_react47.useState)(
15352
- data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE7
15678
+ const [requirementsState, setRequirementsState] = (0, import_react48.useState)(
15679
+ data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE8
15353
15680
  );
15354
- const [fetchKey, setFetchKey] = (0, import_react47.useState)(0);
15355
- const refetch = (0, import_react47.useCallback)(() => setFetchKey((k) => k + 1), []);
15356
- (0, import_react47.useEffect)(() => {
15681
+ const [fetchKey, setFetchKey] = (0, import_react48.useState)(0);
15682
+ const refetch = (0, import_react48.useCallback)(() => setFetchKey((k) => k + 1), []);
15683
+ (0, import_react48.useEffect)(() => {
15357
15684
  let isCancelled = false;
15358
15685
  if (!enabled) {
15359
15686
  return () => {
@@ -15362,7 +15689,7 @@ function useRequirements(offerId, options = {}) {
15362
15689
  }
15363
15690
  if (!isReady) {
15364
15691
  if (data === void 0) {
15365
- setRequirementsState(LOADING_STATE7);
15692
+ setRequirementsState(LOADING_STATE8);
15366
15693
  }
15367
15694
  return () => {
15368
15695
  isCancelled = true;
@@ -15379,7 +15706,7 @@ function useRequirements(offerId, options = {}) {
15379
15706
  isCancelled = true;
15380
15707
  };
15381
15708
  }
15382
- setRequirementsState(LOADING_STATE7);
15709
+ setRequirementsState(LOADING_STATE8);
15383
15710
  Promise.all([
15384
15711
  coinlist.requirements.forOffer(offerId),
15385
15712
  coinlist.requirements.statuses(offerId)
@@ -15513,19 +15840,19 @@ function useRequirementsChecklistViewModel(options) {
15513
15840
  data,
15514
15841
  enabled
15515
15842
  });
15516
- const [expandedId, setExpandedId] = (0, import_react48.useState)(null);
15517
- const [taxDocumentOpen, setTaxDocumentOpen] = (0, import_react48.useState)(false);
15518
- const [connectWalletOpen, setConnectWalletOpen] = (0, import_react48.useState)(false);
15519
- const [verifyingRequirementId, setVerifyingRequirementId] = (0, import_react48.useState)(null);
15520
- const isMountedRef = (0, import_react48.useRef)(true);
15521
- (0, import_react48.useEffect)(() => {
15843
+ const [expandedId, setExpandedId] = (0, import_react49.useState)(null);
15844
+ const [taxDocumentOpen, setTaxDocumentOpen] = (0, import_react49.useState)(false);
15845
+ const [connectWalletOpen, setConnectWalletOpen] = (0, import_react49.useState)(false);
15846
+ const [verifyingRequirementId, setVerifyingRequirementId] = (0, import_react49.useState)(null);
15847
+ const isMountedRef = (0, import_react49.useRef)(true);
15848
+ (0, import_react49.useEffect)(() => {
15522
15849
  isMountedRef.current = true;
15523
15850
  return () => {
15524
15851
  isMountedRef.current = false;
15525
15852
  };
15526
15853
  }, []);
15527
- const [hasWalletRequirement, setHasWalletRequirement] = (0, import_react48.useState)(false);
15528
- (0, import_react48.useEffect)(() => {
15854
+ const [hasWalletRequirement, setHasWalletRequirement] = (0, import_react49.useState)(false);
15855
+ (0, import_react49.useEffect)(() => {
15529
15856
  if (requirementsState.type === "CONTENT") {
15530
15857
  setHasWalletRequirement(
15531
15858
  (requirementsState.requirements[optionId] ?? []).some(
@@ -15541,14 +15868,14 @@ function useRequirementsChecklistViewModel(options) {
15541
15868
  } = useOptionAddresses(offerId, optionId, {
15542
15869
  enabled: enabled && hasWalletRequirement
15543
15870
  });
15544
- const removeWallet = (0, import_react48.useCallback)(
15871
+ const removeWallet = (0, import_react49.useCallback)(
15545
15872
  async (addressId) => {
15546
15873
  await disconnect(OfferOptionAddressId(addressId));
15547
15874
  refetch();
15548
15875
  },
15549
15876
  [disconnect, refetch]
15550
15877
  );
15551
- const awaitVerificationResult = (0, import_react48.useCallback)(
15878
+ const awaitVerificationResult = (0, import_react49.useCallback)(
15552
15879
  (requirementId, statusBeforeSubmit) => {
15553
15880
  void (async () => {
15554
15881
  const deadline = Date.now() + VERIFICATION_POLL_TIMEOUT_MS;
@@ -15575,11 +15902,11 @@ function useRequirementsChecklistViewModel(options) {
15575
15902
  },
15576
15903
  [coinlist, offerId, refetch, log]
15577
15904
  );
15578
- const requirements = (0, import_react48.useMemo)(
15905
+ const requirements = (0, import_react49.useMemo)(
15579
15906
  () => requirementsState.type === "CONTENT" ? requirementsState.requirements[optionId] ?? [] : [],
15580
15907
  [requirementsState, optionId]
15581
15908
  );
15582
- const statusById = (0, import_react48.useMemo)(() => {
15909
+ const statusById = (0, import_react49.useMemo)(() => {
15583
15910
  if (requirementsState.type !== "CONTENT") {
15584
15911
  return /* @__PURE__ */ new Map();
15585
15912
  }
@@ -15588,7 +15915,7 @@ function useRequirementsChecklistViewModel(options) {
15588
15915
  requirementsState.statuses.filter((s) => ids.has(s.id)).map((s) => [s.id, s])
15589
15916
  );
15590
15917
  }, [requirementsState, requirements]);
15591
- const state = (0, import_react48.useMemo)(() => {
15918
+ const state = (0, import_react49.useMemo)(() => {
15592
15919
  switch (requirementsState.type) {
15593
15920
  case "LOADING":
15594
15921
  return { type: "loading" };
@@ -15657,7 +15984,7 @@ function useRequirementsChecklistViewModel(options) {
15657
15984
  identityVerificationOptions,
15658
15985
  removeWallet
15659
15986
  ]);
15660
- const handleRequirementAction = (0, import_react48.useCallback)(
15987
+ const handleRequirementAction = (0, import_react49.useCallback)(
15661
15988
  (requirement) => {
15662
15989
  const inlineVerification = statusById.get(requirement.id)?.kycLevel !== void 0 && onRequirementActionOverride === void 0;
15663
15990
  if (inlineVerification) {
@@ -15689,7 +16016,7 @@ function useRequirementsChecklistViewModel(options) {
15689
16016
  coinlist
15690
16017
  ]
15691
16018
  );
15692
- const onEvent = (0, import_react48.useCallback)(
16019
+ const onEvent = (0, import_react49.useCallback)(
15693
16020
  (event) => {
15694
16021
  switch (event.type) {
15695
16022
  case "ON_TOGGLE_ITEM":
@@ -15787,7 +16114,7 @@ function toVerificationUi(verifyingRequirementId, statusById, identityVerificati
15787
16114
  }
15788
16115
 
15789
16116
  // src/client/components/requirements/RequirementsChecklistContainer.tsx
15790
- var import_jsx_runtime67 = require("react/jsx-runtime");
16117
+ var import_jsx_runtime68 = require("react/jsx-runtime");
15791
16118
  function RequirementsChecklistContainer({
15792
16119
  loading,
15793
16120
  error,
@@ -15800,8 +16127,8 @@ function RequirementsChecklistContainer({
15800
16127
  ...options,
15801
16128
  enabled
15802
16129
  });
15803
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
15804
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16130
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
16131
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15805
16132
  RequirementsChecklistView,
15806
16133
  {
15807
16134
  state,
@@ -15811,13 +16138,13 @@ function RequirementsChecklistContainer({
15811
16138
  unauthenticatedState: (
15812
16139
  // The sign-in default lives here, not in the View: it is a connected
15813
16140
  // component, and a View must render from what it is handed.
15814
- unauthenticatedState !== void 0 ? unauthenticatedState : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(CoinListSignInCardContainer, {})
16141
+ unauthenticatedState !== void 0 ? unauthenticatedState : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(CoinListSignInCardContainer, {})
15815
16142
  ),
15816
16143
  className
15817
16144
  }
15818
16145
  ),
15819
- state.type === "content" && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
15820
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16146
+ state.type === "content" && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
16147
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15821
16148
  TaxDocumentModalContainer,
15822
16149
  {
15823
16150
  isOpen: state.taxDocumentOpen,
@@ -15825,11 +16152,11 @@ function RequirementsChecklistContainer({
15825
16152
  onSubmitted: () => onEvent({ type: "ON_TAX_DOCUMENT_SUBMITTED" })
15826
16153
  }
15827
16154
  ),
15828
- state.verification && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16155
+ state.verification && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15829
16156
  VerificationOverlay,
15830
16157
  {
15831
16158
  onClose: () => onEvent({ type: "ON_CLOSE_VERIFICATION" }),
15832
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16159
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15833
16160
  IdentityVerificationContainer,
15834
16161
  {
15835
16162
  levelName: state.verification.levelName,
@@ -15840,7 +16167,7 @@ function RequirementsChecklistContainer({
15840
16167
  )
15841
16168
  }
15842
16169
  ),
15843
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
16170
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
15844
16171
  ConnectWalletModalContainer,
15845
16172
  {
15846
16173
  isOpen: state.connectWalletOpen,
@@ -16001,18 +16328,18 @@ function pinoClientLogger(options) {
16001
16328
  }
16002
16329
 
16003
16330
  // src/client/hooks/auth/useCompleteOAuth.ts
16004
- var import_react49 = require("react");
16331
+ var import_react50 = require("react");
16005
16332
  function useCompleteOAuth(options) {
16006
16333
  const { coinlist } = useCoinList();
16007
16334
  const log = useLogger("useCompleteOAuth");
16008
- const postOAuthCompleteRef = (0, import_react49.useRef)(options.postOAuthComplete);
16009
- const onFailureRef = (0, import_react49.useRef)(options.onFailure);
16010
- const onSuccessRef = (0, import_react49.useRef)(options.onSuccess);
16335
+ const postOAuthCompleteRef = (0, import_react50.useRef)(options.postOAuthComplete);
16336
+ const onFailureRef = (0, import_react50.useRef)(options.onFailure);
16337
+ const onSuccessRef = (0, import_react50.useRef)(options.onSuccess);
16011
16338
  postOAuthCompleteRef.current = options.postOAuthComplete;
16012
16339
  onFailureRef.current = options.onFailure;
16013
16340
  onSuccessRef.current = options.onSuccess;
16014
- const hasStartedExchangeRef = (0, import_react49.useRef)(false);
16015
- (0, import_react49.useEffect)(() => {
16341
+ const hasStartedExchangeRef = (0, import_react50.useRef)(false);
16342
+ (0, import_react50.useEffect)(() => {
16016
16343
  if (typeof window === "undefined") return;
16017
16344
  const params = new URLSearchParams(window.location.search);
16018
16345
  if (!params.has("code") && !params.has("error")) return;
@@ -16076,16 +16403,16 @@ function useCompleteOAuth(options) {
16076
16403
  }
16077
16404
 
16078
16405
  // src/client/hooks/checkout/coin-list/token-sale/data/useParticipations.ts
16079
- var import_react50 = require("react");
16080
- var LOADING_STATE8 = { type: "LOADING" };
16406
+ var import_react51 = require("react");
16407
+ var LOADING_STATE9 = { type: "LOADING" };
16081
16408
  function useParticipations(offerId, options = {}) {
16082
16409
  const { coinlist, isReady } = useCoinList();
16083
16410
  const log = useLogger("useParticipations");
16084
16411
  const { data, enabled = true } = options;
16085
- const [participationsState, setParticipationsState] = (0, import_react50.useState)(
16086
- data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE8
16412
+ const [participationsState, setParticipationsState] = (0, import_react51.useState)(
16413
+ data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE9
16087
16414
  );
16088
- (0, import_react50.useEffect)(() => {
16415
+ (0, import_react51.useEffect)(() => {
16089
16416
  let isCancelled = false;
16090
16417
  if (!enabled) {
16091
16418
  return () => {
@@ -16094,7 +16421,7 @@ function useParticipations(offerId, options = {}) {
16094
16421
  }
16095
16422
  if (!isReady) {
16096
16423
  if (data === void 0) {
16097
- setParticipationsState(LOADING_STATE8);
16424
+ setParticipationsState(LOADING_STATE9);
16098
16425
  }
16099
16426
  return () => {
16100
16427
  isCancelled = true;
@@ -16105,7 +16432,7 @@ function useParticipations(offerId, options = {}) {
16105
16432
  isCancelled = true;
16106
16433
  };
16107
16434
  }
16108
- setParticipationsState(LOADING_STATE8);
16435
+ setParticipationsState(LOADING_STATE9);
16109
16436
  coinlist.tokenSale.list(offerId).then((participations) => {
16110
16437
  if (!isCancelled) {
16111
16438
  log.debug(() => ({
@@ -16132,16 +16459,16 @@ function useParticipations(offerId, options = {}) {
16132
16459
  }
16133
16460
 
16134
16461
  // src/client/hooks/offers/data/useOfferDetails.ts
16135
- var import_react51 = require("react");
16136
- var LOADING_STATE9 = { type: "LOADING" };
16462
+ var import_react52 = require("react");
16463
+ var LOADING_STATE10 = { type: "LOADING" };
16137
16464
  function useOfferDetails(offerId, options = {}) {
16138
16465
  const { coinlist, isReady } = useCoinList();
16139
16466
  const log = useLogger("useOfferDetails");
16140
16467
  const { data, enabled = true } = options;
16141
- const [offerDetailsState, setOfferDetailsState] = (0, import_react51.useState)(
16142
- data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE9
16468
+ const [offerDetailsState, setOfferDetailsState] = (0, import_react52.useState)(
16469
+ data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE10
16143
16470
  );
16144
- (0, import_react51.useEffect)(() => {
16471
+ (0, import_react52.useEffect)(() => {
16145
16472
  let isCancelled = false;
16146
16473
  if (!enabled) {
16147
16474
  return () => {
@@ -16150,7 +16477,7 @@ function useOfferDetails(offerId, options = {}) {
16150
16477
  }
16151
16478
  if (!isReady) {
16152
16479
  if (data === void 0) {
16153
- setOfferDetailsState(LOADING_STATE9);
16480
+ setOfferDetailsState(LOADING_STATE10);
16154
16481
  }
16155
16482
  return () => {
16156
16483
  isCancelled = true;
@@ -16161,7 +16488,7 @@ function useOfferDetails(offerId, options = {}) {
16161
16488
  isCancelled = true;
16162
16489
  };
16163
16490
  }
16164
- setOfferDetailsState(LOADING_STATE9);
16491
+ setOfferDetailsState(LOADING_STATE10);
16165
16492
  coinlist.offers.get(offerId).then((offerDetail) => {
16166
16493
  if (!isCancelled) {
16167
16494
  log.debug(() => ({
@@ -16189,15 +16516,23 @@ function useOfferDetails(offerId, options = {}) {
16189
16516
 
16190
16517
  // src/client/hooks/offers/shared/offer-asset-card.types.ts
16191
16518
  var OfferAssetCardUi = {
16192
- fromOffer: (offer) => ({
16519
+ /**
16520
+ * `tokenMetadata` is the registry's entry for the token the offer is about
16521
+ * (`TokenRegistrySnapshot.forOffer`), or `null` when it lists none. The
16522
+ * registry names win over the offer's own where both exist: they are the
16523
+ * token's canonical name, ticker and artwork, where the offer's are
16524
+ * catalogue copy.
16525
+ */
16526
+ fromOffer: (offer, tokenMetadata = null) => ({
16193
16527
  id: offer.id,
16194
- logoUrl: offer.logoUrl
16528
+ ...tokenMetadata ? { name: tokenMetadata.name, symbol: String(tokenMetadata.symbol) } : {},
16529
+ logo: OfferLogoUi.fromOffer(offer, tokenMetadata)
16195
16530
  }),
16196
- fromDetail: (detail) => ({
16531
+ fromDetail: (detail, tokenMetadata = null) => ({
16197
16532
  id: detail.id,
16198
- name: detail.name,
16199
- symbol: detail.asset.code,
16200
- logoUrl: detail.logoUrl
16533
+ name: tokenMetadata?.name ?? detail.name,
16534
+ symbol: tokenMetadata ? String(tokenMetadata.symbol) : detail.asset.code,
16535
+ logo: OfferLogoUi.fromOffer(detail, tokenMetadata)
16201
16536
  })
16202
16537
  };
16203
16538
 
@@ -16240,6 +16575,7 @@ function formatMonthYear(date, locale) {
16240
16575
  OAUTH_STATE_KEY,
16241
16576
  OfferAssetCard,
16242
16577
  OfferAssetCardUi,
16578
+ OfferLogoUi,
16243
16579
  OfferSaleCard,
16244
16580
  OfferSaleCardUi,
16245
16581
  OffersAssetGrid,
@@ -16301,6 +16637,7 @@ function formatMonthYear(date, locale) {
16301
16637
  quoteOverAsks,
16302
16638
  stablecoinIconUrl,
16303
16639
  submitErc20Approval,
16640
+ tokenLogoSrcSet,
16304
16641
  tokenLogoUrl,
16305
16642
  tokenMetadataOf,
16306
16643
  useCheckoutOfferTokenMetadata,
@@ -16343,6 +16680,7 @@ function formatMonthYear(date, locale) {
16343
16680
  useTaxDocument,
16344
16681
  useTaxDocumentModalViewModel,
16345
16682
  useTokenMetadata,
16683
+ useTokenRegistry,
16346
16684
  validateAmount,
16347
16685
  validateSellAmount,
16348
16686
  validateSuperstateAmount