@asteby/storefront-react 0.10.0 → 0.11.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dialog.tsx","../src/context.tsx","../src/locale.ts","../src/payments/sdk-loader.ts","../src/payments/mercadopago.ts","../src/theme.tsx","../src/payments/theme.ts","../src/payments/use-embedded-payment.ts","../src/payments/payment-brick.tsx","../src/payments/adapter.ts","../src/payments/csp.ts","../src/payments/payment-method.messages.ts","../src/checkout/brands.ts","../src/checkout/brand-mark.tsx","../src/payments/payment-method.tsx","../src/payments/choices.ts"],"names":["useRef","useEffect","useCallback","createContext","useContext","useMemo","paymentMessages","useId","useState","generateIdempotencyKey","paymentOutcome","paymentErrorView","formatVoucherExpiry","jsx","jsxs","forwardRef","PaymentBrick","useImperativeHandle","formatMoney","Fragment","useSyncExternalStore","choiceValue"],"mappings":"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","file":"payments.cjs","sourcesContent":["import { useCallback, useEffect, useRef, type RefObject } from 'react'\n\nexport type DialogCloseReason = 'esc' | 'x' | 'backdrop' | 'action'\n\ntype UseModalDialogOptions = {\n open: boolean\n /** Called for Esc and backdrop clicks. The owner decides whether to close. */\n onClose: (reason: DialogCloseReason) => void\n /** Element focused when the dialog opens. Default: the element marked `data-sf-autofocus`, else the dialog itself. */\n initialFocus?: RefObject<HTMLElement | null>\n}\n\n/**\n * Native `<dialog>` wiring: `showModal()` (focus trap and inert background come from the browser),\n * Esc and backdrop clicks routed to `onClose`, and focus restored to the opener on close.\n * Falls back to the `open` attribute where `showModal` does not exist (old browsers, some test DOMs)\n * with an Esc key handler.\n */\nexport function useModalDialog({ open, onClose, initialFocus }: UseModalDialogOptions) {\n const ref = useRef<HTMLDialogElement | null>(null)\n const opener = useRef<Element | null>(null)\n const onCloseRef = useRef(onClose)\n onCloseRef.current = onClose\n\n useEffect(() => {\n const el = ref.current\n if (!el || !open) return\n opener.current = typeof document !== 'undefined' ? document.activeElement : null\n const hasModal = typeof el.showModal === 'function'\n if (!el.open) {\n if (hasModal) {\n try {\n el.showModal()\n } catch {\n el.setAttribute('open', '')\n }\n } else el.setAttribute('open', '')\n }\n const target = initialFocus?.current ?? el.querySelector<HTMLElement>('[data-sf-autofocus]') ?? el\n if (!target.hasAttribute('tabindex') && target === el) el.setAttribute('tabindex', '-1')\n target.focus({ preventScroll: true })\n\n const onCancel = (e: Event) => {\n e.preventDefault() // we close through state so the owner can navigate/track first\n onCloseRef.current('esc')\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n onCloseRef.current('esc')\n }\n }\n el.addEventListener('cancel', onCancel)\n if (!hasModal) el.addEventListener('keydown', onKey)\n return () => {\n el.removeEventListener('cancel', onCancel)\n el.removeEventListener('keydown', onKey)\n if (el.open) {\n if (typeof el.close === 'function') {\n try {\n el.close()\n } catch {\n el.removeAttribute('open')\n }\n } else el.removeAttribute('open')\n }\n const back = opener.current\n if (back instanceof HTMLElement && back.isConnected) back.focus({ preventScroll: true })\n }\n }, [open])\n\n /** Click on the backdrop (the dialog element itself, outside its content box). */\n const onBackdropClick = useCallback((e: { target: EventTarget; currentTarget: EventTarget }) => {\n if (e.target === e.currentTarget) onCloseRef.current('backdrop')\n }, [])\n\n return { ref, onBackdropClick }\n}\n\n/** `prefers-reduced-motion: reduce`, read after hydration (false on the server). */\nexport function prefersReducedMotion(): boolean {\n try {\n return typeof window !== 'undefined' && !!window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n } catch {\n return false\n }\n}\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { createStorefrontClient, type Shop, type StorefrontClient, type StorefrontClientOptions } from '@asteby/storefront'\n\nexport type StorefrontContextValue = {\n /** Client for browser-side calls (use a public `pk_` token). */\n client: StorefrontClient | null\n shop: Shop | null\n /** BCP 47 locale used for formatting (defaults to `shop.locale`, then `es-MX`). */\n locale: string\n /** ISO 4217 currency (defaults to `shop.currency_code`, then `MXN`). */\n currency: string\n}\n\nconst StorefrontContext = createContext<StorefrontContextValue | null>(null)\n\nexport type StorefrontProviderProps = {\n /** A ready client. Takes precedence over `config`. */\n client?: StorefrontClient\n /** Options to create the browser client (use a `pk_` token). */\n config?: StorefrontClientOptions\n /** Shop info loaded on the server (root loader). */\n shop?: Shop | null\n locale?: string\n currency?: string\n children?: ReactNode\n}\n\n/**\n * Makes the storefront client, shop, locale and currency available to the\n * tree. SSR-safe: creating the client does not touch `window`.\n */\nexport function StorefrontProvider({ client, config, shop = null, locale, currency, children }: StorefrontProviderProps) {\n const configKey = config ? `${config.baseUrl}|${config.token}|${config.locale ?? ''}|${config.customerToken ?? ''}` : ''\n const resolvedClient = useMemo(\n () => client ?? (config ? createStorefrontClient(config) : null),\n [client, configKey],\n )\n const value = useMemo<StorefrontContextValue>(\n () => ({\n client: resolvedClient,\n shop,\n locale: locale ?? config?.locale ?? shop?.locale ?? 'es-MX',\n currency: currency ?? shop?.currency_code ?? 'MXN',\n }),\n [resolvedClient, shop, locale, currency, config?.locale],\n )\n return <StorefrontContext.Provider value={value}>{children}</StorefrontContext.Provider>\n}\n\n/** Storefront context. Throws outside `<StorefrontProvider>`. */\nexport function useStorefront(): StorefrontContextValue {\n const ctx = useContext(StorefrontContext)\n if (!ctx) throw new Error('useStorefront must be used inside <StorefrontProvider>')\n return ctx\n}\n\n/** Storefront context or `null` outside a provider (for components that work standalone). */\nexport function useOptionalStorefront(): StorefrontContextValue | null {\n return useContext(StorefrontContext)\n}\n\n/** The client from context; throws when the provider has none. */\nexport function useStorefrontClient(): StorefrontClient {\n const { client } = useStorefront()\n if (!client) throw new Error('<StorefrontProvider> needs a `client` or `config` for browser-side calls')\n return client\n}\n","import { useOptionalStorefront } from './context.js'\n\n/** Locale of a component: its own prop, else the `StorefrontProvider`'s, else `es-MX`. */\nexport function useResolvedLocale(locale?: string | null): string {\n const sf = useOptionalStorefront()\n return locale ?? sf?.locale ?? 'es-MX'\n}\n","/**\n * Loads a provider script once, with timeout, CSP nonce and an origin allowlist.\n * The URL comes from the server (`PaymentClient.sdk_url`) but is still checked:\n * https only and, when `allowedOrigins` is given, an exact origin match.\n */\nexport type LoadScriptOptions = {\n nonce?: string\n timeoutMs: number\n /** Exact origins allowed for the script (`https://sdk.mercadopago.com`). Omitted: any https origin. */\n allowedOrigins?: readonly string[]\n /** `true` when the SDK global is already there (skips the insert). */\n isLoaded?: () => boolean\n document?: Document\n}\n\nconst pending = new Map<string, Promise<void>>()\n\nexport function loadPaymentSdk(url: string, options: LoadScriptOptions): Promise<void> {\n let parsed: URL\n try {\n parsed = new URL(url)\n } catch {\n return Promise.reject(new Error('payment sdk: invalid url'))\n }\n if (parsed.protocol !== 'https:' || parsed.username || parsed.password) return Promise.reject(new Error('payment sdk: https required'))\n if (options.allowedOrigins && !options.allowedOrigins.includes(parsed.origin)) return Promise.reject(new Error('payment sdk: origin not allowed'))\n if (options.isLoaded?.()) return Promise.resolve()\n const doc = options.document ?? (typeof document !== 'undefined' ? document : undefined)\n if (!doc) return Promise.reject(new Error('payment sdk: no document (server)'))\n\n const key = parsed.toString()\n const existing = pending.get(key)\n if (existing) return existing\n\n const p = new Promise<void>((resolve, reject) => {\n const script = doc.createElement('script')\n script.src = key\n script.async = true\n if (options.nonce) script.nonce = options.nonce\n script.dataset.sfPaymentSdk = 'true'\n let done = false\n const finish = (err?: Error) => {\n if (done) return\n done = true\n clearTimeout(timer)\n if (err) {\n script.remove()\n pending.delete(key) // allow a later retry\n reject(err)\n } else resolve()\n }\n const timer = setTimeout(() => finish(new Error('payment sdk: timeout')), options.timeoutMs)\n script.onload = () => finish()\n script.onerror = () => finish(new Error('payment sdk: failed to load'))\n doc.head.appendChild(script)\n })\n pending.set(key, p)\n return p\n}\n\n/** Test helper: forgets the loaded-script cache. */\nexport function resetPaymentSdkCache(): void {\n pending.clear()\n}\n","import { loadPaymentSdk } from './sdk-loader.js'\nimport type { MountedPaymentForm, PaymentFormAdapter, PaymentFormData, PaymentFormMountOptions } from './adapter.js'\n\n/** The `PaymentClient.kind` the addon `mercadopago` declares. */\nexport const MERCADOPAGO_BRICKS_KIND = 'mercadopago_bricks'\n\ntype MpController = { getFormData(): Promise<Record<string, unknown> | undefined | null>; unmount(): void | Promise<void> }\ntype MpBricks = { create(brick: string, containerId: string, settings: Record<string, unknown>): Promise<MpController> }\nexport type MercadoPagoCtor = new (publicKey: string, options?: { locale?: string }) => { bricks(): MpBricks }\n\nexport type MercadoPagoAdapterOptions = {\n /** Exact origins allowed for `sdk_url`. Default: Mercado Pago's SDK origin only. */\n allowedSdkOrigins?: readonly string[]\n /** Resolves the SDK constructor. Default: `window.MercadoPago`. Inject a fake in tests. */\n getSdk?: () => MercadoPagoCtor | undefined\n /** Reads the anti-fraud device id. Default: `window.MP_DEVICE_SESSION_ID`. */\n getDeviceSessionId?: () => string | undefined\n}\n\n/**\n * The only fields that may leave the browser, and the only place that decides it. Anything else the SDK returns\n * (notably `transaction_amount`, the amount: the server owns it) is dropped. Strings only, bounded length.\n */\nexport function sanitizeMercadoPagoFormData(data: Record<string, unknown> | null | undefined): Record<string, unknown> {\n const d = data ?? {}\n const str = (v: unknown, max = 256) => (typeof v === 'string' && v.length > 0 && v.length <= max ? v : undefined)\n const out: Record<string, unknown> = {}\n const token = str(d.token, 128)\n if (token) out.token = token\n const pm = str(d.payment_method_id, 64)\n if (pm) out.payment_method_id = pm\n const issuer = typeof d.issuer_id === 'number' ? String(d.issuer_id) : str(d.issuer_id, 32)\n if (issuer) out.issuer_id = issuer\n const inst = typeof d.installments === 'number' ? d.installments : Number.parseInt(String(d.installments ?? ''), 10)\n if (Number.isInteger(inst) && inst >= 1 && inst <= 48) out.installments = inst\n const payer = d.payer as { email?: unknown; identification?: { type?: unknown; number?: unknown } } | undefined\n if (payer && typeof payer === 'object') {\n const p: Record<string, unknown> = {}\n const email = str(payer.email, 254)\n if (email) p.email = email\n const idType = str(payer.identification?.type, 16)\n const idNumber = str(payer.identification?.number, 32)\n if (idType && idNumber) p.identification = { type: idType, number: idNumber }\n if (Object.keys(p).length) out.payer = p\n }\n return out\n}\n\n/**\n * Card Payment Brick adapter. The payment button is hidden: the shop's own button calls `collect()` (MP's\n * `getFormData()`), which tokenises inside MP's iframes. Card data never touches this code.\n */\nexport function mercadoPagoBricksAdapter(options: MercadoPagoAdapterOptions = {}): PaymentFormAdapter {\n const allowed = options.allowedSdkOrigins ?? ['https://sdk.mercadopago.com']\n const getSdk =\n options.getSdk ?? (() => (typeof window !== 'undefined' ? (window as unknown as { MercadoPago?: MercadoPagoCtor }).MercadoPago : undefined))\n const getDevice =\n options.getDeviceSessionId ?? (() => (typeof window !== 'undefined' ? (window as unknown as { MP_DEVICE_SESSION_ID?: string }).MP_DEVICE_SESSION_ID : undefined))\n\n return {\n kind: MERCADOPAGO_BRICKS_KIND,\n async load(client, { nonce, timeoutMs }) {\n await loadPaymentSdk(client.sdk_url, { ...(nonce ? { nonce } : {}), timeoutMs, allowedOrigins: allowed, isLoaded: () => !!getSdk() })\n if (!getSdk()) throw new Error('payment sdk: MercadoPago global missing after load')\n },\n async mount(opts: PaymentFormMountOptions): Promise<MountedPaymentForm> {\n const Ctor = getSdk()\n if (!Ctor) throw new Error('payment sdk: not loaded')\n const { client, container } = opts\n const card = client.options?.find((o) => o.key === 'card')\n const mp = new Ctor(client.public_key, { locale: opts.locale ?? client.locale ?? 'es-MX' })\n const amount = Number.parseFloat(opts.amount.amount)\n const controller = await mp.bricks().create('cardPayment', container.id, {\n initialization: { amount, ...(opts.email ? { payer: { email: opts.email } } : {}) },\n customization: {\n paymentMethods: { minInstallments: 1, ...(card?.max_installments ? { maxInstallments: card.max_installments } : {}) },\n visual: {\n hidePaymentButton: true,\n style: { theme: 'default', ...(opts.theme && Object.keys(opts.theme).length ? { customVariables: opts.theme } : {}) },\n },\n },\n callbacks: {\n onReady: () => opts.onReady(),\n onError: (e: { type?: string; message?: string; cause?: string } | undefined) => {\n opts.onError({ critical: e?.type === 'critical', ...(e?.cause ? { message: String(e.cause) } : {}) })\n },\n onSubmit: async () => undefined,\n },\n })\n let gone = false\n return {\n async collect(): Promise<PaymentFormData> {\n if (gone) throw new Error('payment form is unmounted')\n const raw = await controller.getFormData()\n const provider_data = sanitizeMercadoPagoFormData(raw)\n if (!provider_data.token) throw new Error('payment form incomplete')\n const device = getDevice()\n return { provider_data, ...(typeof device === 'string' && device ? { device_session_id: device } : {}) }\n },\n async unmount() {\n gone = true\n try {\n await controller.unmount()\n } catch {\n /* the provider may already have removed it */\n }\n },\n }\n },\n }\n}\n","/**\n * Server-side theme (S3): turns the content theme from\n * `content.theme()` into CSS custom properties so the first SSR byte already\n * carries the store's brand — no localStorage, no anti-flicker script.\n *\n * Token naming follows `@asteby/metacore-theme`: camelCase keys become\n * kebab-case (`primaryForeground` → `--primary-foreground`), and each color is\n * also exposed as a Tailwind 4 theme variable (`--color-primary-foreground`).\n * metacore-theme ships its tokens as static CSS with no reusable naming\n * helper, so this module is standalone and does not depend on it.\n */\nimport type { Theme } from '@asteby/storefront'\n\nexport type ThemeCssOptions = {\n /** Selector that receives the variables (default `:root`). */\n selector?: string\n /**\n * Variable names for color tokens:\n * `both` (default) → `--color-<name>` and `--<name>`;\n * `color` → only `--color-<name>` (Tailwind 4); `metacore` → only `--<name>`.\n */\n naming?: 'both' | 'color' | 'metacore'\n /** Fallback stack appended to every font (default system sans-serif). */\n fontFallback?: string\n}\n\nconst DEFAULT_FONT_FALLBACK = 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif'\nconst MONO_FALLBACK = 'ui-monospace, SFMono-Regular, Menlo, monospace'\n\n/** `primaryForeground`, `primary_foreground`, `--color-primary-foreground` → `primary-foreground`. */\nexport function tokenName(key: string): string {\n return key\n .trim()\n .replace(/^-+/, '')\n .replace(/^color-/, '')\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_.]+/g, '-')\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\n/** Rejects values that could escape the declaration or the `<style>` element. */\nexport function isSafeCssValue(value: string): boolean {\n if (!value || value.length > 200) return false\n if (/[;{}<>\\\\]/.test(value)) return false\n if (/url\\s*\\(|expression\\s*\\(|@import/i.test(value)) return false\n return true\n}\n\nfunction fontStack(family: string, role: string, fallback: string): string | null {\n const name = family.replace(/[\"']/g, '').trim()\n if (!name || !isSafeCssValue(name)) return null\n return `\"${name}\", ${role === 'mono' ? MONO_FALLBACK : fallback}`\n}\n\n/** CSS declarations (`--x:value`) for a theme, without selector. */\nexport function themeToCssVariables(theme: Partial<Theme> | null | undefined, options: ThemeCssOptions = {}): Record<string, string> {\n const naming = options.naming ?? 'both'\n const vars: Record<string, string> = {}\n for (const [key, raw] of Object.entries(theme?.tokens ?? {})) {\n const name = tokenName(key)\n const value = String(raw).trim()\n if (!name || !isSafeCssValue(value)) continue\n if (naming !== 'metacore') vars[`--color-${name}`] = value\n if (naming !== 'color') vars[`--${name}`] = value\n }\n const fallback = options.fontFallback ?? DEFAULT_FONT_FALLBACK\n for (const [role, family] of Object.entries(theme?.fonts ?? {})) {\n const name = tokenName(role)\n const stack = typeof family === 'string' ? fontStack(family, name, fallback) : null\n if (name && stack) vars[`--font-${name}`] = stack\n }\n if (theme?.radius && isSafeCssValue(theme.radius.trim())) vars['--radius'] = theme.radius.trim()\n return vars\n}\n\n/** `:root{--color-primary:#0f766e;--primary:#0f766e;...}` from a content theme. */\nexport function themeToCss(theme: Partial<Theme> | null | undefined, options: ThemeCssOptions = {}): string {\n const vars = themeToCssVariables(theme, options)\n const body = Object.entries(vars)\n .map(([k, v]) => `${k}:${v}`)\n .join(';')\n if (!body) return ''\n const selector = (options.selector ?? ':root').replace(/[{}<>]/g, '')\n return `${selector}{${body}}`\n}\n\n/** Google Fonts stylesheet URL for the theme fonts (or `null` when there are none). */\nexport function themeFontsHref(theme: Partial<Theme> | null | undefined, weights: number[] = [400, 500, 600, 700]): string | null {\n const families = [...new Set(Object.values(theme?.fonts ?? {}).map((f) => String(f).replace(/[\"']/g, '').trim()).filter((f) => f && isSafeCssValue(f)))]\n if (!families.length) return null\n const params = families.map((f) => `family=${encodeURIComponent(f).replace(/%20/g, '+')}:wght@${weights.join(';')}`).join('&')\n return `https://fonts.googleapis.com/css2?${params}&display=swap`\n}\n\nexport type ThemeStyleProps = ThemeCssOptions & {\n theme: Partial<Theme> | null | undefined\n nonce?: string\n id?: string\n}\n\n/** Emits the theme variables as a `<style>` (render it in `<head>` from the root route). */\nexport function ThemeStyle({ theme, nonce, id = 'storefront-theme', ...options }: ThemeStyleProps) {\n const css = themeToCss(theme, options)\n if (!css) return null\n return <style id={id} nonce={nonce} data-storefront-theme=\"\" dangerouslySetInnerHTML={{ __html: css }} />\n}\n","import { isSafeCssValue } from '../theme.js'\n\n/** CSS custom properties (set by the shop in its stylesheet) -> provider widget variables. */\nexport const PAYMENT_THEME_TOKENS = {\n '--sf-pay-text': 'textPrimaryColor',\n '--sf-pay-text-muted': 'textSecondaryColor',\n '--sf-pay-background': 'formBackgroundColor',\n '--sf-pay-input-background': 'inputBackgroundColor',\n '--sf-pay-primary': 'baseColor',\n '--sf-pay-primary-contrast': 'buttonTextColor',\n '--sf-pay-error': 'errorColor',\n '--sf-pay-success': 'successColor',\n '--sf-pay-outline': 'outlinePrimaryColor',\n '--sf-pay-radius': 'borderRadiusMedium',\n} as const\n\n/**\n * Reads the `--sf-pay-*` tokens from an element's computed style, so the provider form follows the shop's\n * theme without the shop copying colors into JavaScript. Unsafe or empty values are skipped.\n */\nexport function readPaymentTheme(el: Element | null | undefined, tokens: Record<string, string> = PAYMENT_THEME_TOKENS): Record<string, string> {\n const out: Record<string, string> = {}\n if (!el || typeof getComputedStyle !== 'function') return out\n const style = getComputedStyle(el)\n for (const [cssVar, key] of Object.entries(tokens)) {\n const value = style.getPropertyValue(cssVar).trim()\n if (value && isSafeCssValue(value)) out[key] = value\n }\n return out\n}\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport {\n generateIdempotencyKey,\n paymentErrorView,\n paymentIdempotencyKey,\n paymentMessages,\n paymentOutcome,\n type Money,\n type PaymentAttemptResult,\n type PaymentClient,\n type PaymentErrorKind,\n type PaymentErrorView,\n type PaymentMessages,\n type PaymentOutcome,\n type PaymentOutcomeKind,\n} from '@asteby/storefront'\nimport type { MountedPaymentForm, PaymentFormAdapter, PaymentTransport } from './adapter.js'\nimport { mercadoPagoBricksAdapter } from './mercadopago.js'\nimport { readPaymentTheme } from './theme.js'\n\nexport type EmbeddedPaymentStatus =\n | 'idle' // no client / disabled / not hydrated\n | 'loading' // loading the provider SDK and mounting\n | 'ready'\n | 'processing'\n | OutcomeStatus\n | 'network_error' // no answer: `retry()` repeats the SAME attempt\n | 'blocked' // 409/429 and the like: do not retry (see `error.kind`)\n | 'fallback' // the secure form is unusable: switch to a redirect payment\n\ntype OutcomeStatus = PaymentOutcomeKind\n\nexport type PaymentFallbackReason = 'sdk_timeout' | 'sdk_error' | 'form_error' | 'unsupported_provider' | 'no_client'\n\n/** Anonymous funnel events: no personal or card data. */\nexport type PaymentEvent =\n | { type: 'form_ready'; ms: number }\n | { type: 'form_failed'; reason: PaymentFallbackReason }\n | { type: 'tokenize_error' }\n | { type: 'submit' }\n | { type: 'result'; status: PaymentOutcomeKind; decline_code: string | null }\n | { type: 'error'; kind: PaymentErrorKind }\n | { type: 'retry' }\n\nexport type UseEmbeddedPaymentOptions = {\n /** Provider data from `paymentMethods[].client`. `null`/absent: nothing to mount (status `idle`). */\n client: PaymentClient | null | undefined\n /** The total computed by the server. The Brick is remounted when it changes. Never calculate it in the shop. */\n amount: Money\n transport: PaymentTransport\n /** Mount only while the card option is selected. Default true. */\n enabled?: boolean\n email?: string\n locale?: string\n /** Replaces the adapter chosen from `client.kind`. */\n adapter?: PaymentFormAdapter\n /** Extra adapters by `kind`. Mercado Pago is built in. */\n adapters?: Record<string, PaymentFormAdapter>\n /** CSP nonce for the inserted script. */\n nonce?: string\n /** Time to wait for the form to be ready before falling back. Default 8000. */\n sdkTimeoutMs?: number\n /** Automatic resubmits (same attempt) after a network failure before showing the retry button. Default 2. */\n autoRetries?: number\n /** Base delay for the backoff between automatic retries. Default 600. */\n retryDelayMs?: number\n /** Poll interval/timeout for a pending 3DS challenge or review when `transport.refresh` exists. */\n pollIntervalMs?: number\n pollTimeoutMs?: number\n /** Where the attempt id is kept so a reload/retry reuses it. Default `sessionStorage`; `null` disables. Never holds card data. */\n storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> | null\n /** Scope of the stored attempt (e.g. the checkout or cart id). Default `default`. */\n scope?: string\n messages?: Partial<PaymentMessages>\n /** Called with the classified outcome of every definitive answer. */\n onResult?: (outcome: PaymentOutcome, result: PaymentAttemptResult) => void\n /** Called for `redirect` outcomes. Default: `location.assign(url)` (https only). */\n onRedirect?: (url: string) => void\n onFallback?: (reason: PaymentFallbackReason) => void\n onEvent?: (event: PaymentEvent) => void\n /** Overrides the theme read from `--sf-pay-*` tokens. */\n theme?: Record<string, string>\n /** Test hooks. */\n newAttemptId?: () => string\n}\n\nexport type EmbeddedPaymentState = {\n status: EmbeddedPaymentStatus\n /** Text to show for the current state (decline reason, review notice, error...). */\n message: string | null\n outcome: PaymentOutcome | null\n error: PaymentErrorView | null\n fallbackReason: PaymentFallbackReason | null\n attemptsLeft: number | null\n /** Id of the current attempt (stable across network retries). */\n attemptId: string | null\n /** `true` while loading, mounting or processing. */\n busy: boolean\n /** Attach to the element the provider renders into. */\n containerRef: (el: HTMLElement | null) => void\n containerId: string\n /** Tokenises and sends. No-ops while another submit is in flight (double click safe). */\n submit: () => Promise<void>\n /** Repeats the last submit with the SAME attempt after a network failure. */\n retry: () => Promise<void>\n /** After a rejection: clears the message (the form is remounted by the hook). */\n dismiss: () => void\n}\n\nconst DEFAULT_ADAPTERS: Record<string, PaymentFormAdapter> = {}\n\nfunction defaultAdapterFor(kind: string): PaymentFormAdapter | undefined {\n if (kind === 'mercadopago_bricks') return (DEFAULT_ADAPTERS[kind] ??= mercadoPagoBricksAdapter())\n return undefined\n}\n\nfunction safeStorage(): Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> | null {\n try {\n return typeof sessionStorage !== 'undefined' ? sessionStorage : null\n } catch {\n return null\n }\n}\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms))\n\n/**\n * Embedded payment state machine for one card form.\n *\n * Guarantees:\n * - The amount is the server's: it is passed to the provider widget and echoed as `expected_total`; never computed.\n * - One idempotency key per attempt (`attempt`), kept in `storage`, reused on network retries and rotated only\n * after a definitive answer (a rejected card needs a new token, hence a new attempt).\n * - Card data never reaches this code or storage: only the provider token, held in memory until the answer.\n * - A double click returns the in-flight promise instead of sending twice.\n */\nexport function useEmbeddedPayment(options: UseEmbeddedPaymentOptions): EmbeddedPaymentState {\n const {\n client,\n amount,\n transport,\n enabled = true,\n locale,\n sdkTimeoutMs = 8000,\n autoRetries = 2,\n retryDelayMs = 600,\n pollIntervalMs = 2000,\n pollTimeoutMs = 60_000,\n scope = 'default',\n } = options\n const msgs = useMemo(() => paymentMessages(locale, options.messages), [locale, options.messages])\n const rawId = useId()\n const containerId = useMemo(() => `sf-pay-${rawId.replace(/[^a-zA-Z0-9_-]/g, '')}`, [rawId])\n\n const [status, setStatus] = useState<EmbeddedPaymentStatus>('idle')\n const [outcome, setOutcome] = useState<PaymentOutcome | null>(null)\n const [error, setError] = useState<PaymentErrorView | null>(null)\n const [fallbackReason, setFallbackReason] = useState<PaymentFallbackReason | null>(null)\n const [attemptsLeft, setAttemptsLeft] = useState<number | null>(null)\n const [attemptId, setAttemptId] = useState<string | null>(null)\n const [container, setContainer] = useState<HTMLElement | null>(null)\n const [mountKey, setMountKey] = useState(0)\n\n // Latest props without re-triggering effects.\n const live = useRef({ ...options, msgs })\n live.current = { ...options, msgs }\n const form = useRef<MountedPaymentForm | null>(null)\n const inFlight = useRef<Promise<void> | null>(null)\n const pendingData = useRef<{ provider_data: Record<string, unknown>; device_session_id?: string } | null>(null)\n const alive = useRef(true)\n const generation = useRef(0)\n const statusRef = useRef<EmbeddedPaymentStatus>('idle')\n statusRef.current = status\n\n useEffect(() => {\n alive.current = true\n return () => {\n alive.current = false\n }\n }, [])\n\n const storageKey = `sf:pay:attempt:${scope}`\n const store = options.storage === undefined ? safeStorage() : options.storage\n const emit = useCallback((e: PaymentEvent) => live.current.onEvent?.(e), [])\n\n const readAttempt = useCallback((): string => {\n try {\n const saved = store?.getItem(storageKey)\n if (saved) return saved\n } catch {\n /* private mode */\n }\n const fresh = (live.current.newAttemptId ?? generateIdempotencyKey)()\n try {\n store?.setItem(storageKey, fresh)\n } catch {\n /* keep in memory only */\n }\n return fresh\n }, [store, storageKey])\n\n const rotateAttempt = useCallback(() => {\n try {\n store?.removeItem(storageKey)\n } catch {\n /* ignore */\n }\n setAttemptId(null)\n }, [store, storageKey])\n\n const fallback = useCallback(\n (reason: PaymentFallbackReason) => {\n setFallbackReason(reason)\n setStatus('fallback')\n emit({ type: 'form_failed', reason })\n live.current.onFallback?.(reason)\n },\n [emit],\n )\n\n // Mount / remount the provider form. Re-runs when the server total, client or mount key changes.\n const amountKey = `${amount.amount}|${amount.currency_code}`\n const kind = client?.kind\n const publicKey = client?.public_key\n useEffect(() => {\n if (!enabled || !client) {\n setStatus((s) => (s === 'loading' || s === 'ready' ? 'idle' : s))\n return\n }\n const adapter = live.current.adapter ?? live.current.adapters?.[client.kind] ?? defaultAdapterFor(client.kind)\n if (!adapter) {\n fallback('unsupported_provider')\n return\n }\n if (!container) return\n const my = ++generation.current\n const started = Date.now()\n let mounted: MountedPaymentForm | null = null\n setStatus('loading')\n const stale = () => my !== generation.current || !alive.current\n // Fails this mount once: later callbacks of the same mount are ignored.\n const fail = (reason: PaymentFallbackReason) => {\n if (stale()) return\n generation.current++\n clearTimeout(timer)\n const m = mounted ?? form.current\n mounted = null\n form.current = null\n if (m) void Promise.resolve(m.unmount())\n fallback(reason)\n }\n const timer = setTimeout(() => {\n if (statusRef.current !== 'ready') fail('sdk_timeout')\n }, sdkTimeoutMs)\n\n container.id = containerId\n ;(async () => {\n try {\n await adapter.load(client, { ...(live.current.nonce ? { nonce: live.current.nonce } : {}), timeoutMs: sdkTimeoutMs })\n if (stale()) return\n const theme = live.current.theme ?? readPaymentTheme(container)\n const m = await adapter.mount({\n container,\n client,\n amount: live.current.amount,\n ...(live.current.email ? { email: live.current.email } : {}),\n ...(live.current.locale ? { locale: live.current.locale } : {}),\n theme,\n onReady: () => {\n if (stale()) return\n clearTimeout(timer)\n setStatus((s) => (s === 'loading' ? 'ready' : s))\n emit({ type: 'form_ready', ms: Date.now() - started })\n },\n onError: (e) => {\n if (stale()) return\n if (e.critical) fail('form_error')\n },\n })\n if (stale()) {\n void Promise.resolve(m.unmount())\n return\n }\n mounted = m\n form.current = m\n } catch (err) {\n fail(err instanceof Error && /timeout/i.test(err.message) ? 'sdk_timeout' : 'sdk_error')\n }\n })()\n\n return () => {\n clearTimeout(timer)\n generation.current++\n const m = mounted ?? form.current\n mounted = null\n form.current = null\n if (m) void Promise.resolve(m.unmount())\n }\n // `client` identity changes with every loader run; its identity-defining fields are listed instead.\n }, [enabled, container, kind, publicKey, amountKey, mountKey, sdkTimeoutMs, containerId])\n\n const finish = useCallback(\n (result: PaymentAttemptResult) => {\n const o = paymentOutcome(result, live.current.locale, live.current.messages)\n pendingData.current = null\n setOutcome(o)\n setError(null)\n setAttemptsLeft(o.attempts_left)\n setStatus(o.kind)\n emit({ type: 'result', status: o.kind, decline_code: o.decline_code })\n if (o.kind === 'approved') rotateAttempt()\n if (o.kind === 'rejected' || o.kind === 'cancelled') {\n // The token is single-use: a new attempt and a fresh form.\n rotateAttempt()\n setMountKey((k) => k + 1)\n }\n live.current.onResult?.(o, result)\n if (o.kind === 'redirect' && o.redirect_url) {\n if (live.current.onRedirect) live.current.onRedirect(o.redirect_url)\n else if (typeof window !== 'undefined') window.location.assign(o.redirect_url)\n }\n },\n [emit, rotateAttempt],\n )\n\n const send = useCallback(\n async (data: { provider_data: Record<string, unknown>; device_session_id?: string }, attempt: string) => {\n const ctl = new AbortController()\n const maxRetries = live.current.autoRetries ?? autoRetries\n for (let n = 0; ; n++) {\n try {\n const result = await transport.submit(\n {\n option: 'card',\n attempt,\n idempotencyKey: attempt,\n provider_data: data.provider_data,\n ...(data.device_session_id ? { device_session_id: data.device_session_id } : {}),\n expected_total: live.current.amount,\n },\n { signal: ctl.signal },\n )\n if (!alive.current) return\n finish(result)\n return\n } catch (err) {\n if (!alive.current) return\n const view = paymentErrorView(err, live.current.locale, live.current.messages)\n if (view.retrySameAttempt && n < maxRetries) {\n await sleep((live.current.retryDelayMs ?? retryDelayMs) * 2 ** n)\n if (!alive.current) return\n continue\n }\n emit({ type: 'error', kind: view.kind })\n setError(view)\n if (view.kind === 'network') {\n pendingData.current = data // memory only, for `retry()` with the same attempt\n setStatus('network_error')\n } else if (view.kind === 'price_mismatch') {\n pendingData.current = null\n rotateAttempt()\n setMountKey((k) => k + 1)\n setStatus('ready')\n } else if (view.kind === 'generic') {\n pendingData.current = null\n rotateAttempt()\n setMountKey((k) => k + 1)\n setStatus('ready')\n } else {\n pendingData.current = null\n setStatus('blocked')\n }\n return\n }\n }\n },\n [autoRetries, emit, finish, retryDelayMs, rotateAttempt, transport],\n )\n\n const submit = useCallback((): Promise<void> => {\n if (inFlight.current) return inFlight.current\n const m = form.current\n if (!m || (statusRef.current !== 'ready' && statusRef.current !== 'network_error')) return Promise.resolve()\n const run = (async () => {\n setStatus('processing')\n setError(null)\n setOutcome(null)\n emit({ type: 'submit' })\n let data\n try {\n data = await m.collect()\n } catch {\n emit({ type: 'tokenize_error' })\n setError({ kind: 'generic', message: live.current.msgs['error.card_data'], retrySameAttempt: false, canRetry: true })\n setStatus('ready')\n return\n }\n const attempt = readAttempt()\n setAttemptId(attempt)\n await send(data, attempt)\n })().finally(() => {\n inFlight.current = null\n })\n inFlight.current = run\n return run\n }, [emit, readAttempt, send])\n\n const retry = useCallback((): Promise<void> => {\n if (inFlight.current) return inFlight.current\n const data = pendingData.current\n if (!data) return submit()\n emit({ type: 'retry' })\n const run = (async () => {\n setStatus('processing')\n setError(null)\n const attempt = readAttempt()\n setAttemptId(attempt)\n await send(data, attempt)\n })().finally(() => {\n inFlight.current = null\n })\n inFlight.current = run\n return run\n }, [emit, readAttempt, send, submit])\n\n // Poll a pending 3DS challenge / review until it resolves or the window closes.\n useEffect(() => {\n if ((status !== 'challenge' && status !== 'in_review') || !transport.refresh) return\n let stop = false\n const ctl = new AbortController()\n const until = Date.now() + pollTimeoutMs\n ;(async () => {\n while (!stop && Date.now() < until) {\n await sleep(pollIntervalMs)\n if (stop || !alive.current) return\n try {\n const r = await transport.refresh!({ signal: ctl.signal })\n if (stop || !alive.current) return\n const o = paymentOutcome(r, live.current.locale, live.current.messages)\n if (o.kind !== status) {\n finish(r)\n return\n }\n } catch {\n /* keep polling until the window closes */\n }\n }\n })()\n return () => {\n stop = true\n ctl.abort()\n }\n }, [status, transport, pollIntervalMs, pollTimeoutMs, finish])\n\n const dismiss = useCallback(() => {\n setError(null)\n setOutcome((o) => (o?.kind === 'rejected' ? null : o))\n }, [])\n\n // After a rejection the hook remounts the form; the rejection text stays visible via `outcome` until the next submit.\n const message =\n status === 'processing'\n ? msgs['state.processing']\n : status === 'fallback'\n ? msgs['state.fallback']\n : (error?.message ?? outcome?.message ?? (status === 'loading' ? msgs['state.loading'] : null))\n\n return {\n status,\n message,\n outcome,\n error,\n fallbackReason,\n attemptsLeft,\n attemptId,\n busy: status === 'loading' || status === 'processing',\n containerRef: setContainer,\n containerId,\n submit,\n retry,\n dismiss,\n }\n}\n\nexport { paymentIdempotencyKey }\n","import { forwardRef, useEffect, useImperativeHandle, useRef, type CSSProperties, type ReactNode } from 'react'\nimport { formatMoney, formatVoucherExpiry, paymentMessages, type Money, type PaymentClient, type PaymentMessages, type PaymentOutcome } from '@asteby/storefront'\nimport { useModalDialog } from '../dialog.js'\nimport { useResolvedLocale } from '../locale.js'\nimport { useEmbeddedPayment, type EmbeddedPaymentState, type UseEmbeddedPaymentOptions } from './use-embedded-payment.js'\n\nexport type VoucherCardProps = {\n outcome: PaymentOutcome\n locale?: string\n messages?: Partial<PaymentMessages>\n className?: string\n}\n\n/**\n * Cash/SPEI voucher: point, exact amount, reference, barcode/CLABE and deadline, all from the server.\n * The link only renders for https URLs (already filtered by `paymentOutcome`).\n */\nexport function VoucherCard({ outcome, locale, messages, className }: VoucherCardProps) {\n const v = outcome.voucher\n if (!v) return null\n const m = paymentMessages(locale, messages)\n const expiry = formatVoucherExpiry(v.expires_at, locale, messages)\n return (\n <section className={className} data-sf-voucher aria-labelledby=\"sf-voucher-title\">\n <h3 id=\"sf-voucher-title\">{m['voucher.title']}</h3>\n <dl>\n <div>\n <dt>{m['voucher.point']}</dt>\n <dd>{v.payment_point}</dd>\n </div>\n {v.amount && (\n <div>\n <dt>{m['voucher.amount']}</dt>\n <dd>{formatMoney(v.amount, locale)}</dd>\n </div>\n )}\n <div>\n <dt>{m['voucher.reference']}</dt>\n <dd data-sf-voucher-reference>{v.reference}</dd>\n </div>\n {v.clabe && (\n <div>\n <dt>{m['voucher.clabe']}</dt>\n <dd>{v.clabe}</dd>\n </div>\n )}\n {v.barcode && (\n <div>\n <dt>{m['voucher.barcode']}</dt>\n <dd>{v.barcode}</dd>\n </div>\n )}\n </dl>\n {expiry && <p data-sf-voucher-expiry>{expiry}</p>}\n {v.voucher_url && (\n <p>\n <a href={v.voucher_url} target=\"_blank\" rel=\"noopener noreferrer\">\n {m['voucher.open']}\n </a>\n </p>\n )}\n <p>{m['voucher.email']}</p>\n </section>\n )\n}\n\nexport type PaymentChallengeProps = {\n outcome: PaymentOutcome\n locale?: string\n messages?: Partial<PaymentMessages>\n /** Replace the default iframe (e.g. mount the provider's status screen). */\n render?: (outcome: PaymentOutcome) => ReactNode\n onCancel?: () => void\n}\n\n/** 3DS inside the page: a modal dialog with title and focus trap. Default content is the bank's https iframe. */\nexport function PaymentChallenge({ outcome, locale, messages, render, onCancel }: PaymentChallengeProps) {\n const m = paymentMessages(locale, messages)\n const { ref } = useModalDialog({ open: true, onClose: () => onCancel?.() })\n const url = outcome.challenge?.url\n return (\n <dialog ref={ref} aria-labelledby=\"sf-challenge-title\" data-sf-challenge>\n <div>\n <h2 id=\"sf-challenge-title\" data-sf-autofocus tabIndex={-1}>\n {m['challenge.title']}\n </h2>\n {render ? (\n render(outcome)\n ) : url ? (\n <iframe src={url} title={m['challenge.title']} style={{ width: '100%', minHeight: 420, border: 0 }} />\n ) : (\n <p>{m['state.challenge']}</p>\n )}\n {onCancel && (\n <button type=\"button\" onClick={onCancel} style={{ minWidth: 44, minHeight: 44 }}>\n {m['action.cancel']}\n </button>\n )}\n </div>\n </dialog>\n )\n}\n\nexport type PaymentBrickHandle = EmbeddedPaymentState\n\nexport type PaymentBrickProps = Omit<UseEmbeddedPaymentOptions, 'amount'> & {\n /** The server's total. Shown on the button and passed to the provider widget. */\n amount: Money\n /** When set, renders the shop's pay button with this label. Otherwise drive it through the ref. */\n submitLabel?: ReactNode\n /** Hide the total next to the label. */\n hideAmountInButton?: boolean\n /** Rendered instead of the built-in voucher card. */\n renderVoucher?: (outcome: PaymentOutcome) => ReactNode\n renderChallenge?: (outcome: PaymentOutcome) => ReactNode\n /** Height reserved for the provider form so the page does not jump. Default 360. */\n minHeight?: number | string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * Card form for an embedded payment. Headless: no styles of its own, only `data-*` hooks and CSS variables\n * (`--sf-pay-*`, read for the provider widget; `--sf-pay-min-height` for the reserved height).\n *\n * Accessibility: the container is labelled and `aria-busy` while loading; every message goes through one\n * `role=\"status\"` region (or `role=\"alert\"` for errors, which also takes focus); the button explains why it is\n * busy and never silently disables.\n *\n * Use the `ref` to get the same state the hook returns (`submit`, `retry`, `status`...) when the shop owns the button.\n */\nexport const PaymentBrick = forwardRef<PaymentBrickHandle, PaymentBrickProps>(function PaymentBrick(props, ref) {\n const { submitLabel, hideAmountInButton, renderVoucher, renderChallenge, minHeight = 360, className, style, ...hookOptions } = props\n const locale = useResolvedLocale(props.locale)\n const state = useEmbeddedPayment({ ...hookOptions, locale })\n useImperativeHandle(ref, () => state)\n const m = paymentMessages(locale, props.messages)\n const alertRef = useRef<HTMLDivElement | null>(null)\n\n const isError = !!state.error || state.outcome?.kind === 'rejected' || state.status === 'blocked'\n // Move focus to the explanation when a problem appears.\n useEffect(() => {\n if (isError) alertRef.current?.focus()\n }, [isError, state.message])\n\n if (state.status === 'fallback') {\n return (\n <div className={className} style={style} data-sf-pay-status=\"fallback\">\n <p role=\"status\" data-sf-pay-fallback>\n {m['state.fallback']}\n </p>\n </div>\n )\n }\n\n const outcome = state.outcome\n const showForm = state.status !== 'approved' && state.status !== 'voucher' && state.status !== 'in_review' && state.status !== 'redirect' && state.status !== 'expired'\n const busy = state.busy\n const total = formatMoney(props.amount, locale)\n const label = state.status === 'processing' ? m['state.processing'] : (submitLabel ?? m['action.pay'])\n\n return (\n <div className={className} style={style} data-sf-pay-status={state.status}>\n {showForm && (\n <div\n ref={state.containerRef}\n role=\"group\"\n aria-label={m['form.label']}\n aria-busy={state.status === 'loading' || state.status === 'processing'}\n data-sf-pay-container\n style={{ minHeight: `var(--sf-pay-min-height, ${typeof minHeight === 'number' ? `${minHeight}px` : minHeight})` }}\n />\n )}\n\n {isError ? (\n <div ref={alertRef} role=\"alert\" tabIndex={-1} data-sf-pay-alert data-sf-pay-code={state.error?.kind ?? outcome?.decline_code ?? undefined}>\n {state.message}\n {state.status === 'network_error' && (\n <button type=\"button\" onClick={() => void state.retry()} style={{ minHeight: 44 }}>\n {m['action.retry']}\n </button>\n )}\n </div>\n ) : (\n <p role=\"status\" aria-live=\"polite\" data-sf-pay-message>\n {state.message}\n </p>\n )}\n\n {outcome?.kind === 'voucher' && (renderVoucher ? renderVoucher(outcome) : <VoucherCard outcome={outcome} locale={locale} {...(props.messages ? { messages: props.messages } : {})} />)}\n {outcome?.kind === 'challenge' && (\n <PaymentChallenge outcome={outcome} locale={locale} {...(props.messages ? { messages: props.messages } : {})} {...(renderChallenge ? { render: renderChallenge } : {})} />\n )}\n\n {submitLabel !== undefined && showForm && (\n <button\n type=\"button\"\n onClick={() => void state.submit()}\n aria-busy={busy}\n aria-disabled={state.status !== 'ready'}\n data-sf-pay-submit\n style={{ minHeight: 44 }}\n >\n {label}\n {!hideAmountInButton && state.status !== 'processing' && <> · {total}</>}\n </button>\n )}\n </div>\n )\n})\n\nexport type { PaymentClient }\n","/**\n * Replaceable ports of the embedded payment. The shop (or another provider)\n * implements these; the hook and component only talk to them.\n *\n * Two ports, on purpose:\n * - `PaymentFormAdapter` = the provider SDK in the browser (Mercado Pago Bricks, Stripe Elements...).\n * It mounts a secure form and returns only what the SDK allows to travel (a one-use token).\n * - `PaymentTransport` = how the browser reaches the shop SERVER. The browser never calls OPS: the shop's\n * route forwards to `client.checkouts.pay(...)` with its private token. The HTTP contract between\n * the shop route and OPS lives in `@asteby/storefront` (`checkouts.pay`); the shop route is free to\n * shape its own JSON as long as it answers with a `PaymentAttemptResult`.\n */\nimport type { Money, PaymentAttemptResult, PaymentClient } from '@asteby/storefront'\n\nexport type PaymentFormError = {\n /** `true`: the form cannot be used (SDK blocked, iframe failed). The hook falls back to a redirect. */\n critical: boolean\n /** Short, non-sensitive text for logs. Never card data. */\n message?: string\n}\n\nexport type PaymentFormMountOptions = {\n /** Element the provider renders into. Its `id` is set by the hook. */\n container: HTMLElement\n client: PaymentClient\n /** Total computed by the server. Only passed to the provider widget; never calculated here. */\n amount: Money\n email?: string\n locale?: string\n /** Visual tokens read from CSS variables (see `readPaymentTheme`). */\n theme?: Record<string, string>\n onReady: () => void\n onError: (error: PaymentFormError) => void\n}\n\n/** What a mounted form hands back at submit time. */\nexport type PaymentFormData = {\n /** Sent to the server as `provider_data`. Must never contain amounts or raw card data. */\n provider_data: Record<string, unknown>\n /** Anti-fraud device fingerprint, if the SDK exposes one. */\n device_session_id?: string\n}\n\nexport interface MountedPaymentForm {\n /** Tokenises the card inside the provider iframes. Rejects when the form is invalid (the provider shows the field errors). */\n collect(): Promise<PaymentFormData>\n unmount(): void | Promise<void>\n}\n\nexport interface PaymentFormAdapter {\n /** `PaymentClient.kind` this adapter serves. */\n readonly kind: string\n /** Loads the provider script (once). Rejects on timeout, blocked script or invalid URL. */\n load(client: PaymentClient, options: { nonce?: string; timeoutMs: number }): Promise<void>\n mount(options: PaymentFormMountOptions): Promise<MountedPaymentForm>\n}\n\n/** Everything the shop server needs for one attempt. No card data: only the provider token and choices. */\nexport type PaymentSubmitRequest = {\n option: 'card'\n /** Stable per attempt: the same attempt always carries the same key, so a retry never charges twice. */\n attempt: string\n idempotencyKey: string\n provider_data: Record<string, unknown>\n device_session_id?: string\n /** The total the buyer saw (the server's own number). The server answers 422 `price_mismatch` if it differs. */\n expected_total: Money\n}\n\nexport type PaymentTransport = {\n submit(request: PaymentSubmitRequest, context: { signal: AbortSignal }): Promise<PaymentAttemptResult>\n /** Optional: re-reads the checkout state (3DS challenge, \"in review\"). Same result shape as `submit`. */\n refresh?(context: { signal: AbortSignal }): Promise<PaymentAttemptResult>\n}\n\n/** Error thrown by `createFetchTransport` for non-2xx answers; compatible with `paymentErrorView`. */\nexport class PaymentHttpError extends Error {\n override readonly name = 'PaymentHttpError'\n constructor(\n readonly status: number,\n readonly code: string,\n message?: string,\n /** Raw `error.details` (e.g. the new `cost` of a `price_mismatch`); untrusted shape. */\n readonly details?: unknown,\n ) {\n super(message ?? code)\n }\n}\n\nexport type FetchTransportOptions = {\n fetch?: typeof fetch\n headers?: Record<string, string>\n /** Default `same-origin`. */\n credentials?: RequestCredentials\n /** Shapes the JSON body; the default sends the request as is. */\n buildBody?: (request: PaymentSubmitRequest) => unknown\n /** Same-origin URL that re-reads the state (enables `refresh`). */\n refreshUrl?: string\n}\n\nasync function parse(res: Response): Promise<unknown> {\n const text = await res.text()\n if (!text) return null\n try {\n return JSON.parse(text)\n } catch {\n return null\n }\n}\n\n/**\n * Transport to a same-origin shop route (`POST url` with JSON). Maps `{ error: { code, message, details } }`\n * answers to `PaymentHttpError`. Network failures surface as the original `TypeError`, which the\n * hook treats as retryable with the same attempt.\n */\nexport function createFetchTransport(url: string, options: FetchTransportOptions = {}): PaymentTransport {\n const doFetch = (u: string, init: RequestInit) => (options.fetch ?? globalThis.fetch.bind(globalThis))(u, init)\n async function call(u: string, init: RequestInit): Promise<PaymentAttemptResult> {\n const res = await doFetch(u, { credentials: options.credentials ?? 'same-origin', ...init })\n const body = (await parse(res)) as { error?: { code?: string; message?: string; details?: unknown } } | PaymentAttemptResult | null\n if (!res.ok) {\n const e = (body as { error?: { code?: string; message?: string; details?: unknown } } | null)?.error\n throw new PaymentHttpError(res.status, e?.code ?? 'server_error', e?.message, e?.details)\n }\n const result = body as PaymentAttemptResult | null\n if (!result || typeof result !== 'object' || !result.payment || typeof result.payment.status !== 'string') {\n throw new PaymentHttpError(502, 'invalid_response', 'Unexpected payment response')\n }\n return result\n }\n return {\n submit: (request, { signal }) =>\n call(url, {\n method: 'POST',\n signal,\n headers: { 'Content-Type': 'application/json', Accept: 'application/json', 'Idempotency-Key': request.idempotencyKey, ...options.headers },\n body: JSON.stringify(options.buildBody ? options.buildBody(request) : request),\n }),\n ...(options.refreshUrl\n ? {\n refresh: ({ signal }: { signal: AbortSignal }) =>\n call(options.refreshUrl!, { method: 'POST', signal, headers: { Accept: 'application/json', ...options.headers } }),\n }\n : {}),\n }\n}\n","import type { PaymentClient } from '@asteby/storefront'\n\nexport type PaymentCspOptions = {\n /** Per-request nonce; also set it on the inserted `<script>` and on `<Scripts nonce>`. */\n nonce?: string\n /** Extra origins by directive (e.g. your image CDN). */\n extra?: { script?: string[]; frame?: string[]; connect?: string[]; img?: string[]; form?: string[] }\n /** `report-uri` / `report-to` target for the report-only rollout. */\n reportUri?: string\n /** Inline scripts allowed by hash (`'sha256-…'`), e.g. a theme bootstrap that runs before paint. */\n scriptHashes?: string[]\n /** Allow any https image source (product photos from a CDN). */\n imgHttps?: boolean\n}\n\n/** One origin source: `https://host`, `https://*.host`, optional port. Anything else (`;`, spaces, `'unsafe-eval'`) is dropped. */\nconst ORIGIN = /^https:\\/\\/(\\*\\.)?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*(:\\d{1,5})?$/i\n\nfunction origins(...lists: (readonly string[] | undefined)[]): string[] {\n const out = new Set<string>()\n for (const list of lists) for (const o of list ?? []) if (ORIGIN.test(o)) out.add(o)\n return [...out]\n}\n\n/**\n * Builds the Content-Security-Policy for the payment routes from what each provider declares\n * (`PaymentClient.csp`), so the shop never hard-codes provider hosts. Meant for `/pagar` only,\n * never for the whole site. Roll out as `Content-Security-Policy-Report-Only` first.\n *\n * No SRI on purpose: provider SDK URLs are unversioned and a hash would break payments on any update.\n */\nexport function paymentCsp(clients: readonly (PaymentClient | null | undefined)[], options: PaymentCspOptions = {}): string {\n const list = clients.filter((c): c is PaymentClient => !!c)\n const pick = (k: keyof NonNullable<PaymentClient['csp']>) => list.map((c) => c.csp?.[k])\n const nonce = options.nonce && /^[A-Za-z0-9+/=_-]+$/.test(options.nonce) ? options.nonce : undefined\n const sdkOrigins = list.flatMap((c) => {\n try {\n const u = new URL(c.sdk_url)\n return u.protocol === 'https:' ? [u.origin] : []\n } catch {\n return []\n }\n })\n const dir = (name: string, values: string[]) => `${name} ${values.join(' ')}`\n const parts = [\n \"default-src 'self'\",\n dir('script-src', [\"'self'\", ...(options.scriptHashes ?? []).filter((h) => /^'sha(256|384|512)-[A-Za-z0-9+/=]+'$/.test(h)), ...(nonce ? [`'nonce-${nonce}'`] : []), ...origins(sdkOrigins, ...pick('script'), options.extra?.script)]),\n dir('frame-src', origins(...pick('frame'), options.extra?.frame).length ? origins(...pick('frame'), options.extra?.frame) : [\"'none'\"]),\n dir('connect-src', [\"'self'\", ...origins(...pick('connect'), options.extra?.connect)]),\n dir('img-src', [\"'self'\", 'data:', ...(options.imgHttps ? ['https:'] : []), ...origins(...pick('img'), options.extra?.img)]),\n \"style-src 'self' 'unsafe-inline'\",\n dir('form-action', [\"'self'\", ...origins(...pick('form'), options.extra?.form)]),\n \"frame-ancestors 'none'\",\n \"base-uri 'self'\",\n \"object-src 'none'\",\n ]\n if (options.reportUri && /^(https:\\/\\/|\\/)[^\\s;,]+$/.test(options.reportUri)) parts.push(`report-uri ${options.reportUri}`)\n return parts.join('; ')\n}\n\n/** `Content-Security-Policy` or, during the rollout week, `Content-Security-Policy-Report-Only`. */\nexport function paymentCspHeaderName(reportOnly: boolean): string {\n return reportOnly ? 'Content-Security-Policy-Report-Only' : 'Content-Security-Policy'\n}\n\nexport type PaymentCspMode = 'off' | 'report-only' | 'enforce'\n\n/** `PAYMENT_CSP`-style value: `off`, `report-only` or `enforce`. Unset: report-only in production, off elsewhere (dev servers inject scripts). */\nexport function paymentCspMode(value: string | null | undefined, production: boolean): PaymentCspMode {\n const raw = (value ?? '').trim().toLowerCase()\n if (raw === 'off' || raw === 'report-only' || raw === 'enforce') return raw\n return production ? 'report-only' : 'off'\n}\n\n/** Fresh per-request nonce (128 bits, base64). Works in Node, edge and browsers. */\nexport function paymentNonce(): string {\n const bytes = new Uint8Array(16)\n crypto.getRandomValues(bytes)\n let bin = ''\n for (const b of bytes) bin += String.fromCharCode(b)\n return btoa(bin)\n}\n\n/** Header ready for the response (`{}` when `off`): policy from the providers' `client.csp`, never the whole site. */\nexport function paymentCspHeaders(\n clients: readonly (PaymentClient | null | undefined)[],\n options: PaymentCspOptions & { mode: PaymentCspMode },\n): Record<string, string> {\n if (options.mode === 'off') return {}\n return { [paymentCspHeaderName(options.mode === 'report-only')]: paymentCsp(clients, options) }\n}\n\n/** The nonce the route left in the CSP header, to hand to `ServerRouter` / `<Scripts>`. */\nexport function paymentNonceFromHeaders(headers: Headers): string | undefined {\n const csp = headers.get('Content-Security-Policy') ?? headers.get('Content-Security-Policy-Report-Only') ?? ''\n return /'nonce-([A-Za-z0-9+/=_-]+)'/.exec(csp)?.[1]\n}\n","import type { PaymentOptionKey } from '@asteby/storefront'\n\n/** Texts of the \"Payment method\" section. Override any of them with the `messages` prop. */\nexport type PaymentMethodMessages = {\n legend: string\n /** Button label before the total: \"Pagar $1,200.00\". */\n pay: string\n /** Button label for card and cash, before the total. */\n placeOrder: string\n /** Button label when the buyer leaves for the provider's page. */\n payRedirect: string\n /** Button label for the first step (address) of a two-step checkout. */\n continue: string\n /** Button label when the address must be saved again. */\n retryAddress: string\n processing: string\n redirectNote: string\n cashPoints: string\n cashMore: string\n cashNote: string\n secureCard: string\n pickDeliveryFirst: string\n updatingTotal: string\n syncFailed: string\n /** The shipping quote expired or changed: fresh rates are loading. */\n quoteChanged: string\n rebuildCart: string\n noPaymentTitle: string\n noPayment: string\n paymentNote: string\n /** Fallback names for the provider options when the server sends no `label`. */\n options: Record<PaymentOptionKey, string>\n}\n\nconst ES: PaymentMethodMessages = {\n legend: 'Método de pago',\n pay: 'Pagar',\n placeOrder: 'Realizar el pedido',\n payRedirect: 'Continuar al pago',\n continue: 'Continuar',\n retryAddress: 'Guardar dirección y continuar',\n processing: 'Procesando…',\n redirectNote: 'Te llevamos a la página del proveedor para terminar el pago y regresas aquí.',\n cashPoints: 'Elige dónde pagar en efectivo',\n cashMore: 'Ver más puntos de pago',\n cashNote: 'Al hacer el pedido te damos una ficha con la referencia y la fecha límite. El pedido se confirma cuando pagas.',\n secureCard: 'Tus datos de tarjeta los captura directamente nuestro proveedor de pagos; la tienda nunca los ve.',\n pickDeliveryFirst: 'Elige primero la entrega para ver el total y pagar con tarjeta.',\n updatingTotal: 'Actualizando el total…',\n syncFailed: 'No pudimos actualizar el total con tu entrega. Puedes continuar al sitio del proveedor para pagar con tarjeta.',\n quoteChanged: 'Las tarifas de envío se actualizaron. Revisa tu envío para ver el total.',\n rebuildCart: 'Volver a armar mi carrito',\n noPaymentTitle: 'Por ahora no hay formas de pago disponibles',\n noPayment: 'Intenta de nuevo en unos minutos o escríbenos para completar tu pedido.',\n paymentNote: 'El pago se procesa de forma segura con nuestro proveedor de pagos.',\n options: {\n card: 'Tarjeta de crédito o débito',\n cash: 'Efectivo',\n wallet: 'Cuenta del proveedor de pagos',\n credits: 'Pagos sin tarjeta',\n },\n}\n\nconst EN: PaymentMethodMessages = {\n legend: 'Payment method',\n pay: 'Pay',\n placeOrder: 'Place order',\n payRedirect: 'Continue to payment',\n continue: 'Continue',\n retryAddress: 'Save address and continue',\n processing: 'Processing…',\n redirectNote: \"We'll take you to the provider's page to finish paying, then bring you back here.\",\n cashPoints: 'Choose where to pay in cash',\n cashMore: 'Show more payment points',\n cashNote: 'When you place the order you get a slip with the reference and the deadline. The order is confirmed once you pay.',\n secureCard: 'Your card details are captured directly by our payment provider; the shop never sees them.',\n pickDeliveryFirst: 'Choose delivery first to see the total and pay by card.',\n updatingTotal: 'Updating the total…',\n syncFailed: \"We couldn't update the total with your delivery. You can continue to the provider's site to pay by card.\",\n quoteChanged: 'Shipping rates were updated. Check your delivery to see the total.',\n rebuildCart: 'Rebuild my cart',\n noPaymentTitle: 'No payment methods are available right now',\n noPayment: 'Try again in a few minutes or contact us to complete your order.',\n paymentNote: 'Payment is processed securely by our payment provider.',\n options: {\n card: 'Credit or debit card',\n cash: 'Cash',\n wallet: 'Payment provider account',\n credits: 'Pay without a card',\n },\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides. */\nexport function paymentMethodMessages(locale?: string | null, overrides?: Partial<Omit<PaymentMethodMessages, 'options'>> & { options?: Partial<PaymentMethodMessages['options']> } | null): PaymentMethodMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n if (!overrides) return base\n const { options, ...rest } = overrides\n return { ...base, ...rest, options: { ...base.options, ...options } }\n}\n","/**\n * Shared catalog of the brands a checkout names: parcel carriers, card networks, wallets and cash payment points.\n *\n * Keys are the stable identifiers the providers already send (`ShippingRate.carrier` of Skydropx / Envía, the\n * `PaymentPoint.payment_point` or `id` of the payment addon, a `PaymentMethod.key`). Nothing here decides what a shop\n * offers: the server lists the rates and methods; this only gives each one its commercial name and a mark.\n *\n * Marks are typographic badges drawn by `<BrandMark>` (brand color + short wordmark): no third-party logo files are\n * bundled, so there is no licensing question and no extra request. A provider that holds a licensed logo sends it as\n * `logo_url` and it wins over the badge. Colors are close approximations of each brand's public color.\n */\n\nexport type BrandKind = 'carrier' | 'card' | 'wallet' | 'cash' | 'bank'\n\nexport type Brand = {\n key: string\n /** Commercial name, as the brand writes it. */\n name: string\n kind: BrandKind\n /** Badge background. */\n bg: string\n /** Badge text color (AA on `bg`). */\n fg: string\n /** Short wordmark drawn in the badge (`\\n` = two lines). Default: `name`. */\n mark?: string\n /** Special drawings instead of a wordmark. */\n shape?: 'mastercard'\n}\n\nconst B = (key: string, name: string, kind: BrandKind, bg: string, fg: string, mark?: string, shape?: Brand['shape']): Brand => ({\n key,\n name,\n kind,\n bg,\n fg,\n ...(mark ? { mark } : {}),\n ...(shape ? { shape } : {}),\n})\n\nconst LIST: Brand[] = [\n // Parcel carriers (Mexico and global).\n B('fedex', 'FedEx', 'carrier', '#4D148C', '#FFFFFF'),\n B('dhl', 'DHL', 'carrier', '#FFCC00', '#B00410'),\n B('estafeta', 'Estafeta', 'carrier', '#C8102E', '#FFFFFF'),\n B('paquetexpress', 'Paquetexpress', 'carrier', '#0B4EA2', '#FFFFFF', 'Paquet\\nexpress'),\n B('ups', 'UPS', 'carrier', '#351C15', '#FFB500'),\n B('redpack', 'Redpack', 'carrier', '#C8102E', '#FFFFFF'),\n B('99minutos', '99 Minutos', 'carrier', '#00704A', '#FFFFFF', '99'),\n B('jtexpress', 'J&T Express', 'carrier', '#C8102E', '#FFFFFF', 'J&T'),\n B('sendex', 'Sendex', 'carrier', '#003A70', '#FFFFFF'),\n B('ampm', 'AMPM', 'carrier', '#1D1D1B', '#FFFFFF'),\n B('tresguerras', 'Tresguerras', 'carrier', '#005BAC', '#FFFFFF', '3G'),\n B('quiken', 'Quiken', 'carrier', '#1D1D1B', '#FFFFFF'),\n B('imile', 'iMile', 'carrier', '#0057B8', '#FFFFFF'),\n B('carssa', 'Carssa', 'carrier', '#00529B', '#FFFFFF'),\n B('correosdemexico', 'Correos de México', 'carrier', '#7A1E3A', '#FFFFFF', 'Correos\\nMéxico'),\n B('usps', 'USPS', 'carrier', '#333366', '#FFFFFF'),\n B('canadapost', 'Canada Post', 'carrier', '#DA291C', '#FFFFFF', 'CPC'),\n // Card networks.\n B('visa', 'Visa', 'card', '#1A1F71', '#FFFFFF', 'VISA'),\n B('mastercard', 'Mastercard', 'card', '#FFFFFF', '#1D1D1B', 'MC', 'mastercard'),\n B('amex', 'American Express', 'card', '#1F72CD', '#FFFFFF', 'AMEX'),\n B('carnet', 'Carnet', 'card', '#003B71', '#FFFFFF'),\n // Wallets and payment providers.\n B('mercadopago', 'Mercado Pago', 'wallet', '#00B1EA', '#0B1F4E', 'mercado\\npago'),\n B('paypal', 'PayPal', 'wallet', '#003087', '#FFFFFF'),\n B('clip', 'Clip', 'wallet', '#FC4C02', '#1D1D1B'),\n B('applepay', 'Apple Pay', 'wallet', '#000000', '#FFFFFF', 'Pay'),\n B('googlepay', 'Google Pay', 'wallet', '#FFFFFF', '#3C4043', 'G Pay'),\n // Cash points and transfers (Mexico).\n B('oxxo', 'OXXO', 'cash', '#E21E26', '#FFE600'),\n B('spei', 'SPEI', 'bank', '#14365F', '#FFFFFF'),\n B('stp', 'STP', 'bank', '#14365F', '#FFFFFF', 'SPEI'),\n B('7eleven', '7-Eleven', 'cash', '#00704A', '#FFFFFF', '7-11'),\n B('circlek', 'Circle K', 'cash', '#DA291C', '#FFFFFF', 'K'),\n B('soriana', 'Soriana', 'cash', '#C8102E', '#FFFFFF'),\n B('extra', 'Extra', 'cash', '#E35205', '#FFFFFF'),\n B('kiosko', 'Kiosko', 'cash', '#C8102E', '#FFFFFF'),\n B('calimax', 'Calimax', 'cash', '#D52B1E', '#FFFFFF'),\n B('farmaciasyza', 'Farmacias Yza', 'cash', '#0A5A9C', '#FFFFFF', 'Yza'),\n B('chedraui', 'Chedraui', 'cash', '#0047BB', '#FFFFFF'),\n B('casaley', 'Casa Ley', 'cash', '#C8102E', '#FFFFFF', 'Ley'),\n B('telecomm', 'Telecomm', 'cash', '#6F1D46', '#FFFFFF'),\n B('walmart', 'Walmart', 'cash', '#0071CE', '#FFFFFF'),\n B('santander', 'Santander', 'bank', '#C00000', '#FFFFFF'),\n B('bbva', 'BBVA', 'bank', '#004481', '#FFFFFF'),\n B('citibanamex', 'Citibanamex', 'bank', '#004B8D', '#FFFFFF', 'Citi'),\n B('banorte', 'Banorte', 'bank', '#C8102E', '#FFFFFF'),\n]\n\n/** Alternative spellings that providers send for the same brand (already normalized by `brandKey`). */\nconst ALIASES: Record<string, string> = {\n fedexmx: 'fedex',\n fedexexpress: 'fedex',\n dhlexpress: 'dhl',\n dhlmx: 'dhl',\n paquetexpres: 'paquetexpress',\n paqueteexpress: 'paquetexpress',\n jt: 'jtexpress',\n jandtexpress: 'jtexpress',\n noventaynueveminutos: '99minutos',\n correos: 'correosdemexico',\n sepomex: 'correosdemexico',\n master: 'mastercard',\n americanexpress: 'amex',\n mercadopagomx: 'mercadopago',\n mp: 'mercadopago',\n clabe: 'spei',\n banktransfer: 'spei',\n seveneleven: '7eleven',\n '711': '7eleven',\n circulok: 'circlek',\n yza: 'farmaciasyza',\n bancomer: 'bbva',\n banamex: 'citibanamex',\n ley: 'casaley',\n}\n\nconst BY_KEY = new Map(LIST.map((b) => [b.key, b]))\n\n/** `\"FedEx México\"`, `\"fedex_mx\"` and `\"FEDEX\"` all become `fedex`. Lowercase ASCII letters and digits only. */\nexport function brandKey(raw: string | null | undefined): string {\n const flat = (raw ?? '')\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase()\n .replace(/&/g, 'and')\n .replace(/[^a-z0-9]/g, '')\n const noCountry = flat.endsWith('mexico') && flat !== 'correosdemexico' ? flat.slice(0, -6) : flat\n return ALIASES[noCountry] ?? (BY_KEY.has(noCountry) ? noCountry : ALIASES[flat] ?? flat)\n}\n\n/** Catalog entry for a provider identifier, or `null` when the brand is not in the catalog. */\nexport function findBrand(raw: string | null | undefined): Brand | null {\n return BY_KEY.get(brandKey(raw)) ?? null\n}\n\n/**\n * Commercial name for a provider identifier: the catalog's (`fedex` → \"FedEx\") or, for an unknown one, the identifier\n * in title case (`\"envios_rapidos\"` → \"Envios Rapidos\"). `null` for an empty input.\n */\nexport function brandName(raw: string | null | undefined): string | null {\n const brand = findBrand(raw)\n if (brand) return brand.name\n const text = (raw ?? '').trim()\n if (!text) return null\n // Already cased by the provider (\"Envía Plus\"): keep it.\n if (text !== text.toLowerCase() && text !== text.toUpperCase()) return text\n return text\n .toLowerCase()\n .split(/[\\s_-]+/)\n .filter(Boolean)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ')\n}\n\n/** Every brand of the catalog (for docs, previews and tests). */\nexport function listBrands(kind?: BrandKind): Brand[] {\n return kind ? LIST.filter((b) => b.kind === kind) : [...LIST]\n}\n","import type { CSSProperties } from 'react'\nimport { brandName, findBrand } from './brands.js'\n\nexport type BrandMarkProps = {\n /** Provider identifier (`fedex`, `oxxo`, `mercadopago`, `7eleven`…). Unknown keys get a neutral monogram. */\n brand: string | null | undefined\n /** Licensed logo sent by the provider (`PaymentPoint.logo_url`…). Only `https:`; it wins over the badge. */\n logoUrl?: string | null\n /** Height in px. The badge is 3:2 (width = 1.5 × height). Default 24. */\n size?: number\n /**\n * Accessible name. Omit it when the brand name is already written next to the mark (the usual case): the mark is then\n * decorative (`aria-hidden`).\n */\n title?: string\n className?: string\n}\n\nfunction safeLogo(url: string | null | undefined): string | null {\n if (!url) return null\n try {\n return new URL(url).protocol === 'https:' ? url : null\n } catch {\n return null\n }\n}\n\n/** Letters of a monogram for a brand outside the catalog: \"envios rapidos\" → \"ER\". */\nfunction monogram(raw: string): string {\n const words = (brandName(raw) ?? raw).split(/\\s+/).filter(Boolean)\n const letters = words.length > 1 ? words.slice(0, 2).map((w) => w[0]) : [(words[0] ?? '?').slice(0, 2)]\n return letters.join('').toUpperCase()\n}\n\n/**\n * The mark of a carrier, card network, wallet or cash point: an inline SVG badge in the brand color with its short\n * wordmark (no network request, same size on the server and in the browser, so no layout shift). With `logoUrl` it\n * draws the provider's licensed logo instead, lazily, with fixed dimensions.\n *\n * The badge carries its own background, so it keeps its contrast on light and dark themes; a hairline\n * (`--sf-brand-mark-ring`) separates it from the page.\n */\nexport function BrandMark({ brand, logoUrl, size = 24, title, className }: BrandMarkProps) {\n const height = size\n const width = Math.round(size * 1.5)\n const a11y = title ? { role: 'img' as const, 'aria-label': title } : { 'aria-hidden': true as const }\n const logo = safeLogo(logoUrl)\n const found = findBrand(brand)\n const key = found?.key ?? 'generic'\n const style: CSSProperties = { width, height, flex: 'none' }\n if (logo) {\n return (\n <img\n src={logo}\n alt={title ?? ''}\n width={width}\n height={height}\n loading=\"lazy\"\n decoding=\"async\"\n className={className}\n style={{ ...style, objectFit: 'contain' }}\n data-sf-brand-mark={key}\n {...(title ? {} : { 'aria-hidden': true })}\n />\n )\n }\n const ring = 'var(--sf-brand-mark-ring, rgb(127 127 127 / 0.35))'\n if (found?.shape === 'mastercard') {\n return (\n <svg viewBox=\"0 0 48 32\" width={width} height={height} className={className} style={style} data-sf-brand-mark={key} focusable=\"false\" {...a11y}>\n <rect x=\"0.5\" y=\"0.5\" width=\"47\" height=\"31\" rx=\"5\" fill={found.bg} stroke={ring} />\n <circle cx=\"19\" cy=\"16\" r=\"9\" fill=\"#EB001B\" />\n <circle cx=\"29\" cy=\"16\" r=\"9\" fill=\"#F79E1B\" />\n <path d=\"M24 8.52a9 9 0 0 1 0 14.96a9 9 0 0 1 0-14.96z\" fill=\"#FF5F00\" />\n </svg>\n )\n }\n const text = found ? (found.mark ?? found.name) : monogram(brand ?? '')\n const bg = found?.bg ?? 'var(--sf-brand-mark-bg, #E7E9EE)'\n const fg = found?.fg ?? 'var(--sf-brand-mark-fg, #2B2F38)'\n const lines = text.split('\\n')\n const longest = Math.max(...lines.map((l) => l.length))\n // Short marks grow; long ones are squeezed into the badge (textLength) so every badge has the same box.\n const fontSize = lines.length > 1 ? (longest <= 5 ? 11 : 9.5) : longest <= 2 ? 15 : longest <= 4 ? 12 : 10\n const fit = (l: string) => (l.length > 5 ? { textLength: 40, lengthAdjust: 'spacingAndGlyphs' as const } : {})\n const italic = found?.key === 'visa' || found?.key === 'fedex' ? 'italic' : undefined\n const common = {\n textAnchor: 'middle' as const,\n fill: fg,\n fontFamily: \"system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif\",\n fontWeight: 800,\n fontSize,\n fontStyle: italic,\n }\n return (\n <svg viewBox=\"0 0 48 32\" width={width} height={height} className={className} style={style} data-sf-brand-mark={key} focusable=\"false\" {...a11y}>\n <rect x=\"0.5\" y=\"0.5\" width=\"47\" height=\"31\" rx=\"5\" fill={bg} stroke={ring} />\n {lines.length > 1 ? (\n lines.slice(0, 2).map((l, i) => (\n <text key={i} x=\"24\" y={i === 0 ? 15 : 25.5} {...common} {...fit(l)}>\n {l}\n </text>\n ))\n ) : (\n <text x=\"24\" y=\"16\" dominantBaseline=\"central\" letterSpacing={longest <= 4 ? 0.3 : 0} {...common} {...fit(text)}>\n {text}\n </text>\n )}\n </svg>\n )\n}\n","import { useEffect, useMemo, useRef, useState, useSyncExternalStore, type MouseEvent, type ReactNode, type RefObject } from 'react'\nimport { formatMoney, type Money, type PaymentOptionKey } from '@asteby/storefront'\nimport { useResolvedLocale } from '../locale.js'\nimport { createFetchTransport, type PaymentTransport } from './adapter.js'\nimport type { PayChoice, PayChoices } from './choices.js'\nimport { paymentMethodMessages, type PaymentMethodMessages } from './payment-method.messages.js'\nimport { PaymentBrick, type PaymentBrickHandle, type PaymentBrickProps } from './payment-brick.js'\nimport type { PaymentEvent } from './use-embedded-payment.js'\nimport type { PaymentOutcome } from '@asteby/storefront'\nimport { BrandMark } from '../checkout/brand-mark.js'\nimport { findBrand } from '../checkout/brands.js'\n\n/** Name of the radio group that carries the chosen row (`method` or `method|option`). */\nexport const PAYMENT_CHOICE_FIELD = 'payment_choice'\n/** Name of the radio group that carries the chosen cash point. */\nexport const CASH_POINT_FIELD = 'cash_point'\n\n/** Fields of the page form (contact, delivery, address, method) for the JSON POST of the embedded payment. */\nexport function formFields(form: HTMLFormElement | null | undefined): Record<string, string> {\n const out: Record<string, string> = {}\n if (!form) return out\n for (const [k, v] of new FormData(form).entries()) if (typeof v === 'string') out[k] = v\n return out\n}\n\nexport type PaymentMethodClassNames = Partial<\n Record<\n 'root' | 'legend' | 'choice' | 'radioLabel' | 'radio' | 'labelText' | 'hint' | 'icon' | 'brands' | 'panel' | 'cashPoint' | 'cashPointInput' | 'cashMore' | 'note' | 'alert' | 'status' | 'brickWrap' | 'brick' | 'submit' | 'rebuild',\n string\n >\n>\n\nexport type PaymentMethodTestIds = Partial<\n Record<'method' | 'submit' | 'cash' | 'redirectNote' | 'card' | 'syncing' | 'syncFailed' | 'rebuild' | 'noPayment', string>\n>\n\nexport type PaymentMethodSectionProps = {\n /** From `buildPayChoices(payment.methods)`. */\n choices: PayChoices\n /** The server total (`cart.cost.total`). Shown on the button and passed to the card form. Never computed here. */\n amount: Money\n /** Cart (or checkout) id: scopes the stored attempt id so a reload reuses it. */\n scope?: string\n /** The page `<form>`: its fields travel with the card payment and it is validated before charging. */\n formRef: RefObject<HTMLFormElement | null>\n /** POST endpoint that charges the card (`handlers.pay` on the server). */\n payUrl: string\n /** POST endpoint that re-reads the payment (`handlers.status`). Enables the 3DS / review polling. */\n statusUrl?: string\n /** Row preselected. Default: `choices.defaultValue`. */\n defaultChoice?: string | null\n /** Value of the delivery group; the card form waits until it is `deliveryReady` and `syncDelivery` has settled. */\n delivery?: string\n /** `false` while the buyer has not chosen a delivery that fixes the total (e.g. address pending). Default true. */\n deliveryReady?: boolean\n /**\n * Saves the chosen delivery on the server cart so the server total includes it. Resolve `true` once the new total\n * has been read back (the `amount` prop is then up to date). Called once per delivery, whatever the payment row (so\n * the total on the button and in the shop's summary always holds the chosen delivery). Without it nothing waits.\n *\n * Resolve `'requote'` when the server refused the rate because the quote expired or changed and the shop is loading\n * fresh rates: the section then says so (`quoteChanged`, a status, not an error), keeps the card in the page and\n * tries again with the next delivery value. `false` is a real failure (the card degrades to the redirect).\n */\n syncDelivery?: (delivery: string) => Promise<boolean | 'requote'>\n /** A two-step checkout still collecting the address: the button reads \"continue\" and no card form shows. */\n addressFirst?: boolean\n /** The address must be saved again before paying. */\n retryAddress?: boolean\n /** Disables the button (the shop is not ready to take payment). */\n blocked?: boolean\n /** The page form is submitting. */\n busy?: boolean\n /** Names of fields with a server error (`payment_method`, `cash_point`). */\n invalid?: ReadonlySet<string>\n nonce?: string\n locale?: string\n messages?: Parameters<typeof paymentMethodMessages>[1]\n /** Name for a plain method (`PaymentMethod` without options). Default: the key as it comes. */\n methodLabel?: (methodKey: string) => { label: string; hint?: string }\n /** Per-row icon by option (`card`, `cash`, `wallet`, `credits`) or `plain`. Replaces the default marks of that row. */\n icons?: Partial<Record<PaymentOptionKey | 'plain', ReactNode>>\n /**\n * Brand marks (`BrandMark`): the provider's mark on its account / no-card rows and on a plain method, the cash point\n * marks on the cash row and next to each point, and `cardBrands` on the card row. Default true; `false` keeps the\n * rows text-only.\n */\n brandMarks?: boolean\n /** Card networks drawn on the card row (`visa`, `mastercard`, `amex`, `carnet`…), as the shop's provider accepts them. */\n cardBrands?: readonly string[]\n /** How to print the total on the button. Default `formatMoney`. */\n renderAmount?: (amount: Money) => ReactNode\n /** Anchor to the cart for the \"rebuild\" action when the cart expired. Default: plain `<a href>`. */\n rebuildHref?: string\n renderLink?: (props: { href: string; className?: string; children: ReactNode; testId?: string }) => ReactNode\n /** Called once the order is closed in the page (approved, under review or voucher). Navigate to the thank-you page. */\n onDone: (outcome: PaymentOutcome) => void\n /** The server total changed under the buyer: re-read the cart (the card form remounts with the new amount). */\n onAmountChanged?: () => void\n onEvent?: (event: PaymentEvent) => void\n classNames?: PaymentMethodClassNames\n testIds?: PaymentMethodTestIds\n /** Hide the section button (drive the form some other way). Card payments then need `PaymentMethodHandle`-less flows. */\n hideSubmit?: boolean\n /** Replaces the transport built from `payUrl` / `statusUrl`. */\n transport?: PaymentTransport\n /** Extra props for the card form (`adapter`, `adapters`, `messages`, `minHeight`, `storage`, timeouts...). */\n brickProps?: Partial<Omit<PaymentBrickProps, 'client' | 'amount' | 'transport' | 'onResult' | 'onEvent' | 'onFallback'>>\n}\n\nconst useHydrated = () =>\n useSyncExternalStore(\n () => () => {},\n () => true,\n () => false,\n )\n\n/**\n * \"Payment method\", hybrid. Card: the provider's secure form INSIDE the page (`PaymentBrick`) with the shop's own\n * button. Cash: payment points and a voucher on order. Provider account and no-card payments redirect. Without\n * JavaScript, or if the card form does not load, everything falls back to the plain redirect flow (the page form's\n * normal submit); the cash point radios and the notes work without JavaScript with the `payments.css` sheet.\n *\n * Money: the form amount is the server total passed in `amount` (already holding the chosen delivery); nothing is added\n * or recalculated here.\n *\n * Accessibility: one labelled `fieldset` with native radios; notes in `role=\"status\"`, problems in `role=\"alert\"`; the\n * button explains its busy state and is never silently disabled while the card form is loading.\n */\nexport function PaymentMethodSection(props: PaymentMethodSectionProps) {\n const {\n choices,\n amount,\n scope,\n formRef,\n payUrl,\n statusUrl,\n delivery = '',\n deliveryReady = true,\n syncDelivery,\n addressFirst = false,\n retryAddress = false,\n blocked = false,\n busy = false,\n invalid,\n nonce,\n methodLabel,\n icons,\n brandMarks = true,\n cardBrands = [],\n renderAmount,\n rebuildHref,\n renderLink,\n onDone,\n onAmountChanged,\n onEvent,\n classNames: cx = {},\n testIds = {},\n hideSubmit,\n brickProps,\n } = props\n const locale = useResolvedLocale(props.locale)\n const m = useMemo(() => paymentMethodMessages(locale, props.messages), [locale, props.messages])\n const hydrated = useHydrated()\n const [choiceValue, setChoiceValue] = useState(props.defaultChoice ?? choices.defaultValue)\n const selected = choices.choices.find((c) => c.value === choiceValue) ?? null\n const noPayment = choices.choices.length === 0\n const tid = (k: keyof PaymentMethodTestIds) => (testIds[k] ? { 'data-testid': testIds[k] } : {})\n\n const [fallback, setFallback] = useState(false)\n const [ready, setReady] = useState(false)\n const [processing, setProcessing] = useState(false)\n const [expired, setExpired] = useState(false)\n const brick = useRef<PaymentBrickHandle>(null)\n\n const cardChosen = selected?.mode === 'card' && !retryAddress && !addressFirst\n const cardActive = hydrated && cardChosen && !fallback\n\n // The server total must hold the chosen delivery before the card form mounts, and before any total is printed on the\n // button: the shop saves it on the cart and re-reads the cart. Once per delivery, for every payment row (cash and\n // redirect included, otherwise the button and the summary show the cart without shipping).\n const wantSync = hydrated && selected !== null && !addressFirst && !retryAddress && deliveryReady && Boolean(syncDelivery)\n const [sync, setSync] = useState<{ key: string; ok: boolean; requote?: boolean } | null>(null)\n const syncRef = useRef(syncDelivery)\n syncRef.current = syncDelivery\n useEffect(() => {\n if (!wantSync || !syncRef.current) return\n if (sync?.key === delivery && sync.ok) return\n let cancelled = false\n syncRef.current(delivery).then(\n (ok) => !cancelled && setSync(ok === 'requote' ? { key: delivery, ok: false, requote: true } : { key: delivery, ok }),\n () => !cancelled && setSync({ key: delivery, ok: false }),\n )\n return () => {\n cancelled = true\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [wantSync, delivery])\n const settled = sync?.key === delivery\n const synced = !syncDelivery || (settled && sync!.ok)\n const requote = wantSync && settled && sync!.requote === true\n const syncFailed = wantSync && settled && !sync!.ok && !requote\n const brickReady = cardActive && deliveryReady && synced && !syncFailed\n\n const transport = useMemo(\n () =>\n props.transport ??\n createFetchTransport(payUrl, {\n ...(statusUrl ? { refreshUrl: statusUrl } : {}),\n buildBody: (request) => ({ ...request, fields: formFields(formRef.current) }),\n }),\n [props.transport, payUrl, statusUrl, formRef],\n )\n\n const handleEvent = (e: PaymentEvent) => {\n if (e.type === 'form_ready') setReady(true)\n if (e.type === 'submit') setProcessing(true)\n if (e.type === 'tokenize_error' || e.type === 'retry') setProcessing(e.type === 'retry')\n if (e.type === 'result' && e.status === 'rejected') setProcessing(false)\n if (e.type === 'error') {\n setProcessing(false)\n if (e.kind === 'price_mismatch') onAmountChanged?.()\n if (e.kind === 'expired') setExpired(true)\n }\n onEvent?.(e)\n }\n\n // While the delivery is being saved the amount is stale: the button reads without it.\n const total = wantSync && (!settled || requote) ? null : renderAmount ? renderAmount(amount) : formatMoney(amount, locale)\n const label: ReactNode = retryAddress ? (\n m.retryAddress\n ) : addressFirst ? (\n m.continue\n ) : selected?.mode === 'plain' || !selected ? (\n <>\n {m.pay}\n {total ? <> {total}</> : null}\n </>\n ) : selected.mode === 'redirect' || (selected.mode === 'card' && (fallback || syncFailed)) ? (\n m.payRedirect\n ) : (\n <>\n {m.placeOrder}\n {total ? <> {total}</> : null}\n </>\n )\n\n function onPayClick(event: MouseEvent<HTMLButtonElement>) {\n // Redirect, cash, plain method, or a card without a usable form: the page form's normal submit.\n if (!cardActive || syncFailed) return\n event.preventDefault()\n const form = formRef.current\n if (form && !form.reportValidity()) return // required fields: the browser explains which is missing\n if (brickReady) void brick.current?.submit()\n }\n\n const cardNotice = (k: 'syncing' | 'syncFailed' | 'pickDelivery' | 'requote', node: ReactNode) =>\n k === 'syncFailed' ? (\n <p role=\"alert\" className={cx.alert} data-sf-pay-notice=\"sync-failed\" {...tid('syncFailed')}>\n {node}\n </p>\n ) : (\n <p role=\"status\" className={cx.status} data-sf-pay-notice={k} {...(k === 'syncing' ? tid('syncing') : {})}>\n {node}\n </p>\n )\n\n const Link = renderLink ?? (({ href, className, children, testId }) => (\n <a href={href} className={className} {...(testId ? { 'data-testid': testId } : {})}>\n {children}\n </a>\n ))\n\n return (\n <fieldset id=\"pago\" className={cx.root} data-sf-pay-method>\n <legend className={cx.legend}>{m.legend}</legend>\n {choices.choices.map((choice) => {\n const { label: rowLabel, hint } = rowText(choice, m, methodLabel)\n const checked = choice.value === choiceValue\n const slot = choice.option ?? 'plain'\n const icon = icons?.[slot] ?? (brandMarks ? defaultIcon(choice) : null)\n const marks = brandMarks ? rowMarks(choice, cardBrands) : []\n return (\n <div key={choice.value} className={cx.choice} data-sf-pay-choice>\n <label className={cx.radioLabel}>\n <input\n type=\"radio\"\n name={PAYMENT_CHOICE_FIELD}\n value={choice.value}\n checked={checked}\n onChange={() => setChoiceValue(choice.value)}\n aria-invalid={invalid?.has('payment_method') || undefined}\n data-mode={choice.mode}\n required\n className={cx.radio}\n {...tid('method')}\n />\n {icon ? (\n <span className={cx.icon} aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className={cx.labelText}>\n {rowLabel}\n {hint ? <span className={cx.hint}> {hint}</span> : null}\n </span>\n {marks.length ? (\n <span className={cx.brands} data-sf-pay-brands={choice.option ?? 'plain'} aria-hidden=\"true\">\n {marks.map((mk) => (\n <BrandMark key={mk.key} brand={mk.key} logoUrl={mk.logoUrl ?? null} size={20} />\n ))}\n </span>\n ) : null}\n </label>\n {/* Always in the HTML and visible only with its radio checked (payments.css :has): without JavaScript the cash point is also chosen. */}\n <ChoicePanel choice={choice} m={m} invalid={invalid} cx={cx} tid={tid} hidden={hydrated && !checked} marks={brandMarks} />\n </div>\n )\n })}\n\n {noPayment ? (\n <div role=\"alert\" className={cx.alert} data-sf-pay-notice=\"no-payment\" {...tid('noPayment')}>\n <p>\n <strong>{m.noPaymentTitle}</strong>\n </p>\n <p>{m.noPayment}</p>\n </div>\n ) : null}\n\n {cardChosen && hydrated && choices.cardClient ? (\n <div className={cx.brickWrap} data-sf-pay-card {...tid('card')}>\n {fallback\n ? null\n : !deliveryReady\n ? cardNotice('pickDelivery', m.pickDeliveryFirst)\n : syncFailed\n ? cardNotice('syncFailed', m.syncFailed)\n : requote\n ? cardNotice('requote', m.quoteChanged)\n : !synced\n ? cardNotice('syncing', m.updatingTotal)\n : null}\n {brickReady || fallback ? (\n <PaymentBrick\n {...brickProps}\n ref={brick}\n client={choices.cardClient}\n amount={amount}\n transport={transport}\n {...(nonce ? { nonce } : {})}\n locale={locale}\n {...(scope ? { scope } : {})}\n enabled={brickReady}\n {...(cx.brick ? { className: cx.brick } : {})}\n onEvent={handleEvent}\n onFallback={() => setFallback(true)}\n onResult={(o) => {\n // Approved, under review or voucher: the order is already closed and the receipt is in the cookie.\n if (o.kind === 'approved' || o.kind === 'in_review' || o.kind === 'voucher') onDone(o)\n }}\n />\n ) : null}\n <p className={cx.note}>{m.secureCard}</p>\n {expired && rebuildHref ? Link({ href: rebuildHref, ...(cx.rebuild ? { className: cx.rebuild } : {}), children: m.rebuildCart, ...(testIds.rebuild ? { testId: testIds.rebuild } : {}) }) : null}\n </div>\n ) : null}\n\n {noPayment || choices.choices.some((c) => c.option) ? null : <p className={cx.note}>{m.paymentNote}</p>}\n\n {hideSubmit ? null : (\n <button\n type=\"submit\"\n onClick={onPayClick}\n className={cx.submit}\n disabled={busy || blocked}\n aria-disabled={blocked || (brickReady && (!ready || processing)) || undefined}\n aria-busy={processing || undefined}\n data-sf-pay-method-submit\n {...tid('submit')}\n >\n {busy || processing ? m.processing : label}\n </button>\n )}\n </fieldset>\n )\n}\n\nfunction rowText(choice: PayChoice, m: PaymentMethodMessages, methodLabel: PaymentMethodSectionProps['methodLabel']): { label: string; hint?: string } {\n if (choice.mode === 'plain') return methodLabel ? methodLabel(choice.methodKey) : { label: choice.methodKey }\n return { label: choice.label ?? (choice.option ? m.options[choice.option] : undefined) ?? choice.option ?? choice.methodKey }\n}\n\nfunction ChoicePanel({\n choice,\n m,\n invalid,\n cx,\n tid,\n hidden,\n marks = true,\n}: {\n choice: PayChoice\n m: PaymentMethodMessages\n invalid: ReadonlySet<string> | undefined\n cx: PaymentMethodClassNames\n tid: (k: keyof PaymentMethodTestIds) => { 'data-testid'?: string }\n hidden: boolean\n marks?: boolean\n}) {\n if (choice.mode === 'redirect') {\n return (\n <p className={cx.panel} hidden={hidden} data-sf-pay-panel=\"redirect\" {...tid('redirectNote')}>\n {m.redirectNote}\n </p>\n )\n }\n if (choice.mode !== 'cash') return null\n const main = choice.points.filter((p) => p.group === 'main')\n const more = choice.points.filter((p) => p.group !== 'main')\n const row = (p: PayChoice['points'][number], i: number, first: boolean) => (\n <label key={p.id} className={cx.cashPoint} data-sf-pay-point>\n <input type=\"radio\" name={CASH_POINT_FIELD} value={p.id} defaultChecked={first && i === 0} className={cx.cashPointInput} aria-invalid={invalid?.has('cash_point') || undefined} />\n {marks ? <BrandMark brand={p.payment_point || p.id} logoUrl={p.logo_url ?? null} size={22} /> : null}\n <span>{p.label}</span>\n </label>\n )\n return (\n <div className={cx.panel} hidden={hidden} data-sf-pay-panel=\"cash\" {...tid('cash')}>\n <fieldset>\n <legend>{m.cashPoints}</legend>\n <div data-sf-pay-points>{main.map((p, i) => row(p, i, true))}</div>\n {more.length ? (\n <details>\n <summary className={cx.cashMore} style={{ minHeight: 44 }}>\n {m.cashMore}\n </summary>\n <div data-sf-pay-points>{more.map((p, i) => row(p, i, false))}</div>\n </details>\n ) : null}\n </fieldset>\n <p className={cx.note}>{m.cashNote}</p>\n </div>\n )\n}\n\nconst glyph = (d: string) => (\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" focusable=\"false\" data-sf-pay-glyph>\n <path d={d} />\n </svg>\n)\nconst CARD_GLYPH = 'M3 6.5h18v11H3zM3 10h18M6.5 14.5h4'\nconst CASH_GLYPH = 'M3 7h18v10H3zM12 14.5a2.5 2.5 0 1 0 0-5a2.5 2.5 0 0 0 0 5zM6 10v4M18 10v4'\n\n/** Leading icon of a row: the provider's mark on its own account / no-card rows; a neutral glyph for card and cash. */\nfunction defaultIcon(choice: PayChoice): ReactNode {\n // By option, not mode: a card row without the in-page form still is a card.\n if (choice.option === 'card') return glyph(CARD_GLYPH)\n if (choice.option === 'cash') return glyph(CASH_GLYPH)\n return findBrand(choice.methodKey) ? <BrandMark brand={choice.methodKey} size={24} /> : null\n}\n\n/** Trailing marks of a row: card networks on the card row, the first cash points on the cash row. */\nfunction rowMarks(choice: PayChoice, cardBrands: readonly string[]): Array<{ key: string; logoUrl?: string | null }> {\n if (choice.option === 'card') return cardBrands.map((key) => ({ key }))\n if (choice.option === 'cash') {\n const seen = new Set<string>()\n const out: Array<{ key: string; logoUrl?: string | null }> = []\n for (const p of choice.points) {\n const key = p.payment_point || p.id\n if (p.group !== 'main' || seen.has(key)) continue\n seen.add(key)\n out.push({ key, logoUrl: p.logo_url ?? null })\n if (out.length === 4) break\n }\n return out\n }\n return []\n}\n","/**\n * \"Payment method\" rows for a hybrid checkout: pure functions, no DOM and no server, so the loader, the action and the\n * browser share them.\n *\n * Rules (embedded-payment contract 1.2):\n * - Rows come ONLY from what the server publishes (`payment-methods[].options` and `.client`). No provider names and no\n * amounts live here.\n * - Card and cash are paid in the page; `wallet` and `credits` redirect to the provider.\n * - Without `client`, or with the card flagged `redirect: true`, the server does not offer `embedded`: the shop falls\n * back to the usual redirect flow.\n */\nimport type {\n CheckoutResult,\n PaymentAttemptResult,\n PaymentClient,\n PaymentMethod,\n PaymentOption,\n PaymentOptionKey,\n PaymentPoint,\n} from '@asteby/storefront'\n\n/** One row of \"Payment method\". `value` is what travels in the form (`payment_choice`). */\nexport type PayChoice = {\n value: string\n /** Server method key (`payment_method` of the checkout). */\n methodKey: string\n /** Provider option; `null` for a method without options (the plain flow). */\n option: PaymentOptionKey | null\n /** `card` (form in the page), `cash` (voucher), `redirect` (leaves to the gateway) or `plain`. */\n mode: 'card' | 'cash' | 'redirect' | 'plain'\n /** The provider's own text (`option.label`); the shop supplies its own when missing. */\n label: string | null\n points: PaymentPoint[]\n maxInstallments: number | null\n}\n\nexport type PayChoices = {\n choices: PayChoice[]\n /** Public data to mount the card form; `null` when the server does not offer `embedded`. */\n cardClient: PaymentClient | null\n defaultValue: string | null\n}\n\nexport type BuildPayChoicesOptions = {\n /** Method keys this shop never offers even when the server publishes them (e.g. a manual transfer). */\n hide?: Iterable<string>\n}\n\nconst SEP = '|'\n\nexport function choiceValue(methodKey: string, option: PaymentOptionKey | null): string {\n return option ? `${methodKey}${SEP}${option}` : methodKey\n}\n\n/** `\"mercadopago|card\"` becomes method and option. A value without `|` is a method without options. */\nexport function parseChoice(value: string | null | undefined): { methodKey: string; option: PaymentOptionKey | null } | null {\n const raw = (value ?? '').trim()\n if (!raw) return null\n const i = raw.lastIndexOf(SEP)\n if (i === -1) return { methodKey: raw, option: null }\n const option = raw.slice(i + 1)\n if (option !== 'card' && option !== 'cash' && option !== 'wallet' && option !== 'credits') return null\n return { methodKey: raw.slice(0, i), option }\n}\n\nfunction modeOf(option: PaymentOption): PayChoice['mode'] {\n if (option.redirect || option.key === 'wallet' || option.key === 'credits') return 'redirect'\n return option.key === 'cash' ? 'cash' : 'card'\n}\n\n/**\n * Rows from `GET payment-methods`. A method with `options` unfolds into one row per option (server order); one without\n * is a single plain row. `cardClient` only exists when the card is paid in the page.\n */\nexport function buildPayChoices(methods: readonly PaymentMethod[], options: BuildPayChoicesOptions = {}): PayChoices {\n const hidden = new Set(options.hide ?? [])\n const choices: PayChoice[] = []\n let cardClient: PaymentClient | null = null\n let defaultValue: string | null = null\n for (const method of methods) {\n if (hidden.has(method.key)) continue\n const opts = method.options ?? []\n if (opts.length === 0) {\n const value = choiceValue(method.key, null)\n choices.push({ value, methodKey: method.key, option: null, mode: 'plain', label: null, points: [], maxInstallments: null })\n if (method.default && !defaultValue) defaultValue = value\n continue\n }\n opts.forEach((option, i) => {\n const mode = modeOf(option)\n const value = choiceValue(method.key, option.key)\n choices.push({\n value,\n methodKey: method.key,\n option: option.key,\n mode,\n label: option.label?.trim() || null,\n points: option.key === 'cash' ? (option.points ?? []) : [],\n maxInstallments: option.max_installments ?? null,\n })\n if (mode === 'card' && method.client && !cardClient) cardClient = method.client\n if (method.default && i === 0 && !defaultValue) defaultValue = value\n })\n }\n // A card meant for the page but without `client` cannot be mounted: it is paid by redirect.\n const usable = choices.map((c) => (c.mode === 'card' && !cardClient ? { ...c, mode: 'redirect' as const } : c))\n return { choices: usable, cardClient, defaultValue: defaultValue ?? usable[0]?.value ?? null }\n}\n\n/** Chosen cash point becomes the cash `provider_data`, built on the server from the provider's list. */\nexport function cashProviderData(points: readonly PaymentPoint[], pointId: string | null | undefined): Record<string, string> | null {\n const point = points.find((p) => p.id === pointId) ?? (pointId ? null : points[0])\n if (!point) return null\n return {\n payment_method_id: point.payment_method_id,\n ...(point.payment_point ? { payment_point: point.payment_point } : {}),\n }\n}\n\n/**\n * A checkout (`GET checkouts/:id`) as an attempt result, for polling a 3DS challenge or a payment under review.\n * It only translates server states: it never decides a payment.\n */\nexport function checkoutToAttempt(result: CheckoutResult): PaymentAttemptResult {\n const { checkout, payment, order } = result\n const action = payment.action ?? null\n const base = { checkout, ...(order ? { order } : {}) }\n const status = (checkout.status ?? '').toLowerCase()\n if (status === 'paid' || status === 'converted') return { ...base, payment: { provider: payment.provider, status: 'paid', outcome: 'approved' } }\n if (status === 'cancelled' || status === 'canceled') return { ...base, payment: { provider: payment.provider, status: 'cancelled' } }\n if (status === 'expired') return { ...base, payment: { provider: payment.provider, status: 'expired' } }\n if (status === 'failed') {\n const decline = (payment as { decline_code?: PaymentAttemptResult['payment']['decline_code'] }).decline_code ?? 'declined'\n return { ...base, payment: { provider: payment.provider, status: 'failed', outcome: 'rejected', decline_code: decline, retryable: true } }\n }\n // Still pending: same as the last attempt left it (challenge or review), so the screen does not change.\n if (action?.type === 'challenge') return { ...base, payment: { provider: payment.provider, status: 'requires_action', outcome: 'challenge', action } }\n return { ...base, payment: { provider: payment.provider, status: 'pending', outcome: 'pending', action: action ?? { type: 'none' } } }\n}\n\n/** Body `{ error: { code, message, details } }` that `createFetchTransport` understands. */\nexport type PayErrorBody = { error: { code: string; message: string; details?: unknown } }\n\ntype ErrorLike = { status?: number; code?: string; field?: string; message?: string; details?: unknown }\n\n/**\n * Server error becomes a JSON response for the browser. Keeps the codes the SDK knows how to read (`price_mismatch`,\n * `payment_in_progress`, `expired`, `too_many_attempts`); the mock sends \"in progress\" in `field`, so that is checked too.\n */\nexport function payErrorResponse(err: ErrorLike): { status: number; body: PayErrorBody } {\n const status = typeof err.status === 'number' && err.status >= 400 ? err.status : 503\n let code = err.code ?? 'server_error'\n if (status === 409 && err.field === 'payment_in_progress') code = 'payment_in_progress'\n if (status === 429) code = 'too_many_attempts'\n if (status === 422 && err.field === 'expected_total') code = 'price_mismatch'\n return { status, body: { error: { code, message: err.message ?? '', ...(err.details !== undefined ? { details: err.details } : {}) } } }\n}\n\nexport type VoucherRowLabels = { point: string; reference: string; clabe: string; barcode: string; expires: string }\n\n/** Cookie receipt rows for a payment under review or with a voucher (shown on the thank-you page). */\nexport function voucherRows(\n voucher: NonNullable<NonNullable<PaymentAttemptResult['payment']['action']>['voucher']> | null | undefined,\n labels: VoucherRowLabels,\n locale: string,\n): [label: string, value: string][] {\n if (!voucher) return []\n const rows: [string, string][] = []\n if (voucher.payment_point) rows.push([labels.point, String(voucher.payment_point).slice(0, 60)])\n if (voucher.reference) rows.push([labels.reference, String(voucher.reference).slice(0, 80)])\n if (voucher.clabe) rows.push([labels.clabe, String(voucher.clabe).slice(0, 40)])\n if (voucher.barcode) rows.push([labels.barcode, String(voucher.barcode).slice(0, 80)])\n if (voucher.expires_at) {\n const d = new Date(voucher.expires_at)\n if (!Number.isNaN(d.getTime())) {\n rows.push([labels.expires, new Intl.DateTimeFormat(locale, { dateStyle: 'long', timeStyle: 'short', timeZone: 'UTC' }).format(d) + ' UTC'])\n }\n }\n return rows\n}\n"]}
1
+ {"version":3,"sources":["../src/dialog.tsx","../src/context.tsx","../src/locale.ts","../src/payments/sdk-loader.ts","../src/payments/mercadopago.ts","../src/theme.tsx","../src/payments/theme.ts","../src/payments/use-embedded-payment.ts","../src/payments/payment-brick.tsx","../src/payments/adapter.ts","../src/payments/csp.ts","../src/payments/payment-method.messages.ts","../src/checkout/brands/logos.generated.ts","../src/checkout/brands.ts","../src/checkout/brand-mark.tsx","../src/payments/payment-method.tsx","../src/payments/choices.ts"],"names":["useRef","useEffect","useCallback","createContext","useContext","useMemo","paymentMessages","useId","useState","generateIdempotencyKey","paymentOutcome","paymentErrorView","formatVoucherExpiry","jsx","jsxs","forwardRef","PaymentBrick","useImperativeHandle","formatMoney","Fragment","useSyncExternalStore","choiceValue"],"mappings":"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","file":"payments.cjs","sourcesContent":["import { useCallback, useEffect, useRef, type RefObject } from 'react'\n\nexport type DialogCloseReason = 'esc' | 'x' | 'backdrop' | 'action'\n\ntype UseModalDialogOptions = {\n open: boolean\n /** Called for Esc and backdrop clicks. The owner decides whether to close. */\n onClose: (reason: DialogCloseReason) => void\n /** Element focused when the dialog opens. Default: the element marked `data-sf-autofocus`, else the dialog itself. */\n initialFocus?: RefObject<HTMLElement | null>\n}\n\n/**\n * Native `<dialog>` wiring: `showModal()` (focus trap and inert background come from the browser),\n * Esc and backdrop clicks routed to `onClose`, and focus restored to the opener on close.\n * Falls back to the `open` attribute where `showModal` does not exist (old browsers, some test DOMs)\n * with an Esc key handler.\n */\nexport function useModalDialog({ open, onClose, initialFocus }: UseModalDialogOptions) {\n const ref = useRef<HTMLDialogElement | null>(null)\n const opener = useRef<Element | null>(null)\n const onCloseRef = useRef(onClose)\n onCloseRef.current = onClose\n\n useEffect(() => {\n const el = ref.current\n if (!el || !open) return\n opener.current = typeof document !== 'undefined' ? document.activeElement : null\n const hasModal = typeof el.showModal === 'function'\n if (!el.open) {\n if (hasModal) {\n try {\n el.showModal()\n } catch {\n el.setAttribute('open', '')\n }\n } else el.setAttribute('open', '')\n }\n const target = initialFocus?.current ?? el.querySelector<HTMLElement>('[data-sf-autofocus]') ?? el\n if (!target.hasAttribute('tabindex') && target === el) el.setAttribute('tabindex', '-1')\n target.focus({ preventScroll: true })\n\n const onCancel = (e: Event) => {\n e.preventDefault() // we close through state so the owner can navigate/track first\n onCloseRef.current('esc')\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n onCloseRef.current('esc')\n }\n }\n el.addEventListener('cancel', onCancel)\n if (!hasModal) el.addEventListener('keydown', onKey)\n return () => {\n el.removeEventListener('cancel', onCancel)\n el.removeEventListener('keydown', onKey)\n if (el.open) {\n if (typeof el.close === 'function') {\n try {\n el.close()\n } catch {\n el.removeAttribute('open')\n }\n } else el.removeAttribute('open')\n }\n const back = opener.current\n if (back instanceof HTMLElement && back.isConnected) back.focus({ preventScroll: true })\n }\n }, [open])\n\n /** Click on the backdrop (the dialog element itself, outside its content box). */\n const onBackdropClick = useCallback((e: { target: EventTarget; currentTarget: EventTarget }) => {\n if (e.target === e.currentTarget) onCloseRef.current('backdrop')\n }, [])\n\n return { ref, onBackdropClick }\n}\n\n/** `prefers-reduced-motion: reduce`, read after hydration (false on the server). */\nexport function prefersReducedMotion(): boolean {\n try {\n return typeof window !== 'undefined' && !!window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n } catch {\n return false\n }\n}\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { createStorefrontClient, type Shop, type StorefrontClient, type StorefrontClientOptions } from '@asteby/storefront'\n\nexport type StorefrontContextValue = {\n /** Client for browser-side calls (use a public `pk_` token). */\n client: StorefrontClient | null\n shop: Shop | null\n /** BCP 47 locale used for formatting (defaults to `shop.locale`, then `es-MX`). */\n locale: string\n /** ISO 4217 currency (defaults to `shop.currency_code`, then `MXN`). */\n currency: string\n}\n\nconst StorefrontContext = createContext<StorefrontContextValue | null>(null)\n\nexport type StorefrontProviderProps = {\n /** A ready client. Takes precedence over `config`. */\n client?: StorefrontClient\n /** Options to create the browser client (use a `pk_` token). */\n config?: StorefrontClientOptions\n /** Shop info loaded on the server (root loader). */\n shop?: Shop | null\n locale?: string\n currency?: string\n children?: ReactNode\n}\n\n/**\n * Makes the storefront client, shop, locale and currency available to the\n * tree. SSR-safe: creating the client does not touch `window`.\n */\nexport function StorefrontProvider({ client, config, shop = null, locale, currency, children }: StorefrontProviderProps) {\n const configKey = config ? `${config.baseUrl}|${config.token}|${config.locale ?? ''}|${config.customerToken ?? ''}` : ''\n const resolvedClient = useMemo(\n () => client ?? (config ? createStorefrontClient(config) : null),\n [client, configKey],\n )\n const value = useMemo<StorefrontContextValue>(\n () => ({\n client: resolvedClient,\n shop,\n locale: locale ?? config?.locale ?? shop?.locale ?? 'es-MX',\n currency: currency ?? shop?.currency_code ?? 'MXN',\n }),\n [resolvedClient, shop, locale, currency, config?.locale],\n )\n return <StorefrontContext.Provider value={value}>{children}</StorefrontContext.Provider>\n}\n\n/** Storefront context. Throws outside `<StorefrontProvider>`. */\nexport function useStorefront(): StorefrontContextValue {\n const ctx = useContext(StorefrontContext)\n if (!ctx) throw new Error('useStorefront must be used inside <StorefrontProvider>')\n return ctx\n}\n\n/** Storefront context or `null` outside a provider (for components that work standalone). */\nexport function useOptionalStorefront(): StorefrontContextValue | null {\n return useContext(StorefrontContext)\n}\n\n/** The client from context; throws when the provider has none. */\nexport function useStorefrontClient(): StorefrontClient {\n const { client } = useStorefront()\n if (!client) throw new Error('<StorefrontProvider> needs a `client` or `config` for browser-side calls')\n return client\n}\n","import { useOptionalStorefront } from './context.js'\n\n/** Locale of a component: its own prop, else the `StorefrontProvider`'s, else `es-MX`. */\nexport function useResolvedLocale(locale?: string | null): string {\n const sf = useOptionalStorefront()\n return locale ?? sf?.locale ?? 'es-MX'\n}\n","/**\n * Loads a provider script once, with timeout, CSP nonce and an origin allowlist.\n * The URL comes from the server (`PaymentClient.sdk_url`) but is still checked:\n * https only and, when `allowedOrigins` is given, an exact origin match.\n */\nexport type LoadScriptOptions = {\n nonce?: string\n timeoutMs: number\n /** Exact origins allowed for the script (`https://sdk.mercadopago.com`). Omitted: any https origin. */\n allowedOrigins?: readonly string[]\n /** `true` when the SDK global is already there (skips the insert). */\n isLoaded?: () => boolean\n document?: Document\n}\n\nconst pending = new Map<string, Promise<void>>()\n\nexport function loadPaymentSdk(url: string, options: LoadScriptOptions): Promise<void> {\n let parsed: URL\n try {\n parsed = new URL(url)\n } catch {\n return Promise.reject(new Error('payment sdk: invalid url'))\n }\n if (parsed.protocol !== 'https:' || parsed.username || parsed.password) return Promise.reject(new Error('payment sdk: https required'))\n if (options.allowedOrigins && !options.allowedOrigins.includes(parsed.origin)) return Promise.reject(new Error('payment sdk: origin not allowed'))\n if (options.isLoaded?.()) return Promise.resolve()\n const doc = options.document ?? (typeof document !== 'undefined' ? document : undefined)\n if (!doc) return Promise.reject(new Error('payment sdk: no document (server)'))\n\n const key = parsed.toString()\n const existing = pending.get(key)\n if (existing) return existing\n\n const p = new Promise<void>((resolve, reject) => {\n const script = doc.createElement('script')\n script.src = key\n script.async = true\n if (options.nonce) script.nonce = options.nonce\n script.dataset.sfPaymentSdk = 'true'\n let done = false\n const finish = (err?: Error) => {\n if (done) return\n done = true\n clearTimeout(timer)\n if (err) {\n script.remove()\n pending.delete(key) // allow a later retry\n reject(err)\n } else resolve()\n }\n const timer = setTimeout(() => finish(new Error('payment sdk: timeout')), options.timeoutMs)\n script.onload = () => finish()\n script.onerror = () => finish(new Error('payment sdk: failed to load'))\n doc.head.appendChild(script)\n })\n pending.set(key, p)\n return p\n}\n\n/** Test helper: forgets the loaded-script cache. */\nexport function resetPaymentSdkCache(): void {\n pending.clear()\n}\n","import { loadPaymentSdk } from './sdk-loader.js'\nimport type { MountedPaymentForm, PaymentFormAdapter, PaymentFormData, PaymentFormMountOptions } from './adapter.js'\n\n/** The `PaymentClient.kind` the addon `mercadopago` declares. */\nexport const MERCADOPAGO_BRICKS_KIND = 'mercadopago_bricks'\n\ntype MpController = { getFormData(): Promise<Record<string, unknown> | undefined | null>; unmount(): void | Promise<void> }\ntype MpBricks = { create(brick: string, containerId: string, settings: Record<string, unknown>): Promise<MpController> }\nexport type MercadoPagoCtor = new (publicKey: string, options?: { locale?: string }) => { bricks(): MpBricks }\n\nexport type MercadoPagoAdapterOptions = {\n /** Exact origins allowed for `sdk_url`. Default: Mercado Pago's SDK origin only. */\n allowedSdkOrigins?: readonly string[]\n /** Resolves the SDK constructor. Default: `window.MercadoPago`. Inject a fake in tests. */\n getSdk?: () => MercadoPagoCtor | undefined\n /** Reads the anti-fraud device id. Default: `window.MP_DEVICE_SESSION_ID`. */\n getDeviceSessionId?: () => string | undefined\n}\n\n/**\n * The only fields that may leave the browser, and the only place that decides it. Anything else the SDK returns\n * (notably `transaction_amount`, the amount: the server owns it) is dropped. Strings only, bounded length.\n */\nexport function sanitizeMercadoPagoFormData(data: Record<string, unknown> | null | undefined): Record<string, unknown> {\n const d = data ?? {}\n const str = (v: unknown, max = 256) => (typeof v === 'string' && v.length > 0 && v.length <= max ? v : undefined)\n const out: Record<string, unknown> = {}\n const token = str(d.token, 128)\n if (token) out.token = token\n const pm = str(d.payment_method_id, 64)\n if (pm) out.payment_method_id = pm\n const issuer = typeof d.issuer_id === 'number' ? String(d.issuer_id) : str(d.issuer_id, 32)\n if (issuer) out.issuer_id = issuer\n const inst = typeof d.installments === 'number' ? d.installments : Number.parseInt(String(d.installments ?? ''), 10)\n if (Number.isInteger(inst) && inst >= 1 && inst <= 48) out.installments = inst\n const payer = d.payer as { email?: unknown; identification?: { type?: unknown; number?: unknown } } | undefined\n if (payer && typeof payer === 'object') {\n const p: Record<string, unknown> = {}\n const email = str(payer.email, 254)\n if (email) p.email = email\n const idType = str(payer.identification?.type, 16)\n const idNumber = str(payer.identification?.number, 32)\n if (idType && idNumber) p.identification = { type: idType, number: idNumber }\n if (Object.keys(p).length) out.payer = p\n }\n return out\n}\n\n/**\n * Card Payment Brick adapter. The payment button is hidden: the shop's own button calls `collect()` (MP's\n * `getFormData()`), which tokenises inside MP's iframes. Card data never touches this code.\n */\nexport function mercadoPagoBricksAdapter(options: MercadoPagoAdapterOptions = {}): PaymentFormAdapter {\n const allowed = options.allowedSdkOrigins ?? ['https://sdk.mercadopago.com']\n const getSdk =\n options.getSdk ?? (() => (typeof window !== 'undefined' ? (window as unknown as { MercadoPago?: MercadoPagoCtor }).MercadoPago : undefined))\n const getDevice =\n options.getDeviceSessionId ?? (() => (typeof window !== 'undefined' ? (window as unknown as { MP_DEVICE_SESSION_ID?: string }).MP_DEVICE_SESSION_ID : undefined))\n\n return {\n kind: MERCADOPAGO_BRICKS_KIND,\n async load(client, { nonce, timeoutMs }) {\n await loadPaymentSdk(client.sdk_url, { ...(nonce ? { nonce } : {}), timeoutMs, allowedOrigins: allowed, isLoaded: () => !!getSdk() })\n if (!getSdk()) throw new Error('payment sdk: MercadoPago global missing after load')\n },\n async mount(opts: PaymentFormMountOptions): Promise<MountedPaymentForm> {\n const Ctor = getSdk()\n if (!Ctor) throw new Error('payment sdk: not loaded')\n const { client, container } = opts\n const card = client.options?.find((o) => o.key === 'card')\n const mp = new Ctor(client.public_key, { locale: opts.locale ?? client.locale ?? 'es-MX' })\n const amount = Number.parseFloat(opts.amount.amount)\n const controller = await mp.bricks().create('cardPayment', container.id, {\n initialization: { amount, ...(opts.email ? { payer: { email: opts.email } } : {}) },\n customization: {\n paymentMethods: { minInstallments: 1, ...(card?.max_installments ? { maxInstallments: card.max_installments } : {}) },\n visual: {\n hidePaymentButton: true,\n // El encabezado del Brick (\"Tarjeta de crédito o débito\" + banderas de tarjetas\n // aceptadas) lo dibuja Mercado Pago, repite lo que la tienda ya muestra en su propia\n // fila de método de pago y se veía cortado (p. ej. AMEX partido). hideFormTitle oculta\n // la línea del título y las banderas.\n hideFormTitle: true,\n style: { theme: 'default', ...(opts.theme && Object.keys(opts.theme).length ? { customVariables: opts.theme } : {}) },\n },\n },\n callbacks: {\n onReady: () => opts.onReady(),\n onError: (e: { type?: string; message?: string; cause?: string } | undefined) => {\n opts.onError({ critical: e?.type === 'critical', ...(e?.cause ? { message: String(e.cause) } : {}) })\n },\n onSubmit: async () => undefined,\n },\n })\n let gone = false\n return {\n async collect(): Promise<PaymentFormData> {\n if (gone) throw new Error('payment form is unmounted')\n const raw = await controller.getFormData()\n const provider_data = sanitizeMercadoPagoFormData(raw)\n if (!provider_data.token) throw new Error('payment form incomplete')\n const device = getDevice()\n return { provider_data, ...(typeof device === 'string' && device ? { device_session_id: device } : {}) }\n },\n async unmount() {\n gone = true\n try {\n await controller.unmount()\n } catch {\n /* the provider may already have removed it */\n }\n },\n }\n },\n }\n}\n","/**\n * Server-side theme (S3): turns the content theme from\n * `content.theme()` into CSS custom properties so the first SSR byte already\n * carries the store's brand — no localStorage, no anti-flicker script.\n *\n * Token naming follows `@asteby/metacore-theme`: camelCase keys become\n * kebab-case (`primaryForeground` → `--primary-foreground`), and each color is\n * also exposed as a Tailwind 4 theme variable (`--color-primary-foreground`).\n * metacore-theme ships its tokens as static CSS with no reusable naming\n * helper, so this module is standalone and does not depend on it.\n */\nimport type { Theme } from '@asteby/storefront'\n\nexport type ThemeCssOptions = {\n /** Selector that receives the variables (default `:root`). */\n selector?: string\n /**\n * Variable names for color tokens:\n * `both` (default) → `--color-<name>` and `--<name>`;\n * `color` → only `--color-<name>` (Tailwind 4); `metacore` → only `--<name>`.\n */\n naming?: 'both' | 'color' | 'metacore'\n /** Fallback stack appended to every font (default system sans-serif). */\n fontFallback?: string\n}\n\nconst DEFAULT_FONT_FALLBACK = 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif'\nconst MONO_FALLBACK = 'ui-monospace, SFMono-Regular, Menlo, monospace'\n\n/** `primaryForeground`, `primary_foreground`, `--color-primary-foreground` → `primary-foreground`. */\nexport function tokenName(key: string): string {\n return key\n .trim()\n .replace(/^-+/, '')\n .replace(/^color-/, '')\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_.]+/g, '-')\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\n/** Rejects values that could escape the declaration or the `<style>` element. */\nexport function isSafeCssValue(value: string): boolean {\n if (!value || value.length > 200) return false\n if (/[;{}<>\\\\]/.test(value)) return false\n if (/url\\s*\\(|expression\\s*\\(|@import/i.test(value)) return false\n return true\n}\n\nfunction fontStack(family: string, role: string, fallback: string): string | null {\n const name = family.replace(/[\"']/g, '').trim()\n if (!name || !isSafeCssValue(name)) return null\n return `\"${name}\", ${role === 'mono' ? MONO_FALLBACK : fallback}`\n}\n\n/** CSS declarations (`--x:value`) for a theme, without selector. */\nexport function themeToCssVariables(theme: Partial<Theme> | null | undefined, options: ThemeCssOptions = {}): Record<string, string> {\n const naming = options.naming ?? 'both'\n const vars: Record<string, string> = {}\n for (const [key, raw] of Object.entries(theme?.tokens ?? {})) {\n const name = tokenName(key)\n const value = String(raw).trim()\n if (!name || !isSafeCssValue(value)) continue\n if (naming !== 'metacore') vars[`--color-${name}`] = value\n if (naming !== 'color') vars[`--${name}`] = value\n }\n const fallback = options.fontFallback ?? DEFAULT_FONT_FALLBACK\n for (const [role, family] of Object.entries(theme?.fonts ?? {})) {\n const name = tokenName(role)\n const stack = typeof family === 'string' ? fontStack(family, name, fallback) : null\n if (name && stack) vars[`--font-${name}`] = stack\n }\n if (theme?.radius && isSafeCssValue(theme.radius.trim())) vars['--radius'] = theme.radius.trim()\n return vars\n}\n\n/** `:root{--color-primary:#0f766e;--primary:#0f766e;...}` from a content theme. */\nexport function themeToCss(theme: Partial<Theme> | null | undefined, options: ThemeCssOptions = {}): string {\n const vars = themeToCssVariables(theme, options)\n const body = Object.entries(vars)\n .map(([k, v]) => `${k}:${v}`)\n .join(';')\n if (!body) return ''\n const selector = (options.selector ?? ':root').replace(/[{}<>]/g, '')\n return `${selector}{${body}}`\n}\n\n/** Google Fonts stylesheet URL for the theme fonts (or `null` when there are none). */\nexport function themeFontsHref(theme: Partial<Theme> | null | undefined, weights: number[] = [400, 500, 600, 700]): string | null {\n const families = [...new Set(Object.values(theme?.fonts ?? {}).map((f) => String(f).replace(/[\"']/g, '').trim()).filter((f) => f && isSafeCssValue(f)))]\n if (!families.length) return null\n const params = families.map((f) => `family=${encodeURIComponent(f).replace(/%20/g, '+')}:wght@${weights.join(';')}`).join('&')\n return `https://fonts.googleapis.com/css2?${params}&display=swap`\n}\n\nexport type ThemeStyleProps = ThemeCssOptions & {\n theme: Partial<Theme> | null | undefined\n nonce?: string\n id?: string\n}\n\n/** Emits the theme variables as a `<style>` (render it in `<head>` from the root route). */\nexport function ThemeStyle({ theme, nonce, id = 'storefront-theme', ...options }: ThemeStyleProps) {\n const css = themeToCss(theme, options)\n if (!css) return null\n return <style id={id} nonce={nonce} data-storefront-theme=\"\" dangerouslySetInnerHTML={{ __html: css }} />\n}\n","import { isSafeCssValue } from '../theme.js'\n\n/** CSS custom properties (set by the shop in its stylesheet) -> provider widget variables. */\nexport const PAYMENT_THEME_TOKENS = {\n '--sf-pay-text': 'textPrimaryColor',\n '--sf-pay-text-muted': 'textSecondaryColor',\n '--sf-pay-background': 'formBackgroundColor',\n '--sf-pay-input-background': 'inputBackgroundColor',\n '--sf-pay-primary': 'baseColor',\n '--sf-pay-primary-contrast': 'buttonTextColor',\n '--sf-pay-error': 'errorColor',\n '--sf-pay-success': 'successColor',\n '--sf-pay-outline': 'outlinePrimaryColor',\n '--sf-pay-radius': 'borderRadiusMedium',\n} as const\n\n/**\n * Reads the `--sf-pay-*` tokens from an element's computed style, so the provider form follows the shop's\n * theme without the shop copying colors into JavaScript. Unsafe or empty values are skipped.\n */\nexport function readPaymentTheme(el: Element | null | undefined, tokens: Record<string, string> = PAYMENT_THEME_TOKENS): Record<string, string> {\n const out: Record<string, string> = {}\n if (!el || typeof getComputedStyle !== 'function') return out\n const style = getComputedStyle(el)\n for (const [cssVar, key] of Object.entries(tokens)) {\n const value = style.getPropertyValue(cssVar).trim()\n if (value && isSafeCssValue(value)) out[key] = value\n }\n return out\n}\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport {\n generateIdempotencyKey,\n paymentErrorView,\n paymentIdempotencyKey,\n paymentMessages,\n paymentOutcome,\n type Money,\n type PaymentAttemptResult,\n type PaymentClient,\n type PaymentErrorKind,\n type PaymentErrorView,\n type PaymentMessages,\n type PaymentOutcome,\n type PaymentOutcomeKind,\n} from '@asteby/storefront'\nimport type { MountedPaymentForm, PaymentFormAdapter, PaymentTransport } from './adapter.js'\nimport { mercadoPagoBricksAdapter } from './mercadopago.js'\nimport { readPaymentTheme } from './theme.js'\n\nexport type EmbeddedPaymentStatus =\n | 'idle' // no client / disabled / not hydrated\n | 'loading' // loading the provider SDK and mounting\n | 'ready'\n | 'processing'\n | OutcomeStatus\n | 'network_error' // no answer: `retry()` repeats the SAME attempt\n | 'blocked' // 409/429 and the like: do not retry (see `error.kind`)\n | 'fallback' // the secure form is unusable: switch to a redirect payment\n\ntype OutcomeStatus = PaymentOutcomeKind\n\nexport type PaymentFallbackReason = 'sdk_timeout' | 'sdk_error' | 'form_error' | 'unsupported_provider' | 'no_client'\n\n/** Anonymous funnel events: no personal or card data. */\nexport type PaymentEvent =\n | { type: 'form_ready'; ms: number }\n | { type: 'form_failed'; reason: PaymentFallbackReason }\n | { type: 'tokenize_error' }\n | { type: 'submit' }\n | { type: 'result'; status: PaymentOutcomeKind; decline_code: string | null }\n | { type: 'error'; kind: PaymentErrorKind }\n | { type: 'retry' }\n\nexport type UseEmbeddedPaymentOptions = {\n /** Provider data from `paymentMethods[].client`. `null`/absent: nothing to mount (status `idle`). */\n client: PaymentClient | null | undefined\n /** The total computed by the server. The Brick is remounted when it changes. Never calculate it in the shop. */\n amount: Money\n transport: PaymentTransport\n /** Mount only while the card option is selected. Default true. */\n enabled?: boolean\n email?: string\n locale?: string\n /** Replaces the adapter chosen from `client.kind`. */\n adapter?: PaymentFormAdapter\n /** Extra adapters by `kind`. Mercado Pago is built in. */\n adapters?: Record<string, PaymentFormAdapter>\n /** CSP nonce for the inserted script. */\n nonce?: string\n /** Time to wait for the form to be ready before falling back. Default 8000. */\n sdkTimeoutMs?: number\n /** Automatic resubmits (same attempt) after a network failure before showing the retry button. Default 2. */\n autoRetries?: number\n /** Base delay for the backoff between automatic retries. Default 600. */\n retryDelayMs?: number\n /** Poll interval/timeout for a pending 3DS challenge or review when `transport.refresh` exists. */\n pollIntervalMs?: number\n pollTimeoutMs?: number\n /** Where the attempt id is kept so a reload/retry reuses it. Default `sessionStorage`; `null` disables. Never holds card data. */\n storage?: Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> | null\n /** Scope of the stored attempt (e.g. the checkout or cart id). Default `default`. */\n scope?: string\n messages?: Partial<PaymentMessages>\n /** Called with the classified outcome of every definitive answer. */\n onResult?: (outcome: PaymentOutcome, result: PaymentAttemptResult) => void\n /** Called for `redirect` outcomes. Default: `location.assign(url)` (https only). */\n onRedirect?: (url: string) => void\n onFallback?: (reason: PaymentFallbackReason) => void\n onEvent?: (event: PaymentEvent) => void\n /** Overrides the theme read from `--sf-pay-*` tokens. */\n theme?: Record<string, string>\n /** Test hooks. */\n newAttemptId?: () => string\n}\n\nexport type EmbeddedPaymentState = {\n status: EmbeddedPaymentStatus\n /** Text to show for the current state (decline reason, review notice, error...). */\n message: string | null\n outcome: PaymentOutcome | null\n error: PaymentErrorView | null\n fallbackReason: PaymentFallbackReason | null\n attemptsLeft: number | null\n /** Id of the current attempt (stable across network retries). */\n attemptId: string | null\n /** `true` while loading, mounting or processing. */\n busy: boolean\n /** Attach to the element the provider renders into. */\n containerRef: (el: HTMLElement | null) => void\n containerId: string\n /** Tokenises and sends. No-ops while another submit is in flight (double click safe). */\n submit: () => Promise<void>\n /** Repeats the last submit with the SAME attempt after a network failure. */\n retry: () => Promise<void>\n /** After a rejection: clears the message (the form is remounted by the hook). */\n dismiss: () => void\n}\n\nconst DEFAULT_ADAPTERS: Record<string, PaymentFormAdapter> = {}\n\nfunction defaultAdapterFor(kind: string): PaymentFormAdapter | undefined {\n if (kind === 'mercadopago_bricks') return (DEFAULT_ADAPTERS[kind] ??= mercadoPagoBricksAdapter())\n return undefined\n}\n\nfunction safeStorage(): Pick<Storage, 'getItem' | 'setItem' | 'removeItem'> | null {\n try {\n return typeof sessionStorage !== 'undefined' ? sessionStorage : null\n } catch {\n return null\n }\n}\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms))\n\n/**\n * Embedded payment state machine for one card form.\n *\n * Guarantees:\n * - The amount is the server's: it is passed to the provider widget and echoed as `expected_total`; never computed.\n * - One idempotency key per attempt (`attempt`), kept in `storage`, reused on network retries and rotated only\n * after a definitive answer (a rejected card needs a new token, hence a new attempt).\n * - Card data never reaches this code or storage: only the provider token, held in memory until the answer.\n * - A double click returns the in-flight promise instead of sending twice.\n */\nexport function useEmbeddedPayment(options: UseEmbeddedPaymentOptions): EmbeddedPaymentState {\n const {\n client,\n amount,\n transport,\n enabled = true,\n locale,\n sdkTimeoutMs = 8000,\n autoRetries = 2,\n retryDelayMs = 600,\n pollIntervalMs = 2000,\n pollTimeoutMs = 60_000,\n scope = 'default',\n } = options\n const msgs = useMemo(() => paymentMessages(locale, options.messages), [locale, options.messages])\n const rawId = useId()\n const containerId = useMemo(() => `sf-pay-${rawId.replace(/[^a-zA-Z0-9_-]/g, '')}`, [rawId])\n\n const [status, setStatus] = useState<EmbeddedPaymentStatus>('idle')\n const [outcome, setOutcome] = useState<PaymentOutcome | null>(null)\n const [error, setError] = useState<PaymentErrorView | null>(null)\n const [fallbackReason, setFallbackReason] = useState<PaymentFallbackReason | null>(null)\n const [attemptsLeft, setAttemptsLeft] = useState<number | null>(null)\n const [attemptId, setAttemptId] = useState<string | null>(null)\n const [container, setContainer] = useState<HTMLElement | null>(null)\n const [mountKey, setMountKey] = useState(0)\n\n // Latest props without re-triggering effects.\n const live = useRef({ ...options, msgs })\n live.current = { ...options, msgs }\n const form = useRef<MountedPaymentForm | null>(null)\n const inFlight = useRef<Promise<void> | null>(null)\n const pendingData = useRef<{ provider_data: Record<string, unknown>; device_session_id?: string } | null>(null)\n const alive = useRef(true)\n const generation = useRef(0)\n const statusRef = useRef<EmbeddedPaymentStatus>('idle')\n statusRef.current = status\n\n useEffect(() => {\n alive.current = true\n return () => {\n alive.current = false\n }\n }, [])\n\n const storageKey = `sf:pay:attempt:${scope}`\n const store = options.storage === undefined ? safeStorage() : options.storage\n const emit = useCallback((e: PaymentEvent) => live.current.onEvent?.(e), [])\n\n const readAttempt = useCallback((): string => {\n try {\n const saved = store?.getItem(storageKey)\n if (saved) return saved\n } catch {\n /* private mode */\n }\n const fresh = (live.current.newAttemptId ?? generateIdempotencyKey)()\n try {\n store?.setItem(storageKey, fresh)\n } catch {\n /* keep in memory only */\n }\n return fresh\n }, [store, storageKey])\n\n const rotateAttempt = useCallback(() => {\n try {\n store?.removeItem(storageKey)\n } catch {\n /* ignore */\n }\n setAttemptId(null)\n }, [store, storageKey])\n\n const fallback = useCallback(\n (reason: PaymentFallbackReason) => {\n setFallbackReason(reason)\n setStatus('fallback')\n emit({ type: 'form_failed', reason })\n live.current.onFallback?.(reason)\n },\n [emit],\n )\n\n // Mount / remount the provider form. Re-runs when the server total, client or mount key changes.\n const amountKey = `${amount.amount}|${amount.currency_code}`\n const kind = client?.kind\n const publicKey = client?.public_key\n useEffect(() => {\n if (!enabled || !client) {\n setStatus((s) => (s === 'loading' || s === 'ready' ? 'idle' : s))\n return\n }\n const adapter = live.current.adapter ?? live.current.adapters?.[client.kind] ?? defaultAdapterFor(client.kind)\n if (!adapter) {\n fallback('unsupported_provider')\n return\n }\n if (!container) return\n const my = ++generation.current\n const started = Date.now()\n let mounted: MountedPaymentForm | null = null\n setStatus('loading')\n const stale = () => my !== generation.current || !alive.current\n // Fails this mount once: later callbacks of the same mount are ignored.\n const fail = (reason: PaymentFallbackReason) => {\n if (stale()) return\n generation.current++\n clearTimeout(timer)\n const m = mounted ?? form.current\n mounted = null\n form.current = null\n if (m) void Promise.resolve(m.unmount())\n fallback(reason)\n }\n const timer = setTimeout(() => {\n if (statusRef.current !== 'ready') fail('sdk_timeout')\n }, sdkTimeoutMs)\n\n container.id = containerId\n ;(async () => {\n try {\n await adapter.load(client, { ...(live.current.nonce ? { nonce: live.current.nonce } : {}), timeoutMs: sdkTimeoutMs })\n if (stale()) return\n const theme = live.current.theme ?? readPaymentTheme(container)\n const m = await adapter.mount({\n container,\n client,\n amount: live.current.amount,\n ...(live.current.email ? { email: live.current.email } : {}),\n ...(live.current.locale ? { locale: live.current.locale } : {}),\n theme,\n onReady: () => {\n if (stale()) return\n clearTimeout(timer)\n setStatus((s) => (s === 'loading' ? 'ready' : s))\n emit({ type: 'form_ready', ms: Date.now() - started })\n },\n onError: (e) => {\n if (stale()) return\n if (e.critical) fail('form_error')\n },\n })\n if (stale()) {\n void Promise.resolve(m.unmount())\n return\n }\n mounted = m\n form.current = m\n } catch (err) {\n fail(err instanceof Error && /timeout/i.test(err.message) ? 'sdk_timeout' : 'sdk_error')\n }\n })()\n\n return () => {\n clearTimeout(timer)\n generation.current++\n const m = mounted ?? form.current\n mounted = null\n form.current = null\n if (m) void Promise.resolve(m.unmount())\n }\n // `client` identity changes with every loader run; its identity-defining fields are listed instead.\n }, [enabled, container, kind, publicKey, amountKey, mountKey, sdkTimeoutMs, containerId])\n\n const finish = useCallback(\n (result: PaymentAttemptResult) => {\n const o = paymentOutcome(result, live.current.locale, live.current.messages)\n pendingData.current = null\n setOutcome(o)\n setError(null)\n setAttemptsLeft(o.attempts_left)\n setStatus(o.kind)\n emit({ type: 'result', status: o.kind, decline_code: o.decline_code })\n if (o.kind === 'approved') rotateAttempt()\n if (o.kind === 'rejected' || o.kind === 'cancelled') {\n // The token is single-use: a new attempt and a fresh form.\n rotateAttempt()\n setMountKey((k) => k + 1)\n }\n live.current.onResult?.(o, result)\n if (o.kind === 'redirect' && o.redirect_url) {\n if (live.current.onRedirect) live.current.onRedirect(o.redirect_url)\n else if (typeof window !== 'undefined') window.location.assign(o.redirect_url)\n }\n },\n [emit, rotateAttempt],\n )\n\n const send = useCallback(\n async (data: { provider_data: Record<string, unknown>; device_session_id?: string }, attempt: string) => {\n const ctl = new AbortController()\n const maxRetries = live.current.autoRetries ?? autoRetries\n for (let n = 0; ; n++) {\n try {\n const result = await transport.submit(\n {\n option: 'card',\n attempt,\n idempotencyKey: attempt,\n provider_data: data.provider_data,\n ...(data.device_session_id ? { device_session_id: data.device_session_id } : {}),\n expected_total: live.current.amount,\n },\n { signal: ctl.signal },\n )\n if (!alive.current) return\n finish(result)\n return\n } catch (err) {\n if (!alive.current) return\n const view = paymentErrorView(err, live.current.locale, live.current.messages)\n if (view.retrySameAttempt && n < maxRetries) {\n await sleep((live.current.retryDelayMs ?? retryDelayMs) * 2 ** n)\n if (!alive.current) return\n continue\n }\n emit({ type: 'error', kind: view.kind })\n setError(view)\n if (view.kind === 'network') {\n pendingData.current = data // memory only, for `retry()` with the same attempt\n setStatus('network_error')\n } else if (view.kind === 'price_mismatch') {\n pendingData.current = null\n rotateAttempt()\n setMountKey((k) => k + 1)\n setStatus('ready')\n } else if (view.kind === 'generic') {\n pendingData.current = null\n rotateAttempt()\n setMountKey((k) => k + 1)\n setStatus('ready')\n } else {\n pendingData.current = null\n setStatus('blocked')\n }\n return\n }\n }\n },\n [autoRetries, emit, finish, retryDelayMs, rotateAttempt, transport],\n )\n\n const submit = useCallback((): Promise<void> => {\n if (inFlight.current) return inFlight.current\n const m = form.current\n if (!m || (statusRef.current !== 'ready' && statusRef.current !== 'network_error')) return Promise.resolve()\n const run = (async () => {\n setStatus('processing')\n setError(null)\n setOutcome(null)\n emit({ type: 'submit' })\n let data\n try {\n data = await m.collect()\n } catch {\n emit({ type: 'tokenize_error' })\n setError({ kind: 'generic', message: live.current.msgs['error.card_data'], retrySameAttempt: false, canRetry: true })\n setStatus('ready')\n return\n }\n const attempt = readAttempt()\n setAttemptId(attempt)\n await send(data, attempt)\n })().finally(() => {\n inFlight.current = null\n })\n inFlight.current = run\n return run\n }, [emit, readAttempt, send])\n\n const retry = useCallback((): Promise<void> => {\n if (inFlight.current) return inFlight.current\n const data = pendingData.current\n if (!data) return submit()\n emit({ type: 'retry' })\n const run = (async () => {\n setStatus('processing')\n setError(null)\n const attempt = readAttempt()\n setAttemptId(attempt)\n await send(data, attempt)\n })().finally(() => {\n inFlight.current = null\n })\n inFlight.current = run\n return run\n }, [emit, readAttempt, send, submit])\n\n // Poll a pending 3DS challenge / review until it resolves or the window closes.\n useEffect(() => {\n if ((status !== 'challenge' && status !== 'in_review') || !transport.refresh) return\n let stop = false\n const ctl = new AbortController()\n const until = Date.now() + pollTimeoutMs\n ;(async () => {\n while (!stop && Date.now() < until) {\n await sleep(pollIntervalMs)\n if (stop || !alive.current) return\n try {\n const r = await transport.refresh!({ signal: ctl.signal })\n if (stop || !alive.current) return\n const o = paymentOutcome(r, live.current.locale, live.current.messages)\n if (o.kind !== status) {\n finish(r)\n return\n }\n } catch {\n /* keep polling until the window closes */\n }\n }\n })()\n return () => {\n stop = true\n ctl.abort()\n }\n }, [status, transport, pollIntervalMs, pollTimeoutMs, finish])\n\n const dismiss = useCallback(() => {\n setError(null)\n setOutcome((o) => (o?.kind === 'rejected' ? null : o))\n }, [])\n\n // After a rejection the hook remounts the form; the rejection text stays visible via `outcome` until the next submit.\n const message =\n status === 'processing'\n ? msgs['state.processing']\n : status === 'fallback'\n ? msgs['state.fallback']\n : (error?.message ?? outcome?.message ?? (status === 'loading' ? msgs['state.loading'] : null))\n\n return {\n status,\n message,\n outcome,\n error,\n fallbackReason,\n attemptsLeft,\n attemptId,\n busy: status === 'loading' || status === 'processing',\n containerRef: setContainer,\n containerId,\n submit,\n retry,\n dismiss,\n }\n}\n\nexport { paymentIdempotencyKey }\n","import { forwardRef, useEffect, useImperativeHandle, useRef, type CSSProperties, type ReactNode } from 'react'\nimport { formatMoney, formatVoucherExpiry, paymentMessages, type Money, type PaymentClient, type PaymentMessages, type PaymentOutcome } from '@asteby/storefront'\nimport { useModalDialog } from '../dialog.js'\nimport { useResolvedLocale } from '../locale.js'\nimport { useEmbeddedPayment, type EmbeddedPaymentState, type UseEmbeddedPaymentOptions } from './use-embedded-payment.js'\n\nexport type VoucherCardProps = {\n outcome: PaymentOutcome\n locale?: string\n messages?: Partial<PaymentMessages>\n className?: string\n}\n\n/**\n * Cash/SPEI voucher: point, exact amount, reference, barcode/CLABE and deadline, all from the server.\n * The link only renders for https URLs (already filtered by `paymentOutcome`).\n */\nexport function VoucherCard({ outcome, locale, messages, className }: VoucherCardProps) {\n const v = outcome.voucher\n if (!v) return null\n const m = paymentMessages(locale, messages)\n const expiry = formatVoucherExpiry(v.expires_at, locale, messages)\n return (\n <section className={className} data-sf-voucher aria-labelledby=\"sf-voucher-title\">\n <h3 id=\"sf-voucher-title\">{m['voucher.title']}</h3>\n <dl>\n <div>\n <dt>{m['voucher.point']}</dt>\n <dd>{v.payment_point}</dd>\n </div>\n {v.amount && (\n <div>\n <dt>{m['voucher.amount']}</dt>\n <dd>{formatMoney(v.amount, locale)}</dd>\n </div>\n )}\n <div>\n <dt>{m['voucher.reference']}</dt>\n <dd data-sf-voucher-reference>{v.reference}</dd>\n </div>\n {v.clabe && (\n <div>\n <dt>{m['voucher.clabe']}</dt>\n <dd>{v.clabe}</dd>\n </div>\n )}\n {v.barcode && (\n <div>\n <dt>{m['voucher.barcode']}</dt>\n <dd>{v.barcode}</dd>\n </div>\n )}\n </dl>\n {expiry && <p data-sf-voucher-expiry>{expiry}</p>}\n {v.voucher_url && (\n <p>\n <a href={v.voucher_url} target=\"_blank\" rel=\"noopener noreferrer\">\n {m['voucher.open']}\n </a>\n </p>\n )}\n <p>{m['voucher.email']}</p>\n </section>\n )\n}\n\nexport type PaymentChallengeProps = {\n outcome: PaymentOutcome\n locale?: string\n messages?: Partial<PaymentMessages>\n /** Replace the default iframe (e.g. mount the provider's status screen). */\n render?: (outcome: PaymentOutcome) => ReactNode\n onCancel?: () => void\n}\n\n/** 3DS inside the page: a modal dialog with title and focus trap. Default content is the bank's https iframe. */\nexport function PaymentChallenge({ outcome, locale, messages, render, onCancel }: PaymentChallengeProps) {\n const m = paymentMessages(locale, messages)\n const { ref } = useModalDialog({ open: true, onClose: () => onCancel?.() })\n const url = outcome.challenge?.url\n return (\n <dialog ref={ref} aria-labelledby=\"sf-challenge-title\" data-sf-challenge>\n <div>\n <h2 id=\"sf-challenge-title\" data-sf-autofocus tabIndex={-1}>\n {m['challenge.title']}\n </h2>\n {render ? (\n render(outcome)\n ) : url ? (\n <iframe src={url} title={m['challenge.title']} style={{ width: '100%', minHeight: 420, border: 0 }} />\n ) : (\n <p>{m['state.challenge']}</p>\n )}\n {onCancel && (\n <button type=\"button\" onClick={onCancel} style={{ minWidth: 44, minHeight: 44 }}>\n {m['action.cancel']}\n </button>\n )}\n </div>\n </dialog>\n )\n}\n\nexport type PaymentBrickHandle = EmbeddedPaymentState\n\nexport type PaymentBrickProps = Omit<UseEmbeddedPaymentOptions, 'amount'> & {\n /** The server's total. Shown on the button and passed to the provider widget. */\n amount: Money\n /** When set, renders the shop's pay button with this label. Otherwise drive it through the ref. */\n submitLabel?: ReactNode\n /** Hide the total next to the label. */\n hideAmountInButton?: boolean\n /** Rendered instead of the built-in voucher card. */\n renderVoucher?: (outcome: PaymentOutcome) => ReactNode\n renderChallenge?: (outcome: PaymentOutcome) => ReactNode\n /** Height reserved for the provider form so the page does not jump. Default 360. */\n minHeight?: number | string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * Card form for an embedded payment. Headless: no styles of its own, only `data-*` hooks and CSS variables\n * (`--sf-pay-*`, read for the provider widget; `--sf-pay-min-height` for the reserved height).\n *\n * Accessibility: the container is labelled and `aria-busy` while loading; every message goes through one\n * `role=\"status\"` region (or `role=\"alert\"` for errors, which also takes focus); the button explains why it is\n * busy and never silently disables.\n *\n * Use the `ref` to get the same state the hook returns (`submit`, `retry`, `status`...) when the shop owns the button.\n */\nexport const PaymentBrick = forwardRef<PaymentBrickHandle, PaymentBrickProps>(function PaymentBrick(props, ref) {\n const { submitLabel, hideAmountInButton, renderVoucher, renderChallenge, minHeight = 360, className, style, ...hookOptions } = props\n const locale = useResolvedLocale(props.locale)\n const state = useEmbeddedPayment({ ...hookOptions, locale })\n useImperativeHandle(ref, () => state)\n const m = paymentMessages(locale, props.messages)\n const alertRef = useRef<HTMLDivElement | null>(null)\n\n const isError = !!state.error || state.outcome?.kind === 'rejected' || state.status === 'blocked'\n // Move focus to the explanation when a problem appears.\n useEffect(() => {\n if (isError) alertRef.current?.focus()\n }, [isError, state.message])\n\n if (state.status === 'fallback') {\n return (\n <div className={className} style={style} data-sf-pay-status=\"fallback\">\n <p role=\"status\" data-sf-pay-fallback>\n {m['state.fallback']}\n </p>\n </div>\n )\n }\n\n const outcome = state.outcome\n const showForm = state.status !== 'approved' && state.status !== 'voucher' && state.status !== 'in_review' && state.status !== 'redirect' && state.status !== 'expired'\n const busy = state.busy\n const total = formatMoney(props.amount, locale)\n const label = state.status === 'processing' ? m['state.processing'] : (submitLabel ?? m['action.pay'])\n\n return (\n <div className={className} style={style} data-sf-pay-status={state.status}>\n {showForm && (\n <div\n ref={state.containerRef}\n role=\"group\"\n aria-label={m['form.label']}\n aria-busy={state.status === 'loading' || state.status === 'processing'}\n data-sf-pay-container\n style={{ minHeight: `var(--sf-pay-min-height, ${typeof minHeight === 'number' ? `${minHeight}px` : minHeight})` }}\n />\n )}\n\n {isError ? (\n <div ref={alertRef} role=\"alert\" tabIndex={-1} data-sf-pay-alert data-sf-pay-code={state.error?.kind ?? outcome?.decline_code ?? undefined}>\n {state.message}\n {state.status === 'network_error' && (\n <button type=\"button\" onClick={() => void state.retry()} style={{ minHeight: 44 }}>\n {m['action.retry']}\n </button>\n )}\n </div>\n ) : (\n <p role=\"status\" aria-live=\"polite\" data-sf-pay-message>\n {state.message}\n </p>\n )}\n\n {outcome?.kind === 'voucher' && (renderVoucher ? renderVoucher(outcome) : <VoucherCard outcome={outcome} locale={locale} {...(props.messages ? { messages: props.messages } : {})} />)}\n {outcome?.kind === 'challenge' && (\n <PaymentChallenge outcome={outcome} locale={locale} {...(props.messages ? { messages: props.messages } : {})} {...(renderChallenge ? { render: renderChallenge } : {})} />\n )}\n\n {submitLabel !== undefined && showForm && (\n <button\n type=\"button\"\n onClick={() => void state.submit()}\n aria-busy={busy}\n aria-disabled={state.status !== 'ready'}\n data-sf-pay-submit\n style={{ minHeight: 44 }}\n >\n {label}\n {!hideAmountInButton && state.status !== 'processing' && <> · {total}</>}\n </button>\n )}\n </div>\n )\n})\n\nexport type { PaymentClient }\n","/**\n * Replaceable ports of the embedded payment. The shop (or another provider)\n * implements these; the hook and component only talk to them.\n *\n * Two ports, on purpose:\n * - `PaymentFormAdapter` = the provider SDK in the browser (Mercado Pago Bricks, Stripe Elements...).\n * It mounts a secure form and returns only what the SDK allows to travel (a one-use token).\n * - `PaymentTransport` = how the browser reaches the shop SERVER. The browser never calls OPS: the shop's\n * route forwards to `client.checkouts.pay(...)` with its private token. The HTTP contract between\n * the shop route and OPS lives in `@asteby/storefront` (`checkouts.pay`); the shop route is free to\n * shape its own JSON as long as it answers with a `PaymentAttemptResult`.\n */\nimport type { Money, PaymentAttemptResult, PaymentClient } from '@asteby/storefront'\n\nexport type PaymentFormError = {\n /** `true`: the form cannot be used (SDK blocked, iframe failed). The hook falls back to a redirect. */\n critical: boolean\n /** Short, non-sensitive text for logs. Never card data. */\n message?: string\n}\n\nexport type PaymentFormMountOptions = {\n /** Element the provider renders into. Its `id` is set by the hook. */\n container: HTMLElement\n client: PaymentClient\n /** Total computed by the server. Only passed to the provider widget; never calculated here. */\n amount: Money\n email?: string\n locale?: string\n /** Visual tokens read from CSS variables (see `readPaymentTheme`). */\n theme?: Record<string, string>\n onReady: () => void\n onError: (error: PaymentFormError) => void\n}\n\n/** What a mounted form hands back at submit time. */\nexport type PaymentFormData = {\n /** Sent to the server as `provider_data`. Must never contain amounts or raw card data. */\n provider_data: Record<string, unknown>\n /** Anti-fraud device fingerprint, if the SDK exposes one. */\n device_session_id?: string\n}\n\nexport interface MountedPaymentForm {\n /** Tokenises the card inside the provider iframes. Rejects when the form is invalid (the provider shows the field errors). */\n collect(): Promise<PaymentFormData>\n unmount(): void | Promise<void>\n}\n\nexport interface PaymentFormAdapter {\n /** `PaymentClient.kind` this adapter serves. */\n readonly kind: string\n /** Loads the provider script (once). Rejects on timeout, blocked script or invalid URL. */\n load(client: PaymentClient, options: { nonce?: string; timeoutMs: number }): Promise<void>\n mount(options: PaymentFormMountOptions): Promise<MountedPaymentForm>\n}\n\n/** Everything the shop server needs for one attempt. No card data: only the provider token and choices. */\nexport type PaymentSubmitRequest = {\n option: 'card'\n /** Stable per attempt: the same attempt always carries the same key, so a retry never charges twice. */\n attempt: string\n idempotencyKey: string\n provider_data: Record<string, unknown>\n device_session_id?: string\n /** The total the buyer saw (the server's own number). The server answers 422 `price_mismatch` if it differs. */\n expected_total: Money\n}\n\nexport type PaymentTransport = {\n submit(request: PaymentSubmitRequest, context: { signal: AbortSignal }): Promise<PaymentAttemptResult>\n /** Optional: re-reads the checkout state (3DS challenge, \"in review\"). Same result shape as `submit`. */\n refresh?(context: { signal: AbortSignal }): Promise<PaymentAttemptResult>\n}\n\n/** Error thrown by `createFetchTransport` for non-2xx answers; compatible with `paymentErrorView`. */\nexport class PaymentHttpError extends Error {\n override readonly name = 'PaymentHttpError'\n constructor(\n readonly status: number,\n readonly code: string,\n message?: string,\n /** Raw `error.details` (e.g. the new `cost` of a `price_mismatch`); untrusted shape. */\n readonly details?: unknown,\n ) {\n super(message ?? code)\n }\n}\n\nexport type FetchTransportOptions = {\n fetch?: typeof fetch\n headers?: Record<string, string>\n /** Default `same-origin`. */\n credentials?: RequestCredentials\n /** Shapes the JSON body; the default sends the request as is. */\n buildBody?: (request: PaymentSubmitRequest) => unknown\n /** Same-origin URL that re-reads the state (enables `refresh`). */\n refreshUrl?: string\n}\n\nasync function parse(res: Response): Promise<unknown> {\n const text = await res.text()\n if (!text) return null\n try {\n return JSON.parse(text)\n } catch {\n return null\n }\n}\n\n/**\n * Transport to a same-origin shop route (`POST url` with JSON). Maps `{ error: { code, message, details } }`\n * answers to `PaymentHttpError`. Network failures surface as the original `TypeError`, which the\n * hook treats as retryable with the same attempt.\n */\nexport function createFetchTransport(url: string, options: FetchTransportOptions = {}): PaymentTransport {\n const doFetch = (u: string, init: RequestInit) => (options.fetch ?? globalThis.fetch.bind(globalThis))(u, init)\n async function call(u: string, init: RequestInit): Promise<PaymentAttemptResult> {\n const res = await doFetch(u, { credentials: options.credentials ?? 'same-origin', ...init })\n const body = (await parse(res)) as { error?: { code?: string; message?: string; details?: unknown } } | PaymentAttemptResult | null\n if (!res.ok) {\n const e = (body as { error?: { code?: string; message?: string; details?: unknown } } | null)?.error\n throw new PaymentHttpError(res.status, e?.code ?? 'server_error', e?.message, e?.details)\n }\n const result = body as PaymentAttemptResult | null\n if (!result || typeof result !== 'object' || !result.payment || typeof result.payment.status !== 'string') {\n throw new PaymentHttpError(502, 'invalid_response', 'Unexpected payment response')\n }\n return result\n }\n return {\n submit: (request, { signal }) =>\n call(url, {\n method: 'POST',\n signal,\n headers: { 'Content-Type': 'application/json', Accept: 'application/json', 'Idempotency-Key': request.idempotencyKey, ...options.headers },\n body: JSON.stringify(options.buildBody ? options.buildBody(request) : request),\n }),\n ...(options.refreshUrl\n ? {\n refresh: ({ signal }: { signal: AbortSignal }) =>\n call(options.refreshUrl!, { method: 'POST', signal, headers: { Accept: 'application/json', ...options.headers } }),\n }\n : {}),\n }\n}\n","import type { PaymentClient } from '@asteby/storefront'\n\nexport type PaymentCspOptions = {\n /** Per-request nonce; also set it on the inserted `<script>` and on `<Scripts nonce>`. */\n nonce?: string\n /** Extra origins by directive (e.g. your image CDN). */\n extra?: { script?: string[]; frame?: string[]; connect?: string[]; img?: string[]; form?: string[] }\n /** `report-uri` / `report-to` target for the report-only rollout. */\n reportUri?: string\n /** Inline scripts allowed by hash (`'sha256-…'`), e.g. a theme bootstrap that runs before paint. */\n scriptHashes?: string[]\n /** Allow any https image source (product photos from a CDN). */\n imgHttps?: boolean\n}\n\n/** One origin source: `https://host`, `https://*.host`, optional port. Anything else (`;`, spaces, `'unsafe-eval'`) is dropped. */\nconst ORIGIN = /^https:\\/\\/(\\*\\.)?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*(:\\d{1,5})?$/i\n\nfunction origins(...lists: (readonly string[] | undefined)[]): string[] {\n const out = new Set<string>()\n for (const list of lists) for (const o of list ?? []) if (ORIGIN.test(o)) out.add(o)\n return [...out]\n}\n\n/**\n * Builds the Content-Security-Policy for the payment routes from what each provider declares\n * (`PaymentClient.csp`), so the shop never hard-codes provider hosts. Meant for `/pagar` only,\n * never for the whole site. Roll out as `Content-Security-Policy-Report-Only` first.\n *\n * No SRI on purpose: provider SDK URLs are unversioned and a hash would break payments on any update.\n */\nexport function paymentCsp(clients: readonly (PaymentClient | null | undefined)[], options: PaymentCspOptions = {}): string {\n const list = clients.filter((c): c is PaymentClient => !!c)\n const pick = (k: keyof NonNullable<PaymentClient['csp']>) => list.map((c) => c.csp?.[k])\n const nonce = options.nonce && /^[A-Za-z0-9+/=_-]+$/.test(options.nonce) ? options.nonce : undefined\n const sdkOrigins = list.flatMap((c) => {\n try {\n const u = new URL(c.sdk_url)\n return u.protocol === 'https:' ? [u.origin] : []\n } catch {\n return []\n }\n })\n const dir = (name: string, values: string[]) => `${name} ${values.join(' ')}`\n const parts = [\n \"default-src 'self'\",\n dir('script-src', [\"'self'\", ...(options.scriptHashes ?? []).filter((h) => /^'sha(256|384|512)-[A-Za-z0-9+/=]+'$/.test(h)), ...(nonce ? [`'nonce-${nonce}'`] : []), ...origins(sdkOrigins, ...pick('script'), options.extra?.script)]),\n dir('frame-src', origins(...pick('frame'), options.extra?.frame).length ? origins(...pick('frame'), options.extra?.frame) : [\"'none'\"]),\n dir('connect-src', [\"'self'\", ...origins(...pick('connect'), options.extra?.connect)]),\n dir('img-src', [\"'self'\", 'data:', ...(options.imgHttps ? ['https:'] : []), ...origins(...pick('img'), options.extra?.img)]),\n \"style-src 'self' 'unsafe-inline'\",\n dir('form-action', [\"'self'\", ...origins(...pick('form'), options.extra?.form)]),\n \"frame-ancestors 'none'\",\n \"base-uri 'self'\",\n \"object-src 'none'\",\n ]\n if (options.reportUri && /^(https:\\/\\/|\\/)[^\\s;,]+$/.test(options.reportUri)) parts.push(`report-uri ${options.reportUri}`)\n return parts.join('; ')\n}\n\n/** `Content-Security-Policy` or, during the rollout week, `Content-Security-Policy-Report-Only`. */\nexport function paymentCspHeaderName(reportOnly: boolean): string {\n return reportOnly ? 'Content-Security-Policy-Report-Only' : 'Content-Security-Policy'\n}\n\nexport type PaymentCspMode = 'off' | 'report-only' | 'enforce'\n\n/** `PAYMENT_CSP`-style value: `off`, `report-only` or `enforce`. Unset: report-only in production, off elsewhere (dev servers inject scripts). */\nexport function paymentCspMode(value: string | null | undefined, production: boolean): PaymentCspMode {\n const raw = (value ?? '').trim().toLowerCase()\n if (raw === 'off' || raw === 'report-only' || raw === 'enforce') return raw\n return production ? 'report-only' : 'off'\n}\n\n/** Fresh per-request nonce (128 bits, base64). Works in Node, edge and browsers. */\nexport function paymentNonce(): string {\n const bytes = new Uint8Array(16)\n crypto.getRandomValues(bytes)\n let bin = ''\n for (const b of bytes) bin += String.fromCharCode(b)\n return btoa(bin)\n}\n\n/** Header ready for the response (`{}` when `off`): policy from the providers' `client.csp`, never the whole site. */\nexport function paymentCspHeaders(\n clients: readonly (PaymentClient | null | undefined)[],\n options: PaymentCspOptions & { mode: PaymentCspMode },\n): Record<string, string> {\n if (options.mode === 'off') return {}\n return { [paymentCspHeaderName(options.mode === 'report-only')]: paymentCsp(clients, options) }\n}\n\n/** The nonce the route left in the CSP header, to hand to `ServerRouter` / `<Scripts>`. */\nexport function paymentNonceFromHeaders(headers: Headers): string | undefined {\n const csp = headers.get('Content-Security-Policy') ?? headers.get('Content-Security-Policy-Report-Only') ?? ''\n return /'nonce-([A-Za-z0-9+/=_-]+)'/.exec(csp)?.[1]\n}\n","import type { PaymentOptionKey } from '@asteby/storefront'\n\n/** Texts of the \"Payment method\" section. Override any of them with the `messages` prop. */\nexport type PaymentMethodMessages = {\n legend: string\n /** Button label before the total: \"Pagar $1,200.00\". */\n pay: string\n /** Button label for card and cash, before the total. */\n placeOrder: string\n /** Button label when the buyer leaves for the provider's page. */\n payRedirect: string\n /** Button label for the first step (address) of a two-step checkout. */\n continue: string\n /** Button label when the address must be saved again. */\n retryAddress: string\n processing: string\n redirectNote: string\n cashPoints: string\n cashMore: string\n cashNote: string\n secureCard: string\n pickDeliveryFirst: string\n updatingTotal: string\n syncFailed: string\n /** The shipping quote expired or changed: fresh rates are loading. */\n quoteChanged: string\n rebuildCart: string\n noPaymentTitle: string\n noPayment: string\n paymentNote: string\n /** Fallback names for the provider options when the server sends no `label`. */\n options: Record<PaymentOptionKey, string>\n}\n\nconst ES: PaymentMethodMessages = {\n legend: 'Método de pago',\n pay: 'Pagar',\n placeOrder: 'Realizar el pedido',\n payRedirect: 'Continuar al pago',\n continue: 'Continuar',\n retryAddress: 'Guardar dirección y continuar',\n processing: 'Procesando…',\n redirectNote: 'Te llevamos a la página del proveedor para terminar el pago y regresas aquí.',\n cashPoints: 'Elige dónde pagar en efectivo',\n cashMore: 'Ver más puntos de pago',\n cashNote: 'Al hacer el pedido te damos una ficha con la referencia y la fecha límite. El pedido se confirma cuando pagas.',\n secureCard: 'Tus datos de tarjeta los captura directamente nuestro proveedor de pagos; la tienda nunca los ve.',\n pickDeliveryFirst: 'Elige primero la entrega para ver el total y pagar con tarjeta.',\n updatingTotal: 'Actualizando el total…',\n syncFailed: 'No pudimos actualizar el total con tu entrega. Puedes continuar al sitio del proveedor para pagar con tarjeta.',\n quoteChanged: 'Las tarifas de envío se actualizaron. Revisa tu envío para ver el total.',\n rebuildCart: 'Volver a armar mi carrito',\n noPaymentTitle: 'Por ahora no hay formas de pago disponibles',\n noPayment: 'Intenta de nuevo en unos minutos o escríbenos para completar tu pedido.',\n paymentNote: 'El pago se procesa de forma segura con nuestro proveedor de pagos.',\n options: {\n card: 'Tarjeta de crédito o débito',\n cash: 'Efectivo',\n wallet: 'Cuenta del proveedor de pagos',\n credits: 'Pagos sin tarjeta',\n },\n}\n\nconst EN: PaymentMethodMessages = {\n legend: 'Payment method',\n pay: 'Pay',\n placeOrder: 'Place order',\n payRedirect: 'Continue to payment',\n continue: 'Continue',\n retryAddress: 'Save address and continue',\n processing: 'Processing…',\n redirectNote: \"We'll take you to the provider's page to finish paying, then bring you back here.\",\n cashPoints: 'Choose where to pay in cash',\n cashMore: 'Show more payment points',\n cashNote: 'When you place the order you get a slip with the reference and the deadline. The order is confirmed once you pay.',\n secureCard: 'Your card details are captured directly by our payment provider; the shop never sees them.',\n pickDeliveryFirst: 'Choose delivery first to see the total and pay by card.',\n updatingTotal: 'Updating the total…',\n syncFailed: \"We couldn't update the total with your delivery. You can continue to the provider's site to pay by card.\",\n quoteChanged: 'Shipping rates were updated. Check your delivery to see the total.',\n rebuildCart: 'Rebuild my cart',\n noPaymentTitle: 'No payment methods are available right now',\n noPayment: 'Try again in a few minutes or contact us to complete your order.',\n paymentNote: 'Payment is processed securely by our payment provider.',\n options: {\n card: 'Credit or debit card',\n cash: 'Cash',\n wallet: 'Payment provider account',\n credits: 'Pay without a card',\n },\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides. */\nexport function paymentMethodMessages(locale?: string | null, overrides?: Partial<Omit<PaymentMethodMessages, 'options'>> & { options?: Partial<PaymentMethodMessages['options']> } | null): PaymentMethodMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n if (!overrides) return base\n const { options, ...rest } = overrides\n return { ...base, ...rest, options: { ...base.options, ...options } }\n}\n","// GENERADO por scripts/build-logos.mjs desde brands/manifest.json y brands/assets/. No editar a mano.\n// Procedencia y licencias de cada logo: brands/LOGOS.md.\nexport type LogoAsset = { src: string; ar: number; mono: boolean }\n\nexport const LOGOS: Record<string, LogoAsset> = {\n \"7eleven\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xmlns:xlink=%22http://www.w3.org/1999/xlink%22 xml:space=%22preserve%22 viewBox=%220 0 45 59.89%22%3E%3Cdefs%3E%3Cpath id=%22a%22 d=%22M0 0h45v59.9H0z%22/%3E%3C/defs%3E%3CclipPath id=%22b%22%3E%3Cuse xlink:href=%22%23a%22 style=%22overflow:visible%22/%3E%3C/clipPath%3E%3Cpath d=%22M34.2 45c.9 0 1.7.8 1.7 1.7s-.7 1.7-1.7 1.7c-.9 0-1.6-.8-1.6-1.7s.7-1.7 1.6-1.7m0 3c.7 0 1.3-.6 1.3-1.3 0-.8-.6-1.3-1.3-1.3s-1.3.6-1.3 1.3c0 .8.6 1.3 1.3 1.3m-.2-.4h-.3v-1.8h.6q.6 0 .6.6c0 .3-.2.5-.4.5l.4.7h-.4l-.4-.7H34zm.2-1q.3 0 .3-.3t-.3-.3H34v.5h.2zm8-14.3c-.9 0-1.5.4-2.1.9l-.4.6-.1-.1.5-.8v-.5h-3.2V43h2.9v-6.7c0-1.1.7-1.4 1.2-1.5s1.1.2 1.1.8V43H45v-7.3c0-2.3-1-3.4-2.8-3.4M9.9 40.6h3v2.3H7V32.3h2.9zM0 42.9h5.9v-2.1h-3v-2.3h3v-2h-3v-2h3v-2.2H0zm13.9 0h6v-2.1h-3.1v-2.3h3.1v-2h-3.1v-2h3.1v-2.2h-6zm16 0h6v-2.1h-3.1v-2.3h3.1v-2h-3.1v-2h3.1v-2.2h-6zm-3.8-10.6L25 39l-.1 1.2v.1h-.1v-.1l-.1-1.2-1.1-6.7h-2.9l2.4 10.6h3.6l2.4-10.6z%22 style=%22clip-path:url(%23b);fill:%23147350%22/%3E%3Cpath d=%22M37.7 0H0v15h19.9C24.4 8.5 30.5 3.3 37.7 0%22 style=%22clip-path:url(%23b);fill:%23ff6c00%22/%3E%3Cpath d=%22M15 59.9h15v-15H15zM45 15V0a40.7 40.7 0 0 0-28.9 30h15.3A25.8 25.8 0 0 1 45 15%22 style=%22clip-path:url(%23b);fill:%23eb0f2a%22/%3E%3C/svg%3E\", ar: 0.751, mono: false },\n \"99minutos\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220.1 0 160.9 40.9%22%3E%3Cg fill=%22none%22 fill-rule=%22evenodd%22%3E%3Cpath fill=%22%23323634%22 d=%22M50.25 23.07v6.07h-3.12v-6.15q0-1.34-.4-1.97t-1.31-.62-1.6.68-.69 2v6.06h-3.1V17.89h3.1v1.27a3.8 3.8 0 0 1 2.94-1.46q1.05 0 1.91.63.86.62 1.3 1.52.64-1.02 1.73-1.59a5 5 0 0 1 2.18-.56q1.95 0 3.17 1.18 1.2 1.18 1.2 3.42v6.84h-3.13v-6.15q0-2.6-1.88-2.6-.93 0-1.62.69-.68.68-.68 2m9.32-6.62q-.53-.53-.53-1.3t.53-1.31 1.3-.53 1.29.53.53 1.3-.53 1.31-1.3.54-1.29-.54M86 17.9h-2.8v6.06q0 1.3-.68 1.98t-1.61.68q-1.89 0-1.88-2.6V17.9H75.9v6.82q0 2.28 1.24 3.44a4.3 4.3 0 0 0 3.08 1.16q1.83 0 2.99-1.66v1.49h3.12v-9h1.73v5.2q0 1.83 1.1 2.9a3.8 3.8 0 0 0 2.72 1.07q1.6 0 3.05-1.34l-1.16-2.2q-.6.8-1.47.8-.45 0-.79-.37a1.5 1.5 0 0 1-.33-1.01v-5.04h2.7V17.9h-2.7v-3.37h-3.12v3.37zm-26.69 0h3.1v11.25h-3.1zm7.9 4.97v6.28h-3.1V17.89h3.1v1.25q1.42-1.44 3.17-1.44a4 4 0 0 1 2.95 1.25q1.2 1.26 1.2 3.35v6.84h-3.11v-6.36q0-2.6-1.88-2.6-.94 0-1.63.69-.7.68-.7 2m39.05.65q0 2.44-1.68 4.12a5.7 5.7 0 0 1-4.2 1.68 5.7 5.7 0 0 1-5.9-5.8q0-2.44 1.68-4.13a5.7 5.7 0 0 1 4.21-1.68q2.55 0 4.21 1.68a5.6 5.6 0 0 1 1.68 4.13m-8.65 0q0 1.38.78 2.25.77.87 1.98.87t1.99-.87.78-2.25-.78-2.26a2.5 2.5 0 0 0-1.99-.87q-1.2 0-1.98.87a3.3 3.3 0 0 0-.78 2.26m17.62 2.13q0 1.66-1.2 2.66-1.22 1-3.08 1a8 8 0 0 1-5-1.77l1.36-1.97q1.75 1.36 3.7 1.36.6 0 .95-.24a.7.7 0 0 0 .36-.64q0-.39-.5-.73-.47-.33-1.4-.63t-1.4-.5q-.5-.21-1.11-.6a2.6 2.6 0 0 1-1.27-2.36 3.1 3.1 0 0 1 1.25-2.54q1.24-.98 3.2-.98t3.94 1.34l-1.16 2.09q-1.45-1-2.89-1t-1.44.79q0 .44.46.69.45.25 1.5.59 1.07.33 1.5.5.45.19 1.07.56 1.16.72 1.16 2.38%22/%3E%3Cpath fill=%22%2385C440%22 d=%22M116.65 28.77q-.52-.53-.52-1.3 0-.78.52-1.31.54-.54 1.3-.53.76 0 1.3.53.52.53.52 1.3 0 .78-.53 1.31-.52.54-1.3.54-.75 0-1.29-.54m9.35-2.25q1.55 0 2.79-1.56l1.84 2.09q-2.15 2.25-4.65 2.26a6 6 0 0 1-4.24-1.6 5.4 5.4 0 0 1-1.72-4.19q0-2.58 1.74-4.2a6 6 0 0 1 4.15-1.62 6.4 6.4 0 0 1 4.6 1.99l-1.62 2.13q-.54-.65-1.31-1a4 4 0 0 0-1.54-.36 2.9 2.9 0 0 0-2.98 3.04 2.85 2.85 0 0 0 2.94 3.02m16.4-3.01q0 2.44-1.67 4.12a5.7 5.7 0 0 1-4.21 1.68 5.7 5.7 0 0 1-5.89-5.8q0-2.44 1.68-4.13a5.7 5.7 0 0 1 4.2-1.68 5.7 5.7 0 0 1 5.9 5.81m-8.64 0q0 1.38.77 2.25.78.87 1.99.87 1.2 0 1.99-.87.77-.87.77-2.25t-.77-2.26a2.5 2.5 0 0 0-2-.87q-1.2 0-1.98.87a3.3 3.3 0 0 0-.77 2.26m19.84-.44v6.07h-3.12v-6.15q0-1.34-.4-1.97-.42-.62-1.31-.62t-1.6.68q-.69.68-.69 2v6.06h-3.1V17.89h3.1v1.27a3.8 3.8 0 0 1 2.94-1.46q1.05 0 1.92.63.85.62 1.29 1.52.64-1.02 1.73-1.59a5 5 0 0 1 2.18-.56q1.97 0 3.17 1.18t1.2 3.42v6.84h-3.13v-6.15q0-2.6-1.88-2.6-.93 0-1.62.69-.68.68-.68 2%22/%3E%3Cpath fill=%22%23323634%22 d=%22M18.08 17.16a4.5 4.5 0 0 0-1.59-1.84 5.6 5.6 0 0 0-2.58-.87 5.2 5.2 0 0 0-3.8.95 4.6 4.6 0 0 0-1.82 3.39q-.23 2.2.98 3.69 1.2 1.49 3.22 1.7 1.53.16 2.94-.6a4.6 4.6 0 0 1-1.16 2.38q-.82.83-2.16.68a3 3 0 0 1-1.15-.41L9.1 28.38q.4.27 1.07.57.9.4 1.9.5a5.5 5.5 0 0 0 5.84-3.55q.64-1.46.85-3.45.33-3.1-.67-5.29m-3.32 3.9q-.7.5-1.66.39a1.9 1.9 0 0 1-1.42-.8q-.47-.7-.38-1.6.1-.92.75-1.45t1.57-.43 1.48.83.45 1.65a2 2 0 0 1-.8 1.4m14.44-3.89a4.5 4.5 0 0 0-1.6-1.84 5.6 5.6 0 0 0-2.58-.87 5.2 5.2 0 0 0-3.79.95 4.6 4.6 0 0 0-1.82 3.39q-.23 2.2.98 3.69 1.2 1.49 3.22 1.7 1.53.16 2.93-.6a4.6 4.6 0 0 1-1.15 2.38q-.82.83-2.16.68a3 3 0 0 1-1.15-.41l-1.88 2.15q.42.27 1.08.57.9.4 1.9.5a5.5 5.5 0 0 0 5.84-3.55q.63-1.46.85-3.45.32-3.1-.68-5.29m-3.33 3.9q-.69.5-1.65.39a1.9 1.9 0 0 1-1.43-.8q-.46-.7-.37-1.6.1-.92.74-1.45.66-.53 1.58-.43t1.47.83.46 1.65a2 2 0 0 1-.8 1.4%22/%3E%3Cpath fill=%22%2385C440%22 d=%22m37.49 12.42 3.06-3.1s-2.03-5.1-9.19-9.26L28.3 3.14l3.58 3.6-.78.8a18.6 18.6 0 0 0-12.2-4.58A18.86 18.86 0 0 0 .14 21.93c0 10.47 8.4 18.96 18.76 18.96a18.86 18.86 0 0 0 18.77-18.96A19 19 0 0 0 33.15 9.6l.77-.79zm-3.85 9.23c0 8.24-6.6 14.92-14.76 14.92A14.84 14.84 0 0 1 4.12 21.65c0-8.24 6.61-14.92 14.76-14.92 8.16 0 14.76 6.68 14.76 14.92%22/%3E%3C/g%3E%3C/svg%3E\", ar: 3.934, mono: false },\n \"amex\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 1000 996.89%22%3E%3Cpath d=%22M55.5 1002.35h997.52v538.48l-49.38 77.15 49.38 68.66v313.22H55.5v-507.63l30.86-35.49-30.86-33.94Z%22 style=%22fill:%23016fd0;fill-opacity:1;stroke:none%22 transform=%22translate(-55.5 -1002.35)%22/%3E%3Cpath d=%22M249.14 1697.44v-156.6h165.82l17.8 23.19 18.37-23.2h601.89v145.81s-15.74 10.65-33.95 10.8H685.8l-20.05-24.68v24.68H600v-42.14s-8.98 5.88-28.4 5.88h-22.37v36.26h-99.52l-17.76-23.69-18.04 23.7zM55.5 1422.8l37.4-87.18h64.66l21.22 48.84v-48.84h80.39l12.63 35.3 12.25-35.3H644.9v17.75s18.97-17.75 50.14-17.75l117.09.41 20.85 48.2v-48.6h67.27l18.52 27.68v-27.69h67.89v156.61h-67.89l-17.74-27.77v27.77H802.2l-9.94-24.69h-26.57l-9.78 24.7h-67.03c-26.83 0-43.97-17.39-43.97-17.39v17.38H543.84l-20.05-24.69v24.7h-375.8l-9.94-24.7h-26.49l-9.86 24.7H55.5z%22 style=%22fill:%23fff;stroke:none%22 transform=%22translate(-55.5 -1002.35)%22/%3E%3Cpath d=%22m106.13 1354.93-50.44 117.26h32.84l9.3-23.48h54.1l9.26 23.48h33.56l-50.39-117.26zm18.66 27.29 16.49 41.03h-33.03zm73.43 89.95v-117.26l46.66.17 27.14 75.6 26.5-75.77h46.28v117.26h-29.3v-86.4l-31.08 86.4h-25.7l-31.17-86.4v86.4zm166.64 0v-117.26h95.66v26.23H394.5v20.06H459v24.68h-64.5v20.83h66.03v25.46zm112.64-117.24v117.26h29.31v-41.66h12.35l35.15 41.66h35.82l-38.57-43.2a35.7 35.7 0 0 0 32.16-36.02c0-24.67-19.37-38.04-40.99-38.04zm29.31 26.23h33.51c8.04 0 13.89 6.29 13.89 12.34 0 7.8-7.58 12.35-13.45 12.35H506.8zm118.81 91.01h-29.93v-117.26h29.93zm70.98 0h-6.47c-31.26 0-50.24-24.63-50.24-58.15 0-34.35 18.77-59.11 58.25-59.11h32.4v27.77h-33.59c-16.02 0-27.36 12.5-27.36 31.63 0 22.71 12.96 32.25 31.63 32.25h7.72zm63.79-117.24-50.44 117.26h32.84l9.3-23.48h54.1l9.26 23.48h33.56l-50.39-117.26zm18.66 27.29 16.49 41.03H762.5zm73.38 89.95v-117.26h37.28l47.59 73.68v-73.68h29.31v117.26h-36.06l-48.8-75.6v75.6zM269.2 1677.39v-117.27h95.66v26.23h-66.04v20.06h64.5v24.69h-64.5v20.83h66.04v25.46zm468.75 0v-117.27h95.66v26.23h-66.04v20.06h64.19v24.69h-64.19v20.83h66.04v25.46zm-369.38 0 46.58-57.91-47.68-59.36h36.93l28.4 36.7 28.5-36.7h35.48l-47.06 58.63 46.67 58.64h-36.93l-27.58-36.12-26.9 36.12zm131.3-117.25v117.27h30.09v-37.04h30.86c26.1 0 45.9-13.85 45.9-40.79 0-22.31-15.52-39.44-42.1-39.44zm30.09 26.52h32.5c8.43 0 14.46 5.17 14.46 13.5 0 7.83-6 13.5-14.56 13.5h-32.4zm89.49-26.54v117.27h29.31v-41.66h12.35l35.15 41.66h35.82l-38.57-43.2a35.7 35.7 0 0 0 32.16-36.03c0-24.67-19.37-38.04-40.98-38.04zm29.31 26.23h33.51c8.04 0 13.9 6.29 13.9 12.35 0 7.79-7.59 12.34-13.46 12.34h-33.95zm198.43 91.04v-25.46h58.67c8.68 0 12.44-4.7 12.44-9.84 0-4.93-3.75-9.91-12.44-9.91h-26.51c-23.05 0-35.89-14.04-35.89-35.12 0-18.8 11.76-36.94 46-36.94h57.1l-12.35 26.39h-49.37c-9.44 0-12.35 4.95-12.35 9.68 0 4.86 3.6 10.22 10.8 10.22h27.78c25.69 0 36.83 14.57 36.83 33.66 0 20.51-12.42 37.32-38.23 37.32zm107.59 0v-25.46h58.67c8.69 0 12.44-4.7 12.44-9.84 0-4.93-3.74-9.91-12.44-9.91h-26.5c-23.05 0-35.89-14.04-35.89-35.12 0-18.8 11.76-36.94 46-36.94h57.09l-12.34 26.39h-49.38c-9.44 0-12.34 4.95-12.34 9.68 0 4.86 3.59 10.22 10.8 10.22h27.77c25.7 0 36.84 14.57 36.84 33.66 0 20.51-12.42 37.32-38.24 37.32z%22 style=%22fill:%23016fd0;fill-opacity:1;stroke:none%22 transform=%22translate(-55.5 -1002.35)%22/%3E%3C/svg%3E\", ar: 1.003, mono: false },\n \"applepay\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xml:space=%22preserve%22 baseProfile=%22tiny%22 viewBox=%220 0 512 210.2%22%3E%3Cpath d=%22M93.6 27.1C87.6 34.2 78 39.8 68.4 39c-1.2-9.6 3.5-19.8 9-26.1 6-7.3 16.5-12.5 25-12.9 1 10-2.9 19.8-8.8 27.1m8.7 13.8c-13.9-.8-25.8 7.9-32.4 7.9-6.7 0-16.8-7.5-27.8-7.3-14.3.2-27.6 8.3-34.9 21.2-15 25.8-3.9 64 10.6 85 7.1 10.4 15.6 21.8 26.8 21.4 10.6-.4 14.8-6.9 27.6-6.9 12.9 0 16.6 6.9 27.8 6.7 11.6-.2 18.9-10.4 26-20.8 8.1-11.8 11.4-23.3 11.6-23.9-.2-.2-22.4-8.7-22.6-34.3-.2-21.4 17.5-31.6 18.3-32.2-10-14.8-25.6-16.4-31-16.8m80.3-29v155.9h24.2v-53.3h33.5c30.6 0 52.1-21 52.1-51.4s-21.1-51.2-51.3-51.2zm24.2 20.4h27.9c21 0 33 11.2 33 30.9s-12 31-33.1 31h-27.8zM336.6 169c15.2 0 29.3-7.7 35.7-19.9h.5v18.7h22.4V90.2c0-22.5-18-37-45.7-37-25.7 0-44.7 14.7-45.4 34.9h21.8c1.8-9.6 10.7-15.9 22.9-15.9 14.8 0 23.1 6.9 23.1 19.6v8.6l-30.2 1.8c-28.1 1.7-43.3 13.2-43.3 33.2 0 20.2 15.7 33.6 38.2 33.6m6.5-18.5c-12.9 0-21.1-6.2-21.1-15.7 0-9.8 7.9-15.5 23-16.4l26.9-1.7v8.8c0 14.6-12.4 25-28.8 25m82 59.7c23.6 0 34.7-9 44.4-36.3L512 54.7h-24.6l-28.5 92.1h-.5l-28.5-92.1h-25.3l41 113.5-2.2 6.9c-3.7 11.7-9.7 16.2-20.4 16.2-1.9 0-5.6-.2-7.1-.4v18.7c1.4.4 7.4.6 9.2.6%22/%3E%3C/svg%3E\", ar: 2.436, mono: true },\n \"banorte\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xml:space=%22preserve%22 id=%22layer%22 x=%220%22 y=%220%22 version=%221.1%22 viewBox=%220 0 1920 235.2%22%3E%3Cstyle id=%22style2%22 type=%22text/css%22%3E.st0%7Bfill:%23ec1c2d%7D%3C/style%3E%3Cg id=%22g24%22 transform=%22matrix(3.2 0 0 3.2 -65.6 -911.04)%22%3E%3Cpath id=%22path4%22 d=%22M206.2 325.5h.7c3.9 0 7-3.1 7-7v-6.1c0-3.6-.4-5.3-1.8-7.2-2-2.5-5.5-3.6-8.9-3.6h-42.4v49.3h38.7c4.4 0 9.6-.6 12.3-3.5 2.5-2.7 2.6-4.8 2.6-11.4v-2.2a8.2 8.2 0 0 0-8.2-8.3m-33.1-14.9h25.6c1.3 0 4 .5 4 2.6v5.4c0 1.7-2.5 2.4-3.5 2.4h-26.1zm29.8 27.8c0 1.5-1.2 2.7-2.7 2.7h-27.1v-11H200c1.6 0 2.9 1.3 2.9 2.9z%22 class=%22st0%22/%3E%3Cpath id=%22path6%22 d=%22M274.3 351h14L260 301.7h-11.5L220.7 351h12.5l5.8-10.7h29.6zm-30.1-20.3 9.7-17.8 9.5 17.8z%22 class=%22st0%22/%3E%3Cpath id=%22polygon8%22 d=%22M304.1 301.7h-8.4V351h11.2v-24.8l-.3-7.6 38.3 32.4h8.6v-49.3h-11.2v24.8l.3 7.6z%22 class=%22st0%22/%3E%3Cpath id=%22path10%22 d=%22M416.6 351h-38.1c-3.4 0-7.1-.8-9.1-3.2-1.7-1.9-2-5.2-2-7.9v-27.1c0-3.1.4-6.4 2.4-8.4s5.6-2.7 8.7-2.7h38.1c3.4 0 7.1.7 9.1 3.1 1.6 1.9 2 5.3 2 8v27.1c0 2.8-.3 6-2 7.9-2 2.4-5.7 3.2-9.1 3.2m-37-39.4v29.5h35.9v-29.5z%22 class=%22st0%22/%3E%3Cpath id=%22path12%22 d=%22M483.9 351h17.3l-22.1-18.2h6.8c5.2 0 9.5-4.2 9.5-9.5v-12.2c0-5.2-4.2-9.5-9.5-9.5H442V351h12.2v-18.2h9.7zm-29.7-39.9H481c1.3 0 2.3 1 2.3 2.3v7.7c0 1.3-1 2.3-2.3 2.3h-26.8z%22 class=%22st0%22/%3E%3Cpath id=%22polygon14%22 d=%22M504.4 301.7v9.8h22.1V351h12.2v-39.5h22v-9.8h-34.2z%22 class=%22st0%22/%3E%3Cpath id=%22polygon16%22 d=%22M605.9 320.5h-23.1v-9.3H620v-9.5h-49.4V351h49.9v-10h-37.7v-11h23.1z%22 class=%22st0%22/%3E%3Cpath id=%22path18%22 d=%22M84.5 284.7c-28.5 0-51.6 7.5-51.6 16.8 0 7.8 16.1 14.3 38 16.2l9-27.7 1.6 28.2h3.1c28.5 0 51.6-7.5 51.6-16.8-.1-9.1-23.2-16.7-51.7-16.7%22 class=%22st0%22/%3E%3Cpath id=%22path20%22 d=%22M70.6 318.7c-27.8.3-50.1 9.1-50.1 20 0 9.2 15.8 16.9 37.4 19.3z%22 class=%22st0%22/%3E%3Cpath id=%22path22%22 d=%22m81.4 319 2.2 39.2c22.9-2 39.9-10 39.9-19.5.1-9.8-18.1-18-42.1-19.7%22 class=%22st0%22/%3E%3C/g%3E%3C/svg%3E\", ar: 8.163, mono: false },\n \"bbva\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xml:space=%22preserve%22 id=%22Capa_1%22 x=%220%22 y=%220%22 version=%221.1%22 viewBox=%220 0 600 179.8%22%3E%3Cstyle id=%22style1%22 type=%22text/css%22%3E.st0%7Bfill:%23004481%7D%3C/style%3E%3Cg id=%22g4%22%3E%3Cpath id=%22path1%22 d=%22m432.2 24.4-51.6 98.2c-1.1 2.1-4.3 2.1-5.4 0l-51.6-98.2c-.5-1-1.5-1.6-2.6-1.6h-25c-1.7 0-2.8 1.8-2 3.3l81.3 152.2c1.1 2.1 4.1 2.1 5.3 0l81.3-152.2c.8-1.5-.3-3.3-2-3.3h-25c-1.2 0-2.2.6-2.7 1.6%22 class=%22st0%22 style=%22fill:%23001391;fill-opacity:1%22/%3E%3Cpath id=%22path2%22 d=%22m461.5 155.5 51.6-98.2c1.1-2.1 4.3-2.1 5.4 0l51.6 98.2c.5 1 1.5 1.6 2.6 1.6h25c1.7 0 2.8-1.8 2-3.3L518.4 1.6c-1.1-2.1-4.1-2.1-5.3 0l-81.3 152.2c-.8 1.5.3 3.3 2 3.3h25c1.1-.1 2.2-.7 2.7-1.6%22 class=%22st0%22 style=%22fill:%23001391;fill-opacity:1%22/%3E%3Cpath id=%22path3%22 d=%22M108.8 95.2c10.8-5.4 17.5-17.1 17.5-31.4 0-24.5-19.1-41.1-46-41.1H3c-1.7 0-3 1.3-3 3v151.1c0 1.7 1.3 3 3 3h74c37 0 56.5-15.9 56.5-47.1 0-30.4-24.7-37.5-24.7-37.5M29 45.5h45.9c16.9 0 25.5 7.2 25.5 20.6s-8.6 20.6-25.5 20.6H29a3 3 0 0 1-3-3V48.5c0-1.7 1.3-3 3-3M75.5 157H29c-1.7 0-3-1.3-3-3v-41.7a3 3 0 0 1 3-3h46.5c22.2 0 32.1 6.3 32.1 23.8-.1 17.7-9.7 23.9-32.1 23.9%22 class=%22st0%22 style=%22fill:%23001391;fill-opacity:1%22/%3E%3Cpath id=%22path4%22 d=%22M267.5 95.2c10.8-5.4 17.5-17.1 17.5-31.4 0-24.5-19.1-41.1-46-41.1h-77.4c-1.7 0-3 1.3-3 3v151.1c0 1.7 1.3 3 3 3h74c37 0 56.5-15.9 56.5-47.1.1-30.4-24.6-37.5-24.6-37.5m-79.8-49.7h45.9c16.9 0 25.5 7.2 25.5 20.6s-8.6 20.6-25.5 20.6h-45.9c-1.7 0-3-1.3-3-3V48.5c0-1.7 1.3-3 3-3M234.1 157h-46.5a3 3 0 0 1-3-3v-41.7a3 3 0 0 1 3-3h46.5c22.2 0 32.1 6.3 32.1 23.8 0 17.7-9.7 23.9-32.1 23.9%22 class=%22st0%22 style=%22fill:%23001391;fill-opacity:1%22/%3E%3C/g%3E%3C/svg%3E\", ar: 3.337, mono: false },\n \"chedraui\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 1920 148.64%22%3E%3Cpath d=%22m1277.47 263.16 90.62-132.68h45.73l88.95 132.68h20.56l-104.05-147.8h-55.8l-103.21 147.8zm273.26-46.91c0 25.19 19.3 47.02 44.89 47.02h135.51c23.91 0 46.15-16.8 46.15-41.57V115.47h-19.3v105.4c0 13.85-10.07 26.03-24.33 26.03h-138.03c-14.69 0-26.01-12.6-26.01-27.3V115.47h-18.88zm-314.75.94c0-12.6-3.78-16.38-6.72-17.64l-2.94-1.26 3.78-2.51c6.71-4.63 5.88-15.96 5.88-17.22v-23.94c0-21.41-17.63-39.04-39.02-39.04h-184.18v147.37l18.88-.42V131.11h160.68c13.43 0 25.17 10.5 25.17 24.35v23.94c0 6.72-3.35 15.12-7.13 17.21l-2.93 1.68 2.51 2.1c3.78 3.36 6.72 7.14 6.72 16.8v45.34h19.3z%22 style=%22fill:%23154281;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.192484%22 transform=%22translate(54.1 -115.15)%22/%3E%3Cpath d=%22m3013.05 1.34 1.6 557.02h662.8c84.04 0 166.5-57.15 166.5-146V147.31c0-90.44-84.04-145.98-169.67-145.98zm66.53 59.28h594.61c50.74 0 101.49 33.3 101.49 87.27v255.5c0 55.54-47.57 96.8-101.49 96.8h-594.61z%22 style=%22fill:%23154281;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.727499%22 transform=%22scale(.26458)%22/%3E%3Cpath d=%22M693.45 263.14v-15.96H492.9V131.29h200.55v-15.53H476.13v147.38zM-36.9 221.5c.42-7.56 0-66.76 0-68.02 1.26-13.44 5.46-22.67 25.6-22.67h172.85v-15.54H-10.88c-22.24 0-43.22 15.54-43.22 38.63v67.6c0 22.68 18.88 41.15 41.54 41.15h174.11V247.1H-12.56c-14.27-.42-24.34-12.17-24.34-25.6m1509.88 41.66h20.98l-28.53-40.3H1314.8l-27.69 39.88h21.82l14.26-24.35h133z%22 style=%22fill:%23154281;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.192484%22 transform=%22translate(54.1 -115.15)%22/%3E%3Cpath d=%22M502.4 184.69h191.32v-17.64H518.77v-12.18h174.95v-15.11H502.4zm-.83 9.23v44.09l192.15.42v-16.38l-174.95.42v-13.85h174.95v-14.7zm-528.82 27.16c.42 8.82 5.88 17.22 14.27 17.64h174.53v-16.38h-173.7v-67.6h173.7v-15.12H-12.56c-9.23 0-14.69 5.46-14.69 15.12zm1758.38 1.46h-136.77V115.47H1578v105.81c0 9.24 6.7 17.64 16.36 17.64h136.77c9.65 0 18.04-7.56 18.04-17.22V115.47h-18.04zm-691.74 40.27h19.3v-45.35H1190v45.77h19.73v-46.19c0-10.49-9.66-15.1-19.73-15.1h-150.6z%22 style=%22fill:%23154281;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.192484%22 transform=%22translate(54.1 -115.15)%22/%3E%3Cpath d=%22M4133.8 94.11v207.9h570.83c36.48 0 71.38-23.81 71.38-61.9v-76.17c0-38.08-30.13-69.83-68.2-69.83zm72.35 56.14h497.9l-1.57 93.65h-496.33zM3112.58 93.93v374.52h562.92c34.88 0 68.18-25.38 68.18-61.87V147.89c0-34.92-34.89-53.96-66.6-53.96zm68.64 56.55h493.14V406h-493.14z%22 style=%22fill:%23154281;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.727499%22 transform=%22scale(.26458)%22/%3E%3Cpath d=%22M237.17 185.27h165.3v-69.7l-15.95.42v50.8h-133.4V116h-15.95zm0 8.4v69.7h15.94v-55h133.41v55.42l15.95-.42v-69.7z%22 style=%22fill:%23154281;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.192484%22 transform=%22translate(54.1 -115.15)%22/%3E%3Cpath d=%22M5391.07 92.87 5200.8 370.59h520.1L5535.37 92.87zm26.25 55.1h90.4l98.3 153.95h-282.24z%22 style=%22fill:%23154281;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.727499%22 transform=%22scale(.26458)%22/%3E%3Cpath d=%22M1848.28 115.57v147.38h17.62V115.57zm-10.91 147.38v-147.8h-18.46l.42 147.8zm-1607.76.84v-147.8h-15.94v147.38zm182.51-148.22v146.96h14.68V115.57z%22 style=%22fill:%23154281;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.192484%22 transform=%22translate(54.1 -115.15)%22/%3E%3C/svg%3E\", ar: 12.917, mono: false },\n \"circlek\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xml:space=%22preserve%22 viewBox=%220.86 0.86 274.53 274.52%22%3E%3Cpath fill=%22%23ec2024%22 d=%22M1 1h274.25v274.25H1z%22/%3E%3Cpath fill=%22%23fff%22 d=%22M203.1 93.69c9.63-12.92 6.67-29.84-5.67-39.08-12.39-9.21-29.43-7.24-39.1 5.71l-32.81 44.04V76c0-16.15-12.48-27.93-27.9-27.93-15.44 0-27.91 11.78-27.91 27.93v124.27c0 16.02 12.47 27.8 27.9 27.8s27.9-11.42 27.9-27.8l.05-37.02 66.29 74.9a113 113 0 0 1-53.7 13.48c-62.7 0-113.56-50.83-113.56-113.56 0-62.7 50.86-113.53 113.56-113.53s113.56 50.84 113.56 113.53c0 23-6.85 44.38-18.6 62.26l-59.58-67.04z%22/%3E%3Cpath fill=%22none%22 stroke=%22%23004b8d%22 stroke-width=%223.8%22 d=%22M203.1 93.69c9.63-12.92 6.67-29.84-5.67-39.08-12.39-9.21-29.43-7.24-39.1 5.71l-32.81 44.04V76c0-16.15-12.48-27.93-27.9-27.93-15.44 0-27.91 11.78-27.91 27.93v124.27c0 16.02 12.47 27.8 27.9 27.8s27.9-11.42 27.9-27.8l.05-37.02 66.29 74.9a113 113 0 0 1-53.7 13.48c-62.7 0-113.56-50.83-113.56-113.56 0-62.7 50.86-113.53 113.56-113.53s113.56 50.84 113.56 113.53c0 23-6.85 44.38-18.6 62.26l-59.58-67.04z%22/%3E%3C/svg%3E\", ar: 1, mono: false },\n \"citibanamex\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220.11 0.11 43.59 6.6%22%3E%3Cpath d=%22m33.87 146.96-.03-.06-.06-.02h-.15v.16h.15l.06-.01q.03-.03.03-.07m.1 0q0 .07-.04.11l-.09.06.12.23h-.11l-.11-.22h-.11v.22h-.1v-.57h.25l.07.01.06.03.04.05zm.2.12-.04-.17a.4.4 0 0 0-.23-.23l-.17-.03a.4.4 0 0 0-.31.12.4.4 0 0 0-.13.31.4.4 0 0 0 .13.31.4.4 0 0 0 .3.13.4.4 0 0 0 .32-.13.4.4 0 0 0 .12-.3m.08 0a.5.5 0 0 1-.15.37.5.5 0 0 1-.37.15.5.5 0 0 1-.37-.15.5.5 0 0 1-.15-.37.5.5 0 0 1 .15-.37.5.5 0 0 1 .37-.15.5.5 0 0 1 .37.15q.06.07.1.17t.05.2m-35.64 4.25v-3.64h.75v3.64zm-.62-.79.05-.02-.18.7h-.01a1 1 0 0 1-.66.17c-.5 0-.83-.4-.83-.95v-2.06h-.63v-.68h.63v-.74l.73-.4v1.14h.76v.68h-.76v1.94q0 .41.35.4.25 0 .55-.18m-3.66.8v-3.65h.74v3.64zm-2.88-1.82c0 .68.48 1.17 1.13 1.17q.48 0 .89-.4l.01-.03.43.51-.02.02q-.52.61-1.29.61-.8 0-1.33-.49a1.8 1.8 0 0 1-.57-1.39q0-.87.57-1.4c.34-.31.81-.48 1.33-.48q.77 0 1.3.61v.02l-.42.5-.01-.01a1.2 1.2 0 0 0-.89-.41c-.65 0-1.13.5-1.13 1.17m35.36 1.82h-.85l-.34-.64c-.15-.26-.31-.6-.38-.73l-.4.74-.35.63h-.8l1.1-1.89-1.03-1.75h.83l.28.51c.14.26.32.59.38.73l.39-.74.27-.5h.83l-1.05 1.75zm-5.64-2.16h1.8c-.04-.5-.33-.91-.92-.91-.48 0-.82.33-.88.91m2.51.26-.02.33h-2.5c.07.7.52.99.96.99.3 0 .63-.11.87-.3l.4.47q-.48.47-1.31.48c-.85 0-1.64-.68-1.64-1.89 0-1.23.72-1.9 1.66-1.9 1.03 0 1.58.84 1.58 1.82m-3.72-.22v2.12h-.74v-2.06c0-.74-.22-1-.7-1-.47 0-.68.34-.68.93v2.13h-.74v-2.06c0-.74-.22-1-.69-1s-.72.34-.72.93v2.13h-.73v-3.64h.73v.34c.18-.26.52-.42.89-.42.5 0 .8.19 1 .54.26-.33.54-.54 1.11-.54.84 0 1.27.38 1.27 1.6m-6.4 1.08v-.52q-.29-.15-.86-.16c-.46 0-.77.21-.77.54 0 .36.25.6.72.6.38 0 .74-.23.9-.46m-.7-2.68c.8 0 1.43.4 1.43 1.22v2.5h-.73v-.36a1.5 1.5 0 0 1-1.02.43c-.6 0-1.3-.33-1.3-1.22 0-.82.66-1.18 1.48-1.18q.53 0 .84.14v-.27c0-.4-.3-.62-.74-.62q-.53 0-.95.23l-.28-.54a2.3 2.3 0 0 1 1.26-.33m-6.44 2.68v-.52q-.29-.15-.86-.16c-.46 0-.78.21-.78.54 0 .36.26.6.73.6.38 0 .74-.23.9-.46m-.7-2.68c.8 0 1.43.4 1.43 1.22v2.5h-.73v-.36a1.5 1.5 0 0 1-1.03.43c-.59 0-1.3-.33-1.3-1.22 0-.82.67-1.18 1.49-1.18q.52 0 .84.14v-.27c0-.4-.3-.62-.74-.62-.38 0-.67.07-.95.23l-.28-.54a2.3 2.3 0 0 1 1.26-.33m5.08 1.63v2.09h-.73v-2.06c0-.74-.28-1-.75-1-.48 0-.77.34-.77.93v2.13h-.7v-3.64h.74v.34c.18-.26.58-.42.95-.42.84 0 1.3.47 1.3 1.63m-8.61 1.5c.5 0 .87-.38.87-1.15 0-.92-.38-1.32-.9-1.32-.34 0-.7.23-.88.46v1.54c.16.21.55.47.9.47m.1-3.13c.78 0 1.48.57 1.48 1.96 0 1.24-.76 1.83-1.52 1.83-.36 0-.76-.2-.96-.41v.34H.55v-4.38l.74-.4v1.48c.26-.24.62-.42 1-.42%22 style=%22fill:%2312417d;fill-opacity:1;stroke-width:.26458332%22 transform=%22translate(9.43 -145.43)%22/%3E%3Cpath d=%22M-.15 147.15h-.86a3 3 0 0 0-2.14-.93c-.8 0-1.55.32-2.14.93h-.85a3.7 3.7 0 0 1 3-1.6c1.22 0 2.37.66 2.99 1.6m32.4 1.68.6.18c.28.09.36.3.36.52 0 .43-.3 1.07-.61 1.4-.18.2-.32.28-.5.28q-.15 0-.36-.07c-.21-.06-.47-.17-.62-.22.01.2.02.3.02.62 0 .53-.6.57-.93.57-.32 0-.71-.06-1.02-.2-.34-.17-.45-.33-.45-.88l.02-.54q-.29.12-.59.21c-.5.17-.73-.38-.83-.7a3 3 0 0 1-.14-.8c0-.55.18-.74.6-.87.2-.07.48-.14.64-.18l-.39-.5a.5.5 0 0 1-.1-.29c0-.3.3-.55.52-.7.25-.18.74-.44 1.17-.44.23 0 .39.1.58.35.13.17.29.4.37.54q.16-.25.36-.51a.5.5 0 0 1 .4-.2c.25 0 .51.15.69.28.24.18.52.46.68.75q.14.23.14.4 0 .23-.2.48c-.14.18-.31.4-.42.52m-.7-.12c.13 0 .37.04.6.1a1.8 1.8 0 0 0-.72-1.2.2.2 0 0 0-.14-.04.15.15 0 0 0-.14.14q0 .12.12.26c.1.14.27.34.27.52 0 .12-.07.2-.1.23zm.24 1.53c.16-.24.26-.47.26-.57s-.1-.14-.16-.14q-.12 0-.25.2c-.13.18-.33.5-.6.41l-.07-.04.08.25q.05.19.06.46c.16-.08.45-.26.68-.57m-.9-.23-.03-.2q0-.2.1-.49c.1-.33.23-.49.36-.56q-.26.02-.66-.27c-.29-.2-.4-.37-.43-.52q-.06.25-.46.54c-.3.2-.48.26-.63.24q.22.14.37.6.09.25.09.42 0 .14-.05.23.2-.16.7-.16.5.01.64.17m-.75.98q.21-.01.2-.15-.01-.16-.28-.22c-.22-.07-.59-.16-.59-.44l.01-.08-.2.15q-.17.1-.42.2c.17.18.62.54 1.28.54m-1.42-1.57c0-.23-.03-.6.24-.69l.06-.01q-.16-.09-.52-.5c-.11.24-.32.77-.11 1.38q.08.18.2.14.16-.06.13-.32m.45-1.9q-.11.07-.1.15c0 .05.03.15.16.15.19 0 .44-.16.7-.16.23 0 .3.17.3.2q0-.18.3-.66l-.28-.02c-.3 0-.7.06-1.08.34%22 style=%22fill:%23e30b13;fill-opacity:1;stroke-width:.26458332%22 transform=%22translate(9.43 -145.43)%22/%3E%3C/svg%3E\", ar: 6.605, mono: false },\n \"clip\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 fill=%22none%22 viewBox=%220 0 64 64%22%3E%3Cg fill-rule=%22evenodd%22 clip-path=%22url(%23a)%22 clip-rule=%22evenodd%22%3E%3Cpath fill=%22%23FC4C02%22 d=%22M63.97 10.8A10.82 10.82 0 0 0 48.98.85L9.57 17.6A15.7 15.7 0 0 0 0 32.01v21.17a10.82 10.82 0 0 0 15.08 9.94l39.25-16.66a15.7 15.7 0 0 0 9.64-14.45z%22/%3E%3Cpath fill=%22%23fff%22 d=%22M27.71 40.51c-.46 0-.83-.41-.83-.92V20.12c0-.5.37-.92.83-.92s.83.41.83.92V39.6c0 .5-.37.92-.83.92m7.23-.88V24.42c0-.51-.37-.93-.83-.93s-.83.42-.83.93v15.22c0 .52.37.94.83.94s.83-.42.83-.94m0-19.58V20a.8.8 0 0 0-.83-.81.8.8 0 0 0-.83.8v.06c0 .44.37.8.83.8s.83-.36.83-.8M21.93 38.46a.93.93 0 0 0 0-1.32.94.94 0 0 0-1.33 0 7 7 0 0 1-9.84 0 6.87 6.87 0 0 1 0-9.76 7 7 0 0 1 4.92-2.02c1.86 0 3.6.71 4.92 2.02.37.36.96.36 1.33 0a.93.93 0 0 0 0-1.32 8.8 8.8 0 0 0-6.25-2.57 8.8 8.8 0 0 0-6.25 2.57 8.73 8.73 0 0 0 0 12.4 8.8 8.8 0 0 0 6.25 2.56c2.27 0 4.53-.85 6.25-2.56m19.62 5.86V32.24a6.9 6.9 0 0 1 13.8 0 6.9 6.9 0 0 1-6.9 6.88c-2.2 0-3.68-.83-3.7-.84a.93.93 0 0 0-.94 1.61c.08.05 1.91 1.1 4.64 1.1a8.77 8.77 0 0 0 8.77-8.75 8.77 8.77 0 0 0-17.54 0v12.08a.93.93 0 0 0 1.87 0%22/%3E%3Cpath fill=%22%23FC4C02%22 d=%22M63.8 50.5a2.69 2.69 0 1 1-5.37 0 2.69 2.69 0 0 1 5.38 0m-.42 0c0-1.27-1.01-2.3-2.26-2.3a2.3 2.3 0 0 0-2.26 2.3 2.3 2.3 0 0 0 2.26 2.29 2.3 2.3 0 0 0 2.26-2.3m-1.13 1.47h-.48l-.67-1.2h-.45v1.2h-.4v-2.95h1a.9.9 0 0 1 .92.88c0 .43-.26.7-.63.81zm-.5-2.07c0-.3-.22-.52-.55-.52h-.55v1.03h.55c.33 0 .56-.21.56-.5%22/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id=%22a%22%3E%3Cpath fill=%22%23fff%22 d=%22M0 0h64v64H0z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E\", ar: 1, mono: false },\n \"dhl\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xml:space=%22preserve%22 overflow=%22visible%22 version=%221.0%22 viewBox=%220 0 175.75 38.79%22%3E%3Cpath fill=%22%23fecc00%22 d=%22M0 38.79V0h175.75v38.79z%22/%3E%3Cpath fill=%22%23d50029%22 d=%22m56.67 16.2-2.84 3.91c-.4.54-1.11 1.51 1.26 1.51h12.52l3.7-5.04c2.3-3.12.2-9.61-8.02-9.61H30.91l-5.62 7.62h30.6c1.55 0 1.53.6.78 1.62m-9.2 7.3c-2.38 0-1.66-.97-1.26-1.51l2.85-3.88c.76-1.03.78-1.62-.77-1.62h-14L23.03 31.82h27.5c9.08 0 14.14-6.18 15.7-8.32zm17.9 8.32h16.12l6.12-8.32H71.48zm41.62-24.86-6.2 8.41h-7.2l6.2-8.4H83.64L72.87 21.62h39.47L123.1 6.97Zm-18.3 24.86h16.13l6.12-8.32H94.81zM0 26.78v1.77h22.47l1.3-1.77zm26.18-3.28H0v1.77h24.88ZM0 31.82h20.06l1.3-1.76H0Zm152.07-3.27h23.68v-1.77h-22.38zm-2.4 3.27h26.08v-1.76h-24.8zm6.11-8.32-1.3 1.77h21.27V23.5Zm-21.12-1.88 10.79-14.65h-17.08l-10.8 14.65zm-18.47 1.88-1.76 2.4c-2.02 2.73-.23 5.92 6.38 5.92h25.9l6.12-8.31z%22/%3E%3C/svg%3E\", ar: 4.531, mono: false },\n \"estafeta\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xml:space=%22preserve%22 viewBox=%220 0 6834.46 1080%22%3E%3Cpath fill=%22%23c01818%22 d=%22m1423.74 511.84 213.92 182.45c40.33 38.22 65.32 92.83 65.32 153.05 0 115.32-92.33 208.87-206.48 208.87l-146.33.5H901.39l45.79-200.35 337.66.58c36.58 0 66.23-29.89 66.23-66.78a66.8 66.8 0 0 0-28.62-55.1L1133.9 596.1c-50.18-38.07-82.65-99.06-82.65-167.4 0-115.69 92.44-209.17 206.4-209.17l488.02-.35-40 176.47h-236.61c-36.46 0-66.08 29.83-66.08 66.66 0 19.55 8.06 37.11 21.16 49.35zm804.66 370.53h.86c-36.52 0-66.66-29.82-66.07-66.84 0-7.8 1.86-13.82 3.66-19.73l90.44-401.39h150.8l40.02-175.29h-150.76L2347.96 0h-289.03l-50.28 219.15h-157.79l-40.33 175.23h158.23l-116.6 510.27a122 122 0 0 0-2.72 27.2c0 68.98 55.44 125.38 124.02 125.38l249.14-1.08 40.18-174.61c.09.06-21.62.83-34.39.83m3183.11 0h.64c-36.52 0-66.5-29.82-65.88-66.84 0-7.8 1.7-13.82 3.37-19.73l90.64-401.39H5591l39.99-175.29h-150.51L5530.5 0h-288.35l-50.77 219.15h-157.42l-40.33 175.23h158.25L5035.2 904.65a116 116 0 0 0-3.04 27.2c.16 68.98 55.48 125.38 123.94 125.38h.21l249.45-1.08 39.9-174.61c-.03.06-21.22.83-34.17.83m-2068.96 173.41c18.93-8.06 32.06-24.6 36.95-45.2l1.61-6.69-.83 1.55 140.07-611.37h-115.6L3444.38 219h115.75l12.89-56.97 2.91-11.55C3601.4 64 3680.47.93 3774.15.93l.43-.59h274.26l-32 140.66-97.51-.28c-31.35 0-57 22-64.3 51.24v-1.12l-6.73 28.13h150.64l-39.47 175.75H3808.4l-124.58 548.3c-13.2 64.53-69.5 113-137.35 113zM2797.6 860.94l-1.3.62a104.3 104.3 0 0 1-58.23 17.5c-59.38 0-107.46-48.5-107.46-108.63 0-60.06 48.08-108.88 107.46-108.88l203.66.74c-17.12 85.59-70.93 157.8-144.13 198.65m506.74-533.31c0-60.06-48.23-108.5-107.43-108.5h-643.46l-39.3 174.1h444.25c18.52 0 33.55 14.72 33.55 33.21 0 2.54-.16 4.93-.78 7.38h-.4l-17.69 76.94h-311.43c-159.58 0-289.03 131.21-289.03 292.78 0 2.39 0 5.02.15 7.47 0 0 .1 8.3.28 13.66 4.4 150.72 139.7 255.24 287.08 255.24 18.53 0 33.55-1.37 54.43-4.96 59.22-10.6 103.02-27.5 143.3-59.16 19.54 24.72 50.2 39.99 83.84 39.99h271.94c-29.61-19.27-49-53.6-49-91.88 0-9.17.96-18.09 2.97-26.76l134.03-586.46v.83c1.74-7.65 2.7-15.7 2.7-23.88M656.28 434.06l-18.09 77.9H385.62l14.15-59.44c4.18-32.58 31.38-57.64 64.56-58.26l159.58.19c18.25 0 32.9 14.86 32.9 33.54 0 2.08 0 4-.53 6.07m205.65-214.88H278.76l-2.15-1.02c-65.57 0-121.02 45.7-136.07 107.67L2.14 925.31C.5 932.77 0 939.83 0 947.73c0 60.13 48.26 108.79 107.61 108.79h697.64l45.6-201.06H389.8l.93.34c-36.68 0-66.41-29.92-66.41-66.82 0-5.7 1.08-11.27 2.2-16.5l-.35.58 22.43-103h545.27l73.9-322.23a132 132 0 0 0 1.55-20.1c.03-59.85-47.95-108.55-107.39-108.55m5118.52 641.85-1.11.53a105.6 105.6 0 0 1-58.54 17.5c-59.26 0-107.03-48.5-107.03-108.63 0-60.16 47.8-108.88 107.03-108.88l203.78.62a294.3 294.3 0 0 1-144.13 198.86M6380.05 219h-643.78l-39.43 174.27h444.6a33.24 33.24 0 0 1 33.45 33.2c0 2.6-.19 4.93-.71 7.5l-.5-.15-17.35 76.94h-311.55c-159.5 0-289 131.3-289 292.78v7.53s.3 8.33.3 13.69c4.31 150.63 139.8 255.24 286.9 255.24 18.62 0 33.7-1.46 54.61-5.05 59.32-10.6 102.75-27.5 143.42-59.16 19.61 24.8 50.21 40.23 83.76 40.23h272.03c-29.8-19.51-49.31-53.83-49.31-92.12 0-9.07 1.08-18.09 3.25-26.76l133.9-586.43v.77c1.71-7.65 2.8-15.64 2.8-23.88-.1-60.16-48.33-108.6-107.4-108.6M4588 434.68l-17.8 78.03h-252.62l14.2-59.44c3.83-32.43 31.25-57.83 64.33-58.36l159.52.1c18.25 0 33.05 15.08 33.05 33.54 0 2.1-.18 4.15-.68 6.13m205.93-215.06h-583.27l-2.05-.93c-66 0-121.05 45.78-136.45 107.55L3933.9 926.02c-1.7 7.56-2.05 14.43-2.05 22.24 0 60.22 48.14 108.91 107.33 108.91h697.8l45.78-201.19h-461.2l.87.34c-36.68 0-66.08-29.8-66.08-66.66 0-5.85.62-11.4 2.02-16.66l-.78.71 22.86-103.33h545.46l73.47-322.34a100 100 0 0 0 1.92-19.67c0-60.06-47.98-108.75-107.36-108.75m1899.11 131.21h20.88l34.13 56.93h24.82l-37.36-58.6c20.23-2.14 34.6-12.17 34.6-36.18 0-27.17-16.05-38.32-48.5-38.32h-50.19v133.1h21.59v-56.93zm0-18.58v-38.91h26.52c13.07 0 28.9 1.95 28.9 17.94 0 19.36-14.62 20.97-30.73 20.97zm141.4 6.69c0-72.2-54.51-120.25-117.36-120.25-63.94 0-118.24 48.01-118.24 120.25 0 68.45 49.1 120.18 118.24 120.18 62.85 0 117.37-47.82 117.37-120.18m-25.65 0c0 58.76-40.67 99.21-91.72 99.21-57.34 0-92.68-44.6-92.68-99.21 0-58.33 40.33-99.22 92.68-99.22 51.05-.03 91.72 40.89 91.72 99.22%22/%3E%3C/svg%3E\", ar: 6.328, mono: false },\n \"farmaciasyza\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 141.31 65.39%22%3E%3Cg data-name=%22Grupo 3266%22%3E%3Cpath fill=%22%23009%22 d=%22M90.49 39.75a8 8 0 0 1-6.43 2.7c-4.17 0-6.01-2.16-6.4-4.51s-.63-8.66 7.77-8.66a13 13 0 0 1 5.05.83ZM69.71 30.1c-.95 2.13-2.29 7.57-.56 11.74 1.88 4.51 5.66 7.71 12.51 7.71s10.07-3.46 10.07-3.46c3.41 5.52 11.48 2.79 11.48 2.79l-.06-5.82h-1.92c-1.53 0-1.83-1.67-1.83-3.06V24.57c-3.88-1.88-13.5-2.54-18.1-1.78 0 0-8.81 1.09-11.59 7.32%22 data-name=%22Trazado 25280%22/%3E%3Cpath fill=%22%23009%22 d=%22M51.02 41.85 60.29 33a42 42 0 0 0 4.95-5.26l-.13-4.96H37.3v7.34h13.87C45.23 35.58 36.6 43.97 36.6 43.97v4.91h29.15l-.1-7.03Z%22 data-name=%22Trazado 25281%22/%3E%3Cpath fill=%22%233c3%22 d=%22M25.42 58.35h4v1.44h-2.26v1.43h1.48v1.34h-1.48v2.65H25.4Z%22 data-name=%22Trazado 25282%22/%3E%3Cpath fill=%22%233c3%22 d=%22M34.93 62.62h1.5l-.52-1.77-.13-.52h-.19l-.11.52Zm-.48-4.28h2.48L39 65.21h-1.8l-.34-1.15h-2.35l-.35 1.15h-1.78Z%22 data-name=%22Trazado 25283%22/%3E%3Cpath fill=%22%233c3%22 d=%22M45.98 59.97a.7.7 0 0 0-.54-.18h-.84v1.72h.84a.8.8 0 0 0 .54-.2 1 1 0 0 0 .2-.68 1 1 0 0 0-.2-.66m.74 2.66 1.6 2.58H46.3l-1.44-2.35h-.27v2.35h-1.74v-6.86h2.64a2.5 2.5 0 0 1 1.71.51 2.4 2.4 0 0 1 .71 1.8 2.2 2.2 0 0 1-.72 1.7 2 2 0 0 1-.47.28%22 data-name=%22Trazado 25284%22/%3E%3Cpath fill=%22%233c3%22 d=%22M56.18 64.34h-.86L54.2 61.9a5 5 0 0 1-.21-.63h-.14s.06.74.06 1.02v2.92h-1.75v-6.86h1.94l1.6 3.62h.1l1.6-3.62h1.94v6.86h-1.75V62.3c0-.29.06-1.02.06-1.02h-.14a5 5 0 0 1-.22.62Z%22 data-name=%22Trazado 25285%22/%3E%3Cpath fill=%22%233c3%22 d=%22M65.75 62.62h1.5l-.54-1.77-.12-.52h-.2l-.1.52Zm-.49-4.28h2.48l2.07 6.87h-1.79l-.34-1.15h-2.36l-.34 1.15h-1.79Z%22 data-name=%22Trazado 25286%22/%3E%3Cpath fill=%22%233c3%22 d=%22M78.25 64.9a4 4 0 0 1-2 .46 3.5 3.5 0 0 1-2.04-.61c-.54-.45-.95-1.18-.95-2.98 0-1.7.39-2.4.9-2.87a3 3 0 0 1 2.1-.72 5 5 0 0 1 1.77.33l-.3 1.36a4 4 0 0 0-1.2-.2 1.6 1.6 0 0 0-1.08.36c-.23.23-.43.68-.43 1.75 0 1.12.2 1.55.46 1.78a1.6 1.6 0 0 0 1.05.31 5 5 0 0 0 1.41-.27Z%22 data-name=%22Trazado 25287%22/%3E%3Cpath fill=%22%233c3%22 d=%22M82.14 58.35h1.75v6.85h-1.75z%22 data-name=%22Rect%C3%A1ngulo 1541%22/%3E%3Cpath fill=%22%233c3%22 d=%22M90.28 62.62h1.5l-.53-1.77-.12-.52h-.2l-.11.52Zm-.48-4.28h2.48l2.07 6.87h-1.79l-.34-1.15h-2.36l-.35 1.15h-1.78Z%22 data-name=%22Trazado 25288%22/%3E%3Cpath fill=%22%233c3%22 d=%22M100.66 65.36a6 6 0 0 1-2.54-.58l.31-1.4a5 5 0 0 0 2.04.5c.5 0 .86-.23.86-.7q.01-.51-.6-.66l-.74-.18c-1.11-.25-1.95-.69-1.95-2.02 0-1.28.86-2.13 2.5-2.13a5 5 0 0 1 2.08.48l-.48 1.39a4 4 0 0 0-1.53-.39c-.5 0-.78.26-.78.62a.5.5 0 0 0 .43.52l.82.2c1.2.28 2.03.76 2.03 2.08a2.13 2.13 0 0 1-2.46 2.27%22 data-name=%22Trazado 25289%22/%3E%3Cpath fill=%22%23009%22 d=%22m24.38 22.74-7.3 17.62-6.78-17.62H0l11.34 27.13a9 9 0 0 1-1.21.79 8 8 0 0 1-2.48.84 18 18 0 0 1-2.2.24q-1.06.04-2.07 0l-1.4 6.47q2.07.15 5.22.15a20 20 0 0 0 8.3-1.54 14 14 0 0 0 5.2-3.98 13 13 0 0 0 .85-1.1 9 9 0 0 0 .67-1.15l12.46-27.85Z%22 data-name=%22Trazado 25290%22/%3E%3Cpath fill=%22%233c3%22 d=%22M118.55 22.76v5.15a5.87 5.87 0 0 0 11.74 0v-5.15h5.15a5.87 5.87 0 0 0 0-11.74h-5.15V5.87a5.87 5.87 0 0 0-11.74 0v5.15h-5.15a5.87 5.87 0 0 0 0 11.74Z%22 data-name=%22Trazado 25291%22/%3E%3Cpath fill=%22%23009%22 d=%22M130.3 12.63a.53.53 0 1 1 .54.53.53.53 0 0 1-.53-.53%22 data-name=%22Trazado 25292%22/%3E%3Cpath fill=%22%23009%22 d=%22M132.54 12.63a.4.4 0 1 1 .4.41.4.4 0 0 1-.4-.4%22 data-name=%22Trazado 25293%22/%3E%3Cpath fill=%22%23009%22 d=%22M134.77 12.63a.29.29 0 1 1 .3.29.3.3 0 0 1-.3-.3%22 data-name=%22Trazado 25294%22/%3E%3Cpath fill=%22%23009%22 d=%22M137.03 12.63a.14.14 0 1 1 .14.14.14.14 0 0 1-.14-.14%22 data-name=%22Trazado 25295%22/%3E%3Cpath fill=%22%23009%22 d=%22M137.03 14.74a.14.14 0 1 1 .14.14.14.14 0 0 1-.14-.14%22 data-name=%22Trazado 25296%22/%3E%3Cpath fill=%22%23009%22 d=%22M137.03 16.86a.14.14 0 1 1 .14.14.14.14 0 0 1-.14-.14%22 data-name=%22Trazado 25297%22/%3E%3Cpath fill=%22%23009%22 d=%22M137.03 18.97a.14.14 0 1 1 .14.14.14.14 0 0 1-.14-.14%22 data-name=%22Trazado 25298%22/%3E%3Cpath fill=%22%23009%22 d=%22M137.03 21.09a.14.14 0 1 1 .14.14.14.14 0 0 1-.14-.14%22 data-name=%22Trazado 25299%22/%3E%3Cpath fill=%22%23009%22 d=%22M131.44 13.69a.44.44 0 1 1 .44.44.44.44 0 0 1-.44-.44%22 data-name=%22Trazado 25300%22/%3E%3Cpath fill=%22%23009%22 d=%22M133.68 13.69a.32.32 0 1 1 .32.32.3.3 0 0 1-.32-.32%22 data-name=%22Trazado 25301%22/%3E%3Cpath fill=%22%23009%22 d=%22M135.91 13.69a.2.2 0 1 1 .2.2.2.2 0 0 1-.2-.2%22 data-name=%22Trazado 25302%22/%3E%3Cpath fill=%22%23009%22 d=%22M130.3 14.74a.53.53 0 1 1 .54.54.53.53 0 0 1-.53-.54%22 data-name=%22Trazado 25303%22/%3E%3Cpath fill=%22%23009%22 d=%22M132.54 14.74a.4.4 0 1 1 .4.41.4.4 0 0 1-.4-.4%22 data-name=%22Trazado 25304%22/%3E%3Cpath fill=%22%23009%22 d=%22M134.77 14.74a.29.29 0 1 1 .09.2.3.3 0 0 1-.09-.2%22 data-name=%22Trazado 25305%22/%3E%3Cpath fill=%22%23009%22 d=%22M131.44 15.8a.44.44 0 1 1 .44.44.44.44 0 0 1-.44-.44%22 data-name=%22Trazado 25306%22/%3E%3Cpath fill=%22%23009%22 d=%22M133.68 15.8a.32.32 0 1 1 .32.32.3.3 0 0 1-.32-.32%22 data-name=%22Trazado 25307%22/%3E%3Cpath fill=%22%23009%22 d=%22M135.91 15.8a.2.2 0 1 1 .06.14.2.2 0 0 1-.06-.14%22 data-name=%22Trazado 25308%22/%3E%3Cpath fill=%22%23009%22 d=%22M130.3 16.86a.53.53 0 1 1 .54.53.53.53 0 0 1-.53-.53%22 data-name=%22Trazado 25309%22/%3E%3Cpath fill=%22%23009%22 d=%22M132.54 16.86a.4.4 0 1 1 .4.4.4.4 0 0 1-.4-.4%22 data-name=%22Trazado 25310%22/%3E%3Cpath fill=%22%23009%22 d=%22M134.77 16.86a.29.29 0 1 1 .3.29.3.3 0 0 1-.3-.3%22 data-name=%22Trazado 25311%22/%3E%3Cpath fill=%22%23009%22 d=%22M131.44 17.92a.44.44 0 1 1 .44.44.44.44 0 0 1-.44-.44%22 data-name=%22Trazado 25312%22/%3E%3Cpath fill=%22%23009%22 d=%22M133.68 17.92a.32.32 0 1 1 .32.32.3.3 0 0 1-.32-.32%22 data-name=%22Trazado 25313%22/%3E%3Cpath fill=%22%23009%22 d=%22M135.91 17.92a.2.2 0 1 1 .06.14.2.2 0 0 1-.06-.14%22 data-name=%22Trazado 25314%22/%3E%3Cpath fill=%22%23009%22 d=%22M130.3 18.98a.53.53 0 1 1 .54.53.53.53 0 0 1-.53-.53%22 data-name=%22Trazado 25315%22/%3E%3Cpath fill=%22%23009%22 d=%22M132.54 18.97a.4.4 0 1 1 .4.41.4.4 0 0 1-.4-.4%22 data-name=%22Trazado 25316%22/%3E%3Cpath fill=%22%23009%22 d=%22M134.77 18.97a.29.29 0 1 1 .3.3.3.3 0 0 1-.3-.3%22 data-name=%22Trazado 25317%22/%3E%3Cpath fill=%22%23009%22 d=%22M131.44 20.03a.44.44 0 1 1 .44.44.44.44 0 0 1-.44-.44%22 data-name=%22Trazado 25318%22/%3E%3Cpath fill=%22%23009%22 d=%22M133.68 20.03a.32.32 0 1 1 .32.32.3.3 0 0 1-.32-.32%22 data-name=%22Trazado 25319%22/%3E%3Cpath fill=%22%23009%22 d=%22M135.91 20.03a.2.2 0 1 1 .06.14.2.2 0 0 1-.06-.14%22 data-name=%22Trazado 25320%22/%3E%3Cpath fill=%22%23009%22 d=%22M130.3 21.09a.53.53 0 1 1 .54.53.53.53 0 0 1-.53-.53%22 data-name=%22Trazado 25321%22/%3E%3Cpath fill=%22%23009%22 d=%22M132.54 21.09a.4.4 0 1 1 .4.4.4.4 0 0 1-.4-.4%22 data-name=%22Trazado 25322%22/%3E%3Cpath fill=%22%23009%22 d=%22M134.77 21.1a.29.29 0 1 1 .3.28.3.3 0 0 1-.3-.29%22 data-name=%22Trazado 25323%22/%3E%3Cpath fill=%22%23009%22 d=%22M128.65 22.78a.53.53 0 1 1-.53.53.53.53 0 0 1 .53-.53%22 data-name=%22Trazado 25324%22/%3E%3Cpath fill=%22%23009%22 d=%22M128.65 25a.4.4 0 1 1-.4.42.4.4 0 0 1 .4-.41%22 data-name=%22Trazado 25325%22/%3E%3Cpath fill=%22%23009%22 d=%22M128.65 27.24a.29.29 0 1 1-.29.29.3.3 0 0 1 .3-.29%22 data-name=%22Trazado 25326%22/%3E%3Cpath fill=%22%23009%22 d=%22M128.65 29.5a.14.14 0 1 1-.14.14.14.14 0 0 1 .14-.14%22 data-name=%22Trazado 25327%22/%3E%3Cpath fill=%22%23009%22 d=%22M126.54 29.5a.14.14 0 1 1-.14.14.14.14 0 0 1 .14-.14%22 data-name=%22Trazado 25328%22/%3E%3Cpath fill=%22%23009%22 d=%22M124.42 29.5a.14.14 0 1 1-.14.14.14.14 0 0 1 .14-.14%22 data-name=%22Trazado 25329%22/%3E%3Cpath fill=%22%23009%22 d=%22M122.3 29.5a.14.14 0 1 1-.13.14.14.14 0 0 1 .14-.14%22 data-name=%22Trazado 25330%22/%3E%3Cpath fill=%22%23009%22 d=%22M120.2 29.5a.14.14 0 1 1-.15.14.14.14 0 0 1 .14-.14%22 data-name=%22Trazado 25331%22/%3E%3Cpath fill=%22%23009%22 d=%22M127.6 23.9a.44.44 0 1 1-.45.45.44.44 0 0 1 .44-.44%22 data-name=%22Trazado 25332%22/%3E%3Cpath fill=%22%23009%22 d=%22M127.6 26.14a.32.32 0 1 1-.32.33.3.3 0 0 1 .32-.33%22 data-name=%22Trazado 25333%22/%3E%3Cpath fill=%22%23009%22 d=%22M127.6 28.38a.2.2 0 1 1-.15.06.2.2 0 0 1 .14-.06%22 data-name=%22Trazado 25334%22/%3E%3Cpath fill=%22%23009%22 d=%22M126.54 22.78a.53.53 0 1 1-.54.53.53.53 0 0 1 .54-.53%22 data-name=%22Trazado 25335%22/%3E%3Cpath fill=%22%23009%22 d=%22M126.54 25a.4.4 0 1 1-.4.42.4.4 0 0 1 .4-.41%22 data-name=%22Trazado 25336%22/%3E%3Cpath fill=%22%23009%22 d=%22M126.54 27.24a.29.29 0 1 1-.3.29.3.3 0 0 1 .3-.29%22 data-name=%22Trazado 25337%22/%3E%3Cpath fill=%22%23009%22 d=%22M125.48 23.9a.44.44 0 1 1-.44.45.44.44 0 0 1 .44-.44%22 data-name=%22Trazado 25338%22/%3E%3Cpath fill=%22%23009%22 d=%22M125.48 26.14a.32.32 0 1 1-.32.33.3.3 0 0 1 .32-.33%22 data-name=%22Trazado 25339%22/%3E%3Cpath fill=%22%23009%22 d=%22M125.48 28.38a.2.2 0 1 1-.2.2.2.2 0 0 1 .2-.2%22 data-name=%22Trazado 25340%22/%3E%3Cpath fill=%22%23009%22 d=%22M124.42 22.78a.53.53 0 1 1-.53.53.53.53 0 0 1 .53-.53%22 data-name=%22Trazado 25341%22/%3E%3Cpath fill=%22%23009%22 d=%22M124.42 25a.4.4 0 1 1-.4.42.4.4 0 0 1 .4-.41%22 data-name=%22Trazado 25342%22/%3E%3Cpath fill=%22%23009%22 d=%22M124.42 27.24a.29.29 0 1 1-.29.29.3.3 0 0 1 .3-.29%22 data-name=%22Trazado 25343%22/%3E%3Cpath fill=%22%23009%22 d=%22M123.36 23.9a.44.44 0 1 1-.44.45.44.44 0 0 1 .44-.44%22 data-name=%22Trazado 25344%22/%3E%3Cpath fill=%22%23009%22 d=%22M123.36 26.14a.32.32 0 1 1-.32.33.3.3 0 0 1 .32-.33%22 data-name=%22Trazado 25345%22/%3E%3Cpath fill=%22%23009%22 d=%22M123.36 28.38a.2.2 0 1 1-.14.06.2.2 0 0 1 .14-.06%22 data-name=%22Trazado 25346%22/%3E%3Cpath fill=%22%23009%22 d=%22M122.3 22.78a.53.53 0 1 1-.53.53.53.53 0 0 1 .54-.53%22 data-name=%22Trazado 25347%22/%3E%3Cpath fill=%22%23009%22 d=%22M122.3 25a.4.4 0 1 1-.4.42.4.4 0 0 1 .4-.41%22 data-name=%22Trazado 25348%22/%3E%3Cpath fill=%22%23009%22 d=%22M122.3 27.24a.29.29 0 1 1-.28.29.3.3 0 0 1 .29-.29%22 data-name=%22Trazado 25349%22/%3E%3Cpath fill=%22%23009%22 d=%22M121.25 23.9a.44.44 0 1 1-.44.45.44.44 0 0 1 .44-.44%22 data-name=%22Trazado 25350%22/%3E%3Cpath fill=%22%23009%22 d=%22M121.25 26.14a.32.32 0 1 1-.23.1.3.3 0 0 1 .23-.1%22 data-name=%22Trazado 25351%22/%3E%3Cpath fill=%22%23009%22 d=%22M121.25 28.38a.2.2 0 1 1-.14.06.2.2 0 0 1 .14-.06%22 data-name=%22Trazado 25352%22/%3E%3Cpath fill=%22%23009%22 d=%22M120.2 22.78a.53.53 0 1 1-.54.53.53.53 0 0 1 .53-.53%22 data-name=%22Trazado 25353%22/%3E%3Cpath fill=%22%23009%22 d=%22M120.2 25a.4.4 0 1 1-.42.42.4.4 0 0 1 .41-.41%22 data-name=%22Trazado 25354%22/%3E%3Cpath fill=%22%23009%22 d=%22M120.2 27.24a.29.29 0 1 1-.21.08.3.3 0 0 1 .2-.08%22 data-name=%22Trazado 25355%22/%3E%3Cpath fill=%22%23009%22 d=%22M113.72 41.85h-1.14v1.9h1.06c.64 0 1.01-.19 1.01-.98 0-.62-.27-.92-.94-.92m-1.67-.5h1.86a1.28 1.28 0 0 1 1.31 1.44 1.36 1.36 0 0 1-1.12 1.44l1.54 2.18h-.67l-1.46-2.16h-.92v2.16h-.55Zm1.58-1.8a4.4 4.4 0 1 0 4.39 4.38 4.4 4.4 0 0 0-4.39-4.39m0 9.34a4.94 4.94 0 1 1 3.5-1.45 5 5 0 0 1-3.5 1.45%22 data-name=%22Trazado 25356%22/%3E%3C/g%3E%3C/svg%3E\", ar: 2.161, mono: false },\n \"fedex\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xml:space=%22preserve%22 viewBox=%22-0.81 -0.35 74.35 33.92%22%3E%3Cpath d=%22m59.95 7.77 2.98 3.28 2.87-3.28h6.12l-5.99 6.73L72 21.28h-6.37l-2.95-3.3-2.92 3.3h-6.15l6.01-6.75-6.01-6.76z%22 style=%22fill:%23ff5900%22 transform=%22translate(-.81 -.35)%22/%3E%3Cpath d=%22M53.61 7.77v4.57H46.8v4.19h6.81v4.75H41.79V0h11.82v4.74H46.8v3.03z%22 style=%22fill:%23ff5900%22 transform=%22translate(-.81 -.35)%22/%3E%3Cpath d=%22M36.81 0v8.71h-.05a5 5 0 0 0-4.09-1.7c-3.27 0-5.74 2.22-6.6 5.16-1-3.24-3.54-5.23-7.32-5.23-3.07 0-5.5 1.38-6.75 3.62V7.77H5.65V4.74h6.92V0H0v21.28h5.65v-8.94h5.64a9 9 0 0 0-.26 2.1c0 4.44 3.4 7.56 7.72 7.56 3.64 0 6.04-1.71 7.3-4.83h-4.84c-.65.94-1.15 1.22-2.46 1.22a2.9 2.9 0 0 1-2.83-2.9h9.87c.42 3.53 3.17 6.57 6.94 6.57 1.63 0 3.12-.8 4.03-2.15h.05v1.38h4.98V0zM16.08 12.4a2.7 2.7 0 0 1 2.67-2.23 2.6 2.6 0 0 1 2.7 2.23zm17.7 5.64c-1.83 0-2.97-1.7-2.97-3.5 0-1.9.99-3.74 2.98-3.74 2.06 0 2.88 1.83 2.88 3.74 0 1.81-.87 3.5-2.88 3.5m8.01 13.89V24.3H46v.57h-3.5v2.8h3.37v.58H42.5v3.1h3.68v.57zm4.87 0 2.05-2.74-1.95-2.6h.8l1.59 2.12 1.56-2.12h.78l-1.98 2.6 2.07 2.73h-.8l-1.7-2.26-1.63 2.26zm6.26 1.99h-.65V28.2q0-.8-.03-1.6h.63l.03.8c.4-.63.92-.92 1.71-.92 1.65 0 2.35 1.36 2.35 2.79s-.7 2.8-2.35 2.8q-1.11 0-1.7-.9zm3.36-4.66c0-1.14-.48-2.26-1.74-2.26-1.2 0-1.62.98-1.62 2.26s.43 2.25 1.62 2.25c1.26 0 1.74-1.11 1.74-2.25m3.98-2.17c-1.06 0-1.43.9-1.43 1.82v3.01h-.64v-3.76l-.03-1.57h.63l.04.77q.48-.9 1.55-.9l.3.03v.64zm1.2 2.29c0 1.2.57 2.19 1.74 2.19.9 0 1.33-.6 1.48-1.2h.62c-.29 1.11-.97 1.68-2.19 1.68-1.62 0-2.33-1.2-2.33-2.7 0-1.52.74-2.88 2.42-2.88 1.7 0 2.15 1.48 2.15 2.9zm.02-.49h3.18c0-1.04-.5-1.94-1.5-1.94-.92 0-1.55.7-1.68 1.94m6.38 3.16c-1.1 0-1.92-.52-1.92-1.68h.64c0 .8.53 1.2 1.3 1.2.74 0 1.3-.35 1.3-1.07 0-.64-.66-.8-1.35-1-.85-.25-1.76-.52-1.76-1.55 0-1.14.95-1.48 1.85-1.48 1.03 0 1.8.4 1.83 1.5h-.64c-.03-.63-.48-.98-1.17-.98-.54 0-1.19.2-1.19.9 0 .63.65.81 1.35 1 .84.23 1.77.49 1.77 1.52 0 1.2-.93 1.64-2.01 1.64m4.45 0c-1.1 0-1.91-.52-1.91-1.68h.64c0 .8.52 1.2 1.3 1.2.73 0 1.3-.35 1.3-1.07 0-.64-.66-.8-1.36-1-.84-.25-1.76-.52-1.76-1.55 0-1.14.96-1.48 1.86-1.48 1.03 0 1.8.4 1.83 1.5h-.64c-.03-.63-.49-.98-1.17-.98-.54 0-1.2.2-1.2.9 0 .63.66.81 1.36 1 .84.23 1.77.49 1.77 1.52 0 1.2-.93 1.64-2.02 1.64%22 style=%22fill:%232a007c%22 transform=%22translate(-.81 -.35)%22/%3E%3C/svg%3E\", ar: 2.192, mono: false },\n \"hsbc\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xml:space=%22preserve%22 viewBox=%220 0 315.9 85%22%3E%3Cpath fill=%22%23fff%22 d=%22M42.6 0h85v85h-85z%22/%3E%3Cpath fill=%22%23db0011%22 d=%22M170.1 42.6 127.6 0v85.1zm-85 0L127.6 0h-85z%22/%3E%3Cpath fill=%22%23db0011%22 d=%22m0 42.6 42.6 42.5V0zm85.1 0L42.6 85.1h85z%22/%3E%3Cpath d=%22M207.4 45.1H192v15.2h-7.7V24.7h7.7v14.6h15.4V24.7h7.7v35.6h-7.7zM233.7 61c-7.7 0-14-3.1-14.1-11.6h7.7c.1 3.8 2.3 6.1 6.5 6.1 3.1 0 6.7-1.6 6.7-5.1 0-2.8-2.4-3.6-6.4-4.8l-2.6-.7c-5.6-1.6-11.2-3.8-11.2-10.2 0-7.9 7.4-10.6 14.1-10.6 6.9 0 12.9 2.4 13 10.3h-7.7c-.3-3.2-2.2-5.1-5.8-5.1-2.9 0-5.7 1.5-5.7 4.7 0 2.6 2.4 3.4 7.4 5l3 .9c6.1 1.9 10 4 10 10-.1 8-7.9 11.1-14.9 11.1m19.2-36.2h12.4c2.3-.1 4.7 0 7 .4 4.3 1 7.6 3.8 7.6 8.6 0 4.6-2.9 6.9-7.1 8 4.8.9 8.4 3.3 8.4 8.6 0 8.1-8 9.9-14.2 9.9h-14zm12.4 14.8c3.4 0 6.9-.7 6.9-4.8 0-3.7-3.2-4.7-6.4-4.7h-5.4v9.5zM266 55c3.6 0 7.1-.8 7.1-5.2s-3-5.2-6.7-5.2h-6.1V55zm35.2 6c-11.5 0-16.6-7.3-16.6-18.2s5.7-18.8 17-18.8c7.1 0 14 3.2 14.2 11.2h-8c-.4-3.6-2.8-5.4-6.2-5.4-7 0-9.1 7.5-9.1 13.2s2.1 12.3 8.8 12.3c3.5 0 6.1-1.9 6.6-5.5h8c-.8 8.2-7.3 11.2-14.7 11.2%22/%3E%3C/svg%3E\", ar: 3.716, mono: false },\n \"jtexpress\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220.63 0 998.75 209%22%3E%3Cg fill=%22red%22%3E%3Cpath d=%22M149.56 0h60.17c-15.74 69.29-31.6 138.55-47.44 207.82-53.78-.05-107.56.1-161.34.06 7.71-13.74 14.56-27.94 21.99-41.82 29.62.14 59.24.03 88.86.05C124.4 110.75 136.86 55.34 149.56 0m90.83 0h134.05c-10.56 19.06-20.98 38.2-31.6 57.24.02-5.07 1.03-10.15.33-15.19-1.03-5.79-6.09-9.84-11.33-11.84-9.46-3.61-20.81-3.55-29.5 2.08-11.92 7.26-17.2 23.7-11.15 36.4 5.61 11.14 13.97 20.6 22.57 29.52a317 317 0 0 0 33.23 29.24 23 23 0 0 0 4.07-7.44c2.91-8.48 4.75-17.29 6.45-26.08q20.77 5.93 41.54 11.89c-2.61 20.81-10.83 40.68-22.36 58.11 11.96 14.61 23.97 29.19 35.92 43.81-18.17.04-36.33-.02-54.49.03-3.93-4.09-7.7-8.33-11.63-12.41-18.28 8.5-38.43 12.66-58.52 13.31-23.29.34-47.55-4.97-66.47-19.1-10.68-10.48-16.99-25.92-15.08-40.96 1.47-12.06 7.38-23.11 14.69-32.63 9.51-12.22 21.35-22.51 34.22-31.06-14.01-15.65-23.53-36.72-20.95-58.04 1.83-9 3.98-17.93 6.01-26.88m19.88 138.34c-3.3 5.23-4.21 12.08-1.4 17.72 4.84 9.88 15.32 16.49 26.25 17.08 12.99.81 25.67-3.87 36.81-10.19-12.83-15.18-25.49-30.5-38.44-45.56-8.41 6.12-17.76 11.78-23.22 20.95%22/%3E%3Cpath d=%22M405.16 0h243.61c-4.7 4.53-9.26 9.21-13.92 13.77q-30.34-.05-60.67.01c-2.54 2.54-5.11 5.04-7.64 7.59 20.24.02 40.48-.02 60.72.02-3.96 3.57-7.31 8.09-11.63 11.08-20.3.21-40.61.07-60.91.06q-3.96 3.76-7.78 7.64c20.46.04 40.92 0 61.38.02q-8.32 8.34-16.7 16.61c-22.34.02-44.68.05-67.03-.02-12.67 50.32-25.09 100.7-37.71 151.04-19.59-.07-39.18.12-58.76-.1 11.83-50.46 25.07-100.58 37.51-150.9-30.51-.02-61.03.02-91.54-.02 10.39-18.92 20.59-37.94 31.07-56.8M889.2 138.19c4.89-7.7 13.89-11.85 22.72-12.95 8.51-.94 17.5-.27 25.24 3.68-1.82 4.86-3.68 9.7-5.45 14.57-6.69-3.04-14.53-4.87-21.71-2.52-4.16 1.26-7.57 6.15-5.31 10.38 2.65 4.41 7.7 6.42 11.92 9 6.43 3.45 12.81 8.45 14.83 15.79 2.1 8.77-.67 18.77-7.58 24.72-5.88 5.19-13.72 7.38-21.37 8.14h-7.78c-6.73-.68-13.6-1.97-19.37-5.7l5.86-14.39c7.19 3.88 15.62 6.17 23.79 4.67 4.19-.79 8.44-3.99 8.51-8.6.32-4.75-3.91-7.85-7.56-9.96-6.22-3.48-12.93-6.85-17.1-12.87-5-7.02-4.06-16.9.36-23.96m61.94-.04c4.91-7.7 13.91-11.82 22.74-12.92 8.5-.93 17.46-.23 25.2 3.68-1.82 4.86-3.69 9.7-5.45 14.58-6.12-2.81-13.05-4.44-19.75-3.11-3.45.72-7.01 2.96-7.81 6.6-.72 2.72.73 5.46 2.79 7.18 5.15 4.42 11.79 6.62 16.96 11.02 3.91 3.22 7.07 7.62 7.91 12.7 1.23 8.07-1.29 16.88-7.4 22.46-5.89 5.55-14 7.86-21.87 8.66h-7.8c-6.75-.68-13.63-1.97-19.42-5.7l5.88-14.39c7.21 3.9 15.67 6.18 23.86 4.66 4.14-.8 8.33-3.98 8.43-8.53.35-4.72-3.81-7.86-7.45-9.96-6.22-3.5-12.95-6.85-17.15-12.87-5.07-7.03-4.13-16.97.33-24.06m-391.76-11.96c16.18 0 32.35-.04 48.53.02-1.01 4.97-1.96 9.94-2.94 14.91h-30.82c-1.08 5.82-2.41 11.59-3.27 17.44 9.66-.14 19.33-.02 29-.06q-1.38 7.34-2.79 14.67c-9.7.04-19.41 0-29.12.02-1.24 6.58-2.59 13.13-3.7 19.73 10.86-.1 21.72-.02 32.58-.04l-2.8 14.93h-50.19c5.14-27.21 10.36-54.41 15.52-81.62m56.21-.01 18.53.01c3.06 9.57 6.23 19.13 8.64 28.9 1.12-.72 1.63-1.97 2.25-3.09 4.62-8.88 10.2-17.21 15.34-25.79 7-.05 14-.02 21.01-.02q-14.92 20.05-29.86 40.06c5.18 13.87 10.45 27.7 15.65 41.56-6.24-.02-12.48.06-18.72-.05-3.33-10.11-6.92-20.15-9.9-30.37a2578 2578 0 0 1-18.03 30.36c-7.06.14-14.13.03-21.19.06 10.16-13.97 20.55-27.78 30.61-41.83-4.88-13.22-9.55-26.53-14.33-39.8m75.28 1.54c9.93-2 20.24-2.83 30.31-1.47 8.21 1.14 16.8 5.46 20.08 13.51 4.28 11.17-.13 24.74-9.72 31.75-9.39 6.95-21.78 8.14-33.09 6.94l-5.58 29.37c-5.71.02-11.42-.06-17.12.04 4.88-26.74 10.1-53.43 15.12-80.14m14.89 12.35c-1.53 8.05-3.1 16.1-4.61 24.16 6.56 1.15 14.09.82 19.29-3.85 4.81-4.1 6.69-12.28 2.41-17.38-4.44-4.45-11.4-3.56-17.09-2.93m53.83-12.35c8.64-1.78 17.51-2.4 26.31-2 7.65.49 15.85 2.33 21.4 7.99 5.4 5.55 5.9 14.38 3.16 21.32-2.9 7.27-9.84 12.1-17.11 14.33 3.94 2.19 6.32 6.27 7.14 10.61 1.84 9.21 1.46 18.75 3.88 27.86-6.01-.04-12.02.01-18.02-.03-1.53-7.22-1.81-14.61-2.69-21.92-.45-3.51-1.69-7.49-5.1-9.18-3.41-1.55-7.27-.95-10.89-1.08q-3.06 16.1-6.08 32.19c-5.8.03-11.6-.03-17.39.04 5.02-26.73 10.25-53.42 15.39-80.13m14.89 12.39c-1.28 7.49-2.87 14.92-4.26 22.39 6.33.02 13.46.65 18.7-3.67 4.78-3.55 6.93-11.61 2.4-16.18-4.55-3.98-11.28-3.58-16.84-2.54m55.99-13.92h48.5q-1.44 7.47-2.91 14.93l-30.84.01c-1.11 5.79-2.26 11.57-3.36 17.36q14.53.02 29.1.01-1.37 7.35-2.79 14.68-14.56.01-29.11 0a3257 3257 0 0 0-3.76 19.7h32.63q-1.39 7.47-2.81 14.94h-50.18c5.15-27.22 10.36-54.42 15.53-81.63%22/%3E%3C/g%3E%3C/svg%3E\", ar: 4.779, mono: false },\n \"mastercard\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 1000 618%22%3E%3Cpath fill=%22%23EB001B%22 d=%22M308 0a309 309 0 1 0 2 0z%22/%3E%3Cpath fill=%22%23F79E1B%22 d=%22M690 0a309 309 0 1 0 2 0z%22/%3E%3Cpath fill=%22%23FF5F00%22 d=%22M500 66a309 309 0 0 0 0 486 309 309 0 0 0 0-486%22/%3E%3C/svg%3E\", ar: 1.618, mono: false },\n \"mercadopago\": { src: \"data:image/png;base64,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\", ar: 3.838, mono: false },\n \"oxxo\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 version=%221.0%22 viewBox=%2235.43 35.45 885.83 448.9%22%3E%3Cpath d=%22M-792.46-878.05c0-29.6 23.78-53.62 53.13-53.62H40.12c29.33 0 53.13 24.02 53.13 53.62v339.17c0 29.6-23.8 53.6-53.13 53.6h-779.45c-29.35 0-53.13-24-53.13-53.6z%22 style=%22fill:%23fff;fill-opacity:1;fill-rule:nonzero;stroke:none%22 transform=%22translate(827.89 968.22)%22/%3E%3Cpath d=%22M-791.84-883.46c0-27.22 21.88-49.3 48.86-49.3h787.5c26.99 0 48.85 22.08 48.85 49.3v1.57h-885.21zM93.37-534.4v1.22c0 27.23-21.86 49.31-48.84 49.31h-787.5c-26.99 0-48.87-22.08-48.87-49.3v-1.23z%22 style=%22fill:%23fbb110;fill-opacity:1;fill-rule:nonzero;stroke:none%22 transform=%22translate(827.89 968.22)%22/%3E%3Cpath d=%22M-179.2-708.84c0 68.92 55.35 124.79 123.66 124.79 68.29 0 123.67-55.87 123.67-124.8s-55.38-124.8-123.67-124.8c-68.3 0-123.66 55.87-123.66 124.82m-589.6 0c0 68.92 55.37 124.79 123.68 124.79 68.29 0 123.67-55.87 123.67-124.8s-55.38-124.81-123.67-124.81c-68.3 0-123.69 55.87-123.69 124.82m862.17 150.8h-609.75c10.99-7.78 21.22-18.43 32.39-32.8l62.11-80 27.13 34.6 30.19-40.52-26.4-33.9 63.22-81.44c20.07-25.83-18.31-56.19-38.4-30.36L-422-750.47l-56.8-72.93c-20.1-25.76-58.42 4.67-38.32 30.46l64.2 82.3-69.46 89.44c-24.68 31.78-49.31 60.92-98.2 63.17h-171.26v-300.24h606.54c-10.43 7.7-20.27 18-30.94 31.76l-62.1 79.96-27.15-34.57-30.16 40.52 26.4 33.89-63.25 81.43c-20.05 25.83 18.34 56.19 38.4 30.36l55.89-71.96 56.8 72.91c20.1 25.78 58.42-4.65 38.32-30.43l-64.2-82.34 69.46-89.41c22.67-29.23 45.32-56.22 86.8-62.12h184.4zm-222.94-150.81c0-41.28 33.15-74.73 74.03-74.73s74.02 33.45 74.02 74.73c0 41.25-33.13 74.7-74.02 74.7s-74.03-33.45-74.03-74.7m-589.58 0c0-41.28 33.15-74.73 74.03-74.73 40.87 0 74.02 33.45 74.02 74.73 0 41.25-33.15 74.7-74.02 74.7-40.88 0-74.03-33.45-74.03-74.7%22 style=%22fill:%23e70020;fill-opacity:1;fill-rule:nonzero;stroke:none%22 transform=%22translate(827.89 968.22)%22/%3E%3C/svg%3E\", ar: 1.973, mono: false },\n \"paypal\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 1310 439.6%22%3E%3Cpath d=%22M1310 0v328.3h-74.7V0zm-102.2 110.8v218.1h-66.4v-18.8c-8.4 8.2-18 14.4-28.6 18.8a87 87 0 0 1-34.7 7c-15.6 0-30.1-2.9-43.4-8.7-13.3-6.1-24.9-14.4-34.7-24.8-9.9-10.5-17.7-22.7-23.5-36.6-5.5-14.2-8.2-29.5-8.2-45.8s2.7-31.4 8.2-45.3c5.8-14.2 13.6-26.6 23.5-37.1a104.5 104.5 0 0 1 34.7-24.4c13.3-6.1 27.8-9.2 43.4-9.2 12.4 0 24 2.3 34.7 7a88 88 0 0 1 28.6 18.8V111h66.4zm-117.7 158.7c13.6 0 24.7-4.6 33.4-14q13.5-13.95 13.5-35.7c0-21.75-4.5-26.5-13.5-35.7-8.7-9.3-19.9-14-33.4-14s-24.9 4.6-33.9 14c-8.7 9.3-13 21.2-13 35.7s4.4 26.5 13 35.7c9 9.3 20.3 14 33.9 14M861.7 0c19.7 0 36.5 2.8 50.4 8.3s25.6 13.2 35.2 23.1c9.8 10.2 17.5 21.8 23 34.9s8.2 27.2 8.2 42.3-2.7 29.2-8.2 42.3a112 112 0 0 1-23 34.9c-9.5 9.9-21.3 17.6-35.2 23.1s-30.7 8.3-50.4 8.3h-36v111.6h-76V0zm-10.9 149.6c10.2 0 17.9-1 23.5-3.1 5.8-2.3 10.6-5.3 14.3-8.7 7.8-7.3 11.7-17 11.7-29.2s-3.9-21.9-11.7-29.2c-3.8-3.5-8.5-6.3-14.3-8.3-5.5-2.3-13.3-3.5-23.5-3.5h-25.2v82zm-381.1-38.8h82.5l56 104.6h.9L659 110.8h76.4L571.7 439.6h-76l74.7-150.4zm-14.7 0v218.1h-66.4v-18.8c-8.4 8.2-18 14.4-28.6 18.8a87 87 0 0 1-34.7 7c-15.6 0-30.1-2.9-43.4-8.7-13.3-6.1-24.9-14.4-34.7-24.8-9.8-10.5-17.7-22.7-23.5-36.6-5.5-14.2-8.2-29.5-8.2-45.8s2.7-31.4 8.2-45.3c5.8-14.2 13.6-26.6 23.5-37.1a103.5 103.5 0 0 1 34.7-24.4c13.3-6.1 27.8-9.2 43.4-9.2 12.4 0 24 2.3 34.7 7a88 88 0 0 1 28.6 18.8V111H455zM337.3 269.5c13.6 0 24.7-4.6 33.5-14q13.5-13.95 13.5-35.7c0-21.75-4.5-26.5-13.5-35.7-8.7-9.3-19.9-14-33.5-14s-24.9 4.6-33.9 14c-8.7 9.3-13 21.2-13 35.7s4.4 26.5 13 35.7c9 9.3 20.3 14 33.9 14M112 0c19.7 0 36.5 2.8 50.4 8.3s25.6 13.2 35.2 23.1c9.8 10.2 17.5 21.8 23 34.9s8.2 27.2 8.2 42.3-2.7 29.2-8.2 42.3a112 112 0 0 1-23 34.9c-9.5 9.9-21.3 17.6-35.2 23.1s-30.7 8.3-50.4 8.3H76v111.6H0V0zm-10.8 149.6c10.2 0 17.9-1 23.5-3.1 5.8-2.3 10.6-5.3 14.3-8.7 7.8-7.3 11.7-17 11.7-29.2s-3.9-21.9-11.7-29.2c-3.8-3.5-8.5-6.3-14.3-8.3-5.5-2.3-13.3-3.5-23.5-3.5H76v82z%22/%3E%3C/svg%3E\", ar: 2.98, mono: true },\n \"santander\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 version=%221.0%22 viewBox=%224 3.75 391.5 79%22%3E%3Cpath d=%22M-137.26 287.82a17.5 17.5 0 0 0 .55 7.23c.95 2.87 2.27 4.94 7.12 11.25 5.12 6.66 6.76 9.08 7.98 12.53 1 2.83 1.02 4.46.59 7.02 4.49.86 11.84 3.24 16.77 6.2 4.57 2.81 7.9 6.46 9.11 10 .72 2.09.7 5.33-.07 7.36a16 16 0 0 1-3.22 5.2c-5.9 6.46-17.6 11.1-31.67 12.59-3.11.32-10.74.56-13.36.4-18.8-1.1-33.92-7.59-38.22-16.42-1.8-3.67-1.75-6.83.14-10.46 1.55-3 5.82-6.7 10.83-9.4a85 85 0 0 1 14.2-5.43c.24 3.17 6.4 10.74 8.45 13.42 4.46 5.84 6.22 8.62 7.48 10.85.76 1.33 1.18 2.19.97 4.74 0 0 1.72-1.56 2.36-2.87.84-1.71 1.14-3.44.98-5.67-.2-2.68-.65-4.32-1.93-6.94-1.25-2.55-3.03-5.13-6.43-9.3-4.79-5.88-6.56-9.1-7.3-13.3-.8-4.66.5-9.6 3.18-12.02a10 10 0 0 1 1.53-1.04s-.08 1.2-.08 2.57c0 2.88.33 4.38 1.43 6.58 1.38 2.73 3.28 5.28 9.11 12.22 5.16 6.14 6.76 9.26 6.76 13.16v1.88s1.37-1.04 2-2c2-3.01 2.32-7.72.8-11.9-1.05-2.86-2.74-5.46-7.74-11.75-5.1-6.4-7.23-11.53-7.23-15.8s.92-8.35 4.91-10.9%22 style=%22fill:%23fe001e;fill-opacity:1;display:inline%22 transform=%22translate(184.65 -280.17)scale(.98661)%22/%3E%3Cg style=%22fill:%23fe001e;fill-opacity:1%22%3E%3Cpath d=%22M-41.6 350.75c.12-1.43.02-2.84-.14-3.59-.61-2.94-2.79-5.9-5.93-8.08a64 64 0 0 0-6.79-3.51c-5.94-2.75-7.6-3.74-9.09-5.4a7.2 7.2 0 0 1-2-5.38c0-1.55.08-2.01.58-3.1 1.62-3.52 5.65-5.4 10.35-4.8 2.76.35 4.21.97 5.84 2.5 1.7 1.59 2.57 3.43 3.04 6.46l.14 1.71h2.57l-.22-11.75-.85-.21c-.65-.16-4.9-.97-7.16-1.26-3.37-.42-4.73-.47-6.71-.24-3.84.44-7.01 1.9-9.4 4.31a12.2 12.2 0 0 0-3.81 8.4c-.2 3.42.9 6.25 3.34 8.67 2.04 2.03 2.92 2.56 9.24 5.57 8.1 3.85 9.93 4.99 11.16 7.88 1.06 2.51 1.14 5.33.04 7.59-2.82 5.76-11.7 7.26-17.22 2.92a11.4 11.4 0 0 1-4.06-6.61l-.26-1.34h-2.19l.39 11.26s4.2 1.13 6.17 1.33c1.48.16 2.95.45 4.44.45 3 0 4.38.39 7.48-.64 3.2-1.07 10.26-3.2 11.06-13.14m19.71-18.49c3.42 0 6.4 1.5 7.83 3.7a8.6 8.6 0 0 1 1.36 5.06v16.24c0 1.93 1.39 2.55 3.4 1.87l1.51-.58v2.13l-7.48 3.27c-.87.39-1.46-.5-1.88-2.13l-.47-1.57-1.24.98a11.7 11.7 0 0 1-7.52 2.66c-3.23.01-5.34-.43-7.44-3.78a8 8 0 0 1-.26-6.4c.96-2.18 2.86-3.3 10.85-6.39l5.4-2.02v-1.5c0-5.55-1.5-7.26-3.42-8.33-1.55-.86-3.6-.64-5.56.64-1.61 1.06-2.1 2.84-1.27 4.67.64 1.41.42.97.42 1.02l-4.39 2.31s-.76-1.3-.97-2c-1.01-3.3.28-5.17 5.24-7.9 2.59-1.42 4.11-1.95 5.89-1.95m4.06 15.39s-7.03 2.97-8.38 3.65c-1.08.55-2.32 1.53-2.73 2.33a5 5 0 0 0 .21 4.06 5.4 5.4 0 0 0 2.35 2.35c.35.15 1.53.42 2.35.43q2.52.02 5.22-2.18l.98-.81zm22.01-15.39v5.75l1.46-1.39c3.19-3 6.23-4.36 8.58-4.36 5.34 0 10.25 4.7 10.04 11.33v15.38c0 1.71.43 2.78 2.14 2.78h2.77v2.14H14.44v-2.14h2.14c1.7 0 2.35-1.07 2.35-2.78V343.6c0-3.2-1.18-4.8-2.14-5.77-1.28-1.28-2.84-1.64-5.13-1.5-1.77.12-3.6 1.06-5.68 2.75l-1.37 1.1v19.87c0 1.07.43 1.71 1.5 1.71h2.78v2.14H-5.64v-2.14h1.92c1.7 0 3-1.07 3-2.78v-16.45c0-4.27-1.3-5.55-4.92-3.63v-2.29c2.35-.7 6.62-2.84 8.97-4.34zm41.23 31.63c1.93 0 2.38-.22 4.17-1.73l3.52-2.97-.85-1.5-1.57.84c-2.35 1.25-4.2 1.51-6.55.44-2-.9-3.2-4.06-3.2-5.77v-17.3h9.82l1.07-3h-10.9v-9.82h-1.06c-2.57 4.7-6.41 9.18-11.11 11.96v.86h6.83v17.3c0 4.06 1.5 7.05 3.85 8.76a8.6 8.6 0 0 0 5.98 1.93m22.65-31.63c3.42 0 6.41 1.5 7.83 3.7a8.6 8.6 0 0 1 1.36 5.06v16.24c0 1.93 1.4 2.55 3.4 1.87l1.51-.58v2.13l-7.48 3.27c-.87.39-1.46-.5-1.87-2.13l-.48-1.57-1.24.98a11.7 11.7 0 0 1-7.52 2.66c-3.22.01-5.34-.43-7.44-3.78a8 8 0 0 1-.26-6.4c.96-2.18 2.87-3.3 10.85-6.39l5.4-2.02v-1.5c0-5.55-1.5-7.26-3.42-8.33-1.54-.86-3.6-.64-5.55.64-1.62 1.06-2.11 2.84-1.28 4.67.64 1.41.42.97.42 1.02l-4.39 2.31s-.75-1.3-.97-2c-1-3.3.28-5.17 5.24-7.9 2.6-1.42 4.11-1.95 5.9-1.95m4.06 15.39s-7.03 2.97-8.38 3.65c-1.08.55-2.32 1.53-2.73 2.33a5 5 0 0 0 .21 4.06 5.4 5.4 0 0 0 2.35 2.35c.36.15 1.53.42 2.35.43q2.52.02 5.22-2.18l.98-.81zm22-15.39v5.75l1.47-1.39c3.18-3 6.22-4.36 8.57-4.36 5.34 0 10.26 4.7 10.04 11.33v15.38c0 1.71.43 2.78 2.14 2.78h2.78v2.14h-14.75v-2.14h2.14c1.7 0 2.35-1.07 2.35-2.78V343.6c0-3.2-1.18-4.8-2.14-5.77-1.28-1.28-2.84-1.64-5.12-1.5-1.78.12-3.6 1.06-5.7 2.75l-1.36 1.1v19.87c0 1.07.43 1.71 1.5 1.71h2.78v2.14H84.3v-2.14h1.92c1.71 0 3-1.07 3-2.78v-16.45c0-4.27-1.29-5.55-4.92-3.63v-2.29c2.35-.7 6.62-2.84 8.97-4.34zm63.46 27.99v-2.13c-2.35 1.07-3.42 1.07-4.23.52-1.15-.78-1.12-2.23-1.12-2.23v-47h-.64a49 49 0 0 1-10.04 4.9v2.36c1.71-.64 2.99-.98 4.06-.43.7.39 1.07.85 1.07 1.92v15.98l-1.26-.5c-2.51-1.03-3.81-1.26-6.86-1.26-2.55 0-3.08.08-4.6.58-7.02 2.35-11.52 9.21-11.15 17.03.21 4.47 1.5 7.98 4.43 10.48 2.99 2.56 5.55 3.42 8.54 3.42 4.06 0 6.41-.81 9.36-2.81.9-.61 1.75-1.25 1.75-1.25a8.7 8.7 0 0 0 1.5 4.48zm-22.15-.38c-4-1.42-6.9-6.35-7.27-12.33-.47-7.48 3.67-12.71 10.06-12.71 2.69 0 4.75.73 7.23 2.58l1.23.91-.1 19.2-1.38.83a10.4 10.4 0 0 1-6.21 1.83c-2 .07-2.67.01-3.56-.3m45.11 3.69a26 26 0 0 0 6.95-3.1v-2.14c-2.35 1.71-6.08 2.77-9.4 2.78q-5.43 0-8.34-3.2c-2.83-3.16-3.63-5.77-4.12-12.18h22.5s0-3.21-1.28-6.2c-.88-2.05-1.71-3.63-4.06-5.13-2.2-1.4-5.17-2-7.7-2-2.62-.03-3.02.02-4.45.54-6.65 2.43-11.17 9.32-10.62 16.17.54 6.63 4.4 11.94 10.25 14.07 2.59.95 7.47 1.13 10.27.39m-12.28-26.4c1.5-1.49 3.2-2.34 5.98-2.34 2.56 0 4.27.64 5.98 2.35 1.29 1.28 1.93 2.35 2.2 5.98h-16.78c.27-2.56 1.12-4.49 2.62-5.98m32.48-4.92v7.06a23 23 0 0 1 4.05-5.13 7 7 0 0 1 4.92-1.93c1.07 0 3.84.86 3.84.86v6.4h-1.06c-.43-1.7-1.93-2.55-4.06-2.55-2.78 0-4.6 1.12-5.72 2.8s-1.55 2.54-1.55 6.17v14.1c0 1.07.43 1.71 1.5 1.71h2.78v2.14h-14.53v-2.14h1.92c1.7 0 3-1.07 3-2.78v-16.45c0-4.7-1.72-4.49-4.71-3.2v-2.14c2.78-1.07 6.2-2.57 8.76-4.92z%22 style=%22fill:%23fe001e;fill-opacity:1;display:inline%22 transform=%22translate(184.65 -280.17)scale(.98661)%22/%3E%3C/g%3E%3C/svg%3E\", ar: 4.956, mono: false },\n \"scotiabank\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220.14 0.09 71.91 10.28%22%3E%3Cpath d=%22M6.73 8.37q.24-.6.23-1.25c.02-.63-.2-1.24-.6-1.72a5 5 0 0 0-2.31-1.23q-.3-.09-.6-.22-.27-.13-.46-.33a.8.8 0 0 1-.2-.55c.01-.3.18-.57.44-.7a2 2 0 0 1 1.68 0q.36.12.69.32l.9-1.8A5 5 0 0 0 3.77.13q-.7 0-1.36.23A3 3 0 0 0 .7 2.06q-.24.6-.23 1.25c.02.68.31 1.32.8 1.8q.7.6 1.6.9l.8.27q.3.12.57.3a1 1 0 0 1 .31.36q.1.2.07.43a1 1 0 0 1-.3.58q-.44.31-.98.27-.61 0-1.18-.28a9 9 0 0 1-.95-.53L.13 9.27a4.8 4.8 0 0 0 4.62.84q.66-.23 1.21-.68.5-.46.77-1.06m5.82-.58a1.57 1.57 0 1 1 0-1.96l1.4-1.41a3.5 3.5 0 0 0-2.62-1.17c-1.96 0-3.65 1.4-3.65 3.55 0 2.16 1.7 3.56 3.66 3.56 1 0 1.96-.42 2.63-1.16zm0 0%22 style=%22fill:%23eb0f19;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.352778%22/%3E%3Cpath d=%22M17.6 3.25a3.56 3.56 0 1 0-.01 7.11 3.56 3.56 0 0 0 0-7.11m0 5.12a1.57 1.57 0 1 1 .02-3.14 1.57 1.57 0 0 1-.02 3.14m8.09-4.95h-.97v-2.1h-2.13v2.1h-.97v1.92h.97v4.85h2.13V5.34h.97zM27.72.13a1.19 1.19 0 1 0 0 2.38 1.19 1.19 0 0 0 0-2.38m-1.06 3.29h2.12v6.77h-2.12zM37.1 10.2V3.42h-2.08v.71l-.2-.16a2.6 2.6 0 0 0-1.79-.72c-1.83 0-3.37 1.63-3.37 3.55 0 1.93 1.55 3.56 3.37 3.56.67 0 1.31-.25 1.8-.72l.2-.17v.72Zm-3.72-1.8a1.6 1.6 0 1 1 .02-3.2 1.6 1.6 0 0 1-.02 3.2m6.88 1.8v-.72l.2.17a2.6 2.6 0 0 0 1.8.72c1.82 0 3.37-1.63 3.37-3.56s-1.55-3.56-3.38-3.56c-.67 0-1.31.26-1.8.72l-.19.17V.3H38.2v9.9Zm.05-3.39a1.6 1.6 0 1 1 1.6 1.6 1.6 1.6 0 0 1-1.6-1.6m13.47 3.39V3.42h-2.07v.71l-.2-.16a2.6 2.6 0 0 0-1.79-.72c-1.83 0-3.37 1.63-3.37 3.55 0 1.93 1.55 3.56 3.37 3.56.67 0 1.32-.25 1.8-.72l.2-.17v.72Zm-3.7-1.8a1.6 1.6 0 1 1 0-3.2 1.6 1.6 0 0 1 0 3.2m8.12-3.16c.69 0 1.26.57 1.26 1.27v3.7h2.12V6.24c0-1.8-1.04-2.97-2.68-2.97-.68 0-1.39.3-1.97 1.24V3.44H54.8v6.76h2.11V6.5a1.27 1.27 0 0 1 1.28-1.26m11.13 4.96-2.6-3.4 2.42-3.38h-2.48L64.7 6.16V.3h-2.13v9.9h2.13V7.4l2.14 2.8zm1.5-2.37a1.19 1.19 0 1 0-.01 2.37 1.19 1.19 0 0 0 .01-2.37m0 2.13a.95.95 0 1 1 0-1.9.95.95 0 0 1 0 1.9m0 0%22 style=%22fill:%23eb0f19;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.352778%22/%3E%3Cpath d=%22M70.82 9.2h-.19v.46h-.23v-1.3h.5c.23 0 .42.2.42.43q-.02.27-.24.38l.27.49h-.28Zm-.19-.2h.27q.18-.02.2-.2a.2.2 0 0 0-.2-.2h-.27zm0 0%22 style=%22fill:%23eb0f19;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:.352778%22/%3E%3C/svg%3E\", ar: 6.995, mono: false },\n \"soriana\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 4319.99 1077.31%22%3E%3Cg fill=%22none%22 fill-rule=%22evenodd%22%3E%3Cpath fill=%22%23d52b1e%22 d=%22M938.1 105.38c-57.36 0-136.87 24.37-194.64 103.86-10.61 14.5-19.28 32.96-24.38 51.13-17.65 61.93-5.24 130.1 33.48 182.3 29.69 40.18 67.58 70.24 101.03 96.77 16.35 12.96 51.07 45.8 62.27 59.71 16.7 20.9 29.4 33.33 44.5 79.3 9.13 27.9 10.43 64.65 5.95 85.48 104.7-106.15 219.06-243.93 219.06-393.8 0-172.18-123.34-264.75-247.26-264.75%22/%3E%3Cpath fill=%22%23b6bf00%22 d=%22M743.28 687.53c-43.7-59.53-94.24-95.66-135.96-133.74-18.2-16.57-38.14-28.79-52.89-43.5-70.76-70.3-103.83-156.94-87.11-263.62 13.2-83.65 54.74-138.6 104.91-178.97C512.34 23.82 441.28 0 361 0 161.68 0-4.95 160.15.1 357.63 9.15 714.1 455.63 1017.85 639.6 1080c98.37-50.36 150.64-144.53 150.64-241.15 0-70.45-30.18-128.49-46.96-151.32%22/%3E%3Cpath fill=%22%23d52b1e%22 d=%22M1490.98 682.22c34.28 24.6 101.98 56.22 149.96 56.22 36.88 0 68.63-14.04 68.63-54.4 0-39.5-49.78-53.57-100.29-73.75-58.32-22.83-116.58-58.93-116.58-153.73 0-126.33 91.68-193.16 224.61-193.16 87.36 0 165.3 44.8 205.6 92.32l-87.41 92.91c-39.4-34.13-83.1-59.64-125.13-59.64-34.28 0-59.93 14.04-59.93 45.66 0 43.05 36.82 53.54 99.36 79.92 59.96 25.43 121.67 62.34 121.67 152.84 0 122.84-97.69 201.87-236.52 201.87-97.75 0-179.99-41.26-212.5-67.58l68.5-119.48zm698.76-42.64c5.09-28 6.78-53.36 6.78-72.46 0-41.96-12.74-67.27-42.49-67.27-39.9 0-66.25 40.12-79.02 112.7-5.1 27.83-7.65 57.6-7.65 80.22 0 38.45 10.18 69.86 41.65 69.86 41.6 0 66.28-37.58 80.73-123.05m-11.95-244.45c60.4 0 166.6 23.5 166.6 168.48 0 19.25-.86 41.87-4.32 65.47-26.23 171.17-131.64 240.2-252.29 240.2-105.34 0-164.87-62.95-164.87-174.65 0-20.99.84-46.3 5.06-70.76 31.45-183.38 152.13-228.74 249.82-228.74m353.81 447.8h-134.54l58.82-352.67 3.2-82.48h108l2.38 60.45c29.84-53.57 71.75-73.14 105.53-73.14 23.46 0 48.39 5.96 64.5 16.98l-38.67 118.18c-15.27-8.58-34.68-15.3-54.74-15.3-34.74 0-62.08 22.03-69.33 62.02l-45.15 265.99zm181.56 0 73.75-421.45h136.98l-73.78 421.44Zm170.34-632.18c41.22 0 66.74 30.5 66.74 67.67 0 50.46-40.4 90.35-92.23 90.35-42.1 0-65.82-27.61-65.82-65.6 0-49.43 38.63-92.45 91.3-92.45m358.97 293.7c-9.63-4.32-23.45-7-39.2-7-79.17 0-107.74 119.88-107.74 191.74 0 41.9 9.5 75.94 51.22 75.94 29.62 0 50.45-19.07 59.12-49.7l36.57-210.98zm97.32 257.29-6.08 94.51h-122.62v-41.16l-4.36-.83c-30.36 35.88-69.49 55.05-121.66 55.05-93.07 0-134.85-68.97-134.85-163.6 0-179.38 99.2-310.55 280.92-310.55 36.45 0 101.68 8.7 166.9 34.93zm58.26 81.21 59.5-347.57 4.93-87.57h114.05l1.66 46.78c32.22-36.54 75.2-59.43 130.6-59.43 68.56 0 109.87 32.24 110.7 105.31 0 13.58-1.66 30.67-4.16 46.69l-51.2 295.8h-138.05l43.05-254.08c2.47-13.58 6.57-33.2 6.57-49.31 0-17-6.57-35.67-31.41-35.67-35.58 0-56.22 27.24-62.02 62.85l-47.06 276.2zm766.27-338.5c-9.56-4.32-23.5-7-39.12-7-79.15 0-107.85 119.88-107.85 191.74 0 41.9 9.57 75.94 51.35 75.94 29.5 0 50.42-19.07 59.09-49.7zm97.39 257.29-6.11 94.51h-122.6v-41.16l-4.35-.83c-30.45 35.88-69.55 55.05-121.67 55.05-93.06 0-134.78-68.97-134.78-163.6 0-179.38 99.08-310.55 280.83-310.55 36.47 0 101.68 8.7 166.97 34.93z%22/%3E%3C/g%3E%3C/svg%3E\", ar: 4.01, mono: false },\n \"ups\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xmlns:xlink=%22http://www.w3.org/1999/xlink%22 viewBox=%220 0 73.48 87.13%22%3E%3Cdefs%3E%3Cpath id=%22a%22 d=%22M-14.27-14h102v115h-102z%22/%3E%3C/defs%3E%3CclipPath id=%22b%22%3E%3Cuse xlink:href=%22%23a%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3Cpath fill=%22%231E0000%22 d=%22M36.73-.12c-14.4 0-26.28 2.74-36.75 8.29V51c0 9.15 3.44 16.8 9.95 22.14 5.87 4.82 24.67 13.06 26.8 13.99 2.13-.93 20.92-9.17 26.8-13.99 6.5-5.34 9.95-13 9.95-22.14V8.17C63 2.62 51.13-.13 36.73-.13%22 clip-path=%22url(%23b)%22/%3E%3Cdefs%3E%3Cpath id=%22c%22 d=%22M.73 8.62V51c0 8.91 3.35 16.37 9.68 21.56 5.8 4.75 24.2 12.83 26.32 13.75 2.11-.92 20.53-9 26.32-13.75 6.33-5.19 9.68-12.65 9.68-21.56V8.62c-10-5.3-22.11-8-36-8s-26 2.7-36 8%22/%3E%3C/defs%3E%3CclipPath id=%22f%22%3E%3Cuse xlink:href=%22%23c%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3CradialGradient id=%22d%22 cx=%22-14.27%22 cy=%22101%22 r=%221%22 gradientTransform=%22matrix(0 119.608 59.804 0 -6028.71 1722.48)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFDC00%22/%3E%3Cstop offset=%22.35%22 stop-color=%22%23FFBE00%22/%3E%3Cstop offset=%221%22 stop-color=%22%23C86E14%22/%3E%3C/radialGradient%3E%3Cpath fill=%22url(%23d)%22 d=%22M.73.63h72v85.68h-72z%22 clip-path=%22url(%23f)%22/%3E%3Cdefs%3E%3Cpath id=%22g%22 d=%22M-14.27-14h102v115h-102z%22/%3E%3C/defs%3E%3CclipPath id=%22h%22%3E%3Cuse xlink:href=%22%23g%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3Cpath fill=%22%23C86E14%22 d=%22M59.7 81.45v3.67h.67V83.6h.1l1 1.53h.8l-1.1-1.62c.48-.11.8-.46.8-.97 0-.53-.32-1.08-1.22-1.08zm.97.53c.57 0 .64.28.64.52 0 .35-.15.58-.86.58h-.08v-1.1zm2.6 1.32a2.49 2.49 0 1 1-4.98-.02 2.49 2.49 0 0 1 4.98.02m-2.5-3.03a3.03 3.03 0 0 0 0 6.05 3.02 3.02 0 1 0 0-6.05%22 clip-path=%22url(%23h)%22/%3E%3Cdefs%3E%3Cpath id=%22i%22 d=%22M35.49 33.65v19.24c.45.17 1.18.38 2.03.38 3.6 0 5.33-3.3 5.33-10.15 0-7.02-1.5-9.92-5.14-9.92-.85 0-1.71.2-2.22.45M19.76 52.4V28.79H26v27.17c-2.4 1.63-5.6 2.52-9.44 2.52-6.2 0-9.34-3.37-9.34-10V28.79h6.26v19.97c0 1.77.43 4.4 3.3 4.4 1.28 0 2.29-.3 2.97-.76m9.46-22.02c2.27-1.46 5.03-2.23 8.45-2.23 7.47 0 11.58 5.68 11.58 14.8 0 9.16-4 15.42-10.94 15.42-1.29 0-2.2-.17-2.82-.36V71.2h-6.27zm31.46 19.44c-.04-1.96-1.15-3.03-3.9-4.65-5.17-3.03-6.1-5.52-6.11-8.85-.03-5.06 4.28-8.05 8.4-8.17 3.44-.1 5.77 1.2 6.87 2.04v5.44a8.4 8.4 0 0 0-5.6-2.57c-1.78-.02-3.63.77-3.69 3-.06 2.27 1.78 3.17 4.12 4.54 5.23 3.08 6.24 5.84 6.12 9.5-.12 4-2.88 8.38-9.06 8.38a13.7 13.7 0 0 1-6.89-1.95v-5.77c1.6 1.43 4 2.54 5.99 2.55h.02c2.29 0 3.79-1.31 3.73-3.49M4.04 26.76V51c0 7.9 2.92 14.49 8.47 19.01C17.4 74 32.47 80.82 36.72 82.7c4.2-1.85 19.23-8.59 24.22-12.69 5.58-4.6 8.47-11.04 8.47-19.01V9.51c-4.45-.41-9.06-.69-13.77-.69-17.45 0-36.15 3.75-51.61 17.94%22/%3E%3C/defs%3E%3CclipPath id=%22k%22%3E%3Cuse xlink:href=%22%23i%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3CradialGradient id=%22j%22 cx=%22-14.27%22 cy=%22101%22 r=%221%22 gradientTransform=%22matrix(0 118.6833 59.3417 0 -5981.98 1709.35)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%234B3333%22/%3E%3Cstop offset=%22.35%22 stop-color=%22%23351A1A%22/%3E%3Cstop offset=%22.85%22 stop-color=%22%231E0000%22/%3E%3Cstop offset=%221%22 stop-color=%22%231E0000%22/%3E%3C/radialGradient%3E%3Cpath fill=%22url(%23j)%22 d=%22M4.04 8.82h65.38V82.7H4.04z%22 clip-path=%22url(%23k)%22/%3E%3Cdefs%3E%3Cpath id=%22l%22 d=%22M4.04 51c0 7.9 2.92 14.49 8.46 19.01C17.4 74 32.48 80.82 36.73 82.7v-.5c-3.53-1.55-18.98-8.5-23.94-12.54-5.43-4.42-8.3-10.88-8.3-18.66z%22/%3E%3C/defs%3E%3CclipPath id=%22n%22%3E%3Cuse xlink:href=%22%23l%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22m%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.92%22 y2=%22100.92%22 gradientTransform=%22rotate(-136 638.5 -2395.2)scale(45.5362)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23E49F15%22/%3E%3Cstop offset=%22.02%22 stop-color=%22%23E39C15%22/%3E%3Cstop offset=%22.18%22 stop-color=%22%23DC9116%22/%3E%3Cstop offset=%22.4%22 stop-color=%22%23D88A17%22/%3E%3Cstop offset=%221%22 stop-color=%22%23D78817%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23m)%22 d=%22M20.95 99.04-11.8 67.4l31.6-32.74L52.57 66.3%22 clip-path=%22url(%23n)%22/%3E%3Cdefs%3E%3Cpath id=%22o%22 d=%22M68.97 51c0 7.84-2.8 14.12-8.31 18.66-4.8 3.95-19.3 10.5-23.93 12.55v.49c4.2-1.85 19.23-8.59 24.21-12.7 5.59-4.59 8.48-11.03 8.48-19z%22/%3E%3C/defs%3E%3CclipPath id=%22q%22%3E%3Cuse xlink:href=%22%23o%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22p%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.09%22 y2=%22101.09%22 gradientTransform=%22rotate(-44 5492.21 -3109.85)scale(45.5362)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%221%22 stop-color=%22%23D89016%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23p)%22 d=%22m20.89 66.3 32.75-31.64L85.26 67.4 52.5 99.03%22 clip-path=%22url(%23q)%22/%3E%3Cdefs%3E%3Cpath id=%22r%22 d=%22m4.04 26.76.45.2C17.54 15.06 34.27 9.27 55.65 9.27c4.17 0 8.54.22 13.32.65l.45-.41c-4.45-.41-9.06-.69-13.77-.69-17.45 0-36.15 3.75-51.61 17.94%22/%3E%3C/defs%3E%3CclipPath id=%22t%22%3E%3Cuse xlink:href=%22%23r%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22s%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.97%22 y2=%22100.97%22 gradientTransform=%22rotate(-19.2 19730.5 -6247.85)scale(67.419)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23E49F15%22/%3E%3Cstop offset=%22.97%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23s)%22 d=%22m-1.6 10.79 63.95-22.27L75.05 25 11.11 47.26%22 clip-path=%22url(%23t)%22/%3E%3Cdefs%3E%3Cpath id=%22u%22 d=%22M42.4 43.12c0 5.53-1.1 9.7-4.88 9.7v.45c3.6 0 5.33-3.3 5.33-10.15z%22/%3E%3C/defs%3E%3CclipPath id=%22w%22%3E%3Cuse xlink:href=%22%23u%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22v%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.09%22 y2=%22101.09%22 gradientTransform=%22rotate(-63.3 920.39 -716.09)scale(11.4647)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%23BF7312%22/%3E%3Cstop offset=%221%22 stop-color=%22%23BF7312%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23v)%22 d=%22m33.45 51.22 5.15-10.24 8.32 4.19-5.15 10.24%22 clip-path=%22url(%23w)%22/%3E%3Cdefs%3E%3Cpath id=%22x%22 d=%22M35.49 52.9c.45.16 1.18.37 2.03.37v-.45c-.61 0-1.17-.12-1.58-.25z%22/%3E%3C/defs%3E%3CclipPath id=%22z%22%3E%3Cuse xlink:href=%22%23x%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22y%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.01%22 y2=%22101.01%22 gradientTransform=%22rotate(-173 12.05 -79.76)scale(2.064)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%23F0AF13%22/%3E%3Cstop offset=%221%22 stop-color=%22%23F0AF13%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23y)%22 d=%22m37.5 53.52-2.1-.26.12-.93 2.09.25%22 clip-path=%22url(%23z)%22/%3E%3Cdefs%3E%3Cpath id=%22A%22 d=%22m35.49 33.65.45.3a5 5 0 0 1 1.77-.3v-.45c-.85 0-1.71.2-2.22.45%22/%3E%3C/defs%3E%3CclipPath id=%22C%22%3E%3Cuse xlink:href=%22%23A%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22B%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.02%22 y2=%22101.02%22 gradientTransform=%22rotate(-14.7 1017.85 -360.03)scale(2.26)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23A65E0C%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23A65E0C%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23B)%22 d=%22m35.3 33.25 2.27-.6.32 1.25-2.26.59%22 clip-path=%22url(%23C)%22/%3E%3Cdefs%3E%3Cpath id=%22D%22 d=%22M37.7 33.65c3.7 0 4.7 3.45 4.7 9.47h.45c0-7.02-1.5-9.92-5.14-9.92z%22/%3E%3C/defs%3E%3CclipPath id=%22F%22%3E%3Cuse xlink:href=%22%23D%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22E%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.09%22 y2=%22101.09%22 gradientTransform=%22rotate(-116.9 301.64 -605.19)scale(11.171)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23BF7312%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23BF7312%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23E)%22 d=%22m38.76 45.19-5.05-9.96 8.08-4.1 5.06 9.96%22 clip-path=%22url(%23F)%22/%3E%3Cdefs%3E%3Cpath id=%22G%22 d=%22M50.22 36.32h.45c-.03-5.06 4.28-8.04 8.4-8.17l-.01-.44c-4.56.13-8.87 3.46-8.84 8.6%22/%3E%3C/defs%3E%3CclipPath id=%22I%22%3E%3Cuse xlink:href=%22%23G%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22H%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.09%22 y2=%22101.09%22 gradientTransform=%22rotate(137.9 -303.69 -564.18)scale(12.334)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%23D89016%22/%3E%3Cstop offset=%221%22 stop-color=%22%23D89016%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23H)%22 d=%22m63.36 32.45-9.18 8.29-8.27-9.16 9.17-8.3%22 clip-path=%22url(%23I)%22/%3E%3Cdefs%3E%3Cpath id=%22J%22 d=%22M56.65 36.06h.45c.02-.6.3-2.55 3.17-2.55l.07-.45h-.06c-1.76 0-3.57.8-3.63 3%22/%3E%3C/defs%3E%3CclipPath id=%22L%22%3E%3Cuse xlink:href=%22%23J%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22K%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.93%22 y2=%22100.93%22 gradientTransform=%22rotate(-41 683.04 -387.68)scale(4.7434)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23D78817%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23D78817%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23K)%22 d=%22m55.17 34.35 3.58-3.11 3.07 3.53-3.58 3.12%22 clip-path=%22url(%23L)%22/%3E%3Cdefs%3E%3Cpath id=%22M%22 d=%22M60.27 33.51c2.6 0 4.8 1.69 6.13 3.23l-.45-1.1a8.4 8.4 0 0 0-5.61-2.58z%22/%3E%3C/defs%3E%3CclipPath id=%22O%22%3E%3Cuse xlink:href=%22%23M%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22N%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.06%22 y2=%22101.06%22 gradientTransform=%22rotate(-152.5 74.72 -359.74)scale(7.0756)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23BF7312%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23N)%22 d=%22m65.09 39.25-6.32-3.3 2.81-5.4 6.32 3.3%22 clip-path=%22url(%23O)%22/%3E%3Cdefs%3E%3Cpath id=%22P%22 d=%22m59.06 27.7.01.45c3.44-.1 5.77 1.2 6.88 2.04l.45-.22a11 11 0 0 0-7.34-2.27%22/%3E%3C/defs%3E%3CclipPath id=%22R%22%3E%3Cuse xlink:href=%22%23P%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22Q%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.98%22 y2=%22100.98%22 gradientTransform=%22rotate(17.9 -2574.26 161.57)scale(7.6762)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%23E49F15%22/%3E%3Cstop offset=%221%22 stop-color=%22%23E49F15%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23Q)%22 d=%22m59.75 25.55 7.38 2.38-1.43 4.4-7.37-2.38%22 clip-path=%22url(%23R)%22/%3E%3Cdefs%3E%3Cpath id=%22S%22 d=%22M57.83 58.48v.45c5.67 0 9.36-3.78 9.52-8.82l-.45-.01c-.12 4-2.89 8.38-9.07 8.38%22/%3E%3C/defs%3E%3CclipPath id=%22U%22%3E%3Cuse xlink:href=%22%23S%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22T%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.92%22 y2=%22100.92%22 gradientTransform=%22scale(-12.968 12.968)rotate(44.4 109.2 63.52)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23D78817%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23D78817%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23T)%22 d=%22m71.76 54.6-9.27 9.08-9.08-9.26 9.28-9.08%22 clip-path=%22url(%23U)%22/%3E%3Cdefs%3E%3Cpath id=%22V%22 d=%22M50.5 56.79a14 14 0 0 0 7.33 2.14v-.45a13.7 13.7 0 0 1-6.89-1.95z%22/%3E%3C/defs%3E%3CclipPath id=%22X%22%3E%3Cuse xlink:href=%22%23V%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22W%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.03%22 y2=%22101.03%22 gradientTransform=%22scale(7.64 -7.64)rotate(-16.1 -387.2 -27.03)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23BF7312%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23W)%22 d=%22m51.06 54.58 7.4 2.14-1.2 4.16-7.4-2.14%22 clip-path=%22url(%23X)%22/%3E%3Cdefs%3E%3Cpath id=%22Y%22 d=%22M50.94 50.77c1.6 1.42 4 2.53 5.99 2.54v-.45c-2.23-.01-4.8-1.45-6.44-3.1z%22/%3E%3C/defs%3E%3CclipPath id=%22aa%22%3E%3Cuse xlink:href=%22%23Y%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22Z%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.96%22 y2=%22100.96%22 gradientTransform=%22rotate(-154.1 67.44 -362.63)scale(7.3418)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%221%22 stop-color=%22%23F0AF13%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23Z)%22 d=%22m55.7 55.84-6.6-3.2 2.62-5.41 6.6 3.2%22 clip-path=%22url(%23aa)%22/%3E%3Cdefs%3E%3Cpath id=%22ab%22 d=%22M60.23 49.84c.05 2-1.34 3.04-3.3 3.02v.45c2.3.01 3.8-1.3 3.75-3.49z%22/%3E%3C/defs%3E%3CclipPath id=%22ad%22%3E%3Cuse xlink:href=%22%23ab%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22ac%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.08%22 y2=%22101.08%22 gradientTransform=%22rotate(-42.6 724.8 -399.27)scale(5.1262)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%23D89016%22/%3E%3Cstop offset=%221%22 stop-color=%22%23D89016%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23ac)%22 d=%22m55.19 51.43 3.8-3.5 3.5 3.79-3.82 3.5%22 clip-path=%22url(%23ad)%22/%3E%3Cdefs%3E%3Cpath id=%22ae%22 d=%22M50.22 36.32c.01 3.5 1.05 6.14 6.32 9.24 2.83 1.66 3.65 2.62 3.7 4.28l.44-.02c-.04-1.96-1.16-3.03-3.9-4.65-5.17-3.03-6.1-5.52-6.1-8.85z%22/%3E%3C/defs%3E%3CclipPath id=%22ag%22%3E%3Cuse xlink:href=%22%23ae%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22af%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.04%22 y2=%22101.04%22 gradientTransform=%22rotate(55.2 -1779.54 -562.57)scale(17.0604)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23D89016%22/%3E%3Cstop offset=%22.4%22 stop-color=%22%23BF7312%22/%3E%3Cstop offset=%22.6%22 stop-color=%22%23BF7312%22/%3E%3Cstop offset=%221%22 stop-color=%22%23D89016%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23af)%22 d=%22m57.28 31.41 9.74 14.02-13.4 9.3-9.74-14.01%22 clip-path=%22url(%23ag)%22/%3E%3Cdefs%3E%3Cpath id=%22ah%22 d=%22M60.77 40.6c5.23 3.08 6.24 5.84 6.12 9.5l.45.01c.13-3.73-.9-6.69-6.34-9.9-2.22-1.34-3.96-2.07-3.9-4.14l-.45-.01c-.06 2.27 1.78 3.17 4.12 4.54%22/%3E%3C/defs%3E%3CclipPath id=%22aj%22%3E%3Cuse xlink:href=%22%23ah%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22ai%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.96%22 y2=%22100.96%22 gradientTransform=%22rotate(53.8 -1890.23 -569.12)scale(17.6596)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23D78817%22/%3E%3Cstop offset=%22.4%22 stop-color=%22%23E49F15%22/%3E%3Cstop offset=%22.6%22 stop-color=%22%23E49F15%22/%3E%3Cstop offset=%221%22 stop-color=%22%23D78817%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23ai)%22 d=%22m63.67 30.87 10.5 14.34L60.38 55.3 49.9 40.96%22 clip-path=%22url(%23aj)%22/%3E%3Cdefs%3E%3Cpath id=%22ak%22 d=%22M-14.27-14h102v115h-102z%22/%3E%3C/defs%3E%3CclipPath id=%22al%22%3E%3Cuse xlink:href=%22%23ak%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3Cpath fill=%22%238F4A02%22 d=%22M35.49 71.2h-6.27l-.45.45h7.17%22 clip-path=%22url(%23al)%22/%3E%3Cdefs%3E%3Cpath id=%22am%22 d=%22M35.94 58.59q1.06.23 2.37.23v-.45a10 10 0 0 1-2.82-.36z%22/%3E%3C/defs%3E%3CclipPath id=%22ao%22%3E%3Cuse xlink:href=%22%23am%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22an%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.02%22 y2=%22101.02%22 gradientTransform=%22matrix(2.874 .445 .445 -2.874 31.54 354.88)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23A65E0C%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23A65E0C%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23an)%22 d=%22m35.56 57.59 2.87.44-.19 1.22-2.87-.45%22 clip-path=%22url(%23ao)%22/%3E%3Cdefs%3E%3Cpath id=%22ap%22 d=%22M49.25 42.96c0 9.15-3.99 15.4-10.94 15.4v.46c8.07 0 11.39-7.71 11.39-15.86z%22/%3E%3C/defs%3E%3CclipPath id=%22ar%22%3E%3Cuse xlink:href=%22%23ap%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22aq%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.9%22 y2=%22100.9%22 gradientTransform=%22rotate(125.6 -631.9 -879.37)scale(19.5286)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23A65E0C%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23A65E0C%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23aq)%22 d=%22M57.2 48.33 45.85 64.21 30.8 53.45l11.37-15.88%22 clip-path=%22url(%23ar)%22/%3E%3Cdefs%3E%3Cpath id=%22as%22 d=%22m28.77 30.14.45.24c2.28-1.46 5.03-2.22 8.45-2.22v-.46c-3.47 0-6.5.8-8.9 2.44%22/%3E%3C/defs%3E%3CclipPath id=%22au%22%3E%3Cuse xlink:href=%22%23as%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22at%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.03%22 y2=%22101.03%22 gradientTransform=%22rotate(165.5 -107.94 -440.95)scale(9.218)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%23F0AF13%22/%3E%3Cstop offset=%221%22 stop-color=%22%23F0AF13%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23at)%22 d=%22m38.32 30.22-8.99 2.32-1.2-4.67 8.98-2.32%22 clip-path=%22url(%23au)%22/%3E%3Cdefs%3E%3Cpath id=%22av%22 d=%22M37.67 28.16c7.47 0 11.58 5.67 11.58 14.8h.45c0-8.08-3.38-15.26-12.03-15.26z%22/%3E%3C/defs%3E%3CclipPath id=%22ax%22%3E%3Cuse xlink:href=%22%23av%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22aw%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.9%22 y2=%22100.9%22 gradientTransform=%22rotate(51.9 -2162.24 -642.68)scale(19.428)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%23A65E0C%22/%3E%3Cstop offset=%221%22 stop-color=%22%23A65E0C%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23aw)%22 d=%22m45.12 21.86 11.99 15.29L42.25 48.8 30.26 33.51%22 clip-path=%22url(%23ax)%22/%3E%3Cdefs%3E%3Cpath id=%22ay%22 d=%22M-14.27-14h102v115h-102z%22/%3E%3C/defs%3E%3CclipPath id=%22az%22%3E%3Cuse xlink:href=%22%23ay%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3Cpath fill=%22%23FFC20E%22 d=%22M13.5 28.79H7.22l-.45-.45h7.16zm12.51 0h-6.25l-.45-.45h7.15z%22 clip-path=%22url(%23az)%22/%3E%3Cpath fill=%22%23D78817%22 d=%22M4.04 51V26.76l.45.2V51zM66.4 36.74v-6.77l-.45.22v5.44zM13.94 48.76V28.34l-.45.45v19.96z%22 clip-path=%22url(%23az)%22/%3E%3Cpath fill=%22%23D89016%22 d=%22M68.97 51V9.92l.45-.41V51zm-18.48-1.24v7.03l.45-.26v-5.77zM19.76 52.4V28.79l-.45-.45v23.81zM7.23 48.48V28.79l-.45-.45v20.14z%22 clip-path=%22url(%23az)%22/%3E%3Cdefs%3E%3Cpath id=%22aA%22 d=%22M6.78 48.48c0 6.63 3.11 10.45 9.8 10.45v-.45c-6.2 0-9.35-3.37-9.35-10z%22/%3E%3C/defs%3E%3CclipPath id=%22aC%22%3E%3Cuse xlink:href=%22%23aA%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22aB%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.11%22 y2=%22101.11%22 gradientTransform=%22rotate(47.1 -1815.33 -457.46)scale(14.319)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23D89016%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23D89016%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23aB)%22 d=%22m12.04 43.6 9.74 10.48-10.46 9.73-9.75-10.5%22 clip-path=%22url(%23aC)%22/%3E%3Cdefs%3E%3Cpath id=%22aD%22 d=%22M16.57 58.48v.45c4 0 7.24-.93 9.89-2.73l-.45-.24c-2.4 1.63-5.6 2.52-9.44 2.52%22/%3E%3C/defs%3E%3CclipPath id=%22aF%22%3E%3Cuse xlink:href=%22%23aD%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22aE%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.98%22 y2=%22100.98%22 gradientTransform=%22scale(-10.2546 10.2546)rotate(14.5 366.91 99.18)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23A65E0C%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23A65E0C%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%238F4A02%22/%3E%3Cstop offset=%221%22 stop-color=%22%238F4A02%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23aE)%22 d=%22m27.18 58.74-9.99 2.58-1.34-5.17 9.99-2.59%22 clip-path=%22url(%23aF)%22/%3E%3Cdefs%3E%3Cpath id=%22aG%22 d=%22M16.8 52.71v.45a5.3 5.3 0 0 0 2.96-.76l-.45-.25c-.64.36-1.52.56-2.52.56%22/%3E%3C/defs%3E%3CclipPath id=%22aI%22%3E%3Cuse xlink:href=%22%23aG%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22aH%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22101.01%22 y2=%22101.01%22 gradientTransform=%22matrix(2.9715 -.73 -.73 -2.9715 132.9 342.77)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%23F0AF13%22/%3E%3Cstop offset=%221%22 stop-color=%22%23F0AF13%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23aH)%22 d=%22m16.56 52.2 3.03-.74.4 1.64-3.03.75%22 clip-path=%22url(%23aI)%22/%3E%3Cdefs%3E%3Cpath id=%22aJ%22 d=%22M13.5 48.76c0 1.77.42 4.4 3.3 4.4v-.45c-2.21 0-2.86-1.78-2.86-3.95z%22/%3E%3C/defs%3E%3CclipPath id=%22aL%22%3E%3Cuse xlink:href=%22%23aJ%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3ClinearGradient id=%22aK%22 x1=%22-14.27%22 x2=%22-13.27%22 y1=%22100.92%22 y2=%22100.92%22 gradientTransform=%22rotate(-126.2 123.53 -275.42)scale(5.506)%22 gradientUnits=%22userSpaceOnUse%22%3E%3Cstop offset=%220%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.05%22 stop-color=%22%23FFC20E%22/%3E%3Cstop offset=%22.95%22 stop-color=%22%23D78817%22/%3E%3Cstop offset=%221%22 stop-color=%22%23D78817%22/%3E%3C/linearGradient%3E%3Cpath fill=%22url(%23aK)%22 d=%22m14.65 54.74-3.26-4.45 4.25-3.1 3.26 4.44%22 clip-path=%22url(%23aL)%22/%3E%3Cdefs%3E%3Cpath id=%22aM%22 d=%22M-14.27-14h102v115h-102z%22/%3E%3C/defs%3E%3CclipPath id=%22aN%22%3E%3Cuse xlink:href=%22%23aM%22 overflow=%22visible%22/%3E%3C/clipPath%3E%3Cpath fill=%22%23D78817%22 d=%22M28.77 30.14v41.51l.45-.45V30.38%22 clip-path=%22url(%23aN)%22/%3E%3Cpath fill=%22%23BF7312%22 d=%22M35.94 52.57V33.95l-.45-.3v19.24zm0 6.02v13.06l-.45-.45V58.01zm-9.48-2.39V28.34l-.45.45v27.17%22 clip-path=%22url(%23aN)%22/%3E%3C/svg%3E\", ar: 0.843, mono: false },\n \"usps\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%221.12 1.45 179.67 27.5%22%3E%3Cpath fill=%22%2315569c%22 d=%22M49.56.15H7.41L7.4.3s24.78 5.1 25.27 5.18c5.7 1 5.52 2.1 5.52 2.1 3.99-.02 4.48.14 5.17.73 2.1 1.75-1.3 6.91-1.3 6.91-.5.36-37.36 14.6-37.36 14.6h38.57zm8.09 0-1.6 7.54c-.58 2.6 1.18 3.78 4.1 3.78 2.94 0 5.17-1.18 5.73-3.78 1.63-7.54-.02 0 1.63-7.54h-2.46l-1.45 6.8c-.37 1.73-1.29 2.77-3.09 2.77-1.88-.02-2.26-1.06-1.88-2.78L60.1.15zm12.2 0L67.5 11.27h2.17l1.72-8.25h.05l2.75 8.25h3.08L79.63.15h-2.17L75.7 8.49h-.03L73.04.15Zm12.13 0-2.35 11.12h2.45L84.43.15Zm4.1 0-.4 1.77h3.47l-1.99 9.35h2.45l1.99-9.35h3.45l.38-1.77zm11 0L94.7 11.27h8.06l.37-1.77h-5.6l.64-3.04h4.89l.35-1.64h-4.88l.62-2.9h5.6l.37-1.77zm9.82 0-2.35 11.12h5.02c3.1 0 6.08-2.05 6.75-6.05.48-2.83-.65-5.07-4.02-5.07zm18.44 0c-2.89 0-4.32 1.02-4.53 2.62-.36 2.67 4.36 4.25 4 5.85-.22.93-1.36.88-2.3.88h-3.02l-.37 1.77h3.75c3.07 0 4.4-1.1 4.65-2.62.45-2.73-4.34-4.14-3.96-5.9.12-.55.72-.83 2.05-.83h2.63l.38-1.77zm4.54 0-.38 1.77h3.45l-1.98 9.35h2.45l1.98-9.35h3.46l.37-1.77zm11.95 0-6.37 11.12h2.45l4.88-8.91.98 7.14h-3.5l-.97 1.77h7.2L144.76.15zm5.64 0-.39 1.77h3.46l-1.99 9.35H151l2-9.35h3.45l.38-1.77zm10.98 0-2.37 11.12h8.06l.37-1.77h-5.6l.64-3.04h4.88l.36-1.64h-4.88l.62-2.9h5.6l.36-1.77zm13.44 0c-2.89 0-4.31 1.02-4.53 2.62-.36 2.67 4.35 4.25 4 5.85-.22.93-1.37.88-2.3.88h-3.02l-.37 1.77h3.75c3.07 0 4.4-1.1 4.65-2.62.45-2.73-4.34-4.14-3.97-5.9.13-.55.73-.83 2.07-.83h2.61l.4-1.77zm-62.9 1.77h2.5c2.04 0 2.76 1.5 2.45 3.27-.43 2.5-2.03 4.31-4.8 4.31h-1.75zM27.67 7.01H5.96L1.12 29.8s14.83-7.27 16.64-8.2c3.72-1.92 8.86-4.44 13.6-6.06.91-.3 4.79-1.5 7.05-1.9.87-.16 1.24-.3 1.23-.47-.03-.47-.91-.5-2.4-.42-4.55.21-13.26 3.68-15.77 5L18.64 9h18.09c.6-1.7-5.72-1.96-9.07-1.98zm9.59 2.11q-.18 0-.4.3c-.14.17-.25.3-.6.48-.57.27-2.03.42-2.71.48-.66.06-.84.12-.85.38 0 .22.1.35 1.04.35 2.17 0 6.07-.81 7.24-.44.62.2.12 1.3-.38 2.76-.2.56.19.52.4.27a10 10 0 0 0 1.36-3.04c.15-1.34-1-1.54-2.58-1.54zm32.05 9.37c-3.44 0-6.31 1.8-7.15 5.75C61.48 27.4 63.4 30 66.83 30c3.48 0 6.27-1.72 7.14-5.76.7-3.3-1.26-5.75-4.67-5.75m98.14 0c-3.41 0-6.7 1.76-7.53 5.75-.85 3.98 1.67 5.76 5.09 5.76q1.4-.02 2.74-.24l.6-1.91c-.88.22-1.81.39-2.97.39-2.22 0-3.47-1.5-2.95-4 .53-2.52 2.42-3.99 4.63-3.99 1.14 0 1.91.16 2.6.36l.23-1.88a14 14 0 0 0-2.44-.24m-87.48.2c-2.89 0-4.32 1.02-4.53 2.62-.36 2.67 4.35 4.25 4 5.84-.22.93-1.37.89-2.3.89h-3.02l-.37 1.76h3.75c3.07 0 4.4-1.1 4.65-2.62.45-2.72-4.34-4.14-3.97-5.9.13-.55.73-.83 2.07-.83h2.62l.39-1.77zm4.54 0-.38 1.76h3.45L85.6 29.8h2.45l1.99-9.35h3.45l.37-1.77zm35.8 0c-2.9 0-4.32 1.02-4.54 2.62-.36 2.67 4.36 4.25 4 5.84-.21.93-1.36.89-2.3.89h-3.02l-.37 1.76h3.75c3.07 0 4.4-1.1 4.65-2.62.45-2.72-4.33-4.14-3.97-5.9.13-.55.73-.83 2.07-.83h2.62l.38-1.77zm5.4 0-2.38 11.11h8.07l.37-1.76h-5.6l.64-3.04h4.88l.36-1.65h-4.88l.61-2.9h5.6l.37-1.77zm9.82 0-2.35 11.11h2.45l1.98-9.36h2.2c1.36 0 1.49.76 1.35 1.46-.26 1.31-1.41 1.84-2.67 1.84-.23 0-.62.02-.93-.03l2.02 6.1h2.68l-1.83-4.8a3.6 3.6 0 0 0 3.18-3.49c.14-1.86-.73-2.84-2.9-2.84zm36.34 0-2.37 11.11h8.06l.37-1.76h-5.6l.64-3.04h4.89l.35-1.65h-4.88l.62-2.9h5.6l.37-1.77zm-118.14 0L51.36 29.8h2.45l1.99-9.35h2c.9 0 1.51.45 1.25 1.66-.14.67-.74 1.82-2.42 1.82-.37 0-.77-.05-1.08-.08l.12 1.61c.36.04.78.1 1.17.1 2.2 0 4.14-1.28 4.59-3.39.29-1.4.01-3.48-2.4-3.48zm42.75 0L90.1 29.8h2.45l4.88-8.91.98 7.15h-3.5l-.97 1.76h7.2L99.4 18.7zm8.3 0L102.4 29.8h7.53l.38-1.76h-5.07l1.99-9.35zm40.13 0 1.67 11.11h2.9l6.33-11.11h-2.42l-4.88 8.91-1.15-8.91zm12.38 0-2.36 11.11h2.45l2.36-11.11zM68.9 20.25c2.26 0 3.02 1.74 2.54 3.99-.53 2.51-2.01 4-4.23 4-2.3 0-3.06-1.85-2.58-4 .58-2.51 2.05-3.99 4.27-3.99%22/%3E%3Cpath fill=%22%23ed192d%22 d=%22m54.59 14.57-.18.82h126.2l.17-.82z%22/%3E%3C/svg%3E\", ar: 6.533, mono: false },\n \"visa\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 1000 324.06%22%3E%3Cpath fill=%22%231434cb%22 d=%22M651.19.5c-70.93 0-134.32 36.77-134.32 104.69 0 77.9 112.42 83.28 112.42 122.42 0 16.48-18.88 31.23-51.14 31.23-45.77 0-79.98-20.61-79.98-20.61l-14.64 68.55s39.41 17.41 91.73 17.41c77.55 0 138.58-38.57 138.58-107.66 0-82.32-112.89-87.54-112.89-123.86 0-12.91 15.5-27.05 47.66-27.05 36.29 0 65.89 14.99 65.89 14.99l14.33-66.2S696.61.5 651.18.5ZM2.22 5.5.5 15.49s29.84 5.46 56.72 16.36c34.61 12.49 37.07 19.77 42.9 42.35l63.51 244.83h85.14L379.93 5.5h-84.94l-84.28 213.17-34.39-180.7c-3.15-20.68-19.13-32.48-38.68-32.48zm411.87 0-66.63 313.53h81L494.85 5.5zm451.76 0c-19.53 0-29.88 10.46-37.47 28.73l-118.67 284.8h84.94l16.43-47.47h103.48l9.99 47.47h74.95L934.12 5.5zm11.05 84.71 25.18 117.65h-67.45z%22/%3E%3C/svg%3E\", ar: 3.086, mono: false },\n \"walmart\": { src: \"data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 xml:space=%22preserve%22 viewBox=%220 0 264.58 50.3%22%3E%3Cg style=%22font-variation-settings:normal;opacity:1;vector-effect:none;fill:%230053e2;fill-opacity:1;stroke-width:1.96006829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:%23000;stop-opacity:1%22%3E%3Cpath fill=%22%23fff%22 d=%22m120.6 0-14.75 74.6L89.32 0H60.59L44.06 74.6 29.32 0H0l23.91 113.96h34.13l16.7-75.67 16.68 75.67h33.38L148.56 0Zm59.91 98.16c-6.61 0-10.22-4.1-10.22-9.72 0-7.3 5.72-10.18 12.93-12.77 3.76-1.43 7.53-2.91 10.08-5.16v12.6c0 9.58-4.97 15.05-12.78 15.05m3.9-77.19c-18.19 0-30.97 6.24-35.63 10.64v24.3a49 49 0 0 1 31.88-12c9.32 0 12.78 2.6 12.78 7.91 0 4.56-4.81 6.39-18.2 9.27-20.3 4.25-32.03 11.7-32.03 29.48 0 16.4 10.68 25.98 26.17 25.98 12.97 0 20.72-6.08 24.96-14.25v11.67h27.96V58.05c0-25.68-13.23-37.08-37.89-37.08M261.8 0h-29.02v113.96h29.03zm116.48 21.28c-14.08 0-23.18 8.55-27.94 19.94-2.55-12.2-11.03-19.94-22.89-19.94-13.42 0-22.18 7.91-26.61 19.02V23.86h-28.57v90.1h29.02V63.99c0-12.3 4.06-19.3 12.78-19.3 7.07 0 9.48 4.87 9.48 12.47v56.83h29.02v-50c0-12.3 4.06-19.29 12.78-19.29 7.06 0 9.47 4.86 9.47 12.46V114h29.02V53.03c0-18.99-8.87-31.75-25.56-31.75m69.16 76.88c-6.61 0-10.22-4.1-10.22-9.72 0-7.3 5.72-10.18 12.94-12.77 3.76-1.43 7.53-2.91 10.07-5.16v12.6c0 9.58-4.96 15.05-12.79 15.05m3.91-77.19c-18.2 0-30.98 6.24-35.64 10.64v24.3a49 49 0 0 1 31.88-12c9.32 0 12.78 2.6 12.78 7.91 0 4.56-4.81 6.39-18.2 9.27-20.3 4.25-32.03 11.7-32.03 29.48 0 16.4 10.68 25.98 26.17 25.98 12.97 0 20.72-6.08 24.96-14.25v11.67h27.97V58.05c0-25.68-13.24-37.08-37.9-37.08m76.25 28.34V23.86h-28.42v90.1h29.02V75.68c0-17.62 10.83-22.33 21.2-22.33 3.46 0 6.77.45 8.27.9V23.26c-16.33-.8-26.25 9.74-30.07 26.06M613 46.65v-22.8h-18.5V6.39h-29.02v77.5c0 21.72 12.18 31.9 31.58 31.9 9.03 0 13.84-1.82 15.94-3.19V89.95c-1.65 1.22-4.36 2.13-7.82 2.13-6.46.15-10.68-2.74-10.68-12.3V46.65z%22 style=%22font-variation-settings:normal;vector-effect:none;fill:%230053e2;fill-opacity:1;stroke-width:1.96006829;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:%23000;stop-opacity:1%22 transform=%22scale(.43162)%22/%3E%3C/g%3E%3C/svg%3E\", ar: 5.26, mono: false },\n}\n","/**\n * Shared catalog of the brands a checkout names: parcel carriers, card networks, wallets and cash payment points.\n *\n * Keys are the stable identifiers the providers already send (`ShippingRate.carrier` of Skydropx / Envía, the\n * `PaymentPoint.payment_point` or `id` of the payment addon, a `PaymentMethod.key`). Nothing here decides what a shop\n * offers: the server lists the rates and methods; this only gives each one its commercial name and a mark.\n *\n * Marks are drawn by `<BrandMark>` with this precedence: the provider's `logo_url` > the real logo bundled in\n * `brands/assets` (inline data URI, no request; provenance in `brands/LOGOS.md`) > a typographic badge (brand color +\n * short wordmark) for the brands without an available logo. The `bg`/`fg` colors here are close approximations of each\n * brand's public color and only paint that fallback badge.\n */\n\nimport { LOGOS, type LogoAsset } from './brands/logos.generated.js'\n\nexport type BrandKind = 'carrier' | 'card' | 'wallet' | 'cash' | 'bank'\n\nexport type Brand = {\n key: string\n /** Commercial name, as the brand writes it. */\n name: string\n kind: BrandKind\n /** Badge background. */\n bg: string\n /** Badge text color (AA on `bg`). */\n fg: string\n /** Short wordmark drawn in the badge (`\\n` = two lines). Default: `name`. */\n mark?: string\n /** Special drawings instead of a wordmark. */\n shape?: 'mastercard'\n}\n\nconst B = (key: string, name: string, kind: BrandKind, bg: string, fg: string, mark?: string, shape?: Brand['shape']): Brand => ({\n key,\n name,\n kind,\n bg,\n fg,\n ...(mark ? { mark } : {}),\n ...(shape ? { shape } : {}),\n})\n\nconst LIST: Brand[] = [\n // Parcel carriers (Mexico and global).\n B('fedex', 'FedEx', 'carrier', '#4D148C', '#FFFFFF'),\n B('dhl', 'DHL', 'carrier', '#FFCC00', '#B00410'),\n B('estafeta', 'Estafeta', 'carrier', '#C8102E', '#FFFFFF'),\n B('paquetexpress', 'Paquetexpress', 'carrier', '#0B4EA2', '#FFFFFF', 'Paquet\\nexpress'),\n B('ups', 'UPS', 'carrier', '#351C15', '#FFB500'),\n B('redpack', 'Redpack', 'carrier', '#C8102E', '#FFFFFF'),\n B('99minutos', '99 Minutos', 'carrier', '#00704A', '#FFFFFF', '99'),\n B('jtexpress', 'J&T Express', 'carrier', '#C8102E', '#FFFFFF', 'J&T'),\n B('sendex', 'Sendex', 'carrier', '#003A70', '#FFFFFF'),\n B('ampm', 'AMPM', 'carrier', '#1D1D1B', '#FFFFFF'),\n B('tresguerras', 'Tresguerras', 'carrier', '#005BAC', '#FFFFFF', '3G'),\n B('quiken', 'Quiken', 'carrier', '#1D1D1B', '#FFFFFF'),\n B('imile', 'iMile', 'carrier', '#0057B8', '#FFFFFF'),\n B('carssa', 'Carssa', 'carrier', '#00529B', '#FFFFFF'),\n B('correosdemexico', 'Correos de México', 'carrier', '#7A1E3A', '#FFFFFF', 'Correos\\nMéxico'),\n B('usps', 'USPS', 'carrier', '#333366', '#FFFFFF'),\n B('canadapost', 'Canada Post', 'carrier', '#DA291C', '#FFFFFF', 'CPC'),\n // Card networks.\n B('visa', 'Visa', 'card', '#1A1F71', '#FFFFFF', 'VISA'),\n B('mastercard', 'Mastercard', 'card', '#FFFFFF', '#1D1D1B', 'MC', 'mastercard'),\n B('amex', 'American Express', 'card', '#1F72CD', '#FFFFFF', 'AMEX'),\n B('carnet', 'Carnet', 'card', '#003B71', '#FFFFFF'),\n // Wallets and payment providers.\n B('mercadopago', 'Mercado Pago', 'wallet', '#00B1EA', '#0B1F4E', 'mercado\\npago'),\n B('paypal', 'PayPal', 'wallet', '#003087', '#FFFFFF'),\n B('clip', 'Clip', 'wallet', '#FC4C02', '#1D1D1B'),\n B('applepay', 'Apple Pay', 'wallet', '#000000', '#FFFFFF', 'Pay'),\n B('googlepay', 'Google Pay', 'wallet', '#FFFFFF', '#3C4043', 'G Pay'),\n // Cash points and transfers (Mexico).\n B('oxxo', 'OXXO', 'cash', '#E21E26', '#FFE600'),\n B('spei', 'SPEI', 'bank', '#14365F', '#FFFFFF'),\n B('stp', 'STP', 'bank', '#14365F', '#FFFFFF', 'SPEI'),\n B('7eleven', '7-Eleven', 'cash', '#00704A', '#FFFFFF', '7-11'),\n B('circlek', 'Circle K', 'cash', '#DA291C', '#FFFFFF', 'K'),\n B('soriana', 'Soriana', 'cash', '#C8102E', '#FFFFFF'),\n B('extra', 'Extra', 'cash', '#E35205', '#FFFFFF'),\n B('kiosko', 'Kiosko', 'cash', '#C8102E', '#FFFFFF'),\n B('calimax', 'Calimax', 'cash', '#D52B1E', '#FFFFFF'),\n B('farmaciasyza', 'Farmacias Yza', 'cash', '#0A5A9C', '#FFFFFF', 'Yza'),\n B('chedraui', 'Chedraui', 'cash', '#0047BB', '#FFFFFF'),\n B('casaley', 'Casa Ley', 'cash', '#C8102E', '#FFFFFF', 'Ley'),\n B('telecomm', 'Telecomm', 'cash', '#6F1D46', '#FFFFFF'),\n B('walmart', 'Walmart', 'cash', '#0071CE', '#FFFFFF'),\n B('bodegaaurrera', 'Bodega Aurrerá', 'cash', '#0F4C97', '#FFFFFF', 'Bodega\\nAurrerá'),\n B('farmaciasguadalajara', 'Farmacias Guadalajara', 'cash', '#005BAC', '#FFFFFF', 'Farm.\\nGuadalajara'),\n B('farmaciadelahorro', 'Farmacia del Ahorro', 'cash', '#00539F', '#FFFFFF', 'Farmacia\\ndel Ahorro'),\n B('santander', 'Santander', 'bank', '#C00000', '#FFFFFF'),\n B('hsbc', 'HSBC', 'bank', '#DB0011', '#FFFFFF'),\n B('scotiabank', 'Scotiabank', 'bank', '#EC111A', '#FFFFFF', 'Scotia'),\n B('bbva', 'BBVA', 'bank', '#004481', '#FFFFFF'),\n B('citibanamex', 'Citibanamex', 'bank', '#004B8D', '#FFFFFF', 'Citi'),\n B('banorte', 'Banorte', 'bank', '#C8102E', '#FFFFFF'),\n]\n\n/** Alternative spellings that providers send for the same brand (already normalized by `brandKey`). */\nconst ALIASES: Record<string, string> = {\n fedexmx: 'fedex',\n fedexexpress: 'fedex',\n dhlexpress: 'dhl',\n dhlmx: 'dhl',\n paquetexpres: 'paquetexpress',\n paqueteexpress: 'paquetexpress',\n jt: 'jtexpress',\n jandtexpress: 'jtexpress',\n noventaynueveminutos: '99minutos',\n correos: 'correosdemexico',\n sepomex: 'correosdemexico',\n master: 'mastercard',\n americanexpress: 'amex',\n mercadopagomx: 'mercadopago',\n mp: 'mercadopago',\n clabe: 'spei',\n banktransfer: 'spei',\n seveneleven: '7eleven',\n '711': '7eleven',\n circulok: 'circlek',\n yza: 'farmaciasyza',\n bancomer: 'bbva',\n banamex: 'citibanamex',\n ley: 'casaley',\n aurrera: 'bodegaaurrera',\n guadalajara: 'farmaciasguadalajara',\n fguadalajara: 'farmaciasguadalajara',\n farmaciaguadalajara: 'farmaciasguadalajara',\n fahorro: 'farmaciadelahorro',\n delahorro: 'farmaciadelahorro',\n farmaciasdelahorro: 'farmaciadelahorro',\n hsbcmexico: 'hsbc',\n scotia: 'scotiabank',\n walmartmexico: 'walmart',\n walmartsupercenter: 'walmart',\n oxxopay: 'oxxo',\n upsexpress: 'ups',\n estafetamexicana: 'estafeta',\n}\n\nconst BY_KEY = new Map(LIST.map((b) => [b.key, b]))\n\n/** `\"FedEx México\"`, `\"fedex_mx\"` and `\"FEDEX\"` all become `fedex`. Lowercase ASCII letters and digits only. */\nexport function brandKey(raw: string | null | undefined): string {\n const flat = (raw ?? '')\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase()\n .replace(/&/g, 'and')\n .replace(/[^a-z0-9]/g, '')\n const noCountry = flat.endsWith('mexico') && flat !== 'correosdemexico' ? flat.slice(0, -6) : flat\n return ALIASES[noCountry] ?? (BY_KEY.has(noCountry) ? noCountry : ALIASES[flat] ?? flat)\n}\n\n/** Catalog entry for a provider identifier, or `null` when the brand is not in the catalog. */\nexport function findBrand(raw: string | null | undefined): Brand | null {\n return BY_KEY.get(brandKey(raw)) ?? null\n}\n\n/**\n * Commercial name for a provider identifier: the catalog's (`fedex` → \"FedEx\") or, for an unknown one, the identifier\n * in title case (`\"envios_rapidos\"` → \"Envios Rapidos\"). `null` for an empty input.\n */\nexport function brandName(raw: string | null | undefined): string | null {\n const brand = findBrand(raw)\n if (brand) return brand.name\n const text = (raw ?? '').trim()\n if (!text) return null\n // Already cased by the provider (\"Envía Plus\"): keep it.\n if (text !== text.toLowerCase() && text !== text.toUpperCase()) return text\n return text\n .toLowerCase()\n .split(/[\\s_-]+/)\n .filter(Boolean)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ')\n}\n\n/** Every brand of the catalog (for docs, previews and tests). */\nexport function listBrands(kind?: BrandKind): Brand[] {\n return kind ? LIST.filter((b) => b.kind === kind) : [...LIST]\n}\n\n/** Real logo bundled for a provider identifier (inline data URI), or `null` when the brand only has the fallback badge. */\nexport function brandLogo(raw: string | null | undefined): (LogoAsset & { key: string }) | null {\n const b = findBrand(raw)\n const logo = b ? LOGOS[b.key] : undefined\n return b && logo ? { ...logo, key: b.key } : null\n}\n","import type { CSSProperties } from 'react'\nimport { brandLogo, brandName, findBrand } from './brands.js'\n\nexport type BrandMarkProps = {\n /** Provider identifier (`fedex`, `oxxo`, `mercadopago`, `7eleven`…). Unknown keys get a neutral monogram. */\n brand: string | null | undefined\n /** Licensed logo sent by the provider (`PaymentPoint.logo_url`…). Only `https:`; it wins over the bundled logo and the badge. */\n logoUrl?: string | null\n /** Height in px of the box. Badges are 3:2 (width = 1.5 × height); real logos get a width that follows their shape. Default 24. */\n size?: number\n /**\n * Accessible name. Omit it when the brand name is already written next to the mark (the usual case): the mark is then\n * decorative (`aria-hidden`).\n */\n title?: string\n className?: string\n}\n\nfunction safeLogo(url: string | null | undefined): string | null {\n if (!url) return null\n try {\n return new URL(url).protocol === 'https:' ? url : null\n } catch {\n return null\n }\n}\n\n/** Letters of a monogram for a brand outside the catalog: \"envios rapidos\" → \"ER\". */\nfunction monogram(raw: string): string {\n const words = (brandName(raw) ?? raw).split(/\\s+/).filter(Boolean)\n const letters = words.length > 1 ? words.slice(0, 2).map((w) => w[0]) : [(words[0] ?? '?').slice(0, 2)]\n return letters.join('').toUpperCase()\n}\n\n/** What the mark ended up drawing: the provider's logo, the bundled real logo, or the typographic fallback. */\nexport type BrandMarkSource = 'provider' | 'logo' | 'badge'\n\nconst PLATE_RING = 'var(--sf-brand-mark-ring, rgb(127 127 127 / 0.35))'\n/** Neutral plate behind a real logo: always white, so an unrecolored logo reads the same on light and dark themes. */\nconst PLATE_BG = 'var(--sf-brand-mark-plate, #fff)'\n\n/** Box of a real logo: fixed height, width follows the logo's aspect ratio (clamped), so it never shifts the layout. */\nexport function logoBox(ar: number, size: number) {\n const pad = Math.max(2, Math.round(size * 0.16))\n const padX = Math.max(3, Math.round(size * 0.2))\n const innerH = size - pad * 2\n const maxW = size * 2.6\n const innerW = Math.min(innerH * ar, maxW)\n const imgH = Math.min(innerH, innerW / ar)\n return { width: Math.round(Math.max(innerW, innerH * 0.9) + padX * 2), height: size, imgW: Math.round(innerW), imgH: Math.round(imgH), pad, padX }\n}\n\n/**\n * The mark of a carrier, card network, wallet or cash point. Precedence: the provider's `logoUrl` (https, lazy) > the\n * real logo bundled with the package (inline data URI: no network request, same size on the server and in the browser)\n * > a typographic badge in the brand color for the brands without an available logo.\n *\n * Logos are never recolored; they sit on a white plate with a hairline (`--sf-brand-mark-ring`, plate color\n * `--sf-brand-mark-plate`) so they keep their contrast on light and dark themes. The element carries\n * `data-sf-brand-mark=\"<key>\"` and `data-sf-brand-source=\"provider|logo|badge\"`.\n */\nexport function BrandMark({ brand, logoUrl, size = 24, title, className }: BrandMarkProps) {\n const height = size\n const width = Math.round(size * 1.5)\n const a11y = title ? { role: 'img' as const, 'aria-label': title } : { 'aria-hidden': true as const }\n const logo = safeLogo(logoUrl)\n const found = findBrand(brand)\n const key = found?.key ?? 'generic'\n const style: CSSProperties = { width, height, flex: 'none' }\n const plate = (w: number, pad: number, padX: number): CSSProperties => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxSizing: 'border-box',\n flex: 'none',\n width: w,\n height,\n padding: `${pad}px ${padX}px`,\n background: PLATE_BG,\n border: `1px solid ${PLATE_RING}`,\n borderRadius: Math.round(size * 0.2),\n overflow: 'hidden',\n })\n if (logo) {\n const b = logoBox(1.5, size)\n return (\n <span className={className} style={plate(width, b.pad, b.padX)} data-sf-brand-mark={key} data-sf-brand-source=\"provider\" {...a11y}>\n <img\n src={logo}\n alt={title ?? ''}\n width={width - b.padX * 2}\n height={height - b.pad * 2}\n loading=\"lazy\"\n decoding=\"async\"\n style={{ objectFit: 'contain', maxWidth: '100%', maxHeight: '100%' }}\n {...(title ? {} : { 'aria-hidden': true })}\n />\n </span>\n )\n }\n const real = brandLogo(brand)\n if (found && real) {\n const b = logoBox(real.ar, size)\n // The plate is a role=\"img\" with the commercial name; the <img> inside is decorative so it is not announced twice.\n const label = title ?? found.name\n return (\n <span className={className} style={plate(b.width, b.pad, b.padX)} data-sf-brand-mark={key} data-sf-brand-source=\"logo\" {...(title ? { role: 'img', 'aria-label': label } : { 'aria-hidden': true })}>\n <img src={real.src} alt=\"\" width={b.imgW} height={b.imgH} decoding=\"async\" draggable={false} style={{ display: 'block', maxWidth: 'none' }} />\n </span>\n )\n }\n const ring = PLATE_RING\n if (found?.shape === 'mastercard') {\n return (\n <svg viewBox=\"0 0 48 32\" width={width} height={height} className={className} style={style} data-sf-brand-mark={key} data-sf-brand-source=\"badge\" focusable=\"false\" {...a11y}>\n <rect x=\"0.5\" y=\"0.5\" width=\"47\" height=\"31\" rx=\"5\" fill={found.bg} stroke={ring} />\n <circle cx=\"19\" cy=\"16\" r=\"9\" fill=\"#EB001B\" />\n <circle cx=\"29\" cy=\"16\" r=\"9\" fill=\"#F79E1B\" />\n <path d=\"M24 8.52a9 9 0 0 1 0 14.96a9 9 0 0 1 0-14.96z\" fill=\"#FF5F00\" />\n </svg>\n )\n }\n const text = found ? (found.mark ?? found.name) : monogram(brand ?? '')\n const bg = found?.bg ?? 'var(--sf-brand-mark-bg, #E7E9EE)'\n const fg = found?.fg ?? 'var(--sf-brand-mark-fg, #2B2F38)'\n const lines = text.split('\\n')\n const longest = Math.max(...lines.map((l) => l.length))\n // Short marks grow; long ones are squeezed into the badge (textLength) so every badge has the same box.\n const fontSize = lines.length > 1 ? (longest <= 5 ? 11 : 9.5) : longest <= 2 ? 15 : longest <= 4 ? 12 : 10\n const fit = (l: string) => (l.length > 5 ? { textLength: 40, lengthAdjust: 'spacingAndGlyphs' as const } : {})\n const italic = found?.key === 'visa' || found?.key === 'fedex' ? 'italic' : undefined\n const common = {\n textAnchor: 'middle' as const,\n fill: fg,\n fontFamily: \"system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif\",\n fontWeight: 800,\n fontSize,\n fontStyle: italic,\n }\n return (\n <svg viewBox=\"0 0 48 32\" width={width} height={height} className={className} style={style} data-sf-brand-mark={key} data-sf-brand-source=\"badge\" focusable=\"false\" {...a11y}>\n <rect x=\"0.5\" y=\"0.5\" width=\"47\" height=\"31\" rx=\"5\" fill={bg} stroke={ring} />\n {lines.length > 1 ? (\n lines.slice(0, 2).map((l, i) => (\n <text key={i} x=\"24\" y={i === 0 ? 15 : 25.5} {...common} {...fit(l)}>\n {l}\n </text>\n ))\n ) : (\n <text x=\"24\" y=\"16\" dominantBaseline=\"central\" letterSpacing={longest <= 4 ? 0.3 : 0} {...common} {...fit(text)}>\n {text}\n </text>\n )}\n </svg>\n )\n}\n","import { useEffect, useMemo, useRef, useState, useSyncExternalStore, type MouseEvent, type ReactNode, type RefObject } from 'react'\nimport { formatMoney, type Money, type PaymentOptionKey } from '@asteby/storefront'\nimport { useResolvedLocale } from '../locale.js'\nimport { createFetchTransport, type PaymentTransport } from './adapter.js'\nimport type { PayChoice, PayChoices } from './choices.js'\nimport { paymentMethodMessages, type PaymentMethodMessages } from './payment-method.messages.js'\nimport { PaymentBrick, type PaymentBrickHandle, type PaymentBrickProps } from './payment-brick.js'\nimport type { PaymentEvent } from './use-embedded-payment.js'\nimport type { PaymentOutcome } from '@asteby/storefront'\nimport { BrandMark } from '../checkout/brand-mark.js'\nimport { findBrand } from '../checkout/brands.js'\n\n/** Name of the radio group that carries the chosen row (`method` or `method|option`). */\nexport const PAYMENT_CHOICE_FIELD = 'payment_choice'\n/** Name of the radio group that carries the chosen cash point. */\nexport const CASH_POINT_FIELD = 'cash_point'\n\n/** Fields of the page form (contact, delivery, address, method) for the JSON POST of the embedded payment. */\nexport function formFields(form: HTMLFormElement | null | undefined): Record<string, string> {\n const out: Record<string, string> = {}\n if (!form) return out\n for (const [k, v] of new FormData(form).entries()) if (typeof v === 'string') out[k] = v\n return out\n}\n\nexport type PaymentMethodClassNames = Partial<\n Record<\n 'root' | 'legend' | 'choice' | 'radioLabel' | 'radio' | 'labelText' | 'hint' | 'icon' | 'brands' | 'panel' | 'cashPoint' | 'cashPointInput' | 'cashMore' | 'note' | 'alert' | 'status' | 'brickWrap' | 'brick' | 'submit' | 'rebuild',\n string\n >\n>\n\nexport type PaymentMethodTestIds = Partial<\n Record<'method' | 'submit' | 'cash' | 'redirectNote' | 'card' | 'syncing' | 'syncFailed' | 'rebuild' | 'noPayment', string>\n>\n\nexport type PaymentMethodSectionProps = {\n /** From `buildPayChoices(payment.methods)`. */\n choices: PayChoices\n /** The server total (`cart.cost.total`). Shown on the button and passed to the card form. Never computed here. */\n amount: Money\n /** Cart (or checkout) id: scopes the stored attempt id so a reload reuses it. */\n scope?: string\n /** The page `<form>`: its fields travel with the card payment and it is validated before charging. */\n formRef: RefObject<HTMLFormElement | null>\n /** POST endpoint that charges the card (`handlers.pay` on the server). */\n payUrl: string\n /** POST endpoint that re-reads the payment (`handlers.status`). Enables the 3DS / review polling. */\n statusUrl?: string\n /** Row preselected. Default: `choices.defaultValue`. */\n defaultChoice?: string | null\n /** Value of the delivery group; the card form waits until it is `deliveryReady` and `syncDelivery` has settled. */\n delivery?: string\n /** `false` while the buyer has not chosen a delivery that fixes the total (e.g. address pending). Default true. */\n deliveryReady?: boolean\n /**\n * Saves the chosen delivery on the server cart so the server total includes it. Resolve `true` once the new total\n * has been read back (the `amount` prop is then up to date). Called once per delivery, whatever the payment row (so\n * the total on the button and in the shop's summary always holds the chosen delivery). Without it nothing waits.\n *\n * Resolve `'requote'` when the server refused the rate because the quote expired or changed and the shop is loading\n * fresh rates: the section then says so (`quoteChanged`, a status, not an error), keeps the card in the page and\n * tries again with the next delivery value. `false` is a real failure (the card degrades to the redirect).\n */\n syncDelivery?: (delivery: string) => Promise<boolean | 'requote'>\n /** A two-step checkout still collecting the address: the button reads \"continue\" and no card form shows. */\n addressFirst?: boolean\n /** The address must be saved again before paying. */\n retryAddress?: boolean\n /** Disables the button (the shop is not ready to take payment). */\n blocked?: boolean\n /** The page form is submitting. */\n busy?: boolean\n /** Names of fields with a server error (`payment_method`, `cash_point`). */\n invalid?: ReadonlySet<string>\n nonce?: string\n locale?: string\n messages?: Parameters<typeof paymentMethodMessages>[1]\n /** Name for a plain method (`PaymentMethod` without options). Default: the key as it comes. */\n methodLabel?: (methodKey: string) => { label: string; hint?: string }\n /** Per-row icon by option (`card`, `cash`, `wallet`, `credits`) or `plain`. Replaces the default marks of that row. */\n icons?: Partial<Record<PaymentOptionKey | 'plain', ReactNode>>\n /**\n * Brand marks (`BrandMark`): the provider's mark on its account / no-card rows and on a plain method, the cash point\n * marks on the cash row and next to each point, and `cardBrands` on the card row. Default true; `false` keeps the\n * rows text-only.\n */\n brandMarks?: boolean\n /** Card networks drawn on the card row (`visa`, `mastercard`, `amex`, `carnet`…), as the shop's provider accepts them. */\n cardBrands?: readonly string[]\n /** How to print the total on the button. Default `formatMoney`. */\n renderAmount?: (amount: Money) => ReactNode\n /** Anchor to the cart for the \"rebuild\" action when the cart expired. Default: plain `<a href>`. */\n rebuildHref?: string\n renderLink?: (props: { href: string; className?: string; children: ReactNode; testId?: string }) => ReactNode\n /** Called once the order is closed in the page (approved, under review or voucher). Navigate to the thank-you page. */\n onDone: (outcome: PaymentOutcome) => void\n /** The server total changed under the buyer: re-read the cart (the card form remounts with the new amount). */\n onAmountChanged?: () => void\n onEvent?: (event: PaymentEvent) => void\n classNames?: PaymentMethodClassNames\n testIds?: PaymentMethodTestIds\n /** Hide the section button (drive the form some other way). Card payments then need `PaymentMethodHandle`-less flows. */\n hideSubmit?: boolean\n /** Replaces the transport built from `payUrl` / `statusUrl`. */\n transport?: PaymentTransport\n /** Extra props for the card form (`adapter`, `adapters`, `messages`, `minHeight`, `storage`, timeouts...). */\n brickProps?: Partial<Omit<PaymentBrickProps, 'client' | 'amount' | 'transport' | 'onResult' | 'onEvent' | 'onFallback'>>\n}\n\nconst useHydrated = () =>\n useSyncExternalStore(\n () => () => {},\n () => true,\n () => false,\n )\n\n/**\n * \"Payment method\", hybrid. Card: the provider's secure form INSIDE the page (`PaymentBrick`) with the shop's own\n * button. Cash: payment points and a voucher on order. Provider account and no-card payments redirect. Without\n * JavaScript, or if the card form does not load, everything falls back to the plain redirect flow (the page form's\n * normal submit); the cash point radios and the notes work without JavaScript with the `payments.css` sheet.\n *\n * Money: the form amount is the server total passed in `amount` (already holding the chosen delivery); nothing is added\n * or recalculated here.\n *\n * Accessibility: one labelled `fieldset` with native radios; notes in `role=\"status\"`, problems in `role=\"alert\"`; the\n * button explains its busy state and is never silently disabled while the card form is loading.\n */\nexport function PaymentMethodSection(props: PaymentMethodSectionProps) {\n const {\n choices,\n amount,\n scope,\n formRef,\n payUrl,\n statusUrl,\n delivery = '',\n deliveryReady = true,\n syncDelivery,\n addressFirst = false,\n retryAddress = false,\n blocked = false,\n busy = false,\n invalid,\n nonce,\n methodLabel,\n icons,\n brandMarks = true,\n cardBrands = [],\n renderAmount,\n rebuildHref,\n renderLink,\n onDone,\n onAmountChanged,\n onEvent,\n classNames: cx = {},\n testIds = {},\n hideSubmit,\n brickProps,\n } = props\n const locale = useResolvedLocale(props.locale)\n const m = useMemo(() => paymentMethodMessages(locale, props.messages), [locale, props.messages])\n const hydrated = useHydrated()\n const [choiceValue, setChoiceValue] = useState(props.defaultChoice ?? choices.defaultValue)\n const selected = choices.choices.find((c) => c.value === choiceValue) ?? null\n const noPayment = choices.choices.length === 0\n const tid = (k: keyof PaymentMethodTestIds) => (testIds[k] ? { 'data-testid': testIds[k] } : {})\n\n const [fallback, setFallback] = useState(false)\n const [ready, setReady] = useState(false)\n const [processing, setProcessing] = useState(false)\n const [expired, setExpired] = useState(false)\n const brick = useRef<PaymentBrickHandle>(null)\n\n const cardChosen = selected?.mode === 'card' && !retryAddress && !addressFirst\n const cardActive = hydrated && cardChosen && !fallback\n\n // The server total must hold the chosen delivery before the card form mounts, and before any total is printed on the\n // button: the shop saves it on the cart and re-reads the cart. Once per delivery, for every payment row (cash and\n // redirect included, otherwise the button and the summary show the cart without shipping).\n const wantSync = hydrated && selected !== null && !addressFirst && !retryAddress && deliveryReady && Boolean(syncDelivery)\n const [sync, setSync] = useState<{ key: string; ok: boolean; requote?: boolean } | null>(null)\n const syncRef = useRef(syncDelivery)\n syncRef.current = syncDelivery\n useEffect(() => {\n if (!wantSync || !syncRef.current) return\n if (sync?.key === delivery && sync.ok) return\n let cancelled = false\n syncRef.current(delivery).then(\n (ok) => !cancelled && setSync(ok === 'requote' ? { key: delivery, ok: false, requote: true } : { key: delivery, ok }),\n () => !cancelled && setSync({ key: delivery, ok: false }),\n )\n return () => {\n cancelled = true\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [wantSync, delivery])\n const settled = sync?.key === delivery\n const synced = !syncDelivery || (settled && sync!.ok)\n const requote = wantSync && settled && sync!.requote === true\n const syncFailed = wantSync && settled && !sync!.ok && !requote\n const brickReady = cardActive && deliveryReady && synced && !syncFailed\n\n const transport = useMemo(\n () =>\n props.transport ??\n createFetchTransport(payUrl, {\n ...(statusUrl ? { refreshUrl: statusUrl } : {}),\n buildBody: (request) => ({ ...request, fields: formFields(formRef.current) }),\n }),\n [props.transport, payUrl, statusUrl, formRef],\n )\n\n const handleEvent = (e: PaymentEvent) => {\n if (e.type === 'form_ready') setReady(true)\n if (e.type === 'submit') setProcessing(true)\n if (e.type === 'tokenize_error' || e.type === 'retry') setProcessing(e.type === 'retry')\n if (e.type === 'result' && e.status === 'rejected') setProcessing(false)\n if (e.type === 'error') {\n setProcessing(false)\n if (e.kind === 'price_mismatch') onAmountChanged?.()\n if (e.kind === 'expired') setExpired(true)\n }\n onEvent?.(e)\n }\n\n // While the delivery is being saved the amount is stale: the button reads without it.\n const total = wantSync && (!settled || requote) ? null : renderAmount ? renderAmount(amount) : formatMoney(amount, locale)\n const label: ReactNode = retryAddress ? (\n m.retryAddress\n ) : addressFirst ? (\n m.continue\n ) : selected?.mode === 'plain' || !selected ? (\n <>\n {m.pay}\n {total ? <> {total}</> : null}\n </>\n ) : selected.mode === 'redirect' || (selected.mode === 'card' && (fallback || syncFailed)) ? (\n m.payRedirect\n ) : (\n <>\n {m.placeOrder}\n {total ? <> {total}</> : null}\n </>\n )\n\n function onPayClick(event: MouseEvent<HTMLButtonElement>) {\n // Redirect, cash, plain method, or a card without a usable form: the page form's normal submit.\n if (!cardActive || syncFailed) return\n event.preventDefault()\n const form = formRef.current\n if (form && !form.reportValidity()) return // required fields: the browser explains which is missing\n if (brickReady) void brick.current?.submit()\n }\n\n const cardNotice = (k: 'syncing' | 'syncFailed' | 'pickDelivery' | 'requote', node: ReactNode) =>\n k === 'syncFailed' ? (\n <p role=\"alert\" className={cx.alert} data-sf-pay-notice=\"sync-failed\" {...tid('syncFailed')}>\n {node}\n </p>\n ) : (\n <p role=\"status\" className={cx.status} data-sf-pay-notice={k} {...(k === 'syncing' ? tid('syncing') : {})}>\n {node}\n </p>\n )\n\n const Link = renderLink ?? (({ href, className, children, testId }) => (\n <a href={href} className={className} {...(testId ? { 'data-testid': testId } : {})}>\n {children}\n </a>\n ))\n\n return (\n <fieldset id=\"pago\" className={cx.root} data-sf-pay-method>\n <legend className={cx.legend}>{m.legend}</legend>\n {choices.choices.map((choice) => {\n const { label: rowLabel, hint } = rowText(choice, m, methodLabel)\n const checked = choice.value === choiceValue\n const slot = choice.option ?? 'plain'\n const icon = icons?.[slot] ?? (brandMarks ? defaultIcon(choice) : null)\n const marks = brandMarks ? rowMarks(choice, cardBrands) : []\n return (\n <div key={choice.value} className={cx.choice} data-sf-pay-choice>\n <label className={cx.radioLabel}>\n <input\n type=\"radio\"\n name={PAYMENT_CHOICE_FIELD}\n value={choice.value}\n checked={checked}\n onChange={() => setChoiceValue(choice.value)}\n aria-invalid={invalid?.has('payment_method') || undefined}\n data-mode={choice.mode}\n required\n className={cx.radio}\n {...tid('method')}\n />\n {icon ? (\n <span className={cx.icon} aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className={cx.labelText}>\n {rowLabel}\n {hint ? <span className={cx.hint}> {hint}</span> : null}\n </span>\n {marks.length ? (\n <span className={cx.brands} data-sf-pay-brands={choice.option ?? 'plain'} aria-hidden=\"true\">\n {marks.map((mk) => (\n <BrandMark key={mk.key} brand={mk.key} logoUrl={mk.logoUrl ?? null} size={20} />\n ))}\n </span>\n ) : null}\n </label>\n {/* Always in the HTML and visible only with its radio checked (payments.css :has): without JavaScript the cash point is also chosen. */}\n <ChoicePanel choice={choice} m={m} invalid={invalid} cx={cx} tid={tid} hidden={hydrated && !checked} marks={brandMarks} />\n </div>\n )\n })}\n\n {noPayment ? (\n <div role=\"alert\" className={cx.alert} data-sf-pay-notice=\"no-payment\" {...tid('noPayment')}>\n <p>\n <strong>{m.noPaymentTitle}</strong>\n </p>\n <p>{m.noPayment}</p>\n </div>\n ) : null}\n\n {cardChosen && hydrated && choices.cardClient ? (\n <div className={cx.brickWrap} data-sf-pay-card {...tid('card')}>\n {fallback\n ? null\n : !deliveryReady\n ? cardNotice('pickDelivery', m.pickDeliveryFirst)\n : syncFailed\n ? cardNotice('syncFailed', m.syncFailed)\n : requote\n ? cardNotice('requote', m.quoteChanged)\n : !synced\n ? cardNotice('syncing', m.updatingTotal)\n : null}\n {brickReady || fallback ? (\n <PaymentBrick\n {...brickProps}\n ref={brick}\n client={choices.cardClient}\n amount={amount}\n transport={transport}\n {...(nonce ? { nonce } : {})}\n locale={locale}\n {...(scope ? { scope } : {})}\n enabled={brickReady}\n {...(cx.brick ? { className: cx.brick } : {})}\n onEvent={handleEvent}\n onFallback={() => setFallback(true)}\n onResult={(o) => {\n // Approved, under review or voucher: the order is already closed and the receipt is in the cookie.\n if (o.kind === 'approved' || o.kind === 'in_review' || o.kind === 'voucher') onDone(o)\n }}\n />\n ) : null}\n <p className={cx.note}>{m.secureCard}</p>\n {expired && rebuildHref ? Link({ href: rebuildHref, ...(cx.rebuild ? { className: cx.rebuild } : {}), children: m.rebuildCart, ...(testIds.rebuild ? { testId: testIds.rebuild } : {}) }) : null}\n </div>\n ) : null}\n\n {noPayment || choices.choices.some((c) => c.option) ? null : <p className={cx.note}>{m.paymentNote}</p>}\n\n {hideSubmit ? null : (\n <button\n type=\"submit\"\n onClick={onPayClick}\n className={cx.submit}\n disabled={busy || blocked}\n aria-disabled={blocked || (brickReady && (!ready || processing)) || undefined}\n aria-busy={processing || undefined}\n data-sf-pay-method-submit\n {...tid('submit')}\n >\n {busy || processing ? m.processing : label}\n </button>\n )}\n </fieldset>\n )\n}\n\nfunction rowText(choice: PayChoice, m: PaymentMethodMessages, methodLabel: PaymentMethodSectionProps['methodLabel']): { label: string; hint?: string } {\n if (choice.mode === 'plain') return methodLabel ? methodLabel(choice.methodKey) : { label: choice.methodKey }\n return { label: choice.label ?? (choice.option ? m.options[choice.option] : undefined) ?? choice.option ?? choice.methodKey }\n}\n\nfunction ChoicePanel({\n choice,\n m,\n invalid,\n cx,\n tid,\n hidden,\n marks = true,\n}: {\n choice: PayChoice\n m: PaymentMethodMessages\n invalid: ReadonlySet<string> | undefined\n cx: PaymentMethodClassNames\n tid: (k: keyof PaymentMethodTestIds) => { 'data-testid'?: string }\n hidden: boolean\n marks?: boolean\n}) {\n if (choice.mode === 'redirect') {\n return (\n <p className={cx.panel} hidden={hidden} data-sf-pay-panel=\"redirect\" {...tid('redirectNote')}>\n {m.redirectNote}\n </p>\n )\n }\n if (choice.mode !== 'cash') return null\n const main = choice.points.filter((p) => p.group === 'main')\n const more = choice.points.filter((p) => p.group !== 'main')\n const row = (p: PayChoice['points'][number], i: number, first: boolean) => (\n <label key={p.id} className={cx.cashPoint} data-sf-pay-point>\n <input type=\"radio\" name={CASH_POINT_FIELD} value={p.id} defaultChecked={first && i === 0} className={cx.cashPointInput} aria-invalid={invalid?.has('cash_point') || undefined} />\n {marks ? <BrandMark brand={p.payment_point || p.id} logoUrl={p.logo_url ?? null} size={22} /> : null}\n <span>{p.label}</span>\n </label>\n )\n return (\n <div className={cx.panel} hidden={hidden} data-sf-pay-panel=\"cash\" {...tid('cash')}>\n <fieldset>\n <legend>{m.cashPoints}</legend>\n <div data-sf-pay-points>{main.map((p, i) => row(p, i, true))}</div>\n {more.length ? (\n <details>\n <summary className={cx.cashMore} style={{ minHeight: 44 }}>\n {m.cashMore}\n </summary>\n <div data-sf-pay-points>{more.map((p, i) => row(p, i, false))}</div>\n </details>\n ) : null}\n </fieldset>\n <p className={cx.note}>{m.cashNote}</p>\n </div>\n )\n}\n\nconst glyph = (d: string) => (\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" focusable=\"false\" data-sf-pay-glyph>\n <path d={d} />\n </svg>\n)\nconst CARD_GLYPH = 'M3 6.5h18v11H3zM3 10h18M6.5 14.5h4'\nconst CASH_GLYPH = 'M3 7h18v10H3zM12 14.5a2.5 2.5 0 1 0 0-5a2.5 2.5 0 0 0 0 5zM6 10v4M18 10v4'\n\n/** Leading icon of a row: the provider's mark on its own account / no-card rows; a neutral glyph for card and cash. */\nfunction defaultIcon(choice: PayChoice): ReactNode {\n // By option, not mode: a card row without the in-page form still is a card.\n if (choice.option === 'card') return glyph(CARD_GLYPH)\n if (choice.option === 'cash') return glyph(CASH_GLYPH)\n return findBrand(choice.methodKey) ? <BrandMark brand={choice.methodKey} size={24} /> : null\n}\n\n/** Trailing marks of a row: card networks on the card row, the first cash points on the cash row. */\nfunction rowMarks(choice: PayChoice, cardBrands: readonly string[]): Array<{ key: string; logoUrl?: string | null }> {\n if (choice.option === 'card') return cardBrands.map((key) => ({ key }))\n if (choice.option === 'cash') {\n const seen = new Set<string>()\n const out: Array<{ key: string; logoUrl?: string | null }> = []\n for (const p of choice.points) {\n const key = p.payment_point || p.id\n if (p.group !== 'main' || seen.has(key)) continue\n seen.add(key)\n out.push({ key, logoUrl: p.logo_url ?? null })\n if (out.length === 4) break\n }\n return out\n }\n return []\n}\n","/**\n * \"Payment method\" rows for a hybrid checkout: pure functions, no DOM and no server, so the loader, the action and the\n * browser share them.\n *\n * Rules (embedded-payment contract 1.2):\n * - Rows come ONLY from what the server publishes (`payment-methods[].options` and `.client`). No provider names and no\n * amounts live here.\n * - Card and cash are paid in the page; `wallet` and `credits` redirect to the provider.\n * - Without `client`, or with the card flagged `redirect: true`, the server does not offer `embedded`: the shop falls\n * back to the usual redirect flow.\n */\nimport type {\n CheckoutResult,\n PaymentAttemptResult,\n PaymentClient,\n PaymentMethod,\n PaymentOption,\n PaymentOptionKey,\n PaymentPoint,\n} from '@asteby/storefront'\n\n/** One row of \"Payment method\". `value` is what travels in the form (`payment_choice`). */\nexport type PayChoice = {\n value: string\n /** Server method key (`payment_method` of the checkout). */\n methodKey: string\n /** Provider option; `null` for a method without options (the plain flow). */\n option: PaymentOptionKey | null\n /** `card` (form in the page), `cash` (voucher), `redirect` (leaves to the gateway) or `plain`. */\n mode: 'card' | 'cash' | 'redirect' | 'plain'\n /** The provider's own text (`option.label`); the shop supplies its own when missing. */\n label: string | null\n points: PaymentPoint[]\n maxInstallments: number | null\n}\n\nexport type PayChoices = {\n choices: PayChoice[]\n /** Public data to mount the card form; `null` when the server does not offer `embedded`. */\n cardClient: PaymentClient | null\n defaultValue: string | null\n}\n\nexport type BuildPayChoicesOptions = {\n /** Method keys this shop never offers even when the server publishes them (e.g. a manual transfer). */\n hide?: Iterable<string>\n}\n\nconst SEP = '|'\n\nexport function choiceValue(methodKey: string, option: PaymentOptionKey | null): string {\n return option ? `${methodKey}${SEP}${option}` : methodKey\n}\n\n/** `\"mercadopago|card\"` becomes method and option. A value without `|` is a method without options. */\nexport function parseChoice(value: string | null | undefined): { methodKey: string; option: PaymentOptionKey | null } | null {\n const raw = (value ?? '').trim()\n if (!raw) return null\n const i = raw.lastIndexOf(SEP)\n if (i === -1) return { methodKey: raw, option: null }\n const option = raw.slice(i + 1)\n if (option !== 'card' && option !== 'cash' && option !== 'wallet' && option !== 'credits') return null\n return { methodKey: raw.slice(0, i), option }\n}\n\nfunction modeOf(option: PaymentOption): PayChoice['mode'] {\n if (option.redirect || option.key === 'wallet' || option.key === 'credits') return 'redirect'\n return option.key === 'cash' ? 'cash' : 'card'\n}\n\n/**\n * Rows from `GET payment-methods`. A method with `options` unfolds into one row per option (server order); one without\n * is a single plain row. `cardClient` only exists when the card is paid in the page.\n */\nexport function buildPayChoices(methods: readonly PaymentMethod[], options: BuildPayChoicesOptions = {}): PayChoices {\n const hidden = new Set(options.hide ?? [])\n const choices: PayChoice[] = []\n let cardClient: PaymentClient | null = null\n let defaultValue: string | null = null\n for (const method of methods) {\n if (hidden.has(method.key)) continue\n const opts = method.options ?? []\n if (opts.length === 0) {\n const value = choiceValue(method.key, null)\n choices.push({ value, methodKey: method.key, option: null, mode: 'plain', label: null, points: [], maxInstallments: null })\n if (method.default && !defaultValue) defaultValue = value\n continue\n }\n opts.forEach((option, i) => {\n const mode = modeOf(option)\n const value = choiceValue(method.key, option.key)\n choices.push({\n value,\n methodKey: method.key,\n option: option.key,\n mode,\n label: option.label?.trim() || null,\n points: option.key === 'cash' ? (option.points ?? []) : [],\n maxInstallments: option.max_installments ?? null,\n })\n if (mode === 'card' && method.client && !cardClient) cardClient = method.client\n if (method.default && i === 0 && !defaultValue) defaultValue = value\n })\n }\n // A card meant for the page but without `client` cannot be mounted: it is paid by redirect.\n const usable = choices.map((c) => (c.mode === 'card' && !cardClient ? { ...c, mode: 'redirect' as const } : c))\n return { choices: usable, cardClient, defaultValue: defaultValue ?? usable[0]?.value ?? null }\n}\n\n/** Chosen cash point becomes the cash `provider_data`, built on the server from the provider's list. */\nexport function cashProviderData(points: readonly PaymentPoint[], pointId: string | null | undefined): Record<string, string> | null {\n const point = points.find((p) => p.id === pointId) ?? (pointId ? null : points[0])\n if (!point) return null\n return {\n payment_method_id: point.payment_method_id,\n ...(point.payment_point ? { payment_point: point.payment_point } : {}),\n }\n}\n\n/**\n * A checkout (`GET checkouts/:id`) as an attempt result, for polling a 3DS challenge or a payment under review.\n * It only translates server states: it never decides a payment.\n */\nexport function checkoutToAttempt(result: CheckoutResult): PaymentAttemptResult {\n const { checkout, payment, order } = result\n const action = payment.action ?? null\n const base = { checkout, ...(order ? { order } : {}) }\n const status = (checkout.status ?? '').toLowerCase()\n if (status === 'paid' || status === 'converted') return { ...base, payment: { provider: payment.provider, status: 'paid', outcome: 'approved' } }\n if (status === 'cancelled' || status === 'canceled') return { ...base, payment: { provider: payment.provider, status: 'cancelled' } }\n if (status === 'expired') return { ...base, payment: { provider: payment.provider, status: 'expired' } }\n if (status === 'failed') {\n const decline = (payment as { decline_code?: PaymentAttemptResult['payment']['decline_code'] }).decline_code ?? 'declined'\n return { ...base, payment: { provider: payment.provider, status: 'failed', outcome: 'rejected', decline_code: decline, retryable: true } }\n }\n // Still pending: same as the last attempt left it (challenge or review), so the screen does not change.\n if (action?.type === 'challenge') return { ...base, payment: { provider: payment.provider, status: 'requires_action', outcome: 'challenge', action } }\n return { ...base, payment: { provider: payment.provider, status: 'pending', outcome: 'pending', action: action ?? { type: 'none' } } }\n}\n\n/** Body `{ error: { code, message, details } }` that `createFetchTransport` understands. */\nexport type PayErrorBody = { error: { code: string; message: string; details?: unknown } }\n\ntype ErrorLike = { status?: number; code?: string; field?: string; message?: string; details?: unknown }\n\n/**\n * Server error becomes a JSON response for the browser. Keeps the codes the SDK knows how to read (`price_mismatch`,\n * `payment_in_progress`, `expired`, `too_many_attempts`); the mock sends \"in progress\" in `field`, so that is checked too.\n */\nexport function payErrorResponse(err: ErrorLike): { status: number; body: PayErrorBody } {\n const status = typeof err.status === 'number' && err.status >= 400 ? err.status : 503\n let code = err.code ?? 'server_error'\n if (status === 409 && err.field === 'payment_in_progress') code = 'payment_in_progress'\n if (status === 429) code = 'too_many_attempts'\n if (status === 422 && err.field === 'expected_total') code = 'price_mismatch'\n return { status, body: { error: { code, message: err.message ?? '', ...(err.details !== undefined ? { details: err.details } : {}) } } }\n}\n\nexport type VoucherRowLabels = { point: string; reference: string; clabe: string; barcode: string; expires: string }\n\n/** Cookie receipt rows for a payment under review or with a voucher (shown on the thank-you page). */\nexport function voucherRows(\n voucher: NonNullable<NonNullable<PaymentAttemptResult['payment']['action']>['voucher']> | null | undefined,\n labels: VoucherRowLabels,\n locale: string,\n): [label: string, value: string][] {\n if (!voucher) return []\n const rows: [string, string][] = []\n if (voucher.payment_point) rows.push([labels.point, String(voucher.payment_point).slice(0, 60)])\n if (voucher.reference) rows.push([labels.reference, String(voucher.reference).slice(0, 80)])\n if (voucher.clabe) rows.push([labels.clabe, String(voucher.clabe).slice(0, 40)])\n if (voucher.barcode) rows.push([labels.barcode, String(voucher.barcode).slice(0, 80)])\n if (voucher.expires_at) {\n const d = new Date(voucher.expires_at)\n if (!Number.isNaN(d.getTime())) {\n rows.push([labels.expires, new Intl.DateTimeFormat(locale, { dateStyle: 'long', timeStyle: 'short', timeZone: 'UTC' }).format(d) + ' UTC'])\n }\n }\n return rows\n}\n"]}