@coinlist-co/react 0.12.1-rc.6b77fc6 → 0.12.1-rc.9aec85a

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.
@@ -5,7 +5,7 @@ import {
5
5
  SDK_LOGGER_NAME,
6
6
  loggerOverPino,
7
7
  publicClients
8
- } from "../chunk-DOSABR7Q.js";
8
+ } from "../chunk-DCW7NQXH.js";
9
9
  import {
10
10
  AuthorizationCode,
11
11
  CodeVerifier,
@@ -14,7 +14,6 @@ import {
14
14
  DEFAULT_ONDO_SELL_TOKENS_TO_COMPUTE_PRICE,
15
15
  DEFAULT_SLIPPAGE_BPS,
16
16
  ONDO_POLL_INTERVAL_MS,
17
- ONDO_QUOTE_EXPIRY_THRESHOLD_MS,
18
17
  ONDO_SETTLEMENT_ASSET,
19
18
  ONDO_SUPPORTED_INPUT_ASSETS,
20
19
  OffersNamespaceImpl,
@@ -25,6 +24,7 @@ import {
25
24
  SWAP_POLL_INTERVAL_MS,
26
25
  SwapQuote,
27
26
  TOKEN_REGISTRY,
27
+ TokenRegistrySnapshot,
28
28
  USDC,
29
29
  USDC_SYMBOL,
30
30
  computeOndoBuyPrice,
@@ -35,9 +35,11 @@ import {
35
35
  formattedPricePerShare,
36
36
  generatePKCEParams,
37
37
  isSwapAvailable,
38
+ offerDisplayTokens,
39
+ ondoQuoteOfferDeadline,
38
40
  superstateSwapContractAddress,
39
41
  swapSpender
40
- } from "../chunk-DX4VTV7L.js";
42
+ } from "../chunk-VH34YC3Q.js";
41
43
  import {
42
44
  API_VERSION,
43
45
  AssetDecimals,
@@ -86,7 +88,7 @@ import {
86
88
  shortenAddress,
87
89
  txExplorerUrl,
88
90
  usdAmount
89
- } from "../chunk-2YEJXE2V.js";
91
+ } from "../chunk-MOE5S6CE.js";
90
92
 
91
93
  // src/client/CoinListProvider.tsx
92
94
  import {
@@ -1094,7 +1096,7 @@ var CoinListProvider = CoinListContextProvider;
1094
1096
  import { createContext as createContext4, useContext as useContext3 } from "react";
1095
1097
 
1096
1098
  // src/client/generated/sdk-styles.gen.ts
1097
- 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-\\[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-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}}';
1099
+ 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\\:-mx-2{margin-inline:calc(var(--clcosdk-spacing) * -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-1\\/2{width:50%}.clcosdk\\:w-2\\/5{width:40%}.clcosdk\\:w-3\\/5{width:60%}.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-\\[calc\\(100\\%\\+16px\\)\\]{width:calc(100% + 16px)}.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-row{flex-direction:row}.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\\:justify-start{justify-content:flex-start}.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-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-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.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-text-primary{border-color:var(--color-text-primary)}.clcosdk\\:border-transparent{border-color:#0000}.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-1{padding-bottom:var(--clcosdk-spacing)}.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}}';
1098
1100
 
1099
1101
  // src/client/CoinListStyleScope.tsx
1100
1102
  import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
@@ -1396,7 +1398,7 @@ function AlertBanner({
1396
1398
  "aria-hidden": "true"
1397
1399
  }
1398
1400
  ),
1399
- /* @__PURE__ */ jsx6("p", { className: cn(typeClasses.subhead, text), children: content })
1401
+ /* @__PURE__ */ jsx6("p", { className: cn(typeClasses.bodySm, text), children: content })
1400
1402
  ]
1401
1403
  }
1402
1404
  );
@@ -2392,12 +2394,16 @@ function AssetSummaryRow({
2392
2394
  ] })
2393
2395
  ] }),
2394
2396
  (value || caption) && /* @__PURE__ */ jsxs17("div", { className: "clcosdk:flex clcosdk:shrink-0 clcosdk:flex-col clcosdk:items-end clcosdk:justify-center", children: [
2395
- value && /* @__PURE__ */ jsx23(
2397
+ value && // `min-h-[1lh]` + flex center: a Skeleton sized to `1em` (cap
2398
+ // height) sits in the same line box as loaded copy, so leading
2399
+ // keeps the two rows apart instead of two full-lh bars colliding.
2400
+ /* @__PURE__ */ jsx23(
2396
2401
  "div",
2397
2402
  {
2398
2403
  className: cn(
2399
2404
  typeClasses.h4,
2400
- "clcosdk:text-right clcosdk:text-text-primary"
2405
+ "clcosdk:flex clcosdk:min-h-[1lh] clcosdk:items-center",
2406
+ "clcosdk:justify-end clcosdk:text-text-primary"
2401
2407
  ),
2402
2408
  children: value
2403
2409
  }
@@ -2410,7 +2416,8 @@ function AssetSummaryRow({
2410
2416
  {
2411
2417
  className: cn(
2412
2418
  typeClasses.subhead,
2413
- "clcosdk:text-right clcosdk:text-text-secondary"
2419
+ "clcosdk:flex clcosdk:min-h-[1lh] clcosdk:items-center",
2420
+ "clcosdk:justify-end clcosdk:text-text-secondary"
2414
2421
  ),
2415
2422
  children: caption
2416
2423
  }
@@ -3130,7 +3137,7 @@ function detailRows2(state) {
3130
3137
  function PriceValue({ price }) {
3131
3138
  switch (price.type) {
3132
3139
  case "loading":
3133
- return /* @__PURE__ */ jsx32(Skeleton, { className: "clcosdk:h-6 clcosdk:w-24" });
3140
+ return /* @__PURE__ */ jsx32(Skeleton, { className: "clcosdk:h-[1em] clcosdk:w-24" });
3134
3141
  case "known":
3135
3142
  return price.price;
3136
3143
  case "unavailable":
@@ -3144,7 +3151,7 @@ function PriceValue({ price }) {
3144
3151
  function PriceCaption({ price }) {
3145
3152
  switch (price.type) {
3146
3153
  case "loading":
3147
- return /* @__PURE__ */ jsx32(Skeleton, { className: "clcosdk:h-4 clcosdk:w-20" });
3154
+ return /* @__PURE__ */ jsx32(Skeleton, { className: "clcosdk:h-[1em] clcosdk:w-20" });
3148
3155
  case "known":
3149
3156
  return /* @__PURE__ */ jsx32(StatusIndicator, { status: price.market });
3150
3157
  // Nothing to say about a market whose price never arrived: the order steps
@@ -3597,7 +3604,7 @@ function stablecoinIconUrl(symbol) {
3597
3604
  }
3598
3605
  }
3599
3606
  function offerIconUrl(offer) {
3600
- return offer.logoUrl === "" ? null : AssetIconUrl(offer.logoUrl);
3607
+ return offer.logoUrl ? AssetIconUrl(offer.logoUrl) : null;
3601
3608
  }
3602
3609
  function tokenLogoUrl(logo, minWidth = 40) {
3603
3610
  switch (logo.kind) {
@@ -3616,6 +3623,20 @@ function tokenLogoUrl(logo, minWidth = 40) {
3616
3623
  }
3617
3624
  }
3618
3625
  }
3626
+ function tokenLogoSrcSet(logo) {
3627
+ switch (logo.kind) {
3628
+ case "VECTOR":
3629
+ return null;
3630
+ case "RASTER": {
3631
+ const candidates = logo.variants.length > 0 ? logo.variants : [logo.original];
3632
+ return [...candidates].sort((a, b) => a.width - b.width).map((image) => `${image.url} ${image.width}w`).join(", ");
3633
+ }
3634
+ default: {
3635
+ const exhaustive = logo;
3636
+ return exhaustive;
3637
+ }
3638
+ }
3639
+ }
3619
3640
  function offerAssetIconUrl(offer, tokenMetadata) {
3620
3641
  return (tokenMetadata ? tokenLogoUrl(tokenMetadata.logo) : null) ?? offerIconUrl(offer);
3621
3642
  }
@@ -4064,7 +4085,7 @@ function toInputAssetUi({
4064
4085
  }
4065
4086
 
4066
4087
  // src/client/hooks/checkout/ondo/buy/review/useOndoBuyReviewViewModel.ts
4067
- import { useEffect as useEffect7, useRef as useRef5, useState as useState6 } from "react";
4088
+ import { useEffect as useEffect7, useMemo as useMemo4, useRef as useRef5, useState as useState6 } from "react";
4068
4089
 
4069
4090
  // src/client/hooks/checkout/ondo/buy/data/useOndoBuyTransaction.ts
4070
4091
  import { useCallback as useCallback2, useEffect as useEffect5, useRef as useRef4, useState as useState5 } from "react";
@@ -4222,8 +4243,12 @@ function useOndoBuyReviewViewModel({
4222
4243
  }
4223
4244
  }, [stepInput.type]);
4224
4245
  const transaction = transactionState.type === "CONTENT" ? transactionState.transaction : null;
4246
+ const offerUntil = useMemo4(
4247
+ () => transaction === null ? null : ondoQuoteOfferDeadline(transaction.expiresAt),
4248
+ [transaction]
4249
+ );
4225
4250
  const secondsLeft = useCountdown({
4226
- until: transaction?.expiresAt ?? null,
4251
+ until: offerUntil,
4227
4252
  enabled
4228
4253
  });
4229
4254
  const quoteStatus = toQuoteStatusUi(transactionState, secondsLeft);
@@ -4347,14 +4372,11 @@ function toQuoteStatusUi(state, secondsLeft) {
4347
4372
  message: refreshErrorMessage(state.refreshError)
4348
4373
  };
4349
4374
  }
4350
- if (secondsLeft === null || isTooCloseToExpiry(secondsLeft)) {
4375
+ if (secondsLeft === null || secondsLeft === 0) {
4351
4376
  return { type: "expired" };
4352
4377
  }
4353
4378
  return { type: "valid", expiresInLabel: expiresInLabel(secondsLeft) };
4354
4379
  }
4355
- function isTooCloseToExpiry(secondsLeft) {
4356
- return secondsLeft * 1e3 <= ONDO_QUOTE_EXPIRY_THRESHOLD_MS;
4357
- }
4358
4380
  function expiresInLabel(secondsLeft) {
4359
4381
  const unit = secondsLeft === 1 ? "second" : "seconds";
4360
4382
  return `Quote expires in ${secondsLeft} ${unit}`;
@@ -4846,8 +4868,9 @@ var NO_TOKEN_ADDRESS = EvmContractAddress(
4846
4868
  "0x0000000000000000000000000000000000000000"
4847
4869
  );
4848
4870
  function offerTokenIdentifier(offer, chain) {
4849
- const byChain = offer.tokens.filter((token) => token.chain === chain);
4850
- const asset = byChain.find((token) => token.role === "swap") ?? byChain.find((token) => token.role === "distribution");
4871
+ const asset = offerDisplayTokens(offer).find(
4872
+ (token) => token.chain === chain
4873
+ );
4851
4874
  return asset === void 0 ? null : { chain, address: asset.address };
4852
4875
  }
4853
4876
  function tokenMetadataOf(state) {
@@ -6163,7 +6186,7 @@ function preparationErrorMessage2(error) {
6163
6186
  }
6164
6187
 
6165
6188
  // src/client/hooks/checkout/ondo/sell/review/useOndoSellReviewViewModel.ts
6166
- import { useEffect as useEffect14, useRef as useRef11, useState as useState15 } from "react";
6189
+ import { useEffect as useEffect14, useMemo as useMemo5, useRef as useRef11, useState as useState15 } from "react";
6167
6190
 
6168
6191
  // src/client/hooks/checkout/ondo/sell/data/useOndoSellTransaction.ts
6169
6192
  import { useCallback as useCallback4, useEffect as useEffect13, useRef as useRef10, useState as useState14 } from "react";
@@ -6284,8 +6307,12 @@ function useOndoSellReviewViewModel({
6284
6307
  }
6285
6308
  }, [stepInput.type]);
6286
6309
  const transaction = transactionState.type === "CONTENT" ? transactionState.transaction : null;
6310
+ const offerUntil = useMemo5(
6311
+ () => transaction === null ? null : ondoQuoteOfferDeadline(transaction.expiresAt),
6312
+ [transaction]
6313
+ );
6287
6314
  const secondsLeft = useCountdown({
6288
- until: transaction?.expiresAt ?? null,
6315
+ until: offerUntil,
6289
6316
  enabled
6290
6317
  });
6291
6318
  const quoteStatus = toQuoteStatusUi2(transactionState, secondsLeft);
@@ -6414,14 +6441,11 @@ function toQuoteStatusUi2(state, secondsLeft) {
6414
6441
  message: refreshErrorMessage2(state.refreshError)
6415
6442
  };
6416
6443
  }
6417
- if (secondsLeft === null || isTooCloseToExpiry2(secondsLeft)) {
6444
+ if (secondsLeft === null || secondsLeft === 0) {
6418
6445
  return { type: "expired" };
6419
6446
  }
6420
6447
  return { type: "valid", expiresInLabel: expiresInLabel2(secondsLeft) };
6421
6448
  }
6422
- function isTooCloseToExpiry2(secondsLeft) {
6423
- return secondsLeft * 1e3 <= ONDO_QUOTE_EXPIRY_THRESHOLD_MS;
6424
- }
6425
6449
  function expiresInLabel2(secondsLeft) {
6426
6450
  const unit = secondsLeft === 1 ? "second" : "seconds";
6427
6451
  return `Quote expires in ${secondsLeft} ${unit}`;
@@ -7509,7 +7533,7 @@ function LiveDot() {
7509
7533
  function PriceValue2({ price }) {
7510
7534
  switch (price.type) {
7511
7535
  case "loading":
7512
- return /* @__PURE__ */ jsx46(Skeleton, { className: "clcosdk:h-6 clcosdk:w-24" });
7536
+ return /* @__PURE__ */ jsx46(Skeleton, { className: "clcosdk:h-[1em] clcosdk:w-24" });
7513
7537
  case "known":
7514
7538
  return price.price;
7515
7539
  default: {
@@ -9105,11 +9129,11 @@ function CheckoutContainer({
9105
9129
  enabled = true,
9106
9130
  className
9107
9131
  }) {
9108
- return renderOffer(offer.type, {
9109
- ondo: () => /* @__PURE__ */ jsx50(
9132
+ return renderOffer(offer, {
9133
+ ondo: (ondoOffer) => /* @__PURE__ */ jsx50(
9110
9134
  OndoCheckoutContainer,
9111
9135
  {
9112
- offer,
9136
+ offer: ondoOffer,
9113
9137
  chain,
9114
9138
  wallets,
9115
9139
  config: config["ondo::swap"],
@@ -9117,10 +9141,10 @@ function CheckoutContainer({
9117
9141
  className
9118
9142
  }
9119
9143
  ),
9120
- superstate: () => /* @__PURE__ */ jsx50(
9144
+ superstate: (superstateOffer) => /* @__PURE__ */ jsx50(
9121
9145
  SuperstateSwapCheckoutContainer,
9122
9146
  {
9123
- offer,
9147
+ offer: superstateOffer,
9124
9148
  chain,
9125
9149
  wallets,
9126
9150
  enabled,
@@ -9128,7 +9152,7 @@ function CheckoutContainer({
9128
9152
  className
9129
9153
  }
9130
9154
  ),
9131
- tokenSale: () => config["coinlist::token_sale"].render(offer)
9155
+ tokenSale: (tokenSaleOffer) => config["coinlist::token_sale"].render(tokenSaleOffer)
9132
9156
  });
9133
9157
  }
9134
9158
  function OndoCheckoutContainer({
@@ -9168,16 +9192,16 @@ function OndoCheckoutContainer({
9168
9192
  )
9169
9193
  });
9170
9194
  }
9171
- function renderOffer(type, branches) {
9172
- switch (type) {
9195
+ function renderOffer(offer, branches) {
9196
+ switch (offer.type) {
9173
9197
  case "ondo::swap":
9174
- return branches.ondo();
9198
+ return branches.ondo(offer);
9175
9199
  case "superstate::swap":
9176
- return branches.superstate();
9200
+ return branches.superstate(offer);
9177
9201
  case "coinlist::token_sale":
9178
- return branches.tokenSale();
9202
+ return branches.tokenSale(offer);
9179
9203
  default: {
9180
- const exhaustive = type;
9204
+ const exhaustive = offer;
9181
9205
  return exhaustive;
9182
9206
  }
9183
9207
  }
@@ -9195,6 +9219,58 @@ function renderOndoSide(side, branches) {
9195
9219
  }
9196
9220
  }
9197
9221
 
9222
+ // src/client/components/design-system/ThemedImage.tsx
9223
+ import { Fragment as Fragment9, jsx as jsx51, jsxs as jsxs37 } from "react/jsx-runtime";
9224
+ function ThemedImage({
9225
+ light,
9226
+ dark,
9227
+ sizes,
9228
+ alt,
9229
+ width,
9230
+ height,
9231
+ className,
9232
+ style
9233
+ }) {
9234
+ const shared = { width, height, style };
9235
+ if (!dark) {
9236
+ return /* @__PURE__ */ jsx51(
9237
+ "img",
9238
+ {
9239
+ src: light.src,
9240
+ srcSet: light.srcSet,
9241
+ sizes: light.srcSet ? sizes : void 0,
9242
+ className,
9243
+ alt,
9244
+ ...shared
9245
+ }
9246
+ );
9247
+ }
9248
+ return /* @__PURE__ */ jsxs37(Fragment9, { children: [
9249
+ /* @__PURE__ */ jsx51(
9250
+ "img",
9251
+ {
9252
+ src: light.src,
9253
+ srcSet: light.srcSet,
9254
+ sizes: light.srcSet ? sizes : void 0,
9255
+ className: cn("clcosdk-on-light", className),
9256
+ alt,
9257
+ ...shared
9258
+ }
9259
+ ),
9260
+ /* @__PURE__ */ jsx51(
9261
+ "img",
9262
+ {
9263
+ src: dark.src,
9264
+ srcSet: dark.srcSet,
9265
+ sizes: dark.srcSet ? sizes : void 0,
9266
+ className: cn("clcosdk-on-dark", className),
9267
+ alt,
9268
+ ...shared
9269
+ }
9270
+ )
9271
+ ] });
9272
+ }
9273
+
9198
9274
  // src/client/components/offers/shared/offer-card-keyboard.ts
9199
9275
  function onOfferCardKeyDown(event, onClick) {
9200
9276
  if (event.key !== "Enter" && event.key !== " ") return;
@@ -9203,7 +9279,8 @@ function onOfferCardKeyDown(event, onClick) {
9203
9279
  }
9204
9280
 
9205
9281
  // src/client/components/offers/shared/OfferAssetCard.tsx
9206
- import { jsx as jsx51, jsxs as jsxs37 } from "react/jsx-runtime";
9282
+ import { jsx as jsx52, jsxs as jsxs38 } from "react/jsx-runtime";
9283
+ var LOGO_SIZES = "(min-width: 768px) 48px, 40px";
9207
9284
  function OfferAssetCard({
9208
9285
  offer,
9209
9286
  onClick,
@@ -9211,7 +9288,7 @@ function OfferAssetCard({
9211
9288
  containerClassName
9212
9289
  }) {
9213
9290
  const interactive = onClick !== void 0;
9214
- const card = /* @__PURE__ */ jsx51(
9291
+ const card = /* @__PURE__ */ jsx52(
9215
9292
  "article",
9216
9293
  {
9217
9294
  className: cn(
@@ -9225,11 +9302,13 @@ function OfferAssetCard({
9225
9302
  tabIndex: interactive ? 0 : void 0,
9226
9303
  onClick,
9227
9304
  onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
9228
- children: /* @__PURE__ */ jsxs37("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: [
9229
- offer.logoUrl ? /* @__PURE__ */ jsx51("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__ */ jsx51(
9230
- "img",
9305
+ children: /* @__PURE__ */ jsxs38("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: [
9306
+ offer.logo ? /* @__PURE__ */ jsx52("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__ */ jsx52(
9307
+ ThemedImage,
9231
9308
  {
9232
- src: offer.logoUrl,
9309
+ light: offer.logo.light,
9310
+ dark: offer.logo.dark ?? void 0,
9311
+ sizes: LOGO_SIZES,
9233
9312
  alt: "",
9234
9313
  width: 48,
9235
9314
  height: 48,
@@ -9237,8 +9316,8 @@ function OfferAssetCard({
9237
9316
  style: { maxWidth: "none", width: "100%", height: "100%" }
9238
9317
  }
9239
9318
  ) }) : null,
9240
- /* @__PURE__ */ jsxs37("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:flex-col clcosdk:items-start clcosdk:justify-center", children: [
9241
- offer.name ? /* @__PURE__ */ jsx51(
9319
+ /* @__PURE__ */ jsxs38("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:flex-1 clcosdk:flex-col clcosdk:items-start clcosdk:justify-center", children: [
9320
+ offer.name ? /* @__PURE__ */ jsx52(
9242
9321
  "h2",
9243
9322
  {
9244
9323
  className: cn(
@@ -9247,13 +9326,13 @@ function OfferAssetCard({
9247
9326
  children: offer.name
9248
9327
  }
9249
9328
  ) : null,
9250
- offer.symbol ? /* @__PURE__ */ jsx51("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
9329
+ offer.symbol ? /* @__PURE__ */ jsx52("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
9251
9330
  ] })
9252
9331
  ] })
9253
9332
  }
9254
9333
  );
9255
- const wrapped = containerClassName ? /* @__PURE__ */ jsx51("div", { className: containerClassName, children: card }) : card;
9256
- return /* @__PURE__ */ jsx51(CoinListStyleScope, { children: wrapped });
9334
+ const wrapped = containerClassName ? /* @__PURE__ */ jsx52("div", { className: containerClassName, children: card }) : card;
9335
+ return /* @__PURE__ */ jsx52(CoinListStyleScope, { children: wrapped });
9257
9336
  }
9258
9337
  function cardActionLabel(offer) {
9259
9338
  const parts = [offer.name, offer.symbol].filter(Boolean);
@@ -9261,7 +9340,7 @@ function cardActionLabel(offer) {
9261
9340
  }
9262
9341
 
9263
9342
  // src/client/components/offers/grid/OffersAssetGrid.tsx
9264
- import { jsx as jsx52 } from "react/jsx-runtime";
9343
+ import { jsx as jsx53 } from "react/jsx-runtime";
9265
9344
  var DEFAULT_MAX_COLUMNS = 3;
9266
9345
  function OffersAssetGrid({
9267
9346
  offers,
@@ -9276,14 +9355,14 @@ function OffersAssetGrid({
9276
9355
  );
9277
9356
  const maxGridWidth = `calc(${cols} * 20rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
9278
9357
  const interactive = onOfferClick !== void 0;
9279
- return /* @__PURE__ */ jsx52(CoinListStyleScope, { children: /* @__PURE__ */ jsx52(
9358
+ return /* @__PURE__ */ jsx53(CoinListStyleScope, { children: /* @__PURE__ */ jsx53(
9280
9359
  "div",
9281
9360
  {
9282
9361
  className: cn(
9283
9362
  "clcosdk:flex clcosdk:w-full clcosdk:justify-center",
9284
9363
  containerClassName
9285
9364
  ),
9286
- children: /* @__PURE__ */ jsx52(
9365
+ children: /* @__PURE__ */ jsx53(
9287
9366
  "div",
9288
9367
  {
9289
9368
  className: cn(
@@ -9293,7 +9372,7 @@ function OffersAssetGrid({
9293
9372
  className
9294
9373
  ),
9295
9374
  style: { maxWidth: maxGridWidth },
9296
- children: offers.map((offer) => /* @__PURE__ */ jsx52(
9375
+ children: offers.map((offer) => /* @__PURE__ */ jsx53(
9297
9376
  OfferAssetCard,
9298
9377
  {
9299
9378
  offer,
@@ -9335,7 +9414,9 @@ function saleCardStatus({
9335
9414
  }
9336
9415
 
9337
9416
  // src/client/components/offers/shared/OfferSaleCard.tsx
9338
- import { jsx as jsx53, jsxs as jsxs38 } from "react/jsx-runtime";
9417
+ import { jsx as jsx54, jsxs as jsxs39 } from "react/jsx-runtime";
9418
+ var HEADER_LOGO_SIZES = "(min-width: 768px) 36px, 32px";
9419
+ var WATERMARK_SIZES = "(min-width: 768px) 20rem, 15rem";
9339
9420
  function OfferSaleCard({
9340
9421
  offer,
9341
9422
  onClick,
@@ -9350,7 +9431,8 @@ function OfferSaleCard({
9350
9431
  secondsLeft
9351
9432
  });
9352
9433
  const interactive = onClick !== void 0;
9353
- const card = /* @__PURE__ */ jsxs38(
9434
+ const logo = offer.logo ? offer.logo.dark ?? offer.logo.light : null;
9435
+ const card = /* @__PURE__ */ jsxs39(
9354
9436
  "article",
9355
9437
  {
9356
9438
  className: cn(
@@ -9365,16 +9447,17 @@ function OfferSaleCard({
9365
9447
  onClick,
9366
9448
  onKeyDown: interactive ? (event) => onOfferCardKeyDown(event, onClick) : void 0,
9367
9449
  children: [
9368
- offer.logoUrl ? /* @__PURE__ */ jsx53(
9450
+ logo ? /* @__PURE__ */ jsx54(
9369
9451
  "div",
9370
9452
  {
9371
9453
  "aria-hidden": "true",
9372
9454
  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]",
9373
9455
  style: { mixBlendMode: "overlay" },
9374
- children: /* @__PURE__ */ jsx53(
9375
- "img",
9456
+ children: /* @__PURE__ */ jsx54(
9457
+ ThemedImage,
9376
9458
  {
9377
- src: offer.logoUrl,
9459
+ light: logo,
9460
+ sizes: WATERMARK_SIZES,
9378
9461
  alt: "",
9379
9462
  className: "clcosdk:size-full clcosdk:rounded-full clcosdk:object-cover",
9380
9463
  style: { maxWidth: "none", width: "100%", height: "100%" }
@@ -9382,12 +9465,13 @@ function OfferSaleCard({
9382
9465
  )
9383
9466
  }
9384
9467
  ) : null,
9385
- /* @__PURE__ */ jsxs38("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:flex clcosdk:flex-col clcosdk:gap-2 clcosdk:md:gap-3", children: [
9386
- /* @__PURE__ */ jsxs38("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2.5 clcosdk:md:gap-3", children: [
9387
- offer.logoUrl ? /* @__PURE__ */ jsx53("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__ */ jsx53(
9388
- "img",
9468
+ /* @__PURE__ */ jsxs39("div", { className: "clcosdk:relative clcosdk:z-10 clcosdk:flex clcosdk:flex-col clcosdk:gap-2 clcosdk:md:gap-3", children: [
9469
+ /* @__PURE__ */ jsxs39("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2.5 clcosdk:md:gap-3", children: [
9470
+ logo ? /* @__PURE__ */ jsx54("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__ */ jsx54(
9471
+ ThemedImage,
9389
9472
  {
9390
- src: offer.logoUrl,
9473
+ light: logo,
9474
+ sizes: HEADER_LOGO_SIZES,
9391
9475
  alt: "",
9392
9476
  width: 36,
9393
9477
  height: 36,
@@ -9395,7 +9479,7 @@ function OfferSaleCard({
9395
9479
  style: { maxWidth: "none", width: "100%", height: "100%" }
9396
9480
  }
9397
9481
  ) }) : null,
9398
- offer.name ? /* @__PURE__ */ jsx53(
9482
+ offer.name ? /* @__PURE__ */ jsx54(
9399
9483
  "h2",
9400
9484
  {
9401
9485
  className: cn(
@@ -9405,7 +9489,7 @@ function OfferSaleCard({
9405
9489
  }
9406
9490
  ) : null
9407
9491
  ] }),
9408
- offer.tagline ? /* @__PURE__ */ jsx53(
9492
+ offer.tagline ? /* @__PURE__ */ jsx54(
9409
9493
  "p",
9410
9494
  {
9411
9495
  className: cn(
@@ -9416,20 +9500,20 @@ function OfferSaleCard({
9416
9500
  }
9417
9501
  ) : null
9418
9502
  ] }),
9419
- /* @__PURE__ */ jsxs38("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: [
9420
- /* @__PURE__ */ jsxs38("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2 clcosdk:md:gap-3", children: [
9421
- status.phase === "live" ? /* @__PURE__ */ jsxs38(
9503
+ /* @__PURE__ */ jsxs39("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: [
9504
+ /* @__PURE__ */ jsxs39("div", { className: "clcosdk:flex clcosdk:min-w-0 clcosdk:items-center clcosdk:gap-2 clcosdk:md:gap-3", children: [
9505
+ status.phase === "live" ? /* @__PURE__ */ jsxs39(
9422
9506
  "span",
9423
9507
  {
9424
9508
  className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-2 clcosdk:shrink-0",
9425
9509
  "aria-hidden": "true",
9426
9510
  children: [
9427
- /* @__PURE__ */ jsx53("span", { className: "clcosdk-status-dot-ping clcosdk:absolute clcosdk:inset-0 clcosdk:rounded-full clcosdk:bg-positive" }),
9428
- /* @__PURE__ */ jsx53("span", { className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-full clcosdk:rounded-full clcosdk:bg-positive" })
9511
+ /* @__PURE__ */ jsx54("span", { className: "clcosdk-status-dot-ping clcosdk:absolute clcosdk:inset-0 clcosdk:rounded-full clcosdk:bg-positive" }),
9512
+ /* @__PURE__ */ jsx54("span", { className: "clcosdk:relative clcosdk:inline-flex clcosdk:size-full clcosdk:rounded-full clcosdk:bg-positive" })
9429
9513
  ]
9430
9514
  }
9431
9515
  ) : null,
9432
- /* @__PURE__ */ jsx53(
9516
+ /* @__PURE__ */ jsx54(
9433
9517
  "p",
9434
9518
  {
9435
9519
  className: cn(
@@ -9440,7 +9524,7 @@ function OfferSaleCard({
9440
9524
  }
9441
9525
  )
9442
9526
  ] }),
9443
- /* @__PURE__ */ jsxs38(
9527
+ /* @__PURE__ */ jsxs39(
9444
9528
  "span",
9445
9529
  {
9446
9530
  className: cn(
@@ -9450,8 +9534,8 @@ function OfferSaleCard({
9450
9534
  "aria-hidden": "true",
9451
9535
  children: [
9452
9536
  "View",
9453
- /* @__PURE__ */ jsx53("span", { className: "clcosdk:max-md:hidden", children: " offer" }),
9454
- /* @__PURE__ */ jsx53(ArrowRight, { className: "clcosdk:size-4", "aria-hidden": true })
9537
+ /* @__PURE__ */ jsx54("span", { className: "clcosdk:max-md:hidden", children: " offer" }),
9538
+ /* @__PURE__ */ jsx54(ArrowRight, { className: "clcosdk:size-4", "aria-hidden": true })
9455
9539
  ]
9456
9540
  }
9457
9541
  )
@@ -9459,8 +9543,8 @@ function OfferSaleCard({
9459
9543
  ]
9460
9544
  }
9461
9545
  );
9462
- const wrapped = containerClassName ? /* @__PURE__ */ jsx53("div", { className: containerClassName, children: card }) : card;
9463
- return /* @__PURE__ */ jsx53(CoinListStyleScope, { children: wrapped });
9546
+ const wrapped = containerClassName ? /* @__PURE__ */ jsx54("div", { className: containerClassName, children: card }) : card;
9547
+ return /* @__PURE__ */ jsx54(CoinListStyleScope, { children: wrapped });
9464
9548
  }
9465
9549
  var SALE_PHASE_LABEL = {
9466
9550
  upcoming: "Upcoming",
@@ -9473,10 +9557,10 @@ function cardActionLabel2(offer, phase) {
9473
9557
  }
9474
9558
 
9475
9559
  // src/client/components/offers/grid/OffersGridView.tsx
9476
- import { jsx as jsx54, jsxs as jsxs39 } from "react/jsx-runtime";
9560
+ import { jsx as jsx55, jsxs as jsxs40 } from "react/jsx-runtime";
9477
9561
  var DEFAULT_MAX_COLUMNS2 = 2;
9478
9562
  function OffersGridView(props) {
9479
- return /* @__PURE__ */ jsx54(CoinListStyleScope, { children: /* @__PURE__ */ jsx54(OffersGridViewBody, { ...props }) });
9563
+ return /* @__PURE__ */ jsx55(CoinListStyleScope, { children: /* @__PURE__ */ jsx55(OffersGridViewBody, { ...props }) });
9480
9564
  }
9481
9565
  function OffersGridViewBody({
9482
9566
  state,
@@ -9490,13 +9574,13 @@ function OffersGridViewBody({
9490
9574
  }) {
9491
9575
  switch (state.type) {
9492
9576
  case "loading":
9493
- return loading ?? /* @__PURE__ */ jsx54(LoadingState, {});
9577
+ return loading ?? /* @__PURE__ */ jsx55(LoadingState, {});
9494
9578
  case "error":
9495
- return error ?? /* @__PURE__ */ jsx54(ErrorState, { message: state.message });
9579
+ return error ?? /* @__PURE__ */ jsx55(ErrorState, { message: state.message });
9496
9580
  case "empty":
9497
- return emptyState ?? /* @__PURE__ */ jsx54(EmptyState, {});
9581
+ return emptyState ?? /* @__PURE__ */ jsx55(EmptyState, {});
9498
9582
  case "content":
9499
- return /* @__PURE__ */ jsx54(
9583
+ return /* @__PURE__ */ jsx55(
9500
9584
  OffersGridContent,
9501
9585
  {
9502
9586
  offers: state.offers,
@@ -9526,14 +9610,14 @@ function OffersGridContent({
9526
9610
  Math.max(1, maxColumns ?? DEFAULT_MAX_COLUMNS2)
9527
9611
  );
9528
9612
  const maxGridWidth = `calc(${cols} * 28rem + ${Math.max(cols - 1, 0)} * 1.5rem)`;
9529
- return /* @__PURE__ */ jsx54(
9613
+ return /* @__PURE__ */ jsx55(
9530
9614
  "div",
9531
9615
  {
9532
9616
  className: cn(
9533
9617
  "clcosdk:flex clcosdk:w-full clcosdk:justify-center",
9534
9618
  containerClassName
9535
9619
  ),
9536
- children: /* @__PURE__ */ jsx54(
9620
+ children: /* @__PURE__ */ jsx55(
9537
9621
  "div",
9538
9622
  {
9539
9623
  className: cn(
@@ -9542,7 +9626,7 @@ function OffersGridContent({
9542
9626
  className
9543
9627
  ),
9544
9628
  style: { maxWidth: maxGridWidth },
9545
- children: offers.map((offer) => /* @__PURE__ */ jsx54(
9629
+ children: offers.map((offer) => /* @__PURE__ */ jsx55(
9546
9630
  OfferSaleCard,
9547
9631
  {
9548
9632
  offer,
@@ -9556,17 +9640,17 @@ function OffersGridContent({
9556
9640
  );
9557
9641
  }
9558
9642
  function LoadingState() {
9559
- return /* @__PURE__ */ jsx54(
9643
+ return /* @__PURE__ */ jsx55(
9560
9644
  "output",
9561
9645
  {
9562
9646
  "aria-live": "polite",
9563
9647
  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",
9564
- children: /* @__PURE__ */ jsx54("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading offers..." })
9648
+ children: /* @__PURE__ */ jsx55("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading offers..." })
9565
9649
  }
9566
9650
  );
9567
9651
  }
9568
9652
  function ErrorState({ message }) {
9569
- return /* @__PURE__ */ jsx54(
9653
+ return /* @__PURE__ */ jsx55(
9570
9654
  AlertBanner,
9571
9655
  {
9572
9656
  variant: "error",
@@ -9577,13 +9661,13 @@ function ErrorState({ message }) {
9577
9661
  );
9578
9662
  }
9579
9663
  function EmptyState() {
9580
- return /* @__PURE__ */ jsxs39(
9664
+ return /* @__PURE__ */ jsxs40(
9581
9665
  "output",
9582
9666
  {
9583
9667
  "aria-live": "polite",
9584
9668
  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",
9585
9669
  children: [
9586
- /* @__PURE__ */ jsx54(
9670
+ /* @__PURE__ */ jsx55(
9587
9671
  "p",
9588
9672
  {
9589
9673
  className: cn(
@@ -9593,14 +9677,14 @@ function EmptyState() {
9593
9677
  children: "No offers available"
9594
9678
  }
9595
9679
  ),
9596
- /* @__PURE__ */ jsx54("p", { className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"), children: "Check back soon for upcoming opportunities." })
9680
+ /* @__PURE__ */ jsx55("p", { className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"), children: "Check back soon for upcoming opportunities." })
9597
9681
  ]
9598
9682
  }
9599
9683
  );
9600
9684
  }
9601
9685
 
9602
9686
  // src/client/hooks/offers/grid/useOffersGridViewModel.ts
9603
- import { useCallback as useCallback6, useMemo as useMemo4 } from "react";
9687
+ import { useCallback as useCallback7, useMemo as useMemo6 } from "react";
9604
9688
 
9605
9689
  // src/client/hooks/offers/data/useOffers.ts
9606
9690
  import { useEffect as useEffect20, useState as useState24 } from "react";
@@ -9658,36 +9742,147 @@ function useOffers(options = {}) {
9658
9742
  return { offersState };
9659
9743
  }
9660
9744
 
9745
+ // src/client/hooks/offers/shared/offer-logo.types.ts
9746
+ var CARD_LOGO_WIDTH = 96;
9747
+ var OfferLogoUi = {
9748
+ /**
9749
+ * The registry's logo for the token an offer is about, or the offer's own
9750
+ * artwork otherwise, or `null` when neither exists.
9751
+ *
9752
+ * The registry wins when both exist because it is the token's real artwork
9753
+ * where `Offer.logoUrl` is catalogue artwork, and because a swap publishes
9754
+ * without artwork more often than not - which is why `logoUrl` is `null`
9755
+ * on the swap variants.
9756
+ */
9757
+ fromOffer: (offer, tokenMetadata) => {
9758
+ const light = tokenMetadata ? logoImage(tokenMetadata.logo) : null;
9759
+ if (light !== null) {
9760
+ const dark = tokenMetadata?.logoDark ? logoImage(tokenMetadata.logoDark) : null;
9761
+ return { light, dark };
9762
+ }
9763
+ return offer.logoUrl ? { light: { src: offer.logoUrl }, dark: null } : null;
9764
+ }
9765
+ };
9766
+ function logoImage(logo) {
9767
+ const src = tokenLogoUrl(logo, CARD_LOGO_WIDTH);
9768
+ if (src === null) {
9769
+ return null;
9770
+ }
9771
+ const srcSet = tokenLogoSrcSet(logo);
9772
+ return srcSet === null ? { src } : { src, srcSet };
9773
+ }
9774
+
9661
9775
  // src/client/hooks/offers/shared/offer-sale-card.types.ts
9662
9776
  var OfferSaleCardUi = {
9663
- fromOffer: (offer) => ({
9777
+ /**
9778
+ * `tokenMetadata` is the registry's entry for the token the offer is about
9779
+ * (`TokenRegistrySnapshot.forOffer`), or `null` when it lists none. The
9780
+ * registry names win over the offer's own where both exist: they are the
9781
+ * token's canonical name and artwork, where the offer's are catalogue copy.
9782
+ */
9783
+ fromOffer: (offer, tokenMetadata = null) => ({
9664
9784
  id: offer.id,
9665
- tagline: offer.tagline,
9666
- logoUrl: offer.logoUrl,
9667
- startsAt: offer.startsAt,
9785
+ ...tokenMetadata ? { name: tokenMetadata.name } : {},
9786
+ ...saleWindow(offer),
9787
+ logo: OfferLogoUi.fromOffer(offer, tokenMetadata),
9668
9788
  endsAt: offer.endsAt
9669
9789
  }),
9670
- fromDetail: (detail) => ({
9790
+ fromDetail: (detail, tokenMetadata = null) => ({
9671
9791
  id: detail.id,
9672
- name: detail.name,
9673
- tagline: detail.tagline,
9674
- logoUrl: detail.logoUrl,
9675
- startsAt: detail.startsAt,
9792
+ name: tokenMetadata?.name ?? detail.name,
9793
+ ...saleWindow(detail),
9794
+ logo: OfferLogoUi.fromOffer(detail, tokenMetadata),
9676
9795
  endsAt: detail.endsAt
9677
9796
  })
9678
9797
  };
9798
+ function saleWindow(offer) {
9799
+ switch (offer.type) {
9800
+ case "coinlist::token_sale":
9801
+ case "superstate::swap":
9802
+ return { tagline: offer.tagline, startsAt: offer.startsAt };
9803
+ case "ondo::swap":
9804
+ return { tagline: null, startsAt: null };
9805
+ default: {
9806
+ const exhaustive = offer;
9807
+ return exhaustive;
9808
+ }
9809
+ }
9810
+ }
9811
+
9812
+ // src/client/hooks/shared/useTokenRegistry.ts
9813
+ import { useCallback as useCallback6, useEffect as useEffect21, useState as useState25 } from "react";
9814
+ var DISABLED_STATE2 = { type: "DISABLED" };
9815
+ var LOADING_STATE4 = { type: "LOADING" };
9816
+ function useTokenRegistry(options = {}) {
9817
+ const { data, enabled = true } = options;
9818
+ const { coinlist, isReady } = useCoinList();
9819
+ const log = useLogger("useTokenRegistry");
9820
+ const [state, setState] = useState25(
9821
+ () => data !== void 0 ? { type: "CONTENT", registry: TokenRegistrySnapshot.fromTokens(data) } : LOADING_STATE4
9822
+ );
9823
+ const [refetchCount, setRefetchCount] = useState25(0);
9824
+ const refetch = useCallback6(() => {
9825
+ setRefetchCount((count) => count + 1);
9826
+ }, []);
9827
+ useEffect21(() => {
9828
+ let isCancelled = false;
9829
+ const seedActive = data !== void 0 && refetchCount === 0;
9830
+ if (!isReady || !enabled || seedActive) {
9831
+ return () => {
9832
+ isCancelled = true;
9833
+ };
9834
+ }
9835
+ setState(LOADING_STATE4);
9836
+ coinlist.tokens.list().then((tokens) => {
9837
+ if (!isCancelled) {
9838
+ log.debug(() => ({
9839
+ msg: "settled",
9840
+ fields: { state: "CONTENT", count: tokens.length }
9841
+ }));
9842
+ setState({
9843
+ type: "CONTENT",
9844
+ registry: TokenRegistrySnapshot.fromTokens(tokens)
9845
+ });
9846
+ }
9847
+ }).catch((error) => {
9848
+ if (!isCancelled) {
9849
+ log.failure(
9850
+ () => ({
9851
+ msg: "settled",
9852
+ fields: { state: "ERROR", reason: "generic-error" }
9853
+ }),
9854
+ error
9855
+ );
9856
+ setState({ type: "ERROR", reason: "generic-error" });
9857
+ }
9858
+ });
9859
+ return () => {
9860
+ isCancelled = true;
9861
+ };
9862
+ }, [coinlist, isReady, enabled, data, refetchCount, log]);
9863
+ return {
9864
+ // LOADING would be a lie while disabled: nothing is in flight and nothing
9865
+ // will replace it. Settled states (a seed, a previous answer) survive.
9866
+ state: !enabled && state.type === "LOADING" ? DISABLED_STATE2 : state,
9867
+ refetch
9868
+ };
9869
+ }
9679
9870
 
9680
9871
  // src/client/hooks/offers/grid/useOffersGridViewModel.ts
9681
9872
  var NOT_AUTHENTICATED_MESSAGE = "Sign in to view available offers.";
9682
9873
  var GENERIC_ERROR_MESSAGE = "Unable to load offers right now. Please try again.";
9683
9874
  function useOffersGridViewModel(options = {}) {
9684
9875
  const { data, onOfferClick, enabled = true } = options;
9685
- const { offersState } = useOffers({ data, enabled });
9686
- const state = useMemo4(
9687
- () => toUiState(offersState, onOfferClick !== void 0),
9688
- [offersState, onOfferClick]
9876
+ const { offersState } = useOffers({ data: data?.offers, enabled });
9877
+ const { state: registryState } = useTokenRegistry({
9878
+ data: data?.tokens,
9879
+ enabled
9880
+ });
9881
+ const state = useMemo6(
9882
+ () => toUiState(offersState, registryState, onOfferClick !== void 0),
9883
+ [offersState, registryState, onOfferClick]
9689
9884
  );
9690
- const onEvent = useCallback6(
9885
+ const onEvent = useCallback7(
9691
9886
  (event) => {
9692
9887
  switch (event.type) {
9693
9888
  case "ON_OFFER_CLICK": {
@@ -9710,7 +9905,7 @@ function useOffersGridViewModel(options = {}) {
9710
9905
  );
9711
9906
  return { state, onEvent };
9712
9907
  }
9713
- function toUiState(offersState, interactive) {
9908
+ function toUiState(offersState, registryState, interactive) {
9714
9909
  switch (offersState.type) {
9715
9910
  case "LOADING":
9716
9911
  return { type: "loading" };
@@ -9723,9 +9918,18 @@ function toUiState(offersState, interactive) {
9723
9918
  if (offersState.offers.length === 0) {
9724
9919
  return { type: "empty" };
9725
9920
  }
9921
+ if (registryState.type === "LOADING") {
9922
+ return { type: "loading" };
9923
+ }
9924
+ const registry = registryState.type === "CONTENT" ? registryState.registry : null;
9726
9925
  return {
9727
9926
  type: "content",
9728
- offers: offersState.offers.map(OfferSaleCardUi.fromOffer),
9927
+ offers: offersState.offers.map(
9928
+ (offer) => OfferSaleCardUi.fromOffer(
9929
+ offer,
9930
+ registry ? TokenRegistrySnapshot.forOffer(registry, offer) : null
9931
+ )
9932
+ ),
9729
9933
  interactive
9730
9934
  };
9731
9935
  }
@@ -9737,7 +9941,7 @@ function toUiState(offersState, interactive) {
9737
9941
  }
9738
9942
 
9739
9943
  // src/client/components/offers/grid/OffersGridContainer.tsx
9740
- import { jsx as jsx55 } from "react/jsx-runtime";
9944
+ import { jsx as jsx56 } from "react/jsx-runtime";
9741
9945
  function OffersGridContainer({
9742
9946
  data,
9743
9947
  onOfferClick,
@@ -9749,17 +9953,17 @@ function OffersGridContainer({
9749
9953
  onOfferClick,
9750
9954
  enabled
9751
9955
  });
9752
- return /* @__PURE__ */ jsx55(OffersGridView, { state, onEvent, ...viewProps });
9956
+ return /* @__PURE__ */ jsx56(OffersGridView, { state, onEvent, ...viewProps });
9753
9957
  }
9754
9958
 
9755
9959
  // src/client/components/requirements/ConnectedWalletList.tsx
9756
- import { useState as useState25 } from "react";
9757
- import { jsx as jsx56, jsxs as jsxs40 } from "react/jsx-runtime";
9960
+ import { useState as useState26 } from "react";
9961
+ import { jsx as jsx57, jsxs as jsxs41 } from "react/jsx-runtime";
9758
9962
  function ConnectedWalletRow({
9759
9963
  wallet,
9760
9964
  onRemove
9761
9965
  }) {
9762
- const [state, setState] = useState25("idle");
9966
+ const [state, setState] = useState26("idle");
9763
9967
  const remove = async () => {
9764
9968
  if (!onRemove) return;
9765
9969
  setState("removing");
@@ -9770,8 +9974,8 @@ function ConnectedWalletRow({
9770
9974
  setState("error");
9771
9975
  }
9772
9976
  };
9773
- return /* @__PURE__ */ jsxs40("div", { className: "clcosdk:flex clcosdk:min-h-9 clcosdk:flex-wrap clcosdk:items-center clcosdk:justify-between clcosdk:gap-2", children: [
9774
- /* @__PURE__ */ jsx56(
9977
+ return /* @__PURE__ */ jsxs41("div", { className: "clcosdk:flex clcosdk:min-h-9 clcosdk:flex-wrap clcosdk:items-center clcosdk:justify-between clcosdk:gap-2", children: [
9978
+ /* @__PURE__ */ jsx57(
9775
9979
  "span",
9776
9980
  {
9777
9981
  title: wallet.address,
@@ -9782,16 +9986,16 @@ function ConnectedWalletRow({
9782
9986
  children: wallet.shortAddress
9783
9987
  }
9784
9988
  ),
9785
- onRemove != null && (state === "confirming" ? /* @__PURE__ */ jsxs40("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
9786
- /* @__PURE__ */ jsx56(
9989
+ onRemove != null && (state === "confirming" ? /* @__PURE__ */ jsxs41("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
9990
+ /* @__PURE__ */ jsx57(
9787
9991
  "span",
9788
9992
  {
9789
9993
  className: cn(typeClasses.subhead, "clcosdk:text-text-secondary"),
9790
9994
  children: "Remove?"
9791
9995
  }
9792
9996
  ),
9793
- /* @__PURE__ */ jsx56(ClButton, { size: "sm", variant: "destructive", onClick: remove, children: "Remove" }),
9794
- /* @__PURE__ */ jsx56(
9997
+ /* @__PURE__ */ jsx57(ClButton, { size: "sm", variant: "destructive", onClick: remove, children: "Remove" }),
9998
+ /* @__PURE__ */ jsx57(
9795
9999
  ClButton,
9796
10000
  {
9797
10001
  size: "sm",
@@ -9800,9 +10004,9 @@ function ConnectedWalletRow({
9800
10004
  children: "Cancel"
9801
10005
  }
9802
10006
  )
9803
- ] }) : state === "error" ? /* @__PURE__ */ jsxs40("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
9804
- /* @__PURE__ */ jsx56("span", { className: cn(typeClasses.subhead, "clcosdk:text-error"), children: "Couldn't remove." }),
9805
- /* @__PURE__ */ jsx56(
10007
+ ] }) : state === "error" ? /* @__PURE__ */ jsxs41("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-2", children: [
10008
+ /* @__PURE__ */ jsx57("span", { className: cn(typeClasses.subhead, "clcosdk:text-error"), children: "Couldn't remove." }),
10009
+ /* @__PURE__ */ jsx57(
9806
10010
  ClButton,
9807
10011
  {
9808
10012
  size: "sm",
@@ -9811,7 +10015,7 @@ function ConnectedWalletRow({
9811
10015
  children: "Try again"
9812
10016
  }
9813
10017
  )
9814
- ] }) : /* @__PURE__ */ jsx56(
10018
+ ] }) : /* @__PURE__ */ jsx57(
9815
10019
  ClButton,
9816
10020
  {
9817
10021
  size: "sm",
@@ -9824,7 +10028,7 @@ function ConnectedWalletRow({
9824
10028
  ] });
9825
10029
  }
9826
10030
  function ConnectedWalletList(props) {
9827
- return /* @__PURE__ */ jsx56(CoinListStyleScope, { children: /* @__PURE__ */ jsx56(ConnectedWalletListBody, { ...props }) });
10031
+ return /* @__PURE__ */ jsx57(CoinListStyleScope, { children: /* @__PURE__ */ jsx57(ConnectedWalletListBody, { ...props }) });
9828
10032
  }
9829
10033
  function ConnectedWalletListBody({
9830
10034
  wallets,
@@ -9834,18 +10038,18 @@ function ConnectedWalletListBody({
9834
10038
  status = "ready",
9835
10039
  className
9836
10040
  }) {
9837
- return /* @__PURE__ */ jsxs40(
10041
+ return /* @__PURE__ */ jsxs41(
9838
10042
  "div",
9839
10043
  {
9840
10044
  className: cn("clcosdk:flex clcosdk:flex-col clcosdk:gap-2", className),
9841
10045
  children: [
9842
- status === "loading" ? /* @__PURE__ */ jsx56(AlertBanner, { variant: "info", content: "Loading your connected wallets\u2026" }) : status === "error" ? /* @__PURE__ */ jsx56(
10046
+ status === "loading" ? /* @__PURE__ */ jsx57(AlertBanner, { variant: "info", content: "Loading your connected wallets\u2026" }) : status === "error" ? /* @__PURE__ */ jsx57(
9843
10047
  AlertBanner,
9844
10048
  {
9845
10049
  variant: "error",
9846
10050
  content: "Couldn't load your connected wallets."
9847
10051
  }
9848
- ) : wallets.length === 0 ? /* @__PURE__ */ jsx56(AlertBanner, { variant: "info", content: "No wallets connected yet." }) : /* @__PURE__ */ jsx56("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: wallets.map((wallet) => /* @__PURE__ */ jsx56(
10052
+ ) : wallets.length === 0 ? /* @__PURE__ */ jsx57(AlertBanner, { variant: "info", content: "No wallets connected yet." }) : /* @__PURE__ */ jsx57("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: wallets.map((wallet) => /* @__PURE__ */ jsx57(
9849
10053
  ConnectedWalletRow,
9850
10054
  {
9851
10055
  wallet,
@@ -9853,7 +10057,7 @@ function ConnectedWalletListBody({
9853
10057
  },
9854
10058
  wallet.id
9855
10059
  )) }),
9856
- onAdd != null && status !== "loading" && /* @__PURE__ */ jsx56(
10060
+ onAdd != null && status !== "loading" && /* @__PURE__ */ jsx57(
9857
10061
  ClButton,
9858
10062
  {
9859
10063
  size: "sm",
@@ -9870,9 +10074,9 @@ function ConnectedWalletListBody({
9870
10074
 
9871
10075
  // src/client/components/requirements/identity-verification/IdentityVerificationView.tsx
9872
10076
  import SumsubWebSdk from "@sumsub/websdk-react";
9873
- import { jsx as jsx57, jsxs as jsxs41 } from "react/jsx-runtime";
10077
+ import { jsx as jsx58, jsxs as jsxs42 } from "react/jsx-runtime";
9874
10078
  function IdentityVerificationView(props) {
9875
- return /* @__PURE__ */ jsx57(CoinListStyleScope, { children: /* @__PURE__ */ jsx57(IdentityVerificationViewBody, { ...props }) });
10079
+ return /* @__PURE__ */ jsx58(CoinListStyleScope, { children: /* @__PURE__ */ jsx58(IdentityVerificationViewBody, { ...props }) });
9876
10080
  }
9877
10081
  function IdentityVerificationViewBody({
9878
10082
  state,
@@ -9881,7 +10085,7 @@ function IdentityVerificationViewBody({
9881
10085
  }) {
9882
10086
  switch (state.type) {
9883
10087
  case "loading":
9884
- return /* @__PURE__ */ jsx57(
10088
+ return /* @__PURE__ */ jsx58(
9885
10089
  "output",
9886
10090
  {
9887
10091
  "aria-live": "polite",
@@ -9889,11 +10093,11 @@ function IdentityVerificationViewBody({
9889
10093
  "clcosdk:flex clcosdk:min-h-40 clcosdk:items-center clcosdk:justify-center",
9890
10094
  className
9891
10095
  ),
9892
- children: /* @__PURE__ */ jsx57("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading identity verification..." })
10096
+ children: /* @__PURE__ */ jsx58("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading identity verification..." })
9893
10097
  }
9894
10098
  );
9895
10099
  case "error":
9896
- return /* @__PURE__ */ jsxs41(
10100
+ return /* @__PURE__ */ jsxs42(
9897
10101
  "div",
9898
10102
  {
9899
10103
  className: cn(
@@ -9901,13 +10105,13 @@ function IdentityVerificationViewBody({
9901
10105
  className
9902
10106
  ),
9903
10107
  children: [
9904
- /* @__PURE__ */ jsx57(AlertBanner, { variant: "error", icon: true, content: state.message }),
9905
- state.retryable && /* @__PURE__ */ jsx57(ClButton, { size: "sm", onClick: () => onEvent({ type: "ON_RETRY" }), children: "Try again" })
10108
+ /* @__PURE__ */ jsx58(AlertBanner, { variant: "error", icon: true, content: state.message }),
10109
+ state.retryable && /* @__PURE__ */ jsx58(ClButton, { size: "sm", onClick: () => onEvent({ type: "ON_RETRY" }), children: "Try again" })
9906
10110
  ]
9907
10111
  }
9908
10112
  );
9909
10113
  case "ready":
9910
- return /* @__PURE__ */ jsx57("div", { className: cn("clcosdk:w-full", className), children: /* @__PURE__ */ jsx57(
10114
+ return /* @__PURE__ */ jsx58("div", { className: cn("clcosdk:w-full", className), children: /* @__PURE__ */ jsx58(
9911
10115
  SumsubWebSdk,
9912
10116
  {
9913
10117
  accessToken: state.accessToken,
@@ -9947,25 +10151,25 @@ function toError(error) {
9947
10151
  }
9948
10152
 
9949
10153
  // src/client/hooks/requirements/identity-verification/useIdentityVerificationViewModel.ts
9950
- import { useCallback as useCallback8, useEffect as useEffect22, useMemo as useMemo5, useRef as useRef15 } from "react";
10154
+ import { useCallback as useCallback9, useEffect as useEffect23, useMemo as useMemo7, useRef as useRef15 } from "react";
9951
10155
 
9952
10156
  // src/client/hooks/requirements/data/useKycToken.ts
9953
- import { useCallback as useCallback7, useEffect as useEffect21, useRef as useRef14, useState as useState26 } from "react";
10157
+ import { useCallback as useCallback8, useEffect as useEffect22, useRef as useRef14, useState as useState27 } from "react";
9954
10158
  var IDLE_STATE = { type: "IDLE" };
9955
- var LOADING_STATE4 = { type: "LOADING" };
10159
+ var LOADING_STATE5 = { type: "LOADING" };
9956
10160
  function useKycToken(levelName, reset) {
9957
10161
  const { coinlist } = useCoinList();
9958
10162
  const log = useLogger("useKycToken");
9959
- const [kycTokenState, setKycTokenState] = useState26(IDLE_STATE);
10163
+ const [kycTokenState, setKycTokenState] = useState27(IDLE_STATE);
9960
10164
  const resetPendingRef = useRef14(reset === true);
9961
10165
  const tokenIssuedRef = useRef14(false);
9962
- useEffect21(() => {
10166
+ useEffect22(() => {
9963
10167
  if (!tokenIssuedRef.current) {
9964
10168
  resetPendingRef.current = reset === true;
9965
10169
  }
9966
10170
  }, [reset]);
9967
- const fetchToken = useCallback7(async () => {
9968
- setKycTokenState(LOADING_STATE4);
10171
+ const fetchToken = useCallback8(async () => {
10172
+ setKycTokenState(LOADING_STATE5);
9969
10173
  try {
9970
10174
  const kycToken = await coinlist.requirements.createKycToken({
9971
10175
  levelName,
@@ -9999,7 +10203,7 @@ function useIdentityVerificationViewModel(options = {}) {
9999
10203
  const { levelName, reset, locale, onSubmitted, onError } = options;
10000
10204
  const { kycTokenState, fetchToken } = useKycToken(levelName, reset);
10001
10205
  const fetchedRef = useRef15(false);
10002
- useEffect22(() => {
10206
+ useEffect23(() => {
10003
10207
  if (fetchedRef.current) {
10004
10208
  return;
10005
10209
  }
@@ -10007,7 +10211,7 @@ function useIdentityVerificationViewModel(options = {}) {
10007
10211
  fetchToken().catch(() => {
10008
10212
  });
10009
10213
  }, [fetchToken]);
10010
- const state = useMemo5(() => {
10214
+ const state = useMemo7(() => {
10011
10215
  switch (kycTokenState.type) {
10012
10216
  case "IDLE":
10013
10217
  case "LOADING":
@@ -10033,7 +10237,7 @@ function useIdentityVerificationViewModel(options = {}) {
10033
10237
  }
10034
10238
  }
10035
10239
  }, [kycTokenState, locale, fetchToken]);
10036
- const onEvent = useCallback8(
10240
+ const onEvent = useCallback9(
10037
10241
  (event) => {
10038
10242
  switch (event.type) {
10039
10243
  case "ON_RETRY":
@@ -10058,7 +10262,7 @@ function useIdentityVerificationViewModel(options = {}) {
10058
10262
  }
10059
10263
 
10060
10264
  // src/client/components/requirements/identity-verification/IdentityVerificationContainer.tsx
10061
- import { jsx as jsx58 } from "react/jsx-runtime";
10265
+ import { jsx as jsx59 } from "react/jsx-runtime";
10062
10266
  function IdentityVerificationContainer({
10063
10267
  levelName,
10064
10268
  reset,
@@ -10074,7 +10278,7 @@ function IdentityVerificationContainer({
10074
10278
  onSubmitted,
10075
10279
  onError
10076
10280
  });
10077
- return /* @__PURE__ */ jsx58(
10281
+ return /* @__PURE__ */ jsx59(
10078
10282
  IdentityVerificationView,
10079
10283
  {
10080
10284
  state,
@@ -10089,7 +10293,7 @@ import { ChevronRight } from "lucide-react";
10089
10293
 
10090
10294
  // src/client/components/design-system/StepStatusIcon.tsx
10091
10295
  import { CircleCheck as CircleCheck2, CircleX, Info as Info5 } from "lucide-react";
10092
- import { jsx as jsx59 } from "react/jsx-runtime";
10296
+ import { jsx as jsx60 } from "react/jsx-runtime";
10093
10297
  var statusConfig = {
10094
10298
  required: {
10095
10299
  Icon: Info5,
@@ -10114,7 +10318,7 @@ var statusConfig = {
10114
10318
  };
10115
10319
  function StepStatusIcon({ status, className }) {
10116
10320
  const { Icon, colorClass, fillClass } = statusConfig[status];
10117
- return /* @__PURE__ */ jsx59(
10321
+ return /* @__PURE__ */ jsx60(
10118
10322
  Icon,
10119
10323
  {
10120
10324
  className: cn(
@@ -10129,49 +10333,90 @@ function StepStatusIcon({ status, className }) {
10129
10333
  }
10130
10334
 
10131
10335
  // src/client/components/requirements/RequirementItem.tsx
10132
- import { Fragment as Fragment9, jsx as jsx60, jsxs as jsxs42 } from "react/jsx-runtime";
10336
+ import { Fragment as Fragment10, jsx as jsx61, jsxs as jsxs43 } from "react/jsx-runtime";
10337
+ var DEFAULT_PENDING = "Under review. We'll notify you when complete.";
10338
+ var DEFAULT_REJECTED = "Verification rejected.";
10339
+ var SUPPORT_LINK = "Contact support";
10133
10340
  function VerificationActionZone({
10134
10341
  status,
10342
+ statusMessages,
10135
10343
  onAction,
10136
10344
  onContactSupport
10137
10345
  }) {
10138
10346
  switch (status) {
10139
10347
  case "required":
10140
10348
  if (onAction === null) return null;
10141
- return /* @__PURE__ */ jsx60(ClButton, { size: "sm", onClick: onAction, children: "Continue" });
10349
+ return /* @__PURE__ */ jsx61(ClButton, { size: "sm", className: "clcosdk:self-start", onClick: onAction, children: "Continue" });
10142
10350
  case "pending":
10143
- return /* @__PURE__ */ jsx60(
10351
+ return /* @__PURE__ */ jsx61(
10144
10352
  AlertBanner,
10145
10353
  {
10146
10354
  variant: "warning",
10147
- content: "Under review. We'll notify you when complete."
10355
+ content: statusMessages?.pending ?? DEFAULT_PENDING
10148
10356
  }
10149
10357
  );
10150
10358
  case "completed":
10151
- return /* @__PURE__ */ jsx60(AlertBanner, { variant: "success", content: "Identity verified." });
10359
+ return /* @__PURE__ */ jsx61(
10360
+ AlertBanner,
10361
+ {
10362
+ variant: "success",
10363
+ content: statusMessages?.completed ?? "Identity verified."
10364
+ }
10365
+ );
10152
10366
  case "rejected":
10153
- return /* @__PURE__ */ jsx60(
10367
+ return /* @__PURE__ */ jsx61(
10154
10368
  AlertBanner,
10155
10369
  {
10156
10370
  variant: "error",
10157
- content: onContactSupport === null ? "Verification rejected." : /* @__PURE__ */ jsxs42(Fragment9, { children: [
10158
- "Verification rejected.",
10159
- " ",
10160
- /* @__PURE__ */ jsx60(
10161
- "button",
10162
- {
10163
- type: "button",
10164
- onClick: onContactSupport,
10165
- className: "clcosdk:underline",
10166
- children: "Contact support"
10167
- }
10168
- ),
10169
- "."
10170
- ] })
10371
+ content: /* @__PURE__ */ jsx61(
10372
+ RejectedMessage,
10373
+ {
10374
+ message: statusMessages?.rejected ?? DEFAULT_REJECTED,
10375
+ onContactSupport
10376
+ }
10377
+ )
10171
10378
  }
10172
10379
  );
10173
10380
  }
10174
10381
  }
10382
+ function RejectedMessage({
10383
+ message,
10384
+ onContactSupport
10385
+ }) {
10386
+ const linkAt = message.indexOf(SUPPORT_LINK);
10387
+ if (onContactSupport == null) {
10388
+ return message;
10389
+ }
10390
+ if (linkAt === -1) {
10391
+ return /* @__PURE__ */ jsxs43(Fragment10, { children: [
10392
+ message,
10393
+ " ",
10394
+ /* @__PURE__ */ jsx61(
10395
+ "button",
10396
+ {
10397
+ type: "button",
10398
+ onClick: onContactSupport,
10399
+ className: "clcosdk:underline",
10400
+ children: SUPPORT_LINK
10401
+ }
10402
+ ),
10403
+ "."
10404
+ ] });
10405
+ }
10406
+ return /* @__PURE__ */ jsxs43(Fragment10, { children: [
10407
+ message.slice(0, linkAt),
10408
+ /* @__PURE__ */ jsx61(
10409
+ "button",
10410
+ {
10411
+ type: "button",
10412
+ onClick: onContactSupport,
10413
+ className: "clcosdk:underline",
10414
+ children: SUPPORT_LINK
10415
+ }
10416
+ ),
10417
+ message.slice(linkAt + SUPPORT_LINK.length)
10418
+ ] });
10419
+ }
10175
10420
  function WalletActionZone({
10176
10421
  status,
10177
10422
  multiWallet,
@@ -10181,8 +10426,8 @@ function WalletActionZone({
10181
10426
  onRemoveWallet
10182
10427
  }) {
10183
10428
  if (multiWallet) {
10184
- return /* @__PURE__ */ jsxs42(Fragment9, { children: [
10185
- /* @__PURE__ */ jsx60(
10429
+ return /* @__PURE__ */ jsxs43(Fragment10, { children: [
10430
+ /* @__PURE__ */ jsx61(
10186
10431
  ConnectedWalletList,
10187
10432
  {
10188
10433
  wallets: connectedWallets,
@@ -10191,7 +10436,7 @@ function WalletActionZone({
10191
10436
  status: walletsStatus
10192
10437
  }
10193
10438
  ),
10194
- status === "rejected" && /* @__PURE__ */ jsx60(
10439
+ status === "rejected" && /* @__PURE__ */ jsx61(
10195
10440
  AlertBanner,
10196
10441
  {
10197
10442
  variant: "error",
@@ -10202,21 +10447,30 @@ function WalletActionZone({
10202
10447
  }
10203
10448
  if (status === "completed") {
10204
10449
  const connected = connectedWallets[0];
10205
- return /* @__PURE__ */ jsxs42(Fragment9, { children: [
10206
- onAction !== null && /* @__PURE__ */ jsx60(ClButton, { size: "sm", variant: "secondary", onClick: onAction, children: "Change wallet" }),
10207
- walletsStatus === "loading" ? /* @__PURE__ */ jsx60(
10450
+ return /* @__PURE__ */ jsxs43(Fragment10, { children: [
10451
+ onAction !== null && /* @__PURE__ */ jsx61(
10452
+ ClButton,
10453
+ {
10454
+ size: "sm",
10455
+ variant: "secondary",
10456
+ className: "clcosdk:self-start",
10457
+ onClick: onAction,
10458
+ children: "Change wallet"
10459
+ }
10460
+ ),
10461
+ walletsStatus === "loading" ? /* @__PURE__ */ jsx61(
10208
10462
  AlertBanner,
10209
10463
  {
10210
10464
  variant: "info",
10211
10465
  content: "Loading your connected wallet\u2026"
10212
10466
  }
10213
- ) : walletsStatus === "error" ? /* @__PURE__ */ jsx60(
10467
+ ) : walletsStatus === "error" ? /* @__PURE__ */ jsx61(
10214
10468
  AlertBanner,
10215
10469
  {
10216
10470
  variant: "error",
10217
10471
  content: "Couldn't load your connected wallet."
10218
10472
  }
10219
- ) : /* @__PURE__ */ jsx60(
10473
+ ) : /* @__PURE__ */ jsx61(
10220
10474
  AlertBanner,
10221
10475
  {
10222
10476
  variant: "success",
@@ -10226,9 +10480,9 @@ function WalletActionZone({
10226
10480
  ] });
10227
10481
  }
10228
10482
  if (status === "rejected") {
10229
- return /* @__PURE__ */ jsxs42(Fragment9, { children: [
10230
- onAction !== null && /* @__PURE__ */ jsx60(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" }),
10231
- /* @__PURE__ */ jsx60(
10483
+ return /* @__PURE__ */ jsxs43(Fragment10, { children: [
10484
+ onAction !== null && /* @__PURE__ */ jsx61(ClButton, { size: "sm", className: "clcosdk:self-start", onClick: onAction, children: "Connect wallet" }),
10485
+ /* @__PURE__ */ jsx61(
10232
10486
  AlertBanner,
10233
10487
  {
10234
10488
  variant: "error",
@@ -10238,7 +10492,7 @@ function WalletActionZone({
10238
10492
  ] });
10239
10493
  }
10240
10494
  if (onAction === null) return null;
10241
- return /* @__PURE__ */ jsx60(ClButton, { size: "sm", onClick: onAction, children: "Connect wallet" });
10495
+ return /* @__PURE__ */ jsx61(ClButton, { size: "sm", className: "clcosdk:self-start", onClick: onAction, children: "Connect wallet" });
10242
10496
  }
10243
10497
  function RequirementItem({
10244
10498
  ui,
@@ -10248,9 +10502,10 @@ function RequirementItem({
10248
10502
  onAction,
10249
10503
  onRemoveWallet,
10250
10504
  walletsStatus,
10251
- onContactSupport
10505
+ onContactSupport,
10506
+ spaceBeforeNextRow = true
10252
10507
  }) {
10253
- return /* @__PURE__ */ jsx60(CoinListStyleScope, { children: /* @__PURE__ */ jsxs42(
10508
+ return /* @__PURE__ */ jsx61(CoinListStyleScope, { children: /* @__PURE__ */ jsxs43(
10254
10509
  "div",
10255
10510
  {
10256
10511
  className: cn(
@@ -10258,17 +10513,17 @@ function RequirementItem({
10258
10513
  className
10259
10514
  ),
10260
10515
  children: [
10261
- /* @__PURE__ */ jsxs42(
10516
+ /* @__PURE__ */ jsxs43(
10262
10517
  "button",
10263
10518
  {
10264
10519
  type: "button",
10265
10520
  onClick: onToggle,
10266
10521
  "aria-expanded": expanded,
10267
- 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",
10522
+ className: "clcosdk:-mx-2 clcosdk:flex clcosdk:h-14 clcosdk:w-[calc(100%+16px)] clcosdk:cursor-pointer clcosdk:items-center clcosdk:justify-between clcosdk:rounded-2xl clcosdk:px-2 clcosdk:transition-colors clcosdk:hover:bg-surface",
10268
10523
  children: [
10269
- /* @__PURE__ */ jsxs42("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
10270
- /* @__PURE__ */ jsx60(StepStatusIcon, { status: ui.status }),
10271
- /* @__PURE__ */ jsx60(
10524
+ /* @__PURE__ */ jsxs43("div", { className: "clcosdk:flex clcosdk:items-center clcosdk:gap-3", children: [
10525
+ /* @__PURE__ */ jsx61(StepStatusIcon, { status: ui.status }),
10526
+ /* @__PURE__ */ jsx61(
10272
10527
  "span",
10273
10528
  {
10274
10529
  className: cn(
@@ -10279,7 +10534,7 @@ function RequirementItem({
10279
10534
  }
10280
10535
  )
10281
10536
  ] }),
10282
- /* @__PURE__ */ jsx60(
10537
+ /* @__PURE__ */ jsx61(
10283
10538
  ChevronRight,
10284
10539
  {
10285
10540
  className: cn(
@@ -10292,43 +10547,53 @@ function RequirementItem({
10292
10547
  ]
10293
10548
  }
10294
10549
  ),
10295
- /* @__PURE__ */ jsx60(
10550
+ /* @__PURE__ */ jsx61(
10296
10551
  "div",
10297
10552
  {
10298
10553
  className: cn(
10299
10554
  "clcosdk:grid clcosdk:transition-[grid-template-rows] clcosdk:duration-300 clcosdk:ease-in-out",
10300
10555
  expanded ? "clcosdk:grid-rows-[1fr]" : "clcosdk:grid-rows-[0fr]"
10301
10556
  ),
10302
- children: /* @__PURE__ */ jsx60("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ jsxs42("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4 clcosdk:px-2 clcosdk:pb-4", children: [
10303
- /* @__PURE__ */ jsx60(
10304
- "p",
10305
- {
10306
- className: cn(
10307
- typeClasses.subhead,
10308
- "clcosdk:text-text-secondary"
10557
+ children: /* @__PURE__ */ jsx61("div", { className: "clcosdk:min-h-0 clcosdk:overflow-hidden", children: /* @__PURE__ */ jsxs43(
10558
+ "div",
10559
+ {
10560
+ className: cn(
10561
+ "clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
10562
+ spaceBeforeNextRow && "clcosdk:pb-4"
10563
+ ),
10564
+ children: [
10565
+ /* @__PURE__ */ jsx61(
10566
+ "p",
10567
+ {
10568
+ className: cn(
10569
+ typeClasses.bodySm,
10570
+ "clcosdk:text-text-secondary"
10571
+ ),
10572
+ children: ui.description
10573
+ }
10309
10574
  ),
10310
- children: ui.description
10311
- }
10312
- ),
10313
- ui.variant === "verification" ? /* @__PURE__ */ jsx60(
10314
- VerificationActionZone,
10315
- {
10316
- status: ui.status,
10317
- onAction,
10318
- onContactSupport
10319
- }
10320
- ) : /* @__PURE__ */ jsx60(
10321
- WalletActionZone,
10322
- {
10323
- status: ui.status,
10324
- multiWallet: ui.multiWallet,
10325
- connectedWallets: ui.connectedWallets,
10326
- walletsStatus,
10327
- onAction,
10328
- onRemoveWallet
10329
- }
10330
- )
10331
- ] }) })
10575
+ ui.variant === "verification" ? /* @__PURE__ */ jsx61(
10576
+ VerificationActionZone,
10577
+ {
10578
+ status: ui.status,
10579
+ statusMessages: ui.statusMessages,
10580
+ onAction,
10581
+ onContactSupport
10582
+ }
10583
+ ) : /* @__PURE__ */ jsx61(
10584
+ WalletActionZone,
10585
+ {
10586
+ status: ui.status,
10587
+ multiWallet: ui.multiWallet,
10588
+ connectedWallets: ui.connectedWallets,
10589
+ walletsStatus,
10590
+ onAction,
10591
+ onRemoveWallet
10592
+ }
10593
+ )
10594
+ ]
10595
+ }
10596
+ ) })
10332
10597
  }
10333
10598
  )
10334
10599
  ]
@@ -10337,35 +10602,29 @@ function RequirementItem({
10337
10602
  }
10338
10603
 
10339
10604
  // src/client/components/requirements/RequirementsChecklistView.tsx
10340
- import { jsx as jsx61, jsxs as jsxs43 } from "react/jsx-runtime";
10605
+ import { Fragment as Fragment11, jsx as jsx62, jsxs as jsxs44 } from "react/jsx-runtime";
10341
10606
  function RequirementsChecklistView(props) {
10342
- return /* @__PURE__ */ jsx61(CoinListStyleScope, { children: /* @__PURE__ */ jsx61(RequirementsChecklistViewBody, { ...props }) });
10607
+ return /* @__PURE__ */ jsx62(CoinListStyleScope, { children: /* @__PURE__ */ jsx62(RequirementsChecklistViewBody, { ...props }) });
10343
10608
  }
10344
10609
  function RequirementsChecklistViewBody({
10345
10610
  state,
10346
10611
  onEvent,
10347
10612
  loading,
10348
10613
  error,
10349
- unauthenticatedState,
10350
10614
  className
10351
10615
  }) {
10352
10616
  switch (state.type) {
10353
10617
  case "loading":
10354
- return loading ?? /* @__PURE__ */ jsx61(LoadingState2, {});
10355
- case "not-authenticated":
10356
- return unauthenticatedState ?? null;
10357
- case "error":
10358
- return error ?? /* @__PURE__ */ jsx61(
10359
- AlertBanner,
10618
+ return loading ?? /* @__PURE__ */ jsx62(
10619
+ LoadingState2,
10360
10620
  {
10361
- variant: "error",
10362
- icon: true,
10363
- content: "Unable to load requirements right now. Please try again.",
10364
- className: "clcosdk:w-full clcosdk:max-w-[28rem]"
10621
+ title: state.title,
10622
+ description: state.description,
10623
+ className
10365
10624
  }
10366
10625
  );
10367
- case "content":
10368
- return /* @__PURE__ */ jsxs43(
10626
+ case "error":
10627
+ return /* @__PURE__ */ jsxs44(
10369
10628
  "div",
10370
10629
  {
10371
10630
  className: cn(
@@ -10373,46 +10632,91 @@ function RequirementsChecklistViewBody({
10373
10632
  className
10374
10633
  ),
10375
10634
  children: [
10376
- /* @__PURE__ */ jsxs43("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
10377
- /* @__PURE__ */ jsx61("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
10378
- /* @__PURE__ */ jsx61("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: state.description })
10379
- ] }),
10380
- /* @__PURE__ */ jsx61("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row) => /* @__PURE__ */ jsx61(
10381
- RequirementItem,
10382
- {
10383
- ui: row.item,
10384
- expanded: row.expanded,
10385
- onToggle: () => onEvent({ type: "ON_TOGGLE_ITEM", requirementId: row.id }),
10386
- onAction: row.actionEnabled ? () => onEvent({
10387
- type: "ON_REQUIREMENT_ACTION",
10388
- requirementId: row.id
10389
- }) : null,
10390
- onRemoveWallet: row.wallets ? (id) => state.removeWallet(id) : void 0,
10391
- walletsStatus: row.wallets?.status,
10392
- onContactSupport: row.contactSupportEnabled ? () => onEvent({
10393
- type: "ON_CONTACT_SUPPORT",
10394
- requirementId: row.id
10395
- }) : null
10396
- },
10397
- row.id
10398
- )) }),
10399
- state.ineligible && /* @__PURE__ */ jsx61(
10635
+ /* @__PURE__ */ jsx62("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
10636
+ error ?? /* @__PURE__ */ jsx62(
10400
10637
  AlertBanner,
10401
10638
  {
10402
10639
  variant: "error",
10403
10640
  icon: true,
10404
- content: "You are not eligible to participate."
10641
+ content: "Unable to load requirements. Refresh the page to try again."
10405
10642
  }
10406
- ),
10407
- state.continueAction && /* @__PURE__ */ jsx61(
10643
+ )
10644
+ ]
10645
+ }
10646
+ );
10647
+ case "content":
10648
+ return /* @__PURE__ */ jsxs44(
10649
+ "div",
10650
+ {
10651
+ className: cn(
10652
+ "clcosdk:flex clcosdk:w-full clcosdk:flex-col clcosdk:gap-4",
10653
+ className
10654
+ ),
10655
+ children: [
10656
+ /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
10657
+ /* @__PURE__ */ jsx62("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
10658
+ state.blockedMessage == null && /* @__PURE__ */ jsx62(
10659
+ "p",
10660
+ {
10661
+ className: cn(typeClasses.body, "clcosdk:text-text-secondary"),
10662
+ children: state.items.length === 0 ? "No requirements to complete." : state.description
10663
+ }
10664
+ )
10665
+ ] }),
10666
+ state.blockedMessage != null ? /* @__PURE__ */ jsx62(AlertBanner, { variant: "info", icon: true, content: state.blockedMessage }) : state.items.length === 0 ? state.continueAction && /* @__PURE__ */ jsx62(
10408
10667
  ClButton,
10409
10668
  {
10669
+ variant: "primary",
10410
10670
  fullWidth: true,
10411
10671
  disabled: !state.continueAction.enabled,
10412
10672
  onClick: () => onEvent({ type: "ON_CONTINUE" }),
10413
10673
  children: "Continue"
10414
10674
  }
10415
- )
10675
+ ) : /* @__PURE__ */ jsxs44(Fragment11, { children: [
10676
+ /* @__PURE__ */ jsx62("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:divide-y clcosdk:divide-divider", children: state.items.map((row, index) => /* @__PURE__ */ jsx62(
10677
+ RequirementItem,
10678
+ {
10679
+ ui: row.item,
10680
+ expanded: row.expanded,
10681
+ spaceBeforeNextRow: index < state.items.length - 1,
10682
+ onToggle: () => onEvent({ type: "ON_TOGGLE_ITEM", requirementId: row.id }),
10683
+ onAction: row.actionEnabled ? () => onEvent({
10684
+ type: "ON_REQUIREMENT_ACTION",
10685
+ requirementId: row.id
10686
+ }) : null,
10687
+ onRemoveWallet: row.wallets ? (id) => state.removeWallet(id) : void 0,
10688
+ walletsStatus: row.wallets?.status,
10689
+ onContactSupport: row.contactSupportEnabled ? () => onEvent({
10690
+ type: "ON_CONTACT_SUPPORT",
10691
+ requirementId: row.id
10692
+ }) : null
10693
+ },
10694
+ row.id
10695
+ )) }),
10696
+ /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-row clcosdk:items-center clcosdk:justify-between clcosdk:gap-6", children: [
10697
+ /* @__PURE__ */ jsx62(
10698
+ "span",
10699
+ {
10700
+ className: cn(
10701
+ typeClasses.subhead,
10702
+ "clcosdk:min-w-0",
10703
+ state.ineligible ? "clcosdk:text-error" : "clcosdk:text-text-secondary"
10704
+ ),
10705
+ children: state.ineligible ? "You are not eligible to invest." : completedLabel(state.items)
10706
+ }
10707
+ ),
10708
+ state.continueAction && /* @__PURE__ */ jsx62(
10709
+ ClButton,
10710
+ {
10711
+ variant: "primary",
10712
+ disabled: !state.continueAction.enabled,
10713
+ onClick: () => onEvent({ type: "ON_CONTINUE" }),
10714
+ className: "clcosdk:shrink-0",
10715
+ children: "Continue"
10716
+ }
10717
+ )
10718
+ ] })
10719
+ ] })
10416
10720
  ]
10417
10721
  }
10418
10722
  );
@@ -10422,19 +10726,43 @@ function RequirementsChecklistViewBody({
10422
10726
  }
10423
10727
  }
10424
10728
  }
10425
- function LoadingState2() {
10426
- return /* @__PURE__ */ jsx61(
10427
- "output",
10729
+ function completedLabel(items) {
10730
+ const completed = items.filter(
10731
+ (row) => row.item.status === "completed"
10732
+ ).length;
10733
+ return `${completed}/${items.length} completed`;
10734
+ }
10735
+ var LOADING_ROW_WIDTHS = [
10736
+ "clcosdk:w-3/5",
10737
+ "clcosdk:w-2/5",
10738
+ "clcosdk:w-1/2"
10739
+ ];
10740
+ function LoadingState2({
10741
+ title: title2,
10742
+ description: description2,
10743
+ className
10744
+ }) {
10745
+ return /* @__PURE__ */ jsxs44(
10746
+ "div",
10428
10747
  {
10429
- "aria-live": "polite",
10430
- 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",
10431
- children: /* @__PURE__ */ jsx61("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Loading requirements..." })
10748
+ className: cn(
10749
+ "clcosdk:flex clcosdk:w-full clcosdk:flex-col clcosdk:gap-4",
10750
+ className
10751
+ ),
10752
+ children: [
10753
+ /* @__PURE__ */ jsx62("output", { className: "clcosdk:sr-only", children: "Loading requirements..." }),
10754
+ /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
10755
+ /* @__PURE__ */ jsx62("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: title2 }),
10756
+ /* @__PURE__ */ jsx62("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: description2 })
10757
+ ] }),
10758
+ /* @__PURE__ */ jsx62("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-3", children: LOADING_ROW_WIDTHS.map((width) => /* @__PURE__ */ jsx62(Skeleton, { className: cn("clcosdk:h-8", width) }, width)) })
10759
+ ]
10432
10760
  }
10433
10761
  );
10434
10762
  }
10435
10763
 
10436
10764
  // src/client/components/requirements/tax-document/TaxDocumentModalView.tsx
10437
- import { jsx as jsx62, jsxs as jsxs44 } from "react/jsx-runtime";
10765
+ import { jsx as jsx63, jsxs as jsxs45 } from "react/jsx-runtime";
10438
10766
  function TaxDocumentModalView({
10439
10767
  state,
10440
10768
  onEvent,
@@ -10443,7 +10771,7 @@ function TaxDocumentModalView({
10443
10771
  if (state.type === "hidden") {
10444
10772
  return null;
10445
10773
  }
10446
- return /* @__PURE__ */ jsx62(CoinListStyleScope, { children: /* @__PURE__ */ jsx62("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__ */ jsxs44(
10774
+ return /* @__PURE__ */ jsx63(CoinListStyleScope, { children: /* @__PURE__ */ jsx63("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__ */ jsxs45(
10447
10775
  "div",
10448
10776
  {
10449
10777
  className: cn(
@@ -10451,11 +10779,11 @@ function TaxDocumentModalView({
10451
10779
  className
10452
10780
  ),
10453
10781
  children: [
10454
- /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
10455
- /* @__PURE__ */ jsx62("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
10456
- /* @__PURE__ */ jsx62(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
10782
+ /* @__PURE__ */ jsxs45("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
10783
+ /* @__PURE__ */ jsx63("h3", { className: cn(typeClasses.h3, "clcosdk:text-text-primary"), children: state.title }),
10784
+ /* @__PURE__ */ jsx63(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
10457
10785
  ] }),
10458
- /* @__PURE__ */ jsx62(Screen, { screen: state.screen, onEvent })
10786
+ /* @__PURE__ */ jsx63(Screen, { screen: state.screen, onEvent })
10459
10787
  ]
10460
10788
  }
10461
10789
  ) }) });
@@ -10466,11 +10794,11 @@ function Screen({
10466
10794
  }) {
10467
10795
  switch (screen.type) {
10468
10796
  case "loading":
10469
- return /* @__PURE__ */ jsx62(LoadingScreen, {});
10797
+ return /* @__PURE__ */ jsx63(LoadingScreen, {});
10470
10798
  case "error":
10471
- return /* @__PURE__ */ jsx62(AlertBanner, { variant: "error", icon: true, content: screen.message });
10799
+ return /* @__PURE__ */ jsx63(AlertBanner, { variant: "error", icon: true, content: screen.message });
10472
10800
  case "review":
10473
- return /* @__PURE__ */ jsx62(
10801
+ return /* @__PURE__ */ jsx63(
10474
10802
  ReviewScreen,
10475
10803
  {
10476
10804
  fields: screen.fields,
@@ -10481,9 +10809,9 @@ function Screen({
10481
10809
  }
10482
10810
  );
10483
10811
  case "editing":
10484
- return /* @__PURE__ */ jsx62(EditScreen, { fields: screen.fields, onEvent });
10812
+ return /* @__PURE__ */ jsx63(EditScreen, { fields: screen.fields, onEvent });
10485
10813
  case "sign-only":
10486
- return /* @__PURE__ */ jsx62(
10814
+ return /* @__PURE__ */ jsx63(
10487
10815
  SignOnlyScreen,
10488
10816
  {
10489
10817
  signing: screen.signing,
@@ -10498,14 +10826,14 @@ function Screen({
10498
10826
  }
10499
10827
  }
10500
10828
  function LoadingScreen() {
10501
- return /* @__PURE__ */ jsx62(
10829
+ return /* @__PURE__ */ jsx63(
10502
10830
  "output",
10503
10831
  {
10504
10832
  "aria-live": "polite",
10505
10833
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-4",
10506
- children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
10507
- /* @__PURE__ */ jsx62("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
10508
- /* @__PURE__ */ jsx62("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
10834
+ children: [0, 1, 2, 3, 4].map((row) => /* @__PURE__ */ jsxs45("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1", children: [
10835
+ /* @__PURE__ */ jsx63("div", { className: "clcosdk:h-3 clcosdk:w-28 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" }),
10836
+ /* @__PURE__ */ jsx63("div", { className: "clcosdk:h-5 clcosdk:w-48 clcosdk:animate-pulse clcosdk:rounded clcosdk:bg-surface" })
10509
10837
  ] }, row))
10510
10838
  }
10511
10839
  );
@@ -10517,9 +10845,9 @@ function ReviewScreen({
10517
10845
  signError,
10518
10846
  onEvent
10519
10847
  }) {
10520
- return /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
10521
- /* @__PURE__ */ jsx62("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Review your information below. If anything looks incorrect, edit before signing." }),
10522
- piiUnavailable && /* @__PURE__ */ jsx62(
10848
+ return /* @__PURE__ */ jsxs45("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
10849
+ /* @__PURE__ */ jsx63("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Review your information below. If anything looks incorrect, edit before signing." }),
10850
+ piiUnavailable && /* @__PURE__ */ jsx63(
10523
10851
  AlertBanner,
10524
10852
  {
10525
10853
  variant: "info",
@@ -10527,27 +10855,27 @@ function ReviewScreen({
10527
10855
  content: "We don't have this information on file yet \u2014 please fill it in below."
10528
10856
  }
10529
10857
  ),
10530
- /* @__PURE__ */ jsx62("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__ */ jsxs44(
10858
+ /* @__PURE__ */ jsx63("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__ */ jsxs45(
10531
10859
  "div",
10532
10860
  {
10533
10861
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
10534
10862
  children: [
10535
- /* @__PURE__ */ jsx62(
10863
+ /* @__PURE__ */ jsx63(
10536
10864
  "span",
10537
10865
  {
10538
10866
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
10539
10867
  children: label
10540
10868
  }
10541
10869
  ),
10542
- /* @__PURE__ */ jsx62("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
10870
+ /* @__PURE__ */ jsx63("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: displayValue })
10543
10871
  ]
10544
10872
  },
10545
10873
  field
10546
10874
  )) }),
10547
- /* @__PURE__ */ jsx62("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." }),
10548
- signError && /* @__PURE__ */ jsx62(AlertBanner, { variant: "error", icon: true, content: signError }),
10549
- /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
10550
- /* @__PURE__ */ jsx62(
10875
+ /* @__PURE__ */ jsx63("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." }),
10876
+ signError && /* @__PURE__ */ jsx63(AlertBanner, { variant: "error", icon: true, content: signError }),
10877
+ /* @__PURE__ */ jsxs45("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
10878
+ /* @__PURE__ */ jsx63(
10551
10879
  ClButton,
10552
10880
  {
10553
10881
  fullWidth: true,
@@ -10557,7 +10885,7 @@ function ReviewScreen({
10557
10885
  children: "Sign W-8BEN"
10558
10886
  }
10559
10887
  ),
10560
- /* @__PURE__ */ jsx62(
10888
+ /* @__PURE__ */ jsx63(
10561
10889
  ClButton,
10562
10890
  {
10563
10891
  fullWidth: true,
@@ -10574,20 +10902,20 @@ function EditScreen({
10574
10902
  fields,
10575
10903
  onEvent
10576
10904
  }) {
10577
- return /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
10578
- /* @__PURE__ */ jsx62("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__ */ jsxs44(
10905
+ return /* @__PURE__ */ jsxs45("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
10906
+ /* @__PURE__ */ jsx63("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__ */ jsxs45(
10579
10907
  "label",
10580
10908
  {
10581
10909
  className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1",
10582
10910
  children: [
10583
- /* @__PURE__ */ jsx62(
10911
+ /* @__PURE__ */ jsx63(
10584
10912
  "span",
10585
10913
  {
10586
10914
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
10587
10915
  children: label
10588
10916
  }
10589
10917
  ),
10590
- /* @__PURE__ */ jsx62(
10918
+ /* @__PURE__ */ jsx63(
10591
10919
  "input",
10592
10920
  {
10593
10921
  type: "text",
@@ -10608,9 +10936,9 @@ function EditScreen({
10608
10936
  },
10609
10937
  field
10610
10938
  )) }),
10611
- /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
10612
- /* @__PURE__ */ jsx62(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
10613
- /* @__PURE__ */ jsx62(
10939
+ /* @__PURE__ */ jsxs45("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-2", children: [
10940
+ /* @__PURE__ */ jsx63(ClButton, { fullWidth: true, onClick: () => onEvent({ type: "ON_SAVE_EDIT" }), children: "Save & review" }),
10941
+ /* @__PURE__ */ jsx63(
10614
10942
  ClButton,
10615
10943
  {
10616
10944
  fullWidth: true,
@@ -10627,10 +10955,10 @@ function SignOnlyScreen({
10627
10955
  signError,
10628
10956
  onEvent
10629
10957
  }) {
10630
- return /* @__PURE__ */ jsxs44("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
10631
- /* @__PURE__ */ jsx62("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." }),
10632
- signError && /* @__PURE__ */ jsx62(AlertBanner, { variant: "error", icon: true, content: signError }),
10633
- /* @__PURE__ */ jsx62(
10958
+ return /* @__PURE__ */ jsxs45("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
10959
+ /* @__PURE__ */ jsx63("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." }),
10960
+ signError && /* @__PURE__ */ jsx63(AlertBanner, { variant: "error", icon: true, content: signError }),
10961
+ /* @__PURE__ */ jsx63(
10634
10962
  ClButton,
10635
10963
  {
10636
10964
  fullWidth: true,
@@ -10644,12 +10972,12 @@ function SignOnlyScreen({
10644
10972
  }
10645
10973
 
10646
10974
  // src/client/hooks/requirements/tax-document/useTaxDocumentModalViewModel.ts
10647
- import { useCallback as useCallback10, useEffect as useEffect24, useMemo as useMemo6 } from "react";
10975
+ import { useCallback as useCallback11, useEffect as useEffect25, useMemo as useMemo8 } from "react";
10648
10976
 
10649
10977
  // src/client/hooks/requirements/data/useTaxDocument.ts
10650
- import { useCallback as useCallback9, useEffect as useEffect23, useState as useState27 } from "react";
10978
+ import { useCallback as useCallback10, useEffect as useEffect24, useState as useState28 } from "react";
10651
10979
  var IDLE_SIGN = { type: "idle", error: null };
10652
- var LOADING_STATE5 = { type: "LOADING" };
10980
+ var LOADING_STATE6 = { type: "LOADING" };
10653
10981
  var SIGN_FAILED_MESSAGE = "Unable to sign document. Please try again.";
10654
10982
  var DOB_INVALID_MESSAGE = "Enter your date of birth as MM/DD/YYYY.";
10655
10983
  var FIELD_KEYS = {
@@ -10722,8 +11050,8 @@ function useTaxDocument({
10722
11050
  }) {
10723
11051
  const { coinlist, isReady } = useCoinList();
10724
11052
  const log = useLogger("useTaxDocument");
10725
- const [state, setState] = useState27(LOADING_STATE5);
10726
- useEffect23(() => {
11053
+ const [state, setState] = useState28(LOADING_STATE6);
11054
+ useEffect24(() => {
10727
11055
  let isCancelled = false;
10728
11056
  if (!isOpen) {
10729
11057
  return () => {
@@ -10731,12 +11059,12 @@ function useTaxDocument({
10731
11059
  };
10732
11060
  }
10733
11061
  if (!isReady) {
10734
- setState(LOADING_STATE5);
11062
+ setState(LOADING_STATE6);
10735
11063
  return () => {
10736
11064
  isCancelled = true;
10737
11065
  };
10738
11066
  }
10739
- setState(LOADING_STATE5);
11067
+ setState(LOADING_STATE6);
10740
11068
  coinlist.requirements.getPii().then((pii) => {
10741
11069
  if (isCancelled) return;
10742
11070
  if (pii.kind === "company") {
@@ -10764,7 +11092,7 @@ function useTaxDocument({
10764
11092
  isCancelled = true;
10765
11093
  };
10766
11094
  }, [coinlist, isReady, isOpen, log]);
10767
- const onEditField = useCallback9(
11095
+ const onEditField = useCallback10(
10768
11096
  (field, value) => {
10769
11097
  setState(
10770
11098
  (prev) => prev.type === "EDITING" ? { ...prev, fields: { ...prev.fields, [field]: value } } : prev
@@ -10772,7 +11100,7 @@ function useTaxDocument({
10772
11100
  },
10773
11101
  []
10774
11102
  );
10775
- const onStartEdit = useCallback9(() => {
11103
+ const onStartEdit = useCallback10(() => {
10776
11104
  setState(
10777
11105
  (prev) => prev.type === "REVIEW" ? {
10778
11106
  type: "EDITING",
@@ -10783,7 +11111,7 @@ function useTaxDocument({
10783
11111
  } : prev
10784
11112
  );
10785
11113
  }, []);
10786
- const onSaveEdit = useCallback9(() => {
11114
+ const onSaveEdit = useCallback10(() => {
10787
11115
  setState(
10788
11116
  (prev) => prev.type === "EDITING" ? {
10789
11117
  type: "REVIEW",
@@ -10794,7 +11122,7 @@ function useTaxDocument({
10794
11122
  } : prev
10795
11123
  );
10796
11124
  }, []);
10797
- const onCancelEdit = useCallback9(() => {
11125
+ const onCancelEdit = useCallback10(() => {
10798
11126
  setState(
10799
11127
  (prev) => prev.type === "EDITING" ? {
10800
11128
  type: "REVIEW",
@@ -10805,7 +11133,7 @@ function useTaxDocument({
10805
11133
  } : prev
10806
11134
  );
10807
11135
  }, []);
10808
- const onSign = useCallback9(() => {
11136
+ const onSign = useCallback10(() => {
10809
11137
  if (state.type !== "REVIEW" && state.type !== "SIGN_ONLY") return;
10810
11138
  if (state.type === "REVIEW" && state.fields.dob.trim() !== "" && !isValidUsDate(state.fields.dob)) {
10811
11139
  setState({
@@ -10847,19 +11175,19 @@ function useTaxDocumentModalViewModel({
10847
11175
  onSubmitted
10848
11176
  }) {
10849
11177
  const { state, onEditField, onStartEdit, onSaveEdit, onCancelEdit, onSign } = useTaxDocument({ isOpen });
10850
- useEffect24(() => {
11178
+ useEffect25(() => {
10851
11179
  if (state.type === "SUBMITTED") {
10852
11180
  onSubmitted?.(state.submission);
10853
11181
  onClose();
10854
11182
  }
10855
11183
  }, [state]);
10856
- const uiState = useMemo6(() => {
11184
+ const uiState = useMemo8(() => {
10857
11185
  if (!isOpen || state.type === "SUBMITTED") {
10858
11186
  return { type: "hidden" };
10859
11187
  }
10860
11188
  return { type: "content", title: toTitle(state), screen: toScreen(state) };
10861
11189
  }, [isOpen, state]);
10862
- const onEvent = useCallback10(
11190
+ const onEvent = useCallback11(
10863
11191
  (event) => {
10864
11192
  switch (event.type) {
10865
11193
  case "ON_CLOSE":
@@ -10942,7 +11270,7 @@ function toFieldsUi(fields) {
10942
11270
  }
10943
11271
 
10944
11272
  // src/client/components/requirements/tax-document/TaxDocumentModalContainer.tsx
10945
- import { jsx as jsx63 } from "react/jsx-runtime";
11273
+ import { jsx as jsx64 } from "react/jsx-runtime";
10946
11274
  function TaxDocumentModalContainer({
10947
11275
  isOpen,
10948
11276
  onClose,
@@ -10954,7 +11282,7 @@ function TaxDocumentModalContainer({
10954
11282
  onClose,
10955
11283
  onSubmitted
10956
11284
  });
10957
- return /* @__PURE__ */ jsx63(
11285
+ return /* @__PURE__ */ jsx64(
10958
11286
  TaxDocumentModalView,
10959
11287
  {
10960
11288
  state,
@@ -10965,26 +11293,26 @@ function TaxDocumentModalContainer({
10965
11293
  }
10966
11294
 
10967
11295
  // src/client/components/requirements/VerificationOverlay.tsx
10968
- import { jsx as jsx64, jsxs as jsxs45 } from "react/jsx-runtime";
11296
+ import { jsx as jsx65, jsxs as jsxs46 } from "react/jsx-runtime";
10969
11297
  function VerificationOverlay({
10970
11298
  onClose,
10971
11299
  children
10972
11300
  }) {
10973
- return /* @__PURE__ */ jsx64(CoinListStyleScope, { children: /* @__PURE__ */ jsx64(VerificationOverlayBody, { onClose, children }) });
11301
+ return /* @__PURE__ */ jsx65(CoinListStyleScope, { children: /* @__PURE__ */ jsx65(VerificationOverlayBody, { onClose, children }) });
10974
11302
  }
10975
11303
  function VerificationOverlayBody({
10976
11304
  onClose,
10977
11305
  children
10978
11306
  }) {
10979
- return /* @__PURE__ */ jsx64(
11307
+ return /* @__PURE__ */ jsx65(
10980
11308
  "div",
10981
11309
  {
10982
11310
  role: "dialog",
10983
11311
  "aria-modal": "true",
10984
11312
  "aria-label": "Identity verification",
10985
11313
  className: "clcosdk:fixed clcosdk:inset-0 clcosdk:z-50 clcosdk:flex clcosdk:items-center clcosdk:justify-center clcosdk:bg-overlay clcosdk:p-4",
10986
- children: /* @__PURE__ */ jsxs45("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: [
10987
- /* @__PURE__ */ jsx64(
11314
+ children: /* @__PURE__ */ jsxs46("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: [
11315
+ /* @__PURE__ */ jsx65(
10988
11316
  CloseButton,
10989
11317
  {
10990
11318
  onClick: onClose,
@@ -10999,7 +11327,7 @@ function VerificationOverlayBody({
10999
11327
 
11000
11328
  // src/client/components/requirements/wallet/ConnectWalletModalView.tsx
11001
11329
  import { useId as useId5 } from "react";
11002
- import { jsx as jsx65, jsxs as jsxs46 } from "react/jsx-runtime";
11330
+ import { jsx as jsx66, jsxs as jsxs47 } from "react/jsx-runtime";
11003
11331
  function ConnectWalletModalView({
11004
11332
  state,
11005
11333
  onEvent,
@@ -11009,7 +11337,7 @@ function ConnectWalletModalView({
11009
11337
  if (state.type === "hidden") {
11010
11338
  return null;
11011
11339
  }
11012
- return /* @__PURE__ */ jsx65(CoinListStyleScope, { children: /* @__PURE__ */ jsx65("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__ */ jsxs46(
11340
+ return /* @__PURE__ */ jsx66(CoinListStyleScope, { children: /* @__PURE__ */ jsx66("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__ */ jsxs47(
11013
11341
  "div",
11014
11342
  {
11015
11343
  role: "dialog",
@@ -11020,8 +11348,8 @@ function ConnectWalletModalView({
11020
11348
  className
11021
11349
  ),
11022
11350
  children: [
11023
- /* @__PURE__ */ jsxs46("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
11024
- /* @__PURE__ */ jsx65(
11351
+ /* @__PURE__ */ jsxs47("div", { className: "clcosdk:flex clcosdk:items-start clcosdk:justify-between clcosdk:gap-4", children: [
11352
+ /* @__PURE__ */ jsx66(
11025
11353
  "h3",
11026
11354
  {
11027
11355
  id: titleId,
@@ -11029,9 +11357,9 @@ function ConnectWalletModalView({
11029
11357
  children: "Connect your wallet"
11030
11358
  }
11031
11359
  ),
11032
- /* @__PURE__ */ jsx65(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
11360
+ /* @__PURE__ */ jsx66(CloseButton, { onClick: () => onEvent({ type: "ON_CLOSE" }) })
11033
11361
  ] }),
11034
- /* @__PURE__ */ jsx65(
11362
+ /* @__PURE__ */ jsx66(
11035
11363
  Screen2,
11036
11364
  {
11037
11365
  screen: state.screen,
@@ -11050,9 +11378,9 @@ function Screen2({
11050
11378
  }) {
11051
11379
  switch (screen.type) {
11052
11380
  case "needs-wallet":
11053
- return /* @__PURE__ */ jsxs46("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
11054
- /* @__PURE__ */ jsx65("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Connect an external wallet to prove ownership and bind it to this offer." }),
11055
- canRequestConnect && /* @__PURE__ */ jsx65(
11381
+ return /* @__PURE__ */ jsxs47("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
11382
+ /* @__PURE__ */ jsx66("p", { className: cn(typeClasses.body, "clcosdk:text-text-secondary"), children: "Connect an external wallet to prove ownership and bind it to this offer." }),
11383
+ canRequestConnect && /* @__PURE__ */ jsx66(
11056
11384
  ClButton,
11057
11385
  {
11058
11386
  fullWidth: true,
@@ -11062,23 +11390,23 @@ function Screen2({
11062
11390
  )
11063
11391
  ] });
11064
11392
  case "ready":
11065
- return /* @__PURE__ */ jsxs46("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
11066
- /* @__PURE__ */ jsx65("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." }),
11067
- /* @__PURE__ */ jsxs46("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: [
11068
- /* @__PURE__ */ jsx65(
11393
+ return /* @__PURE__ */ jsxs47("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-6", children: [
11394
+ /* @__PURE__ */ jsx66("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." }),
11395
+ /* @__PURE__ */ jsxs47("div", { className: "clcosdk:flex clcosdk:flex-col clcosdk:gap-1 clcosdk:border-t clcosdk:border-divider clcosdk:pt-4", children: [
11396
+ /* @__PURE__ */ jsx66(
11069
11397
  "span",
11070
11398
  {
11071
11399
  className: cn(typeClasses.label, "clcosdk:text-text-secondary"),
11072
11400
  children: "Wallet address"
11073
11401
  }
11074
11402
  ),
11075
- /* @__PURE__ */ jsx65("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: screen.shortAddress })
11403
+ /* @__PURE__ */ jsx66("span", { className: cn(typeClasses.body, "clcosdk:text-text-primary"), children: screen.shortAddress })
11076
11404
  ] }),
11077
11405
  screen.signError && // Live region: the error is inserted async after a failed attempt,
11078
11406
  // so screen readers need it announced rather than silently
11079
11407
  // rendered.
11080
- /* @__PURE__ */ jsx65("div", { role: "alert", children: /* @__PURE__ */ jsx65(AlertBanner, { variant: "error", icon: true, content: screen.signError }) }),
11081
- /* @__PURE__ */ jsx65(
11408
+ /* @__PURE__ */ jsx66("div", { role: "alert", children: /* @__PURE__ */ jsx66(AlertBanner, { variant: "error", icon: true, content: screen.signError }) }),
11409
+ /* @__PURE__ */ jsx66(
11082
11410
  ClButton,
11083
11411
  {
11084
11412
  fullWidth: true,
@@ -11089,7 +11417,7 @@ function Screen2({
11089
11417
  children: "Sign & connect"
11090
11418
  }
11091
11419
  ),
11092
- canRequestConnect && /* @__PURE__ */ jsx65(
11420
+ canRequestConnect && /* @__PURE__ */ jsx66(
11093
11421
  ClButton,
11094
11422
  {
11095
11423
  fullWidth: true,
@@ -11108,10 +11436,10 @@ function Screen2({
11108
11436
  }
11109
11437
 
11110
11438
  // src/client/hooks/requirements/wallet/useConnectWalletModalViewModel.ts
11111
- import { useCallback as useCallback12, useEffect as useEffect26, useMemo as useMemo7 } from "react";
11439
+ import { useCallback as useCallback13, useEffect as useEffect27, useMemo as useMemo9 } from "react";
11112
11440
 
11113
11441
  // src/client/hooks/requirements/data/useConnectWallet.ts
11114
- import { useCallback as useCallback11, useEffect as useEffect25, useRef as useRef16, useState as useState28 } from "react";
11442
+ import { useCallback as useCallback12, useEffect as useEffect26, useRef as useRef16, useState as useState29 } from "react";
11115
11443
 
11116
11444
  // src/client/core/wallets/connect-external-wallet.ts
11117
11445
  var DEFAULT_STATEMENT = "Sign this message to prove you own this wallet. This does not cost gas or move funds.";
@@ -11242,24 +11570,24 @@ function useConnectWallet({
11242
11570
  statement
11243
11571
  }) {
11244
11572
  const { coinlist } = useCoinList();
11245
- const [state, setState] = useState28(
11573
+ const [state, setState] = useState29(
11246
11574
  () => wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
11247
11575
  );
11248
11576
  const attempt = useRef16(0);
11249
- useEffect25(() => {
11577
+ useEffect26(() => {
11250
11578
  attempt.current += 1;
11251
11579
  if (!isOpen) return;
11252
11580
  setState(
11253
11581
  wallet ? { type: "READY", address: wallet.address, sign: IDLE_SIGN2 } : { type: "NEEDS_WALLET" }
11254
11582
  );
11255
11583
  }, [isOpen, wallet?.address]);
11256
- useEffect25(
11584
+ useEffect26(
11257
11585
  () => () => {
11258
11586
  attempt.current += 1;
11259
11587
  },
11260
11588
  []
11261
11589
  );
11262
- const onSign = useCallback11(() => {
11590
+ const onSign = useCallback12(() => {
11263
11591
  if (!wallet || state.type !== "READY") return;
11264
11592
  attempt.current += 1;
11265
11593
  const gen = attempt.current;
@@ -11321,13 +11649,13 @@ function useConnectWalletModalViewModel({
11321
11649
  challengeType,
11322
11650
  statement
11323
11651
  });
11324
- useEffect26(() => {
11652
+ useEffect27(() => {
11325
11653
  if (state.type === "CONNECTED") {
11326
11654
  onConnected?.(state.binding);
11327
11655
  onClose();
11328
11656
  }
11329
11657
  }, [state]);
11330
- const uiState = useMemo7(() => {
11658
+ const uiState = useMemo9(() => {
11331
11659
  if (!isOpen || state.type === "CONNECTED") {
11332
11660
  return { type: "hidden" };
11333
11661
  }
@@ -11352,7 +11680,7 @@ function useConnectWalletModalViewModel({
11352
11680
  canRequestConnect
11353
11681
  };
11354
11682
  }, [isOpen, state, onRequestConnect]);
11355
- const onEvent = useCallback12(
11683
+ const onEvent = useCallback13(
11356
11684
  (event) => {
11357
11685
  switch (event.type) {
11358
11686
  case "ON_CLOSE":
@@ -11376,13 +11704,13 @@ function useConnectWalletModalViewModel({
11376
11704
  }
11377
11705
 
11378
11706
  // src/client/components/requirements/wallet/ConnectWalletModalContainer.tsx
11379
- import { jsx as jsx66 } from "react/jsx-runtime";
11707
+ import { jsx as jsx67 } from "react/jsx-runtime";
11380
11708
  function ConnectWalletModalContainer({
11381
11709
  className,
11382
11710
  ...options
11383
11711
  }) {
11384
11712
  const { state, onEvent } = useConnectWalletModalViewModel(options);
11385
- return /* @__PURE__ */ jsx66(
11713
+ return /* @__PURE__ */ jsx67(
11386
11714
  ConnectWalletModalView,
11387
11715
  {
11388
11716
  state,
@@ -11393,11 +11721,11 @@ function ConnectWalletModalContainer({
11393
11721
  }
11394
11722
 
11395
11723
  // src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
11396
- import { useCallback as useCallback15, useEffect as useEffect29, useMemo as useMemo8, useRef as useRef17, useState as useState31 } from "react";
11724
+ import { useCallback as useCallback16, useEffect as useEffect30, useMemo as useMemo10, useRef as useRef17, useState as useState32 } from "react";
11397
11725
 
11398
11726
  // src/client/hooks/requirements/data/useOptionAddresses.ts
11399
- import { useCallback as useCallback13, useEffect as useEffect27, useState as useState29 } from "react";
11400
- var LOADING_STATE6 = { type: "LOADING" };
11727
+ import { useCallback as useCallback14, useEffect as useEffect28, useState as useState30 } from "react";
11728
+ var LOADING_STATE7 = { type: "LOADING" };
11401
11729
  var EMPTY_STATE = {
11402
11730
  type: "CONTENT",
11403
11731
  addresses: []
@@ -11406,19 +11734,19 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
11406
11734
  const { coinlist, isReady } = useCoinList();
11407
11735
  const log = useLogger("useOptionAddresses");
11408
11736
  const { data, enabled = true } = options;
11409
- const [addressesState, setAddressesState] = useState29(
11410
- data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE6
11737
+ const [addressesState, setAddressesState] = useState30(
11738
+ data !== void 0 ? { type: "CONTENT", addresses: data } : LOADING_STATE7
11411
11739
  );
11412
- const [fetchKey, setFetchKey] = useState29(0);
11413
- const refetch = useCallback13(() => setFetchKey((k) => k + 1), []);
11414
- const disconnect = useCallback13(
11740
+ const [fetchKey, setFetchKey] = useState30(0);
11741
+ const refetch = useCallback14(() => setFetchKey((k) => k + 1), []);
11742
+ const disconnect = useCallback14(
11415
11743
  async (addressId) => {
11416
11744
  await coinlist.wallets.remove({ offerId, addressId });
11417
11745
  refetch();
11418
11746
  },
11419
11747
  [coinlist, offerId, refetch]
11420
11748
  );
11421
- useEffect27(() => {
11749
+ useEffect28(() => {
11422
11750
  let isCancelled = false;
11423
11751
  if (!enabled) {
11424
11752
  setAddressesState(
@@ -11430,7 +11758,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
11430
11758
  }
11431
11759
  if (!isReady) {
11432
11760
  if (data === void 0) {
11433
- setAddressesState(LOADING_STATE6);
11761
+ setAddressesState(LOADING_STATE7);
11434
11762
  }
11435
11763
  return () => {
11436
11764
  isCancelled = true;
@@ -11447,7 +11775,7 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
11447
11775
  isCancelled = true;
11448
11776
  };
11449
11777
  }
11450
- setAddressesState(LOADING_STATE6);
11778
+ setAddressesState(LOADING_STATE7);
11451
11779
  coinlist.wallets.list({ offerId, offerOptionId }).then((addresses) => {
11452
11780
  if (!isCancelled) {
11453
11781
  log.debug(() => ({
@@ -11474,18 +11802,18 @@ function useOptionAddresses(offerId, offerOptionId, options = {}) {
11474
11802
  }
11475
11803
 
11476
11804
  // src/client/hooks/requirements/data/useRequirements.ts
11477
- import { useCallback as useCallback14, useEffect as useEffect28, useState as useState30 } from "react";
11478
- var LOADING_STATE7 = { type: "LOADING" };
11805
+ import { useCallback as useCallback15, useEffect as useEffect29, useState as useState31 } from "react";
11806
+ var LOADING_STATE8 = { type: "LOADING" };
11479
11807
  function useRequirements(offerId, options = {}) {
11480
11808
  const { coinlist, isReady } = useCoinList();
11481
11809
  const log = useLogger("useRequirements");
11482
11810
  const { data, enabled = true } = options;
11483
- const [requirementsState, setRequirementsState] = useState30(
11484
- data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE7
11811
+ const [requirementsState, setRequirementsState] = useState31(
11812
+ data !== void 0 ? { type: "CONTENT", ...data } : LOADING_STATE8
11485
11813
  );
11486
- const [fetchKey, setFetchKey] = useState30(0);
11487
- const refetch = useCallback14(() => setFetchKey((k) => k + 1), []);
11488
- useEffect28(() => {
11814
+ const [fetchKey, setFetchKey] = useState31(0);
11815
+ const refetch = useCallback15(() => setFetchKey((k) => k + 1), []);
11816
+ useEffect29(() => {
11489
11817
  let isCancelled = false;
11490
11818
  if (!enabled) {
11491
11819
  return () => {
@@ -11494,7 +11822,7 @@ function useRequirements(offerId, options = {}) {
11494
11822
  }
11495
11823
  if (!isReady) {
11496
11824
  if (data === void 0) {
11497
- setRequirementsState(LOADING_STATE7);
11825
+ setRequirementsState(LOADING_STATE8);
11498
11826
  }
11499
11827
  return () => {
11500
11828
  isCancelled = true;
@@ -11511,7 +11839,7 @@ function useRequirements(offerId, options = {}) {
11511
11839
  isCancelled = true;
11512
11840
  };
11513
11841
  }
11514
- setRequirementsState(LOADING_STATE7);
11842
+ setRequirementsState(LOADING_STATE8);
11515
11843
  Promise.all([
11516
11844
  coinlist.requirements.forOffer(offerId),
11517
11845
  coinlist.requirements.statuses(offerId)
@@ -11553,7 +11881,7 @@ var RequirementItemUi = {
11553
11881
  fromDomain(req, statusInfo, label, description2, addresses = []) {
11554
11882
  return {
11555
11883
  variant: RequirementVariant.fromType(req.type),
11556
- status: statusInfo ? RequirementStatus.fromStatusValue(statusInfo.status) : "required",
11884
+ status: requirementStatus(req, statusInfo),
11557
11885
  label,
11558
11886
  description: description2,
11559
11887
  multiWallet: req.type === "whitelisted_wallet",
@@ -11561,10 +11889,44 @@ var RequirementItemUi = {
11561
11889
  id: address.id,
11562
11890
  address: address.address,
11563
11891
  shortAddress: shortenAddress(address.address)
11564
- }))
11892
+ })),
11893
+ statusMessages: statusMessagesFor(req.type)
11565
11894
  };
11566
11895
  }
11567
11896
  };
11897
+ var IDENTITY_STATUS_MESSAGES = {
11898
+ pending: "Verification under review. We'll notify you when it's complete.",
11899
+ completed: "Identity verified.",
11900
+ rejected: "We couldn't verify your identity. Contact support for help."
11901
+ };
11902
+ var ACCREDITATION_STATUS_MESSAGES = {
11903
+ pending: "Accreditation under review. We'll notify you when it's complete.",
11904
+ completed: "Accreditation verified.",
11905
+ rejected: "We couldn't verify your accreditation. Contact support for help."
11906
+ };
11907
+ var TAX_DOCUMENTATION_STATUS_MESSAGES = {
11908
+ completed: "Tax documentation completed.",
11909
+ rejected: "We couldn't accept your tax documentation. Contact support for help."
11910
+ };
11911
+ function statusMessagesFor(type) {
11912
+ switch (type) {
11913
+ case "kyc_approved":
11914
+ return IDENTITY_STATUS_MESSAGES;
11915
+ case "accreditation":
11916
+ return ACCREDITATION_STATUS_MESSAGES;
11917
+ case "document":
11918
+ return TAX_DOCUMENTATION_STATUS_MESSAGES;
11919
+ default:
11920
+ return void 0;
11921
+ }
11922
+ }
11923
+ function requirementStatus(req, statusInfo) {
11924
+ if (!statusInfo) return "required";
11925
+ if (req.type === "document" && statusInfo.status === "in_progress") {
11926
+ return "required";
11927
+ }
11928
+ return RequirementStatus.fromStatusValue(statusInfo.status);
11929
+ }
11568
11930
  var RequirementVariant = {
11569
11931
  fromType(type) {
11570
11932
  switch (type) {
@@ -11601,20 +11963,20 @@ var ChecklistStatus = {
11601
11963
 
11602
11964
  // src/client/hooks/requirements/useRequirementsChecklistViewModel.ts
11603
11965
  var DEFAULT_LABELS = {
11604
- kyc_approved: "KYC Verification",
11966
+ kyc_approved: "Identity Verification",
11605
11967
  external_wallet: "External Wallet",
11606
11968
  whitelisted_wallet: "Whitelisted Wallet",
11607
11969
  jurisdiction: "Jurisdiction Check",
11608
11970
  accreditation: "Accreditation",
11609
- document: "Document"
11971
+ document: "Tax Documentation"
11610
11972
  };
11611
11973
  var DEFAULT_DESCRIPTIONS = {
11612
- kyc_approved: "Complete Know Your Customer verification.",
11974
+ kyc_approved: "Complete Know Your Customer (KYC) verification.",
11613
11975
  external_wallet: "Connect an external wallet.",
11614
11976
  whitelisted_wallet: "Connect a whitelisted wallet.",
11615
11977
  jurisdiction: "Confirm your jurisdiction eligibility.",
11616
- accreditation: "Verify your accreditation status.",
11617
- document: "Confirm your Tax Documents."
11978
+ accreditation: "Confirm that you meet accredited investor requirements.",
11979
+ document: "Review and sign the required tax documentation."
11618
11980
  };
11619
11981
  var VERIFICATION_POLL_INTERVAL_MS = 5e3;
11620
11982
  var VERIFICATION_POLL_TIMEOUT_MS = 12e4;
@@ -11645,19 +12007,19 @@ function useRequirementsChecklistViewModel(options) {
11645
12007
  data,
11646
12008
  enabled
11647
12009
  });
11648
- const [expandedId, setExpandedId] = useState31(null);
11649
- const [taxDocumentOpen, setTaxDocumentOpen] = useState31(false);
11650
- const [connectWalletOpen, setConnectWalletOpen] = useState31(false);
11651
- const [verifyingRequirementId, setVerifyingRequirementId] = useState31(null);
12010
+ const [expandedId, setExpandedId] = useState32(null);
12011
+ const [taxDocumentOpen, setTaxDocumentOpen] = useState32(false);
12012
+ const [connectWalletOpen, setConnectWalletOpen] = useState32(false);
12013
+ const [verifyingRequirementId, setVerifyingRequirementId] = useState32(null);
11652
12014
  const isMountedRef = useRef17(true);
11653
- useEffect29(() => {
12015
+ useEffect30(() => {
11654
12016
  isMountedRef.current = true;
11655
12017
  return () => {
11656
12018
  isMountedRef.current = false;
11657
12019
  };
11658
12020
  }, []);
11659
- const [hasWalletRequirement, setHasWalletRequirement] = useState31(false);
11660
- useEffect29(() => {
12021
+ const [hasWalletRequirement, setHasWalletRequirement] = useState32(false);
12022
+ useEffect30(() => {
11661
12023
  if (requirementsState.type === "CONTENT") {
11662
12024
  setHasWalletRequirement(
11663
12025
  (requirementsState.requirements[optionId] ?? []).some(
@@ -11673,14 +12035,14 @@ function useRequirementsChecklistViewModel(options) {
11673
12035
  } = useOptionAddresses(offerId, optionId, {
11674
12036
  enabled: enabled && hasWalletRequirement
11675
12037
  });
11676
- const removeWallet = useCallback15(
12038
+ const removeWallet = useCallback16(
11677
12039
  async (addressId) => {
11678
12040
  await disconnect(OfferOptionAddressId(addressId));
11679
12041
  refetch();
11680
12042
  },
11681
12043
  [disconnect, refetch]
11682
12044
  );
11683
- const awaitVerificationResult = useCallback15(
12045
+ const awaitVerificationResult = useCallback16(
11684
12046
  (requirementId, statusBeforeSubmit) => {
11685
12047
  void (async () => {
11686
12048
  const deadline = Date.now() + VERIFICATION_POLL_TIMEOUT_MS;
@@ -11707,11 +12069,11 @@ function useRequirementsChecklistViewModel(options) {
11707
12069
  },
11708
12070
  [coinlist, offerId, refetch, log]
11709
12071
  );
11710
- const requirements = useMemo8(
12072
+ const requirements = useMemo10(
11711
12073
  () => requirementsState.type === "CONTENT" ? requirementsState.requirements[optionId] ?? [] : [],
11712
12074
  [requirementsState, optionId]
11713
12075
  );
11714
- const statusById = useMemo8(() => {
12076
+ const statusById = useMemo10(() => {
11715
12077
  if (requirementsState.type !== "CONTENT") {
11716
12078
  return /* @__PURE__ */ new Map();
11717
12079
  }
@@ -11720,12 +12082,12 @@ function useRequirementsChecklistViewModel(options) {
11720
12082
  requirementsState.statuses.filter((s) => ids.has(s.id)).map((s) => [s.id, s])
11721
12083
  );
11722
12084
  }, [requirementsState, requirements]);
11723
- const state = useMemo8(() => {
12085
+ const state = useMemo10(() => {
11724
12086
  switch (requirementsState.type) {
11725
12087
  case "LOADING":
11726
- return { type: "loading" };
12088
+ return { type: "loading", title: title2, description: description2 };
11727
12089
  case "ERROR":
11728
- return requirementsState.reason === "not-authenticated" ? { type: "not-authenticated" } : { type: "error" };
12090
+ return { type: "error", title: title2 };
11729
12091
  case "CONTENT": {
11730
12092
  const optionStatuses = [...statusById.values()];
11731
12093
  const checklistStatus = ChecklistStatus.derive(optionStatuses);
@@ -11789,7 +12151,7 @@ function useRequirementsChecklistViewModel(options) {
11789
12151
  identityVerificationOptions,
11790
12152
  removeWallet
11791
12153
  ]);
11792
- const handleRequirementAction = useCallback15(
12154
+ const handleRequirementAction = useCallback16(
11793
12155
  (requirement) => {
11794
12156
  const inlineVerification = statusById.get(requirement.id)?.kycLevel !== void 0 && onRequirementActionOverride === void 0;
11795
12157
  if (inlineVerification) {
@@ -11821,7 +12183,7 @@ function useRequirementsChecklistViewModel(options) {
11821
12183
  coinlist
11822
12184
  ]
11823
12185
  );
11824
- const onEvent = useCallback15(
12186
+ const onEvent = useCallback16(
11825
12187
  (event) => {
11826
12188
  switch (event.type) {
11827
12189
  case "ON_TOGGLE_ITEM":
@@ -11919,11 +12281,10 @@ function toVerificationUi(verifyingRequirementId, statusById, identityVerificati
11919
12281
  }
11920
12282
 
11921
12283
  // src/client/components/requirements/RequirementsChecklistContainer.tsx
11922
- import { Fragment as Fragment10, jsx as jsx67, jsxs as jsxs47 } from "react/jsx-runtime";
12284
+ import { Fragment as Fragment12, jsx as jsx68, jsxs as jsxs48 } from "react/jsx-runtime";
11923
12285
  function RequirementsChecklistContainer({
11924
12286
  loading,
11925
12287
  error,
11926
- unauthenticatedState,
11927
12288
  className,
11928
12289
  enabled = true,
11929
12290
  ...options
@@ -11932,24 +12293,19 @@ function RequirementsChecklistContainer({
11932
12293
  ...options,
11933
12294
  enabled
11934
12295
  });
11935
- return /* @__PURE__ */ jsxs47(Fragment10, { children: [
11936
- /* @__PURE__ */ jsx67(
12296
+ return /* @__PURE__ */ jsxs48(Fragment12, { children: [
12297
+ /* @__PURE__ */ jsx68(
11937
12298
  RequirementsChecklistView,
11938
12299
  {
11939
12300
  state,
11940
12301
  onEvent,
11941
12302
  loading,
11942
12303
  error,
11943
- unauthenticatedState: (
11944
- // The sign-in default lives here, not in the View: it is a connected
11945
- // component, and a View must render from what it is handed.
11946
- unauthenticatedState !== void 0 ? unauthenticatedState : /* @__PURE__ */ jsx67(CoinListSignInCardContainer, {})
11947
- ),
11948
12304
  className
11949
12305
  }
11950
12306
  ),
11951
- state.type === "content" && /* @__PURE__ */ jsxs47(Fragment10, { children: [
11952
- /* @__PURE__ */ jsx67(
12307
+ state.type === "content" && /* @__PURE__ */ jsxs48(Fragment12, { children: [
12308
+ /* @__PURE__ */ jsx68(
11953
12309
  TaxDocumentModalContainer,
11954
12310
  {
11955
12311
  isOpen: state.taxDocumentOpen,
@@ -11957,11 +12313,11 @@ function RequirementsChecklistContainer({
11957
12313
  onSubmitted: () => onEvent({ type: "ON_TAX_DOCUMENT_SUBMITTED" })
11958
12314
  }
11959
12315
  ),
11960
- state.verification && /* @__PURE__ */ jsx67(
12316
+ state.verification && /* @__PURE__ */ jsx68(
11961
12317
  VerificationOverlay,
11962
12318
  {
11963
12319
  onClose: () => onEvent({ type: "ON_CLOSE_VERIFICATION" }),
11964
- children: /* @__PURE__ */ jsx67(
12320
+ children: /* @__PURE__ */ jsx68(
11965
12321
  IdentityVerificationContainer,
11966
12322
  {
11967
12323
  levelName: state.verification.levelName,
@@ -11972,7 +12328,7 @@ function RequirementsChecklistContainer({
11972
12328
  )
11973
12329
  }
11974
12330
  ),
11975
- /* @__PURE__ */ jsx67(
12331
+ /* @__PURE__ */ jsx68(
11976
12332
  ConnectWalletModalContainer,
11977
12333
  {
11978
12334
  isOpen: state.connectWalletOpen,
@@ -12005,7 +12361,7 @@ function pinoClientLogger(options) {
12005
12361
  }
12006
12362
 
12007
12363
  // src/client/hooks/auth/useCompleteOAuth.ts
12008
- import { useEffect as useEffect30, useRef as useRef18 } from "react";
12364
+ import { useEffect as useEffect31, useRef as useRef18 } from "react";
12009
12365
  function useCompleteOAuth(options) {
12010
12366
  const { coinlist } = useCoinList();
12011
12367
  const log = useLogger("useCompleteOAuth");
@@ -12016,7 +12372,7 @@ function useCompleteOAuth(options) {
12016
12372
  onFailureRef.current = options.onFailure;
12017
12373
  onSuccessRef.current = options.onSuccess;
12018
12374
  const hasStartedExchangeRef = useRef18(false);
12019
- useEffect30(() => {
12375
+ useEffect31(() => {
12020
12376
  if (typeof window === "undefined") return;
12021
12377
  const params = new URLSearchParams(window.location.search);
12022
12378
  if (!params.has("code") && !params.has("error")) return;
@@ -12080,16 +12436,16 @@ function useCompleteOAuth(options) {
12080
12436
  }
12081
12437
 
12082
12438
  // src/client/hooks/checkout/coin-list/token-sale/data/useParticipations.ts
12083
- import { useEffect as useEffect31, useState as useState32 } from "react";
12084
- var LOADING_STATE8 = { type: "LOADING" };
12439
+ import { useEffect as useEffect32, useState as useState33 } from "react";
12440
+ var LOADING_STATE9 = { type: "LOADING" };
12085
12441
  function useParticipations(offerId, options = {}) {
12086
12442
  const { coinlist, isReady } = useCoinList();
12087
12443
  const log = useLogger("useParticipations");
12088
12444
  const { data, enabled = true } = options;
12089
- const [participationsState, setParticipationsState] = useState32(
12090
- data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE8
12445
+ const [participationsState, setParticipationsState] = useState33(
12446
+ data !== void 0 ? { type: "CONTENT", participations: data } : LOADING_STATE9
12091
12447
  );
12092
- useEffect31(() => {
12448
+ useEffect32(() => {
12093
12449
  let isCancelled = false;
12094
12450
  if (!enabled) {
12095
12451
  return () => {
@@ -12098,7 +12454,7 @@ function useParticipations(offerId, options = {}) {
12098
12454
  }
12099
12455
  if (!isReady) {
12100
12456
  if (data === void 0) {
12101
- setParticipationsState(LOADING_STATE8);
12457
+ setParticipationsState(LOADING_STATE9);
12102
12458
  }
12103
12459
  return () => {
12104
12460
  isCancelled = true;
@@ -12109,7 +12465,7 @@ function useParticipations(offerId, options = {}) {
12109
12465
  isCancelled = true;
12110
12466
  };
12111
12467
  }
12112
- setParticipationsState(LOADING_STATE8);
12468
+ setParticipationsState(LOADING_STATE9);
12113
12469
  coinlist.tokenSale.list(offerId).then((participations) => {
12114
12470
  if (!isCancelled) {
12115
12471
  log.debug(() => ({
@@ -12136,16 +12492,16 @@ function useParticipations(offerId, options = {}) {
12136
12492
  }
12137
12493
 
12138
12494
  // src/client/hooks/offers/data/useOfferDetails.ts
12139
- import { useEffect as useEffect32, useState as useState33 } from "react";
12140
- var LOADING_STATE9 = { type: "LOADING" };
12495
+ import { useEffect as useEffect33, useState as useState34 } from "react";
12496
+ var LOADING_STATE10 = { type: "LOADING" };
12141
12497
  function useOfferDetails(offerId, options = {}) {
12142
12498
  const { coinlist, isReady } = useCoinList();
12143
12499
  const log = useLogger("useOfferDetails");
12144
12500
  const { data, enabled = true } = options;
12145
- const [offerDetailsState, setOfferDetailsState] = useState33(
12146
- data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE9
12501
+ const [offerDetailsState, setOfferDetailsState] = useState34(
12502
+ data !== void 0 ? { type: "CONTENT", offerDetail: data } : LOADING_STATE10
12147
12503
  );
12148
- useEffect32(() => {
12504
+ useEffect33(() => {
12149
12505
  let isCancelled = false;
12150
12506
  if (!enabled) {
12151
12507
  return () => {
@@ -12154,7 +12510,7 @@ function useOfferDetails(offerId, options = {}) {
12154
12510
  }
12155
12511
  if (!isReady) {
12156
12512
  if (data === void 0) {
12157
- setOfferDetailsState(LOADING_STATE9);
12513
+ setOfferDetailsState(LOADING_STATE10);
12158
12514
  }
12159
12515
  return () => {
12160
12516
  isCancelled = true;
@@ -12165,7 +12521,7 @@ function useOfferDetails(offerId, options = {}) {
12165
12521
  isCancelled = true;
12166
12522
  };
12167
12523
  }
12168
- setOfferDetailsState(LOADING_STATE9);
12524
+ setOfferDetailsState(LOADING_STATE10);
12169
12525
  coinlist.offers.get(offerId).then((offerDetail) => {
12170
12526
  if (!isCancelled) {
12171
12527
  log.debug(() => ({
@@ -12193,15 +12549,23 @@ function useOfferDetails(offerId, options = {}) {
12193
12549
 
12194
12550
  // src/client/hooks/offers/shared/offer-asset-card.types.ts
12195
12551
  var OfferAssetCardUi = {
12196
- fromOffer: (offer) => ({
12552
+ /**
12553
+ * `tokenMetadata` is the registry's entry for the token the offer is about
12554
+ * (`TokenRegistrySnapshot.forOffer`), or `null` when it lists none. The
12555
+ * registry names win over the offer's own where both exist: they are the
12556
+ * token's canonical name, ticker and artwork, where the offer's are
12557
+ * catalogue copy.
12558
+ */
12559
+ fromOffer: (offer, tokenMetadata = null) => ({
12197
12560
  id: offer.id,
12198
- logoUrl: offer.logoUrl
12561
+ ...tokenMetadata ? { name: tokenMetadata.name, symbol: String(tokenMetadata.symbol) } : {},
12562
+ logo: OfferLogoUi.fromOffer(offer, tokenMetadata)
12199
12563
  }),
12200
- fromDetail: (detail) => ({
12564
+ fromDetail: (detail, tokenMetadata = null) => ({
12201
12565
  id: detail.id,
12202
- name: detail.name,
12203
- symbol: detail.asset.code,
12204
- logoUrl: detail.logoUrl
12566
+ name: tokenMetadata?.name ?? detail.name,
12567
+ symbol: tokenMetadata ? String(tokenMetadata.symbol) : detail.asset.code,
12568
+ logo: OfferLogoUi.fromOffer(detail, tokenMetadata)
12205
12569
  })
12206
12570
  };
12207
12571
 
@@ -12243,6 +12607,7 @@ export {
12243
12607
  OAUTH_STATE_KEY,
12244
12608
  OfferAssetCard,
12245
12609
  OfferAssetCardUi,
12610
+ OfferLogoUi,
12246
12611
  OfferSaleCard,
12247
12612
  OfferSaleCardUi,
12248
12613
  OffersAssetGrid,
@@ -12304,6 +12669,7 @@ export {
12304
12669
  quoteOverAsks,
12305
12670
  stablecoinIconUrl,
12306
12671
  submitErc20Approval,
12672
+ tokenLogoSrcSet,
12307
12673
  tokenLogoUrl,
12308
12674
  tokenMetadataOf,
12309
12675
  useCheckoutOfferTokenMetadata,
@@ -12346,6 +12712,7 @@ export {
12346
12712
  useTaxDocument,
12347
12713
  useTaxDocumentModalViewModel,
12348
12714
  useTokenMetadata,
12715
+ useTokenRegistry,
12349
12716
  validateAmount,
12350
12717
  validateSellAmount,
12351
12718
  validateSuperstateAmount