@trading-game/design-intelligence-layer 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../components/ui/accordion.tsx","../lib/utils.ts","../components/ui/section-message.tsx","../components/ui/button.tsx","../components/ui/spinner.tsx","../components/ui/navigation-button.tsx","../components/ui/alert-dialog.tsx","../components/ui/aspect-ratio.tsx","../components/ui/avatar.tsx","../components/ui/badge.tsx","../components/ui/banner.tsx","../components/ui/bottom-navigation.tsx","../components/ui/breadcrumb.tsx","../components/ui/calendar.tsx","../components/ui/select.tsx","../components/ui/card.tsx","../components/ui/carousel.tsx","../components/ui/chip.tsx","../components/ui/checkbox.tsx","../components/ui/command.tsx","../components/ui/dialog.tsx","../components/ui/context-menu.tsx","../components/ui/drawer.tsx","../components/ui/dropdown-menu.tsx","../components/ui/empty.tsx","../components/ui/field.tsx","../components/ui/label.tsx","../components/ui/separator.tsx","../components/ui/hover-card.tsx","../components/ui/input.tsx","../components/ui/input-group.tsx","../components/ui/textarea.tsx","../components/ui/input-otp.tsx","../components/ui/item.tsx","../components/ui/link.tsx","../components/ui/menubar.tsx","../components/ui/native-select.tsx","../components/ui/navigation-menu.tsx","../components/ui/numpad.tsx","../components/ui/pagination.tsx","../components/ui/popover.tsx","../components/ui/progress.tsx","../components/ui/profile-photo.tsx","../components/ui/radio-group.tsx","../components/ui/resizable.tsx","../components/ui/scroll-area.tsx","../components/ui/sheet.tsx","../components/ui/sidebar.tsx","../hooks/use-mobile.ts","../components/ui/skeleton.tsx","../components/ui/tooltip.tsx","../components/ui/slider.tsx","../components/ui/toast.tsx","../components/ui/slide-to-confirm.tsx","../components/ui/stepper.tsx","../components/ui/steps.tsx","../components/ui/switch.tsx","../components/ui/table.tsx","../components/ui/tabs.tsx","../components/ui/toggle.tsx","../components/ui/toggle-group.tsx","../components/blocks/result-block.tsx","../components/blocks/header-navigation-block.tsx","../components/blocks/faq-block.tsx","../components/blocks/hero-block.tsx","../components/blocks/auth-block.tsx","../components/blocks/navbar-block.tsx","../components/blocks/open-positions-block.tsx","../components/blocks/game-loading-block.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b border-border-default-default last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left type-accordion-trigger transition-all outline-none hover:underline focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:pointer-events-none disabled:opacity-24 [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"pointer-events-none size-4 shrink-0 translate-y-0.5 text-icon-prominent-default transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"overflow-hidden type-accordion-content data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport {\n AlertTriangle,\n CheckCircle2,\n Info,\n X,\n XCircle,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { NavigationButton } from \"./navigation-button\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Types */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\ntype SectionMessageVariant = \"info\" | \"warning\" | \"danger\" | \"success\"\n\n/**\n * `row` keeps everything on one band with the action beside the text;\n * `stack` drops the actions below the body. The old `inline` / `card`\n * values are accepted as deprecated aliases until the v1.0 sweep.\n */\ntype SectionMessageLayout = \"row\" | \"stack\" | \"inline\" | \"card\"\n\ntype SectionMessageSize = \"sm\" | \"md\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Variants */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n/**\n * Per-variant surface + border classes. Title, description, icon, and close X\n * are applied via dedicated slot classes below — they're not part of the cva\n * root because they target descendant elements.\n *\n * Sizes are a strict one-step ladder: every metric in `sm` sits exactly one\n * scale step below `md` (padding 16→12, gaps 12→8, icon 16→14, radius xl→lg,\n * type 14/20→12/16), so both densities read as the same component.\n */\nconst sectionMessageVariants = cva(\n \"grid w-full\",\n {\n variants: {\n variant: {\n info: \"bg-background-information-default border border-border-information-default\",\n warning: \"bg-background-warning-default border border-border-warning-default\",\n danger: \"bg-background-error-default border border-border-error-default\",\n success: \"bg-background-success-default border border-border-success-default\",\n },\n layout: {\n // Row is mobile-first: 3 columns × 2 rows so a long title can wrap and the\n // action button drops below the body. At sm+ (640px) it collapses to a single\n // row of 4 columns (icon · body · action · close).\n row: \"grid-cols-[auto_1fr_auto] grid-rows-[auto_auto] items-start sm:grid-cols-[auto_1fr_auto_auto] sm:grid-rows-1\",\n stack: \"grid-cols-[auto_1fr_auto] grid-rows-[auto_auto] items-start\",\n },\n size: {\n md: \"rounded-xl px-4 py-4 gap-x-3\",\n sm: \"rounded-lg px-3 py-3 gap-x-2\",\n },\n },\n compoundVariants: [\n { layout: \"row\", size: \"md\", class: \"gap-y-3\" },\n { layout: \"row\", size: \"sm\", class: \"gap-y-2\" },\n { layout: \"stack\", size: \"md\", class: \"gap-y-2\" },\n { layout: \"stack\", size: \"sm\", class: \"gap-y-1.5\" },\n ],\n defaultVariants: {\n variant: \"info\",\n layout: \"row\",\n size: \"md\",\n },\n },\n)\n\n/**\n * Classes applied when the row layout is single-line (only title or only\n * description). `min-h` keeps the resting height (48px md / 40px sm) when\n * content fits; the container is free to grow when text wraps on narrow\n * viewports so it never overflows. The reduced vertical padding keeps text\n * comfortably off the edges when growth does happen.\n */\nconst SINGLE_LINE_CLASSES: Record<SectionMessageSize, string> = {\n md: \"items-center min-h-12 py-2 gap-y-0\",\n sm: \"items-center min-h-10 py-1.5 gap-y-0\",\n}\n\n/**\n * Title color — uniform `text-prominent` across every variant so\n * the title reads with consistent weight. The leading icon alone carries the\n * severity colour signal.\n */\nconst TITLE_CLASSES: Record<SectionMessageVariant, string> = {\n info: \"text-text-prominent-default\",\n warning: \"text-text-prominent-default\",\n danger: \"text-text-prominent-default\",\n success: \"text-text-prominent-default\",\n}\n\n/** Icon color per variant — the only place severity shows up as colour. */\nconst ICON_CLASSES: Record<SectionMessageVariant, string> = {\n info: \"text-icon-information-default\",\n warning: \"text-icon-warning-default\",\n danger: \"text-icon-error-default\",\n success: \"text-icon-success-default\",\n}\n\n/** Description color — prominent ink at regular weight; the title/description\n hierarchy is carried by weight (600 vs 400) alone. */\nconst DESC_CLASSES: Record<SectionMessageVariant, string> = {\n info: \"text-text-prominent-default\",\n warning: \"text-text-prominent-default\",\n danger: \"text-text-prominent-default\",\n success: \"text-text-prominent-default\",\n}\n\n/**\n * Close X color — neutral gray on every variant. The X reads as a generic\n * dismiss affordance, not a status signal, so it stays out of the accent\n * palette.\n */\nconst CLOSE_CLASSES: Record<SectionMessageVariant, string> = {\n info: \"text-icon-subtle-default opacity-70\",\n warning: \"text-icon-subtle-default opacity-70\",\n danger: \"text-icon-subtle-default opacity-70\",\n success: \"text-icon-subtle-default opacity-70\",\n}\n\n/** Default per-variant leading icon. Pass `icon={null}` to omit; pass any ReactNode to override. */\nfunction defaultIconForVariant(variant: SectionMessageVariant): React.ReactNode {\n switch (variant) {\n case \"info\":\n return <Info />\n case \"warning\":\n return <AlertTriangle />\n case \"danger\":\n return <XCircle />\n case \"success\":\n return <CheckCircle2 />\n }\n}\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Props */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\ninterface SectionMessageProps\n extends Omit<React.ComponentProps<\"div\">, \"title\"> {\n /** Surface + accent variant. */\n variant?: SectionMessageVariant\n /** Layout shape — `row` (action beside text) or `stack` (actions below). */\n layout?: SectionMessageLayout\n /** Density — `md` (default) or `sm`, one full scale step down. */\n size?: SectionMessageSize\n /** Title text. At least one of `title` or `description` is required. */\n title?: React.ReactNode\n /** Description / supporting text. At least one of `title` or `description` is required. */\n description?: React.ReactNode\n /**\n * Leading icon. When `undefined`, the default for the variant is used.\n * Pass `null` to omit the icon entirely. Pass any `ReactNode` to override.\n */\n icon?: React.ReactNode | null\n /** Single action button — honoured only when `layout=\"row\"`. */\n action?: React.ReactNode\n /** Up to 2 action buttons — honoured only when `layout=\"stack\"`. */\n actions?: React.ReactNode[]\n /**\n * When provided, the close X renders and calls this on click. Absence\n * means the message is not user-dismissible.\n */\n onDismiss?: () => void\n /** aria-label for the close button. Defaults to \"Dismiss\". */\n dismissLabel?: string\n}\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Component */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nfunction SectionMessage({\n variant = \"info\",\n layout = \"row\",\n size = \"md\",\n title,\n description,\n icon,\n action,\n actions,\n onDismiss,\n dismissLabel = \"Dismiss\",\n className,\n ...props\n}: SectionMessageProps) {\n // At least one of title or description must be supplied.\n if (!title && !description) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"SectionMessage: requires at least one of `title` or `description`. Rendering null.\",\n )\n }\n return null\n }\n\n // Normalize the deprecated layout aliases (inline→row, card→stack).\n const resolvedLayout: \"row\" | \"stack\" =\n layout === \"inline\" ? \"row\" : layout === \"card\" ? \"stack\" : layout\n\n const isRow = resolvedLayout === \"row\"\n const isSingleLine = isRow && !(title && description)\n const showIcon = icon !== null\n const resolvedIcon = icon === undefined ? defaultIconForVariant(variant) : icon\n const showCloseButton = typeof onDismiss === \"function\"\n // All SectionMessage variants use the standard Secondary button. (Promotional surfaces\n // that need the primary-inverse button live on `Banner` instead.)\n const buttonVariant = \"secondary\" as const\n const buttonSize = \"sm\" as const\n const isAssertive = variant === \"danger\" || variant === \"warning\"\n const role = isAssertive ? \"alert\" : \"status\"\n const ariaLive = isAssertive ? \"assertive\" : \"polite\"\n\n // Dev-only warnings for layout/slot mismatches.\n if (process.env.NODE_ENV !== \"production\") {\n if (isRow && actions && actions.length > 0) {\n console.warn(\n 'SectionMessage: `actions` is ignored when layout=\"row\". Use `action` instead.',\n )\n }\n if (!isRow && action) {\n console.warn(\n 'SectionMessage: `action` is ignored when layout=\"stack\". Use `actions` instead.',\n )\n }\n }\n\n /** The body: title + optional description. */\n const body = (\n <div className=\"min-w-0\">\n {title ? (\n <p\n className={cn(\n size === \"sm\" ? \"type-section-message-title-sm\" : \"type-section-message-title\",\n TITLE_CLASSES[variant],\n description ? (size === \"sm\" ? \"mb-1\" : \"mb-2\") : \"mb-0\",\n )}\n >\n {title}\n </p>\n ) : null}\n {description ? (\n <p\n className={cn(\n size === \"sm\"\n ? \"type-section-message-description-sm m-0\"\n : \"type-section-message-description m-0\",\n DESC_CLASSES[variant],\n )}\n >\n {description}\n </p>\n ) : null}\n </div>\n )\n\n /** The dismiss (close X) button — a NavigationButton, per the icon-button\n * law, carrying the message tone's ink. */\n const closeButton = showCloseButton ? (\n <NavigationButton\n type=\"button\"\n size=\"xs\"\n onClick={onDismiss}\n aria-label={dismissLabel}\n className={cn(\n // No positioning nudges — the button sits at the grid cell's natural\n // top-right position, which (with items-start + the container's own\n // padding) lands it a uniform inset from the top and right edges in\n // every layout, matching the card's own padding exactly.\n \"cursor-pointer bg-transparent transition-opacity hover:bg-transparent hover:opacity-100\",\n size === \"sm\" ? \"size-5 [&_svg:not([class*='size-'])]:size-3.5\" : \"size-6 [&_svg:not([class*='size-'])]:size-4\",\n CLOSE_CLASSES[variant],\n )}\n >\n <X />\n </NavigationButton>\n ) : null\n\n /** The leading icon column. */\n const iconColumn = showIcon ? (\n <div\n aria-hidden\n className={cn(\n \"inline-flex shrink-0 [&_svg]:size-full\",\n size === \"sm\" ? \"size-3.5\" : \"size-4\",\n // Single-line: grid is items-center so the icon centers automatically.\n // Multi-line / stack: top-aligned with the title cap-height via an\n // optical nudge so the icon reads as introducing the message header,\n // not floating between title and description.\n isSingleLine ? \"\" : size === \"sm\" ? \"mt-px\" : \"mt-0.5\",\n ICON_CLASSES[variant],\n )}\n >\n {resolvedIcon}\n </div>\n ) : null\n\n if (isRow) {\n return (\n <div\n role={role}\n aria-live={ariaLive}\n data-slot=\"section-message\"\n data-variant={variant}\n data-layout=\"row\"\n data-size={size}\n className={cn(\n sectionMessageVariants({ variant, layout: \"row\", size }),\n isSingleLine ? SINGLE_LINE_CLASSES[size] : \"\",\n // No action button → never need the second (mobile action-wrap) row.\n // Without this, that row still exists at 0px tall but its gap-y\n // renders below the body anyway, padding the bottom more than the top.\n !action ? \"grid-rows-1\" : \"\",\n className,\n )}\n {...props}\n >\n {/* icon — col 1 row 1, both breakpoints */}\n {iconColumn}\n {/* body — col 2 row 1, both breakpoints */}\n <div className=\"col-start-2 row-start-1 min-w-0\">{body}</div>\n {/* close X — col 3 row 1 on mobile, col 4 row 1 on desktop (always top-right) */}\n <div className=\"col-start-3 row-start-1 sm:col-start-4 sm:row-start-1\">\n {closeButton}\n </div>\n {/* action — col 2 row 2 (under body) on mobile; col 3 row 1 (inline) on desktop.\n justify-self-start on mobile keeps the button left-aligned under the body. */}\n {action ? (\n <div className=\"col-start-2 row-start-2 justify-self-start sm:col-start-3 sm:row-start-1 sm:self-center sm:justify-self-end\">\n {wrapAction(action, buttonVariant, buttonSize)}\n </div>\n ) : null}\n </div>\n )\n }\n\n // Stack layout\n return (\n <div\n role={role}\n aria-live={ariaLive}\n data-slot=\"section-message\"\n data-variant={variant}\n data-layout=\"stack\"\n data-size={size}\n className={cn(\n sectionMessageVariants({ variant, layout: \"stack\", size }),\n className,\n )}\n {...props}\n >\n {iconColumn}\n <div className=\"col-start-2 row-start-1 min-w-0\">{body}</div>\n <div className=\"col-start-3 row-start-1\">{closeButton}</div>\n {actions && actions.length > 0 ? (\n // Stack's grid only has 3 columns (icon · body · close), so the actions\n // row spans the 2 columns under body+close (col-span-2), not 3 — col-span-3\n // was reaching past the grid, which silently added an extra invisible\n // column and pushed the close button further from the right edge than\n // every other layout.\n <div\n className={cn(\n \"col-span-2 col-start-2 row-start-2 flex flex-wrap items-center justify-start gap-2\",\n size === \"sm\" ? \"mt-1.5\" : \"mt-2\",\n )}\n >\n {actions.slice(0, 2).map((node, i) => (\n <React.Fragment key={i}>{wrapAction(node, buttonVariant, buttonSize)}</React.Fragment>\n ))}\n </div>\n ) : null}\n </div>\n )\n}\n\n/**\n * Normalize an action node. React elements (e.g. `<Button>`, `<Link>`) pass through\n * untouched — callers can use them directly to control variant, size, and event\n * handlers. Primitives (`string`, `number`) get wrapped in a `Button` sized to\n * match the message density. Anything else (`null`/`undefined`/booleans/arrays)\n * renders as-is, matching React's defaults.\n */\nfunction wrapAction(\n node: React.ReactNode,\n variant: \"primary-on-brand\" | \"secondary\",\n size: \"sm\",\n): React.ReactNode {\n // If it already looks like a React element (e.g. <Button>...), pass through.\n if (React.isValidElement(node)) return node\n return (\n <Button variant={variant} size={size}>\n {node}\n </Button>\n )\n}\n\nexport { SectionMessage, sectionMessageVariants }\nexport type {\n SectionMessageProps,\n SectionMessageVariant,\n SectionMessageLayout,\n SectionMessageSize,\n}\n\n/* @deprecated — the component was renamed to SectionMessage. These aliases keep\n the old import surface working until the v1.0 cleanup sweep. */\nconst Alert = SectionMessage\nconst alertVariants = sectionMessageVariants\ntype AlertProps = SectionMessageProps\ntype AlertVariant = SectionMessageVariant\ntype AlertLayout = SectionMessageLayout\nexport { Alert, alertVariants }\nexport type { AlertProps, AlertVariant, AlertLayout }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Spinner } from \"./spinner\"\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-[color,border-color,opacity,box-shadow,transform] outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong active:opacity-60 disabled:pointer-events-none disabled:opacity-24 aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft [&_svg]:pointer-events-none [&_svg]:shrink-0 font-display\",\n {\n variants: {\n variant: {\n // Primary brand blue (#2323FF)\n primary:\n \"bg-background-brand-default text-text-on-brand-static hover:bg-background-brand-hover active:bg-background-brand-pressed active:opacity-100\",\n // Primary Inverse — white bg + blue text; for use on dark/coloured surfaces\n // On-brand family — for buttons standing on a brand-coloured surface\n // (NOT theme inverses): white pill with primary ink, white outline,\n // white text. All static, because the brand panel is the same in\n // both themes.\n \"primary-on-brand\":\n \"bg-background-static-white text-text-brand-default hover:bg-background-static-white-wash\",\n // Secondary — the design file's white-surface pill: card surface,\n // hairline border, prominent ink. Hover swaps to the secondary\n // surface (one lift up), press dims via the shared active state.\n secondary:\n \"bg-background-primary-surface border border-border-default-default text-text-prominent-default hover:bg-background-secondary-surface\",\n // Secondary Inverse — white border + white text; for use on dark/coloured surfaces\n \"secondary-on-brand\":\n \"bg-transparent border border-background-static-white text-text-on-brand-static hover:bg-(--primitive-white-alpha-8)\",\n tertiary:\n \"bg-transparent text-text-prominent-default hover:bg-background-hover-default\",\n // Tertiary Inverse — transparent + white text/icon; for use on dark/coloured surfaces\n \"tertiary-on-brand\":\n \"bg-transparent text-text-on-brand-static hover:bg-(--primitive-white-alpha-8)\",\n // Frosted — the tinted-glass family, one look per surface:\n // `frosted` sits on page surfaces (brand-selected tint + brand ink,\n // hover/pressed via the state-layer glazes stacked over the solid\n // fill); `frosted-on-brand` is the white frost for coloured/art\n // surfaces (hover thickens the frost, press thins it).\n frosted:\n \"bg-background-brand-selected text-text-brand-selected active:opacity-100 hover:[background-image:linear-gradient(var(--background-hover-default),var(--background-hover-default))] active:[background-image:linear-gradient(var(--background-pressed-default),var(--background-pressed-default))]\",\n \"frosted-on-brand\":\n \"bg-(--primitive-white-alpha-24) backdrop-blur-md border border-(--primitive-white-alpha-24) text-text-on-brand-static hover:bg-(--primitive-white-alpha-32) active:bg-(--primitive-white-alpha-16) active:opacity-100\",\n\n /* @deprecated aliases — shimmer became the `shimmer` boolean prop;\n the inverse names became the on-brand family; `glass` became\n `frosted-on-brand`. Deleted at v1.0. */\n glass:\n \"bg-(--primitive-white-alpha-24) backdrop-blur-md border border-(--primitive-white-alpha-24) text-text-on-brand-static hover:bg-(--primitive-white-alpha-32) active:bg-(--primitive-white-alpha-16) active:opacity-100\",\n \"primary-shimmer\":\n \"relative overflow-hidden bg-background-brand-default text-text-on-brand-static hover:bg-background-brand-hover active:bg-background-brand-pressed active:opacity-100\",\n \"primary-on-brand-shimmer\":\n \"relative overflow-hidden bg-background-static-white text-text-brand-default hover:bg-background-static-white-wash\",\n \"primary-inverse\":\n \"bg-background-static-white text-text-brand-container-static hover:bg-background-static-white-wash\",\n \"primary-inverse-shimmer\":\n \"relative overflow-hidden bg-background-static-white text-text-brand-container-static hover:bg-background-static-white-wash\",\n \"secondary-inverse\":\n \"bg-transparent border border-background-static-white text-text-on-brand-static hover:bg-(--primitive-white-alpha-8)\",\n \"tertiary-inverse\":\n \"bg-transparent text-text-on-brand-static hover:bg-(--primitive-white-alpha-8)\",\n },\n size: {\n // One primitive type step per size (16/14/12) and padding-x = half\n // the height (24/20/16) — the same ladder Badge rides.\n // Spacing rule: padding-x = height/2 - 4 (20/16/12), gap fixed at 8.\n // Type one primitive step per size (18/16/14); icons track the height.\n lg: \"type-button-lg h-12 w-fit gap-2 rounded-full px-5 [&_svg:not([class*='size-'])]:size-5\",\n md: \"type-button-md h-10 w-fit gap-2 rounded-full px-4 [&_svg:not([class*='size-'])]:size-4\",\n sm: \"type-button-sm h-8 w-fit gap-2 rounded-full px-3 [&_svg:not([class*='size-'])]:size-3.5\",\n icon: \"size-12 rounded-full [&_svg:not([class*='size-'])]:size-5\",\n \"icon-lg\": \"size-12 rounded-full [&_svg:not([class*='size-'])]:size-5\",\n \"icon-md\": \"size-10 rounded-full [&_svg:not([class*='size-'])]:size-4\",\n \"icon-sm\": \"size-8 rounded-full [&_svg:not([class*='size-'])]:size-3.5\",\n \"icon-xs\": \"size-6 rounded-full [&_svg:not([class*='size-'])]:size-3\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n }\n)\n\nconst spinnerSizeMap: Record<string, string> = {\n lg: \"size-5\",\n md: \"size-4\",\n sm: \"size-3.5\",\n icon: \"size-4\",\n \"icon-lg\": \"size-4\",\n \"icon-md\": \"size-4\",\n \"icon-sm\": \"size-3.5\",\n \"icon-xs\": \"size-3\",\n}\n\n/**\n * Shimmer gradients. The animation keyframes (`button-shimmer`) live in\n * `src/styles.css` and translate the gradient from -100% to 100%\n * horizontally. 110° tilts the bright band forward so the sweep reads as a\n * diagonal shine; three stops around 50% (soft → mid → soft) shape the\n * highlight like a polished-metal gleam.\n *\n * primary → white sweep over the brand fill\n * primary-on-brand → brand-blue sweep over the white pill (a white sweep\n * would be invisible on white)\n */\nconst WHITE_SWEEP =\n \"linear-gradient(110deg, transparent 20%, rgba(255,255,255,0.10) 40%, rgba(255,255,255,0.20) 50%, rgba(255,255,255,0.10) 60%, transparent 80%)\"\nconst BRAND_SWEEP =\n \"linear-gradient(110deg, transparent 20%, rgba(35,35,255,0.07) 40%, rgba(35,35,255,0.14) 50%, rgba(35,35,255,0.07) 60%, transparent 80%)\"\n\n/** Which sweep a variant gets when `shimmer` is on (or via deprecated variants). */\nconst shimmerGradients: Record<string, string> = {\n primary: WHITE_SWEEP,\n \"primary-on-brand\": BRAND_SWEEP,\n \"primary-shimmer\": WHITE_SWEEP,\n \"primary-on-brand-shimmer\": BRAND_SWEEP,\n \"primary-inverse\": BRAND_SWEEP,\n \"primary-inverse-shimmer\": BRAND_SWEEP,\n}\n\nfunction Button({\n className,\n variant = \"primary\",\n size = \"md\",\n asChild = false,\n loading = false,\n shimmer = false,\n children,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n loading?: boolean\n /**\n * Attention sweep for headline CTAs — a modifier, not a variant.\n * Only meaningful on the primary family (`primary`, `primary-on-brand`);\n * ignored elsewhere with a dev warning.\n */\n shimmer?: boolean\n }) {\n // Shimmer applies to the primary family only; the deprecated *-shimmer\n // variants imply it for back-compat.\n const shimmerCapable =\n variant === \"primary\" || variant === \"primary-on-brand\" ||\n variant === \"primary-inverse\"\n const legacyShimmer =\n variant === \"primary-shimmer\" ||\n variant === \"primary-on-brand-shimmer\" ||\n variant === \"primary-inverse-shimmer\"\n const showShimmer = legacyShimmer || (shimmer && shimmerCapable)\n if (process.env.NODE_ENV !== \"production\" && shimmer && !shimmerCapable && !legacyShimmer) {\n console.warn(\n `Button: \\`shimmer\\` only applies to the primary family — ignored on variant=\"${variant}\".`,\n )\n }\n\n const sharedProps = {\n \"data-slot\": \"button\",\n \"data-variant\": variant,\n \"data-size\": size,\n \"data-loading\": loading || undefined,\n \"data-shimmer\": showShimmer || undefined,\n className: cn(\n buttonVariants({ variant, size, className }),\n showShimmer && \"relative overflow-hidden\",\n loading && \"pointer-events-none opacity-24 relative\",\n ),\n \"aria-busy\": loading || undefined,\n ...props,\n }\n\n // `asChild` merges Button's styling onto a caller-supplied element via Slot,\n // which accepts exactly ONE child. The shimmer and loading branches below sit\n // in their own JSX slots, so even when they render nothing they make `children`\n // an array of two — and Slot rejects any array, empty entries included. Pass\n // `children` through on its own here. Shimmer and loading are unavailable in\n // this mode by nature: Slot has no room for the extra layers they need.\n if (asChild) {\n return <Slot.Root {...sharedProps}>{children}</Slot.Root>\n }\n\n return (\n <button {...sharedProps}>\n {/* Shimmer sweep — rendered before children so the icon/label paint\n over the (mostly-transparent) gradient. Suppressed while loading\n or disabled so the button still reads as inert. */}\n {showShimmer && variant && shimmerGradients[variant] && !loading && !props.disabled ? (\n <span\n aria-hidden\n className=\"pointer-events-none absolute inset-0 [animation:var(--animate-button-shimmer)]\"\n style={{ background: shimmerGradients[variant] }}\n />\n ) : null}\n {loading ? (\n <>\n <span className=\"invisible inline-flex items-center gap-[inherit]\" aria-hidden>\n {children}\n </span>\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <Spinner className={spinnerSizeMap[size ?? \"md\"]} />\n </span>\n </>\n ) : children}\n </button>\n )\n}\n\nexport { Button, buttonVariants }\n","import { cn } from \"../../lib/utils\"\n\nconst PILL_COUNT = 8\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"relative inline-block size-4 text-current\", className)}\n {...props}\n >\n {Array.from({ length: PILL_COUNT }, (_, i) => (\n <span\n key={i}\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"0\",\n width: \"12%\",\n height: \"30%\",\n borderRadius: \"9999px\",\n backgroundColor: \"currentColor\",\n transformOrigin: \"50% 167%\",\n transform: `translateX(-50%) rotate(${i * 45}deg)`,\n animation: `spinner-fade 0.8s linear ${(i * 0.8) / PILL_COUNT}s infinite`,\n }}\n />\n ))}\n </div>\n )\n}\n\nexport { Spinner }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst navigationButtonVariants = cva(\n // Icon-only nav control — circular like every icon button in the system.\n \"inline-flex shrink-0 items-center justify-center rounded-full transition-all duration-fast ease-standard outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong active:opacity-60 disabled:pointer-events-none disabled:opacity-24 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-background-hover-default text-icon-prominent-default hover:bg-background-pressed-default\",\n // Frosted circle for art/hero/brand surfaces — same recipe as\n // Button's frosted-on-brand: hover thickens the frost, press thins it.\n \"frosted-on-brand\":\n \"bg-(--primitive-white-alpha-24) backdrop-blur-md border border-(--primitive-white-alpha-24) text-text-on-brand-static hover:bg-(--primitive-white-alpha-32) active:bg-(--primitive-white-alpha-16) active:opacity-100\",\n /* @deprecated — renamed to frosted-on-brand. Deleted at v1.0. */\n glass:\n \"bg-(--primitive-white-alpha-24) backdrop-blur-md border border-(--primitive-white-alpha-24) text-text-on-brand-static hover:bg-(--primitive-white-alpha-32) active:bg-(--primitive-white-alpha-16) active:opacity-100\",\n },\n size: {\n lg: \"size-12 [&_svg:not([class*='size-'])]:size-6\",\n md: \"size-10 [&_svg:not([class*='size-'])]:size-5\",\n sm: \"size-8 [&_svg:not([class*='size-'])]:size-5\",\n xs: \"size-6 [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"lg\",\n },\n }\n)\n\nfunction NavigationButton({\n className,\n variant = \"default\",\n size = \"lg\",\n asChild = false,\n children,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof navigationButtonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"navigation-button\"\n data-variant={variant}\n data-size={size}\n className={cn(navigationButtonVariants({ variant, size, className }))}\n {...props}\n >\n {children}\n </Comp>\n )\n}\n\nexport { NavigationButton, navigationButtonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-background-overlay-default data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n \"group/alert-dialog-content fixed top-[50%] left-[50%] z-50 flex h-auto w-full max-w-[calc(100%-2rem)] flex-col translate-x-[-50%] translate-y-[-50%] gap-6 rounded-2xl border border-border-default-default bg-background-primary-surface p-6 duration-base data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"type-alert-dialog-title sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"type-alert-dialog-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-background-secondary-surface sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"primary\",\n size = \"md\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild className={cn(\"group-data-[size=sm]/alert-dialog-content:w-full\", className)}>\n <AlertDialogPrimitive.Action\n data-slot=\"alert-dialog-action\"\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"tertiary\",\n size = \"md\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild className={cn(\"group-data-[size=sm]/alert-dialog-content:w-full\", className)}>\n <AlertDialogPrimitive.Cancel\n data-slot=\"alert-dialog-cancel\"\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","\"use client\"\n\nimport { AspectRatio as AspectRatioPrimitive } from \"radix-ui\"\n\nfunction AspectRatio({\n ...props\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\n return <AspectRatioPrimitive.Root data-slot=\"aspect-ratio\" {...props} />\n}\n\nexport { AspectRatio }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Avatar({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\" | \"xl\"\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 rounded-full select-none data-[size=sm]:size-6 data-[size=lg]:size-10 data-[size=xl]:[width:var(--avatar-size-xl)] data-[size=xl]:[height:var(--avatar-size-xl)]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full overflow-hidden rounded-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"type-avatar-fallback flex size-full items-center justify-center overflow-hidden rounded-full bg-background-secondary-surface text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-background-brand-default text-text-on-brand-static ring-2 ring-background-primary-surface select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n \"group-data-[size=xl]/avatar:size-3.5 group-data-[size=xl]/avatar:[&>svg]:size-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background-primary-surface\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"type-avatar-group-count relative flex size-8 shrink-0 items-center justify-center rounded-full bg-background-secondary-surface text-text-subtle-default ring-2 ring-background-primary-surface group-has-data-[size=sm]/avatar-group:size-6 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=xl]/avatar-group:[width:var(--avatar-size-xl)] group-has-data-[size=xl]/avatar-group:[height:var(--avatar-size-xl)] [&>svg]:size-4 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=xl]/avatar-group:[&>svg]:size-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent font-display whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong [&>svg]:pointer-events-none [&>svg]:size-3\",\n {\n variants: {\n variant: {\n /* Emphasis + meaning. Emphasis is `solid` | `tint`;\n meaning is the suffix, with brand left unsuffixed as the\n default. Two variants sit outside the grid — `glass` and\n `demo` — because they are single-purpose surfaces. */\n\n // Solid — saturated surface, paired foreground. Status fills are\n // the bright 600 steps with shared white ink\n // (--text-on-status-static) — a deliberate style call.\n solid: \"bg-background-brand-default text-text-on-brand-static\",\n \"solid-demo\": \"bg-background-demo-solid text-text-on-brand-static\",\n \"solid-neutral\": \"bg-background-inverse-surface text-text-prominent-inverse\",\n \"solid-success\": \"bg-background-success-solid text-text-on-status-static\",\n \"solid-fail\": \"bg-background-error-solid text-text-on-status-static\",\n \"solid-warning\": \"bg-background-warning-solid text-text-on-status-static\",\n\n // Tint — the Section Message surface tokens, coloured foreground.\n // Brand tint = the static brand-container recipe (layered value,\n // so it paints via `background`, not a bg-* utility).\n tint: \"[background:var(--background-brand-container)] border-transparent text-text-brand-container-static\",\n \"tint-demo\": \"bg-background-demo-default border-transparent text-text-demo-default\",\n \"tint-neutral\": \"bg-background-secondary-surface border-transparent text-text-prominent-default\",\n \"tint-success\": \"bg-background-success-default border-transparent text-text-success-default\",\n \"tint-fail\": \"bg-background-error-default border-transparent text-text-error-default\",\n \"tint-warning\": \"bg-background-warning-default border-transparent text-text-warning-default\",\n\n },\n size: {\n xs: \"type-badge-xs h-5 px-2 py-0.5\",\n sm: \"type-badge-sm h-6 px-2.5 py-0.5\",\n md: \"type-badge-md h-8 px-3 py-1\",\n lg: \"type-badge-lg h-10 px-4 py-1.5\",\n },\n },\n defaultVariants: {\n variant: \"solid\",\n size: \"md\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"solid\",\n size = \"md\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant, size }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Gift, X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { NavigationButton } from \"./navigation-button\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Banner — the editorial gradient panel */\n/* */\n/* One variant (per the design file): a colour gradient panel with art on */\n/* the left, white copy, and a white pill CTA. Horizontal on desktop, */\n/* stacked on mobile (the \"device delta\"). */\n/* */\n/* The colour is CUSTOMISABLE: pass any CSS colour via `color` — the panel */\n/* paints it as a solid base with a fixed black fade layered on top */\n/* (transparent → 50% left-to-right), which lands on the design file's jade */\n/* panel exactly (#0AA060 → #04512E). Brand blue is the standard when no */\n/* colour is given. The panel is art, not a status surface, so it renders */\n/* identically in both themes. */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\ninterface BannerProps extends Omit<React.ComponentProps<\"div\">, \"title\" | \"onClick\"> {\n /**\n * Panel colour — any CSS colour (a game-accent primitive, a hex, a var()).\n * The gradient derives from it automatically. Defaults to the brand blue.\n */\n color?: string\n /** Title text. Required in spirit — the panel is meaningless without it. */\n title?: React.ReactNode\n /** Supporting copy under the title. */\n description?: React.ReactNode\n /**\n * Art slot — game artwork, an illustration, or an icon. Rendered in a\n * frosted square. Defaults to a Gift glyph. Pass `null` to omit.\n */\n art?: React.ReactNode | null\n /**\n * CTA — a string gets wrapped in the Banner's white pill; pass an element\n * to take over the slot entirely.\n */\n action?: React.ReactNode\n /** Click handler for a string `action` — required for the pill to do anything. */\n onAction?: () => void\n /** When provided, the close X renders and calls this on click. */\n onDismiss?: () => void\n /** aria-label for the close button. Defaults to \"Dismiss\". */\n dismissLabel?: string\n /**\n * Makes the entire panel a single click target. Mutually exclusive with\n * `action` — if both are set, the button is ignored and a dev warning logs.\n */\n onClick?: () => void\n}\n\nfunction Banner({\n color = \"var(--background-brand-default)\",\n title,\n description,\n art,\n action,\n onAction,\n onDismiss,\n dismissLabel = \"Dismiss\",\n onClick,\n className,\n style,\n ...props\n}: BannerProps) {\n if (!title && !description) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"Banner: requires at least one of `title` or `description`. Rendering null.\",\n )\n }\n return null\n }\n\n const showArt = art !== null\n const resolvedArt = art === undefined ? <Gift className=\"size-6\" /> : art\n const showCloseButton = typeof onDismiss === \"function\"\n const isClickable = typeof onClick === \"function\"\n const buttonSuppressed = isClickable && Boolean(action)\n\n if (process.env.NODE_ENV !== \"production\" && buttonSuppressed) {\n console.warn(\n \"Banner: `onClick` (clickable surface) is mutually exclusive with `action`. Ignoring the button — the whole banner is the CTA.\",\n )\n }\n const effectiveAction = isClickable ? undefined : action\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n effectiveAction !== undefined &&\n effectiveAction !== null &&\n !React.isValidElement(effectiveAction) &&\n typeof onAction !== \"function\"\n ) {\n console.warn(\n \"Banner: a string `action` renders a button that does nothing without `onAction`.\",\n )\n }\n\n const interactiveProps = isClickable\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n onClick,\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n onClick?.()\n }\n },\n }\n : {}\n\n return (\n // The wrapper is a size container so the panel stacks whenever the BANNER\n // is narrow — not just when the viewport is (the design file's device\n // delta, made container-aware).\n <div className=\"@container w-full\">\n <div\n data-slot=\"banner\"\n data-clickable={isClickable ? \"true\" : undefined}\n className={cn(\n \"relative flex w-full flex-col items-start gap-3 overflow-hidden rounded-2xl p-4 @sm:flex-row @sm:items-center @sm:gap-4\",\n // Reserve the top-right corner for the absolute close X so copy never\n // runs underneath it (12 = 32px button + 16px breathing room).\n showCloseButton && \"pr-12\",\n isClickable &&\n \"cursor-pointer transition-opacity hover:opacity-90 active:opacity-80 outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:ring-offset-2\",\n className,\n )}\n style={{\n // Two layers, like a Figma fill stack: the consumer's solid colour at\n // the bottom, a FIXED black fade on top (transparent -> black 50%,\n // left to right). The fade never depends on the colour, so any custom\n // colour — token or not — darkens correctly with zero tuning.\n background: `linear-gradient(120deg, rgb(0 0 0 / 0%), rgb(0 0 0 / 50%)), ${color}`,\n ...style,\n }}\n {...interactiveProps}\n {...props}\n >\n {/* Art — frosted square riding the panel colour */}\n {showArt ? (\n <span\n aria-hidden\n className=\"inline-flex size-14 shrink-0 items-center justify-center overflow-hidden rounded-xl bg-[var(--primitive-white-alpha-16)] text-text-on-brand-static [&_img]:size-full [&_img]:object-cover\"\n >\n {resolvedArt}\n </span>\n ) : null}\n\n {/* Copy */}\n <div className=\"min-w-0 flex-1\">\n {title ? (\n <p className=\"type-banner-title m-0 text-text-on-brand-static\">{title}</p>\n ) : null}\n {description ? (\n <p className=\"type-banner-description m-0 mt-1 text-[var(--primitive-white-alpha-80)]\">\n {description}\n </p>\n ) : null}\n </div>\n\n {/* CTA — white pill with near-black ink; full-width when stacked */}\n {effectiveAction !== undefined && effectiveAction !== null ? (\n <div className=\"w-full shrink-0 @sm:w-auto\">{wrapAction(effectiveAction, onAction)}</div>\n ) : null}\n\n {/* Dismiss — a NavigationButton carrying the on-brand ink */}\n {showCloseButton ? (\n <NavigationButton\n type=\"button\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n onDismiss?.()\n }}\n aria-label={dismissLabel}\n className=\"absolute top-3 right-3 cursor-pointer text-text-on-brand-static opacity-70 transition-opacity hover:bg-transparent hover:opacity-100 [&_svg:not([class*='size-'])]:size-4\"\n >\n <X />\n </NavigationButton>\n ) : null}\n </div>\n </div>\n )\n}\n\n/**\n * Normalize the CTA. Elements pass through untouched; strings/numbers get\n * the system Button (primary-on-brand: white pill, brand ink) on the sm\n * rail — full-width in the stacked (mobile) layout, hugging its label at sm+.\n */\nfunction wrapAction(node: React.ReactNode, onAction?: () => void): React.ReactNode {\n if (React.isValidElement(node)) return node\n return (\n <Button\n variant=\"primary-on-brand\"\n size=\"sm\"\n className=\"w-full @sm:w-auto\"\n onClick={(e) => {\n e.stopPropagation()\n onAction?.()\n }}\n >\n {node}\n </Button>\n )\n}\n\nexport { Banner }\nexport type { BannerProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Sparkles } from \"lucide-react\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Bottom Navigation — the mobile counterpart of the desktop Sidebar */\n/* */\n/* A floating pill docked above the bottom edge, holding up to five */\n/* destinations as icon + label stacks (four maximum — three is the norm, */\n/* giving each cell and the bubble generous breathing room). */\n/* */\n/* Material (Refined Mobile spec): heavy near-solid frost — white 78% in */\n/* light, navy 72% in dark — with blur(20)+saturate(1.4) and a soft ambient */\n/* lift. That lift is the one sanctioned shadow exception: floating chrome */\n/* over scrolling content needs separation; inline components still never */\n/* carry shadows. */\n/* */\n/* Selection is a single liquid bubble that travels between destinations: */\n/* the leading edge darts ahead (200ms), the trailing edge is pulled after */\n/* on a slower spring (380ms) — the water-drop absorb. The bubble keeps an */\n/* equal 4px gap on every side (the bar's px-1 padding is the horizontal */\n/* gap), so its full-pill radius nests concentrically inside the bar's */\n/* corners. The bubble is a top-lit gloss over the brand-selected fill; the */\n/* arriving icon pops on an overshoot spring; labels never change size or */\n/* weight. */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nconst MAX_ITEMS = 4\n/** Fallbacks mirroring the motion tokens (used before styles resolve). */\nconst LEAD_MS = 200 // --motion-travel-lead\nconst TRAIL_MS = 380 // --motion-travel-trail\nconst SPRING = \"cubic-bezier(0.3, 1.25, 0.4, 1)\" // --primitive-ease-spring\n\n/** Read a duration token off the nav; falls back to the TS mirror.\n * Computed custom properties normalise to seconds (\"0.38s\"). */\nfunction readMs(styles: CSSStyleDeclaration, token: string, fallback: number) {\n const raw = styles.getPropertyValue(token).trim()\n const value = parseFloat(raw)\n if (!Number.isFinite(value)) return fallback\n return raw.endsWith(\"ms\") ? value : value * 1000\n}\n\nfunction BottomNavigation({\n className,\n children,\n ...props\n}: React.ComponentProps<\"nav\">) {\n const navRef = React.useRef<HTMLElement>(null)\n const bubbleRef = React.useRef<HTMLSpanElement>(null)\n const prevLeft = React.useRef<number | null>(null)\n\n const items = React.Children.toArray(children)\n if (process.env.NODE_ENV !== \"production\" && items.length > MAX_ITEMS) {\n console.warn(\n `BottomNavigation: ${items.length} items — a phone fits at most ${MAX_ITEMS}.`,\n )\n }\n const activeIndex = items.findIndex(\n (child) =>\n React.isValidElement<{ active?: boolean }>(child) && child.props.active,\n )\n\n // Places the bubble over the active item. left/right animate on staggered\n // timings: the edge leading the travel direction moves fast, the other is\n // dragged behind on the spring — the liquid pull.\n const measure = React.useCallback(() => {\n const nav = navRef.current\n const bubble = bubbleRef.current\n if (!nav || !bubble) return\n const target = nav.querySelectorAll<HTMLElement>(\n \"[data-slot=bottom-navigation-item]\",\n )[activeIndex]\n if (!target) {\n bubble.style.opacity = \"0\"\n prevLeft.current = null\n return\n }\n const left = target.offsetLeft\n const right = nav.clientWidth - (target.offsetLeft + target.offsetWidth)\n\n const first = prevLeft.current === null\n const movingRight = !first && left > (prevLeft.current as number)\n prevLeft.current = left\n\n if (first) {\n // First paint (and re-placement after resize): no travel animation.\n bubble.style.transition = \"none\"\n } else {\n const styles = getComputedStyle(nav)\n const lead = readMs(styles, \"--motion-travel-lead\", LEAD_MS)\n const trail = readMs(styles, \"--motion-travel-trail\", TRAIL_MS)\n const spring = styles.getPropertyValue(\"--primitive-ease-spring\").trim() || SPRING\n const leftMs = movingRight ? trail : lead\n const rightMs = movingRight ? lead : trail\n bubble.style.transition = `left ${leftMs}ms ${spring}, right ${rightMs}ms ${spring}`\n }\n bubble.style.opacity = \"1\"\n bubble.style.left = `${left}px`\n bubble.style.right = `${right}px`\n if (first) {\n requestAnimationFrame(() => {\n if (bubbleRef.current) bubbleRef.current.style.transition = \"\"\n })\n }\n }, [activeIndex])\n\n React.useLayoutEffect(() => {\n measure()\n }, [measure, items.length])\n\n const lastWidth = React.useRef<number | null>(null)\n React.useEffect(() => {\n const nav = navRef.current\n if (!nav) return\n const ro = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? nav.clientWidth\n // The observer fires once on observe — only re-place when the bar\n // actually changed size, otherwise it wipes the travel memory and the\n // first selection snaps instead of animating.\n if (lastWidth.current !== null && lastWidth.current !== width) {\n prevLeft.current = null\n measure()\n }\n lastWidth.current = width\n })\n ro.observe(nav)\n return () => ro.disconnect()\n }, [measure])\n\n return (\n <nav\n ref={navRef}\n data-slot=\"bottom-navigation\"\n className={cn(\n \"relative flex h-15 w-full items-center justify-around rounded-full border px-1\",\n \"border-(--border-chrome-default) bg-(--background-chrome-default)\",\n \"[backdrop-filter:blur(20px)_saturate(1.4)] [box-shadow:var(--shadow-chrome-default)]\",\n className,\n )}\n {...props}\n >\n <span\n ref={bubbleRef}\n aria-hidden\n data-slot=\"bottom-navigation-bubble\"\n className=\"pointer-events-none absolute inset-y-1 rounded-full opacity-0 [background:var(--background-chrome-selected)] [box-shadow:inset_0_1px_0_var(--chrome-highlight-default)]\"\n />\n {children}\n </nav>\n )\n}\n\nfunction BottomNavigationItem({\n className,\n active = false,\n asChild = false,\n children,\n ...props\n}: React.ComponentProps<\"button\"> & {\n /** Marks the current destination — the liquid bubble travels to it. */\n active?: boolean\n /** Render as the child element (e.g. a router link). */\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"button\"\n return (\n <Comp\n data-slot=\"bottom-navigation-item\"\n data-active={active || undefined}\n aria-current={active ? \"page\" : undefined}\n className={cn(\n \"type-bottom-navigation-label relative z-10 flex flex-1 cursor-pointer flex-col items-center justify-center gap-0.5 rounded-full py-1.5 text-(--text-chrome-subtle) outline-none transition-colors\",\n \"hover:text-text-prominent-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n \"data-[active]:text-(--text-chrome-selected)\",\n // Icon pop on arrival lives in styles.css (a data-active CSS rule —\n // stacked arbitrary variants can't reach descendant svgs reliably).\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5\",\n className,\n )}\n {...props}\n >\n {children}\n </Comp>\n )\n}\n\n/**\n * The optional AI circle from the Refined Mobile chrome: identical material\n * and ambient lift, circular, sits beside the bar (typically in a\n * `flex items-center gap-2.5` row). Render it or don't — that's the toggle.\n */\nfunction BottomNavigationAI({\n className,\n asChild = false,\n children,\n ...props\n}: React.ComponentProps<\"button\"> & {\n /** Render as the child element (e.g. a router link). */\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"button\"\n return (\n <Comp\n data-slot=\"bottom-navigation-ai\"\n className={cn(\n \"grid size-15 flex-none cursor-pointer place-items-center rounded-full border\",\n \"border-(--border-chrome-default) bg-(--background-chrome-default)\",\n \"[backdrop-filter:blur(20px)_saturate(1.4)] [box-shadow:var(--shadow-chrome-default)]\",\n \"text-(--text-chrome-selected) transition-transform active:scale-[0.93]\",\n \"outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5.5\",\n className,\n )}\n {...props}\n >\n {children ?? <Sparkles />}\n </Comp>\n )\n}\n\nexport { BottomNavigation, BottomNavigationItem, BottomNavigationAI }\n","import * as React from \"react\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"type-breadcrumb flex flex-wrap items-center gap-1.5 break-words text-text-subtle-default sm:gap-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"a\"\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(\"transition-colors hover:text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"type-breadcrumb-page text-text-brand-selected\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-8 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button, buttonVariants } from \"./button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"secondary\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"group/calendar bg-background-primary-surface p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"relative flex flex-col gap-4 md:flex-row\",\n defaultClassNames.months\n ),\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\n nav: cn(\n // pointer-events-none lets clicks reach the caption dropdowns the\n // strip overlaps; the arrow buttons re-enable their own hits.\n \"pointer-events-none absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"pointer-events-auto size-(--cell-size) p-0 select-none aria-disabled:opacity-24\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"pointer-events-auto size-(--cell-size) p-0 select-none aria-disabled:opacity-24\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex h-(--cell-size) w-full items-center justify-center px-10\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"type-calendar-caption flex h-(--cell-size) w-full items-center justify-center gap-1.5\",\n defaultClassNames.dropdowns\n ),\n caption_label: cn(\n \"type-calendar-caption font-body text-text-prominent-default select-none\",\n captionLayout === \"label\"\n ? \"\"\n : \"flex h-8 items-center gap-1 rounded-full pr-1 pl-2 [&>svg]:size-3.5 [&>svg]:text-icon-subtle-default\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"type-calendar-weekday flex-1 rounded-md font-body text-text-subtle-default select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"mt-2 flex w-full\", defaultClassNames.week),\n week_number_header: cn(\n \"w-(--cell-size) select-none\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"type-calendar-weekday text-text-subtle-default select-none\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"group/day relative aspect-square h-full w-full p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-full\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-full\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-full\",\n defaultClassNames.day\n ),\n /* The range band rides `brand-selected` — the theme-aware selection\n family — not the static `brand-container`, which is one value in\n both themes and reads as a pale strip on the dark canvas. */\n range_start: cn(\n \"rounded-l-full bg-background-brand-selected\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-full bg-background-brand-selected\", defaultClassNames.range_end),\n today: cn(\n \"rounded-full data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-text-disabled-default aria-selected:text-text-disabled-default\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-text-disabled-default\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n Dropdown: CalendarDropdown,\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\n/**\n * Themed replacement for the caption's native month/year <select>s: the\n * trigger is a system pill, the options open in our own scrollable popover\n * instead of the OS menu.\n */\nfunction CalendarDropdown({\n options,\n value,\n onChange,\n \"aria-label\": ariaLabel,\n}: React.ComponentProps<\"select\"> & {\n options?: { value: number; label: string; disabled?: boolean }[]\n}) {\n // Fixed trigger widths so the caption — and therefore the whole w-fit\n // panel — never resizes when the label changes (Jan vs Sep, 999 vs 2026).\n const isMonth = options?.some(({ label }) => /[^0-9]/.test(label)) ?? false\n return (\n <Select\n value={String(value)}\n onValueChange={(next) => {\n const event = {\n target: { value: next },\n } as React.ChangeEvent<HTMLSelectElement>\n onChange?.(event)\n }}\n >\n <SelectTrigger\n aria-label={ariaLabel}\n size=\"sm\"\n className={cn(\n \"type-calendar-caption h-8 justify-between gap-1 rounded-full border-border-default-default bg-background-primary-surface px-3 text-text-prominent-default\",\n isMonth ? \"w-20\" : \"w-24\",\n )}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-64 min-w-24\">\n {options?.map(({ value: v, label, disabled }) => (\n <SelectItem key={v} value={String(v)} disabled={disabled}>\n {label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"tertiary\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-today={modifiers.today || undefined}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n // Base day cell — circular, calendar's own type, prominent ink,\n // hover = the standard hover glaze.\n \"type-calendar-day flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 rounded-full leading-none font-body bg-transparent border-transparent shadow-none text-text-prominent-default hover:!bg-background-hover-default hover:text-text-prominent-default hover:no-underline hover:shadow-none group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n // Today (when not selected) — brand number inside a brand hairline\n // ring. The ring, not a heavier weight, is what makes today legible:\n // components cap at semibold 600, and 600 vs 400 doesn't read at 14px.\n \"[&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:font-semibold [&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:text-text-brand-selected [&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:border-[1.5px] [&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:border-border-brand-selected\",\n // Selected single — the same solid brand disc as a range endpoint:\n // both mean \"the date you picked\", so they must not diverge.\n \"data-[selected-single=true]:bg-background-brand-default data-[selected-single=true]:border-transparent data-[selected-single=true]:text-text-on-brand-static data-[selected-single=true]:font-semibold data-[selected-single=true]:hover:!bg-background-brand-default\",\n // Range — the two endpoints are solid brand discs (they're the values\n // the user actually picked); the days between keep the quiet\n // brand-selected band. Both ends and band are theme-aware.\n \"data-[range-start=true]:rounded-full data-[range-start=true]:bg-background-brand-default data-[range-start=true]:border-transparent data-[range-start=true]:text-text-on-brand-static data-[range-start=true]:font-semibold data-[range-start=true]:hover:!bg-background-brand-default\",\n \"data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-background-brand-selected data-[range-middle=true]:text-text-brand-selected data-[range-middle=true]:hover:!bg-background-brand-selected\",\n \"data-[range-end=true]:rounded-full data-[range-end=true]:bg-background-brand-default data-[range-end=true]:border-transparent data-[range-end=true]:text-text-on-brand-static data-[range-end=true]:font-semibold data-[range-end=true]:hover:!bg-background-brand-default\",\n \"[&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\n// .type-* classes are plain CSS, not utilities — Tailwind data-[] variants\n// can't gate them, so the trigger picks its type class here.\nconst selectTriggerType = {\n sm: \"type-select-sm\",\n md: \"type-select-md\",\n lg: \"type-select-lg\",\n} as const\n\nfunction SelectTrigger({\n className,\n size = \"md\",\n readOnly = false,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"md\" | \"lg\"\n readOnly?: boolean\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n data-readonly={readOnly ? \"\" : undefined}\n className={cn(\n selectTriggerType[size],\n \"flex w-fit items-center justify-between gap-2 rounded-xs border border-border-default-default bg-background-primary-surface text-text-prominent-default appearance-none whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-soft disabled:cursor-not-allowed disabled:opacity-24 aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft data-[placeholder]:text-text-subtle-default data-[size=sm]:h-8 data-[size=sm]:px-3 data-[size=sm]:py-1 data-[size=md]:h-10 data-[size=md]:px-3 data-[size=md]:py-1 data-[size=lg]:h-12 data-[size=lg]:px-4 data-[size=lg]:py-2 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default data-[readonly]:cursor-default data-[readonly]:opacity-100\",\n className\n )}\n {...props}\n // Read-only stays focusable and announced (unlike disabled) — it just\n // never opens. Guards sit after the props spread so a consumer handler\n // can't undo them.\n aria-readonly={readOnly || undefined}\n onPointerDown={(e) => {\n if (readOnly) { e.preventDefault(); return }\n props.onPointerDown?.(e)\n }}\n onKeyDown={(e) => {\n if (readOnly && [\"Enter\", \" \", \"ArrowDown\", \"ArrowUp\"].includes(e.key)) {\n e.preventDefault()\n return\n }\n props.onKeyDown?.(e)\n }}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className={cn(\"size-4\", readOnly ? \"opacity-30\" : \"opacity-50\")} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n // \"popper\" drops the list below the trigger, fixed in place. The Radix\n // default (\"item-aligned\") slides the list so the chosen item overlaps\n // the trigger — reads as a bug next to our other menus.\n position = \"popper\",\n align = \"start\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border border-border-default-default bg-background-primary-surface text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"type-menu-heading px-2 py-1.5 text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-8 pl-2 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[state=checked]:text-text-brand-selected data-[disabled]:pointer-events-none data-[disabled]:opacity-24 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4 text-text-brand-selected\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"pointer-events-none -mx-1 my-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Card shell — the design file's shared surface language: card surface,\n * hairline border, 18px (2xl) radius, flat (no shadow, per system rule).\n *\n * The tinted-glass family, one look per surface (same split as Button):\n * `variant=\"frosted\"` sits on page surfaces — solid brand-selected tint +\n * brand ink, no blur (there's no art underneath to frost). `frosted-on-brand`\n * is the actual frosted shell for sitting over hero/game art: white 72% +\n * blur + soft white hairline, identical in both themes. (`glass` is its\n * @deprecated alias — deleted at v1.0.) `interactive` opts into the design\n * file's desktop-only hover lift.\n */\nfunction Card({\n className,\n variant = \"default\",\n interactive = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n variant?: \"default\" | \"frosted\" | \"frosted-on-brand\" | \"glass\"\n interactive?: boolean\n}) {\n return (\n <div\n data-slot=\"card\"\n data-variant={variant}\n className={cn(\n \"flex flex-col gap-4 rounded-2xl py-4\",\n variant === \"frosted-on-brand\" || variant === \"glass\"\n ? \"border border-(--primitive-white-alpha-64) bg-(--primitive-white-alpha-80) backdrop-blur-xl text-text-static-black\"\n : variant === \"frosted\"\n ? \"bg-background-brand-selected text-text-brand-selected\"\n : \"border border-border-default-default bg-background-primary-surface text-text-prominent-default\",\n interactive &&\n \"transition-transform duration-base ease-standard sm:hover:-translate-y-0.75 motion-reduce:transition-none motion-reduce:sm:hover:translate-y-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"h6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"body-sm text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-4\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-4 [.border-t]:pt-4\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"secondary\",\n size = \"icon-md\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"secondary\",\n size = \"icon-md\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Chip — the design file's \"one shape, four jobs\" pill. Quick amounts and\n * categories are the default look; `selected` turns solid brand (white ink);\n * `variant=\"outline\"` is the error-recovery chip (brand border + brand text,\n * e.g. \"Max 1,240.50\"). Live-status pills belong to Badge, not Chip.\n */\nconst chipVariants = cva(\n \"inline-flex w-fit items-center justify-center rounded-full font-body whitespace-nowrap transition-colors outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:pointer-events-none disabled:border disabled:border-border-default-default disabled:bg-transparent disabled:text-text-disabled-default\",\n {\n variants: {\n size: {\n md: \"type-chip-md h-10 px-4\",\n sm: \"type-chip-sm h-8 px-3\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\ninterface ChipProps\n extends React.ComponentProps<\"button\">,\n VariantProps<typeof chipVariants> {\n selected?: boolean\n /** `outline` = the brand-outlined recovery chip. */\n variant?: \"default\" | \"outline\"\n}\n\nfunction Chip({ children, selected = false, variant = \"default\", size, className, disabled, ...props }: ChipProps) {\n return (\n <button\n type=\"button\"\n aria-pressed={selected}\n data-slot=\"chip\"\n data-size={size}\n data-variant={variant}\n data-selected={selected || undefined}\n disabled={disabled}\n className={cn(\n chipVariants({ size }),\n selected\n ? \"border border-transparent bg-background-brand-default text-text-on-brand-static pointer-events-none cursor-default\"\n : variant === \"outline\"\n ? \"border-[1.5px] border-border-brand-selected bg-background-primary-surface text-text-brand-selected hover:bg-background-hover-default\"\n : \"border border-border-default-default bg-background-primary-surface text-text-prominent-default hover:bg-background-secondary-surface active:bg-background-secondary-wash\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\nexport { Chip, chipVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon } from \"lucide-react\"\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer size-4 shrink-0 rounded-2xs border border-border-default-default bg-background-primary-surface transition-colors outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:cursor-not-allowed disabled:opacity-24 data-[state=checked]:border-transparent data-[state=checked]:bg-background-brand-default data-[state=checked]:text-text-on-brand-static\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-2xl bg-background-primary-surface text-text-prominent-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <Command className=\"**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-text-subtle-default [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b border-border-default-default px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 text-icon-subtle-default\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"type-menu-item flex h-10 w-full rounded-md bg-transparent py-3 outline-hidden placeholder:text-text-subtle-default disabled:cursor-not-allowed disabled:opacity-24\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"type-menu-item py-6 text-center text-text-subtle-default\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"overflow-hidden p-1 text-text-prominent-default [&_[cmdk-group-heading]]:type-menu-heading [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"-mx-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"type-menu-item relative flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-24 data-[selected=true]:bg-background-hover-default data-[selected=true]:text-text-prominent-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"type-menu-heading ml-auto text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { NavigationButton } from \"./navigation-button\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-background-overlay-default data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 flex h-auto w-full max-w-[calc(100%-2rem)] flex-col translate-x-[-50%] translate-y-[-50%] gap-6 rounded-2xl border border-border-default-default bg-background-primary-surface p-6 duration-base outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <NavigationButton\n data-slot=\"dialog-close\"\n size=\"sm\"\n aria-label=\"Close\"\n className=\"absolute top-4 right-4\"\n >\n <XIcon className=\"size-4\" />\n </NavigationButton>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"secondary\" size=\"md\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"type-dialog-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"type-dialog-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { ContextMenu as ContextMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n )\n}\n\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n )\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n )\n}\n\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[inset]:pl-8 data-[state=open]:bg-background-hover-default data-[state=open]:text-text-prominent-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n )\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n className={cn(\n \"z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:opacity-24 data-[inset]:pl-8 data-[variant=destructive]:text-text-error-default data-[variant=destructive]:focus:bg-background-error-default data-[variant=destructive]:focus:text-text-error-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default data-[variant=destructive]:*:[svg]:text-text-error-default!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:opacity-24 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:opacity-24 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"type-menu-heading px-2 py-1.5 text-text-prominent-default data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"type-menu-shortcut ml-auto text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-background-overlay-default data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content fixed z-50 flex h-auto flex-col bg-background-primary-surface\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-2xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=top]:border-border-default-default\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-2xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=bottom]:border-border-default-default\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:border-border-default-default data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:border-border-default-default data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full bg-border-default-default group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4 [&>*]:w-full\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"type-drawer-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"type-drawer-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:opacity-24 data-[inset]:pl-8 data-[variant=destructive]:text-text-error-default data-[variant=destructive]:focus:bg-background-error-default data-[variant=destructive]:focus:text-text-error-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default data-[variant=destructive]:*:[svg]:text-text-error-default!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:opacity-24 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:opacity-24 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"type-menu-heading px-2 py-1.5 text-text-prominent-default data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"type-menu-shortcut ml-auto text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[inset]:pl-8 data-[state=open]:bg-background-hover-default data-[state=open]:text-text-prominent-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-2xl border-dashed border-border-default-default p-6 text-center text-balance md:p-12\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(\n \"flex max-w-sm flex-col items-center gap-2 text-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"flex size-10 shrink-0 items-center justify-center rounded-lg bg-background-secondary-surface text-icon-prominent-default [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(\"type-empty-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n \"type-empty-description text-text-subtle-default [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n \"type-empty-description flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Label } from \"./label\"\nimport { Separator } from \"./separator\"\n\ntype FieldSize = \"sm\" | \"md\" | \"lg\"\n\n/**\n * Field's size cascades to the control inside it: Input (and, as they join\n * the system, other form controls) read this context and default their own\n * size to it, so `<Field size=\"sm\">` sizes the whole frame with one prop.\n * An explicit size on the control still wins.\n */\nconst FieldSizeContext = React.createContext<FieldSize>(\"md\")\n\nfunction useFieldSize() {\n return React.useContext(FieldSizeContext)\n}\n\nconst fieldLabelType: Record<FieldSize, string> = {\n sm: \"type-field-label-sm\",\n md: \"type-field-label-md\",\n lg: \"type-field-label-lg\",\n}\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 text-text-prominent-default\",\n // .type-* classes are plain CSS, not utilities — Tailwind data-[]\n // variants can't gate them, so pick the class here instead.\n variant === \"legend\" ? \"type-field-legend\" : \"type-field-legend-label\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field flex w-full data-[invalid=true]:text-text-error-default\",\n {\n variants: {\n size: {\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-3\",\n },\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n size: \"md\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n size = \"md\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <FieldSizeContext.Provider value={size ?? \"md\"}>\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n data-size={size}\n className={cn(fieldVariants({ orientation, size }), className)}\n {...props}\n />\n </FieldSizeContext.Provider>\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n const size = useFieldSize()\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n fieldLabelType[size],\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-24\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border has-[>[data-slot=field]]:border-border-default-default [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:border-border-brand-selected has-data-[state=checked]:bg-background-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n const size = useFieldSize()\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n fieldLabelType[size],\n \"flex w-fit items-center gap-2 group-data-[disabled=true]/field:opacity-24\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"type-field-description text-text-subtle-default group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"type-field-description relative -my-2 h-5 group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"relative mx-auto block w-fit bg-background-primary-surface px-2 text-text-subtle-default\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"type-field-description text-text-error-default\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n useFieldSize,\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Label as LabelPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n // Colour is inherited on purpose: a Field marked data-invalid paints its\n // subtree error-red, and the label follows.\n \"type-label flex items-center gap-2 select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-24 peer-disabled:cursor-not-allowed peer-disabled:opacity-24\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border-default-default data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { HoverCard as HoverCardPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-2xl border border-border-default-default bg-background-primary-surface p-4 text-text-prominent-default outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n )\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { useFieldSize } from \"./field\"\n\nconst inputVariants = cva(\n [\n \"w-full min-w-0 rounded-xs border font-body transition-[color,box-shadow] outline-none\",\n \"file:inline-flex file:border-0 file:bg-transparent file:font-medium\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-24\",\n // Read-only stays focusable and selectable (users copy codes/amounts);\n // only the surface flattens.\n \"read-only:border-transparent read-only:bg-background-secondary-surface\",\n \"focus-visible:ring-[3px]\",\n \"aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft\",\n ].join(\" \"),\n {\n variants: {\n // `default` is the surface treatment; `on-brand` is the sunken\n // dark-glaze treatment for brand-coloured surfaces. Both are built the\n // solid-base-plus-fixed-glaze way: on-brand's fill is a black glaze\n // over whatever brand colour the consumer painted underneath.\n variant: {\n default: [\n \"border-border-default-default bg-background-primary-surface text-text-prominent-default\",\n \"file:text-text-prominent-default\",\n \"placeholder:text-text-subtle-default\",\n \"selection:bg-background-brand-default selection:text-text-on-brand-static\",\n \"focus-visible:border-ring-focus-default focus-visible:ring-ring-focus-soft\",\n ].join(\" \"),\n \"on-brand\": [\n \"border-(--primitive-white-alpha-24) bg-(--primitive-black-alpha-32) text-text-on-brand-static\",\n \"file:text-text-on-brand-static\",\n \"placeholder:text-(--primitive-white-alpha-50)\",\n \"selection:bg-background-static-white selection:text-text-brand-container-static\",\n \"focus-visible:border-background-static-white focus-visible:ring-(--primitive-white-alpha-40)\",\n ].join(\" \"),\n /* @deprecated alias — renamed to `on-brand`. Deleted at v1.0. */\n inverse: [\n \"border-(--primitive-white-alpha-24) bg-(--primitive-black-alpha-32) text-text-on-brand-static\",\n \"file:text-text-on-brand-static\",\n \"placeholder:text-(--primitive-white-alpha-50)\",\n \"selection:bg-background-static-white selection:text-text-brand-container-static\",\n \"focus-visible:border-background-static-white focus-visible:ring-(--primitive-white-alpha-40)\",\n ].join(\" \"),\n },\n size: {\n sm: \"type-input-sm h-8 px-3 py-1 file:h-6 file:text-xs\",\n md: \"type-input-md h-10 px-3 py-1 file:h-7 file:text-sm\",\n lg: \"type-input-lg h-12 px-4 py-2 file:h-8 file:text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nfunction Input({\n className,\n type,\n variant = \"default\",\n size,\n ...props\n}: Omit<React.ComponentProps<\"input\">, \"size\"> & VariantProps<typeof inputVariants>) {\n // Inside a Field, the field's size prop sets the default; an explicit\n // size on the Input still wins.\n const fieldSize = useFieldSize()\n const resolvedSize = size ?? fieldSize\n return (\n <input\n type={type}\n data-slot=\"input\"\n data-variant={variant}\n data-size={resolvedSize}\n className={cn(inputVariants({ variant, size: resolvedSize }), className)}\n {...props}\n />\n )\n}\n\nexport { Input, inputVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { useFieldSize } from \"./field\"\nimport { Input } from \"./input\"\nimport { Textarea } from \"./textarea\"\n\ntype InputGroupSize = \"sm\" | \"md\" | \"lg\"\ntype InputGroupVariant = \"default\" | \"on-brand\" | \"inverse\"\n\nconst InputGroupSizeContext = React.createContext<InputGroupSize>(\"md\")\nconst InputGroupVariantContext =\n React.createContext<InputGroupVariant>(\"default\")\n\nconst inputGroupVariants = cva(\n [\n \"group/input-group relative flex w-full items-center rounded-xs border\",\n \"transition-[color,box-shadow] outline-none min-w-0 has-[>textarea]:h-auto\",\n // Reduce input padding only on the side an addon is attached to; the\n // opposite side keeps the natural Input padding (pl-3 / pr-3 = 12 px).\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n // Focus ring (size; colour comes from the variant).\n \"has-[[data-slot=input-group-control]:focus-visible]:ring-[3px]\",\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:border-border-error-default has-[[data-slot][aria-invalid=true]]:ring-ring-error-soft\",\n ].join(\" \"),\n {\n variants: {\n // `default` is the surface treatment; `on-brand` is the sunken\n // black-glaze treatment for brand-coloured surfaces (mirrors `Input`).\n variant: {\n default: [\n \"border-border-default-default bg-background-primary-surface\",\n \"has-[[data-slot=input-group-control]:focus-visible]:border-ring-focus-default has-[[data-slot=input-group-control]:focus-visible]:ring-ring-focus-soft\",\n ].join(\" \"),\n \"on-brand\": [\n \"border-(--primitive-white-alpha-24) bg-(--primitive-black-alpha-32)\",\n \"has-[[data-slot=input-group-control]:focus-visible]:border-background-static-white has-[[data-slot=input-group-control]:focus-visible]:ring-(--primitive-white-alpha-40)\",\n ].join(\" \"),\n /* @deprecated alias — renamed to `on-brand`. Deleted at v1.0. */\n inverse: [\n \"border-(--primitive-white-alpha-24) bg-(--primitive-black-alpha-32)\",\n \"has-[[data-slot=input-group-control]:focus-visible]:border-background-static-white has-[[data-slot=input-group-control]:focus-visible]:ring-(--primitive-white-alpha-40)\",\n ].join(\" \"),\n },\n size: {\n sm: \"h-8\",\n md: \"h-10\",\n lg: \"h-12\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nfunction InputGroup({\n className,\n variant = \"default\",\n size,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupVariants>) {\n // Inside a Field, the field's size prop sets the default (same cascade as\n // Input); an explicit size on the group still wins.\n const fieldSize = useFieldSize()\n const resolvedSize = (size ?? fieldSize) as InputGroupSize\n return (\n <InputGroupVariantContext.Provider\n value={variant as InputGroupVariant}\n >\n <InputGroupSizeContext.Provider value={resolvedSize}>\n <div\n data-slot=\"input-group\"\n data-variant={variant}\n data-size={resolvedSize}\n role=\"group\"\n className={cn(inputGroupVariants({ variant, size: resolvedSize }), className)}\n {...props}\n />\n </InputGroupSizeContext.Provider>\n </InputGroupVariantContext.Provider>\n )\n}\n\nconst inputGroupAddonVariants = cva(\n [\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-text-subtle-default select-none\",\n // Swap addon text/icon colour when inside an on-brand group.\n \"group-data-[variant=on-brand]/input-group:text-(--primitive-white-alpha-64)\",\n \"group-data-[variant=inverse]/input-group:text-(--primitive-white-alpha-64)\",\n \"group-data-[disabled=true]/input-group:opacity-24\",\n \"[&>kbd]:rounded-[calc(var(--radius)-5px)]\",\n // Text size inherits the group's --input-* ladder (set on the group in CSS).\n \"group-data-[size=sm]/input-group:py-1\",\n \"group-data-[size=lg]/input-group:py-2\",\n // Default icon size (overridden by size variants below).\n \"[&>svg:not([class*='size-'])]:size-4\",\n \"group-data-[size=sm]/input-group:[&>svg:not([class*='size-'])]:size-3.5\",\n ].join(\" \"),\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n // Pills inside the field — real Buttons at `sm` type (14/semibold), with\n // heights compressed to fit the frame. Icon variants are circles.\n \"flex items-center gap-2 shadow-none\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-full px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"h-8 gap-1.5 rounded-full px-3 has-[>svg]:px-2.5\",\n \"icon-xs\": \"size-6 rounded-full p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 rounded-full p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"secondary\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n size=\"sm\"\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"flex items-center gap-2 text-text-subtle-default\",\n // Swap text/icon colour when inside an on-brand group.\n \"group-data-[variant=on-brand]/input-group:text-(--primitive-white-alpha-64)\",\n \"group-data-[variant=inverse]/input-group:text-(--primitive-white-alpha-64)\",\n // Text size inherits the group's --input-* ladder; icons track it.\n \"group-data-[size=sm]/input-group:[&_svg:not([class*='size-'])]:size-3.5\",\n \"group-data-[size=md]/input-group:[&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[size=lg]/input-group:[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg]:pointer-events-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n size: sizeProp,\n variant: variantProp,\n ...props\n}: Omit<React.ComponentProps<\"input\">, \"size\"> & {\n size?: InputGroupSize\n variant?: InputGroupVariant\n}) {\n const groupSize = React.useContext(InputGroupSizeContext)\n const groupVariant = React.useContext(InputGroupVariantContext)\n const size = sizeProp ?? groupSize\n const variant = variantProp ?? groupVariant\n return (\n <Input\n data-slot=\"input-group-control\"\n size={size}\n variant={variant}\n className={cn(\n \"h-full flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"type-textarea flex field-sizing-content min-h-16 w-full rounded-xs border border-border-default-default bg-background-primary-surface px-3 py-2 text-text-prominent-default font-body transition-[color,box-shadow] outline-none placeholder:text-text-subtle-default selection:bg-background-brand-default selection:text-text-on-brand-static focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-soft disabled:cursor-not-allowed disabled:opacity-24 aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-24\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"type-input-otp relative flex size-12 items-center justify-center border border-border-default-default bg-background-primary-surface font-body text-text-prominent-default transition-[color,box-shadow] outline-none first:rounded-l-xs last:rounded-r-xs aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft data-[active=true]:z-10 data-[active=true]:border-ring-focus-default data-[active=true]:ring-[3px] data-[active=true]:ring-ring-focus-soft data-[active=true]:aria-invalid:border-border-error-default data-[active=true]:aria-invalid:ring-ring-error-soft\",\n className\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"h-4 w-px animate-caret-blink bg-text-prominent-default duration-1000\" />\n </div>\n )}\n </div>\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <MinusIcon />\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Separator } from \"./separator\"\n\nfunction ItemGroup({\n className,\n divider = true,\n ...props\n}: React.ComponentProps<\"div\"> & {\n /**\n * Auto-divide consecutive default-variant `Item`s with a bottom border\n * (`border-default-default`). The last item's bottom border is suppressed,\n * and non-default variants (`outline`, `muted`) are left untouched so\n * they don't double up with their own borders. Defaults to `true`; pass\n * `false` to opt out when the design wants flush items or uses\n * `<ItemSeparator />` manually.\n */\n divider?: boolean\n}) {\n return (\n <div\n role=\"list\"\n data-slot=\"item-group\"\n data-divider={divider ? \"true\" : undefined}\n className={cn(\n \"group/item-group flex flex-col\",\n // Divider mode: 4 px gap between items + a 1 px line drawn via\n // ::after on each non-last default item, sitting in that gap.\n // Item itself stays border-free — the line is a separate visual\n // element rather than an outline on the item.\n divider && [\n \"gap-1\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:relative\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:content-['']\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:absolute\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:-bottom-0.5\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:inset-x-4\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:h-px\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:bg-border-default-default\",\n ],\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ItemSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"item-separator\"\n orientation=\"horizontal\"\n className={cn(\"my-0\", className)}\n {...props}\n />\n )\n}\n\nconst itemVariants = cva(\n \"group/item type-item-description flex flex-wrap items-center rounded-md border border-transparent transition-colors duration-instant outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong [a]:transition-colors [a]:hover:bg-background-hover-default\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-border-default-default text-text-prominent-default hover:bg-background-hover-default\",\n muted: \"bg-background-secondary-surface\",\n },\n size: {\n default: \"gap-4 p-4\",\n sm: \"gap-2.5 px-4 py-3\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Item({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> &\n VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"div\"\n return (\n <Comp\n data-slot=\"item\"\n data-variant={variant}\n data-size={size}\n className={cn(itemVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nconst itemMediaVariants = cva(\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"size-8 rounded-full border border-border-default-default bg-background-secondary-surface text-icon-prominent-default [&_svg:not([class*='size-'])]:size-4\",\n image:\n \"size-10 overflow-hidden rounded-full [&_img]:size-full [&_img]:object-cover\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction ItemMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof itemMediaVariants>) {\n return (\n <div\n data-slot=\"item-media\"\n data-variant={variant}\n className={cn(itemMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction ItemContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-content\"\n className={cn(\n \"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-title\"\n className={cn(\n \"type-item-title flex w-fit items-center gap-2 text-text-prominent-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"item-description\"\n className={cn(\n \"type-item-description line-clamp-2 text-balance text-text-subtle-default\",\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemActions({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-actions\"\n className={cn(\"flex items-center gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction ItemHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-header\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-footer\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Item,\n ItemMedia,\n ItemContent,\n ItemActions,\n ItemGroup,\n ItemSeparator,\n ItemTitle,\n ItemDescription,\n ItemHeader,\n ItemFooter,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst linkVariants = cva(\n [\n \"inline-flex shrink-0 items-center gap-1.5 whitespace-nowrap transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong active:opacity-60 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:inline font-display normal-case\",\n // Quiet at rest, the underline arrives as hover feedback.\n \"hover:underline decoration-2 underline-offset-4\",\n // Arrow nudge — a trailing icon slides right on hover.\n \"[&_svg]:transition-transform hover:[&>svg:last-child]:translate-x-0.5\",\n ].join(\" \"),\n {\n variants: {\n size: {\n lg: \"type-link-lg [&_svg:not([class*='size-'])]:size-4\",\n md: \"type-link-md [&_svg:not([class*='size-'])]:size-4\",\n sm: \"type-link-sm [&_svg:not([class*='size-'])]:size-3.5\",\n },\n // on-brand = static white for links on brand-coloured surfaces\n // (same family naming as Button/Input).\n tone: {\n brand: \"text-text-brand-selected hover:text-text-brand-hover\",\n \"on-brand\":\n \"text-text-on-brand-static hover:text-(--primitive-white-alpha-80)\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n tone: \"brand\",\n },\n }\n)\n\nfunction Link({\n className,\n size = \"lg\",\n tone = \"brand\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"a\"> &\n VariantProps<typeof linkVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"a\"\n\n return (\n <Comp\n data-slot=\"link\"\n data-size={size}\n data-tone={tone}\n className={cn(linkVariants({ size, tone, className }))}\n {...props}\n />\n )\n}\n\nexport { Link, linkVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { Menubar as MenubarPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"flex h-10 items-center gap-1 rounded-lg border border-border-default-default bg-background-primary-surface p-1\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n )\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"flex items-center type-menu-trigger rounded-md px-2 py-1 outline-hidden select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[state=open]:bg-background-hover-default data-[state=open]:text-text-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </MenubarPortal>\n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:opacity-24 data-[inset]:pl-8 data-[variant=destructive]:text-text-error-default data-[variant=destructive]:focus:bg-background-error-default data-[variant=destructive]:focus:text-text-error-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default data-[variant=destructive]:*:[svg]:text-text-error-default!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:opacity-24 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:opacity-24 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"type-menu-heading px-2 py-1.5 text-text-prominent-default data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"type-menu-shortcut ml-auto text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-none select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[inset]:pl-8 data-[state=open]:bg-background-hover-default data-[state=open]:text-text-prominent-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { useFieldSize } from \"./field\"\n\ntype NativeSelectSize = \"sm\" | \"md\" | \"lg\"\n\nconst sizeClasses: Record<NativeSelectSize, string> = {\n sm: \"type-native-select-sm h-8 py-1\",\n md: \"type-native-select-md h-10 py-2\",\n lg: \"type-native-select-lg h-12 py-2 px-4 pr-10\",\n}\n\nfunction NativeSelect({\n className,\n size,\n ...props\n}: Omit<React.ComponentProps<\"select\">, \"size\"> & {\n /** `\"default\"` is a deprecated alias for `\"md\"` — deleted at v1.0. */\n size?: NativeSelectSize | \"default\"\n}) {\n // Inside a Field, the field's size prop sets the default (same cascade as\n // Input); an explicit size on the select still wins.\n const fieldSize = useFieldSize()\n const resolvedSize: NativeSelectSize =\n size === \"default\" || size == null ? (size == null ? fieldSize : \"md\") : size\n return (\n <div\n className=\"group/native-select relative w-fit has-[select:disabled]:opacity-24\"\n data-slot=\"native-select-wrapper\"\n >\n <select\n data-slot=\"native-select\"\n data-size={resolvedSize}\n className={cn(\n \"w-full min-w-0 appearance-none rounded-xs border border-border-default-default bg-background-primary-surface px-3 pr-9 text-text-prominent-default transition-[color,box-shadow] outline-none selection:bg-background-brand-default selection:text-text-on-brand-static disabled:pointer-events-none disabled:cursor-not-allowed\",\n \"focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-soft\",\n sizeClasses[resolvedSize],\n className\n )}\n {...props}\n />\n <ChevronDownIcon\n className=\"pointer-events-none absolute top-1/2 right-3.5 size-4 -translate-y-1/2 text-icon-subtle-default select-none\"\n aria-hidden=\"true\"\n data-slot=\"native-select-icon\"\n />\n </div>\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return <option data-slot=\"native-select-option\" {...props} />\n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n <optgroup\n data-slot=\"native-select-optgroup\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n","import * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDownIcon } from \"lucide-react\"\nimport { NavigationMenu as NavigationMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n className={cn(\n \"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\",\n className\n )}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn(\n \"group flex flex-1 list-none items-center justify-center gap-1\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot=\"navigation-menu-item\"\n className={cn(\"relative\", className)}\n {...props}\n />\n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n \"group type-menu-trigger inline-flex h-10 w-max items-center justify-center rounded-md bg-background-primary-surface px-4 py-2 transition-[color,box-shadow] outline-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-24 data-[state=open]:bg-background-hover-default data-[state=open]:text-text-prominent-default data-[state=open]:hover:bg-background-hover-default data-[state=open]:focus:bg-background-hover-default\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDownIcon\n className=\"relative top-[1px] ml-1 size-3 transition duration-slow group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n \"top-0 left-0 w-full p-2 pr-2.5 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out md:absolute md:w-auto\",\n \"group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:border-border-default-default group-data-[viewport=false]/navigation-menu:bg-background-primary-surface group-data-[viewport=false]/navigation-menu:text-text-prominent-default group-data-[viewport=false]/navigation-menu:duration-base **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div\n className={cn(\n \"absolute top-full left-0 isolate z-50 flex justify-center\"\n )}\n >\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface text-text-prominent-default data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"type-menu-item flex flex-col gap-1 rounded-md p-2 transition-all outline-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:outline-1 data-[active=true]:bg-background-brand-selected data-[active=true]:text-text-brand-selected data-[active=true]:hover:bg-background-brand-selected data-[active=true]:focus:bg-background-brand-selected [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in\",\n className\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border-default-default\" />\n </NavigationMenuPrimitive.Indicator>\n )\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Delete } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Numpad — the mobile amount-entry tray */\n/* */\n/* A bare 3×4 digit grid, no key backgrounds — only the press glaze marks a */\n/* touch (per the design file). Controlled: the component emits keys and the */\n/* consumer owns the amount string. Long-pressing backspace clears it. */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nconst LONG_PRESS_MS = 600\n\ntype NumpadKey =\n | \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\"\n | \".\" | \"backspace\"\n\ninterface NumpadProps\n extends Omit<React.ComponentProps<\"div\">, \"onKeyDown\" | \"onKeyPress\"> {\n /** Fired for every tap: a digit, \".\", or \"backspace\". */\n onKeyPress?: (key: NumpadKey) => void\n /** Fired when backspace is long-pressed (~600ms) — clear the amount. */\n onClear?: () => void\n /** Hide the \".\" key for integer-only entry. */\n decimal?: boolean\n disabled?: boolean\n}\n\nfunction Numpad({\n className,\n onKeyPress,\n onClear,\n decimal = true,\n disabled = false,\n ...props\n}: NumpadProps) {\n // Long-press bookkeeping for the backspace key: when the hold timer fires\n // we clear and swallow the tap that would otherwise land on release.\n const holdTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const longPressFired = React.useRef(false)\n\n const startHold = () => {\n longPressFired.current = false\n holdTimer.current = setTimeout(() => {\n longPressFired.current = true\n onClear?.()\n }, LONG_PRESS_MS)\n }\n const cancelHold = () => {\n if (holdTimer.current) clearTimeout(holdTimer.current)\n holdTimer.current = null\n }\n React.useEffect(() => cancelHold, [])\n\n const keys: (NumpadKey | null)[] = [\n \"1\", \"2\", \"3\",\n \"4\", \"5\", \"6\",\n \"7\", \"8\", \"9\",\n decimal ? \".\" : null, \"0\", \"backspace\",\n ]\n\n return (\n <div\n data-slot=\"numpad\"\n role=\"group\"\n aria-label=\"Number pad\"\n className={cn(\n \"grid w-full grid-cols-3 gap-1\",\n disabled && \"pointer-events-none opacity-24\",\n className,\n )}\n {...props}\n >\n {keys.map((key, i) =>\n key === null ? (\n <span key={`empty-${i}`} aria-hidden />\n ) : (\n <button\n key={key}\n type=\"button\"\n data-slot=\"numpad-key\"\n data-key={key}\n disabled={disabled}\n aria-label={key === \"backspace\" ? \"Backspace — hold to clear\" : key}\n className={cn(\n \"type-numpad flex h-12 cursor-pointer items-center justify-center rounded-lg text-text-prominent-default outline-none transition-colors select-none\",\n \"hover:bg-background-hover-default active:bg-background-pressed-default\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n key === \"backspace\" && \"text-icon-subtle-default\",\n )}\n onPointerDown={key === \"backspace\" ? startHold : undefined}\n onPointerUp={key === \"backspace\" ? cancelHold : undefined}\n onPointerLeave={key === \"backspace\" ? cancelHold : undefined}\n onContextMenu={\n key === \"backspace\" ? (e) => e.preventDefault() : undefined\n }\n onClick={() => {\n if (key === \"backspace\" && longPressFired.current) {\n longPressFired.current = false\n return\n }\n onKeyPress?.(key)\n }}\n >\n {key === \"backspace\" ? <Delete className=\"size-5.5\" /> : key}\n </button>\n ),\n )}\n </div>\n )\n}\n\nexport { Numpad }\nexport type { NumpadKey, NumpadProps }\n","import * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n \"type-pagination inline-flex shrink-0 items-center justify-center size-10 rounded-full font-display whitespace-nowrap transition-[color,background-color,border-color] outline-none border focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n isActive\n ? \"bg-background-brand-selected border-border-brand-selected text-text-brand-selected\"\n : \"bg-transparent border-transparent text-text-prominent-default hover:bg-background-hover-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<\"a\">) {\n return (\n <Button asChild variant=\"tertiary\" size=\"icon-md\" className={cn(className)}>\n <a aria-label=\"Go to previous page\" data-slot=\"pagination-link\" {...props}>\n <ChevronLeftIcon className=\"size-5\" />\n </a>\n </Button>\n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<\"a\">) {\n return (\n <Button asChild variant=\"tertiary\" size=\"icon-md\" className={cn(className)}>\n <a aria-label=\"Go to next page\" data-slot=\"pagination-link\" {...props}>\n <ChevronRightIcon className=\"size-5\" />\n </a>\n </Button>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-10 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-2xl border border-border-default-default bg-background-primary-surface p-4 text-text-prominent-default outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"type-popover-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"type-popover-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Progress as ProgressPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────────\n Progress — determinate progress in the design file's four shapes\n\n `bar` (default) — the linear track, three heights; add `label` /\n `valueLabel` for the setup-meter row. `dots` — pill segments filled in\n order. `ring` — the circular arc with optional centred content (the\n countdown number); `size=\"xl\"` is the 112px avatar-ring geometry that\n Profile Photo's verification ring uses.\n\n Any variant can also self-run: pass `timer` (ms) and `direction` and the\n value animates smoothly — `down` is a countdown drain, `up` a countup\n fill. How it's driven stays the consumer's choice: `value` for real\n progress, `timer` for time.\n\n One track spec throughout: rounded-full, secondary-surface track (ring\n uses the hairline), solid brand fill.\n ───────────────────────────────────────────────────────────────────────── */\n\ntype ProgressVariant = \"bar\" | \"dots\" | \"ring\"\ntype ProgressBarSize = \"sm\" | \"md\" | \"lg\"\ntype ProgressRingSize = \"sm\" | \"md\" | \"lg\" | \"xl\"\n\nconst BAR_HEIGHTS: Record<ProgressBarSize, string> = {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n}\n\nconst DOT_WIDTHS: Record<ProgressBarSize, string> = {\n sm: \"w-4\",\n md: \"w-6\",\n lg: \"w-8\",\n}\n\n/* Ring geometry: box, radius, stroke — xl mirrors ProfilePhoto's\n verification ring (112 / r52 / 7). */\nconst RINGS: Record<ProgressRingSize, { box: number; r: number; stroke: number }> = {\n sm: { box: 24, r: 11, stroke: 2 },\n md: { box: 32, r: 15, stroke: 2 },\n lg: { box: 48, r: 22, stroke: 3 },\n xl: { box: 112, r: 52, stroke: 7 },\n}\n\ninterface ProgressProps\n extends Omit<React.ComponentProps<typeof ProgressPrimitive.Root>, \"children\"> {\n variant?: ProgressVariant\n /** bar/dots: sm | md | lg · ring: sm | md | lg | xl */\n size?: ProgressBarSize | ProgressRingSize\n /** bar only — the setup-meter row above the track. */\n label?: React.ReactNode\n /** bar only — right side of the meter row (e.g. \"2 of 5\"). */\n valueLabel?: React.ReactNode\n /** dots only — number of segments. */\n segments?: number\n /**\n * Self-running timer in ms — drives the value smoothly instead of `value`\n * (countdown drains, countup fills). Remount (change `key`) to restart.\n */\n timer?: number\n /** Timer direction: `down` drains 100 → 0, `up` fills 0 → 100. */\n direction?: \"down\" | \"up\"\n /** Fires once when the timer finishes. */\n onTimerEnd?: () => void\n /**\n * ring only — centred content (e.g. the countdown number). Pass a function\n * to render from the live value: `(pct) => Math.ceil((pct / 100) * 5)`.\n */\n children?: React.ReactNode | ((pct: number) => React.ReactNode)\n}\n\nfunction Progress({\n className,\n value,\n variant = \"bar\",\n size = \"md\",\n label,\n valueLabel,\n segments = 5,\n timer,\n direction = \"down\",\n onTimerEnd,\n children,\n ...props\n}: ProgressProps) {\n const [timerPct, setTimerPct] = React.useState<number | null>(\n timer != null ? (direction === \"up\" ? 0 : 100) : null,\n )\n const endedRef = React.useRef(false)\n\n // Timer mode: one rAF loop drives the value linearly over `timer` ms.\n // The value prop is ignored while it runs; everything else renders the\n // same — countdown, countup and plain progress share one geometry.\n React.useEffect(() => {\n if (timer == null) {\n setTimerPct(null)\n return\n }\n endedRef.current = false\n const start = performance.now()\n let raf = 0\n const frame = (now: number) => {\n const p = Math.min(((now - start) / timer) * 100, 100)\n setTimerPct(direction === \"up\" ? p : 100 - p)\n if (p < 100) {\n raf = requestAnimationFrame(frame)\n } else if (!endedRef.current) {\n endedRef.current = true\n onTimerEnd?.()\n }\n }\n raf = requestAnimationFrame(frame)\n return () => cancelAnimationFrame(raf)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [timer, direction])\n\n const timed = timerPct != null\n const pct = timed ? timerPct : Math.min(Math.max(value ?? 0, 0), 100)\n const content = typeof children === \"function\" ? children(pct) : children\n\n if (variant === \"dots\") {\n const filled = Math.round((pct / 100) * segments)\n return (\n <div\n data-slot=\"progress\"\n data-variant=\"dots\"\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={pct}\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n >\n {Array.from({ length: segments }, (_, i) => (\n <span\n key={i}\n data-slot=\"progress-dot\"\n data-filled={i < filled || undefined}\n className={cn(\n \"h-1 rounded-full\",\n DOT_WIDTHS[(size as ProgressBarSize) in BAR_HEIGHTS ? (size as ProgressBarSize) : \"md\"],\n i < filled\n ? \"bg-background-brand-default\"\n : \"bg-background-secondary-surface\",\n )}\n />\n ))}\n </div>\n )\n }\n\n if (variant === \"ring\") {\n const { box, r, stroke } = RINGS[(size as ProgressRingSize) in RINGS ? (size as ProgressRingSize) : \"md\"]\n const circumference = 2 * Math.PI * r\n return (\n <div\n data-slot=\"progress\"\n data-variant=\"ring\"\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={pct}\n className={cn(\"relative inline-grid place-items-center\", className)}\n style={{ width: box, height: box }}\n {...props}\n >\n <svg\n viewBox={`0 0 ${box} ${box}`}\n className=\"absolute inset-0 -rotate-90\"\n aria-hidden\n >\n <circle\n cx={box / 2}\n cy={box / 2}\n r={r}\n fill=\"none\"\n className=\"stroke-border-default-default\"\n strokeWidth={stroke}\n />\n {/* At 0 the arc is not painted at all — a zero-length dash with\n round caps would otherwise leave a stray dot at 12 o'clock. */}\n {pct > 0 && (\n <circle\n data-slot=\"progress-ring-fill\"\n cx={box / 2}\n cy={box / 2}\n r={r}\n fill=\"none\"\n className={cn(\n \"stroke-background-brand-default\",\n !timed && \"transition-[stroke-dashoffset] duration-slow ease-linear\",\n )}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={circumference * (1 - pct / 100)}\n />\n )}\n </svg>\n {content != null && (\n <span className=\"type-progress-value relative text-text-prominent-default\">\n {content}\n </span>\n )}\n </div>\n )\n }\n\n const bar = (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n data-variant=\"bar\"\n value={pct}\n className={cn(\n // One track spec, shared with Slider: rounded-full, secondary\n // surface, solid brand fill.\n \"relative w-full overflow-hidden rounded-full bg-background-secondary-surface\",\n BAR_HEIGHTS[(size as ProgressBarSize) in BAR_HEIGHTS ? (size as ProgressBarSize) : \"md\"],\n label == null && valueLabel == null && className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(\n \"h-full w-full flex-1 rounded-full bg-background-brand-default\",\n !timed && \"transition-transform duration-slow ease-linear\",\n )}\n style={{ transform: `translateX(-${100 - pct}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n\n if (label == null && valueLabel == null) return bar\n\n return (\n <div data-slot=\"progress-meter\" className={cn(\"flex w-full flex-col gap-1.5\", className)}>\n <div className=\"flex items-baseline justify-between gap-3\">\n {label != null && (\n <span className=\"type-progress-label text-text-prominent-default\">{label}</span>\n )}\n {valueLabel != null && (\n <span className=\"type-progress-label ml-auto text-text-subtle-default tabular-nums\">\n {valueLabel}\n </span>\n )}\n </div>\n {bar}\n </div>\n )\n}\n\nexport { Progress }\nexport type { ProgressProps, ProgressVariant, ProgressBarSize, ProgressRingSize }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Camera, User } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Geometry */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n/**\n * The composite is a fixed 112px: a 96px photo with a 5px ring sitting flush to\n * the outer edge, leaving a 3px gap between photo and ring.\n *\n * The ring is drawn as an SVG circle whose stroke straddles its path, so the\n * path radius is inset by half the stroke to keep the ring inside the box.\n */\nconst BOX = 112\nconst PHOTO = 96\nconst STROKE = 5\nconst RADIUS = BOX / 2 - STROKE / 2 // 53.5\nconst CIRCUMFERENCE = 2 * Math.PI * RADIUS\nconst INSET = (BOX - PHOTO) / 2 // 8\n\nexport interface ProfilePhotoProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n /** Photo URL. Omit to show the placeholder glyph. */\n src?: string\n /** Alt text for the photo. Ignored when no `src` is given. */\n alt?: string\n /** Verification progress, 0–100. Drives the ring. */\n progress?: number\n /**\n * Fires when the camera button is pressed. Omit to hide the button entirely —\n * use that for read-only contexts where the viewer can't change the photo.\n */\n onPhotoChange?: () => void\n /** aria-label for the camera button. */\n photoChangeLabel?: string\n /**\n * Status slot, rendered overlapping the bottom edge. Pass a `Badge` — the\n * component positions it but does not style its content.\n */\n status?: React.ReactNode\n}\n\n/**\n * Profile photo with a verification progress ring.\n *\n * Distinct from `Avatar`: that is a 24–48px identity chip for lists and nav,\n * whereas this is a page-level element carrying progress, a photo-change\n * affordance, and a status badge. The ring animates between values as the\n * player completes verification steps, and starts and ends at 6 o'clock so its\n * seam sits behind the status badge.\n */\nfunction ProfilePhoto({\n src,\n alt = \"\",\n progress = 0,\n onPhotoChange,\n photoChangeLabel = \"Change photo\",\n status,\n className,\n ...props\n}: ProfilePhotoProps) {\n const pct = Math.min(100, Math.max(0, progress))\n const complete = pct >= 100\n\n return (\n <div\n data-slot=\"profile-photo\"\n data-progress={pct}\n data-complete={complete || undefined}\n className={cn(\"relative shrink-0\", className)}\n style={{ width: BOX, height: BOX }}\n {...props}\n >\n {/* rotate-90 moves the circle's start point from 3 to 6 o'clock, so the\n arc opens and closes behind the status badge while still travelling\n clockwise. */}\n <svg\n viewBox={`0 0 ${BOX} ${BOX}`}\n aria-hidden=\"true\"\n className=\"absolute inset-0 size-full rotate-90\"\n >\n <circle\n cx={BOX / 2}\n cy={BOX / 2}\n r={RADIUS}\n fill=\"none\"\n stroke=\"var(--border-default-default)\"\n strokeWidth={STROKE}\n />\n <circle\n data-slot=\"profile-photo-ring\"\n cx={BOX / 2}\n cy={BOX / 2}\n r={RADIUS}\n fill=\"none\"\n strokeWidth={STROKE}\n strokeLinecap=\"round\"\n stroke={complete ? \"var(--text-success-default)\" : \"var(--background-brand-default)\"}\n strokeDasharray={CIRCUMFERENCE}\n strokeDashoffset={CIRCUMFERENCE * (1 - pct / 100)}\n className=\"transition-[stroke-dashoffset,stroke] duration-open ease-enter motion-reduce:transition-none\"\n />\n </svg>\n\n <div\n data-slot=\"profile-photo-image\"\n className=\"absolute flex items-center justify-center overflow-hidden rounded-full bg-background-secondary-surface\"\n style={{ inset: INSET }}\n >\n {src ? (\n <img src={src} alt={alt} className=\"size-full object-cover\" />\n ) : (\n <User className=\"size-10 text-icon-subtle-default\" strokeWidth={1.5} aria-hidden=\"true\" />\n )}\n </div>\n\n {onPhotoChange ? (\n // 24px keeps the chip subordinate to the photo; the ::after extends the\n // hit area to ~44px so it still meets the touch-target minimum.\n <Button\n variant=\"primary\"\n size=\"icon-xs\"\n aria-label={photoChangeLabel}\n onClick={onPhotoChange}\n data-slot=\"profile-photo-camera\"\n className=\"absolute right-0.5 bottom-5 rounded-full border-2 border-prominent after:absolute after:-inset-2.5 after:content-['']\"\n >\n <Camera />\n </Button>\n ) : null}\n\n {status ? (\n <div\n data-slot=\"profile-photo-status\"\n className=\"absolute -bottom-1 left-1/2 -translate-x-1/2\"\n >\n {status}\n </div>\n ) : null}\n </div>\n )\n}\n\nexport { ProfilePhoto }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CircleIcon } from \"lucide-react\"\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"aspect-square size-4 shrink-0 rounded-full border border-border-default-default bg-background-primary-surface transition-[color,box-shadow] outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong data-[state=checked]:border-border-brand-selected disabled:cursor-not-allowed disabled:opacity-24 aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-text-brand-selected text-background-brand-default\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","\"use client\"\n\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: ResizablePrimitive.GroupProps) {\n return (\n <ResizablePrimitive.Group\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full aria-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizablePrimitive.SeparatorProps & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.Separator\n data-slot=\"resizable-handle\"\n className={cn(\n \"relative flex w-px items-center justify-center bg-border-default-default after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring-focus-default focus-visible:ring-offset-1 focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-xs border border-border-default-default bg-border-default-default text-icon-subtle-default\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.Separator>\n )\n}\n\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-border-default-default\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { NavigationButton } from \"./navigation-button\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-background-overlay-default data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-background-primary-surface transition data-[state=closed]:animate-out data-[state=closed]:ease-exit data-[state=closed]:[animation-duration:var(--motion-overlay-close)] data-[state=open]:animate-in data-[state=open]:ease-enter data-[state=open]:[animation-duration:var(--motion-overlay-open)]\",\n side === \"right\" &&\n \"inset-y-0 right-0 h-full w-3/4 border-l border-border-default-default data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n side === \"left\" &&\n \"inset-y-0 left-0 h-full w-3/4 border-r border-border-default-default data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n side === \"top\" &&\n \"inset-x-0 top-0 h-auto border-b border-border-default-default data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n side === \"bottom\" &&\n \"inset-x-0 bottom-0 h-auto border-t border-border-default-default data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close asChild>\n <NavigationButton\n data-slot=\"sheet-close\"\n size=\"sm\"\n aria-label=\"Close\"\n className=\"absolute top-4 right-4\"\n >\n <XIcon className=\"size-4\" />\n </NavigationButton>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"type-sheet-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"type-sheet-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeftIcon } from \"lucide-react\"\nimport { Slot } from \"radix-ui\"\n\nimport { useIsMobile } from \"../../hooks/use-mobile\"\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Separator } from \"./separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet\"\nimport { Skeleton } from \"./skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-background-primary-surface\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-background-primary-surface text-text-prominent-default\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-background-primary-surface p-0 text-text-prominent-default [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer hidden text-text-prominent-default md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-base ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-base ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"flex h-full w-full flex-col bg-background-primary-surface group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-border-default-default\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"secondary\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-border-default-default sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-background-primary-surface\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"relative flex w-full flex-1 flex-col bg-background-primary-canvas\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background-primary-surface shadow-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\n \"flex flex-col gap-2 px-layout-margin-inline py-2 group-data-[collapsible=icon]:px-2\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\n \"flex flex-col gap-2 px-layout-margin-inline py-2 group-data-[collapsible=icon]:px-2\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\n \"relative flex w-full min-w-0 flex-col px-layout-margin-inline py-2 group-data-[collapsible=icon]:px-2\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"div\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"type-sidebar-label flex h-8 shrink-0 items-center rounded-md px-2 text-text-subtle-default ring-ring-focus-default outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-text-prominent-default ring-ring-focus-default outline-hidden transition-transform hover:bg-background-secondary-surface hover:text-text-prominent-default focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"type-sidebar-menu w-full\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-sm p-2 text-left text-text-prominent-default ring-ring-focus-default outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-background-hover-default hover:text-text-brand-hover focus-visible:ring-2 active:bg-background-hover-default active:text-text-brand-hover disabled:pointer-events-none disabled:opacity-24 aria-disabled:pointer-events-none aria-disabled:opacity-24 data-[active=true]:bg-background-brand-selected data-[active=true]:text-text-brand-selected data-[active=true]:hover:bg-background-brand-selected data-[active=true]:hover:text-text-brand-selected data-[state=open]:hover:bg-background-hover-default data-[state=open]:hover:text-text-brand-hover [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 data-[active=true]:[&>svg]:text-text-brand-selected\",\n {\n variants: {\n variant: {\n default: \"\",\n outline:\n \"bg-background-primary-surface ring-1 ring-border-default-default hover:ring-ring-brand-soft data-[active=true]:ring-ring-brand-soft\",\n },\n size: {\n default: \"type-sidebar-menu h-8\",\n sm: \"type-sidebar-menu-sm h-7\",\n lg: \"type-sidebar-menu h-12 group-data-[collapsible=icon]:p-0! group-data-[collapsible=icon]:justify-center\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-text-prominent-default ring-ring-focus-default outline-hidden transition-transform peer-hover/menu-button:text-text-prominent-default hover:bg-background-secondary-surface hover:text-text-prominent-default focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-text-prominent-default data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center type-sidebar-label rounded-md px-1 text-text-prominent-default tabular-nums select-none\",\n \"peer-hover/menu-button:text-text-prominent-default peer-data-[active=true]/menu-button:text-text-prominent-default\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Fixed width for skeleton bars (avoids impure Math.random in render; still reads like varied line length).\n const width = \"70%\"\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-border-default-default px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"a\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-sm px-2 text-text-prominent-default ring-ring-focus-default outline-hidden hover:bg-background-hover-default hover:text-text-brand-hover focus-visible:ring-2 active:bg-background-hover-default active:text-text-brand-hover disabled:pointer-events-none disabled:opacity-24 aria-disabled:pointer-events-none aria-disabled:opacity-24 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 data-[active=true]:[&>svg]:text-text-brand-selected\",\n \"data-[active=true]:bg-background-brand-selected data-[active=true]:text-text-brand-selected\",\n size === \"sm\" && \"type-sidebar-menu-sm\",\n size === \"md\" && \"type-sidebar-menu\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n","import { cn } from \"../../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\n \"relative overflow-hidden rounded-md bg-background-secondary-surface\",\n \"after:pointer-events-none after:absolute after:inset-0 after:[animation:var(--animate-skeleton-sweep)] after:bg-[linear-gradient(90deg,transparent,var(--background-hover-default),transparent)]\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nimport { useIsMobile } from \"../../hooks/use-mobile\"\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"./drawer\"\n\n/**\n * Internal context that lets the parent `Tooltip` tell its descendants\n * (`TooltipTrigger`, `TooltipContent`) which underlying surface to render —\n * \"tooltip\" (Radix popover on hover/focus) or \"drawer\" (vaul bottom sheet on\n * tap). Centralising the decision here guarantees all three components agree\n * on the surface in the same render, instead of each calling `useIsMobile()`\n * independently and momentarily disagreeing during the SSR→hydration flip\n * (which throws \"TooltipTrigger must be used within Tooltip\" errors).\n */\ntype TooltipMode = \"tooltip\" | \"drawer\"\nconst TooltipModeContext = React.createContext<TooltipMode>(\"tooltip\")\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n const isMobile = useIsMobile()\n const mode: TooltipMode = isMobile ? \"drawer\" : \"tooltip\"\n\n if (mode === \"drawer\") {\n return (\n <TooltipModeContext.Provider value=\"drawer\">\n <Drawer>{children}</Drawer>\n </TooltipModeContext.Provider>\n )\n }\n\n return (\n <TooltipModeContext.Provider value=\"tooltip\">\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props}>\n {children}\n </TooltipPrimitive.Root>\n </TooltipModeContext.Provider>\n )\n}\n\nfunction TooltipTrigger({\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n const mode = React.useContext(TooltipModeContext)\n\n if (mode === \"drawer\") {\n return (\n <DrawerTrigger data-slot=\"tooltip-trigger\" {...props}>\n {children}\n </DrawerTrigger>\n )\n }\n\n return (\n <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props}>\n {children}\n </TooltipPrimitive.Trigger>\n )\n}\n\ntype TooltipVariant = \"default\" | \"inverse\"\n\nfunction TooltipContent({\n className,\n sideOffset = 6,\n variant = \"default\",\n title = \"Title\",\n closeLabel = \"Label\",\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content> & {\n /**\n * Surface variant. `default` is the brand-blue tooltip on light surfaces.\n * `inverse` is a white surface with on-prominent (black) text — use over\n * saturated coloured surfaces (e.g. the boost badge) where a blue tooltip\n * would feel visually heavy. Only applies on desktop; mobile always uses\n * the neutral drawer surface.\n */\n variant?: TooltipVariant\n /**\n * Drawer-only: visible heading shown at the top of the mobile drawer.\n * Defaults to the placeholder string `\"Title\"` — consumers should pass\n * domain-specific text. Desktop tooltips ignore this prop.\n */\n title?: string\n /**\n * Drawer-only: text on the dismiss button at the bottom of the mobile\n * drawer (wraps a `DrawerClose`, so tapping it dismisses the drawer).\n * Defaults to the placeholder string `\"Label\"`. Desktop tooltips ignore\n * this prop.\n */\n closeLabel?: string\n}) {\n const mode = React.useContext(TooltipModeContext)\n\n // Mobile: render as a bottom-sheet drawer. Tap trigger → drawer opens and\n // persists until the user taps the scrim, swipes down, or taps the close\n // button at the bottom — much friendlier than a hover-tooltip on touch.\n // Uses the same DrawerHeader / DrawerTitle / DrawerFooter / DrawerClose\n // building blocks as the standard Drawer demo so spacing, typography and\n // dismiss-button placement stay consistent across every drawer surface.\n if (mode === \"drawer\") {\n return (\n <DrawerContent data-slot=\"tooltip-content\" data-variant={variant}>\n <DrawerHeader>\n <DrawerTitle>{title}</DrawerTitle>\n </DrawerHeader>\n <div className={cn(\"type-drawer-description p-4 text-text-subtle-default\", className)}>\n {children}\n </div>\n <DrawerFooter>\n <DrawerClose asChild>\n <Button variant=\"primary\" size=\"md\">\n {closeLabel}\n </Button>\n </DrawerClose>\n </DrawerFooter>\n </DrawerContent>\n )\n }\n\n const surfaceClasses =\n variant === \"inverse\"\n ? \"border border-border-default-default bg-background-primary-surface text-text-prominent-default\"\n : \"bg-background-inverse-surface text-text-prominent-inverse\"\n const arrowClasses =\n variant === \"inverse\"\n ? \"fill-background-primary-surface\"\n : \"fill-background-inverse-surface\"\n\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n data-variant={variant}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md border-0 px-3 py-1.5 has-[[data-slot=kbd]]:px-3.5 has-[[data-slot=kbd]]:py-2 has-[[data-slot=kbd]]:space-y-1.5 type-tooltip text-balance whitespace-normal fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n surfaceClasses,\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className={arrowClasses} />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\nexport type { TooltipVariant }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Slider as SliderPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n )\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"relative flex w-full touch-none items-center select-none data-[disabled]:opacity-24 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n // One track spec, shared with Progress: h-2, full radius, secondary\n // surface, solid brand fill.\n \"relative grow overflow-hidden rounded-full bg-background-secondary-surface data-[orientation=horizontal]:h-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2\"\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"absolute bg-background-brand-default data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"block size-4 shrink-0 rounded-full border-0 bg-background-brand-default ring-ring-focus-strong transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden\"\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n","\"use client\"\n\nimport {\n CircleCheckIcon,\n InfoIcon,\n Loader2Icon,\n OctagonXIcon,\n TriangleAlertIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, toast, type ToasterProps } from \"sonner\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n const isMobile = useIsMobile()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n position={isMobile ? \"top-center\" : \"bottom-right\"}\n visibleToasts={isMobile ? 1 : 3}\n duration={4000}\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n toastOptions={{\n classNames: {\n toast: \"!bg-[var(--background-inverse-surface)] !border-none\",\n title: \"!text-[var(--text-prominent-inverse)] !font-display !font-semibold\",\n description: \"!text-[var(--text-subtle-inverse)] !font-body\",\n actionButton: \"!bg-[var(--background-static-white)] !text-[var(--text-brand-container-static)]\",\n },\n }}\n style={\n {\n \"--normal-bg\": \"var(--background-inverse-surface)\",\n \"--normal-text\": \"var(--text-prominent-inverse)\",\n \"--normal-border\": \"transparent\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { Toaster, toast }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ArrowRight, Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────────\n Slide to Confirm — the swipe-to-commit control for irreversible money\n actions (withdrawals, transfers)\n\n A pill track with a draggable brand handle. The solid brand fill sweeps\n with the handle, and the label is painted twice — subtle ink on the\n track ahead of the handle, white ink revealed from behind it. The\n grey→white switch line sits under the handle's centre, so the change\n itself is never visible: letters go under the button grey and come out\n white. Drag past ~90% to confirm; release earlier and everything\n springs back. Keyboard users confirm with Enter/Space — the drag is a\n pointer affordance, not a gate.\n ───────────────────────────────────────────────────────────────────────── */\n\nconst CONFIRM_AT = 0.9\nconst HANDLE = 46 // px — size-11.5 handle inside the 56px (h-14) track, per the Refined spec\nconst INSET = 5 // px — equal gap all round; the track is borderless, so this is the visual gap\n\ninterface SlideToConfirmProps\n extends Omit<React.ComponentProps<\"div\">, \"onDragStart\"> {\n /** Fires once when the handle crosses the threshold (or on Enter/Space). */\n onConfirm?: () => void\n /** Track label. */\n label?: React.ReactNode\n /** Label shown in the confirmed state. */\n confirmedLabel?: React.ReactNode\n disabled?: boolean\n /** Controlled confirmed state — pass `false` to reset the control. */\n confirmed?: boolean\n}\n\nfunction SlideToConfirm({\n onConfirm,\n label = \"Slide to confirm\",\n confirmedLabel = \"Confirmed\",\n disabled = false,\n confirmed: controlledConfirmed,\n className,\n ...props\n}: SlideToConfirmProps) {\n const trackRef = React.useRef<HTMLDivElement>(null)\n const [dragX, setDragX] = React.useState(0)\n const [dragging, setDragging] = React.useState(false)\n const [trackWidth, setTrackWidth] = React.useState(0)\n const [internalConfirmed, setInternalConfirmed] = React.useState(false)\n const confirmed = controlledConfirmed ?? internalConfirmed\n const firedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (controlledConfirmed === false) {\n setInternalConfirmed(false)\n setDragX(0)\n firedRef.current = false\n }\n }, [controlledConfirmed])\n\n // Track the inner width so the clipped label can be laid out against the\n // full track and the travel distance stays correct on resize.\n React.useEffect(() => {\n const track = trackRef.current\n if (!track) return\n const ro = new ResizeObserver(() => setTrackWidth(track.clientWidth))\n ro.observe(track)\n setTrackWidth(track.clientWidth)\n return () => ro.disconnect()\n }, [])\n\n const maxTravel = Math.max(trackWidth - HANDLE - INSET * 2, 0)\n\n function confirm() {\n if (firedRef.current) return\n firedRef.current = true\n setInternalConfirmed(true)\n onConfirm?.()\n }\n\n function handlePointerDown(e: React.PointerEvent<HTMLSpanElement>) {\n if (disabled || confirmed) return\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n setDragging(true)\n }\n\n function handlePointerMove(e: React.PointerEvent<HTMLSpanElement>) {\n if (!dragging || disabled || confirmed) return\n const track = trackRef.current\n if (!track) return\n const rect = track.getBoundingClientRect()\n const x = e.clientX - rect.left - INSET - HANDLE / 2\n setDragX(Math.min(Math.max(x, 0), maxTravel))\n }\n\n function handlePointerUp() {\n if (!dragging) return\n setDragging(false)\n if (dragX >= maxTravel * CONFIRM_AT) {\n setDragX(maxTravel)\n confirm()\n } else {\n setDragX(0)\n }\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLDivElement>) {\n if (disabled || confirmed) return\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n setDragX(maxTravel)\n confirm()\n }\n }\n\n // The brand fill's leading edge rides just ahead of the handle; the\n // label's grey→white switch line trails at the handle's centre, hidden\n // underneath it — text ahead of the button stays grey, text behind it\n // is white on the fill.\n // The sweep runs from the track's inset edge to the handle's *far* edge, so\n // the handle sits on top of it and the two read as one continuous brand\n // shape — stopping at the handle's near edge leaves both rounded ends\n // visible and pinches. At rest it collapses to exactly 0 so there is\n // nothing behind the handle for the idle nudge to drift off and expose.\n const fillWidth = dragX === 0 ? 0 : dragX + HANDLE\n const revealWidth = INSET + dragX + HANDLE / 2\n const spring = \"duration-slow ease-(--primitive-ease-spring)\"\n\n return (\n <div\n ref={trackRef}\n data-slot=\"slide-to-confirm\"\n data-confirmed={confirmed || undefined}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n aria-label={typeof label === \"string\" ? label : undefined}\n onKeyDown={handleKeyDown}\n className={cn(\n \"relative h-14 w-full touch-none overflow-hidden rounded-full bg-background-secondary-surface select-none\",\n disabled && \"pointer-events-none opacity-24\",\n \"outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n className,\n )}\n {...props}\n >\n {/* Base label — subtle ink on the track, dead-centred */}\n <span className=\"absolute inset-0 grid place-items-center\">\n <span className=\"type-slide-to-confirm text-text-subtle-default\">\n {label}\n </span>\n </span>\n\n {/* Brand fill sweeping with the handle's leading edge */}\n <span\n aria-hidden\n data-slot=\"slide-to-confirm-progress\"\n className={cn(\n \"absolute rounded-full bg-background-brand-default\",\n // Confirmed floods the whole track; mid-drag it sits inside the\n // handle's inset so the two read as one continuous brand shape.\n confirmed ? \"inset-0\" : \"top-(--inset) bottom-(--inset) left-(--inset)\",\n !dragging && cn(\"transition-[width]\", spring),\n )}\n style={\n {\n \"--inset\": `${INSET}px`,\n width: confirmed ? \"100%\" : `${fillWidth}px`,\n } as React.CSSProperties\n }\n />\n\n {/* White label revealed from behind the handle — the switch line sits\n under the handle's centre, so it is never visible */}\n <span\n aria-hidden\n data-slot=\"slide-to-confirm-reveal\"\n className={cn(\n \"absolute inset-0 grid place-items-center\",\n !dragging && cn(\"transition-[clip-path]\", spring),\n )}\n style={{\n clipPath: confirmed\n ? \"inset(0 round 9999px)\"\n : `inset(0 calc(100% - ${revealWidth}px) 0 0 round 9999px)`,\n }}\n >\n <span className=\"type-slide-to-confirm flex items-center gap-2 text-text-on-brand-static\">\n {/* No check here — the landed handle carries it, so repeating it\n would read as two ticks for one action. */}\n {confirmed ? confirmedLabel : label}\n </span>\n </span>\n\n {/* Handle — vertically centred regardless of the track border. It\n survives confirmation: the thing you dragged travels to the end and\n holds the check, so the gesture visibly completes instead of the\n handle vanishing at the moment of success. */}\n <span\n data-slot=\"slide-to-confirm-handle\"\n data-confirmed={confirmed || undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n className={cn(\n \"absolute top-1/2 z-20 grid size-11.5 place-items-center rounded-full\",\n confirmed\n ? // Landed: an inverted disc on the flooded track, glow dropped\n // — nothing left to drag, so no grab cursor.\n \"bg-background-static-white text-text-brand-default\"\n : \"cursor-grab bg-background-brand-default text-text-on-brand-static [box-shadow:var(--shadow-brand-glow)] active:cursor-grabbing\",\n !dragging && cn(\"transition-[translate]\", spring),\n // Idle nudge, per the Refined spec: the handle drifts 10px and\n // back. Safe because the sweep is 0-width at rest, so there is\n // nothing behind the handle to expose. Rest only, and reduced\n // motion turns it off.\n !dragging &&\n !disabled &&\n !confirmed &&\n dragX === 0 &&\n \"animate-slide-confirm-nudge motion-reduce:animate-none\",\n )}\n style={{\n left: `${INSET}px`,\n // Confirmed pins it to the far end even when the gesture came from\n // the keyboard, where dragX never moved.\n translate: `${confirmed ? maxTravel : dragX}px -50%`,\n }}\n >\n {confirmed ? (\n <Check className=\"size-4.5 [animation:slide-confirm-pop_var(--motion-pop)_var(--primitive-ease-overshoot)]\" />\n ) : (\n <ArrowRight className=\"size-4.5\" />\n )}\n </span>\n </div>\n )\n}\n\nexport { SlideToConfirm }\nexport type { SlideToConfirmProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Minus, Plus } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction getDecimalPlaces(n: number) {\n const s = String(n)\n const i = s.indexOf(\".\")\n return i === -1 ? 0 : s.length - i - 1\n}\n\nfunction formatValue(value: number, decimalPlaces: number) {\n return decimalPlaces > 0 ? value.toFixed(decimalPlaces) : String(value)\n}\n\n\ninterface StepperProps {\n /** Uppercase label above the amount, e.g. \"Stake (USDT)\". */\n label?: React.ReactNode\n value?: number\n defaultValue?: number\n onValueChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n placeholder?: string\n className?: string\n id?: string\n name?: string\n \"aria-label\"?: string\n}\n\nfunction Stepper({\n label,\n value: controlledValue,\n defaultValue = 0,\n onValueChange,\n min = -Infinity,\n max = Infinity,\n step = 1,\n disabled,\n placeholder,\n className,\n id,\n name,\n \"aria-label\": ariaLabel,\n}: StepperProps) {\n const isControlled = controlledValue !== undefined\n const [internalValue, setInternalValue] = React.useState(\n clamp(defaultValue, min, max)\n )\n const currentValue = isControlled ? controlledValue : internalValue\n const decimalPlaces = getDecimalPlaces(step)\n\n const [displayString, setDisplayString] = React.useState(\n formatValue(currentValue, decimalPlaces)\n )\n const [isFocused, setIsFocused] = React.useState(false)\n\n // Sync display string when controlled value changes externally (not while typing)\n React.useEffect(() => {\n if (!isFocused) {\n setDisplayString(formatValue(currentValue, decimalPlaces))\n }\n }, [currentValue, decimalPlaces, isFocused])\n\n function commit(next: number) {\n const clamped = clamp(next, min, max)\n const rounded =\n decimalPlaces > 0\n ? parseFloat(clamped.toFixed(decimalPlaces))\n : Math.round(clamped)\n\n if (!isControlled) setInternalValue(rounded)\n setDisplayString(formatValue(rounded, decimalPlaces))\n onValueChange?.(rounded)\n }\n\n function handleDecrement() {\n commit(currentValue - step)\n }\n\n function handleIncrement() {\n commit(currentValue + step)\n }\n\n function handleInputChange(e: React.ChangeEvent<HTMLInputElement>) {\n setDisplayString(e.target.value)\n }\n\n function handleBlur() {\n setIsFocused(false)\n const parsed = parseFloat(displayString)\n if (Number.isNaN(parsed)) {\n setDisplayString(formatValue(currentValue, decimalPlaces))\n } else {\n commit(parsed)\n }\n }\n\n function handleFocus() {\n setIsFocused(true)\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === \"ArrowUp\") {\n e.preventDefault()\n handleIncrement()\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault()\n handleDecrement()\n } else if (e.key === \"Enter\") {\n e.preventDefault()\n const parsed = parseFloat(displayString)\n if (Number.isNaN(parsed)) {\n setDisplayString(formatValue(currentValue, decimalPlaces))\n } else {\n commit(parsed)\n }\n }\n }\n\n return (\n <div\n data-slot=\"stepper\"\n data-disabled={disabled || undefined}\n className={cn(\n \"flex w-full items-center justify-between gap-4\",\n // No opacity here on purpose. The +/- are Buttons and already carry\n // their own disabled treatment; dimming the wrapper too multiplied\n // with theirs (24% × 24% ≈ 6%) and made them all but invisible.\n // Disabled text takes the disabled ink token instead of a wash.\n disabled && \"pointer-events-none\",\n className,\n )}\n >\n <Button\n type=\"button\"\n variant=\"frosted\"\n size=\"icon-lg\"\n onClick={handleDecrement}\n disabled={disabled || currentValue <= min}\n aria-label=\"Decrease value\"\n >\n <Minus />\n </Button>\n\n <div className=\"flex min-w-0 flex-col items-center\">\n {label != null && (\n <span\n className={cn(\n \"type-stepper-stake-label\",\n disabled ? \"text-text-disabled-default\" : \"text-text-subtle-default\",\n )}\n >\n {label}\n </span>\n )}\n <input\n type=\"text\"\n inputMode=\"decimal\"\n role=\"spinbutton\"\n aria-valuemin={min === -Infinity ? undefined : min}\n aria-valuemax={max === Infinity ? undefined : max}\n aria-valuenow={currentValue}\n aria-label={ariaLabel}\n value={displayString}\n onChange={handleInputChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n id={id}\n name={name}\n size={Math.max(displayString.length, 1)}\n className=\"type-stepper-stake-amount w-full min-w-0 border-0 bg-transparent text-center text-text-prominent-default outline-none disabled:text-text-disabled-default [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n </div>\n\n <Button\n type=\"button\"\n variant=\"frosted\"\n size=\"icon-lg\"\n onClick={handleIncrement}\n disabled={disabled || currentValue >= max}\n aria-label=\"Increase value\"\n >\n <Plus />\n </Button>\n </div>\n )\n}\n\nexport { Stepper }\nexport type { StepperProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────────\n Steps — the progress rail (numbered indicators, onboarding timelines,\n live status timelines)\n\n Fully generic composition: the consumer supplies the steps (any count),\n each with optional icon, title, description, and tag. Two indicator\n shapes (circle / square tile) and two orientations (horizontal /\n vertical). Not to be confused with Stepper, the numeric +/− input.\n\n States: `done` (success fill + check), `active` (brand fill),\n `upcoming` (secondary surface, subtle ink). Indicators show the step\n number automatically unless an `icon` is passed.\n ───────────────────────────────────────────────────────────────────────── */\n\ntype StepsShape = \"circle\" | \"square\"\ntype StepsOrientation = \"horizontal\" | \"vertical\"\ntype StepsSize = \"sm\" | \"md\"\ntype StepState = \"done\" | \"active\" | \"upcoming\"\n\nconst StepsContext = React.createContext<{\n shape: StepsShape\n orientation: StepsOrientation\n size: StepsSize\n}>({ shape: \"circle\", orientation: \"horizontal\", size: \"md\" })\n\nfunction Steps({\n shape = \"circle\",\n orientation = \"horizontal\",\n size = \"md\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"ol\"> & {\n shape?: StepsShape\n orientation?: StepsOrientation\n size?: StepsSize\n}) {\n const steps = React.Children.toArray(children)\n return (\n <StepsContext.Provider value={{ shape, orientation, size }}>\n <ol\n data-slot=\"steps\"\n data-shape={shape}\n data-orientation={orientation}\n data-size={size}\n className={cn(\n \"flex list-none\",\n orientation === \"horizontal\"\n ? \"flex-row items-start\"\n : \"flex-col\",\n className,\n )}\n {...props}\n >\n {steps.map((child, index) =>\n React.isValidElement<StepProps>(child)\n ? React.cloneElement(child, {\n index: index + 1,\n isFirst: index === 0,\n isLast: index === steps.length - 1,\n })\n : child,\n )}\n </ol>\n </StepsContext.Provider>\n )\n}\n\ninterface StepProps extends Omit<React.ComponentProps<\"li\">, \"title\"> {\n /** done = success fill + check · active = brand fill · upcoming = muted surface */\n state?: StepState\n /** Replaces the automatic step number inside the indicator. */\n icon?: React.ReactNode\n title?: React.ReactNode\n description?: React.ReactNode\n /** Small uppercase marker beside the title (e.g. \"Start here\"). */\n tag?: React.ReactNode\n /** Injected by Steps — do not pass. */\n index?: number\n /** Injected by Steps — do not pass. */\n isFirst?: boolean\n /** Injected by Steps — do not pass. */\n isLast?: boolean\n}\n\nfunction Step({\n state = \"upcoming\",\n icon,\n title,\n description,\n tag,\n index,\n isFirst = false,\n isLast = false,\n className,\n ...props\n}: StepProps) {\n const { shape, orientation, size } = React.useContext(StepsContext)\n const horizontal = orientation === \"horizontal\"\n const sm = size === \"sm\"\n\n const indicator = (\n <span\n data-slot=\"step-indicator\"\n className={cn(\n \"type-steps-indicator z-10 grid shrink-0 place-items-center\",\n sm ? \"size-6\" : \"size-8\",\n shape === \"circle\" ? \"rounded-full\" : \"rounded-md\",\n state === \"done\" &&\n \"bg-background-success-solid text-text-on-status-static\",\n state === \"active\" &&\n \"bg-background-brand-default text-text-on-brand-static\",\n state === \"upcoming\" &&\n \"bg-background-secondary-surface text-text-subtle-default\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n sm\n ? \"[&_svg:not([class*='size-'])]:size-3.5\"\n : \"[&_svg:not([class*='size-'])]:size-4\",\n )}\n >\n {state === \"done\" ? <Check /> : icon ?? index}\n </span>\n )\n\n if (horizontal) {\n // Half-connectors inside each equal-width cell: the line runs\n // continuously through the indicator centres no matter how wide the\n // labels beneath them are.\n return (\n <li\n data-slot=\"step\"\n data-state={state}\n aria-current={state === \"active\" ? \"step\" : undefined}\n className={cn(\"flex min-w-0 flex-1 flex-col items-center\", className)}\n {...props}\n >\n <div className=\"flex w-full items-center\">\n <span\n aria-hidden\n data-slot=\"step-connector\"\n className={cn(\"h-px flex-1\", !isFirst && \"bg-border-neutral-default\")}\n />\n <span className={cn(!isFirst && \"w-1\", \"shrink-0\")} />\n {indicator}\n <span className={cn(!isLast && \"w-1\", \"shrink-0\")} />\n <span\n aria-hidden\n data-slot=\"step-connector\"\n className={cn(\"h-px flex-1\", !isLast && \"bg-border-neutral-default\")}\n />\n </div>\n {(title != null || description != null) && (\n <div\n data-slot=\"step-body\"\n className={cn(\n \"flex min-w-0 flex-col items-center px-1 text-center\",\n sm ? \"mt-1\" : \"mt-1.5\",\n )}\n >\n {title != null && (\n <span\n className={cn(\n \"type-steps-title\",\n state === \"upcoming\"\n ? \"text-text-subtle-default\"\n : \"text-text-prominent-default\",\n )}\n >\n {title}\n </span>\n )}\n {tag != null && (\n <span className=\"type-steps-tag whitespace-nowrap text-text-brand-selected\">{tag}</span>\n )}\n {description != null && (\n <span className=\"type-steps-description text-text-subtle-default\">{description}</span>\n )}\n </div>\n )}\n </li>\n )\n }\n\n const hasBody = title != null || description != null\n\n return (\n <li\n data-slot=\"step\"\n data-state={state}\n aria-current={state === \"active\" ? \"step\" : undefined}\n className={cn(\n \"flex min-w-0\",\n sm ? \"gap-2.5\" : \"gap-3\",\n // Minimum row rhythm so title-only steps still leave a visible\n // stretch of rail; description steps outgrow it naturally, and the\n // last step needs none (no connector below it).\n !isLast && (sm ? \"min-h-11\" : \"min-h-14\"),\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-col items-center self-stretch\">\n {indicator}\n {!isLast && (\n <span\n aria-hidden\n data-slot=\"step-connector\"\n className=\"mt-1 mb-1 w-px flex-1 bg-border-neutral-default\"\n />\n )}\n </div>\n <div\n data-slot=\"step-body\"\n className={cn(\"flex min-w-0 flex-col\", !isLast && (sm ? \"pb-4\" : \"pb-6\"))}\n >\n {title != null && (\n <span\n className={cn(\n \"type-steps-title\",\n state === \"upcoming\"\n ? \"text-text-subtle-default\"\n : \"text-text-prominent-default\",\n )}\n >\n {title}\n {tag != null && (\n <span className=\"type-steps-tag ml-2 whitespace-nowrap text-text-brand-selected\">\n {tag}\n </span>\n )}\n </span>\n )}\n {description != null && (\n <span className=\"type-steps-description text-text-subtle-default\">\n {description}\n </span>\n )}\n {!hasBody && <span className=\"sr-only\">Step {index}</span>}\n </div>\n </li>\n )\n}\n\nexport { Steps, Step }\nexport type { StepProps, StepsShape, StepsOrientation, StepsSize, StepState }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent p-[3px] transition-all outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:cursor-not-allowed disabled:opacity-24 data-[size=default]:h-6 data-[size=default]:w-11 data-[size=sm]:h-5 data-[size=sm]:w-9 data-[state=checked]:bg-background-brand-default data-[state=unchecked]:bg-border-default-default\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"pointer-events-none block rounded-full bg-background-static-white ring-0 transition-transform group-data-[size=default]/switch:size-[18px] group-data-[size=sm]/switch:size-[14px] data-[state=checked]:translate-x-[calc(100%+1px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"type-table w-full caption-bottom\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b [&_tr]:border-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"type-table-head border-t border-border-default-default bg-background-secondary-surface [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"border-b border-border-default-default transition-colors hover:bg-background-hover-default data-[state=selected]:bg-background-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"type-table-head h-10 px-2 text-left align-middle whitespace-nowrap text-text-prominent-default [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"mt-4 text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Tabs as TabsPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"group/tabs-list inline-flex w-fit items-center justify-center text-text-subtle-default group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none has-[[data-icon-position=top]]:h-auto\",\n {\n variants: {\n variant: {\n default: \"bg-background-secondary-surface\",\n line: \"gap-1 bg-transparent\",\n },\n size: {\n sm: \"h-8 rounded-md p-[2px]\",\n md: \"h-10 rounded-lg p-1\",\n lg: \"h-12 rounded-xl p-1.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n size = \"md\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n data-size={size}\n className={cn(tabsListVariants({ variant, size }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n iconPosition = \"inline\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger> & {\n iconPosition?: \"inline\" | \"top\"\n}) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n data-icon-position={iconPosition}\n className={cn(\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-3 py-1 whitespace-nowrap text-text-subtle-default transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:bg-background-hover-default hover:text-text-prominent-default focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:outline-1 focus-visible:outline-ring-focus-default disabled:pointer-events-none disabled:opacity-24 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-none group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[size=sm]/tabs-list:gap-1 group-data-[size=sm]/tabs-list:rounded-sm group-data-[size=sm]/tabs-list:px-2\",\n \"group-data-[size=lg]/tabs-list:gap-2 group-data-[size=lg]/tabs-list:rounded-lg group-data-[size=lg]/tabs-list:px-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:hover:bg-transparent group-data-[variant=line]/tabs-list:hover:text-text-brand-hover group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent\",\n \"data-[state=active]:bg-background-primary-surface data-[state=active]:border-transparent data-[state=active]:text-text-brand-selected\",\n \"after:absolute after:bg-border-brand-selected after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n iconPosition === \"top\" && \"h-auto flex-col gap-1 py-2\",\n iconPosition === \"top\" && \"group-data-[size=sm]/tabs-list:gap-0.5 group-data-[size=sm]/tabs-list:py-1.5\",\n iconPosition === \"top\" && \"group-data-[size=lg]/tabs-list:gap-1.5 group-data-[size=lg]/tabs-list:py-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Toggle as TogglePrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* One look, three states — the Chip treatment on the toggle's rectangle:\n bordered primary surface at rest, secondary-surface hover, solid brand\n with on-brand ink when on (the brand flip in dark is the design). */\nconst toggleVariants = cva(\n \"type-toggle inline-flex items-center justify-center gap-2 rounded-md border border-border-default-default bg-background-primary-surface text-text-prominent-default whitespace-nowrap transition-[color,background-color,border-color,box-shadow] outline-none hover:bg-background-secondary-surface active:bg-background-secondary-wash focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:pointer-events-none disabled:opacity-24 aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft data-[state=on]:border-transparent data-[state=on]:bg-background-brand-default data-[state=on]:text-text-on-brand-static [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n size: {\n default: \"h-10 min-w-10 px-2.5\",\n sm: \"h-8 min-w-8 px-1.5\",\n lg: \"h-12 min-w-12 px-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { toggleVariants } from \"./toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }\n>({\n size: \"default\",\n spacing: 0,\n})\n\nfunction ToggleGroup({\n className,\n size,\n spacing = 0,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-size={size}\n data-spacing={spacing}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ size, spacing }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n toggleVariants({\n size: context.size || size,\n }),\n \"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10\",\n // Joined (spacing 0): shared hairlines — every item after the first\n // drops its left border; the on item paints solid over its cell.\n \"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:border-l-0 data-[spacing=0]:first:border-l\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","import * as React from \"react\"\nimport { Badge } from \"../ui/badge\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\n\n// ---------------------------------------------------------------------------\n// Inlined thumb illustrations — base64 WEBP data URLs (~4KB each)\n// Sourced from public/assets/thumbs-up.webp and thumbs-down.webp.\n// Inlining avoids requiring consumers to copy asset files into their public/.\n// ---------------------------------------------------------------------------\nconst THUMBS_UP_DATA_URL =\n \"data:image/webp;base64,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\"\nconst THUMBS_DOWN_DATA_URL =\n \"data:image/webp;base64,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\"\n\n// ---------------------------------------------------------------------------\n// ResultBlock — universal results card used by Rise-Fall, Swipe, and Digits.\n// Animation CSS lives in src/styles.css (selectors: [data-results-motion]).\n// ---------------------------------------------------------------------------\nexport type ResultBlockStatus = \"win\" | \"loss\"\nexport type ResultBlockCta = \"next-round\" | \"go-again\" | \"conversion\"\n\nexport type ResultBlockProps = {\n status: ResultBlockStatus\n amount: string\n currency: string\n contractLabel: string\n pickedDigit?: number\n duration: string\n ctaMode: ResultBlockCta\n}\n\nexport function ResultBlock({\n status,\n amount,\n currency,\n contractLabel,\n pickedDigit,\n duration,\n ctaMode,\n}: ResultBlockProps) {\n const isWin = status === \"win\"\n const titleText = isWin ? \"You won!\" : \"You lost!\"\n const signedAmount = isWin ? `+${amount}` : `−${amount}`\n const amountColorClass = isWin ? \"text-semantic-win\" : \"text-semantic-loss\"\n const haloBgClass = isWin ? \"bg-semantic-win\" : \"bg-semantic-loss\"\n\n return (\n <Card className=\"w-80 shrink-0 overflow-hidden rounded-md shadow-sm px-5 py-5 items-center gap-3\">\n <div className=\"relative flex items-center justify-center py-2\">\n <span\n aria-hidden\n data-results-motion=\"halo\"\n className={`absolute size-24 rounded-full blur-2xl opacity-20 ${haloBgClass}`}\n />\n <img\n data-results-motion={isWin ? \"icon-win\" : \"icon-loss\"}\n src={isWin ? THUMBS_UP_DATA_URL : THUMBS_DOWN_DATA_URL}\n alt={isWin ? \"Win\" : \"Loss\"}\n className=\"relative size-20\"\n />\n </div>\n\n <p className=\"text-lg font-semibold text-on-prominent\">{titleText}</p>\n\n <p className={`flex items-baseline gap-1.5 ${amountColorClass}`}>\n <span className=\"font-display text-4xl font-semibold tabular-nums tracking-tight\">\n {signedAmount}\n </span>\n <span className=\"text-lg font-semibold\">{currency}</span>\n </p>\n\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"tint-neutral\" size=\"sm\">\n {contractLabel}\n {pickedDigit !== undefined && (\n <>\n <span aria-hidden className=\"h-3 w-px bg-border-prominent/40 mx-1\" />\n <span className=\"tabular-nums\">{pickedDigit}</span>\n </>\n )}\n </Badge>\n <Badge variant=\"tint-neutral\" size=\"sm\">{duration}</Badge>\n </div>\n\n <div className=\"w-full pt-2\">\n {ctaMode === \"next-round\" && <Button className=\"w-full\">Next round</Button>}\n {ctaMode === \"go-again\" && <Button className=\"w-full\">Go again</Button>}\n {ctaMode === \"conversion\" && (\n <div className=\"w-full flex flex-col gap-3\">\n <p className=\"text-center text-base font-semibold text-on-prominent\">\n Ready to play for real?\n </p>\n <Button className=\"w-full\">Deposit now</Button>\n <Button variant=\"secondary\" className=\"w-full\">Stay in demo</Button>\n </div>\n )}\n </div>\n </Card>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ResultDialog — fixed-width dialog variant (no thumb, no amount; just copy\n// + 2 CTAs). Used for system messages like \"out of balance\".\n// ---------------------------------------------------------------------------\nexport type ResultDialogProps = {\n title: string\n body: React.ReactNode\n primaryLabel: string\n secondaryLabel: string\n}\n\nexport function ResultDialog({\n title,\n body,\n primaryLabel,\n secondaryLabel,\n}: ResultDialogProps) {\n return (\n <Card className=\"w-80 shrink-0 overflow-hidden rounded-md shadow-sm px-5 py-6 items-center gap-4\">\n <div className=\"flex flex-col items-center gap-2 text-center\">\n <p className=\"text-lg font-semibold text-on-prominent\">{title}</p>\n <p className=\"text-sm text-on-subtle\">{body}</p>\n </div>\n <div className=\"w-full flex flex-col gap-2\">\n <Button className=\"w-full\">{primaryLabel}</Button>\n <Button variant=\"secondary\" className=\"w-full\">{secondaryLabel}</Button>\n </div>\n </Card>\n )\n}\n","import * as React from \"react\"\nimport { ArrowLeft, History } from \"lucide-react\"\nimport { Badge } from \"../ui/badge\"\nimport { NavigationButton } from \"../ui/navigation-button\"\n\nexport type HeaderNavigationBlockProps = {\n /** Back button click handler. Back arrow is rendered only when provided. */\n onBack?: () => void\n /** Optional badge shown between back and balance (e.g. \"Demo\" indicator). */\n badge?: { label: string; variant?: React.ComponentProps<typeof Badge>[\"variant\"] }\n /** Required balance display. */\n balance: { amount: string; currency: string }\n /** History button config. When `count` is provided, a numeric badge overlays the icon. */\n history?: {\n count?: number\n onClick?: () => void\n \"aria-label\"?: string\n }\n /** Right-side icon-button slot (e.g. sound toggle, settings). Rendered after the history button. */\n actions?: React.ReactNode\n}\n\nexport function HeaderNavigationBlock({\n onBack,\n badge,\n balance,\n history,\n actions,\n}: HeaderNavigationBlockProps) {\n return (\n <div className=\"w-full min-w-80 max-w-layout-diagram-small rounded-md overflow-hidden bg-prominent\">\n <header className=\"flex items-center gap-2 border-b border-border-subtle bg-prominent px-layout-margin-inline py-3\">\n {onBack && (\n <NavigationButton type=\"button\" size=\"md\" aria-label=\"Back\" onClick={onBack}>\n <ArrowLeft className=\"size-5\" />\n </NavigationButton>\n )}\n <div className=\"flex min-w-0 flex-1 items-center justify-center gap-2\">\n {badge && (\n <Badge variant={badge.variant ?? \"tint-warning\"} size=\"sm\">\n {badge.label}\n </Badge>\n )}\n <span className=\"font-display font-semibold tabular-nums text-on-prominent\">\n {balance.amount}\n </span>\n <span className=\"text-sm text-on-subtle\">{balance.currency}</span>\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {history && <HistoryButton {...history} />}\n {actions}\n </div>\n </header>\n </div>\n )\n}\n\nfunction HistoryButton({\n count,\n onClick,\n \"aria-label\": ariaLabelOverride,\n}: NonNullable<HeaderNavigationBlockProps[\"history\"]>) {\n const show = typeof count === \"number\" && count > 0\n const label = show ? (count! > 99 ? \"99+\" : String(count)) : null\n const ariaLabel =\n ariaLabelOverride ?? (show ? `Open history, ${count} new` : \"Open history\")\n return (\n <div className=\"relative inline-flex\">\n <NavigationButton type=\"button\" size=\"md\" aria-label={ariaLabel} onClick={onClick}>\n <History className=\"size-5\" />\n </NavigationButton>\n {show && (\n <span\n aria-hidden\n className=\"pointer-events-none absolute -top-0.5 -right-0.5 min-w-[1.125rem] h-[1.125rem] px-1 rounded-full bg-primary text-on-primary text-[10px] leading-none font-semibold tabular-nums inline-flex items-center justify-center ring-2 ring-prominent\"\n >\n {label}\n </span>\n )}\n </div>\n )\n}\n","import * as React from \"react\"\nimport { Plus } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"../ui/accordion\"\nimport { Button } from \"../ui/button\"\nimport { cn } from \"../../lib/utils\"\n\nexport type FAQItem = {\n value: string\n question: string\n answer: string\n}\n\nexport type FAQBlockProps = {\n /** Section eyebrow above the heading. Defaults to \"FAQ Section\". */\n eyebrow?: string\n /** Heading text. Defaults to \"Frequently asked questions\". */\n title?: string\n /** Body paragraph between heading and accordion. */\n intro?: React.ReactNode\n /** Q&A items. */\n items: FAQItem[]\n /** Which item is open by default. Defaults to the first item's `value`. */\n defaultValue?: string\n /** Footer \"Need more help?\" card. Hidden if undefined. */\n helpCard?: {\n title: string\n body: string\n ctaLabel: string\n onCtaClick?: () => void\n }\n /** Layout density. \"desktop\" is the default; \"mobile\" reduces type scale and padding. \"two-column\" places the heading on the left and the accordion on the right. */\n layout?: \"desktop\" | \"mobile\" | \"two-column\"\n}\n\nexport function FAQBlock({\n eyebrow = \"FAQ\",\n title = \"Frequently asked questions\",\n intro = \"Find answers to the most common questions below.\",\n items,\n defaultValue,\n helpCard,\n layout = \"desktop\",\n}: FAQBlockProps) {\n if (layout === \"two-column\") {\n return (\n <div className=\"@container w-full\">\n <div className=\"flex flex-col @[600px]:flex-row gap-8 @[600px]:gap-12\">\n {/* Left column */}\n <div className=\"flex flex-col gap-4 flex-1 @[600px]:max-w-xs\">\n <span className=\"text-xs font-body font-semibold tracking-widest uppercase text-on-subtle\">{eyebrow}</span>\n <h2 className=\"text-4xl @[600px]:text-6xl font-semibold font-display text-on-prominent tracking-tight\">{title}</h2>\n {intro && (\n <p className=\"text-base font-body text-on-subtle\">{intro}</p>\n )}\n </div>\n {/* Right column */}\n <div className=\"flex-1\">\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={defaultValue ?? items[0]?.value}\n className=\"w-full\"\n >\n {items.map(({ value, question, answer }, i) => (\n <AccordionItem key={value} value={value}>\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n className=\"group flex flex-1 items-center justify-between gap-4 py-5 text-left outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n >\n <span className=\"flex items-baseline gap-4\">\n <span className=\"text-sm font-body text-on-subtle shrink-0 w-6\">\n {String(i + 1).padStart(2, \"0\")}\n </span>\n <span className=\"text-lg @[600px]:text-xl font-semibold font-display text-on-prominent\">{question}</span>\n </span>\n <span className={cn(\n \"shrink-0 size-7 flex items-center justify-center rounded-sm border transition-all duration-200\",\n \"group-data-[state=open]:bg-primary group-data-[state=open]:border-primary\",\n \"group-data-[state=closed]:bg-transparent group-data-[state=closed]:border-border-subtle\"\n )}>\n <Plus className={cn(\n \"size-4 transition-all duration-200\",\n \"group-data-[state=open]:rotate-45 group-data-[state=open]:text-on-primary\",\n \"group-data-[state=closed]:text-on-prominent\"\n )} />\n </span>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n <AccordionContent>\n <p className=\"text-base font-body text-on-subtle pl-10 pb-4\">{answer}</p>\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </div>\n </div>\n </div>\n )\n }\n\n const headingClass =\n layout === \"desktop\"\n ? \"text-5xl font-semibold font-display text-on-prominent text-center tracking-tight\"\n : \"text-4xl font-semibold font-display text-on-prominent text-center tracking-tight\"\n const helpTitleClass =\n layout === \"desktop\"\n ? \"text-2xl font-semibold font-display text-on-prominent\"\n : \"text-xl font-semibold font-display text-on-prominent\"\n const helpCardPaddingClass = layout === \"desktop\" ? \"p-8\" : \"p-6\"\n const gapClass = layout === \"desktop\" ? \"gap-12\" : \"gap-10\"\n const headerGapClass = layout === \"desktop\" ? \"gap-5\" : \"gap-4\"\n\n return (\n <div className={`w-full flex flex-col ${gapClass}`}>\n <div className={`flex flex-col ${headerGapClass} items-center w-full`}>\n <span className=\"text-sm text-on-subtle font-body\">{eyebrow}</span>\n <h2 className={headingClass}>{title}</h2>\n {intro && (\n <p className=\"text-lg text-on-subtle font-body text-center\">{intro}</p>\n )}\n </div>\n\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={defaultValue ?? items[0]?.value}\n className=\"w-full\"\n >\n {items.map(({ value, question, answer }) => (\n <AccordionItem key={value} value={value}>\n <AccordionTrigger className=\"text-base font-medium font-body text-on-prominent hover:no-underline\">\n {question}\n </AccordionTrigger>\n <AccordionContent>\n <p className=\"text-sm text-on-subtle font-body pb-4\">{answer}</p>\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n\n {helpCard && (\n <div className={`flex flex-col gap-6 items-center w-full bg-subtle rounded-xl ${helpCardPaddingClass}`}>\n <div className=\"flex flex-col gap-2 w-full\">\n <h3 className={helpTitleClass}>{helpCard.title}</h3>\n <p className=\"text-base text-on-subtle font-body\">{helpCard.body}</p>\n </div>\n <Button size=\"sm\" onClick={helpCard.onCtaClick}>{helpCard.ctaLabel}</Button>\n </div>\n )}\n </div>\n )\n}\n","import * as React from \"react\"\nimport { ArrowRight, ArrowUpRight } from \"lucide-react\"\nimport { Button } from \"../ui/button\"\n\nexport type HeroBlockTagline = {\n /** Primary label (e.g. \"What's new\"). */\n label: string\n /** Secondary text shown after a separator (e.g. \"Just shipped v2.0\"). */\n suffix?: string\n}\n\nexport type HeroBlockCta = {\n label: string\n onClick?: () => void\n /** When true on the primary CTA in the centred layout, renders a trailing arrow. */\n trailingArrow?: boolean\n}\n\nexport type HeroBlockProps = {\n /** \"centered\" = single column, no image; \"split\" = two-column desktop with image. Default: \"centered\". */\n layout?: \"centered\" | \"split\"\n tagline?: HeroBlockTagline\n heading: string\n body: string\n primaryCta: HeroBlockCta\n /** Shown only in \"split\" layout. */\n secondaryCta?: HeroBlockCta\n /** Image content for \"split\" layout. Defaults to a subtle placeholder square. */\n image?: React.ReactNode\n}\n\nexport function HeroBlock({\n layout = \"centered\",\n tagline,\n heading,\n body,\n primaryCta,\n secondaryCta,\n image,\n}: HeroBlockProps) {\n if (layout === \"centered\") {\n return (\n <div className=\"w-full border border-border-subtle rounded-xl overflow-hidden bg-prominent\">\n <div className=\"flex flex-col items-center justify-center gap-8 px-layout-margin-inline py-24 max-w-2xl mx-auto text-center\">\n <div className=\"flex flex-col items-center gap-6 w-full\">\n {tagline && <TaglinePill {...tagline} />}\n <h1 className=\"text-5xl font-semibold font-display tracking-tight text-on-prominent text-center\">\n {heading}\n </h1>\n <p className=\"text-lg font-body text-on-subtle text-center\">{body}</p>\n </div>\n <Button size=\"sm\" onClick={primaryCta.onClick}>\n {primaryCta.label}\n {primaryCta.trailingArrow !== false && <ArrowRight className=\"size-4\" />}\n </Button>\n </div>\n </div>\n )\n }\n\n // split layout\n return (\n <div className=\"w-full border border-border-subtle rounded-xl overflow-hidden bg-prominent\">\n <div className=\"flex flex-col min-[600px]:flex-row items-center gap-layout-gutter px-layout-margin-inline py-16 min-[600px]:py-24 max-w-5xl mx-auto\">\n <div className=\"flex flex-col gap-6 min-[600px]:gap-8 flex-1 min-w-0 items-center min-[600px]:items-start text-center min-[600px]:text-left w-full\">\n <div className=\"flex flex-col gap-5 min-[600px]:gap-6 items-center min-[600px]:items-start w-full\">\n {tagline && <TaglinePill {...tagline} responsive />}\n <h1 className=\"text-4xl min-[600px]:text-5xl font-semibold font-display tracking-tight text-on-prominent\">\n {heading}\n </h1>\n <p className=\"text-lg font-body text-on-subtle\">{body}</p>\n </div>\n <div className=\"flex items-center justify-center min-[600px]:justify-start gap-2\">\n <Button size=\"sm\" onClick={primaryCta.onClick}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button variant=\"secondary\" size=\"sm\" onClick={secondaryCta.onClick}>\n {secondaryCta.label}\n </Button>\n )}\n </div>\n </div>\n <div className=\"w-full min-[600px]:flex-1 min-[600px]:min-w-0 aspect-square rounded-xl bg-subtle shrink-0\" aria-hidden=\"true\">\n {image}\n </div>\n </div>\n </div>\n )\n}\n\nfunction TaglinePill({\n label,\n suffix,\n responsive,\n}: HeroBlockTagline & { responsive?: boolean }) {\n return (\n <div className=\"inline-flex items-center gap-1.5 h-7 px-3 rounded-full border border-border-subtle bg-prominent shadow-sm shrink-0\">\n <span className=\"size-1.5 rounded-full bg-semantic-win shrink-0\" aria-hidden=\"true\" />\n {responsive && suffix ? (\n <span className=\"text-sm font-body text-on-prominent whitespace-nowrap\">\n <span className=\"hidden min-[600px]:inline\">{label}<span className=\"text-on-subtle\">{\" · \"}</span></span>\n <span className=\"text-on-subtle min-[600px]:text-on-prominent\">{suffix}</span>\n </span>\n ) : (\n <span className=\"text-sm font-body text-on-prominent whitespace-nowrap\">\n {label}\n {suffix && <span className=\"text-on-subtle\">{` · ${suffix}`}</span>}\n </span>\n )}\n <ArrowUpRight className=\"size-4 text-on-subtle shrink-0\" aria-hidden=\"true\" />\n </div>\n )\n}\n","import * as React from \"react\"\nimport { Button } from \"../ui/button\"\nimport { Input } from \"../ui/input\"\nimport { Link } from \"../ui/link\"\n\nexport type AuthBlockMode = \"sign-in\" | \"sign-up\"\nexport type AuthBlockProvider = \"google\" | \"telegram\" | \"x\"\n\nexport type AuthBlockProps = {\n mode: AuthBlockMode\n /** Logo source URL (consumer-provided). Renders the small icon in the header lockup. */\n logoSrc: string\n /** Wordmark text in the header lockup. Defaults to \"trading.game\". */\n wordmark?: string\n /** OAuth providers to show as buttons. Default: all three. Order is preserved. */\n providers?: AuthBlockProvider[]\n /** Submit handler. Receives just the email field for v1 (form is single-field). */\n onSubmit?: (data: { email: string }) => void\n /** Footer link href (sign-in → sign-up, sign-up → sign-in). */\n crossLinkHref?: string\n /** Unique prefix for input IDs (allows multiple instances on the same page). */\n idPrefix?: string\n}\n\nexport function AuthBlock({\n mode,\n logoSrc,\n wordmark = \"trading.game\",\n providers = [\"google\", \"telegram\", \"x\"],\n onSubmit,\n crossLinkHref = \"#\",\n idPrefix = \"auth\",\n}: AuthBlockProps) {\n const headingText = mode === \"sign-in\" ? \"Sign in\" : \"Sign up\"\n const termsText = mode === \"sign-in\" ? \"By signing in\" : \"By signing up\"\n const ctaText = mode === \"sign-in\" ? \"Sign in\" : \"Sign up\"\n const footerPrompt =\n mode === \"sign-in\" ? \"Don't have an account?\" : \"Already have an account?\"\n const footerLinkLabel = mode === \"sign-in\" ? \"Sign up\" : \"Log in\"\n const [email, setEmail] = React.useState(\"\")\n\n return (\n <div className=\"flex flex-col items-center gap-6 w-full\">\n <div className=\"flex items-center gap-2\">\n <img src={logoSrc} alt={wordmark} className=\"size-8 object-contain\" />\n <span className=\"font-display font-semibold text-base text-on-prominent tracking-tight\">\n {wordmark}\n </span>\n </div>\n\n <h2 className=\"text-3xl font-semibold font-display text-on-prominent text-center\">\n {headingText}\n </h2>\n\n <div className=\"flex flex-col gap-3 w-full\">\n {providers.map((p) => (\n <ProviderButton key={p} provider={p} />\n ))}\n </div>\n\n <div className=\"flex items-center gap-3 w-full\">\n <div className=\"flex-1 h-px bg-border-subtle\" />\n <span className=\"text-sm text-on-subtle font-body\">or</span>\n <div className=\"flex-1 h-px bg-border-subtle\" />\n </div>\n\n <div className=\"flex items-center gap-2 w-full\">\n <Input\n id={`${idPrefix}-email`}\n type=\"text\"\n placeholder=\"Email or phone number\"\n className=\"flex-1\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n </div>\n\n <p className=\"text-sm text-on-subtle font-body text-left w-full\">\n {termsText}, you agree to our{\" \"}\n <Link size=\"sm\" href=\"#\">Terms &amp; Conditions</Link>\n </p>\n\n <Button size=\"md\" className=\"w-full\" onClick={() => onSubmit?.({ email })}>\n {ctaText}\n </Button>\n\n <p className=\"text-sm text-on-subtle font-body text-center\">\n {footerPrompt}{\" \"}\n <Link size=\"sm\" href={crossLinkHref}>{footerLinkLabel}</Link>\n </p>\n </div>\n )\n}\n\nfunction ProviderButton({ provider }: { provider: AuthBlockProvider }) {\n switch (provider) {\n case \"google\":\n return (\n <Button variant=\"secondary\" size=\"lg\" className=\"w-full\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M17.64 9.205c0-.639-.057-1.252-.164-1.841H9v3.481h4.844a4.14 4.14 0 0 1-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615Z\" fill=\"#4285F4\" />\n <path d=\"M9 18c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 0 0 9 18Z\" fill=\"#34A853\" />\n <path d=\"M3.964 10.71A5.41 5.41 0 0 1 3.682 9c0-.593.102-1.17.282-1.71V4.958H.957A8.996 8.996 0 0 0 0 9c0 1.452.348 2.827.957 4.042l3.007-2.332Z\" fill=\"#FBBC05\" />\n <path d=\"M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 0 0 .957 4.958L3.964 7.29C4.672 5.163 6.656 3.58 9 3.58Z\" fill=\"#EA4335\" />\n </svg>\n Continue with Google\n </Button>\n )\n case \"telegram\":\n return (\n <Button variant=\"secondary\" size=\"lg\" className=\"w-full\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" fill=\"none\" className=\"shrink-0\">\n <circle cx=\"9\" cy=\"9\" r=\"9\" fill=\"#29B6F6\" />\n <path d=\"M13.5 5.25 11.25 13.5l-2.25-3-3 1.5 1.5-5.25 6-1.5Z\" fill=\"white\" opacity=\"0.3\" />\n <path d=\"m4.5 8.625 7.5-3-1.125 7.125-2.625-2.25-1.5 1.5.375-3.375Z\" fill=\"white\" />\n </svg>\n Continue with Telegram\n </Button>\n )\n case \"x\":\n return (\n <Button variant=\"secondary\" size=\"lg\" className=\"w-full\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" fill=\"currentColor\" className=\"shrink-0\">\n <path d=\"M13.955 2.25h2.423L10.977 8.28 17.25 15.75h-4.812l-3.913-5.116-4.477 5.116H1.645l5.703-6.52L1.125 2.25h4.934l3.538 4.678 4.358-4.678Zm-.85 12.105h1.343L5.025 3.627H3.579l9.526 10.728Z\" />\n </svg>\n Continue with X (Twitter)\n </Button>\n )\n }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Menu, X } from \"lucide-react\"\nimport { Button } from \"../ui/button\"\n\nexport type NavBarBlockLink = {\n label: string\n href?: string\n onClick?: () => void\n}\n\nexport type NavBarBlockProps = {\n /** Brand logo URLs and alt text. */\n brand: {\n fullLogoSrc: string\n iconLogoSrc: string\n alt: string\n }\n /** Primary nav links. */\n links: NavBarBlockLink[]\n /** Sign-in button. Hidden if omitted. Default label: \"Sign in\". */\n signIn?: { label?: string; onClick?: () => void }\n /** Sign-up button. Hidden if omitted. Default label: \"Sign up\". */\n signUp?: { label?: string; onClick?: () => void }\n}\n\nexport function NavBarBlock({ brand, links, signIn, signUp }: NavBarBlockProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = React.useState(false)\n\n return (\n <div className=\"w-full border border-border-subtle rounded-md overflow-hidden\">\n <nav className=\"bg-prominent\">\n <div className=\"flex items-center justify-between px-layout-margin-inline py-3\">\n <div className=\"flex items-center gap-6\">\n <img\n src={brand.fullLogoSrc}\n alt={brand.alt}\n className=\"hidden min-[600px]:block h-7 w-auto shrink-0 object-contain object-left\"\n />\n <img\n src={brand.iconLogoSrc}\n alt={brand.alt}\n className=\"min-[600px]:hidden size-7 shrink-0 object-contain\"\n />\n <div className=\"hidden min-[600px]:flex items-center gap-1\">\n {links.map((l) => (\n <Button key={l.label} variant=\"tertiary\" size=\"sm\" onClick={l.onClick}>\n {l.label}\n </Button>\n ))}\n </div>\n </div>\n\n <div className=\"hidden min-[600px]:flex items-center gap-2\">\n {signIn && (\n <Button variant=\"tertiary\" size=\"sm\" onClick={signIn.onClick}>\n {signIn.label ?? \"Sign in\"}\n </Button>\n )}\n {signUp && (\n <Button size=\"sm\" onClick={signUp.onClick}>\n {signUp.label ?? \"Sign up\"}\n </Button>\n )}\n </div>\n\n <Button\n variant=\"tertiary\"\n size=\"icon-sm\"\n aria-label={mobileMenuOpen ? \"Close navigation menu\" : \"Open navigation menu\"}\n aria-expanded={mobileMenuOpen}\n className=\"min-[600px]:hidden\"\n onClick={() => setMobileMenuOpen((prev) => !prev)}\n >\n {mobileMenuOpen ? <X className=\"size-4\" /> : <Menu className=\"size-4\" />}\n </Button>\n </div>\n\n {mobileMenuOpen && (\n <div className=\"min-[600px]:hidden flex flex-col border-t border-border-subtle px-layout-margin-inline py-3 gap-1\">\n {links.map((l) => (\n <Button\n key={l.label}\n variant=\"tertiary\"\n size=\"sm\"\n className=\"justify-start w-full\"\n onClick={l.onClick}\n >\n {l.label}\n </Button>\n ))}\n {(signIn || signUp) && (\n <div className=\"flex flex-col gap-2 pt-3 mt-2 border-t border-border-subtle\">\n {signIn && (\n <Button variant=\"secondary\" size=\"sm\" className=\"w-full\" onClick={signIn.onClick}>\n {signIn.label ?? \"Sign in\"}\n </Button>\n )}\n {signUp && (\n <Button size=\"sm\" className=\"w-full\" onClick={signUp.onClick}>\n {signUp.label ?? \"Sign up\"}\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n </nav>\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { History, X } from \"lucide-react\"\nimport { Button } from \"../ui/button\"\nimport { Drawer, DrawerClose, DrawerContent, DrawerHeader, DrawerTitle, DrawerTrigger } from \"../ui/drawer\"\nimport { Empty, EmptyHeader, EmptyMedia, EmptyTitle } from \"../ui/empty\"\nimport { Item, ItemActions, ItemContent, ItemGroup, ItemTitle } from \"../ui/item\"\nimport { NavigationButton } from \"../ui/navigation-button\"\nimport { Separator } from \"../ui/separator\"\nimport { Sheet, SheetClose, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from \"../ui/sheet\"\nimport { useIsMobile } from \"../../hooks/use-mobile\"\n\n// ── Position discriminated union ─────────────────────────────────────────────\ntype PositionBase = {\n market: string\n duration: string\n stake: string\n pnl: string\n win: boolean\n}\nexport type RiseFallPosition = PositionBase & { kind: \"rise-fall\"; direction: \"Rise\" | \"Fall\" }\nexport type SwipePosition = PositionBase & { kind: \"swipe\"; direction: \"Up\" | \"Down\" }\nexport type BoxOPosition = PositionBase & { kind: \"box-o\"; multiplier: string }\nexport type DigitsPosition = PositionBase & {\n kind: \"digits\"\n type: \"matches\" | \"differs\" | \"odd\" | \"even\" | \"over\" | \"under\"\n digit?: string\n}\nexport type Position = RiseFallPosition | SwipePosition | BoxOPosition | DigitsPosition\n\n// ── Public component ─────────────────────────────────────────────────────────\nexport type OpenPositionsBlockProps = {\n /** Consumer-provided trigger element. Wrapped with a Sheet/Drawer trigger asChild. */\n trigger: React.ReactNode\n /** Sheet/drawer title. Default: \"Positions\". */\n sheetTitle?: string\n /** Position items to render in the list. Empty array → emptyState is shown. */\n positions: Position[]\n /** Footer link handler. The button label is fixed: \"View trade history\". */\n onViewHistory?: () => void\n /** Replaces the default empty state when positions.length === 0. */\n emptyState?: React.ReactNode\n}\n\nexport function OpenPositionsBlock({\n trigger,\n sheetTitle = \"Positions\",\n positions,\n onViewHistory,\n emptyState,\n}: OpenPositionsBlockProps) {\n const isMobile = useIsMobile()\n\n const body =\n positions.length === 0\n ? (emptyState ?? <DefaultEmptyState onViewHistory={onViewHistory} />)\n : <PositionsList positions={positions} onViewHistory={onViewHistory} />\n\n if (isMobile) {\n return (\n <Drawer>\n <DrawerTrigger asChild>{trigger}</DrawerTrigger>\n <DrawerContent className=\"p-0 flex flex-col\">\n <DrawerHeader className=\"flex-row items-center justify-between px-4 py-3 shrink-0 text-left\">\n <DrawerTitle className=\"text-base font-semibold font-display text-on-prominent\">\n {sheetTitle}\n </DrawerTitle>\n <DrawerClose asChild>\n <NavigationButton size=\"sm\" aria-label=\"Close\"><X /></NavigationButton>\n </DrawerClose>\n </DrawerHeader>\n <Separator />\n {body}\n </DrawerContent>\n </Drawer>\n )\n }\n\n return (\n <Sheet>\n <SheetTrigger asChild>{trigger}</SheetTrigger>\n <SheetContent side=\"right\" showCloseButton={false} className=\"p-0 flex flex-col w-80 sm:max-w-xs\">\n <SheetHeader className=\"flex-row items-center justify-between px-4 py-3 shrink-0\">\n <SheetTitle className=\"text-base font-semibold font-display text-on-prominent\">\n {sheetTitle}\n </SheetTitle>\n <SheetClose asChild>\n <NavigationButton size=\"sm\" aria-label=\"Close\"><X /></NavigationButton>\n </SheetClose>\n </SheetHeader>\n <Separator />\n {body}\n </SheetContent>\n </Sheet>\n )\n}\n\n// ── Internals ────────────────────────────────────────────────────────────────\nfunction PositionsList({\n positions,\n onViewHistory,\n}: {\n positions: Position[]\n onViewHistory?: () => void\n}) {\n return (\n <div className=\"flex flex-col flex-1 min-h-0\">\n <ItemGroup className=\"min-h-0 overflow-y-auto\">\n {positions.map((pos, i) => (\n <PositionRow key={i} position={pos} />\n ))}\n </ItemGroup>\n <Separator />\n <div className=\"shrink-0 flex justify-center py-4\">\n <Button variant=\"tertiary\" size=\"md\" onClick={onViewHistory}>\n View trade history\n </Button>\n </div>\n </div>\n )\n}\n\nfunction PositionRow({ position }: { position: Position }) {\n const { label, suffix } = positionTitleParts(position)\n return (\n <Item size=\"sm\">\n <ItemContent>\n <ItemTitle>\n <span className=\"text-on-prominent\">{label}</span>\n {suffix && <span className=\"text-on-subtle\">{` ${suffix}`}</span>}\n </ItemTitle>\n <MetaNote market={position.market} duration={position.duration} />\n </ItemContent>\n <ItemActions>\n <PnlMeta pnl={position.pnl} win={position.win} stake={position.stake} />\n </ItemActions>\n </Item>\n )\n}\n\nconst DIGITS_TYPE_LABEL: Record<DigitsPosition[\"type\"], string> = {\n matches: \"Matches\",\n differs: \"Differs\",\n odd: \"Odd\",\n even: \"Even\",\n over: \"Over\",\n under: \"Under\",\n}\n\n/**\n * Splits a position's row title into the prominent label and an optional\n * subtle suffix (rendered in `text-on-subtle` so the multiplier/digit doesn't\n * compete with the contract type for visual weight).\n */\nfunction positionTitleParts(p: Position): { label: string; suffix?: string } {\n switch (p.kind) {\n case \"rise-fall\": return { label: p.direction }\n case \"swipe\": return { label: `Swipe-${p.direction.toLowerCase()}` }\n case \"box-o\": return { label: \"Box-O\", suffix: p.multiplier }\n // Digits with a picked value (matches/differs/over/under) show it as a\n // subtle suffix; odd/even have no digit so just the label.\n case \"digits\": return { label: DIGITS_TYPE_LABEL[p.type], suffix: p.digit }\n }\n}\n\nfunction MetaNote({ market, duration }: { market: string; duration: string }) {\n return (\n <span className=\"text-xs text-on-subtle whitespace-nowrap\">\n {market} · {duration}\n </span>\n )\n}\n\nfunction PnlMeta({ pnl, win, stake }: { pnl: string; win: boolean; stake: string }) {\n return (\n <div className=\"flex flex-col items-end gap-0.5\">\n <span className={`font-display font-semibold tabular-nums text-base ${win ? \"text-semantic-win\" : \"text-semantic-loss\"}`}>\n {pnl}\n </span>\n <span className=\"tabular-nums text-xs text-on-subtle\">{stake}</span>\n </div>\n )\n}\n\nfunction DefaultEmptyState({ onViewHistory }: { onViewHistory?: () => void }) {\n return (\n <Empty className=\"flex min-h-0 flex-1 flex-col justify-center border-none rounded-none p-6 text-center\">\n <EmptyHeader className=\"gap-4\">\n <EmptyMedia>\n <History className=\"size-8 text-on-subtle\" />\n </EmptyMedia>\n {/* h6 (16px) intentionally overrides EmptyTitle's default\n h5 (18px) — this empty state sits inside a compact sheet.\n Role-on-role override works because the scale is ordered largest →\n smallest in the stylesheet. */}\n <EmptyTitle className=\"h6 text-on-subtle\">\n No trades yet.\n </EmptyTitle>\n <Button variant=\"tertiary\" size=\"md\" onClick={onViewHistory}>\n View trade history\n </Button>\n </EmptyHeader>\n </Empty>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Smoothing hook */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport type LoaderCheckpoint = {\n /** Percentage the bar may climb to once this stage is reached (0–100). */\n target: number\n /** Text shown while this stage is in flight. */\n label: string\n}\n\nexport interface SmoothProgressInput {\n /** Ordered stages the loader steps through. */\n checkpoints: LoaderCheckpoint[]\n /** Index of the highest checkpoint reached so far. */\n reached: number\n /** When true, the bar is released to 100%. */\n done: boolean\n /** Max climb speed in % per second. Caps sudden jumps. */\n maxVelocity?: number\n /** How long a stage may stall before `delayed` flips true. */\n delayMs?: number\n /** Label shown once complete. */\n readyLabel?: string\n}\n\nexport interface SmoothProgressState {\n progress: number\n label: string\n delayed: boolean\n complete: boolean\n}\n\n/**\n * Velocity-capped progress smoothing. The bar climbs continuously toward the\n * current checkpoint's ceiling rather than snapping to it, and reports\n * `delayed` when a stage genuinely stalls — so a held bar still reads as\n * working instead of broken.\n */\nexport function useSmoothProgress({\n checkpoints,\n reached,\n done,\n maxVelocity = 30,\n delayMs = 8000,\n readyLabel = \"Ready\",\n}: SmoothProgressInput): SmoothProgressState {\n const [progress, setProgress] = React.useState(0)\n const [delayed, setDelayed] = React.useState(false)\n\n // Latest-value refs so the rAF loop never needs to be torn down and rebuilt\n // when inputs change mid-load.\n const checkpointsRef = React.useRef(checkpoints)\n const reachedRef = React.useRef(reached)\n const doneRef = React.useRef(done)\n\n // Synced in an effect rather than assigned during render: mutating a ref\n // mid-render is not safe under concurrent rendering (and `react-hooks/refs`\n // rejects it). No dep array, so this runs after every commit — the rAF loop\n // reads these on the next frame, which is always after the effect flush.\n React.useEffect(() => {\n checkpointsRef.current = checkpoints\n reachedRef.current = reached\n doneRef.current = done\n })\n\n const progressRef = React.useRef(0)\n const lastAdvanceRef = React.useRef(0)\n\n React.useEffect(() => {\n let raf = 0\n let last = 0\n const tick = (ts: number) => {\n if (!last) last = ts\n const dt = Math.min((ts - last) / 1000, 0.05)\n last = ts\n\n const cps = checkpointsRef.current\n const isDone = doneRef.current\n const idx = Math.min(reachedRef.current, cps.length - 1)\n const ceiling = isDone ? 100 : cps[idx]?.target ?? 100\n const cur = progressRef.current\n const gap = ceiling - cur\n\n // A ceiling that has fallen below where the bar already sits means the\n // load restarted (a consumer retrying after a failure, or the demo's\n // Replay). The climb is otherwise monotonic, so without this reset the\n // bar would stay pinned at its old high and never move again.\n if (gap < -0.5) {\n progressRef.current = 0\n lastAdvanceRef.current = ts\n setProgress(0)\n setDelayed(false)\n raf = requestAnimationFrame(tick)\n return\n }\n\n if (gap > 0.05) {\n const rate = Math.min(maxVelocity, gap * 2.4)\n let next = cur + rate * dt\n if (next > ceiling) next = ceiling\n if (isDone && next > 99.7) next = 100\n progressRef.current = next\n lastAdvanceRef.current = ts\n setProgress(next)\n setDelayed(false)\n } else if (!isDone && lastAdvanceRef.current && ts - lastAdvanceRef.current > delayMs) {\n setDelayed(true)\n }\n\n raf = requestAnimationFrame(tick)\n }\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [maxVelocity, delayMs])\n\n const idx = Math.min(reached, checkpoints.length - 1)\n const label = done && progress >= 99.5 ? readyLabel : checkpoints[idx]?.label ?? readyLabel\n return { progress, label, delayed, complete: done && progress >= 100 }\n}\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Component */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n/** Trading Game monogram path, drawn in `--on-primary` on the blue backdrop. */\nconst MONOGRAM_D =\n \"M513.51,265.27l12.26-58.98H183.8l-12.26,58.98h105.29l-46.92,225.76,29.68-.85c1.65-.05,40.84-1.34,87-18.36,64.47-23.76,111.8-66.23,136.88-122.83l15.77-35.6h-139.02l-12.26,58.98h58.44l-6.31,6.26c-3.16,3.14-6.56,6.2-10.11,9.12-14.15,11.63-31.27,21.29-50.86,28.7-10.01,3.79-20.64,6.97-31.57,9.45l-5.55,1.26,33.65-161.89h177.86Z\"\n\nexport interface GameLoadingBlockProps {\n /** Bar fill, 0–100. Pair with `useSmoothProgress` for capped climbing. */\n progress?: number\n /** Current stage label. */\n label?: string\n /** When true, swaps the label for a \"taking longer\" message. */\n delayed?: boolean\n /** Plays the zoom-out reveal and hides the bar. */\n exiting?: boolean\n /** Fires once the exit animation finishes. */\n onExitEnd?: () => void\n /**\n * Constrain to the nearest positioned ancestor instead of the viewport.\n * Use for embedding in a bounded area (docs previews, a game shell column).\n * `exiting` implies this, since the reveal needs the app behind it.\n */\n contained?: boolean\n /**\n * Optional backdrop image (e.g. the app's `dot-pattern.webp`) for a\n * pixel-perfect match with the game shell. Omit to use the token-derived\n * dotted backdrop.\n */\n backgroundImageUrl?: string\n className?: string\n}\n\n/**\n * Determinate loading splash for game entry: dotted brand backdrop, monogram,\n * and a progress bar with a shimmer that keeps signalling life while a stage\n * is held. Exits with a zoom-out reveal, or a plain fade under\n * `prefers-reduced-motion`.\n */\nexport function GameLoadingBlock({\n progress = 0,\n label = \"\",\n delayed = false,\n exiting = false,\n onExitEnd,\n contained = false,\n backgroundImageUrl,\n className,\n}: GameLoadingBlockProps) {\n const [go, setGo] = React.useState(false)\n const [reduced, setReduced] = React.useState(false)\n\n React.useEffect(() => {\n if (typeof window !== \"undefined\" && typeof window.matchMedia === \"function\") {\n setReduced(window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches)\n }\n }, [])\n\n React.useEffect(() => {\n if (!exiting) return\n const raf = requestAnimationFrame(() => setGo(true))\n const timer = setTimeout(() => onExitEnd?.(), reduced ? 240 : 520)\n return () => {\n cancelAnimationFrame(raf)\n clearTimeout(timer)\n }\n }, [exiting, reduced, onExitEnd])\n\n // `exiting` must be absolute so the app shows through behind the reveal.\n const isAbsolute = exiting || contained\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading game\"\n data-slot=\"game-loading-block\"\n className={cn(\n \"z-50 inset-0 flex flex-col items-center justify-center gap-8 overflow-hidden\",\n isAbsolute ? \"absolute\" : \"fixed\",\n // Token-derived dotted brand backdrop; skipped when a real image is passed.\n !backgroundImageUrl && \"game-loader-backdrop\",\n backgroundImageUrl && \"bg-primary bg-cover bg-center bg-no-repeat\",\n exiting && (reduced ? \"transition-opacity duration-200\" : \"transition-opacity duration-[180ms] delay-[260ms]\"),\n exiting && go ? \"opacity-0\" : \"opacity-100\",\n className\n )}\n style={backgroundImageUrl ? { backgroundImage: `url(${backgroundImageUrl})` } : undefined}\n >\n <svg\n width=\"120\"\n height=\"120\"\n viewBox=\"0 0 697.31 697.31\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n className={cn(\"game-loader-mark fill-on-primary\", exiting && go && !reduced && \"game-loader-mark-exit\")}\n >\n <path d={MONOGRAM_D} />\n </svg>\n\n {!exiting && (\n <div className=\"flex w-[200px] flex-col items-start gap-3.5\">\n <div className=\"relative h-2 w-full overflow-hidden rounded-xs bg-on-primary/25\">\n <div\n className=\"absolute inset-y-0 left-0 overflow-hidden rounded-xs bg-on-primary\"\n style={{ width: `${progress}%` }}\n >\n <span aria-hidden=\"true\" className=\"game-loader-shimmer absolute inset-y-0 left-[-60%] w-[60%]\" />\n </div>\n </div>\n <span className=\"caption text-on-primary/90\">\n {delayed ? \"Taking longer than usual…\" : label}\n </span>\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","names":["cva","jsx","jsx","jsxs","cva","Slot","jsx","cva","Slot","jsx","jsxs","cva","jsx","jsxs","jsx","jsx","cva","Slot","jsx","cva","Slot","React","X","jsx","jsxs","wrapAction","X","React","Slot","jsx","jsxs","_a","_b","Slot","Slot","jsx","jsxs","Slot","React","ChevronDownIcon","ChevronDownIcon","jsx","jsxs","_a","ChevronDownIcon","jsx","jsxs","_a","_b","className","props","ChevronDownIcon","jsx","React","jsx","jsxs","api","cva","jsx","cva","CheckIcon","jsx","CheckIcon","jsx","jsxs","jsx","jsxs","CheckIcon","ChevronRightIcon","jsx","jsxs","ChevronRightIcon","CheckIcon","jsx","jsxs","CheckIcon","ChevronRightIcon","CircleIcon","jsx","jsxs","CheckIcon","CircleIcon","ChevronRightIcon","cva","jsx","cva","React","cva","jsx","jsx","jsx","jsxs","cva","_a","jsx","cva","jsx","cva","React","cva","jsx","jsx","cva","_a","_b","React","jsx","jsxs","_a","cva","Slot","jsx","cva","Slot","cva","Slot","jsx","cva","Slot","CheckIcon","ChevronRightIcon","CircleIcon","jsx","jsxs","CheckIcon","CircleIcon","ChevronRightIcon","ChevronDownIcon","jsx","jsxs","ChevronDownIcon","cva","ChevronDownIcon","jsx","jsxs","cva","ChevronDownIcon","React","jsx","ChevronLeftIcon","ChevronRightIcon","jsx","jsxs","ChevronLeftIcon","ChevronRightIcon","jsx","React","jsx","jsxs","jsx","jsxs","CircleIcon","jsx","CircleIcon","jsx","jsx","jsxs","XIcon","jsx","jsxs","XIcon","React","cva","Slot","React","jsx","React","jsx","jsxs","jsx","jsxs","open","Slot","cva","React","jsx","jsxs","jsx","React","ArrowRight","jsx","jsxs","INSET","ArrowRight","React","jsx","jsxs","React","Check","jsx","jsxs","Check","jsx","jsx","cva","jsx","cva","cva","jsx","cva","React","jsx","Fragment","jsx","jsxs","ArrowLeft","jsx","jsxs","ArrowLeft","Plus","AccordionPrimitive","jsx","jsxs","AccordionPrimitive","Plus","ArrowRight","jsx","jsxs","ArrowRight","React","jsx","jsxs","React","X","jsx","jsxs","X","History","X","jsx","jsxs","X","History","React","jsx","jsxs","_a","_b","idx"]}
1
+ {"version":3,"sources":["../components/ui/accordion.tsx","../lib/utils.ts","../components/ui/section-message.tsx","../components/ui/button.tsx","../components/ui/spinner.tsx","../components/ui/navigation-button.tsx","../components/ui/alert-dialog.tsx","../components/ui/aspect-ratio.tsx","../components/ui/avatar.tsx","../components/ui/badge.tsx","../components/ui/banner.tsx","../components/ui/bottom-navigation.tsx","../components/ui/breadcrumb.tsx","../components/ui/calendar.tsx","../components/ui/select.tsx","../components/ui/card.tsx","../components/ui/carousel.tsx","../components/ui/pagination.tsx","../components/ui/chip.tsx","../components/ui/checkbox.tsx","../components/ui/command.tsx","../components/ui/dialog.tsx","../components/ui/context-menu.tsx","../components/ui/drawer.tsx","../components/ui/dropdown-menu.tsx","../components/ui/empty.tsx","../components/ui/field.tsx","../components/ui/label.tsx","../components/ui/separator.tsx","../components/ui/hover-card.tsx","../components/ui/input.tsx","../components/ui/input-group.tsx","../components/ui/textarea.tsx","../components/ui/input-otp.tsx","../components/ui/item.tsx","../components/ui/link.tsx","../components/ui/menubar.tsx","../components/ui/native-select.tsx","../components/ui/navigation-menu.tsx","../components/ui/numpad.tsx","../components/ui/popover.tsx","../components/ui/progress.tsx","../components/ui/profile-photo.tsx","../components/ui/radio-group.tsx","../components/ui/resizable.tsx","../components/ui/scroll-area.tsx","../components/ui/sheet.tsx","../components/ui/sidebar.tsx","../hooks/use-mobile.ts","../components/ui/skeleton.tsx","../components/ui/tooltip.tsx","../components/ui/slider.tsx","../components/ui/toast.tsx","../components/ui/slide-to-confirm.tsx","../components/ui/stepper.tsx","../components/ui/steps.tsx","../components/ui/switch.tsx","../components/ui/table.tsx","../components/ui/tabs.tsx","../components/ui/toggle.tsx","../components/ui/toggle-group.tsx","../components/blocks/result-block.tsx","../components/blocks/header-navigation-block.tsx","../components/blocks/faq-block.tsx","../components/blocks/hero-block.tsx","../components/blocks/auth-block.tsx","../components/blocks/navbar-block.tsx","../components/blocks/open-positions-block.tsx","../components/blocks/game-loading-block.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Accordion({\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />\n}\n\nfunction AccordionItem({\n className,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-b border-border-default-default last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n \"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left type-accordion-trigger transition-all outline-none hover:underline focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:pointer-events-none disabled:text-text-disabled-default [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"pointer-events-none size-4 shrink-0 translate-y-0.5 text-icon-prominent-default transition-transform duration-200\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className=\"overflow-hidden type-accordion-content data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n {...props}\n >\n <div className={cn(\"pt-0 pb-4\", className)}>{children}</div>\n </AccordionPrimitive.Content>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport {\n AlertTriangle,\n CheckCircle2,\n Info,\n X,\n XCircle,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { NavigationButton } from \"./navigation-button\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Types */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\ntype SectionMessageVariant = \"info\" | \"warning\" | \"danger\" | \"success\"\n\n/**\n * `row` keeps everything on one band with the action beside the text;\n * `stack` drops the actions below the body. The old `inline` / `card`\n * values are accepted as deprecated aliases until the v1.0 sweep.\n */\ntype SectionMessageLayout = \"row\" | \"stack\" | \"inline\" | \"card\"\n\ntype SectionMessageSize = \"sm\" | \"md\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Variants */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n/**\n * Per-variant surface + border classes. Title, description, icon, and close X\n * are applied via dedicated slot classes below — they're not part of the cva\n * root because they target descendant elements.\n *\n * Sizes are a strict one-step ladder: every metric in `sm` sits exactly one\n * scale step below `md` (padding 16→12, gaps 12→8, icon 16→14, radius xl→lg,\n * type 14/20→12/16), so both densities read as the same component.\n */\nconst sectionMessageVariants = cva(\n \"grid w-full\",\n {\n variants: {\n variant: {\n info: \"bg-background-information-default border border-border-information-default\",\n warning: \"bg-background-warning-default border border-border-warning-default\",\n danger: \"bg-background-error-default border border-border-error-default\",\n success: \"bg-background-success-default border border-border-success-default\",\n },\n layout: {\n // Row is mobile-first: 3 columns × 2 rows so a long title can wrap and the\n // action button drops below the body. At sm+ (640px) it collapses to a single\n // row of 4 columns (icon · body · action · close).\n row: \"grid-cols-[auto_1fr_auto] grid-rows-[auto_auto] items-start sm:grid-cols-[auto_1fr_auto_auto] sm:grid-rows-1\",\n stack: \"grid-cols-[auto_1fr_auto] grid-rows-[auto_auto] items-start\",\n },\n size: {\n md: \"rounded-xl px-4 py-4 gap-x-3\",\n sm: \"rounded-lg px-3 py-3 gap-x-2\",\n },\n },\n compoundVariants: [\n { layout: \"row\", size: \"md\", class: \"gap-y-3\" },\n { layout: \"row\", size: \"sm\", class: \"gap-y-2\" },\n { layout: \"stack\", size: \"md\", class: \"gap-y-2\" },\n { layout: \"stack\", size: \"sm\", class: \"gap-y-1.5\" },\n ],\n defaultVariants: {\n variant: \"info\",\n layout: \"row\",\n size: \"md\",\n },\n },\n)\n\n/**\n * Classes applied when the row layout is single-line (only title or only\n * description). `min-h` keeps the resting height (48px md / 40px sm) when\n * content fits; the container is free to grow when text wraps on narrow\n * viewports so it never overflows. The reduced vertical padding keeps text\n * comfortably off the edges when growth does happen.\n */\nconst SINGLE_LINE_CLASSES: Record<SectionMessageSize, string> = {\n md: \"items-center min-h-12 py-2 gap-y-0\",\n sm: \"items-center min-h-10 py-1.5 gap-y-0\",\n}\n\n/**\n * Title color — uniform `text-prominent` across every variant so\n * the title reads with consistent weight. The leading icon alone carries the\n * severity colour signal.\n */\nconst TITLE_CLASSES: Record<SectionMessageVariant, string> = {\n info: \"text-text-prominent-default\",\n warning: \"text-text-prominent-default\",\n danger: \"text-text-prominent-default\",\n success: \"text-text-prominent-default\",\n}\n\n/** Icon color per variant — the only place severity shows up as colour. */\nconst ICON_CLASSES: Record<SectionMessageVariant, string> = {\n info: \"text-icon-information-default\",\n warning: \"text-icon-warning-default\",\n danger: \"text-icon-error-default\",\n success: \"text-icon-success-default\",\n}\n\n/** Description color — prominent ink at regular weight; the title/description\n hierarchy is carried by weight (600 vs 400) alone. */\nconst DESC_CLASSES: Record<SectionMessageVariant, string> = {\n info: \"text-text-prominent-default\",\n warning: \"text-text-prominent-default\",\n danger: \"text-text-prominent-default\",\n success: \"text-text-prominent-default\",\n}\n\n/**\n * Close X color — neutral gray on every variant. The X reads as a generic\n * dismiss affordance, not a status signal, so it stays out of the accent\n * palette.\n */\nconst CLOSE_CLASSES: Record<SectionMessageVariant, string> = {\n info: \"text-icon-subtle-default opacity-70\",\n warning: \"text-icon-subtle-default opacity-70\",\n danger: \"text-icon-subtle-default opacity-70\",\n success: \"text-icon-subtle-default opacity-70\",\n}\n\n/** Default per-variant leading icon. Pass `icon={null}` to omit; pass any ReactNode to override. */\nfunction defaultIconForVariant(variant: SectionMessageVariant): React.ReactNode {\n switch (variant) {\n case \"info\":\n return <Info />\n case \"warning\":\n return <AlertTriangle />\n case \"danger\":\n return <XCircle />\n case \"success\":\n return <CheckCircle2 />\n }\n}\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Props */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\ninterface SectionMessageProps\n extends Omit<React.ComponentProps<\"div\">, \"title\"> {\n /** Surface + accent variant. */\n variant?: SectionMessageVariant\n /** Layout shape — `row` (action beside text) or `stack` (actions below). */\n layout?: SectionMessageLayout\n /** Density — `md` (default) or `sm`, one full scale step down. */\n size?: SectionMessageSize\n /** Title text. At least one of `title` or `description` is required. */\n title?: React.ReactNode\n /** Description / supporting text. At least one of `title` or `description` is required. */\n description?: React.ReactNode\n /**\n * Leading icon. When `undefined`, the default for the variant is used.\n * Pass `null` to omit the icon entirely. Pass any `ReactNode` to override.\n */\n icon?: React.ReactNode | null\n /** Single action button — honoured only when `layout=\"row\"`. */\n action?: React.ReactNode\n /** Up to 2 action buttons — honoured only when `layout=\"stack\"`. */\n actions?: React.ReactNode[]\n /**\n * When provided, the close X renders and calls this on click. Absence\n * means the message is not user-dismissible.\n */\n onDismiss?: () => void\n /** aria-label for the close button. Defaults to \"Dismiss\". */\n dismissLabel?: string\n}\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Component */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nfunction SectionMessage({\n variant = \"info\",\n layout = \"row\",\n size = \"md\",\n title,\n description,\n icon,\n action,\n actions,\n onDismiss,\n dismissLabel = \"Dismiss\",\n className,\n ...props\n}: SectionMessageProps) {\n // At least one of title or description must be supplied.\n if (!title && !description) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"SectionMessage: requires at least one of `title` or `description`. Rendering null.\",\n )\n }\n return null\n }\n\n // Normalize the deprecated layout aliases (inline→row, card→stack).\n const resolvedLayout: \"row\" | \"stack\" =\n layout === \"inline\" ? \"row\" : layout === \"card\" ? \"stack\" : layout\n\n const isRow = resolvedLayout === \"row\"\n const isSingleLine = isRow && !(title && description)\n const showIcon = icon !== null\n const resolvedIcon = icon === undefined ? defaultIconForVariant(variant) : icon\n const showCloseButton = typeof onDismiss === \"function\"\n // All SectionMessage variants use the standard Secondary button. (Promotional surfaces\n // that need the primary-inverse button live on `Banner` instead.)\n const buttonVariant = \"secondary\" as const\n const buttonSize = \"sm\" as const\n const isAssertive = variant === \"danger\" || variant === \"warning\"\n const role = isAssertive ? \"alert\" : \"status\"\n const ariaLive = isAssertive ? \"assertive\" : \"polite\"\n\n // Dev-only warnings for layout/slot mismatches.\n if (process.env.NODE_ENV !== \"production\") {\n if (isRow && actions && actions.length > 0) {\n console.warn(\n 'SectionMessage: `actions` is ignored when layout=\"row\". Use `action` instead.',\n )\n }\n if (!isRow && action) {\n console.warn(\n 'SectionMessage: `action` is ignored when layout=\"stack\". Use `actions` instead.',\n )\n }\n }\n\n /** The body: title + optional description. */\n const body = (\n <div className=\"min-w-0\">\n {title ? (\n <p\n className={cn(\n size === \"sm\" ? \"type-section-message-title-sm\" : \"type-section-message-title\",\n TITLE_CLASSES[variant],\n description ? (size === \"sm\" ? \"mb-1\" : \"mb-2\") : \"mb-0\",\n )}\n >\n {title}\n </p>\n ) : null}\n {description ? (\n <p\n className={cn(\n size === \"sm\"\n ? \"type-section-message-description-sm m-0\"\n : \"type-section-message-description m-0\",\n DESC_CLASSES[variant],\n )}\n >\n {description}\n </p>\n ) : null}\n </div>\n )\n\n /** The dismiss (close X) button — a NavigationButton, per the icon-button\n * law, carrying the message tone's ink. */\n const closeButton = showCloseButton ? (\n <NavigationButton\n type=\"button\"\n size=\"xs\"\n onClick={onDismiss}\n aria-label={dismissLabel}\n className={cn(\n // No positioning nudges — the button sits at the grid cell's natural\n // top-right position, which (with items-start + the container's own\n // padding) lands it a uniform inset from the top and right edges in\n // every layout, matching the card's own padding exactly.\n \"cursor-pointer bg-transparent transition-opacity hover:bg-transparent hover:opacity-100\",\n size === \"sm\" ? \"size-5 [&_svg:not([class*='size-'])]:size-3.5\" : \"size-6 [&_svg:not([class*='size-'])]:size-4\",\n CLOSE_CLASSES[variant],\n )}\n >\n <X />\n </NavigationButton>\n ) : null\n\n /** The leading icon column. */\n const iconColumn = showIcon ? (\n <div\n aria-hidden\n className={cn(\n \"inline-flex shrink-0 [&_svg]:size-full\",\n size === \"sm\" ? \"size-3.5\" : \"size-4\",\n // Single-line: grid is items-center so the icon centers automatically.\n // Multi-line / stack: top-aligned with the title cap-height via an\n // optical nudge so the icon reads as introducing the message header,\n // not floating between title and description.\n isSingleLine ? \"\" : size === \"sm\" ? \"mt-px\" : \"mt-0.5\",\n ICON_CLASSES[variant],\n )}\n >\n {resolvedIcon}\n </div>\n ) : null\n\n if (isRow) {\n return (\n <div\n role={role}\n aria-live={ariaLive}\n data-slot=\"section-message\"\n data-variant={variant}\n data-layout=\"row\"\n data-size={size}\n className={cn(\n sectionMessageVariants({ variant, layout: \"row\", size }),\n isSingleLine ? SINGLE_LINE_CLASSES[size] : \"\",\n // No action button → never need the second (mobile action-wrap) row.\n // Without this, that row still exists at 0px tall but its gap-y\n // renders below the body anyway, padding the bottom more than the top.\n !action ? \"grid-rows-1\" : \"\",\n className,\n )}\n {...props}\n >\n {/* icon — col 1 row 1, both breakpoints */}\n {iconColumn}\n {/* body — col 2 row 1, both breakpoints */}\n <div className=\"col-start-2 row-start-1 min-w-0\">{body}</div>\n {/* close X — col 3 row 1 on mobile, col 4 row 1 on desktop (always top-right) */}\n <div className=\"col-start-3 row-start-1 sm:col-start-4 sm:row-start-1\">\n {closeButton}\n </div>\n {/* action — col 2 row 2 (under body) on mobile; col 3 row 1 (inline) on desktop.\n justify-self-start on mobile keeps the button left-aligned under the body. */}\n {action ? (\n <div className=\"col-start-2 row-start-2 justify-self-start sm:col-start-3 sm:row-start-1 sm:self-center sm:justify-self-end\">\n {wrapAction(action, buttonVariant, buttonSize)}\n </div>\n ) : null}\n </div>\n )\n }\n\n // Stack layout\n return (\n <div\n role={role}\n aria-live={ariaLive}\n data-slot=\"section-message\"\n data-variant={variant}\n data-layout=\"stack\"\n data-size={size}\n className={cn(\n sectionMessageVariants({ variant, layout: \"stack\", size }),\n className,\n )}\n {...props}\n >\n {iconColumn}\n <div className=\"col-start-2 row-start-1 min-w-0\">{body}</div>\n <div className=\"col-start-3 row-start-1\">{closeButton}</div>\n {actions && actions.length > 0 ? (\n // Stack's grid only has 3 columns (icon · body · close), so the actions\n // row spans the 2 columns under body+close (col-span-2), not 3 — col-span-3\n // was reaching past the grid, which silently added an extra invisible\n // column and pushed the close button further from the right edge than\n // every other layout.\n <div\n className={cn(\n \"col-span-2 col-start-2 row-start-2 flex flex-wrap items-center justify-start gap-2\",\n size === \"sm\" ? \"mt-1.5\" : \"mt-2\",\n )}\n >\n {actions.slice(0, 2).map((node, i) => (\n <React.Fragment key={i}>{wrapAction(node, buttonVariant, buttonSize)}</React.Fragment>\n ))}\n </div>\n ) : null}\n </div>\n )\n}\n\n/**\n * Normalize an action node. React elements (e.g. `<Button>`, `<Link>`) pass through\n * untouched — callers can use them directly to control variant, size, and event\n * handlers. Primitives (`string`, `number`) get wrapped in a `Button` sized to\n * match the message density. Anything else (`null`/`undefined`/booleans/arrays)\n * renders as-is, matching React's defaults.\n */\nfunction wrapAction(\n node: React.ReactNode,\n variant: \"primary-on-brand\" | \"secondary\",\n size: \"sm\",\n): React.ReactNode {\n // If it already looks like a React element (e.g. <Button>...), pass through.\n if (React.isValidElement(node)) return node\n return (\n <Button variant={variant} size={size}>\n {node}\n </Button>\n )\n}\n\nexport { SectionMessage, sectionMessageVariants }\nexport type {\n SectionMessageProps,\n SectionMessageVariant,\n SectionMessageLayout,\n SectionMessageSize,\n}\n\n/* @deprecated — the component was renamed to SectionMessage. These aliases keep\n the old import surface working until the v1.0 cleanup sweep. */\nconst Alert = SectionMessage\nconst alertVariants = sectionMessageVariants\ntype AlertProps = SectionMessageProps\ntype AlertVariant = SectionMessageVariant\ntype AlertLayout = SectionMessageLayout\nexport { Alert, alertVariants }\nexport type { AlertProps, AlertVariant, AlertLayout }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Spinner } from \"./spinner\"\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-[color,border-color,opacity,box-shadow,transform] outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong active:opacity-60 disabled:pointer-events-none aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft [&_svg]:pointer-events-none [&_svg]:shrink-0 font-display\",\n {\n variants: {\n variant: {\n // Primary brand blue (#2323FF)\n primary:\n \"bg-background-brand-default text-text-on-brand-static hover:bg-background-brand-hover active:bg-background-brand-pressed active:opacity-100 disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] disabled:text-text-disabled-default\",\n // Primary Inverse — white bg + blue text; for use on dark/coloured surfaces\n // On-brand family — for buttons standing on a brand-coloured surface\n // (NOT theme inverses): white pill with primary ink, white outline,\n // white text. All static, because the brand panel is the same in\n // both themes.\n \"primary-on-brand\":\n \"bg-background-static-white text-text-brand-default hover:bg-background-static-white-wash disabled:bg-(--primitive-white-alpha-24) disabled:text-text-on-brand-disabled-default\",\n // Secondary — the design file's white-surface pill: card surface,\n // prominent ink, hover swaps to the secondary surface (one lift up),\n // press dims via the shared active state.\n //\n // The edge is 1.5px on `border-control-default`, not the shared 1px\n // hairline. The white fill separates from the canvas by only 1.06:1,\n // so the border — not the fill — is what contains the 16px semibold\n // label; at 1px on the shared hairline it read as detached from both.\n // `secondary-on-brand` matches the width and the *subtlety*\n // (white-alpha-32 = 1.84:1 on brand, against 1.71:1 here) so both\n // read as the same quiet edge. Its contrast is higher only because it\n // has no fill behind it — there, the border IS the button.\n secondary:\n \"bg-background-primary-surface border-[1.5px] border-border-control-default text-text-prominent-default hover:bg-background-secondary-surface disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] disabled:border-border-disabled-default disabled:text-text-disabled-default\",\n // Secondary Inverse — white border + white text; for use on dark/coloured surfaces\n \"secondary-on-brand\":\n \"bg-transparent border-[1.5px] border-(--primitive-white-alpha-32) text-text-on-brand-static hover:bg-(--primitive-white-alpha-8) disabled:border-(--primitive-white-alpha-16) disabled:text-text-on-brand-disabled-default\",\n tertiary:\n \"bg-transparent text-text-prominent-default hover:bg-background-hover-default disabled:text-text-disabled-default\",\n // Tertiary Inverse — transparent + white text/icon; for use on dark/coloured surfaces\n \"tertiary-on-brand\":\n \"bg-transparent text-text-on-brand-static hover:bg-(--primitive-white-alpha-8) disabled:text-text-on-brand-disabled-default\",\n // Frosted — the tinted-glass family, one look per surface:\n // `frosted` sits on page surfaces (brand-selected tint + brand ink,\n // hover/pressed via the state-layer glazes stacked over the solid\n // fill); `frosted-on-brand` is the white frost for coloured/art\n // surfaces (hover thickens the frost, press thins it).\n frosted:\n \"bg-background-brand-selected text-text-brand-selected active:opacity-100 hover:[background-image:linear-gradient(var(--background-hover-default),var(--background-hover-default))] active:[background-image:linear-gradient(var(--background-pressed-default),var(--background-pressed-default))] disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] disabled:text-text-disabled-default\",\n \"frosted-on-brand\":\n \"bg-(--primitive-white-alpha-24) backdrop-blur-md text-text-on-brand-static hover:bg-(--primitive-white-alpha-32) active:bg-(--primitive-white-alpha-16) active:opacity-100 disabled:bg-(--primitive-white-alpha-8) disabled:text-text-on-brand-disabled-default\",\n\n /* @deprecated aliases — shimmer became the `shimmer` boolean prop;\n the inverse names became the on-brand family; `glass` became\n `frosted-on-brand`. Deleted at v1.0. */\n glass:\n \"bg-(--primitive-white-alpha-24) backdrop-blur-md border border-(--primitive-white-alpha-24) text-text-on-brand-static hover:bg-(--primitive-white-alpha-32) active:bg-(--primitive-white-alpha-16) active:opacity-100 disabled:bg-(--primitive-white-alpha-8) disabled:text-text-on-brand-disabled-default\",\n \"primary-shimmer\":\n \"relative overflow-hidden bg-background-brand-default text-text-on-brand-static hover:bg-background-brand-hover active:bg-background-brand-pressed active:opacity-100\",\n \"primary-on-brand-shimmer\":\n \"relative overflow-hidden bg-background-static-white text-text-brand-default hover:bg-background-static-white-wash\",\n \"primary-inverse\":\n \"bg-background-static-white text-text-brand-container-static hover:bg-background-static-white-wash\",\n \"primary-inverse-shimmer\":\n \"relative overflow-hidden bg-background-static-white text-text-brand-container-static hover:bg-background-static-white-wash\",\n \"secondary-inverse\":\n \"bg-transparent border border-background-static-white text-text-on-brand-static hover:bg-(--primitive-white-alpha-8)\",\n \"tertiary-inverse\":\n \"bg-transparent text-text-on-brand-static hover:bg-(--primitive-white-alpha-8) disabled:text-text-on-brand-disabled-default\",\n },\n size: {\n // One primitive type step per size (16/14/12) and padding-x = half\n // the height (24/20/16) — the same ladder Badge rides.\n // Spacing rule: padding-x = height/2 - 4 (20/16/12), gap fixed at 8.\n // Type one primitive step per size (18/16/14); icons track the height.\n lg: \"type-button-lg h-12 w-fit gap-2 rounded-full px-5 [&_svg:not([class*='size-'])]:size-5\",\n md: \"type-button-md h-10 w-fit gap-2 rounded-full px-4 [&_svg:not([class*='size-'])]:size-4\",\n sm: \"type-button-sm h-8 w-fit gap-2 rounded-full px-3 [&_svg:not([class*='size-'])]:size-3.5\",\n icon: \"size-12 rounded-full [&_svg:not([class*='size-'])]:size-5\",\n \"icon-lg\": \"size-12 rounded-full [&_svg:not([class*='size-'])]:size-5\",\n \"icon-md\": \"size-10 rounded-full [&_svg:not([class*='size-'])]:size-4\",\n \"icon-sm\": \"size-8 rounded-full [&_svg:not([class*='size-'])]:size-3.5\",\n \"icon-xs\": \"size-6 rounded-full [&_svg:not([class*='size-'])]:size-3\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n }\n)\n\nconst spinnerSizeMap: Record<string, string> = {\n lg: \"size-5\",\n md: \"size-4\",\n sm: \"size-3.5\",\n icon: \"size-4\",\n \"icon-lg\": \"size-4\",\n \"icon-md\": \"size-4\",\n \"icon-sm\": \"size-3.5\",\n \"icon-xs\": \"size-3\",\n}\n\n/**\n * Shimmer gradients. The animation keyframes (`button-shimmer`) live in\n * `src/styles.css` and translate the gradient from -100% to 100%\n * horizontally. 110° tilts the bright band forward so the sweep reads as a\n * diagonal shine; three stops around 50% (soft → mid → soft) shape the\n * highlight like a polished-metal gleam.\n *\n * primary → white sweep over the brand fill\n * primary-on-brand → brand-blue sweep over the white pill (a white sweep\n * would be invisible on white)\n */\nconst WHITE_SWEEP =\n \"linear-gradient(110deg, transparent 20%, rgba(255,255,255,0.10) 40%, rgba(255,255,255,0.20) 50%, rgba(255,255,255,0.10) 60%, transparent 80%)\"\nconst BRAND_SWEEP =\n \"linear-gradient(110deg, transparent 20%, rgba(35,35,255,0.07) 40%, rgba(35,35,255,0.14) 50%, rgba(35,35,255,0.07) 60%, transparent 80%)\"\n\n/** Which sweep a variant gets when `shimmer` is on (or via deprecated variants). */\nconst shimmerGradients: Record<string, string> = {\n primary: WHITE_SWEEP,\n \"primary-on-brand\": BRAND_SWEEP,\n \"primary-shimmer\": WHITE_SWEEP,\n \"primary-on-brand-shimmer\": BRAND_SWEEP,\n \"primary-inverse\": BRAND_SWEEP,\n \"primary-inverse-shimmer\": BRAND_SWEEP,\n}\n\nfunction Button({\n className,\n variant = \"primary\",\n size = \"md\",\n asChild = false,\n loading = false,\n shimmer = false,\n children,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n loading?: boolean\n /**\n * Attention sweep for headline CTAs — a modifier, not a variant.\n * Only meaningful on the primary family (`primary`, `primary-on-brand`);\n * ignored elsewhere with a dev warning.\n */\n shimmer?: boolean\n }) {\n // Shimmer applies to the primary family only; the deprecated *-shimmer\n // variants imply it for back-compat.\n const shimmerCapable =\n variant === \"primary\" || variant === \"primary-on-brand\" ||\n variant === \"primary-inverse\"\n const legacyShimmer =\n variant === \"primary-shimmer\" ||\n variant === \"primary-on-brand-shimmer\" ||\n variant === \"primary-inverse-shimmer\"\n const showShimmer = legacyShimmer || (shimmer && shimmerCapable)\n if (process.env.NODE_ENV !== \"production\" && shimmer && !shimmerCapable && !legacyShimmer) {\n console.warn(\n `Button: \\`shimmer\\` only applies to the primary family — ignored on variant=\"${variant}\".`,\n )\n }\n\n const sharedProps = {\n \"data-slot\": \"button\",\n \"data-variant\": variant,\n \"data-size\": size,\n \"data-loading\": loading || undefined,\n \"data-shimmer\": showShimmer || undefined,\n className: cn(\n buttonVariants({ variant, size, className }),\n showShimmer && \"relative overflow-hidden\",\n loading && \"pointer-events-none opacity-24 relative\",\n ),\n \"aria-busy\": loading || undefined,\n ...props,\n }\n\n // `asChild` merges Button's styling onto a caller-supplied element via Slot,\n // which accepts exactly ONE child. The shimmer and loading branches below sit\n // in their own JSX slots, so even when they render nothing they make `children`\n // an array of two — and Slot rejects any array, empty entries included. Pass\n // `children` through on its own here. Shimmer and loading are unavailable in\n // this mode by nature: Slot has no room for the extra layers they need.\n if (asChild) {\n return <Slot.Root {...sharedProps}>{children}</Slot.Root>\n }\n\n return (\n <button {...sharedProps}>\n {/* Shimmer sweep — rendered before children so the icon/label paint\n over the (mostly-transparent) gradient. Suppressed while loading\n or disabled so the button still reads as inert. */}\n {showShimmer && variant && shimmerGradients[variant] && !loading && !props.disabled ? (\n <span\n aria-hidden\n className=\"pointer-events-none absolute inset-0 [animation:var(--animate-button-shimmer)]\"\n style={{ background: shimmerGradients[variant] }}\n />\n ) : null}\n {loading ? (\n <>\n <span className=\"invisible inline-flex items-center gap-[inherit]\" aria-hidden>\n {children}\n </span>\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <Spinner className={spinnerSizeMap[size ?? \"md\"]} />\n </span>\n </>\n ) : children}\n </button>\n )\n}\n\nexport { Button, buttonVariants }\n","import { cn } from \"../../lib/utils\"\n\nconst PILL_COUNT = 8\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\"relative inline-block size-4 text-current\", className)}\n {...props}\n >\n {Array.from({ length: PILL_COUNT }, (_, i) => (\n <span\n key={i}\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"0\",\n width: \"12%\",\n height: \"30%\",\n borderRadius: \"9999px\",\n backgroundColor: \"currentColor\",\n transformOrigin: \"50% 167%\",\n transform: `translateX(-50%) rotate(${i * 45}deg)`,\n animation: `spinner-fade 0.8s linear ${(i * 0.8) / PILL_COUNT}s infinite`,\n }}\n />\n ))}\n </div>\n )\n}\n\nexport { Spinner }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst navigationButtonVariants = cva(\n // Icon-only nav control — circular like every icon button in the system.\n \"inline-flex shrink-0 items-center justify-center rounded-full transition-all duration-fast ease-standard outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong active:opacity-60 disabled:pointer-events-none disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] disabled:text-text-disabled-default [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-background-hover-default text-icon-prominent-default hover:bg-background-pressed-default\",\n // Frosted circle for art/hero/brand surfaces — same recipe as\n // Button's frosted-on-brand: hover thickens the frost, press thins it.\n \"frosted-on-brand\":\n \"bg-(--primitive-white-alpha-24) backdrop-blur-md text-text-on-brand-static hover:bg-(--primitive-white-alpha-32) active:bg-(--primitive-white-alpha-16) active:opacity-100\",\n /* @deprecated — renamed to frosted-on-brand. Deleted at v1.0. */\n glass:\n \"bg-(--primitive-white-alpha-24) backdrop-blur-md text-text-on-brand-static hover:bg-(--primitive-white-alpha-32) active:bg-(--primitive-white-alpha-16) active:opacity-100\",\n },\n size: {\n lg: \"size-12 [&_svg:not([class*='size-'])]:size-6\",\n md: \"size-10 [&_svg:not([class*='size-'])]:size-5\",\n sm: \"size-8 [&_svg:not([class*='size-'])]:size-5\",\n xs: \"size-6 [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"lg\",\n },\n }\n)\n\nfunction NavigationButton({\n className,\n variant = \"default\",\n size = \"lg\",\n asChild = false,\n children,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof navigationButtonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"navigation-button\"\n data-variant={variant}\n data-size={size}\n className={cn(navigationButtonVariants({ variant, size, className }))}\n {...props}\n >\n {children}\n </Comp>\n )\n}\n\nexport { NavigationButton, navigationButtonVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-background-overlay-default data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n \"group/alert-dialog-content fixed top-[50%] left-[50%] z-50 flex h-auto w-full max-w-[calc(100%-2rem)] flex-col translate-x-[-50%] translate-y-[-50%] gap-6 rounded-2xl border border-border-default-default bg-background-primary-surface p-6 duration-base data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"type-alert-dialog-title sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"type-alert-dialog-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-background-secondary-surface sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"primary\",\n size = \"md\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild className={cn(\"group-data-[size=sm]/alert-dialog-content:w-full\", className)}>\n <AlertDialogPrimitive.Action\n data-slot=\"alert-dialog-action\"\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"tertiary\",\n size = \"md\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild className={cn(\"group-data-[size=sm]/alert-dialog-content:w-full\", className)}>\n <AlertDialogPrimitive.Cancel\n data-slot=\"alert-dialog-cancel\"\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n","\"use client\"\n\nimport { AspectRatio as AspectRatioPrimitive } from \"radix-ui\"\n\nfunction AspectRatio({\n ...props\n}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {\n return <AspectRatioPrimitive.Root data-slot=\"aspect-ratio\" {...props} />\n}\n\nexport { AspectRatio }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Avatar as AvatarPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Avatar({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\" | \"xl\"\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 rounded-full select-none data-[size=sm]:size-6 data-[size=lg]:size-10 data-[size=xl]:[width:var(--avatar-size-xl)] data-[size=xl]:[height:var(--avatar-size-xl)]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarImage({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full overflow-hidden rounded-full\", className)}\n {...props}\n />\n )\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"type-avatar-fallback flex size-full items-center justify-center overflow-hidden rounded-full bg-background-secondary-surface text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-background-brand-default text-text-on-brand-static ring-2 ring-background-primary-surface select-none\",\n \"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n \"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n \"group-data-[size=xl]/avatar:size-3.5 group-data-[size=xl]/avatar:[&>svg]:size-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background-primary-surface\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AvatarGroupCount({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"type-avatar-group-count relative flex size-8 shrink-0 items-center justify-center rounded-full bg-background-secondary-surface text-text-subtle-default ring-2 ring-background-primary-surface group-has-data-[size=sm]/avatar-group:size-6 group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=xl]/avatar-group:[width:var(--avatar-size-xl)] group-has-data-[size=xl]/avatar-group:[height:var(--avatar-size-xl)] [&>svg]:size-4 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=xl]/avatar-group:[&>svg]:size-6\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent font-display whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong [&>svg]:pointer-events-none [&>svg]:size-3\",\n {\n variants: {\n variant: {\n /* Emphasis + meaning. Emphasis is `solid` | `tint`;\n meaning is the suffix, with brand left unsuffixed as the\n default. Two variants sit outside the grid — `glass` and\n `demo` — because they are single-purpose surfaces. */\n\n // Solid — saturated surface, paired foreground. Status fills are\n // the bright 600 steps with shared white ink\n // (--text-on-status-static) — a deliberate style call.\n solid: \"bg-background-brand-default text-text-on-brand-static\",\n \"solid-demo\": \"bg-background-demo-solid text-text-on-brand-static\",\n \"solid-neutral\": \"bg-background-inverse-surface text-text-prominent-inverse\",\n \"solid-success\": \"bg-background-success-solid text-text-on-status-static\",\n \"solid-fail\": \"bg-background-error-solid text-text-on-status-static\",\n \"solid-warning\": \"bg-background-warning-solid text-text-on-status-static\",\n\n // Tint — the Section Message surface tokens, coloured foreground.\n // Brand tint = the static brand-container recipe (layered value,\n // so it paints via `background`, not a bg-* utility).\n tint: \"[background:var(--background-brand-container)] border-transparent text-text-brand-container-static\",\n \"tint-demo\": \"bg-background-demo-default border-transparent text-text-demo-default\",\n \"tint-neutral\": \"bg-background-secondary-surface border-transparent text-text-prominent-default\",\n \"tint-success\": \"bg-background-success-default border-transparent text-text-success-default\",\n \"tint-fail\": \"bg-background-error-default border-transparent text-text-error-default\",\n \"tint-warning\": \"bg-background-warning-default border-transparent text-text-warning-default\",\n\n },\n size: {\n xs: \"type-badge-xs h-5 px-2 py-0.5\",\n sm: \"type-badge-sm h-6 px-2.5 py-0.5\",\n md: \"type-badge-md h-8 px-3 py-1\",\n lg: \"type-badge-lg h-10 px-4 py-1.5\",\n },\n },\n defaultVariants: {\n variant: \"solid\",\n size: \"md\",\n },\n }\n)\n\nfunction Badge({\n className,\n variant = \"solid\",\n size = \"md\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> &\n VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant, size }), className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Gift, X } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { NavigationButton } from \"./navigation-button\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Banner — the editorial gradient panel */\n/* */\n/* One variant (per the design file): a colour gradient panel with art on */\n/* the left, white copy, and a white pill CTA. Horizontal on desktop, */\n/* stacked on mobile (the \"device delta\"). */\n/* */\n/* The colour is CUSTOMISABLE: pass any CSS colour via `color` — the panel */\n/* paints it as a solid base with a fixed black fade layered on top */\n/* (transparent → 50% left-to-right), which lands on the design file's jade */\n/* panel exactly (#0AA060 → #04512E). Brand blue is the standard when no */\n/* colour is given. The panel is art, not a status surface, so it renders */\n/* identically in both themes. */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\ninterface BannerProps extends Omit<React.ComponentProps<\"div\">, \"title\" | \"onClick\"> {\n /**\n * Panel colour — any CSS colour (a game-accent primitive, a hex, a var()).\n * The gradient derives from it automatically. Defaults to the brand blue.\n */\n color?: string\n /** Title text. Required in spirit — the panel is meaningless without it. */\n title?: React.ReactNode\n /** Supporting copy under the title. */\n description?: React.ReactNode\n /**\n * Art slot — game artwork, an illustration, or an icon. Rendered in a\n * frosted square. Defaults to a Gift glyph. Pass `null` to omit.\n */\n art?: React.ReactNode | null\n /**\n * CTA — a string gets wrapped in the Banner's white pill; pass an element\n * to take over the slot entirely.\n */\n action?: React.ReactNode\n /** Click handler for a string `action` — required for the pill to do anything. */\n onAction?: () => void\n /** When provided, the close X renders and calls this on click. */\n onDismiss?: () => void\n /** aria-label for the close button. Defaults to \"Dismiss\". */\n dismissLabel?: string\n /**\n * Makes the entire panel a single click target. Mutually exclusive with\n * `action` — if both are set, the button is ignored and a dev warning logs.\n */\n onClick?: () => void\n}\n\nfunction Banner({\n color = \"var(--background-brand-default)\",\n title,\n description,\n art,\n action,\n onAction,\n onDismiss,\n dismissLabel = \"Dismiss\",\n onClick,\n className,\n style,\n ...props\n}: BannerProps) {\n if (!title && !description) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"Banner: requires at least one of `title` or `description`. Rendering null.\",\n )\n }\n return null\n }\n\n const showArt = art !== null\n const resolvedArt = art === undefined ? <Gift className=\"size-6\" /> : art\n const showCloseButton = typeof onDismiss === \"function\"\n const isClickable = typeof onClick === \"function\"\n const buttonSuppressed = isClickable && Boolean(action)\n\n if (process.env.NODE_ENV !== \"production\" && buttonSuppressed) {\n console.warn(\n \"Banner: `onClick` (clickable surface) is mutually exclusive with `action`. Ignoring the button — the whole banner is the CTA.\",\n )\n }\n const effectiveAction = isClickable ? undefined : action\n\n if (\n process.env.NODE_ENV !== \"production\" &&\n effectiveAction !== undefined &&\n effectiveAction !== null &&\n !React.isValidElement(effectiveAction) &&\n typeof onAction !== \"function\"\n ) {\n console.warn(\n \"Banner: a string `action` renders a button that does nothing without `onAction`.\",\n )\n }\n\n const interactiveProps = isClickable\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n onClick,\n onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n onClick?.()\n }\n },\n }\n : {}\n\n return (\n // The wrapper is a size container so the panel stacks whenever the BANNER\n // is narrow — not just when the viewport is (the design file's device\n // delta, made container-aware).\n <div className=\"@container w-full\">\n <div\n data-slot=\"banner\"\n data-clickable={isClickable ? \"true\" : undefined}\n className={cn(\n \"relative flex w-full flex-col items-start gap-3 overflow-hidden rounded-2xl p-4 @sm:flex-row @sm:items-center @sm:gap-4\",\n // Reserve the top-right corner for the absolute close X so copy never\n // runs underneath it (12 = 32px button + 16px breathing room).\n showCloseButton && \"pr-12\",\n isClickable &&\n \"cursor-pointer transition-opacity hover:opacity-90 active:opacity-80 outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:ring-offset-2\",\n className,\n )}\n style={{\n // Two layers, like a Figma fill stack: the consumer's solid colour at\n // the bottom, a FIXED black fade on top (transparent -> black 50%,\n // left to right). The fade never depends on the colour, so any custom\n // colour — token or not — darkens correctly with zero tuning.\n background: `linear-gradient(120deg, rgb(0 0 0 / 0%), rgb(0 0 0 / 50%)), ${color}`,\n ...style,\n }}\n {...interactiveProps}\n {...props}\n >\n {/* Art — frosted square riding the panel colour */}\n {showArt ? (\n <span\n aria-hidden\n className=\"inline-flex size-14 shrink-0 items-center justify-center overflow-hidden rounded-xl bg-[var(--primitive-white-alpha-16)] text-text-on-brand-static [&_img]:size-full [&_img]:object-cover\"\n >\n {resolvedArt}\n </span>\n ) : null}\n\n {/* Copy */}\n <div className=\"min-w-0 flex-1\">\n {title ? (\n <p className=\"type-banner-title m-0 text-text-on-brand-static\">{title}</p>\n ) : null}\n {description ? (\n <p className=\"type-banner-description m-0 mt-1 text-[var(--primitive-white-alpha-80)]\">\n {description}\n </p>\n ) : null}\n </div>\n\n {/* CTA — white pill with near-black ink; full-width when stacked */}\n {effectiveAction !== undefined && effectiveAction !== null ? (\n <div className=\"w-full shrink-0 @sm:w-auto\">{wrapAction(effectiveAction, onAction)}</div>\n ) : null}\n\n {/* Dismiss — a NavigationButton carrying the on-brand ink */}\n {showCloseButton ? (\n <NavigationButton\n type=\"button\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n onDismiss?.()\n }}\n aria-label={dismissLabel}\n className=\"absolute top-3 right-3 cursor-pointer text-text-on-brand-static opacity-70 transition-opacity hover:bg-transparent hover:opacity-100 [&_svg:not([class*='size-'])]:size-4\"\n >\n <X />\n </NavigationButton>\n ) : null}\n </div>\n </div>\n )\n}\n\n/**\n * Normalize the CTA. Elements pass through untouched; strings/numbers get\n * the system Button (primary-on-brand: white pill, brand ink) on the sm\n * rail — full-width in the stacked (mobile) layout, hugging its label at sm+.\n */\nfunction wrapAction(node: React.ReactNode, onAction?: () => void): React.ReactNode {\n if (React.isValidElement(node)) return node\n return (\n <Button\n variant=\"primary-on-brand\"\n size=\"sm\"\n className=\"w-full @sm:w-auto\"\n onClick={(e) => {\n e.stopPropagation()\n onAction?.()\n }}\n >\n {node}\n </Button>\n )\n}\n\nexport { Banner }\nexport type { BannerProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Sparkles } from \"lucide-react\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Bottom Navigation — the mobile counterpart of the desktop Sidebar */\n/* */\n/* A floating pill docked above the bottom edge, holding up to five */\n/* destinations as icon + label stacks (four maximum — three is the norm, */\n/* giving each cell and the bubble generous breathing room). */\n/* */\n/* Material (Refined Mobile spec): heavy near-solid frost — white 78% in */\n/* light, navy 72% in dark — with blur(20)+saturate(1.4) and a soft ambient */\n/* lift. That lift is the one sanctioned shadow exception: floating chrome */\n/* over scrolling content needs separation; inline components still never */\n/* carry shadows. */\n/* */\n/* Selection is a single liquid bubble that travels between destinations: */\n/* the leading edge darts ahead (200ms), the trailing edge is pulled after */\n/* on a slower spring (380ms) — the water-drop absorb. The bubble keeps an */\n/* equal 4px gap on every side (the bar's px-1 padding is the horizontal */\n/* gap), so its full-pill radius nests concentrically inside the bar's */\n/* corners. The bubble is a top-lit gloss over the brand-selected fill; the */\n/* arriving icon pops on an overshoot spring; labels never change size or */\n/* weight. */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nconst MAX_ITEMS = 4\n/** Fallbacks mirroring the motion tokens (used before styles resolve). */\nconst LEAD_MS = 200 // --motion-travel-lead\nconst TRAIL_MS = 380 // --motion-travel-trail\nconst SPRING = \"cubic-bezier(0.3, 1.25, 0.4, 1)\" // --primitive-ease-spring\n\n/** Read a duration token off the nav; falls back to the TS mirror.\n * Computed custom properties normalise to seconds (\"0.38s\"). */\nfunction readMs(styles: CSSStyleDeclaration, token: string, fallback: number) {\n const raw = styles.getPropertyValue(token).trim()\n const value = parseFloat(raw)\n if (!Number.isFinite(value)) return fallback\n return raw.endsWith(\"ms\") ? value : value * 1000\n}\n\nfunction BottomNavigation({\n className,\n children,\n ...props\n}: React.ComponentProps<\"nav\">) {\n const navRef = React.useRef<HTMLElement>(null)\n const bubbleRef = React.useRef<HTMLSpanElement>(null)\n const prevLeft = React.useRef<number | null>(null)\n\n const items = React.Children.toArray(children)\n if (process.env.NODE_ENV !== \"production\" && items.length > MAX_ITEMS) {\n console.warn(\n `BottomNavigation: ${items.length} items — a phone fits at most ${MAX_ITEMS}.`,\n )\n }\n const activeIndex = items.findIndex(\n (child) =>\n React.isValidElement<{ active?: boolean }>(child) && child.props.active,\n )\n\n // Places the bubble over the active item. left/right animate on staggered\n // timings: the edge leading the travel direction moves fast, the other is\n // dragged behind on the spring — the liquid pull.\n const measure = React.useCallback(() => {\n const nav = navRef.current\n const bubble = bubbleRef.current\n if (!nav || !bubble) return\n const target = nav.querySelectorAll<HTMLElement>(\n \"[data-slot=bottom-navigation-item]\",\n )[activeIndex]\n if (!target) {\n bubble.style.opacity = \"0\"\n prevLeft.current = null\n return\n }\n const left = target.offsetLeft\n const right = nav.clientWidth - (target.offsetLeft + target.offsetWidth)\n\n const first = prevLeft.current === null\n const movingRight = !first && left > (prevLeft.current as number)\n prevLeft.current = left\n\n if (first) {\n // First paint (and re-placement after resize): no travel animation.\n bubble.style.transition = \"none\"\n } else {\n const styles = getComputedStyle(nav)\n const lead = readMs(styles, \"--motion-travel-lead\", LEAD_MS)\n const trail = readMs(styles, \"--motion-travel-trail\", TRAIL_MS)\n const spring = styles.getPropertyValue(\"--primitive-ease-spring\").trim() || SPRING\n const leftMs = movingRight ? trail : lead\n const rightMs = movingRight ? lead : trail\n bubble.style.transition = `left ${leftMs}ms ${spring}, right ${rightMs}ms ${spring}`\n }\n bubble.style.opacity = \"1\"\n bubble.style.left = `${left}px`\n bubble.style.right = `${right}px`\n if (first) {\n requestAnimationFrame(() => {\n if (bubbleRef.current) bubbleRef.current.style.transition = \"\"\n })\n }\n }, [activeIndex])\n\n React.useLayoutEffect(() => {\n measure()\n }, [measure, items.length])\n\n const lastWidth = React.useRef<number | null>(null)\n React.useEffect(() => {\n const nav = navRef.current\n if (!nav) return\n const ro = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? nav.clientWidth\n // The observer fires once on observe — only re-place when the bar\n // actually changed size, otherwise it wipes the travel memory and the\n // first selection snaps instead of animating.\n if (lastWidth.current !== null && lastWidth.current !== width) {\n prevLeft.current = null\n measure()\n }\n lastWidth.current = width\n })\n ro.observe(nav)\n return () => ro.disconnect()\n }, [measure])\n\n return (\n <nav\n ref={navRef}\n data-slot=\"bottom-navigation\"\n className={cn(\n \"relative flex h-15 w-full items-center justify-around rounded-full border px-1\",\n \"border-(--border-chrome-default) bg-(--background-chrome-default)\",\n \"[backdrop-filter:blur(20px)_saturate(1.4)] [box-shadow:var(--shadow-chrome-default)]\",\n className,\n )}\n {...props}\n >\n <span\n ref={bubbleRef}\n aria-hidden\n data-slot=\"bottom-navigation-bubble\"\n className=\"pointer-events-none absolute inset-y-1 rounded-full opacity-0 [background:var(--background-chrome-selected)] [box-shadow:inset_0_1px_0_var(--chrome-highlight-default)]\"\n />\n {children}\n </nav>\n )\n}\n\nfunction BottomNavigationItem({\n className,\n active = false,\n asChild = false,\n children,\n ...props\n}: React.ComponentProps<\"button\"> & {\n /** Marks the current destination — the liquid bubble travels to it. */\n active?: boolean\n /** Render as the child element (e.g. a router link). */\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"button\"\n return (\n <Comp\n data-slot=\"bottom-navigation-item\"\n data-active={active || undefined}\n aria-current={active ? \"page\" : undefined}\n className={cn(\n \"type-bottom-navigation-label relative z-10 flex flex-1 cursor-pointer flex-col items-center justify-center gap-0.5 rounded-full py-1.5 text-(--text-chrome-subtle) outline-none transition-colors\",\n \"hover:text-text-prominent-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n \"data-[active]:text-(--text-chrome-selected)\",\n // Icon pop on arrival lives in styles.css (a data-active CSS rule —\n // stacked arbitrary variants can't reach descendant svgs reliably).\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5\",\n className,\n )}\n {...props}\n >\n {children}\n </Comp>\n )\n}\n\n/**\n * The optional AI circle from the Refined Mobile chrome: identical material\n * and ambient lift, circular, sits beside the bar (typically in a\n * `flex items-center gap-2.5` row). Render it or don't — that's the toggle.\n */\nfunction BottomNavigationAI({\n className,\n asChild = false,\n children,\n ...props\n}: React.ComponentProps<\"button\"> & {\n /** Render as the child element (e.g. a router link). */\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"button\"\n return (\n <Comp\n data-slot=\"bottom-navigation-ai\"\n className={cn(\n \"grid size-15 flex-none cursor-pointer place-items-center rounded-full border\",\n \"border-(--border-chrome-default) bg-(--background-chrome-default)\",\n \"[backdrop-filter:blur(20px)_saturate(1.4)] [box-shadow:var(--shadow-chrome-default)]\",\n \"text-(--text-chrome-selected) transition-transform active:scale-[0.93]\",\n \"outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5.5\",\n className,\n )}\n {...props}\n >\n {children ?? <Sparkles />}\n </Comp>\n )\n}\n\nexport { BottomNavigation, BottomNavigationItem, BottomNavigationAI }\n","import * as React from \"react\"\nimport { ChevronRight, MoreHorizontal } from \"lucide-react\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Breadcrumb({ ...props }: React.ComponentProps<\"nav\">) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<\"ol\">) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n \"type-breadcrumb flex flex-wrap items-center gap-1.5 break-words text-text-subtle-default sm:gap-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"a\"\n\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn(\"transition-colors hover:text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn(\"type-breadcrumb-page text-text-brand-selected\", className)}\n {...props}\n />\n )\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n )\n}\n\nfunction BreadcrumbEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\"flex size-8 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontal className=\"size-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n )\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button, buttonVariants } from \"./button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"secondary\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"group/calendar bg-background-primary-surface p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"relative flex flex-col gap-4 md:flex-row\",\n defaultClassNames.months\n ),\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\n nav: cn(\n // pointer-events-none lets clicks reach the caption dropdowns the\n // strip overlaps; the arrow buttons re-enable their own hits.\n \"pointer-events-none absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"pointer-events-auto size-(--cell-size) p-0 select-none aria-disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] disabled:text-text-disabled-default\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"pointer-events-auto size-(--cell-size) p-0 select-none aria-disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] disabled:text-text-disabled-default\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex h-(--cell-size) w-full items-center justify-center px-10\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"type-calendar-caption flex h-(--cell-size) w-full items-center justify-center gap-1.5\",\n defaultClassNames.dropdowns\n ),\n caption_label: cn(\n \"type-calendar-caption font-body text-text-prominent-default select-none\",\n captionLayout === \"label\"\n ? \"\"\n : \"flex h-8 items-center gap-1 rounded-full pr-1 pl-2 [&>svg]:size-3.5 [&>svg]:text-icon-subtle-default\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"type-calendar-weekday flex-1 rounded-md font-body text-text-subtle-default select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"mt-2 flex w-full\", defaultClassNames.week),\n week_number_header: cn(\n \"w-(--cell-size) select-none\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"type-calendar-weekday text-text-subtle-default select-none\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"group/day relative aspect-square h-full w-full p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-full\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-full\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-full\",\n defaultClassNames.day\n ),\n /* The range band rides `brand-selected` — the theme-aware selection\n family — not the static `brand-container`, which is one value in\n both themes and reads as a pale strip on the dark canvas. */\n range_start: cn(\n \"rounded-l-full bg-background-brand-selected\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-full bg-background-brand-selected\", defaultClassNames.range_end),\n today: cn(\n \"rounded-full data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-text-disabled-default aria-selected:text-text-disabled-default\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-text-disabled-default\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"size-4\", className)}\n {...props}\n />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />\n )\n },\n Dropdown: CalendarDropdown,\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\n/**\n * Themed replacement for the caption's native month/year <select>s: the\n * trigger is a system pill, the options open in our own scrollable popover\n * instead of the OS menu.\n */\nfunction CalendarDropdown({\n options,\n value,\n onChange,\n \"aria-label\": ariaLabel,\n}: React.ComponentProps<\"select\"> & {\n options?: { value: number; label: string; disabled?: boolean }[]\n}) {\n // Fixed trigger widths so the caption — and therefore the whole w-fit\n // panel — never resizes when the label changes (Jan vs Sep, 999 vs 2026).\n const isMonth = options?.some(({ label }) => /[^0-9]/.test(label)) ?? false\n return (\n <Select\n value={String(value)}\n onValueChange={(next) => {\n const event = {\n target: { value: next },\n } as React.ChangeEvent<HTMLSelectElement>\n onChange?.(event)\n }}\n >\n <SelectTrigger\n aria-label={ariaLabel}\n size=\"sm\"\n className={cn(\n \"type-calendar-caption h-8 justify-between gap-1 rounded-full border-border-default-default bg-background-primary-surface px-3 text-text-prominent-default\",\n isMonth ? \"w-20\" : \"w-24\",\n )}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-64 min-w-24\">\n {options?.map(({ value: v, label, disabled }) => (\n <SelectItem key={v} value={String(v)} disabled={disabled}>\n {label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"tertiary\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-today={modifiers.today || undefined}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n // Base day cell — circular, calendar's own type, prominent ink,\n // hover = the standard hover glaze.\n \"type-calendar-day flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 rounded-full leading-none font-body bg-transparent border-transparent shadow-none text-text-prominent-default hover:!bg-background-hover-default hover:text-text-prominent-default hover:no-underline hover:shadow-none group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n // Today (when not selected) — brand number inside a brand hairline\n // ring. The ring, not a heavier weight, is what makes today legible:\n // components cap at semibold 600, and 600 vs 400 doesn't read at 14px.\n \"[&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:font-semibold [&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:text-text-brand-selected [&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:border-[1.5px] [&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:border-border-brand-selected\",\n // Selected single — the same solid brand disc as a range endpoint:\n // both mean \"the date you picked\", so they must not diverge.\n \"data-[selected-single=true]:bg-background-brand-default data-[selected-single=true]:border-transparent data-[selected-single=true]:text-text-on-brand-static data-[selected-single=true]:font-semibold data-[selected-single=true]:hover:!bg-background-brand-default\",\n // Range — the two endpoints are solid brand discs (they're the values\n // the user actually picked); the days between keep the quiet\n // brand-selected band. Both ends and band are theme-aware.\n \"data-[range-start=true]:rounded-full data-[range-start=true]:bg-background-brand-default data-[range-start=true]:border-transparent data-[range-start=true]:text-text-on-brand-static data-[range-start=true]:font-semibold data-[range-start=true]:hover:!bg-background-brand-default\",\n \"data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-background-brand-selected data-[range-middle=true]:text-text-brand-selected data-[range-middle=true]:hover:!bg-background-brand-selected\",\n \"data-[range-end=true]:rounded-full data-[range-end=true]:bg-background-brand-default data-[range-end=true]:border-transparent data-[range-end=true]:text-text-on-brand-static data-[range-end=true]:font-semibold data-[range-end=true]:hover:!bg-background-brand-default\",\n \"[&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\n// .type-* classes are plain CSS, not utilities — Tailwind data-[] variants\n// can't gate them, so the trigger picks its type class here.\nconst selectTriggerType = {\n sm: \"type-select-sm\",\n md: \"type-select-md\",\n lg: \"type-select-lg\",\n} as const\n\nfunction SelectTrigger({\n className,\n size = \"md\",\n readOnly = false,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"md\" | \"lg\"\n readOnly?: boolean\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n data-readonly={readOnly ? \"\" : undefined}\n className={cn(\n selectTriggerType[size],\n \"flex w-fit items-center justify-between gap-2 rounded-xs border border-border-default-default bg-background-primary-surface text-text-prominent-default appearance-none whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-soft disabled:cursor-not-allowed disabled:text-text-disabled-default disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft data-[placeholder]:text-text-subtle-default data-[size=sm]:h-8 data-[size=sm]:px-3 data-[size=sm]:py-1 data-[size=md]:h-10 data-[size=md]:px-3 data-[size=md]:py-1 data-[size=lg]:h-12 data-[size=lg]:px-4 data-[size=lg]:py-2 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default data-[readonly]:cursor-default data-[readonly]:opacity-100\",\n className\n )}\n {...props}\n // Read-only stays focusable and announced (unlike disabled) — it just\n // never opens. Guards sit after the props spread so a consumer handler\n // can't undo them.\n aria-readonly={readOnly || undefined}\n onPointerDown={(e) => {\n if (readOnly) { e.preventDefault(); return }\n props.onPointerDown?.(e)\n }}\n onKeyDown={(e) => {\n if (readOnly && [\"Enter\", \" \", \"ArrowDown\", \"ArrowUp\"].includes(e.key)) {\n e.preventDefault()\n return\n }\n props.onKeyDown?.(e)\n }}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className={cn(\"size-4\", readOnly ? \"opacity-30\" : \"opacity-50\")} />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n // \"popper\" drops the list below the trigger, fixed in place. The Radix\n // default (\"item-aligned\") slides the list so the chosen item overlaps\n // the trigger — reads as a bug next to our other menus.\n position = \"popper\",\n align = \"start\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border border-border-default-default bg-background-primary-surface text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"type-menu-heading px-2 py-1.5 text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-8 pl-2 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[state=checked]:text-text-brand-selected data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4 text-text-brand-selected\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"pointer-events-none -mx-1 my-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Card shell — the design file's shared surface language: card surface,\n * hairline border, 18px (2xl) radius, flat (no shadow, per system rule).\n *\n * The tinted-glass family, one look per surface (same split as Button):\n * `variant=\"frosted\"` sits on page surfaces — solid brand-selected tint +\n * brand ink, no blur (there's no art underneath to frost). `frosted-on-brand`\n * is the actual frosted shell for sitting over hero/game art: white 72% +\n * blur + soft white hairline, identical in both themes. (`glass` is its\n * @deprecated alias — deleted at v1.0.) `interactive` opts into the design\n * file's desktop-only hover lift.\n */\nfunction Card({\n className,\n variant = \"default\",\n interactive = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n variant?: \"default\" | \"frosted\" | \"frosted-on-brand\" | \"glass\"\n interactive?: boolean\n}) {\n return (\n <div\n data-slot=\"card\"\n data-variant={variant}\n className={cn(\n \"flex flex-col gap-4 rounded-2xl py-4\",\n variant === \"frosted-on-brand\" || variant === \"glass\"\n ? \"border border-(--primitive-white-alpha-64) bg-(--primitive-white-alpha-80) backdrop-blur-xl text-text-static-black\"\n : variant === \"frosted\"\n ? \"bg-background-brand-selected text-text-brand-selected\"\n : \"border border-border-default-default bg-background-primary-surface text-text-prominent-default\",\n interactive &&\n \"transition-transform duration-base ease-standard sm:hover:-translate-y-0.75 motion-reduce:transition-none motion-reduce:sm:hover:translate-y-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"h6\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"body-sm text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-4\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-4 [.border-t]:pt-4\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { PaginationBar, PaginationDots } from \"./pagination\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n /* Position, so a shared indicator can render it. Carousel owns the index\n and exposes it; it does not draw its own dots — CarouselDots composes\n Pagination's indicator instead, so there is one implementation. */\n selectedIndex: number\n slideCount: number\n scrollTo: (index: number) => void\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n const [selectedIndex, setSelectedIndex] = React.useState(0)\n const [slideCount, setSlideCount] = React.useState(0)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n setSelectedIndex(api.selectedScrollSnap())\n setSlideCount(api.scrollSnapList().length)\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const scrollTo = React.useCallback((index: number) => {\n api?.scrollTo(index)\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n selectedIndex,\n slideCount,\n scrollTo,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"secondary\",\n size = \"icon-md\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"secondary\",\n size = \"icon-md\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n}\n\n/* The position indicator. Carousel supplies the index; the visual comes from\n Pagination, so there is exactly one dots implementation in the system —\n same reason Dialog composes NavigationButton instead of hand-rolling a\n close button. Pass variant=\"bar\" for the segmented form. */\nfunction CarouselDots({\n variant = \"dots\",\n ...props\n}: Omit<React.ComponentProps<typeof PaginationDots>, \"page\" | \"total\" | \"onPageChange\"> & {\n variant?: \"dots\" | \"bar\"\n}) {\n const { selectedIndex, slideCount, scrollTo } = useCarousel()\n const Indicator = variant === \"bar\" ? PaginationBar : PaginationDots\n return (\n <Indicator\n page={selectedIndex}\n total={slideCount}\n onPageChange={scrollTo}\n label=\"Carousel position\"\n {...props}\n />\n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n CarouselDots,\n}\n","import * as React from \"react\"\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n MoreHorizontalIcon,\n} from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationContent({\n className,\n ...props\n}: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean\n} & React.ComponentProps<\"a\">\n\nfunction PaginationLink({\n className,\n isActive,\n ...props\n}: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n \"type-pagination inline-flex shrink-0 items-center justify-center size-10 rounded-full font-display whitespace-nowrap transition-[color,background-color,border-color] outline-none border focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n isActive\n ? \"bg-background-brand-selected border-border-brand-selected text-text-brand-selected\"\n : \"bg-transparent border-transparent text-text-prominent-default hover:bg-background-hover-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction PaginationPrevious({\n className,\n ...props\n}: React.ComponentProps<\"a\">) {\n return (\n <Button asChild variant=\"tertiary\" size=\"icon-md\" className={cn(className)}>\n <a aria-label=\"Go to previous page\" data-slot=\"pagination-link\" {...props}>\n <ChevronLeftIcon className=\"size-5\" />\n </a>\n </Button>\n )\n}\n\nfunction PaginationNext({\n className,\n ...props\n}: React.ComponentProps<\"a\">) {\n return (\n <Button asChild variant=\"tertiary\" size=\"icon-md\" className={cn(className)}>\n <a aria-label=\"Go to next page\" data-slot=\"pagination-link\" {...props}>\n <ChevronRightIcon className=\"size-5\" />\n </a>\n </Button>\n )\n}\n\nfunction PaginationEllipsis({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-10 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n )\n}\n\n/* ──────────────────────────────────────────────────────────────────────────\n * Compact position indicators — dots and bar\n *\n * Same job as the numbered variant (which of N am I on) in a compact form,\n * for carousels, onboarding sequences and swipeable card stacks. Geometry is\n * borrowed from Progress `dots` (h-1, gap-1, the same width ladder) so the\n * two read as one system — but the semantics differ and must not be\n * conflated: Progress fills *cumulatively* (2 of 5 done), these mark a\n * *single* position (you are on 2 of 5).\n *\n * Controlled by design: the consumer owns `page`. They render <button>, not\n * the numbered variant's <a href>, because they jump within a view rather\n * than navigating to a URL.\n * ────────────────────────────────────────────────────────────────────────── */\n\ntype IndicatorSize = \"sm\" | \"md\" | \"lg\"\n\n/** Matches Progress's DOT_WIDTHS so a bar indicator and a progress meter\n * sitting on the same screen share a rhythm. */\nconst INDICATOR_WIDTHS: Record<IndicatorSize, string> = {\n sm: \"w-4\",\n md: \"w-6\",\n lg: \"w-8\",\n}\n\n/** The active dot widens into a pill rather than only changing colour, so\n * position survives without relying on hue alone. */\nconst ACTIVE_DOT_WIDTHS: Record<IndicatorSize, string> = {\n sm: \"w-4\",\n md: \"w-5\",\n lg: \"w-6\",\n}\n\nconst DOT_SIZES: Record<IndicatorSize, string> = {\n sm: \"size-1.5\",\n md: \"size-2\",\n lg: \"size-2.5\",\n}\n\ntype PaginationIndicatorProps = Omit<\n React.ComponentProps<\"nav\">,\n \"onChange\"\n> & {\n /** Zero-based current page. */\n page: number\n /** Total pages. */\n total: number\n onPageChange?: (page: number) => void\n size?: IndicatorSize\n /** Accessible name for the group. */\n label?: string\n}\n\nfunction useIndicatorPages(total: number) {\n return React.useMemo(\n () => Array.from({ length: Math.max(0, total) }, (_, i) => i),\n [total],\n )\n}\n\nfunction PaginationDots({\n className,\n page,\n total,\n onPageChange,\n size = \"md\",\n label = \"Pagination\",\n ...props\n}: PaginationIndicatorProps) {\n const pages = useIndicatorPages(total)\n return (\n <nav\n role=\"navigation\"\n aria-label={label}\n data-slot=\"pagination-dots\"\n className={cn(\"flex items-center justify-center gap-1\", className)}\n {...props}\n >\n {pages.map((i) => {\n const active = i === page\n return (\n <button\n key={i}\n type=\"button\"\n data-slot=\"pagination-dot\"\n data-active={active || undefined}\n aria-current={active ? \"page\" : undefined}\n aria-label={`Go to page ${i + 1}`}\n onClick={() => onPageChange?.(i)}\n className={cn(\n \"rounded-full outline-none transition-[width,background-color] duration-base ease-standard\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n active\n ? cn(\"h-1.5 bg-background-brand-default\", ACTIVE_DOT_WIDTHS[size])\n : cn(DOT_SIZES[size], \"bg-background-secondary-surface hover:bg-background-brand-selected\"),\n )}\n />\n )\n })}\n </nav>\n )\n}\n\nfunction PaginationBar({\n className,\n page,\n total,\n onPageChange,\n size = \"md\",\n label = \"Pagination\",\n ...props\n}: PaginationIndicatorProps) {\n const pages = useIndicatorPages(total)\n return (\n <nav\n role=\"navigation\"\n aria-label={label}\n data-slot=\"pagination-bar\"\n className={cn(\"flex items-center justify-center gap-1\", className)}\n {...props}\n >\n {pages.map((i) => {\n const active = i === page\n return (\n <button\n key={i}\n type=\"button\"\n data-slot=\"pagination-segment\"\n data-active={active || undefined}\n aria-current={active ? \"page\" : undefined}\n aria-label={`Go to page ${i + 1}`}\n onClick={() => onPageChange?.(i)}\n className={cn(\n \"h-1 rounded-full outline-none transition-colors duration-base ease-standard\",\n INDICATOR_WIDTHS[size],\n \"focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n active\n ? \"bg-background-brand-default\"\n : \"bg-background-secondary-surface hover:bg-background-brand-selected\",\n )}\n />\n )\n })}\n </nav>\n )\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n PaginationDots,\n PaginationBar,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Chip — the design file's \"one shape, four jobs\" pill. Quick amounts and\n * categories are the default look; `selected` turns solid brand (white ink);\n * `variant=\"outline\"` is the error-recovery chip (brand border + brand text,\n * e.g. \"Max 1,240.50\"). Live-status pills belong to Badge, not Chip.\n */\nconst chipVariants = cva(\n \"inline-flex w-fit items-center justify-center rounded-full font-body whitespace-nowrap transition-colors outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:pointer-events-none disabled:border disabled:border-border-default-default disabled:bg-transparent disabled:text-text-disabled-default\",\n {\n variants: {\n size: {\n md: \"type-chip-md h-10 px-4\",\n sm: \"type-chip-sm h-8 px-3\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n }\n)\n\ninterface ChipProps\n extends React.ComponentProps<\"button\">,\n VariantProps<typeof chipVariants> {\n selected?: boolean\n /** `outline` = the brand-outlined recovery chip. */\n variant?: \"default\" | \"outline\"\n}\n\nfunction Chip({ children, selected = false, variant = \"default\", size, className, disabled, ...props }: ChipProps) {\n return (\n <button\n type=\"button\"\n aria-pressed={selected}\n data-slot=\"chip\"\n data-size={size}\n data-variant={variant}\n data-selected={selected || undefined}\n disabled={disabled}\n className={cn(\n chipVariants({ size }),\n selected\n ? \"border border-transparent bg-background-brand-default text-text-on-brand-static pointer-events-none cursor-default\"\n : variant === \"outline\"\n ? \"border-[1.5px] border-border-brand-selected bg-background-primary-surface text-text-brand-selected hover:bg-background-hover-default\"\n : \"border border-border-default-default bg-background-primary-surface text-text-prominent-default hover:bg-background-secondary-surface active:bg-background-secondary-wash\",\n className\n )}\n {...props}\n >\n {children}\n </button>\n )\n}\n\nexport { Chip, chipVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon } from \"lucide-react\"\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer size-4 shrink-0 rounded-2xs border border-border-default-default bg-background-primary-surface transition-colors outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:cursor-not-allowed disabled:border-border-default-default disabled:text-text-disabled-default data-[state=checked]:border-transparent data-[state=checked]:bg-background-brand-default data-[state=checked]:text-text-on-brand-static\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"flex h-full w-full flex-col overflow-hidden rounded-2xl bg-background-primary-surface text-text-prominent-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <Command className=\"**:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-text-subtle-default [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b border-border-default-default px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 text-icon-subtle-default\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"type-menu-item flex h-10 w-full rounded-md bg-transparent py-3 outline-hidden placeholder:text-text-subtle-default disabled:cursor-not-allowed disabled:text-text-disabled-default\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"type-menu-item py-6 text-center text-text-subtle-default\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"overflow-hidden p-1 text-text-prominent-default [&_[cmdk-group-heading]]:type-menu-heading [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"-mx-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"type-menu-item relative flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:text-text-disabled-default data-[selected=true]:bg-background-hover-default data-[selected=true]:text-text-prominent-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"type-menu-heading ml-auto text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { NavigationButton } from \"./navigation-button\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-background-overlay-default data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 flex h-auto w-full max-w-[calc(100%-2rem)] flex-col translate-x-[-50%] translate-y-[-50%] gap-6 rounded-2xl border border-border-default-default bg-background-primary-surface p-6 duration-base outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <NavigationButton\n data-slot=\"dialog-close\"\n size=\"sm\"\n aria-label=\"Close\"\n className=\"absolute top-4 right-4\"\n >\n <XIcon className=\"size-4\" />\n </NavigationButton>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"secondary\" size=\"md\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"type-dialog-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"type-dialog-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { ContextMenu as ContextMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ContextMenu({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />\n}\n\nfunction ContextMenuTrigger({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {\n return (\n <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" {...props} />\n )\n}\n\nfunction ContextMenuGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {\n return (\n <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />\n )\n}\n\nfunction ContextMenuPortal({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {\n return (\n <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />\n )\n}\n\nfunction ContextMenuSub({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {\n return <ContextMenuPrimitive.Sub data-slot=\"context-menu-sub\" {...props} />\n}\n\nfunction ContextMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {\n return (\n <ContextMenuPrimitive.RadioGroup\n data-slot=\"context-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction ContextMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.SubTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[inset]:pl-8 data-[state=open]:bg-background-hover-default data-[state=open]:text-text-prominent-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </ContextMenuPrimitive.SubTrigger>\n )\n}\n\nfunction ContextMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {\n return (\n <ContextMenuPrimitive.SubContent\n data-slot=\"context-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Content\n data-slot=\"context-menu-content\"\n className={cn(\n \"z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </ContextMenuPrimitive.Portal>\n )\n}\n\nfunction ContextMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default data-[inset]:pl-8 data-[variant=destructive]:text-text-error-default data-[variant=destructive]:focus:bg-background-error-default data-[variant=destructive]:focus:text-text-error-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default data-[variant=destructive]:*:[svg]:text-text-error-default!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction ContextMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <ContextMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </ContextMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n )\n}\n\nfunction ContextMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <ContextMenuPrimitive.Label\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn(\n \"type-menu-heading px-2 py-1.5 text-text-prominent-default data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ContextMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {\n return (\n <ContextMenuPrimitive.Separator\n data-slot=\"context-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction ContextMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn(\n \"type-menu-shortcut ml-auto text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Drawer as DrawerPrimitive } from \"vaul\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Drawer({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Root>) {\n return <DrawerPrimitive.Root data-slot=\"drawer\" {...props} />\n}\n\nfunction DrawerTrigger({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {\n return <DrawerPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />\n}\n\nfunction DrawerPortal({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Portal>) {\n return <DrawerPrimitive.Portal data-slot=\"drawer-portal\" {...props} />\n}\n\nfunction DrawerClose({\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Close>) {\n return <DrawerPrimitive.Close data-slot=\"drawer-close\" {...props} />\n}\n\nfunction DrawerOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {\n return (\n <DrawerPrimitive.Overlay\n data-slot=\"drawer-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-background-overlay-default data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerContent({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Content>) {\n return (\n <DrawerPortal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DrawerPrimitive.Content\n data-slot=\"drawer-content\"\n className={cn(\n \"group/drawer-content fixed z-50 flex h-auto flex-col bg-background-primary-surface\",\n \"data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-2xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=top]:border-border-default-default\",\n \"data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-2xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=bottom]:border-border-default-default\",\n \"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:border-border-default-default data-[vaul-drawer-direction=right]:sm:max-w-sm\",\n \"data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:border-border-default-default data-[vaul-drawer-direction=left]:sm:max-w-sm\",\n className\n )}\n {...props}\n >\n <div className=\"mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full bg-border-default-default group-data-[vaul-drawer-direction=bottom]/drawer-content:block\" />\n {children}\n </DrawerPrimitive.Content>\n </DrawerPortal>\n )\n}\n\nfunction DrawerHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-header\"\n className={cn(\n \"flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DrawerFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"drawer-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4 [&>*]:w-full\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Title>) {\n return (\n <DrawerPrimitive.Title\n data-slot=\"drawer-title\"\n className={cn(\"type-drawer-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction DrawerDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DrawerPrimitive.Description>) {\n return (\n <DrawerPrimitive.Description\n data-slot=\"drawer-description\"\n className={cn(\"type-drawer-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Drawer,\n DrawerPortal,\n DrawerOverlay,\n DrawerTrigger,\n DrawerClose,\n DrawerContent,\n DrawerHeader,\n DrawerFooter,\n DrawerTitle,\n DrawerDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default data-[inset]:pl-8 data-[variant=destructive]:text-text-error-default data-[variant=destructive]:focus:bg-background-error-default data-[variant=destructive]:focus:text-text-error-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default data-[variant=destructive]:*:[svg]:text-text-error-default!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"type-menu-heading px-2 py-1.5 text-text-prominent-default data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"type-menu-shortcut ml-auto text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none focus:bg-background-hover-default focus:text-text-prominent-default data-[inset]:pl-8 data-[state=open]:bg-background-hover-default data-[state=open]:text-text-prominent-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-2xl border-dashed border-border-default-default p-6 text-center text-balance md:p-12\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(\n \"flex max-w-sm flex-col items-center gap-2 text-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"flex size-10 shrink-0 items-center justify-center rounded-lg bg-background-secondary-surface text-icon-prominent-default [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(\"type-empty-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n \"type-empty-description text-text-subtle-default [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n \"type-empty-description flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Label } from \"./label\"\nimport { Separator } from \"./separator\"\n\ntype FieldSize = \"sm\" | \"md\" | \"lg\"\n\n/**\n * Field's size cascades to the control inside it: Input (and, as they join\n * the system, other form controls) read this context and default their own\n * size to it, so `<Field size=\"sm\">` sizes the whole frame with one prop.\n * An explicit size on the control still wins.\n */\nconst FieldSizeContext = React.createContext<FieldSize>(\"md\")\n\nfunction useFieldSize() {\n return React.useContext(FieldSizeContext)\n}\n\nconst fieldLabelType: Record<FieldSize, string> = {\n sm: \"type-field-label-sm\",\n md: \"type-field-label-md\",\n lg: \"type-field-label-lg\",\n}\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 text-text-prominent-default\",\n // .type-* classes are plain CSS, not utilities — Tailwind data-[]\n // variants can't gate them, so pick the class here instead.\n variant === \"legend\" ? \"type-field-legend\" : \"type-field-legend-label\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field flex w-full data-[invalid=true]:text-text-error-default\",\n {\n variants: {\n size: {\n sm: \"gap-2\",\n md: \"gap-3\",\n lg: \"gap-3\",\n },\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n responsive: [\n \"flex-col @md/field-group:flex-row @md/field-group:items-center [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n size: \"md\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n size = \"md\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <FieldSizeContext.Provider value={size ?? \"md\"}>\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n data-size={size}\n className={cn(fieldVariants({ orientation, size }), className)}\n {...props}\n />\n </FieldSizeContext.Provider>\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n const size = useFieldSize()\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n fieldLabelType[size],\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:text-text-disabled-default\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border has-[>[data-slot=field]]:border-border-default-default [&>*]:data-[slot=field]:p-4\",\n \"has-data-[state=checked]:border-border-brand-selected has-data-[state=checked]:bg-background-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n const size = useFieldSize()\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n fieldLabelType[size],\n \"flex w-fit items-center gap-2 group-data-[disabled=true]/field:text-text-disabled-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"type-field-description text-text-subtle-default group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"type-field-description relative -my-2 h-5 group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"relative mx-auto block w-fit bg-background-primary-surface px-2 text-text-subtle-default\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors?.length) {\n return null\n }\n\n const uniqueErrors = [\n ...new Map(errors.map((error) => [error?.message, error])).values(),\n ]\n\n if (uniqueErrors?.length == 1) {\n return uniqueErrors[0]?.message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {uniqueErrors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"type-field-description text-text-error-default\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n useFieldSize,\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Label as LabelPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Label({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n // Colour is inherited on purpose: a Field marked data-invalid paints its\n // subtree error-red, and the label follows.\n \"type-label flex items-center gap-2 select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:text-text-disabled-default peer-disabled:cursor-not-allowed peer-disabled:text-text-disabled-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Separator as SeparatorPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Separator({\n className,\n orientation = \"horizontal\",\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border-default-default data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { HoverCard as HoverCardPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n )\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-2xl border border-border-default-default bg-background-primary-surface p-4 text-text-prominent-default outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n )\n}\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { useFieldSize } from \"./field\"\n\nconst inputVariants = cva(\n [\n \"w-full min-w-0 rounded-xs border font-body transition-[color,box-shadow] outline-none\",\n \"file:inline-flex file:border-0 file:bg-transparent file:font-medium\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-text-disabled-default disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))]\",\n // Read-only stays focusable and selectable (users copy codes/amounts);\n // only the surface flattens. Matched on the [readonly] attribute, not the\n // `:read-only` pseudo-class — that also matches disabled inputs, which\n // would hand disabled the read-only surface and erase the two states'\n // difference.\n \"[&[readonly]]:border-transparent [&[readonly]]:bg-background-secondary-surface\",\n \"focus-visible:ring-[3px]\",\n \"aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft\",\n ].join(\" \"),\n {\n variants: {\n // `default` is the surface treatment; `on-brand` is the sunken\n // dark-glaze treatment for brand-coloured surfaces. Both are built the\n // solid-base-plus-fixed-glaze way: on-brand's fill is a black glaze\n // over whatever brand colour the consumer painted underneath.\n variant: {\n default: [\n \"border-border-default-default bg-background-primary-surface text-text-prominent-default\",\n \"file:text-text-prominent-default\",\n \"placeholder:text-text-subtle-default\",\n \"selection:bg-background-brand-default selection:text-text-on-brand-static\",\n \"focus-visible:border-ring-focus-default focus-visible:ring-ring-focus-soft\",\n ].join(\" \"),\n \"on-brand\": [\n \"border-(--primitive-white-alpha-24) bg-(--primitive-black-alpha-32) text-text-on-brand-static\",\n \"file:text-text-on-brand-static\",\n \"placeholder:text-text-on-brand-subtle-static\",\n \"selection:bg-background-static-white selection:text-text-brand-container-static\",\n \"focus-visible:border-background-static-white focus-visible:ring-(--primitive-white-alpha-40)\",\n ].join(\" \"),\n /* @deprecated alias — renamed to `on-brand`. Deleted at v1.0. */\n inverse: [\n \"border-(--primitive-white-alpha-24) bg-(--primitive-black-alpha-32) text-text-on-brand-static\",\n \"file:text-text-on-brand-static\",\n \"placeholder:text-text-on-brand-subtle-static\",\n \"selection:bg-background-static-white selection:text-text-brand-container-static\",\n \"focus-visible:border-background-static-white focus-visible:ring-(--primitive-white-alpha-40)\",\n ].join(\" \"),\n },\n size: {\n sm: \"type-input-sm h-8 px-3 py-1 file:h-6 file:text-xs\",\n md: \"type-input-md h-10 px-3 py-1 file:h-7 file:text-sm\",\n lg: \"type-input-lg h-12 px-4 py-2 file:h-8 file:text-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nfunction Input({\n className,\n type,\n variant = \"default\",\n size,\n ...props\n}: Omit<React.ComponentProps<\"input\">, \"size\"> & VariantProps<typeof inputVariants>) {\n // Inside a Field, the field's size prop sets the default; an explicit\n // size on the Input still wins.\n const fieldSize = useFieldSize()\n const resolvedSize = size ?? fieldSize\n return (\n <input\n type={type}\n data-slot=\"input\"\n data-variant={variant}\n data-size={resolvedSize}\n className={cn(inputVariants({ variant, size: resolvedSize }), className)}\n {...props}\n />\n )\n}\n\nexport { Input, inputVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { useFieldSize } from \"./field\"\nimport { Input } from \"./input\"\nimport { Textarea } from \"./textarea\"\n\ntype InputGroupSize = \"sm\" | \"md\" | \"lg\"\ntype InputGroupVariant = \"default\" | \"on-brand\" | \"inverse\"\n\nconst InputGroupSizeContext = React.createContext<InputGroupSize>(\"md\")\nconst InputGroupVariantContext =\n React.createContext<InputGroupVariant>(\"default\")\n\nconst inputGroupVariants = cva(\n [\n \"group/input-group relative flex w-full items-center rounded-xs border\",\n \"transition-[color,box-shadow] outline-none min-w-0 has-[>textarea]:h-auto\",\n // Reduce input padding only on the side an addon is attached to; the\n // opposite side keeps the natural Input padding (pl-3 / pr-3 = 12 px).\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n // Focus ring (size; colour comes from the variant).\n \"has-[[data-slot=input-group-control]:focus-visible]:ring-[3px]\",\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:border-border-error-default has-[[data-slot][aria-invalid=true]]:ring-ring-error-soft\",\n ].join(\" \"),\n {\n variants: {\n // `default` is the surface treatment; `on-brand` is the sunken\n // black-glaze treatment for brand-coloured surfaces (mirrors `Input`).\n variant: {\n default: [\n \"border-border-default-default bg-background-primary-surface\",\n \"has-[[data-slot=input-group-control]:focus-visible]:border-ring-focus-default has-[[data-slot=input-group-control]:focus-visible]:ring-ring-focus-soft\",\n ].join(\" \"),\n \"on-brand\": [\n \"border-(--primitive-white-alpha-24) bg-(--primitive-black-alpha-32)\",\n \"has-[[data-slot=input-group-control]:focus-visible]:border-background-static-white has-[[data-slot=input-group-control]:focus-visible]:ring-(--primitive-white-alpha-40)\",\n ].join(\" \"),\n /* @deprecated alias — renamed to `on-brand`. Deleted at v1.0. */\n inverse: [\n \"border-(--primitive-white-alpha-24) bg-(--primitive-black-alpha-32)\",\n \"has-[[data-slot=input-group-control]:focus-visible]:border-background-static-white has-[[data-slot=input-group-control]:focus-visible]:ring-(--primitive-white-alpha-40)\",\n ].join(\" \"),\n },\n size: {\n sm: \"h-8\",\n md: \"h-10\",\n lg: \"h-12\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nfunction InputGroup({\n className,\n variant = \"default\",\n size,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupVariants>) {\n // Inside a Field, the field's size prop sets the default (same cascade as\n // Input); an explicit size on the group still wins.\n const fieldSize = useFieldSize()\n const resolvedSize = (size ?? fieldSize) as InputGroupSize\n return (\n <InputGroupVariantContext.Provider\n value={variant as InputGroupVariant}\n >\n <InputGroupSizeContext.Provider value={resolvedSize}>\n <div\n data-slot=\"input-group\"\n data-variant={variant}\n data-size={resolvedSize}\n role=\"group\"\n className={cn(inputGroupVariants({ variant, size: resolvedSize }), className)}\n {...props}\n />\n </InputGroupSizeContext.Provider>\n </InputGroupVariantContext.Provider>\n )\n}\n\nconst inputGroupAddonVariants = cva(\n [\n \"flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-text-subtle-default select-none\",\n // Swap addon text/icon colour when inside an on-brand group. On brand the\n // ink ladder inverts — white down through the alpha rungs — so this is the\n // semantic subtle rung, not a hand-rolled primitive.\n \"group-data-[variant=on-brand]/input-group:text-text-on-brand-subtle-static\",\n \"group-data-[variant=inverse]/input-group:text-text-on-brand-subtle-static\",\n \"group-data-[disabled=true]/input-group:has-disabled:text-text-disabled-default\",\n // …but on brand the neutral disabled ink has no contrast, so the on-brand\n // rung wins there.\n \"group-data-[variant=on-brand]/input-group:group-data-[disabled=true]/input-group:has-disabled:text-text-on-brand-disabled-default\",\n \"[&>kbd]:rounded-[calc(var(--radius)-5px)]\",\n // Text size inherits the group's --input-* ladder (set on the group in CSS).\n \"group-data-[size=sm]/input-group:py-1\",\n \"group-data-[size=lg]/input-group:py-2\",\n // Default icon size (overridden by size variants below).\n \"[&>svg:not([class*='size-'])]:size-4\",\n \"group-data-[size=sm]/input-group:[&>svg:not([class*='size-'])]:size-3.5\",\n ].join(\" \"),\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3\",\n \"block-end\":\n \"order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n // Pills inside the field — real Buttons at `sm` type (14/semibold), with\n // heights compressed to fit the frame. Icon variants are circles.\n \"flex items-center gap-2 shadow-none\",\n {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-full px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"h-8 gap-1.5 rounded-full px-3 has-[>svg]:px-2.5\",\n \"icon-xs\": \"size-6 rounded-full p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 rounded-full p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"secondary\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n size=\"sm\"\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"flex items-center gap-2 text-text-subtle-default\",\n // Swap text/icon colour when inside an on-brand group — the on-brand\n // subtle rung, not a hand-rolled primitive.\n \"group-data-[variant=on-brand]/input-group:text-text-on-brand-subtle-static\",\n \"group-data-[variant=inverse]/input-group:text-text-on-brand-subtle-static\",\n // Text size inherits the group's --input-* ladder; icons track it.\n \"group-data-[size=sm]/input-group:[&_svg:not([class*='size-'])]:size-3.5\",\n \"group-data-[size=md]/input-group:[&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[size=lg]/input-group:[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg]:pointer-events-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n size: sizeProp,\n variant: variantProp,\n ...props\n}: Omit<React.ComponentProps<\"input\">, \"size\"> & {\n size?: InputGroupSize\n variant?: InputGroupVariant\n}) {\n const groupSize = React.useContext(InputGroupSizeContext)\n const groupVariant = React.useContext(InputGroupVariantContext)\n const size = sizeProp ?? groupSize\n const variant = variantProp ?? groupVariant\n return (\n <Input\n data-slot=\"input-group-control\"\n size={size}\n variant={variant}\n className={cn(\n \"h-full flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"type-textarea flex field-sizing-content min-h-16 w-full rounded-xs border border-border-default-default bg-background-primary-surface px-3 py-2 text-text-prominent-default font-body transition-[color,box-shadow] outline-none placeholder:text-text-subtle-default selection:bg-background-brand-default selection:text-text-on-brand-static focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-soft disabled:cursor-not-allowed disabled:text-text-disabled-default disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { OTPInput, OTPInputContext } from \"input-otp\"\nimport { MinusIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:text-text-disabled-default\",\n containerClassName\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n )\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext)\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {}\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"type-input-otp relative flex size-12 items-center justify-center border border-border-default-default bg-background-primary-surface font-body text-text-prominent-default transition-[color,box-shadow] outline-none first:rounded-l-xs last:rounded-r-xs aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft data-[active=true]:z-10 data-[active=true]:border-ring-focus-default data-[active=true]:ring-[3px] data-[active=true]:ring-ring-focus-soft data-[active=true]:aria-invalid:border-border-error-default data-[active=true]:aria-invalid:ring-ring-error-soft\",\n className\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"h-4 w-px animate-caret-blink bg-text-prominent-default duration-1000\" />\n </div>\n )}\n </div>\n )\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <MinusIcon />\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Separator } from \"./separator\"\n\nfunction ItemGroup({\n className,\n divider = true,\n ...props\n}: React.ComponentProps<\"div\"> & {\n /**\n * Auto-divide consecutive default-variant `Item`s with a bottom border\n * (`border-default-default`). The last item's bottom border is suppressed,\n * and non-default variants (`outline`, `muted`) are left untouched so\n * they don't double up with their own borders. Defaults to `true`; pass\n * `false` to opt out when the design wants flush items or uses\n * `<ItemSeparator />` manually.\n */\n divider?: boolean\n}) {\n return (\n <div\n role=\"list\"\n data-slot=\"item-group\"\n data-divider={divider ? \"true\" : undefined}\n className={cn(\n \"group/item-group flex flex-col\",\n // Divider mode: 4 px gap between items + a 1 px line drawn via\n // ::after on each non-last default item, sitting in that gap.\n // Item itself stays border-free — the line is a separate visual\n // element rather than an outline on the item.\n divider && [\n \"gap-1\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:relative\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:content-['']\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:absolute\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:-bottom-0.5\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:inset-x-4\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:h-px\",\n \"[&>[data-slot=item][data-variant=default]:not(:last-child)]:after:bg-border-default-default\",\n ],\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ItemSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"item-separator\"\n orientation=\"horizontal\"\n className={cn(\"my-0\", className)}\n {...props}\n />\n )\n}\n\nconst itemVariants = cva(\n \"group/item type-item-description flex flex-wrap items-center rounded-md border border-transparent transition-colors duration-instant outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong [a]:transition-colors [a]:hover:bg-background-hover-default\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-border-default-default text-text-prominent-default hover:bg-background-hover-default\",\n muted: \"bg-background-secondary-surface\",\n },\n size: {\n default: \"gap-4 p-4\",\n sm: \"gap-2.5 px-4 py-3\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Item({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> &\n VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"div\"\n return (\n <Comp\n data-slot=\"item\"\n data-variant={variant}\n data-size={size}\n className={cn(itemVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nconst itemMediaVariants = cva(\n \"flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"size-8 rounded-full border border-border-default-default bg-background-secondary-surface text-icon-prominent-default [&_svg:not([class*='size-'])]:size-4\",\n image:\n \"size-10 overflow-hidden rounded-full [&_img]:size-full [&_img]:object-cover\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction ItemMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof itemMediaVariants>) {\n return (\n <div\n data-slot=\"item-media\"\n data-variant={variant}\n className={cn(itemMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction ItemContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-content\"\n className={cn(\n \"flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-title\"\n className={cn(\n \"type-item-title flex w-fit items-center gap-2 text-text-prominent-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"item-description\"\n className={cn(\n \"type-item-description line-clamp-2 text-balance text-text-subtle-default\",\n \"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemActions({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-actions\"\n className={cn(\"flex items-center gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction ItemHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-header\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ItemFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-footer\"\n className={cn(\n \"flex basis-full items-center justify-between gap-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Item,\n ItemMedia,\n ItemContent,\n ItemActions,\n ItemGroup,\n ItemSeparator,\n ItemTitle,\n ItemDescription,\n ItemHeader,\n ItemFooter,\n}\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nconst linkVariants = cva(\n [\n \"inline-flex shrink-0 items-center gap-1.5 whitespace-nowrap transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong active:opacity-60 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:inline font-display normal-case\",\n // Quiet at rest, the underline arrives as hover feedback.\n \"hover:underline decoration-2 underline-offset-4\",\n // Arrow nudge — a trailing icon slides right on hover.\n \"[&_svg]:transition-transform hover:[&>svg:last-child]:translate-x-0.5\",\n ].join(\" \"),\n {\n variants: {\n size: {\n lg: \"type-link-lg [&_svg:not([class*='size-'])]:size-4\",\n md: \"type-link-md [&_svg:not([class*='size-'])]:size-4\",\n sm: \"type-link-sm [&_svg:not([class*='size-'])]:size-3.5\",\n },\n // on-brand = static white for links on brand-coloured surfaces\n // (same family naming as Button/Input).\n tone: {\n brand: \"text-text-brand-selected hover:text-text-brand-hover\",\n \"on-brand\":\n \"text-text-on-brand-static hover:text-(--primitive-white-alpha-80)\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n tone: \"brand\",\n },\n }\n)\n\nfunction Link({\n className,\n size = \"lg\",\n tone = \"brand\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"a\"> &\n VariantProps<typeof linkVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : \"a\"\n\n return (\n <Comp\n data-slot=\"link\"\n data-size={size}\n data-tone={tone}\n className={cn(linkVariants({ size, tone, className }))}\n {...props}\n />\n )\n}\n\nexport { Link, linkVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { Menubar as MenubarPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"flex h-10 items-center gap-1 rounded-lg border border-border-default-default bg-background-primary-surface p-1\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n )\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"flex items-center type-menu-trigger rounded-md px-2 py-1 outline-hidden select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[state=open]:bg-background-hover-default data-[state=open]:text-text-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </MenubarPortal>\n )\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-hidden select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default data-[inset]:pl-8 data-[variant=destructive]:text-text-error-default data-[variant=destructive]:focus:bg-background-error-default data-[variant=destructive]:focus:text-text-error-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default data-[variant=destructive]:*:[svg]:text-text-error-default!\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n )\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 type-menu-item rounded-md py-1.5 pr-2 pl-8 outline-hidden select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[disabled]:pointer-events-none data-[disabled]:text-text-disabled-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n )\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"type-menu-heading px-2 py-1.5 text-text-prominent-default data-[inset]:pl-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"type-menu-shortcut ml-auto text-text-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 type-menu-item rounded-md px-2 py-1.5 outline-none select-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default data-[inset]:pl-8 data-[state=open]:bg-background-hover-default data-[state=open]:text-text-prominent-default [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto\" />\n </MenubarPrimitive.SubTrigger>\n )\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface p-1 text-text-prominent-default data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Menubar,\n MenubarPortal,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarGroup,\n MenubarSeparator,\n MenubarLabel,\n MenubarItem,\n MenubarShortcut,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSub,\n MenubarSubTrigger,\n MenubarSubContent,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { useFieldSize } from \"./field\"\n\ntype NativeSelectSize = \"sm\" | \"md\" | \"lg\"\n\nconst sizeClasses: Record<NativeSelectSize, string> = {\n sm: \"type-native-select-sm h-8 py-1\",\n md: \"type-native-select-md h-10 py-2\",\n lg: \"type-native-select-lg h-12 py-2 px-4 pr-10\",\n}\n\nfunction NativeSelect({\n className,\n size,\n ...props\n}: Omit<React.ComponentProps<\"select\">, \"size\"> & {\n /** `\"default\"` is a deprecated alias for `\"md\"` — deleted at v1.0. */\n size?: NativeSelectSize | \"default\"\n}) {\n // Inside a Field, the field's size prop sets the default (same cascade as\n // Input); an explicit size on the select still wins.\n const fieldSize = useFieldSize()\n const resolvedSize: NativeSelectSize =\n size === \"default\" || size == null ? (size == null ? fieldSize : \"md\") : size\n return (\n <div\n className=\"group/native-select relative w-fit has-[select:disabled]:text-text-disabled-default\"\n data-slot=\"native-select-wrapper\"\n >\n <select\n data-slot=\"native-select\"\n data-size={resolvedSize}\n className={cn(\n \"w-full min-w-0 appearance-none rounded-xs border border-border-default-default bg-background-primary-surface px-3 pr-9 text-text-prominent-default transition-[color,box-shadow] outline-none selection:bg-background-brand-default selection:text-text-on-brand-static disabled:pointer-events-none disabled:cursor-not-allowed disabled:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))]\",\n \"focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-soft\",\n sizeClasses[resolvedSize],\n className\n )}\n {...props}\n />\n <ChevronDownIcon\n className=\"pointer-events-none absolute top-1/2 right-3.5 size-4 -translate-y-1/2 text-icon-subtle-default select-none\"\n aria-hidden=\"true\"\n data-slot=\"native-select-icon\"\n />\n </div>\n )\n}\n\nfunction NativeSelectOption({ ...props }: React.ComponentProps<\"option\">) {\n return <option data-slot=\"native-select-option\" {...props} />\n}\n\nfunction NativeSelectOptGroup({\n className,\n ...props\n}: React.ComponentProps<\"optgroup\">) {\n return (\n <optgroup\n data-slot=\"native-select-optgroup\"\n className={cn(className)}\n {...props}\n />\n )\n}\n\nexport { NativeSelect, NativeSelectOptGroup, NativeSelectOption }\n","import * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDownIcon } from \"lucide-react\"\nimport { NavigationMenu as NavigationMenuPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction NavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n viewport?: boolean\n}) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n className={cn(\n \"group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\",\n className\n )}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n )\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn(\n \"group flex flex-1 list-none items-center justify-center gap-1\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot=\"navigation-menu-item\"\n className={cn(\"relative\", className)}\n {...props}\n />\n )\n}\n\nconst navigationMenuTriggerStyle = cva(\n \"group type-menu-trigger inline-flex h-10 w-max items-center justify-center rounded-md bg-background-primary-surface px-4 py-2 transition-[color,box-shadow] outline-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:outline-1 disabled:pointer-events-none disabled:text-text-disabled-default data-[state=open]:bg-background-hover-default data-[state=open]:text-text-prominent-default data-[state=open]:hover:bg-background-hover-default data-[state=open]:focus:bg-background-hover-default\"\n)\n\nfunction NavigationMenuTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), \"group\", className)}\n {...props}\n >\n {children}{\" \"}\n <ChevronDownIcon\n className=\"relative top-[1px] ml-1 size-3 transition duration-slow group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n )\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n \"top-0 left-0 w-full p-2 pr-2.5 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out md:absolute md:w-auto\",\n \"group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:border-border-default-default group-data-[viewport=false]/navigation-menu:bg-background-primary-surface group-data-[viewport=false]/navigation-menu:text-text-prominent-default group-data-[viewport=false]/navigation-menu:duration-base **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div\n className={cn(\n \"absolute top-full left-0 isolate z-50 flex justify-center\"\n )}\n >\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n \"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-lg border border-border-default-default bg-background-primary-surface text-text-prominent-default data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction NavigationMenuLink({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"type-menu-item flex flex-col gap-1 rounded-md p-2 transition-all outline-none hover:bg-background-hover-default hover:text-text-prominent-default focus:bg-background-hover-default focus:text-text-prominent-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:outline-1 data-[active=true]:bg-background-brand-selected data-[active=true]:text-text-brand-selected data-[active=true]:hover:bg-background-brand-selected data-[active=true]:focus:bg-background-brand-selected [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-icon-subtle-default\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n \"top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in\",\n className\n )}\n {...props}\n >\n <div className=\"relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border-default-default\" />\n </NavigationMenuPrimitive.Indicator>\n )\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Delete } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Numpad — the mobile amount-entry tray */\n/* */\n/* A bare 3×4 digit grid, no key backgrounds — only the press glaze marks a */\n/* touch (per the design file). Controlled: the component emits keys and the */\n/* consumer owns the amount string. Long-pressing backspace clears it. */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nconst LONG_PRESS_MS = 600\n\ntype NumpadKey =\n | \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\"\n | \".\" | \"backspace\"\n\ninterface NumpadProps\n extends Omit<React.ComponentProps<\"div\">, \"onKeyDown\" | \"onKeyPress\"> {\n /** Fired for every tap: a digit, \".\", or \"backspace\". */\n onKeyPress?: (key: NumpadKey) => void\n /** Fired when backspace is long-pressed (~600ms) — clear the amount. */\n onClear?: () => void\n /** Hide the \".\" key for integer-only entry. */\n decimal?: boolean\n disabled?: boolean\n}\n\nfunction Numpad({\n className,\n onKeyPress,\n onClear,\n decimal = true,\n disabled = false,\n ...props\n}: NumpadProps) {\n // Long-press bookkeeping for the backspace key: when the hold timer fires\n // we clear and swallow the tap that would otherwise land on release.\n const holdTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const longPressFired = React.useRef(false)\n\n const startHold = () => {\n longPressFired.current = false\n holdTimer.current = setTimeout(() => {\n longPressFired.current = true\n onClear?.()\n }, LONG_PRESS_MS)\n }\n const cancelHold = () => {\n if (holdTimer.current) clearTimeout(holdTimer.current)\n holdTimer.current = null\n }\n React.useEffect(() => cancelHold, [])\n\n const keys: (NumpadKey | null)[] = [\n \"1\", \"2\", \"3\",\n \"4\", \"5\", \"6\",\n \"7\", \"8\", \"9\",\n decimal ? \".\" : null, \"0\", \"backspace\",\n ]\n\n return (\n <div\n data-slot=\"numpad\"\n role=\"group\"\n aria-label=\"Number pad\"\n className={cn(\n \"grid w-full grid-cols-3 gap-1\",\n disabled && \"pointer-events-none [background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] text-text-disabled-default\",\n className,\n )}\n {...props}\n >\n {keys.map((key, i) =>\n key === null ? (\n <span key={`empty-${i}`} aria-hidden />\n ) : (\n <button\n key={key}\n type=\"button\"\n data-slot=\"numpad-key\"\n data-key={key}\n disabled={disabled}\n aria-label={key === \"backspace\" ? \"Backspace — hold to clear\" : key}\n className={cn(\n \"type-numpad flex h-12 cursor-pointer items-center justify-center rounded-lg text-text-prominent-default outline-none transition-colors select-none\",\n \"hover:bg-background-hover-default active:bg-background-pressed-default\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n key === \"backspace\" && \"text-icon-subtle-default\",\n )}\n onPointerDown={key === \"backspace\" ? startHold : undefined}\n onPointerUp={key === \"backspace\" ? cancelHold : undefined}\n onPointerLeave={key === \"backspace\" ? cancelHold : undefined}\n onContextMenu={\n key === \"backspace\" ? (e) => e.preventDefault() : undefined\n }\n onClick={() => {\n if (key === \"backspace\" && longPressFired.current) {\n longPressFired.current = false\n return\n }\n onKeyPress?.(key)\n }}\n >\n {key === \"backspace\" ? <Delete className=\"size-5.5\" /> : key}\n </button>\n ),\n )}\n </div>\n )\n}\n\nexport { Numpad }\nexport type { NumpadKey, NumpadProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-2xl border border-border-default-default bg-background-primary-surface p-4 text-text-prominent-default outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"type-popover-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"type-popover-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Progress as ProgressPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────────\n Progress — determinate progress in the design file's four shapes\n\n `bar` (default) — the linear track, three heights; add `label` /\n `valueLabel` for the setup-meter row. `dots` — pill segments filled in\n order. `ring` — the circular arc with optional centred content (the\n countdown number); `size=\"xl\"` is the 112px avatar-ring geometry that\n Profile Photo's verification ring uses.\n\n Any variant can also self-run: pass `timer` (ms) and `direction` and the\n value animates smoothly — `down` is a countdown drain, `up` a countup\n fill. How it's driven stays the consumer's choice: `value` for real\n progress, `timer` for time.\n\n One track spec throughout: rounded-full, secondary-surface track (ring\n uses the hairline), solid brand fill.\n ───────────────────────────────────────────────────────────────────────── */\n\ntype ProgressVariant = \"bar\" | \"dots\" | \"ring\"\ntype ProgressBarSize = \"sm\" | \"md\" | \"lg\"\ntype ProgressRingSize = \"sm\" | \"md\" | \"lg\" | \"xl\"\n\nconst BAR_HEIGHTS: Record<ProgressBarSize, string> = {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n}\n\nconst DOT_WIDTHS: Record<ProgressBarSize, string> = {\n sm: \"w-4\",\n md: \"w-6\",\n lg: \"w-8\",\n}\n\n/* Ring geometry: box, radius, stroke — xl mirrors ProfilePhoto's\n verification ring (112 / r52 / 7). */\nconst RINGS: Record<ProgressRingSize, { box: number; r: number; stroke: number }> = {\n sm: { box: 24, r: 11, stroke: 2 },\n md: { box: 32, r: 15, stroke: 2 },\n lg: { box: 48, r: 22, stroke: 3 },\n xl: { box: 112, r: 52, stroke: 7 },\n}\n\ninterface ProgressProps\n extends Omit<React.ComponentProps<typeof ProgressPrimitive.Root>, \"children\"> {\n variant?: ProgressVariant\n /** bar/dots: sm | md | lg · ring: sm | md | lg | xl */\n size?: ProgressBarSize | ProgressRingSize\n /** bar only — the setup-meter row above the track. */\n label?: React.ReactNode\n /** bar only — right side of the meter row (e.g. \"2 of 5\"). */\n valueLabel?: React.ReactNode\n /** dots only — number of segments. */\n segments?: number\n /**\n * Self-running timer in ms — drives the value smoothly instead of `value`\n * (countdown drains, countup fills). Remount (change `key`) to restart.\n */\n timer?: number\n /** Timer direction: `down` drains 100 → 0, `up` fills 0 → 100. */\n direction?: \"down\" | \"up\"\n /** Fires once when the timer finishes. */\n onTimerEnd?: () => void\n /**\n * ring only — centred content (e.g. the countdown number). Pass a function\n * to render from the live value: `(pct) => Math.ceil((pct / 100) * 5)`.\n */\n children?: React.ReactNode | ((pct: number) => React.ReactNode)\n}\n\nfunction Progress({\n className,\n value,\n variant = \"bar\",\n size = \"md\",\n label,\n valueLabel,\n segments = 5,\n timer,\n direction = \"down\",\n onTimerEnd,\n children,\n ...props\n}: ProgressProps) {\n const [timerPct, setTimerPct] = React.useState<number | null>(\n timer != null ? (direction === \"up\" ? 0 : 100) : null,\n )\n const endedRef = React.useRef(false)\n\n // Timer mode: one rAF loop drives the value linearly over `timer` ms.\n // The value prop is ignored while it runs; everything else renders the\n // same — countdown, countup and plain progress share one geometry.\n React.useEffect(() => {\n if (timer == null) {\n setTimerPct(null)\n return\n }\n endedRef.current = false\n const start = performance.now()\n let raf = 0\n const frame = (now: number) => {\n const p = Math.min(((now - start) / timer) * 100, 100)\n setTimerPct(direction === \"up\" ? p : 100 - p)\n if (p < 100) {\n raf = requestAnimationFrame(frame)\n } else if (!endedRef.current) {\n endedRef.current = true\n onTimerEnd?.()\n }\n }\n raf = requestAnimationFrame(frame)\n return () => cancelAnimationFrame(raf)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [timer, direction])\n\n const timed = timerPct != null\n const pct = timed ? timerPct : Math.min(Math.max(value ?? 0, 0), 100)\n const content = typeof children === \"function\" ? children(pct) : children\n\n if (variant === \"dots\") {\n const filled = Math.round((pct / 100) * segments)\n return (\n <div\n data-slot=\"progress\"\n data-variant=\"dots\"\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={pct}\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n >\n {Array.from({ length: segments }, (_, i) => (\n <span\n key={i}\n data-slot=\"progress-dot\"\n data-filled={i < filled || undefined}\n className={cn(\n \"h-1 rounded-full\",\n DOT_WIDTHS[(size as ProgressBarSize) in BAR_HEIGHTS ? (size as ProgressBarSize) : \"md\"],\n i < filled\n ? \"bg-background-brand-default\"\n : \"bg-background-secondary-surface\",\n )}\n />\n ))}\n </div>\n )\n }\n\n if (variant === \"ring\") {\n const { box, r, stroke } = RINGS[(size as ProgressRingSize) in RINGS ? (size as ProgressRingSize) : \"md\"]\n const circumference = 2 * Math.PI * r\n return (\n <div\n data-slot=\"progress\"\n data-variant=\"ring\"\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={pct}\n className={cn(\"relative inline-grid place-items-center\", className)}\n style={{ width: box, height: box }}\n {...props}\n >\n <svg\n viewBox={`0 0 ${box} ${box}`}\n className=\"absolute inset-0 -rotate-90\"\n aria-hidden\n >\n <circle\n cx={box / 2}\n cy={box / 2}\n r={r}\n fill=\"none\"\n className=\"stroke-border-default-default\"\n strokeWidth={stroke}\n />\n {/* At 0 the arc is not painted at all — a zero-length dash with\n round caps would otherwise leave a stray dot at 12 o'clock. */}\n {pct > 0 && (\n <circle\n data-slot=\"progress-ring-fill\"\n cx={box / 2}\n cy={box / 2}\n r={r}\n fill=\"none\"\n className={cn(\n \"stroke-background-brand-default\",\n !timed && \"transition-[stroke-dashoffset] duration-slow ease-linear\",\n )}\n strokeWidth={stroke}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={circumference * (1 - pct / 100)}\n />\n )}\n </svg>\n {content != null && (\n <span className=\"type-progress-value relative text-text-prominent-default\">\n {content}\n </span>\n )}\n </div>\n )\n }\n\n const bar = (\n <ProgressPrimitive.Root\n data-slot=\"progress\"\n data-variant=\"bar\"\n value={pct}\n className={cn(\n // One track spec, shared with Slider: rounded-full, secondary\n // surface, solid brand fill.\n \"relative w-full overflow-hidden rounded-full bg-background-secondary-surface\",\n BAR_HEIGHTS[(size as ProgressBarSize) in BAR_HEIGHTS ? (size as ProgressBarSize) : \"md\"],\n label == null && valueLabel == null && className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(\n \"h-full w-full flex-1 rounded-full bg-background-brand-default\",\n !timed && \"transition-transform duration-slow ease-linear\",\n )}\n style={{ transform: `translateX(-${100 - pct}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n\n if (label == null && valueLabel == null) return bar\n\n return (\n <div data-slot=\"progress-meter\" className={cn(\"flex w-full flex-col gap-1.5\", className)}>\n <div className=\"flex items-baseline justify-between gap-3\">\n {label != null && (\n <span className=\"type-progress-label text-text-prominent-default\">{label}</span>\n )}\n {valueLabel != null && (\n <span className=\"type-progress-label ml-auto text-text-subtle-default tabular-nums\">\n {valueLabel}\n </span>\n )}\n </div>\n {bar}\n </div>\n )\n}\n\nexport { Progress }\nexport type { ProgressProps, ProgressVariant, ProgressBarSize, ProgressRingSize }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Camera, User } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Geometry */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n/**\n * The composite is a fixed 112px: a 96px photo with a 5px ring sitting flush to\n * the outer edge, leaving a 3px gap between photo and ring.\n *\n * The ring is drawn as an SVG circle whose stroke straddles its path, so the\n * path radius is inset by half the stroke to keep the ring inside the box.\n */\nconst BOX = 112\nconst PHOTO = 96\nconst STROKE = 5\nconst RADIUS = BOX / 2 - STROKE / 2 // 53.5\nconst CIRCUMFERENCE = 2 * Math.PI * RADIUS\nconst INSET = (BOX - PHOTO) / 2 // 8\n\nexport interface ProfilePhotoProps extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n /** Photo URL. Omit to show the placeholder glyph. */\n src?: string\n /** Alt text for the photo. Ignored when no `src` is given. */\n alt?: string\n /** Verification progress, 0–100. Drives the ring. */\n progress?: number\n /**\n * Fires when the camera button is pressed. Omit to hide the button entirely —\n * use that for read-only contexts where the viewer can't change the photo.\n */\n onPhotoChange?: () => void\n /** aria-label for the camera button. */\n photoChangeLabel?: string\n /**\n * Status slot, rendered overlapping the bottom edge. Pass a `Badge` — the\n * component positions it but does not style its content.\n */\n status?: React.ReactNode\n}\n\n/**\n * Profile photo with a verification progress ring.\n *\n * Distinct from `Avatar`: that is a 24–48px identity chip for lists and nav,\n * whereas this is a page-level element carrying progress, a photo-change\n * affordance, and a status badge. The ring animates between values as the\n * player completes verification steps, and starts and ends at 6 o'clock so its\n * seam sits behind the status badge.\n */\nfunction ProfilePhoto({\n src,\n alt = \"\",\n progress = 0,\n onPhotoChange,\n photoChangeLabel = \"Change photo\",\n status,\n className,\n ...props\n}: ProfilePhotoProps) {\n const pct = Math.min(100, Math.max(0, progress))\n const complete = pct >= 100\n\n return (\n <div\n data-slot=\"profile-photo\"\n data-progress={pct}\n data-complete={complete || undefined}\n className={cn(\"relative shrink-0\", className)}\n style={{ width: BOX, height: BOX }}\n {...props}\n >\n {/* rotate-90 moves the circle's start point from 3 to 6 o'clock, so the\n arc opens and closes behind the status badge while still travelling\n clockwise. */}\n <svg\n viewBox={`0 0 ${BOX} ${BOX}`}\n aria-hidden=\"true\"\n className=\"absolute inset-0 size-full rotate-90\"\n >\n <circle\n cx={BOX / 2}\n cy={BOX / 2}\n r={RADIUS}\n fill=\"none\"\n stroke=\"var(--border-default-default)\"\n strokeWidth={STROKE}\n />\n <circle\n data-slot=\"profile-photo-ring\"\n cx={BOX / 2}\n cy={BOX / 2}\n r={RADIUS}\n fill=\"none\"\n strokeWidth={STROKE}\n strokeLinecap=\"round\"\n stroke={complete ? \"var(--text-success-default)\" : \"var(--background-brand-default)\"}\n strokeDasharray={CIRCUMFERENCE}\n strokeDashoffset={CIRCUMFERENCE * (1 - pct / 100)}\n className=\"transition-[stroke-dashoffset,stroke] duration-open ease-enter motion-reduce:transition-none\"\n />\n </svg>\n\n <div\n data-slot=\"profile-photo-image\"\n className=\"absolute flex items-center justify-center overflow-hidden rounded-full bg-background-secondary-surface\"\n style={{ inset: INSET }}\n >\n {src ? (\n <img src={src} alt={alt} className=\"size-full object-cover\" />\n ) : (\n <User className=\"size-10 text-icon-subtle-default\" strokeWidth={1.5} aria-hidden=\"true\" />\n )}\n </div>\n\n {onPhotoChange ? (\n // 24px keeps the chip subordinate to the photo; the ::after extends the\n // hit area to ~44px so it still meets the touch-target minimum.\n <Button\n variant=\"primary\"\n size=\"icon-xs\"\n aria-label={photoChangeLabel}\n onClick={onPhotoChange}\n data-slot=\"profile-photo-camera\"\n className=\"absolute right-0.5 bottom-5 rounded-full border-2 border-prominent after:absolute after:-inset-2.5 after:content-['']\"\n >\n <Camera />\n </Button>\n ) : null}\n\n {status ? (\n <div\n data-slot=\"profile-photo-status\"\n className=\"absolute -bottom-1 left-1/2 -translate-x-1/2\"\n >\n {status}\n </div>\n ) : null}\n </div>\n )\n}\n\nexport { ProfilePhoto }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { CircleIcon } from \"lucide-react\"\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"aspect-square size-4 shrink-0 rounded-full border border-border-default-default bg-background-primary-surface transition-[color,box-shadow] outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong data-[state=checked]:border-border-brand-selected disabled:cursor-not-allowed disabled:border-border-default-default disabled:text-text-disabled-default aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-text-brand-selected text-background-brand-default\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","\"use client\"\n\nimport { GripVerticalIcon } from \"lucide-react\"\nimport * as ResizablePrimitive from \"react-resizable-panels\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ResizablePanelGroup({\n className,\n ...props\n}: ResizablePrimitive.GroupProps) {\n return (\n <ResizablePrimitive.Group\n data-slot=\"resizable-panel-group\"\n className={cn(\n \"flex h-full w-full aria-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizablePrimitive.SeparatorProps & {\n withHandle?: boolean\n}) {\n return (\n <ResizablePrimitive.Separator\n data-slot=\"resizable-handle\"\n className={cn(\n \"relative flex w-px items-center justify-center bg-border-default-default after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring-focus-default focus-visible:ring-offset-1 focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90\",\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"z-10 flex h-4 w-3 items-center justify-center rounded-xs border border-border-default-default bg-border-default-default text-icon-subtle-default\">\n <GripVerticalIcon className=\"size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.Separator>\n )\n}\n\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ScrollArea as ScrollAreaPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n \"flex touch-none p-px transition-colors select-none\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"relative flex-1 rounded-full bg-border-default-default\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { NavigationButton } from \"./navigation-button\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-background-overlay-default data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n showCloseButton?: boolean\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"fixed z-50 flex flex-col gap-4 bg-background-primary-surface transition data-[state=closed]:animate-out data-[state=closed]:ease-exit data-[state=closed]:[animation-duration:var(--motion-overlay-close)] data-[state=open]:animate-in data-[state=open]:ease-enter data-[state=open]:[animation-duration:var(--motion-overlay-open)]\",\n side === \"right\" &&\n \"inset-y-0 right-0 h-full w-3/4 border-l border-border-default-default data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n side === \"left\" &&\n \"inset-y-0 left-0 h-full w-3/4 border-r border-border-default-default data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n side === \"top\" &&\n \"inset-x-0 top-0 h-auto border-b border-border-default-default data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n side === \"bottom\" &&\n \"inset-x-0 bottom-0 h-auto border-t border-border-default-default data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close asChild>\n <NavigationButton\n data-slot=\"sheet-close\"\n size=\"sm\"\n aria-label=\"Close\"\n className=\"absolute top-4 right-4\"\n >\n <XIcon className=\"size-4\" />\n </NavigationButton>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"type-sheet-title text-text-prominent-default\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"type-sheet-description text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { PanelLeftIcon } from \"lucide-react\"\nimport { Slot } from \"radix-ui\"\n\nimport { useIsMobile } from \"../../hooks/use-mobile\"\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Separator } from \"./separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet\"\nimport { Skeleton } from \"./skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\"\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\"\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = \"16rem\"\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\nconst SIDEBAR_WIDTH_ICON = \"3rem\"\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\"\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\"\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\")\n }\n\n return context\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n}) {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open]\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener(\"keydown\", handleKeyDown)\n return () => window.removeEventListener(\"keydown\", handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\"\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-background-primary-surface\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-background-primary-surface text-text-prominent-default\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-background-primary-surface p-0 text-text-prominent-default [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer hidden text-text-prominent-default md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-base ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-base ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"flex h-full w-full flex-col bg-background-primary-surface group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-border-default-default\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"secondary\"\n size=\"icon\"\n className={cn(\"size-7\", className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-border-default-default sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-background-primary-surface\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"relative flex w-full flex-1 flex-col bg-background-primary-canvas\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"h-8 w-full bg-background-primary-surface shadow-none\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\n \"flex flex-col gap-2 px-layout-margin-inline py-2 group-data-[collapsible=icon]:px-2\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\n \"flex flex-col gap-2 px-layout-margin-inline py-2 group-data-[collapsible=icon]:px-2\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"mx-2 w-auto bg-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\n \"relative flex w-full min-w-0 flex-col px-layout-margin-inline py-2 group-data-[collapsible=icon]:px-2\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"div\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"type-sidebar-label flex h-8 shrink-0 items-center rounded-md px-2 text-text-subtle-default ring-ring-focus-default outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-text-prominent-default ring-ring-focus-default outline-hidden transition-transform hover:bg-background-secondary-surface hover:text-text-prominent-default focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"type-sidebar-menu w-full\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-sm p-2 text-left text-text-prominent-default ring-ring-focus-default outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-background-hover-default hover:text-text-brand-hover focus-visible:ring-2 active:bg-background-hover-default active:text-text-brand-hover disabled:pointer-events-none disabled:text-text-disabled-default aria-disabled:pointer-events-none aria-disabled:text-text-disabled-default data-[active=true]:bg-background-brand-selected data-[active=true]:text-text-brand-selected data-[active=true]:hover:bg-background-brand-selected data-[active=true]:hover:text-text-brand-selected data-[state=open]:hover:bg-background-hover-default data-[state=open]:hover:text-text-brand-hover [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 data-[active=true]:[&>svg]:text-text-brand-selected\",\n {\n variants: {\n variant: {\n default: \"\",\n outline:\n \"bg-background-primary-surface ring-1 ring-border-default-default hover:ring-ring-brand-soft data-[active=true]:ring-ring-brand-soft\",\n },\n size: {\n default: \"type-sidebar-menu h-8\",\n sm: \"type-sidebar-menu-sm h-7\",\n lg: \"type-sidebar-menu h-12 group-data-[collapsible=icon]:p-0! group-data-[collapsible=icon]:justify-center\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : \"button\"\n const { isMobile, state } = useSidebar()\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean\n showOnHover?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"button\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-text-prominent-default ring-ring-focus-default outline-hidden transition-transform peer-hover/menu-button:text-text-prominent-default hover:bg-background-secondary-surface hover:text-text-prominent-default focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-text-prominent-default data-[state=open]:opacity-100 md:opacity-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center type-sidebar-label rounded-md px-1 text-text-prominent-default tabular-nums select-none\",\n \"peer-hover/menu-button:text-text-prominent-default peer-data-[active=true]/menu-button:text-text-prominent-default\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Fixed width for skeleton bars (avoids impure Math.random in render; still reads like varied line length).\n const width = \"70%\"\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-border-default-default px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean\n size?: \"sm\" | \"md\"\n isActive?: boolean\n}) {\n const Comp = asChild ? Slot.Root : \"a\"\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-sm px-2 text-text-prominent-default ring-ring-focus-default outline-hidden hover:bg-background-hover-default hover:text-text-brand-hover focus-visible:ring-2 active:bg-background-hover-default active:text-text-brand-hover disabled:pointer-events-none disabled:text-text-disabled-default aria-disabled:pointer-events-none aria-disabled:text-text-disabled-default [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 data-[active=true]:[&>svg]:text-text-brand-selected\",\n \"data-[active=true]:bg-background-brand-selected data-[active=true]:text-text-brand-selected\",\n size === \"sm\" && \"type-sidebar-menu-sm\",\n size === \"md\" && \"type-sidebar-menu\",\n \"group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n","import { cn } from \"../../lib/utils\"\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\n \"relative overflow-hidden rounded-md bg-background-secondary-surface\",\n \"after:pointer-events-none after:absolute after:inset-0 after:[animation:var(--animate-skeleton-sweep)] after:bg-[linear-gradient(90deg,transparent,var(--background-hover-default),transparent)]\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nimport { useIsMobile } from \"../../hooks/use-mobile\"\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\nimport {\n Drawer,\n DrawerClose,\n DrawerContent,\n DrawerFooter,\n DrawerHeader,\n DrawerTitle,\n DrawerTrigger,\n} from \"./drawer\"\n\n/**\n * Internal context that lets the parent `Tooltip` tell its descendants\n * (`TooltipTrigger`, `TooltipContent`) which underlying surface to render —\n * \"tooltip\" (Radix popover on hover/focus) or \"drawer\" (vaul bottom sheet on\n * tap). Centralising the decision here guarantees all three components agree\n * on the surface in the same render, instead of each calling `useIsMobile()`\n * independently and momentarily disagreeing during the SSR→hydration flip\n * (which throws \"TooltipTrigger must be used within Tooltip\" errors).\n */\ntype TooltipMode = \"tooltip\" | \"drawer\"\nconst TooltipModeContext = React.createContext<TooltipMode>(\"tooltip\")\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n const isMobile = useIsMobile()\n const mode: TooltipMode = isMobile ? \"drawer\" : \"tooltip\"\n\n if (mode === \"drawer\") {\n return (\n <TooltipModeContext.Provider value=\"drawer\">\n <Drawer>{children}</Drawer>\n </TooltipModeContext.Provider>\n )\n }\n\n return (\n <TooltipModeContext.Provider value=\"tooltip\">\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props}>\n {children}\n </TooltipPrimitive.Root>\n </TooltipModeContext.Provider>\n )\n}\n\nfunction TooltipTrigger({\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n const mode = React.useContext(TooltipModeContext)\n\n if (mode === \"drawer\") {\n return (\n <DrawerTrigger data-slot=\"tooltip-trigger\" {...props}>\n {children}\n </DrawerTrigger>\n )\n }\n\n return (\n <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props}>\n {children}\n </TooltipPrimitive.Trigger>\n )\n}\n\ntype TooltipVariant = \"default\" | \"inverse\"\n\nfunction TooltipContent({\n className,\n sideOffset = 6,\n variant = \"default\",\n title = \"Title\",\n closeLabel = \"Label\",\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content> & {\n /**\n * Surface variant. `default` is the brand-blue tooltip on light surfaces.\n * `inverse` is a white surface with on-prominent (black) text — use over\n * saturated coloured surfaces (e.g. the boost badge) where a blue tooltip\n * would feel visually heavy. Only applies on desktop; mobile always uses\n * the neutral drawer surface.\n */\n variant?: TooltipVariant\n /**\n * Drawer-only: visible heading shown at the top of the mobile drawer.\n * Defaults to the placeholder string `\"Title\"` — consumers should pass\n * domain-specific text. Desktop tooltips ignore this prop.\n */\n title?: string\n /**\n * Drawer-only: text on the dismiss button at the bottom of the mobile\n * drawer (wraps a `DrawerClose`, so tapping it dismisses the drawer).\n * Defaults to the placeholder string `\"Label\"`. Desktop tooltips ignore\n * this prop.\n */\n closeLabel?: string\n}) {\n const mode = React.useContext(TooltipModeContext)\n\n // Mobile: render as a bottom-sheet drawer. Tap trigger → drawer opens and\n // persists until the user taps the scrim, swipes down, or taps the close\n // button at the bottom — much friendlier than a hover-tooltip on touch.\n // Uses the same DrawerHeader / DrawerTitle / DrawerFooter / DrawerClose\n // building blocks as the standard Drawer demo so spacing, typography and\n // dismiss-button placement stay consistent across every drawer surface.\n if (mode === \"drawer\") {\n return (\n <DrawerContent data-slot=\"tooltip-content\" data-variant={variant}>\n <DrawerHeader>\n <DrawerTitle>{title}</DrawerTitle>\n </DrawerHeader>\n <div className={cn(\"type-drawer-description p-4 text-text-subtle-default\", className)}>\n {children}\n </div>\n <DrawerFooter>\n <DrawerClose asChild>\n <Button variant=\"primary\" size=\"md\">\n {closeLabel}\n </Button>\n </DrawerClose>\n </DrawerFooter>\n </DrawerContent>\n )\n }\n\n const surfaceClasses =\n variant === \"inverse\"\n ? \"border border-border-default-default bg-background-primary-surface text-text-prominent-default\"\n : \"bg-background-inverse-surface text-text-prominent-inverse\"\n const arrowClasses =\n variant === \"inverse\"\n ? \"fill-background-primary-surface\"\n : \"fill-background-inverse-surface\"\n\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n data-variant={variant}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md border-0 px-3 py-1.5 has-[[data-slot=kbd]]:px-3.5 has-[[data-slot=kbd]]:py-2 has-[[data-slot=kbd]]:space-y-1.5 type-tooltip text-balance whitespace-normal fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n surfaceClasses,\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className={arrowClasses} />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\nexport type { TooltipVariant }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Slider as SliderPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: React.ComponentProps<typeof SliderPrimitive.Root>) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n )\n\n return (\n <SliderPrimitive.Root\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"relative flex w-full touch-none items-center select-none data-[disabled]:[background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] data-[disabled]:text-text-disabled-default data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n // One track spec, shared with Progress: h-2, full radius, secondary\n // surface, solid brand fill.\n \"relative grow overflow-hidden rounded-full bg-background-secondary-surface data-[orientation=horizontal]:h-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2\"\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"absolute bg-background-brand-default data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"block size-4 shrink-0 rounded-full border-0 bg-background-brand-default ring-ring-focus-strong transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden\"\n />\n ))}\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n CircleCheckIcon,\n InfoIcon,\n Loader2Icon,\n OctagonXIcon,\n TriangleAlertIcon,\n} from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, toast, type ToasterProps } from \"sonner\"\nimport { useIsMobile } from \"@/hooks/use-mobile\"\nimport { cn } from \"@/lib/utils\"\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = \"system\" } = useTheme()\n const isMobile = useIsMobile()\n\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n position={isMobile ? \"top-center\" : \"bottom-right\"}\n visibleToasts={isMobile ? 1 : 3}\n duration={4000}\n icons={{\n success: <CircleCheckIcon className=\"size-4\" />,\n info: <InfoIcon className=\"size-4\" />,\n warning: <TriangleAlertIcon className=\"size-4\" />,\n error: <OctagonXIcon className=\"size-4\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin\" />,\n }}\n toastOptions={{\n classNames: {\n toast: \"!bg-[var(--background-inverse-surface)] !border-none\",\n title: \"!text-[var(--text-prominent-inverse)] !font-display !font-semibold\",\n description: \"!text-[var(--text-subtle-inverse)] !font-body\",\n actionButton: \"!bg-[var(--background-static-white)] !text-[var(--text-brand-container-static)]\",\n },\n }}\n style={\n {\n \"--normal-bg\": \"var(--background-inverse-surface)\",\n \"--normal-text\": \"var(--text-prominent-inverse)\",\n \"--normal-border\": \"transparent\",\n \"--border-radius\": \"var(--radius)\",\n } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\n\n/* ─────────────────────────────────────────────────────────────────────────────\n Result Snackbar — the quiet settlement surface, added alongside the\n sonner-backed Snackbar above without touching it.\n\n The two are deliberately different surfaces, not variants of one look.\n The Snackbar (`Toaster`) is transient system messaging: an inverse\n borderless pill on `var(--radius)`, 4s, stacked by sonner. The Result\n Snackbar reports *money* for a contract the player was not watching when\n it ended — it carries an illustration, a figure, and a visible dwell\n timer, and it docks to an anchor the consumer owns. Shared shape would\n flatten a real difference in job, so it keeps the Refined card: floating\n chrome glass, `--radius-2xl`, its own dwell.\n\n Placement and queueing stay with the consumer. Placement, because the\n meaningful anchor differs per game (Rise/Fall docks it under the header's\n positions button so a missed result reads as coming out of the positions\n list) — give the positioned ancestor `relative` and pass placement via\n `className`. Queueing, because deciding what waits, what is stale, and\n what replays after an interruption is product logic; this shows one\n settlement and reports when it is done via `onDismiss`.\n ───────────────────────────────────────────────────────────────────────── */\n\ntype ResultSnackbarOutcome = \"win\" | \"loss\"\n\nconst RESULT_SNACKBAR_EXIT_MS = 350\nconst RESULT_SNACKBAR_ICON_DELAY_MS = 150\n\ninterface ResultSnackbarProps\n extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n /** Outcome — drives the figure's ink, the drain colour, and the icon's twist. */\n outcome: ResultSnackbarOutcome\n /**\n * Pre-formatted, pre-signed figure — \"+8.40\" / \"−5.00\". Formatting stays\n * with the consumer: rounding and the choice of a true Unicode minus are\n * product decisions, not design-system ones.\n */\n amount: string\n /** Currency code, shown inline after the figure at a smaller step. */\n currency: string\n /** What was traded — \"Rise\", \"Fall\", \"Matches 5\". */\n contractLabel: string\n /** How long it ran — \"15 seconds\", \"5 ticks\". */\n duration: string\n /**\n * Illustration slot, rendered in a fixed 40px box so every game's artwork\n * occupies identical space and the text never shifts. Rise/Fall passes its\n * thumbs illustration; Digits passes its settlement digit. Mark decorative\n * artwork `aria-hidden` at the call site.\n */\n icon?: React.ReactNode\n /**\n * Count-up target — the absolute value of `amount`. Supply it to animate\n * the figure up from zero; omit for a static figure. The last frame always\n * snaps to `amount` verbatim, so the animation can never leave a rounding\n * artefact on screen.\n */\n amountValue?: number\n /** Which edge it travels from, and returns to. */\n placement?: \"top\" | \"bottom\"\n /** Time on screen before it leaves. */\n durationMs?: number\n /** Fires once the exit finishes — never earlier, never twice. */\n onDismiss?: () => void\n /**\n * Sentence for assistive technology, which cannot read a figure/colour\n * pairing. Defaults to a composed sentence; override for outcomes the\n * default wording does not suit.\n */\n announcement?: string\n}\n\nfunction ResultSnackbar({\n outcome,\n amount,\n currency,\n contractLabel,\n duration,\n icon,\n amountValue,\n placement = \"top\",\n durationMs = 2500,\n onDismiss,\n announcement,\n className,\n ...props\n}: ResultSnackbarProps) {\n const isWin = outcome === \"win\"\n const [leaving, setLeaving] = React.useState(false)\n const reduced = usePrefersReducedMotion()\n\n // onDismiss advances a consumer queue, so it must fire exactly once per\n // mounted snackbar — whether it timed out or was unmounted early to make\n // way for something louder.\n const onDismissRef = React.useRef(onDismiss)\n React.useEffect(() => {\n onDismissRef.current = onDismiss\n }, [onDismiss])\n const firedRef = React.useRef(false)\n const finish = React.useCallback(() => {\n if (firedRef.current) return\n firedRef.current = true\n onDismissRef.current?.()\n }, [])\n\n React.useEffect(() => {\n const leave = window.setTimeout(() => setLeaving(true), durationMs)\n return () => window.clearTimeout(leave)\n }, [durationMs])\n\n React.useEffect(() => {\n if (!leaving) return\n const done = window.setTimeout(finish, reduced ? 0 : RESULT_SNACKBAR_EXIT_MS)\n return () => window.clearTimeout(done)\n }, [leaving, finish, reduced])\n\n // Count-up. Skipped under reduced motion and when no numeric target was\n // given, in which case `amount` renders immediately.\n const [display, setDisplay] = React.useState<string | null>(null)\n React.useEffect(() => {\n if (amountValue === undefined || reduced || !Number.isFinite(amountValue)) {\n setDisplay(null)\n return\n }\n // A win is savoured, a loss is stated — half the duration, so the\n // interface never lingers on money the player just lost.\n const total = isWin ? 500 : 250\n const sign = isWin ? \"+\" : \"\\u2212\"\n const startedAt = performance.now()\n let frame = 0\n const step = (now: number) => {\n const t = Math.min(1, (now - startedAt) / total)\n const eased = 1 - Math.pow(1 - t, 3)\n if (t < 1) {\n setDisplay(`${sign}${(amountValue * eased).toFixed(2)}`)\n frame = requestAnimationFrame(step)\n } else {\n setDisplay(null)\n }\n }\n frame = requestAnimationFrame(step)\n return () => cancelAnimationFrame(frame)\n }, [amountValue, isWin, reduced])\n\n const spoken =\n announcement ??\n `${isWin ? \"Won\" : \"Lost\"} ${amount} ${currency}. ${contractLabel}, ${duration}.`\n\n const enterOut = leaving ? \"out\" : \"in\"\n const motionName = `result-snackbar-${enterOut}-${placement}`\n\n return (\n <div\n // polite, not assertive: a settlement the player was not watching is\n // news, not an interruption of what they are doing now.\n role=\"status\"\n aria-live=\"polite\"\n data-slot=\"result-snackbar\"\n data-outcome={outcome}\n data-leaving={leaving || undefined}\n className={cn(\n // Floating chrome, the same surface family as Bottom Navigation —\n // it floats over live chart content, so it frosts what is behind it\n // and carries the sanctioned chrome lift.\n \"pointer-events-none absolute z-40 flex w-max items-center gap-3 overflow-hidden\",\n \"rounded-2xl border border-(--border-chrome-default) bg-(--background-chrome-default)\",\n \"[backdrop-filter:blur(20px)_saturate(1.4)]\",\n \"[box-shadow:var(--shadow-chrome-default),inset_0_1px_0_var(--chrome-highlight-default)]\",\n \"py-2 pr-4 pl-2 whitespace-nowrap\",\n className,\n )}\n style={{\n animation: reduced\n ? `result-snackbar-fade var(--motion-overlay-close) var(--ease-standard) ${leaving ? \"reverse forwards\" : \"forwards\"}`\n : `${motionName} ${RESULT_SNACKBAR_EXIT_MS}ms var(--primitive-ease-overshoot) forwards`,\n }}\n {...props}\n >\n <span className=\"sr-only\">{spoken}</span>\n\n {icon ? (\n <span\n data-slot=\"result-snackbar-icon\"\n className=\"flex size-10 flex-none items-center justify-center\"\n style={\n reduced\n ? undefined\n : {\n animation: `result-snackbar-icon-${outcome} var(--motion-pop) var(--primitive-ease-overshoot) ${RESULT_SNACKBAR_ICON_DELAY_MS}ms both`,\n }\n }\n >\n {icon}\n </span>\n ) : null}\n\n <span aria-hidden className=\"flex min-w-max flex-col gap-0.5\">\n <span\n className={cn(\n \"type-result-snackbar-amount min-w-max\",\n isWin ? \"text-text-success-default\" : \"text-text-error-default\",\n )}\n >\n {display ?? amount}{\" \"}\n <span className=\"type-result-snackbar-currency\">{currency}</span>\n </span>\n <span className=\"type-result-snackbar-terms min-w-max text-text-subtle-default\">\n {contractLabel} · {duration}\n </span>\n </span>\n\n {/* Drain — deliberately not composed from Progress: that component is a\n labelled meter with a track and a brand-coloured fill, while this is\n an outcome-coloured edge affordance. Recolouring Progress's fill\n from outside would be restyling it rather than composing it, and its\n self-running timer does not yet honour reduced motion. */}\n <span\n aria-hidden\n data-slot=\"result-snackbar-drain\"\n className={cn(\n \"absolute bottom-0 left-0 h-1 w-full origin-left\",\n isWin ? \"bg-background-success-solid\" : \"bg-background-error-solid\",\n )}\n style={\n reduced\n ? { transform: \"scaleX(0)\" }\n : {\n animation: `result-snackbar-drain ${durationMs}ms var(--ease-linear) forwards`,\n }\n }\n />\n </div>\n )\n}\n\n/**\n * Reduced-motion preference, live. The declarative animations are inline so\n * they can carry the consumer's duration; this gates them and the count-up.\n */\nfunction usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = React.useState(false)\n React.useEffect(() => {\n const query = window.matchMedia(\"(prefers-reduced-motion: reduce)\")\n setReduced(query.matches)\n const onChange = (event: MediaQueryListEvent) => setReduced(event.matches)\n query.addEventListener(\"change\", onChange)\n return () => query.removeEventListener(\"change\", onChange)\n }, [])\n return reduced\n}\n\nexport { Toaster, toast, ResultSnackbar }\nexport type { ResultSnackbarProps, ResultSnackbarOutcome }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { ArrowRight, Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────────\n Slide to Confirm — the swipe-to-commit control for irreversible money\n actions (withdrawals, transfers)\n\n A pill track with a draggable brand handle. The solid brand fill sweeps\n with the handle, and the label is painted twice — subtle ink on the\n track ahead of the handle, white ink revealed from behind it. The\n grey→white switch line sits under the handle's centre, so the change\n itself is never visible: letters go under the button grey and come out\n white. Drag past ~90% to confirm; release earlier and everything\n springs back. Keyboard users confirm with Enter/Space — the drag is a\n pointer affordance, not a gate.\n ───────────────────────────────────────────────────────────────────────── */\n\nconst CONFIRM_AT = 0.9\nconst HANDLE = 46 // px — size-11.5 handle inside the 56px (h-14) track, per the Refined spec\nconst INSET = 5 // px — equal gap all round; the track is borderless, so this is the visual gap\n\ninterface SlideToConfirmProps\n extends Omit<React.ComponentProps<\"div\">, \"onDragStart\"> {\n /** Fires once when the handle crosses the threshold (or on Enter/Space). */\n onConfirm?: () => void\n /** Track label. */\n label?: React.ReactNode\n /** Label shown in the confirmed state. */\n confirmedLabel?: React.ReactNode\n disabled?: boolean\n /** Controlled confirmed state — pass `false` to reset the control. */\n confirmed?: boolean\n}\n\nfunction SlideToConfirm({\n onConfirm,\n label = \"Slide to confirm\",\n confirmedLabel = \"Confirmed\",\n disabled = false,\n confirmed: controlledConfirmed,\n className,\n ...props\n}: SlideToConfirmProps) {\n const trackRef = React.useRef<HTMLDivElement>(null)\n const [dragX, setDragX] = React.useState(0)\n const [dragging, setDragging] = React.useState(false)\n const [trackWidth, setTrackWidth] = React.useState(0)\n const [internalConfirmed, setInternalConfirmed] = React.useState(false)\n const confirmed = controlledConfirmed ?? internalConfirmed\n const firedRef = React.useRef(false)\n\n React.useEffect(() => {\n if (controlledConfirmed === false) {\n setInternalConfirmed(false)\n setDragX(0)\n firedRef.current = false\n }\n }, [controlledConfirmed])\n\n // Track the inner width so the clipped label can be laid out against the\n // full track and the travel distance stays correct on resize.\n React.useEffect(() => {\n const track = trackRef.current\n if (!track) return\n const ro = new ResizeObserver(() => setTrackWidth(track.clientWidth))\n ro.observe(track)\n setTrackWidth(track.clientWidth)\n return () => ro.disconnect()\n }, [])\n\n const maxTravel = Math.max(trackWidth - HANDLE - INSET * 2, 0)\n\n function confirm() {\n if (firedRef.current) return\n firedRef.current = true\n setInternalConfirmed(true)\n onConfirm?.()\n }\n\n function handlePointerDown(e: React.PointerEvent<HTMLSpanElement>) {\n if (disabled || confirmed) return\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n setDragging(true)\n }\n\n function handlePointerMove(e: React.PointerEvent<HTMLSpanElement>) {\n if (!dragging || disabled || confirmed) return\n const track = trackRef.current\n if (!track) return\n const rect = track.getBoundingClientRect()\n const x = e.clientX - rect.left - INSET - HANDLE / 2\n setDragX(Math.min(Math.max(x, 0), maxTravel))\n }\n\n function handlePointerUp() {\n if (!dragging) return\n setDragging(false)\n if (dragX >= maxTravel * CONFIRM_AT) {\n setDragX(maxTravel)\n confirm()\n } else {\n setDragX(0)\n }\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLDivElement>) {\n if (disabled || confirmed) return\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n setDragX(maxTravel)\n confirm()\n }\n }\n\n // The brand fill's leading edge rides just ahead of the handle; the\n // label's grey→white switch line trails at the handle's centre, hidden\n // underneath it — text ahead of the button stays grey, text behind it\n // is white on the fill.\n // The sweep runs from the track's inset edge to the handle's *far* edge, so\n // the handle sits on top of it and the two read as one continuous brand\n // shape — stopping at the handle's near edge leaves both rounded ends\n // visible and pinches. At rest it collapses to exactly 0 so there is\n // nothing behind the handle for the idle nudge to drift off and expose.\n const fillWidth = dragX === 0 ? 0 : dragX + HANDLE\n const revealWidth = INSET + dragX + HANDLE / 2\n const spring = \"duration-slow ease-(--primitive-ease-spring)\"\n\n return (\n <div\n ref={trackRef}\n data-slot=\"slide-to-confirm\"\n data-confirmed={confirmed || undefined}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n aria-label={typeof label === \"string\" ? label : undefined}\n onKeyDown={handleKeyDown}\n className={cn(\n \"relative h-14 w-full touch-none overflow-hidden rounded-full bg-background-secondary-surface select-none\",\n disabled && \"pointer-events-none [background-image:linear-gradient(var(--background-disabled-default),var(--background-disabled-default))] text-text-disabled-default\",\n \"outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong\",\n className,\n )}\n {...props}\n >\n {/* Base label — subtle ink on the track, dead-centred */}\n <span className=\"absolute inset-0 grid place-items-center\">\n <span className=\"type-slide-to-confirm text-text-subtle-default\">\n {label}\n </span>\n </span>\n\n {/* Brand fill sweeping with the handle's leading edge */}\n <span\n aria-hidden\n data-slot=\"slide-to-confirm-progress\"\n className={cn(\n \"absolute rounded-full bg-background-brand-default\",\n // Confirmed floods the whole track; mid-drag it sits inside the\n // handle's inset so the two read as one continuous brand shape.\n confirmed ? \"inset-0\" : \"top-(--inset) bottom-(--inset) left-(--inset)\",\n !dragging && cn(\"transition-[width]\", spring),\n )}\n style={\n {\n \"--inset\": `${INSET}px`,\n width: confirmed ? \"100%\" : `${fillWidth}px`,\n } as React.CSSProperties\n }\n />\n\n {/* White label revealed from behind the handle — the switch line sits\n under the handle's centre, so it is never visible */}\n <span\n aria-hidden\n data-slot=\"slide-to-confirm-reveal\"\n className={cn(\n \"absolute inset-0 grid place-items-center\",\n !dragging && cn(\"transition-[clip-path]\", spring),\n )}\n style={{\n clipPath: confirmed\n ? \"inset(0 round 9999px)\"\n : `inset(0 calc(100% - ${revealWidth}px) 0 0 round 9999px)`,\n }}\n >\n <span className=\"type-slide-to-confirm flex items-center gap-2 text-text-on-brand-static\">\n {/* No check here — the landed handle carries it, so repeating it\n would read as two ticks for one action. */}\n {confirmed ? confirmedLabel : label}\n </span>\n </span>\n\n {/* Handle — vertically centred regardless of the track border. It\n survives confirmation: the thing you dragged travels to the end and\n holds the check, so the gesture visibly completes instead of the\n handle vanishing at the moment of success. */}\n <span\n data-slot=\"slide-to-confirm-handle\"\n data-confirmed={confirmed || undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n className={cn(\n \"absolute top-1/2 z-20 grid size-11.5 place-items-center rounded-full\",\n confirmed\n ? // Landed: an inverted disc on the flooded track, glow dropped\n // — nothing left to drag, so no grab cursor.\n \"bg-background-static-white text-text-brand-default\"\n : \"cursor-grab bg-background-brand-default text-text-on-brand-static [box-shadow:var(--shadow-brand-glow)] active:cursor-grabbing\",\n !dragging && cn(\"transition-[translate]\", spring),\n // Idle nudge, per the Refined spec: the handle drifts 10px and\n // back. Safe because the sweep is 0-width at rest, so there is\n // nothing behind the handle to expose. Rest only, and reduced\n // motion turns it off.\n !dragging &&\n !disabled &&\n !confirmed &&\n dragX === 0 &&\n \"animate-slide-confirm-nudge motion-reduce:animate-none\",\n )}\n style={{\n left: `${INSET}px`,\n // Confirmed pins it to the far end even when the gesture came from\n // the keyboard, where dragX never moved.\n translate: `${confirmed ? maxTravel : dragX}px -50%`,\n }}\n >\n {confirmed ? (\n <Check className=\"size-4.5 [animation:slide-confirm-pop_var(--motion-pop)_var(--primitive-ease-overshoot)]\" />\n ) : (\n <ArrowRight className=\"size-4.5\" />\n )}\n </span>\n </div>\n )\n}\n\nexport { SlideToConfirm }\nexport type { SlideToConfirmProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Minus, Plus } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction getDecimalPlaces(n: number) {\n const s = String(n)\n const i = s.indexOf(\".\")\n return i === -1 ? 0 : s.length - i - 1\n}\n\nfunction formatValue(value: number, decimalPlaces: number) {\n return decimalPlaces > 0 ? value.toFixed(decimalPlaces) : String(value)\n}\n\n\ninterface StepperProps {\n /** Uppercase label above the amount, e.g. \"Stake (USDT)\". */\n label?: React.ReactNode\n value?: number\n defaultValue?: number\n onValueChange?: (value: number) => void\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n placeholder?: string\n className?: string\n id?: string\n name?: string\n \"aria-label\"?: string\n}\n\nfunction Stepper({\n label,\n value: controlledValue,\n defaultValue = 0,\n onValueChange,\n min = -Infinity,\n max = Infinity,\n step = 1,\n disabled,\n placeholder,\n className,\n id,\n name,\n \"aria-label\": ariaLabel,\n}: StepperProps) {\n const isControlled = controlledValue !== undefined\n const [internalValue, setInternalValue] = React.useState(\n clamp(defaultValue, min, max)\n )\n const currentValue = isControlled ? controlledValue : internalValue\n const decimalPlaces = getDecimalPlaces(step)\n\n const [displayString, setDisplayString] = React.useState(\n formatValue(currentValue, decimalPlaces)\n )\n const [isFocused, setIsFocused] = React.useState(false)\n\n // Sync display string when controlled value changes externally (not while typing)\n React.useEffect(() => {\n if (!isFocused) {\n setDisplayString(formatValue(currentValue, decimalPlaces))\n }\n }, [currentValue, decimalPlaces, isFocused])\n\n function commit(next: number) {\n const clamped = clamp(next, min, max)\n const rounded =\n decimalPlaces > 0\n ? parseFloat(clamped.toFixed(decimalPlaces))\n : Math.round(clamped)\n\n if (!isControlled) setInternalValue(rounded)\n setDisplayString(formatValue(rounded, decimalPlaces))\n onValueChange?.(rounded)\n }\n\n function handleDecrement() {\n commit(currentValue - step)\n }\n\n function handleIncrement() {\n commit(currentValue + step)\n }\n\n function handleInputChange(e: React.ChangeEvent<HTMLInputElement>) {\n setDisplayString(e.target.value)\n }\n\n function handleBlur() {\n setIsFocused(false)\n const parsed = parseFloat(displayString)\n if (Number.isNaN(parsed)) {\n setDisplayString(formatValue(currentValue, decimalPlaces))\n } else {\n commit(parsed)\n }\n }\n\n function handleFocus() {\n setIsFocused(true)\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === \"ArrowUp\") {\n e.preventDefault()\n handleIncrement()\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault()\n handleDecrement()\n } else if (e.key === \"Enter\") {\n e.preventDefault()\n const parsed = parseFloat(displayString)\n if (Number.isNaN(parsed)) {\n setDisplayString(formatValue(currentValue, decimalPlaces))\n } else {\n commit(parsed)\n }\n }\n }\n\n return (\n <div\n data-slot=\"stepper\"\n data-disabled={disabled || undefined}\n className={cn(\n \"flex w-full items-center justify-between gap-4\",\n // No opacity here on purpose. The +/- are Buttons and already carry\n // their own disabled treatment; dimming the wrapper too multiplied\n // with theirs (24% × 24% ≈ 6%) and made them all but invisible.\n // Disabled text takes the disabled ink token instead of a wash.\n disabled && \"pointer-events-none\",\n className,\n )}\n >\n <Button\n type=\"button\"\n variant=\"frosted\"\n size=\"icon-lg\"\n onClick={handleDecrement}\n disabled={disabled || currentValue <= min}\n aria-label=\"Decrease value\"\n >\n <Minus />\n </Button>\n\n <div className=\"flex min-w-0 flex-col items-center\">\n {label != null && (\n <span\n className={cn(\n \"type-stepper-stake-label\",\n disabled ? \"text-text-disabled-default\" : \"text-text-subtle-default\",\n )}\n >\n {label}\n </span>\n )}\n <input\n type=\"text\"\n inputMode=\"decimal\"\n role=\"spinbutton\"\n aria-valuemin={min === -Infinity ? undefined : min}\n aria-valuemax={max === Infinity ? undefined : max}\n aria-valuenow={currentValue}\n aria-label={ariaLabel}\n value={displayString}\n onChange={handleInputChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n id={id}\n name={name}\n size={Math.max(displayString.length, 1)}\n className=\"type-stepper-stake-amount w-full min-w-0 border-0 bg-transparent text-center text-text-prominent-default outline-none disabled:text-text-disabled-default [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n </div>\n\n <Button\n type=\"button\"\n variant=\"frosted\"\n size=\"icon-lg\"\n onClick={handleIncrement}\n disabled={disabled || currentValue >= max}\n aria-label=\"Increase value\"\n >\n <Plus />\n </Button>\n </div>\n )\n}\n\nexport { Stepper }\nexport type { StepperProps }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────────\n Steps — the progress rail (numbered indicators, onboarding timelines,\n live status timelines)\n\n Fully generic composition: the consumer supplies the steps (any count),\n each with optional icon, title, description, and tag. Two indicator\n shapes (circle / square tile) and two orientations (horizontal /\n vertical). Not to be confused with Stepper, the numeric +/− input.\n\n States: `done` (success fill + check), `active` (brand fill),\n `upcoming` (secondary surface, subtle ink). Indicators show the step\n number automatically unless an `icon` is passed.\n ───────────────────────────────────────────────────────────────────────── */\n\ntype StepsShape = \"circle\" | \"square\"\ntype StepsOrientation = \"horizontal\" | \"vertical\"\ntype StepsSize = \"sm\" | \"md\"\ntype StepState = \"done\" | \"active\" | \"upcoming\"\n\nconst StepsContext = React.createContext<{\n shape: StepsShape\n orientation: StepsOrientation\n size: StepsSize\n}>({ shape: \"circle\", orientation: \"horizontal\", size: \"md\" })\n\nfunction Steps({\n shape = \"circle\",\n orientation = \"horizontal\",\n size = \"md\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"ol\"> & {\n shape?: StepsShape\n orientation?: StepsOrientation\n size?: StepsSize\n}) {\n const steps = React.Children.toArray(children)\n return (\n <StepsContext.Provider value={{ shape, orientation, size }}>\n <ol\n data-slot=\"steps\"\n data-shape={shape}\n data-orientation={orientation}\n data-size={size}\n className={cn(\n \"flex list-none\",\n orientation === \"horizontal\"\n ? \"flex-row items-start\"\n : \"flex-col\",\n className,\n )}\n {...props}\n >\n {steps.map((child, index) =>\n React.isValidElement<StepProps>(child)\n ? React.cloneElement(child, {\n index: index + 1,\n isFirst: index === 0,\n isLast: index === steps.length - 1,\n })\n : child,\n )}\n </ol>\n </StepsContext.Provider>\n )\n}\n\ninterface StepProps extends Omit<React.ComponentProps<\"li\">, \"title\"> {\n /** done = success fill + check · active = brand fill · upcoming = muted surface */\n state?: StepState\n /** Replaces the automatic step number inside the indicator. */\n icon?: React.ReactNode\n title?: React.ReactNode\n description?: React.ReactNode\n /** Small uppercase marker beside the title (e.g. \"Start here\"). */\n tag?: React.ReactNode\n /** Injected by Steps — do not pass. */\n index?: number\n /** Injected by Steps — do not pass. */\n isFirst?: boolean\n /** Injected by Steps — do not pass. */\n isLast?: boolean\n}\n\nfunction Step({\n state = \"upcoming\",\n icon,\n title,\n description,\n tag,\n index,\n isFirst = false,\n isLast = false,\n className,\n ...props\n}: StepProps) {\n const { shape, orientation, size } = React.useContext(StepsContext)\n const horizontal = orientation === \"horizontal\"\n const sm = size === \"sm\"\n\n const indicator = (\n <span\n data-slot=\"step-indicator\"\n className={cn(\n \"type-steps-indicator z-10 grid shrink-0 place-items-center\",\n sm ? \"size-6\" : \"size-8\",\n shape === \"circle\" ? \"rounded-full\" : \"rounded-md\",\n state === \"done\" &&\n \"bg-background-success-solid text-text-on-status-static\",\n state === \"active\" &&\n \"bg-background-brand-default text-text-on-brand-static\",\n state === \"upcoming\" &&\n \"bg-background-secondary-surface text-text-subtle-default\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n sm\n ? \"[&_svg:not([class*='size-'])]:size-3.5\"\n : \"[&_svg:not([class*='size-'])]:size-4\",\n )}\n >\n {state === \"done\" ? <Check /> : icon ?? index}\n </span>\n )\n\n if (horizontal) {\n // Half-connectors inside each equal-width cell: the line runs\n // continuously through the indicator centres no matter how wide the\n // labels beneath them are.\n return (\n <li\n data-slot=\"step\"\n data-state={state}\n aria-current={state === \"active\" ? \"step\" : undefined}\n className={cn(\"flex min-w-0 flex-1 flex-col items-center\", className)}\n {...props}\n >\n <div className=\"flex w-full items-center\">\n <span\n aria-hidden\n data-slot=\"step-connector\"\n className={cn(\"h-px flex-1\", !isFirst && \"bg-border-neutral-default\")}\n />\n <span className={cn(!isFirst && \"w-1\", \"shrink-0\")} />\n {indicator}\n <span className={cn(!isLast && \"w-1\", \"shrink-0\")} />\n <span\n aria-hidden\n data-slot=\"step-connector\"\n className={cn(\"h-px flex-1\", !isLast && \"bg-border-neutral-default\")}\n />\n </div>\n {(title != null || description != null) && (\n <div\n data-slot=\"step-body\"\n className={cn(\n \"flex min-w-0 flex-col items-center px-1 text-center\",\n sm ? \"mt-1\" : \"mt-1.5\",\n )}\n >\n {title != null && (\n <span\n className={cn(\n \"type-steps-title\",\n state === \"upcoming\"\n ? \"text-text-subtle-default\"\n : \"text-text-prominent-default\",\n )}\n >\n {title}\n </span>\n )}\n {tag != null && (\n <span className=\"type-steps-tag whitespace-nowrap text-text-brand-selected\">{tag}</span>\n )}\n {description != null && (\n <span className=\"type-steps-description text-text-subtle-default\">{description}</span>\n )}\n </div>\n )}\n </li>\n )\n }\n\n const hasBody = title != null || description != null\n\n return (\n <li\n data-slot=\"step\"\n data-state={state}\n aria-current={state === \"active\" ? \"step\" : undefined}\n className={cn(\n \"flex min-w-0\",\n sm ? \"gap-2.5\" : \"gap-3\",\n // Minimum row rhythm so title-only steps still leave a visible\n // stretch of rail; description steps outgrow it naturally, and the\n // last step needs none (no connector below it).\n !isLast && (sm ? \"min-h-11\" : \"min-h-14\"),\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-col items-center self-stretch\">\n {indicator}\n {!isLast && (\n <span\n aria-hidden\n data-slot=\"step-connector\"\n className=\"mt-1 mb-1 w-px flex-1 bg-border-neutral-default\"\n />\n )}\n </div>\n <div\n data-slot=\"step-body\"\n className={cn(\"flex min-w-0 flex-col\", !isLast && (sm ? \"pb-4\" : \"pb-6\"))}\n >\n {title != null && (\n <span\n className={cn(\n \"type-steps-title\",\n state === \"upcoming\"\n ? \"text-text-subtle-default\"\n : \"text-text-prominent-default\",\n )}\n >\n {title}\n {tag != null && (\n <span className=\"type-steps-tag ml-2 whitespace-nowrap text-text-brand-selected\">\n {tag}\n </span>\n )}\n </span>\n )}\n {description != null && (\n <span className=\"type-steps-description text-text-subtle-default\">\n {description}\n </span>\n )}\n {!hasBody && <span className=\"sr-only\">Step {index}</span>}\n </div>\n </li>\n )\n}\n\nexport { Steps, Step }\nexport type { StepProps, StepsShape, StepsOrientation, StepsSize, StepState }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n \"peer group/switch inline-flex shrink-0 items-center rounded-full border border-transparent p-[3px] transition-all outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:cursor-not-allowed disabled:border-border-default-default disabled:text-text-disabled-default data-[size=default]:h-6 data-[size=default]:w-11 data-[size=sm]:h-5 data-[size=sm]:w-9 data-[state=checked]:bg-background-brand-default data-[state=unchecked]:bg-border-default-default\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"pointer-events-none block rounded-full bg-background-static-white ring-0 transition-transform group-data-[size=default]/switch:size-[18px] group-data-[size=sm]/switch:size-[14px] data-[state=checked]:translate-x-[calc(100%+1px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"type-table w-full caption-bottom\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b [&_tr]:border-border-default-default\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"type-table-head border-t border-border-default-default bg-background-secondary-surface [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"border-b border-border-default-default transition-colors hover:bg-background-hover-default data-[state=selected]:bg-background-brand-selected\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"type-table-head h-10 px-2 text-left align-middle whitespace-nowrap text-text-prominent-default [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"mt-4 text-text-subtle-default\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Tabs as TabsPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n \"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"group/tabs-list inline-flex w-fit items-center justify-center text-text-subtle-default group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none has-[[data-icon-position=top]]:h-auto\",\n {\n variants: {\n variant: {\n default: \"bg-background-secondary-surface\",\n line: \"gap-1 bg-transparent\",\n },\n size: {\n sm: \"h-8 rounded-md p-[2px]\",\n md: \"h-10 rounded-lg p-1\",\n lg: \"h-12 rounded-xl p-1.5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n size = \"md\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> &\n VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n data-size={size}\n className={cn(tabsListVariants({ variant, size }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n iconPosition = \"inline\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger> & {\n iconPosition?: \"inline\" | \"top\"\n}) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n data-icon-position={iconPosition}\n className={cn(\n \"relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-3 py-1 whitespace-nowrap text-text-subtle-default transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:bg-background-hover-default hover:text-text-prominent-default focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong focus-visible:outline-1 focus-visible:outline-ring-focus-default disabled:pointer-events-none disabled:text-text-disabled-default group-data-[variant=default]/tabs-list:data-[state=active]:shadow-none group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[size=sm]/tabs-list:gap-1 group-data-[size=sm]/tabs-list:rounded-sm group-data-[size=sm]/tabs-list:px-2\",\n \"group-data-[size=lg]/tabs-list:gap-2 group-data-[size=lg]/tabs-list:rounded-lg group-data-[size=lg]/tabs-list:px-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:hover:bg-transparent group-data-[variant=line]/tabs-list:hover:text-text-brand-hover group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent\",\n \"data-[state=active]:bg-background-primary-surface data-[state=active]:border-transparent data-[state=active]:text-text-brand-selected\",\n \"after:absolute after:bg-border-brand-selected after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n iconPosition === \"top\" && \"h-auto flex-col gap-1 py-2\",\n iconPosition === \"top\" && \"group-data-[size=sm]/tabs-list:gap-0.5 group-data-[size=sm]/tabs-list:py-1.5\",\n iconPosition === \"top\" && \"group-data-[size=lg]/tabs-list:gap-1.5 group-data-[size=lg]/tabs-list:py-2.5\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Toggle as TogglePrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* One look, three states — the Chip treatment on the toggle's rectangle:\n bordered primary surface at rest, secondary-surface hover, solid brand\n with on-brand ink when on (the brand flip in dark is the design). */\nconst toggleVariants = cva(\n \"type-toggle inline-flex items-center justify-center gap-2 rounded-md border border-border-default-default bg-background-primary-surface text-text-prominent-default whitespace-nowrap transition-[color,background-color,border-color,box-shadow] outline-none hover:bg-background-secondary-surface active:bg-background-secondary-wash focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:pointer-events-none disabled:border-border-default-default disabled:text-text-disabled-default aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft data-[state=on]:border-transparent data-[state=on]:bg-background-brand-default data-[state=on]:text-text-on-brand-static [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n size: {\n default: \"h-10 min-w-10 px-2.5\",\n sm: \"h-8 min-w-8 px-1.5\",\n lg: \"h-12 min-w-12 px-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> &\n VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { toggleVariants } from \"./toggle\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }\n>({\n size: \"default\",\n spacing: 0,\n})\n\nfunction ToggleGroup({\n className,\n size,\n spacing = 0,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-size={size}\n data-spacing={spacing}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"group/toggle-group flex w-fit items-center gap-[--spacing(var(--gap))] rounded-md\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ size, spacing }}>\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n toggleVariants({\n size: context.size || size,\n }),\n \"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10\",\n // Joined (spacing 0): shared hairlines — every item after the first\n // drops its left border; the on item paints solid over its cell.\n \"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:border-l-0 data-[spacing=0]:first:border-l\",\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","import * as React from \"react\"\nimport { Badge } from \"../ui/badge\"\nimport { Button } from \"../ui/button\"\nimport { Card } from \"../ui/card\"\n\n// ---------------------------------------------------------------------------\n// Inlined thumb illustrations — base64 WEBP data URLs (~4KB each)\n// Sourced from public/assets/thumbs-up.webp and thumbs-down.webp.\n// Inlining avoids requiring consumers to copy asset files into their public/.\n// ---------------------------------------------------------------------------\nconst THUMBS_UP_DATA_URL =\n \"data:image/webp;base64,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\"\nconst THUMBS_DOWN_DATA_URL =\n \"data:image/webp;base64,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\"\n\n// ---------------------------------------------------------------------------\n// ResultBlock — universal results card used by Rise-Fall, Swipe, and Digits.\n// Animation CSS lives in src/styles.css (selectors: [data-results-motion]).\n// ---------------------------------------------------------------------------\nexport type ResultBlockStatus = \"win\" | \"loss\"\nexport type ResultBlockCta = \"next-round\" | \"go-again\" | \"conversion\"\n\nexport type ResultBlockProps = {\n status: ResultBlockStatus\n amount: string\n currency: string\n contractLabel: string\n pickedDigit?: number\n duration: string\n ctaMode: ResultBlockCta\n}\n\nexport function ResultBlock({\n status,\n amount,\n currency,\n contractLabel,\n pickedDigit,\n duration,\n ctaMode,\n}: ResultBlockProps) {\n const isWin = status === \"win\"\n const titleText = isWin ? \"You won!\" : \"You lost!\"\n const signedAmount = isWin ? `+${amount}` : `−${amount}`\n const amountColorClass = isWin ? \"text-semantic-win\" : \"text-semantic-loss\"\n const haloBgClass = isWin ? \"bg-semantic-win\" : \"bg-semantic-loss\"\n\n return (\n <Card className=\"w-80 shrink-0 overflow-hidden rounded-md shadow-sm px-5 py-5 items-center gap-3\">\n <div className=\"relative flex items-center justify-center py-2\">\n <span\n aria-hidden\n data-results-motion=\"halo\"\n className={`absolute size-24 rounded-full blur-2xl opacity-20 ${haloBgClass}`}\n />\n <img\n data-results-motion={isWin ? \"icon-win\" : \"icon-loss\"}\n src={isWin ? THUMBS_UP_DATA_URL : THUMBS_DOWN_DATA_URL}\n alt={isWin ? \"Win\" : \"Loss\"}\n className=\"relative size-20\"\n />\n </div>\n\n <p className=\"text-lg font-semibold text-on-prominent\">{titleText}</p>\n\n <p className={`flex items-baseline gap-1.5 ${amountColorClass}`}>\n <span className=\"font-display text-4xl font-semibold tabular-nums tracking-tight\">\n {signedAmount}\n </span>\n <span className=\"text-lg font-semibold\">{currency}</span>\n </p>\n\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"tint-neutral\" size=\"sm\">\n {contractLabel}\n {pickedDigit !== undefined && (\n <>\n <span aria-hidden className=\"h-3 w-px bg-border-prominent/40 mx-1\" />\n <span className=\"tabular-nums\">{pickedDigit}</span>\n </>\n )}\n </Badge>\n <Badge variant=\"tint-neutral\" size=\"sm\">{duration}</Badge>\n </div>\n\n <div className=\"w-full pt-2\">\n {ctaMode === \"next-round\" && <Button className=\"w-full\">Next round</Button>}\n {ctaMode === \"go-again\" && <Button className=\"w-full\">Go again</Button>}\n {ctaMode === \"conversion\" && (\n <div className=\"w-full flex flex-col gap-3\">\n <p className=\"text-center text-base font-semibold text-on-prominent\">\n Ready to play for real?\n </p>\n <Button className=\"w-full\">Deposit now</Button>\n <Button variant=\"secondary\" className=\"w-full\">Stay in demo</Button>\n </div>\n )}\n </div>\n </Card>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ResultDialog — fixed-width dialog variant (no thumb, no amount; just copy\n// + 2 CTAs). Used for system messages like \"out of balance\".\n// ---------------------------------------------------------------------------\nexport type ResultDialogProps = {\n title: string\n body: React.ReactNode\n primaryLabel: string\n secondaryLabel: string\n}\n\nexport function ResultDialog({\n title,\n body,\n primaryLabel,\n secondaryLabel,\n}: ResultDialogProps) {\n return (\n <Card className=\"w-80 shrink-0 overflow-hidden rounded-md shadow-sm px-5 py-6 items-center gap-4\">\n <div className=\"flex flex-col items-center gap-2 text-center\">\n <p className=\"text-lg font-semibold text-on-prominent\">{title}</p>\n <p className=\"text-sm text-on-subtle\">{body}</p>\n </div>\n <div className=\"w-full flex flex-col gap-2\">\n <Button className=\"w-full\">{primaryLabel}</Button>\n <Button variant=\"secondary\" className=\"w-full\">{secondaryLabel}</Button>\n </div>\n </Card>\n )\n}\n","import * as React from \"react\"\nimport { ArrowLeft, History } from \"lucide-react\"\nimport { Badge } from \"../ui/badge\"\nimport { NavigationButton } from \"../ui/navigation-button\"\n\nexport type HeaderNavigationBlockProps = {\n /** Back button click handler. Back arrow is rendered only when provided. */\n onBack?: () => void\n /** Optional badge shown between back and balance (e.g. \"Demo\" indicator). */\n badge?: { label: string; variant?: React.ComponentProps<typeof Badge>[\"variant\"] }\n /** Required balance display. */\n balance: { amount: string; currency: string }\n /** History button config. When `count` is provided, a numeric badge overlays the icon. */\n history?: {\n count?: number\n onClick?: () => void\n \"aria-label\"?: string\n }\n /** Right-side icon-button slot (e.g. sound toggle, settings). Rendered after the history button. */\n actions?: React.ReactNode\n}\n\nexport function HeaderNavigationBlock({\n onBack,\n badge,\n balance,\n history,\n actions,\n}: HeaderNavigationBlockProps) {\n return (\n <div className=\"w-full min-w-80 max-w-layout-diagram-small rounded-md overflow-hidden bg-prominent\">\n <header className=\"flex items-center gap-2 border-b border-border-subtle bg-prominent px-layout-margin-inline py-3\">\n {onBack && (\n <NavigationButton type=\"button\" size=\"md\" aria-label=\"Back\" onClick={onBack}>\n <ArrowLeft className=\"size-5\" />\n </NavigationButton>\n )}\n <div className=\"flex min-w-0 flex-1 items-center justify-center gap-2\">\n {badge && (\n <Badge variant={badge.variant ?? \"tint-warning\"} size=\"sm\">\n {badge.label}\n </Badge>\n )}\n <span className=\"font-display font-semibold tabular-nums text-on-prominent\">\n {balance.amount}\n </span>\n <span className=\"text-sm text-on-subtle\">{balance.currency}</span>\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {history && <HistoryButton {...history} />}\n {actions}\n </div>\n </header>\n </div>\n )\n}\n\nfunction HistoryButton({\n count,\n onClick,\n \"aria-label\": ariaLabelOverride,\n}: NonNullable<HeaderNavigationBlockProps[\"history\"]>) {\n const show = typeof count === \"number\" && count > 0\n const label = show ? (count! > 99 ? \"99+\" : String(count)) : null\n const ariaLabel =\n ariaLabelOverride ?? (show ? `Open history, ${count} new` : \"Open history\")\n return (\n <div className=\"relative inline-flex\">\n <NavigationButton type=\"button\" size=\"md\" aria-label={ariaLabel} onClick={onClick}>\n <History className=\"size-5\" />\n </NavigationButton>\n {show && (\n <span\n aria-hidden\n className=\"pointer-events-none absolute -top-0.5 -right-0.5 min-w-[1.125rem] h-[1.125rem] px-1 rounded-full bg-primary text-on-primary text-[10px] leading-none font-semibold tabular-nums inline-flex items-center justify-center ring-2 ring-prominent\"\n >\n {label}\n </span>\n )}\n </div>\n )\n}\n","import * as React from \"react\"\nimport { Plus } from \"lucide-react\"\nimport { Accordion as AccordionPrimitive } from \"radix-ui\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"../ui/accordion\"\nimport { Button } from \"../ui/button\"\nimport { cn } from \"../../lib/utils\"\n\nexport type FAQItem = {\n value: string\n question: string\n answer: string\n}\n\nexport type FAQBlockProps = {\n /** Section eyebrow above the heading. Defaults to \"FAQ Section\". */\n eyebrow?: string\n /** Heading text. Defaults to \"Frequently asked questions\". */\n title?: string\n /** Body paragraph between heading and accordion. */\n intro?: React.ReactNode\n /** Q&A items. */\n items: FAQItem[]\n /** Which item is open by default. Defaults to the first item's `value`. */\n defaultValue?: string\n /** Footer \"Need more help?\" card. Hidden if undefined. */\n helpCard?: {\n title: string\n body: string\n ctaLabel: string\n onCtaClick?: () => void\n }\n /** Layout density. \"desktop\" is the default; \"mobile\" reduces type scale and padding. \"two-column\" places the heading on the left and the accordion on the right. */\n layout?: \"desktop\" | \"mobile\" | \"two-column\"\n}\n\nexport function FAQBlock({\n eyebrow = \"FAQ\",\n title = \"Frequently asked questions\",\n intro = \"Find answers to the most common questions below.\",\n items,\n defaultValue,\n helpCard,\n layout = \"desktop\",\n}: FAQBlockProps) {\n if (layout === \"two-column\") {\n return (\n <div className=\"@container w-full\">\n <div className=\"flex flex-col @[600px]:flex-row gap-8 @[600px]:gap-12\">\n {/* Left column */}\n <div className=\"flex flex-col gap-4 flex-1 @[600px]:max-w-xs\">\n <span className=\"text-xs font-body font-semibold tracking-widest uppercase text-on-subtle\">{eyebrow}</span>\n <h2 className=\"text-4xl @[600px]:text-6xl font-semibold font-display text-on-prominent tracking-tight\">{title}</h2>\n {intro && (\n <p className=\"text-base font-body text-on-subtle\">{intro}</p>\n )}\n </div>\n {/* Right column */}\n <div className=\"flex-1\">\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={defaultValue ?? items[0]?.value}\n className=\"w-full\"\n >\n {items.map(({ value, question, answer }, i) => (\n <AccordionItem key={value} value={value}>\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n className=\"group flex flex-1 items-center justify-between gap-4 py-5 text-left outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n >\n <span className=\"flex items-baseline gap-4\">\n <span className=\"text-sm font-body text-on-subtle shrink-0 w-6\">\n {String(i + 1).padStart(2, \"0\")}\n </span>\n <span className=\"text-lg @[600px]:text-xl font-semibold font-display text-on-prominent\">{question}</span>\n </span>\n <span className={cn(\n \"shrink-0 size-7 flex items-center justify-center rounded-sm border transition-all duration-200\",\n \"group-data-[state=open]:bg-primary group-data-[state=open]:border-primary\",\n \"group-data-[state=closed]:bg-transparent group-data-[state=closed]:border-border-subtle\"\n )}>\n <Plus className={cn(\n \"size-4 transition-all duration-200\",\n \"group-data-[state=open]:rotate-45 group-data-[state=open]:text-on-primary\",\n \"group-data-[state=closed]:text-on-prominent\"\n )} />\n </span>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n <AccordionContent>\n <p className=\"text-base font-body text-on-subtle pl-10 pb-4\">{answer}</p>\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </div>\n </div>\n </div>\n )\n }\n\n const headingClass =\n layout === \"desktop\"\n ? \"text-5xl font-semibold font-display text-on-prominent text-center tracking-tight\"\n : \"text-4xl font-semibold font-display text-on-prominent text-center tracking-tight\"\n const helpTitleClass =\n layout === \"desktop\"\n ? \"text-2xl font-semibold font-display text-on-prominent\"\n : \"text-xl font-semibold font-display text-on-prominent\"\n const helpCardPaddingClass = layout === \"desktop\" ? \"p-8\" : \"p-6\"\n const gapClass = layout === \"desktop\" ? \"gap-12\" : \"gap-10\"\n const headerGapClass = layout === \"desktop\" ? \"gap-5\" : \"gap-4\"\n\n return (\n <div className={`w-full flex flex-col ${gapClass}`}>\n <div className={`flex flex-col ${headerGapClass} items-center w-full`}>\n <span className=\"text-sm text-on-subtle font-body\">{eyebrow}</span>\n <h2 className={headingClass}>{title}</h2>\n {intro && (\n <p className=\"text-lg text-on-subtle font-body text-center\">{intro}</p>\n )}\n </div>\n\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={defaultValue ?? items[0]?.value}\n className=\"w-full\"\n >\n {items.map(({ value, question, answer }) => (\n <AccordionItem key={value} value={value}>\n <AccordionTrigger className=\"text-base font-medium font-body text-on-prominent hover:no-underline\">\n {question}\n </AccordionTrigger>\n <AccordionContent>\n <p className=\"text-sm text-on-subtle font-body pb-4\">{answer}</p>\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n\n {helpCard && (\n <div className={`flex flex-col gap-6 items-center w-full bg-subtle rounded-xl ${helpCardPaddingClass}`}>\n <div className=\"flex flex-col gap-2 w-full\">\n <h3 className={helpTitleClass}>{helpCard.title}</h3>\n <p className=\"text-base text-on-subtle font-body\">{helpCard.body}</p>\n </div>\n <Button size=\"sm\" onClick={helpCard.onCtaClick}>{helpCard.ctaLabel}</Button>\n </div>\n )}\n </div>\n )\n}\n","import * as React from \"react\"\nimport { ArrowRight, ArrowUpRight } from \"lucide-react\"\nimport { Button } from \"../ui/button\"\n\nexport type HeroBlockTagline = {\n /** Primary label (e.g. \"What's new\"). */\n label: string\n /** Secondary text shown after a separator (e.g. \"Just shipped v2.0\"). */\n suffix?: string\n}\n\nexport type HeroBlockCta = {\n label: string\n onClick?: () => void\n /** When true on the primary CTA in the centred layout, renders a trailing arrow. */\n trailingArrow?: boolean\n}\n\nexport type HeroBlockProps = {\n /** \"centered\" = single column, no image; \"split\" = two-column desktop with image. Default: \"centered\". */\n layout?: \"centered\" | \"split\"\n tagline?: HeroBlockTagline\n heading: string\n body: string\n primaryCta: HeroBlockCta\n /** Shown only in \"split\" layout. */\n secondaryCta?: HeroBlockCta\n /** Image content for \"split\" layout. Defaults to a subtle placeholder square. */\n image?: React.ReactNode\n}\n\nexport function HeroBlock({\n layout = \"centered\",\n tagline,\n heading,\n body,\n primaryCta,\n secondaryCta,\n image,\n}: HeroBlockProps) {\n if (layout === \"centered\") {\n return (\n <div className=\"w-full border border-border-subtle rounded-xl overflow-hidden bg-prominent\">\n <div className=\"flex flex-col items-center justify-center gap-8 px-layout-margin-inline py-24 max-w-2xl mx-auto text-center\">\n <div className=\"flex flex-col items-center gap-6 w-full\">\n {tagline && <TaglinePill {...tagline} />}\n <h1 className=\"text-5xl font-semibold font-display tracking-tight text-on-prominent text-center\">\n {heading}\n </h1>\n <p className=\"text-lg font-body text-on-subtle text-center\">{body}</p>\n </div>\n <Button size=\"sm\" onClick={primaryCta.onClick}>\n {primaryCta.label}\n {primaryCta.trailingArrow !== false && <ArrowRight className=\"size-4\" />}\n </Button>\n </div>\n </div>\n )\n }\n\n // split layout\n return (\n <div className=\"w-full border border-border-subtle rounded-xl overflow-hidden bg-prominent\">\n <div className=\"flex flex-col min-[600px]:flex-row items-center gap-layout-gutter px-layout-margin-inline py-16 min-[600px]:py-24 max-w-5xl mx-auto\">\n <div className=\"flex flex-col gap-6 min-[600px]:gap-8 flex-1 min-w-0 items-center min-[600px]:items-start text-center min-[600px]:text-left w-full\">\n <div className=\"flex flex-col gap-5 min-[600px]:gap-6 items-center min-[600px]:items-start w-full\">\n {tagline && <TaglinePill {...tagline} responsive />}\n <h1 className=\"text-4xl min-[600px]:text-5xl font-semibold font-display tracking-tight text-on-prominent\">\n {heading}\n </h1>\n <p className=\"text-lg font-body text-on-subtle\">{body}</p>\n </div>\n <div className=\"flex items-center justify-center min-[600px]:justify-start gap-2\">\n <Button size=\"sm\" onClick={primaryCta.onClick}>{primaryCta.label}</Button>\n {secondaryCta && (\n <Button variant=\"secondary\" size=\"sm\" onClick={secondaryCta.onClick}>\n {secondaryCta.label}\n </Button>\n )}\n </div>\n </div>\n <div className=\"w-full min-[600px]:flex-1 min-[600px]:min-w-0 aspect-square rounded-xl bg-subtle shrink-0\" aria-hidden=\"true\">\n {image}\n </div>\n </div>\n </div>\n )\n}\n\nfunction TaglinePill({\n label,\n suffix,\n responsive,\n}: HeroBlockTagline & { responsive?: boolean }) {\n return (\n <div className=\"inline-flex items-center gap-1.5 h-7 px-3 rounded-full border border-border-subtle bg-prominent shadow-sm shrink-0\">\n <span className=\"size-1.5 rounded-full bg-semantic-win shrink-0\" aria-hidden=\"true\" />\n {responsive && suffix ? (\n <span className=\"text-sm font-body text-on-prominent whitespace-nowrap\">\n <span className=\"hidden min-[600px]:inline\">{label}<span className=\"text-on-subtle\">{\" · \"}</span></span>\n <span className=\"text-on-subtle min-[600px]:text-on-prominent\">{suffix}</span>\n </span>\n ) : (\n <span className=\"text-sm font-body text-on-prominent whitespace-nowrap\">\n {label}\n {suffix && <span className=\"text-on-subtle\">{` · ${suffix}`}</span>}\n </span>\n )}\n <ArrowUpRight className=\"size-4 text-on-subtle shrink-0\" aria-hidden=\"true\" />\n </div>\n )\n}\n","import * as React from \"react\"\nimport { Button } from \"../ui/button\"\nimport { Input } from \"../ui/input\"\nimport { Link } from \"../ui/link\"\n\nexport type AuthBlockMode = \"sign-in\" | \"sign-up\"\nexport type AuthBlockProvider = \"google\" | \"telegram\" | \"x\"\n\nexport type AuthBlockProps = {\n mode: AuthBlockMode\n /** Logo source URL (consumer-provided). Renders the small icon in the header lockup. */\n logoSrc: string\n /** Wordmark text in the header lockup. Defaults to \"trading.game\". */\n wordmark?: string\n /** OAuth providers to show as buttons. Default: all three. Order is preserved. */\n providers?: AuthBlockProvider[]\n /** Submit handler. Receives just the email field for v1 (form is single-field). */\n onSubmit?: (data: { email: string }) => void\n /** Footer link href (sign-in → sign-up, sign-up → sign-in). */\n crossLinkHref?: string\n /** Unique prefix for input IDs (allows multiple instances on the same page). */\n idPrefix?: string\n}\n\nexport function AuthBlock({\n mode,\n logoSrc,\n wordmark = \"trading.game\",\n providers = [\"google\", \"telegram\", \"x\"],\n onSubmit,\n crossLinkHref = \"#\",\n idPrefix = \"auth\",\n}: AuthBlockProps) {\n const headingText = mode === \"sign-in\" ? \"Sign in\" : \"Sign up\"\n const termsText = mode === \"sign-in\" ? \"By signing in\" : \"By signing up\"\n const ctaText = mode === \"sign-in\" ? \"Sign in\" : \"Sign up\"\n const footerPrompt =\n mode === \"sign-in\" ? \"Don't have an account?\" : \"Already have an account?\"\n const footerLinkLabel = mode === \"sign-in\" ? \"Sign up\" : \"Log in\"\n const [email, setEmail] = React.useState(\"\")\n\n return (\n <div className=\"flex flex-col items-center gap-6 w-full\">\n <div className=\"flex items-center gap-2\">\n <img src={logoSrc} alt={wordmark} className=\"size-8 object-contain\" />\n <span className=\"font-display font-semibold text-base text-on-prominent tracking-tight\">\n {wordmark}\n </span>\n </div>\n\n <h2 className=\"text-3xl font-semibold font-display text-on-prominent text-center\">\n {headingText}\n </h2>\n\n <div className=\"flex flex-col gap-3 w-full\">\n {providers.map((p) => (\n <ProviderButton key={p} provider={p} />\n ))}\n </div>\n\n <div className=\"flex items-center gap-3 w-full\">\n <div className=\"flex-1 h-px bg-border-subtle\" />\n <span className=\"text-sm text-on-subtle font-body\">or</span>\n <div className=\"flex-1 h-px bg-border-subtle\" />\n </div>\n\n <div className=\"flex items-center gap-2 w-full\">\n <Input\n id={`${idPrefix}-email`}\n type=\"text\"\n placeholder=\"Email or phone number\"\n className=\"flex-1\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n </div>\n\n <p className=\"text-sm text-on-subtle font-body text-left w-full\">\n {termsText}, you agree to our{\" \"}\n <Link size=\"sm\" href=\"#\">Terms &amp; Conditions</Link>\n </p>\n\n <Button size=\"md\" className=\"w-full\" onClick={() => onSubmit?.({ email })}>\n {ctaText}\n </Button>\n\n <p className=\"text-sm text-on-subtle font-body text-center\">\n {footerPrompt}{\" \"}\n <Link size=\"sm\" href={crossLinkHref}>{footerLinkLabel}</Link>\n </p>\n </div>\n )\n}\n\nfunction ProviderButton({ provider }: { provider: AuthBlockProvider }) {\n switch (provider) {\n case \"google\":\n return (\n <Button variant=\"secondary\" size=\"lg\" className=\"w-full\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M17.64 9.205c0-.639-.057-1.252-.164-1.841H9v3.481h4.844a4.14 4.14 0 0 1-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615Z\" fill=\"#4285F4\" />\n <path d=\"M9 18c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 0 0 9 18Z\" fill=\"#34A853\" />\n <path d=\"M3.964 10.71A5.41 5.41 0 0 1 3.682 9c0-.593.102-1.17.282-1.71V4.958H.957A8.996 8.996 0 0 0 0 9c0 1.452.348 2.827.957 4.042l3.007-2.332Z\" fill=\"#FBBC05\" />\n <path d=\"M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 0 0 .957 4.958L3.964 7.29C4.672 5.163 6.656 3.58 9 3.58Z\" fill=\"#EA4335\" />\n </svg>\n Continue with Google\n </Button>\n )\n case \"telegram\":\n return (\n <Button variant=\"secondary\" size=\"lg\" className=\"w-full\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" fill=\"none\" className=\"shrink-0\">\n <circle cx=\"9\" cy=\"9\" r=\"9\" fill=\"#29B6F6\" />\n <path d=\"M13.5 5.25 11.25 13.5l-2.25-3-3 1.5 1.5-5.25 6-1.5Z\" fill=\"white\" opacity=\"0.3\" />\n <path d=\"m4.5 8.625 7.5-3-1.125 7.125-2.625-2.25-1.5 1.5.375-3.375Z\" fill=\"white\" />\n </svg>\n Continue with Telegram\n </Button>\n )\n case \"x\":\n return (\n <Button variant=\"secondary\" size=\"lg\" className=\"w-full\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" fill=\"currentColor\" className=\"shrink-0\">\n <path d=\"M13.955 2.25h2.423L10.977 8.28 17.25 15.75h-4.812l-3.913-5.116-4.477 5.116H1.645l5.703-6.52L1.125 2.25h4.934l3.538 4.678 4.358-4.678Zm-.85 12.105h1.343L5.025 3.627H3.579l9.526 10.728Z\" />\n </svg>\n Continue with X (Twitter)\n </Button>\n )\n }\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Menu, X } from \"lucide-react\"\nimport { Button } from \"../ui/button\"\n\nexport type NavBarBlockLink = {\n label: string\n href?: string\n onClick?: () => void\n}\n\nexport type NavBarBlockProps = {\n /** Brand logo URLs and alt text. */\n brand: {\n fullLogoSrc: string\n iconLogoSrc: string\n alt: string\n }\n /** Primary nav links. */\n links: NavBarBlockLink[]\n /** Sign-in button. Hidden if omitted. Default label: \"Sign in\". */\n signIn?: { label?: string; onClick?: () => void }\n /** Sign-up button. Hidden if omitted. Default label: \"Sign up\". */\n signUp?: { label?: string; onClick?: () => void }\n}\n\nexport function NavBarBlock({ brand, links, signIn, signUp }: NavBarBlockProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = React.useState(false)\n\n return (\n <div className=\"w-full border border-border-subtle rounded-md overflow-hidden\">\n <nav className=\"bg-prominent\">\n <div className=\"flex items-center justify-between px-layout-margin-inline py-3\">\n <div className=\"flex items-center gap-6\">\n <img\n src={brand.fullLogoSrc}\n alt={brand.alt}\n className=\"hidden min-[600px]:block h-7 w-auto shrink-0 object-contain object-left\"\n />\n <img\n src={brand.iconLogoSrc}\n alt={brand.alt}\n className=\"min-[600px]:hidden size-7 shrink-0 object-contain\"\n />\n <div className=\"hidden min-[600px]:flex items-center gap-1\">\n {links.map((l) => (\n <Button key={l.label} variant=\"tertiary\" size=\"sm\" onClick={l.onClick}>\n {l.label}\n </Button>\n ))}\n </div>\n </div>\n\n <div className=\"hidden min-[600px]:flex items-center gap-2\">\n {signIn && (\n <Button variant=\"tertiary\" size=\"sm\" onClick={signIn.onClick}>\n {signIn.label ?? \"Sign in\"}\n </Button>\n )}\n {signUp && (\n <Button size=\"sm\" onClick={signUp.onClick}>\n {signUp.label ?? \"Sign up\"}\n </Button>\n )}\n </div>\n\n <Button\n variant=\"tertiary\"\n size=\"icon-sm\"\n aria-label={mobileMenuOpen ? \"Close navigation menu\" : \"Open navigation menu\"}\n aria-expanded={mobileMenuOpen}\n className=\"min-[600px]:hidden\"\n onClick={() => setMobileMenuOpen((prev) => !prev)}\n >\n {mobileMenuOpen ? <X className=\"size-4\" /> : <Menu className=\"size-4\" />}\n </Button>\n </div>\n\n {mobileMenuOpen && (\n <div className=\"min-[600px]:hidden flex flex-col border-t border-border-subtle px-layout-margin-inline py-3 gap-1\">\n {links.map((l) => (\n <Button\n key={l.label}\n variant=\"tertiary\"\n size=\"sm\"\n className=\"justify-start w-full\"\n onClick={l.onClick}\n >\n {l.label}\n </Button>\n ))}\n {(signIn || signUp) && (\n <div className=\"flex flex-col gap-2 pt-3 mt-2 border-t border-border-subtle\">\n {signIn && (\n <Button variant=\"secondary\" size=\"sm\" className=\"w-full\" onClick={signIn.onClick}>\n {signIn.label ?? \"Sign in\"}\n </Button>\n )}\n {signUp && (\n <Button size=\"sm\" className=\"w-full\" onClick={signUp.onClick}>\n {signUp.label ?? \"Sign up\"}\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n </nav>\n </div>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { History, X } from \"lucide-react\"\nimport { Button } from \"../ui/button\"\nimport { Drawer, DrawerClose, DrawerContent, DrawerHeader, DrawerTitle, DrawerTrigger } from \"../ui/drawer\"\nimport { Empty, EmptyHeader, EmptyMedia, EmptyTitle } from \"../ui/empty\"\nimport { Item, ItemActions, ItemContent, ItemGroup, ItemTitle } from \"../ui/item\"\nimport { NavigationButton } from \"../ui/navigation-button\"\nimport { Separator } from \"../ui/separator\"\nimport { Sheet, SheetClose, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from \"../ui/sheet\"\nimport { useIsMobile } from \"../../hooks/use-mobile\"\n\n// ── Position discriminated union ─────────────────────────────────────────────\ntype PositionBase = {\n market: string\n duration: string\n stake: string\n pnl: string\n win: boolean\n}\nexport type RiseFallPosition = PositionBase & { kind: \"rise-fall\"; direction: \"Rise\" | \"Fall\" }\nexport type SwipePosition = PositionBase & { kind: \"swipe\"; direction: \"Up\" | \"Down\" }\nexport type BoxOPosition = PositionBase & { kind: \"box-o\"; multiplier: string }\nexport type DigitsPosition = PositionBase & {\n kind: \"digits\"\n type: \"matches\" | \"differs\" | \"odd\" | \"even\" | \"over\" | \"under\"\n digit?: string\n}\nexport type Position = RiseFallPosition | SwipePosition | BoxOPosition | DigitsPosition\n\n// ── Public component ─────────────────────────────────────────────────────────\nexport type OpenPositionsBlockProps = {\n /** Consumer-provided trigger element. Wrapped with a Sheet/Drawer trigger asChild. */\n trigger: React.ReactNode\n /** Sheet/drawer title. Default: \"Positions\". */\n sheetTitle?: string\n /** Position items to render in the list. Empty array → emptyState is shown. */\n positions: Position[]\n /** Footer link handler. The button label is fixed: \"View trade history\". */\n onViewHistory?: () => void\n /** Replaces the default empty state when positions.length === 0. */\n emptyState?: React.ReactNode\n}\n\nexport function OpenPositionsBlock({\n trigger,\n sheetTitle = \"Positions\",\n positions,\n onViewHistory,\n emptyState,\n}: OpenPositionsBlockProps) {\n const isMobile = useIsMobile()\n\n const body =\n positions.length === 0\n ? (emptyState ?? <DefaultEmptyState onViewHistory={onViewHistory} />)\n : <PositionsList positions={positions} onViewHistory={onViewHistory} />\n\n if (isMobile) {\n return (\n <Drawer>\n <DrawerTrigger asChild>{trigger}</DrawerTrigger>\n <DrawerContent className=\"p-0 flex flex-col\">\n <DrawerHeader className=\"flex-row items-center justify-between px-4 py-3 shrink-0 text-left\">\n <DrawerTitle className=\"text-base font-semibold font-display text-on-prominent\">\n {sheetTitle}\n </DrawerTitle>\n <DrawerClose asChild>\n <NavigationButton size=\"sm\" aria-label=\"Close\"><X /></NavigationButton>\n </DrawerClose>\n </DrawerHeader>\n <Separator />\n {body}\n </DrawerContent>\n </Drawer>\n )\n }\n\n return (\n <Sheet>\n <SheetTrigger asChild>{trigger}</SheetTrigger>\n <SheetContent side=\"right\" showCloseButton={false} className=\"p-0 flex flex-col w-80 sm:max-w-xs\">\n <SheetHeader className=\"flex-row items-center justify-between px-4 py-3 shrink-0\">\n <SheetTitle className=\"text-base font-semibold font-display text-on-prominent\">\n {sheetTitle}\n </SheetTitle>\n <SheetClose asChild>\n <NavigationButton size=\"sm\" aria-label=\"Close\"><X /></NavigationButton>\n </SheetClose>\n </SheetHeader>\n <Separator />\n {body}\n </SheetContent>\n </Sheet>\n )\n}\n\n// ── Internals ────────────────────────────────────────────────────────────────\nfunction PositionsList({\n positions,\n onViewHistory,\n}: {\n positions: Position[]\n onViewHistory?: () => void\n}) {\n return (\n <div className=\"flex flex-col flex-1 min-h-0\">\n <ItemGroup className=\"min-h-0 overflow-y-auto\">\n {positions.map((pos, i) => (\n <PositionRow key={i} position={pos} />\n ))}\n </ItemGroup>\n <Separator />\n <div className=\"shrink-0 flex justify-center py-4\">\n <Button variant=\"tertiary\" size=\"md\" onClick={onViewHistory}>\n View trade history\n </Button>\n </div>\n </div>\n )\n}\n\nfunction PositionRow({ position }: { position: Position }) {\n const { label, suffix } = positionTitleParts(position)\n return (\n <Item size=\"sm\">\n <ItemContent>\n <ItemTitle>\n <span className=\"text-on-prominent\">{label}</span>\n {suffix && <span className=\"text-on-subtle\">{` ${suffix}`}</span>}\n </ItemTitle>\n <MetaNote market={position.market} duration={position.duration} />\n </ItemContent>\n <ItemActions>\n <PnlMeta pnl={position.pnl} win={position.win} stake={position.stake} />\n </ItemActions>\n </Item>\n )\n}\n\nconst DIGITS_TYPE_LABEL: Record<DigitsPosition[\"type\"], string> = {\n matches: \"Matches\",\n differs: \"Differs\",\n odd: \"Odd\",\n even: \"Even\",\n over: \"Over\",\n under: \"Under\",\n}\n\n/**\n * Splits a position's row title into the prominent label and an optional\n * subtle suffix (rendered in `text-on-subtle` so the multiplier/digit doesn't\n * compete with the contract type for visual weight).\n */\nfunction positionTitleParts(p: Position): { label: string; suffix?: string } {\n switch (p.kind) {\n case \"rise-fall\": return { label: p.direction }\n case \"swipe\": return { label: `Swipe-${p.direction.toLowerCase()}` }\n case \"box-o\": return { label: \"Box-O\", suffix: p.multiplier }\n // Digits with a picked value (matches/differs/over/under) show it as a\n // subtle suffix; odd/even have no digit so just the label.\n case \"digits\": return { label: DIGITS_TYPE_LABEL[p.type], suffix: p.digit }\n }\n}\n\nfunction MetaNote({ market, duration }: { market: string; duration: string }) {\n return (\n <span className=\"text-xs text-on-subtle whitespace-nowrap\">\n {market} · {duration}\n </span>\n )\n}\n\nfunction PnlMeta({ pnl, win, stake }: { pnl: string; win: boolean; stake: string }) {\n return (\n <div className=\"flex flex-col items-end gap-0.5\">\n <span className={`font-display font-semibold tabular-nums text-base ${win ? \"text-semantic-win\" : \"text-semantic-loss\"}`}>\n {pnl}\n </span>\n <span className=\"tabular-nums text-xs text-on-subtle\">{stake}</span>\n </div>\n )\n}\n\nfunction DefaultEmptyState({ onViewHistory }: { onViewHistory?: () => void }) {\n return (\n <Empty className=\"flex min-h-0 flex-1 flex-col justify-center border-none rounded-none p-6 text-center\">\n <EmptyHeader className=\"gap-4\">\n <EmptyMedia>\n <History className=\"size-8 text-on-subtle\" />\n </EmptyMedia>\n {/* h6 (16px) intentionally overrides EmptyTitle's default\n h5 (18px) — this empty state sits inside a compact sheet.\n Role-on-role override works because the scale is ordered largest →\n smallest in the stylesheet. */}\n <EmptyTitle className=\"h6 text-on-subtle\">\n No trades yet.\n </EmptyTitle>\n <Button variant=\"tertiary\" size=\"md\" onClick={onViewHistory}>\n View trade history\n </Button>\n </EmptyHeader>\n </Empty>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Smoothing hook */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport type LoaderCheckpoint = {\n /** Percentage the bar may climb to once this stage is reached (0–100). */\n target: number\n /** Text shown while this stage is in flight. */\n label: string\n}\n\nexport interface SmoothProgressInput {\n /** Ordered stages the loader steps through. */\n checkpoints: LoaderCheckpoint[]\n /** Index of the highest checkpoint reached so far. */\n reached: number\n /** When true, the bar is released to 100%. */\n done: boolean\n /** Max climb speed in % per second. Caps sudden jumps. */\n maxVelocity?: number\n /** How long a stage may stall before `delayed` flips true. */\n delayMs?: number\n /** Label shown once complete. */\n readyLabel?: string\n}\n\nexport interface SmoothProgressState {\n progress: number\n label: string\n delayed: boolean\n complete: boolean\n}\n\n/**\n * Velocity-capped progress smoothing. The bar climbs continuously toward the\n * current checkpoint's ceiling rather than snapping to it, and reports\n * `delayed` when a stage genuinely stalls — so a held bar still reads as\n * working instead of broken.\n */\nexport function useSmoothProgress({\n checkpoints,\n reached,\n done,\n maxVelocity = 30,\n delayMs = 8000,\n readyLabel = \"Ready\",\n}: SmoothProgressInput): SmoothProgressState {\n const [progress, setProgress] = React.useState(0)\n const [delayed, setDelayed] = React.useState(false)\n\n // Latest-value refs so the rAF loop never needs to be torn down and rebuilt\n // when inputs change mid-load.\n const checkpointsRef = React.useRef(checkpoints)\n const reachedRef = React.useRef(reached)\n const doneRef = React.useRef(done)\n\n // Synced in an effect rather than assigned during render: mutating a ref\n // mid-render is not safe under concurrent rendering (and `react-hooks/refs`\n // rejects it). No dep array, so this runs after every commit — the rAF loop\n // reads these on the next frame, which is always after the effect flush.\n React.useEffect(() => {\n checkpointsRef.current = checkpoints\n reachedRef.current = reached\n doneRef.current = done\n })\n\n const progressRef = React.useRef(0)\n const lastAdvanceRef = React.useRef(0)\n\n React.useEffect(() => {\n let raf = 0\n let last = 0\n const tick = (ts: number) => {\n if (!last) last = ts\n const dt = Math.min((ts - last) / 1000, 0.05)\n last = ts\n\n const cps = checkpointsRef.current\n const isDone = doneRef.current\n const idx = Math.min(reachedRef.current, cps.length - 1)\n const ceiling = isDone ? 100 : cps[idx]?.target ?? 100\n const cur = progressRef.current\n const gap = ceiling - cur\n\n // A ceiling that has fallen below where the bar already sits means the\n // load restarted (a consumer retrying after a failure, or the demo's\n // Replay). The climb is otherwise monotonic, so without this reset the\n // bar would stay pinned at its old high and never move again.\n if (gap < -0.5) {\n progressRef.current = 0\n lastAdvanceRef.current = ts\n setProgress(0)\n setDelayed(false)\n raf = requestAnimationFrame(tick)\n return\n }\n\n if (gap > 0.05) {\n const rate = Math.min(maxVelocity, gap * 2.4)\n let next = cur + rate * dt\n if (next > ceiling) next = ceiling\n if (isDone && next > 99.7) next = 100\n progressRef.current = next\n lastAdvanceRef.current = ts\n setProgress(next)\n setDelayed(false)\n } else if (!isDone && lastAdvanceRef.current && ts - lastAdvanceRef.current > delayMs) {\n setDelayed(true)\n }\n\n raf = requestAnimationFrame(tick)\n }\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [maxVelocity, delayMs])\n\n const idx = Math.min(reached, checkpoints.length - 1)\n const label = done && progress >= 99.5 ? readyLabel : checkpoints[idx]?.label ?? readyLabel\n return { progress, label, delayed, complete: done && progress >= 100 }\n}\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n/* Component */\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n/** Trading Game monogram path, drawn in `--on-primary` on the blue backdrop. */\nconst MONOGRAM_D =\n \"M513.51,265.27l12.26-58.98H183.8l-12.26,58.98h105.29l-46.92,225.76,29.68-.85c1.65-.05,40.84-1.34,87-18.36,64.47-23.76,111.8-66.23,136.88-122.83l15.77-35.6h-139.02l-12.26,58.98h58.44l-6.31,6.26c-3.16,3.14-6.56,6.2-10.11,9.12-14.15,11.63-31.27,21.29-50.86,28.7-10.01,3.79-20.64,6.97-31.57,9.45l-5.55,1.26,33.65-161.89h177.86Z\"\n\nexport interface GameLoadingBlockProps {\n /** Bar fill, 0–100. Pair with `useSmoothProgress` for capped climbing. */\n progress?: number\n /** Current stage label. */\n label?: string\n /** When true, swaps the label for a \"taking longer\" message. */\n delayed?: boolean\n /** Plays the zoom-out reveal and hides the bar. */\n exiting?: boolean\n /** Fires once the exit animation finishes. */\n onExitEnd?: () => void\n /**\n * Constrain to the nearest positioned ancestor instead of the viewport.\n * Use for embedding in a bounded area (docs previews, a game shell column).\n * `exiting` implies this, since the reveal needs the app behind it.\n */\n contained?: boolean\n /**\n * Optional backdrop image (e.g. the app's `dot-pattern.webp`) for a\n * pixel-perfect match with the game shell. Omit to use the token-derived\n * dotted backdrop.\n */\n backgroundImageUrl?: string\n className?: string\n}\n\n/**\n * Determinate loading splash for game entry: dotted brand backdrop, monogram,\n * and a progress bar with a shimmer that keeps signalling life while a stage\n * is held. Exits with a zoom-out reveal, or a plain fade under\n * `prefers-reduced-motion`.\n */\nexport function GameLoadingBlock({\n progress = 0,\n label = \"\",\n delayed = false,\n exiting = false,\n onExitEnd,\n contained = false,\n backgroundImageUrl,\n className,\n}: GameLoadingBlockProps) {\n const [go, setGo] = React.useState(false)\n const [reduced, setReduced] = React.useState(false)\n\n React.useEffect(() => {\n if (typeof window !== \"undefined\" && typeof window.matchMedia === \"function\") {\n setReduced(window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches)\n }\n }, [])\n\n React.useEffect(() => {\n if (!exiting) return\n const raf = requestAnimationFrame(() => setGo(true))\n const timer = setTimeout(() => onExitEnd?.(), reduced ? 240 : 520)\n return () => {\n cancelAnimationFrame(raf)\n clearTimeout(timer)\n }\n }, [exiting, reduced, onExitEnd])\n\n // `exiting` must be absolute so the app shows through behind the reveal.\n const isAbsolute = exiting || contained\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading game\"\n data-slot=\"game-loading-block\"\n className={cn(\n \"z-50 inset-0 flex flex-col items-center justify-center gap-8 overflow-hidden\",\n isAbsolute ? \"absolute\" : \"fixed\",\n // Token-derived dotted brand backdrop; skipped when a real image is passed.\n !backgroundImageUrl && \"game-loader-backdrop\",\n backgroundImageUrl && \"bg-primary bg-cover bg-center bg-no-repeat\",\n exiting && (reduced ? \"transition-opacity duration-200\" : \"transition-opacity duration-[180ms] delay-[260ms]\"),\n exiting && go ? \"opacity-0\" : \"opacity-100\",\n className\n )}\n style={backgroundImageUrl ? { backgroundImage: `url(${backgroundImageUrl})` } : undefined}\n >\n <svg\n width=\"120\"\n height=\"120\"\n viewBox=\"0 0 697.31 697.31\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n className={cn(\"game-loader-mark fill-on-primary\", exiting && go && !reduced && \"game-loader-mark-exit\")}\n >\n <path d={MONOGRAM_D} />\n </svg>\n\n {!exiting && (\n <div className=\"flex w-[200px] flex-col items-start gap-3.5\">\n <div className=\"relative h-2 w-full overflow-hidden rounded-xs bg-on-primary/25\">\n <div\n className=\"absolute inset-y-0 left-0 overflow-hidden rounded-xs bg-on-primary\"\n style={{ width: `${progress}%` }}\n >\n <span aria-hidden=\"true\" className=\"game-loader-shimmer absolute inset-y-0 left-[-60%] w-[60%]\" />\n </div>\n </div>\n <span className=\"caption text-on-primary/90\">\n {delayed ? \"Taking longer than usual…\" : label}\n </span>\n </div>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,SAAS,uBAAuB;AAChC,SAAS,aAAa,0BAA0B;;;ACJhD,SAAS,YAA6B;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADMS,cAuBH,YAvBG;AAHT,SAAS,UAAU,IAEsC;AAFtC,MACd,kBADc,IACd;AAEH,SAAO,oBAAC,mBAAmB,MAAnB,iBAAwB,aAAU,eAAgB,MAAO;AACnE;AAEA,SAAS,cAAc,IAGkC;AAHlC,eACrB;AAAA;AAAA,EAfF,IAcuB,IAElB,kBAFkB,IAElB;AAAA,IADH;AAAA;AAGA,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,0DAA0D,SAAS;AAAA,OAC7E;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAIkC;AAJlC,eACxB;AAAA;AAAA,IACA;AAAA,EA7BF,IA2B0B,IAGrB,kBAHqB,IAGrB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,oBAAC,mBAAmB,QAAnB,EAA0B,WAAU,QACnC;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQE;AAAA;AAAA,QACD,oBAAC,mBAAgB,WAAU,qHAAoH;AAAA;AAAA;AAAA,EACjJ,GACF;AAEJ;AAEA,SAAS,iBAAiB,IAIkC;AAJlC,eACxB;AAAA;AAAA,IACA;AAAA,EAnDF,IAiD0B,IAGrB,kBAHqB,IAGrB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,OACN,QAHL;AAAA,MAKC,8BAAC,SAAI,WAAW,GAAG,aAAa,SAAS,GAAI,UAAS;AAAA;AAAA,EACxD;AAEJ;;;AE7DA,YAAY,WAAW;AACvB,SAAS,OAAAA,YAA8B;AACvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACTP,SAAS,WAA8B;AACvC,SAAS,YAAY;;;ACWb,gBAAAC,YAAA;AAXR,IAAM,aAAa;AAEnB,SAAS,QAAQ,IAAsD;AAAtD,eAAE,YAJnB,IAIiB,IAAgB,kBAAhB,IAAgB,CAAd;AACjB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAW,GAAG,6CAA6C,SAAS;AAAA,OAChE,QAJL;AAAA,MAME,gBAAM,KAAK,EAAE,QAAQ,WAAW,GAAG,CAAC,GAAG,MACtC,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO;AAAA,YACL,UAAU;AAAA,YACV,MAAM;AAAA,YACN,KAAK;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,iBAAiB;AAAA,YACjB,iBAAiB;AAAA,YACjB,WAAW,2BAA2B,IAAI,EAAE;AAAA,YAC5C,WAAW,4BAA6B,IAAI,MAAO,UAAU;AAAA,UAC/D;AAAA;AAAA,QAZK;AAAA,MAaP,CACD;AAAA;AAAA,EACH;AAEJ;;;AD8JW,SAgBH,UAhBG,OAAAC,MAgBH,QAAAC,aAhBG;AAtLX,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA;AAAA,QAEP,SACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMF,oBACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAaF,WACE;AAAA;AAAA,QAEF,sBACE;AAAA,QACF,UACE;AAAA;AAAA,QAEF,qBACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMF,SACE;AAAA,QACF,oBACE;AAAA;AAAA;AAAA;AAAA,QAKF,OACE;AAAA,QACF,mBACE;AAAA,QACF,4BACE;AAAA,QACF,mBACE;AAAA,QACF,2BACE;AAAA,QACF,qBACE;AAAA,QACF,oBACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,QAKJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,IAAM,iBAAyC;AAAA,EAC7C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AACb;AAaA,IAAM,cACJ;AACF,IAAM,cACJ;AAGF,IAAM,mBAA2C;AAAA,EAC/C,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,4BAA4B;AAAA,EAC5B,mBAAmB;AAAA,EACnB,2BAA2B;AAC7B;AAEA,SAAS,OAAO,IAmBX;AAnBW,eACd;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV;AAAA,EA1IF,IAmIgB,IAQX,kBARW,IAQX;AAAA,IAPH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAeA,QAAM,iBACJ,YAAY,aAAa,YAAY,sBACrC,YAAY;AACd,QAAM,gBACJ,YAAY,qBACZ,YAAY,8BACZ,YAAY;AACd,QAAM,cAAc,iBAAkB,WAAW;AACjD,MAAI,QAAQ,IAAI,aAAa,gBAAgB,WAAW,CAAC,kBAAkB,CAAC,eAAe;AACzF,YAAQ;AAAA,MACN,qFAAgF,OAAO;AAAA,IACzF;AAAA,EACF;AAEA,QAAM,cAAc;AAAA,IAClB,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,gBAAgB,WAAW;AAAA,IAC3B,gBAAgB,eAAe;AAAA,IAC/B,WAAW;AAAA,MACT,eAAe,EAAE,SAAS,MAAM,UAAU,CAAC;AAAA,MAC3C,eAAe;AAAA,MACf,WAAW;AAAA,IACb;AAAA,IACA,aAAa,WAAW;AAAA,KACrB;AASL,MAAI,SAAS;AACX,WAAO,gBAAAD,KAAC,KAAK,MAAL,iCAAc,cAAd,EAA4B,WAAS;AAAA,EAC/C;AAEA,SACE,gBAAAC,MAAC,2CAAW,cAAX,EAIE;AAAA,mBAAe,WAAW,iBAAiB,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,WACzE,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,QACX,WAAU;AAAA,QACV,OAAO,EAAE,YAAY,iBAAiB,OAAO,EAAE;AAAA;AAAA,IACjD,IACE;AAAA,IACH,UACC,gBAAAC,MAAA,YACE;AAAA,sBAAAD,KAAC,UAAK,WAAU,oDAAmD,eAAW,MAC3E,UACH;AAAA,MACA,gBAAAA,KAAC,UAAK,WAAU,qDACd,0BAAAA,KAAC,WAAQ,WAAW,eAAe,sBAAQ,IAAI,GAAG,GACpD;AAAA,OACF,IACE;AAAA,MACN;AAEJ;;;AEvNA,SAAS,OAAAE,YAA8B;AACvC,SAAS,QAAAC,aAAY;AAgDjB,gBAAAC,YAAA;AA5CJ,IAAM,2BAA2BC;AAAA;AAAA,EAE/B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA;AAAA;AAAA,QAGF,oBACE;AAAA;AAAA,QAEF,OACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,IAUrB;AAVqB,eACxB;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV;AAAA,EAzCF,IAoC0B,IAMrB,kBANqB,IAMrB;AAAA,IALH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAMA,QAAM,OAAO,UAAUC,MAAK,OAAO;AAEnC,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,WAAW,GAAG,yBAAyB,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,OAChE,QALL;AAAA,MAOE;AAAA;AAAA,EACH;AAEJ;;;AH6Ea,gBAAAG,MAyGT,QAAAC,aAzGS;AA7Fb,IAAM,yBAAyBC;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,SAAS;AAAA,MACX;AAAA,MACA,QAAQ;AAAA;AAAA;AAAA;AAAA,QAIN,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,MAChB,EAAE,QAAQ,OAAO,MAAM,MAAM,OAAO,UAAU;AAAA,MAC9C,EAAE,QAAQ,OAAO,MAAM,MAAM,OAAO,UAAU;AAAA,MAC9C,EAAE,QAAQ,SAAS,MAAM,MAAM,OAAO,UAAU;AAAA,MAChD,EAAE,QAAQ,SAAS,MAAM,MAAM,OAAO,YAAY;AAAA,IACpD;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACR;AAAA,EACF;AACF;AASA,IAAM,sBAA0D;AAAA,EAC9D,IAAI;AAAA,EACJ,IAAI;AACN;AAOA,IAAM,gBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAGA,IAAM,eAAsD;AAAA,EAC1D,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAIA,IAAM,eAAsD;AAAA,EAC1D,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAOA,IAAM,gBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAGA,SAAS,sBAAsB,SAAiD;AAC9E,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO,gBAAAF,KAAC,QAAK;AAAA,IACf,KAAK;AACH,aAAO,gBAAAA,KAAC,iBAAc;AAAA,IACxB,KAAK;AACH,aAAO,gBAAAA,KAAC,WAAQ;AAAA,IAClB,KAAK;AACH,aAAO,gBAAAA,KAAC,gBAAa;AAAA,EACzB;AACF;AAwCA,SAAS,eAAe,IAaA;AAbA,eACtB;AAAA,cAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,EApMF,IAyLwB,IAYnB,kBAZmB,IAYnB;AAAA,IAXH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAIA,MAAI,CAAC,SAAS,CAAC,aAAa;AAC1B,QAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAGA,QAAM,iBACJ,WAAW,WAAW,QAAQ,WAAW,SAAS,UAAU;AAE9D,QAAM,QAAQ,mBAAmB;AACjC,QAAM,eAAe,SAAS,EAAE,SAAS;AACzC,QAAM,WAAW,SAAS;AAC1B,QAAM,eAAe,SAAS,SAAY,sBAAsB,OAAO,IAAI;AAC3E,QAAM,kBAAkB,OAAO,cAAc;AAG7C,QAAM,gBAAgB;AACtB,QAAM,aAAa;AACnB,QAAM,cAAc,YAAY,YAAY,YAAY;AACxD,QAAM,OAAO,cAAc,UAAU;AACrC,QAAM,WAAW,cAAc,cAAc;AAG7C,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,QAAI,SAAS,WAAW,QAAQ,SAAS,GAAG;AAC1C,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,SAAS,QAAQ;AACpB,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,QAAM,OACJ,gBAAAC,MAAC,SAAI,WAAU,WACZ;AAAA,YACC,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT,SAAS,OAAO,kCAAkC;AAAA,UAClD,cAAc,OAAO;AAAA,UACrB,cAAe,SAAS,OAAO,SAAS,SAAU;AAAA,QACpD;AAAA,QAEC;AAAA;AAAA,IACH,IACE;AAAA,IACH,cACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT,SAAS,OACL,4CACA;AAAA,UACJ,aAAa,OAAO;AAAA,QACtB;AAAA,QAEC;AAAA;AAAA,IACH,IACE;AAAA,KACN;AAKF,QAAM,cAAc,kBAClB,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,SAAS;AAAA,MACT,cAAY;AAAA,MACZ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,QAKT;AAAA,QACA,SAAS,OAAO,kDAAkD;AAAA,QAClE,cAAc,OAAO;AAAA,MACvB;AAAA,MAEA,0BAAAA,KAAC,KAAE;AAAA;AAAA,EACL,IACE;AAGJ,QAAM,aAAa,WACjB,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA,SAAS,OAAO,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,QAK7B,eAAe,KAAK,SAAS,OAAO,UAAU;AAAA,QAC9C,aAAa,OAAO;AAAA,MACtB;AAAA,MAEC;AAAA;AAAA,EACH,IACE;AAEJ,MAAI,OAAO;AACT,WACE,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,aAAW;AAAA,QACX,aAAU;AAAA,QACV,gBAAc;AAAA,QACd,eAAY;AAAA,QACZ,aAAW;AAAA,QACX,WAAW;AAAA,UACT,uBAAuB,EAAE,SAAS,QAAQ,OAAO,KAAK,CAAC;AAAA,UACvD,eAAe,oBAAoB,IAAI,IAAI;AAAA;AAAA;AAAA;AAAA,UAI3C,CAAC,SAAS,gBAAgB;AAAA,UAC1B;AAAA,QACF;AAAA,SACI,QAhBL;AAAA,QAmBE;AAAA;AAAA,UAED,gBAAAD,KAAC,SAAI,WAAU,mCAAmC,gBAAK;AAAA,UAEvD,gBAAAA,KAAC,SAAI,WAAU,yDACZ,uBACH;AAAA,UAGC,SACC,gBAAAA,KAAC,SAAI,WAAU,+GACZ,qBAAW,QAAQ,eAAe,UAAU,GAC/C,IACE;AAAA;AAAA;AAAA,IACN;AAAA,EAEJ;AAGA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAW;AAAA,MACX,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,eAAY;AAAA,MACZ,aAAW;AAAA,MACX,WAAW;AAAA,QACT,uBAAuB,EAAE,SAAS,QAAQ,SAAS,KAAK,CAAC;AAAA,QACzD;AAAA,MACF;AAAA,OACI,QAXL;AAAA,MAaE;AAAA;AAAA,QACD,gBAAAD,KAAC,SAAI,WAAU,mCAAmC,gBAAK;AAAA,QACvD,gBAAAA,KAAC,SAAI,WAAU,2BAA2B,uBAAY;AAAA,QACrD,WAAW,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAM3B,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,SAAS,OAAO,WAAW;AAAA,cAC7B;AAAA,cAEC,kBAAQ,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,MAC9B,gBAAAA,KAAO,gBAAN,EAAwB,qBAAW,MAAM,eAAe,UAAU,KAA9C,CAAgD,CACtE;AAAA;AAAA,UACH;AAAA,YACE;AAAA;AAAA;AAAA,EACN;AAEJ;AASA,SAAS,WACP,MACA,SACA,MACiB;AAEjB,MAAU,qBAAe,IAAI,EAAG,QAAO;AACvC,SACE,gBAAAA,KAAC,UAAO,SAAkB,MACvB,gBACH;AAEJ;AAYA,IAAM,QAAQ;AACd,IAAM,gBAAgB;;;AIjatB,SAAS,eAAe,4BAA4B;AAQ3C,gBAAAG,MA2CL,QAAAC,aA3CK;AAHT,SAAS,YAAY,IAEsC;AAFtC,MAChB,kBADgB,IAChB;AAEH,SAAO,gBAAAD,KAAC,qBAAqB,MAArB,iBAA0B,aAAU,kBAAmB,MAAO;AACxE;AAEA,SAAS,mBAAmB,IAEkC;AAFlC,MACvB,kBADuB,IACvB;AAEH,SACE,gBAAAA,KAAC,qBAAqB,SAArB,iBAA6B,aAAU,0BAA2B,MAAO;AAE9E;AAEA,SAAS,kBAAkB,IAEkC;AAFlC,MACtB,kBADsB,IACtB;AAEH,SACE,gBAAAA,KAAC,qBAAqB,QAArB,iBAA4B,aAAU,yBAA0B,MAAO;AAE5E;AAEA,SAAS,mBAAmB,IAGkC;AAHlC,eAC1B;AAAA;AAAA,EA/BF,IA8B4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,IAMzB;AANyB,eAC1B;AAAA;AAAA,IACA,OAAO;AAAA,EAhDT,IA8C4B,IAGvB,kBAHuB,IAGvB;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAC,MAAC,qBACC;AAAA,oBAAAD,KAAC,sBAAmB;AAAA,IACpB,gBAAAA;AAAA,MAAC,qBAAqB;AAAA,MAArB;AAAA,QACC,aAAU;AAAA,QACV,aAAW;AAAA,QACX,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,SACI;AAAA,IACN;AAAA,KACF;AAEJ;AAEA,SAAS,kBAAkB,IAGK;AAHL,eACzB;AAAA;AAAA,EAtEF,IAqE2B,IAEtB,kBAFsB,IAEtB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB,IAGK;AAHL,eACzB;AAAA;AAAA,EAtFF,IAqF2B,IAEtB,kBAFsB,IAEtB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAGkC;AAHlC,eACxB;AAAA;AAAA,EAtGF,IAqG0B,IAErB,kBAFqB,IAErB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,uBAAuB,IAGkC;AAHlC,eAC9B;AAAA;AAAA,EAtHF,IAqHgC,IAE3B,kBAF2B,IAE3B;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,0DAA0D,SAAS;AAAA,OAC7E;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAGM;AAHN,eACxB;AAAA;AAAA,EAnIF,IAkI0B,IAErB,kBAFqB,IAErB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB,IAMsC;AANtC,eACzB;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EArJT,IAkJ2B,IAItB,kBAJsB,IAItB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAIA,SACE,gBAAAA,KAAC,UAAO,SAAkB,MAAY,SAAO,MAAC,WAAW,GAAG,oDAAoD,SAAS,GACvH,0BAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,OACN;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,kBAAkB,IAMsC;AANtC,eACzB;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EAtKT,IAmK2B,IAItB,kBAJsB,IAItB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAIA,SACE,gBAAAA,KAAC,UAAO,SAAkB,MAAY,SAAO,MAAC,WAAW,GAAG,oDAAoD,SAAS,GACvH,0BAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,OACN;AAAA,EACN,GACF;AAEJ;;;AChLA,SAAS,eAAe,4BAA4B;AAK3C,gBAAAE,YAAA;AAHT,SAAS,YAAY,IAEsC;AAFtC,MAChB,kBADgB,IAChB;AAEH,SAAO,gBAAAA,KAAC,qBAAqB,MAArB,iBAA0B,aAAU,kBAAmB,MAAO;AACxE;;;ACLA,SAAS,UAAU,uBAAuB;AAYtC,gBAAAC,YAAA;AARJ,SAAS,OAAO,IAMb;AANa,eACd;AAAA;AAAA,IACA,OAAO;AAAA,EATT,IAOgB,IAGX,kBAHW,IAGX;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAGkC;AAHlC,eACnB;AAAA;AAAA,EA5BF,IA2BqB,IAEhB,kBAFgB,IAEhB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,wDAAwD,SAAS;AAAA,OAC3E;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAGkC;AAHlC,eACtB;AAAA;AAAA,EAzCF,IAwCwB,IAEnB,kBAFmB,IAEnB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAAuD;AAAvD,eAAE,YAxDvB,IAwDqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAAsD;AAAtD,eAAE,YAzEvB,IAyEqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAGM;AAHN,eACxB;AAAA;AAAA,EAvFF,IAsF0B,IAErB,kBAFqB,IAErB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;ACnGA,SAAS,OAAAC,YAA8B;AACvC,SAAS,QAAAC,aAAY;AA4Db,gBAAAC,YAAA;AAxDR,IAAM,gBAAgBC;AAAA,EAClB;AAAA,EACA;AAAA,IACI,UAAU;AAAA,MACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASL,OAAO;AAAA,QACP,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,iBAAiB;AAAA;AAAA;AAAA;AAAA,QAKjB,MAAM;AAAA,QACN,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,gBAAgB;AAAA,MAEpB;AAAA,MACA,MAAM;AAAA,QACF,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACR;AAAA,IACJ;AAAA,IACA,iBAAiB;AAAA,MACb,SAAS;AAAA,MACT,MAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAEA,SAAS,MAAM,IAOiD;AAPjD,eACX;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,EAvDd,IAmDe,IAKR,kBALQ,IAKR;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAIA,QAAM,OAAO,UAAUC,MAAK,OAAO;AAEnC,SACI,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACG,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW,GAAG,cAAc,EAAE,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,OACrD;AAAA,EACR;AAER;;;ACnEA,YAAYG,YAAW;AACvB,SAAS,MAAM,KAAAC,UAAS;AA8EkB,gBAAAC,OA6EpC,QAAAC,aA7EoC;AAxB1C,SAAS,OAAO,IAaA;AAbA,eACd;AAAA,YAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EApEF,IAyDgB,IAYX,kBAZW,IAYX;AAAA,IAXH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,MAAI,CAAC,SAAS,CAAC,aAAa;AAC1B,QAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,QAAQ;AACxB,QAAM,cAAc,QAAQ,SAAY,gBAAAD,MAAC,QAAK,WAAU,UAAS,IAAK;AACtE,QAAM,kBAAkB,OAAO,cAAc;AAC7C,QAAM,cAAc,OAAO,YAAY;AACvC,QAAM,mBAAmB,eAAe,QAAQ,MAAM;AAEtD,MAAI,QAAQ,IAAI,aAAa,gBAAgB,kBAAkB;AAC7D,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACA,QAAM,kBAAkB,cAAc,SAAY;AAElD,MACE,QAAQ,IAAI,aAAa,gBACzB,oBAAoB,UACpB,oBAAoB,QACpB,CAAO,sBAAe,eAAe,KACrC,OAAO,aAAa,YACpB;AACA,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmB,cACrB;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV;AAAA,IACA,WAAW,CAAC,MAA2C;AACrD,UAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,UAAE,eAAe;AACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF,IACA,CAAC;AAEL;AAAA;AAAA;AAAA;AAAA,IAIE,gBAAAA,MAAC,SAAI,WAAU,qBACf,0BAAAC;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,kBAAgB,cAAc,SAAS;AAAA,QACvC,WAAW;AAAA,UACT;AAAA;AAAA;AAAA,UAGA,mBAAmB;AAAA,UACnB,eACE;AAAA,UACF;AAAA,QACF;AAAA,QACA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,UAKL,YAAY,+DAA+D,KAAK;AAAA,WAC7E;AAAA,SAED,mBACA,QArBL;AAAA,QAwBE;AAAA,oBACC,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,eAAW;AAAA,cACX,WAAU;AAAA,cAET;AAAA;AAAA,UACH,IACE;AAAA,UAGJ,gBAAAC,MAAC,SAAI,WAAU,kBACZ;AAAA,oBACC,gBAAAD,MAAC,OAAE,WAAU,mDAAmD,iBAAM,IACpE;AAAA,YACH,cACC,gBAAAA,MAAC,OAAE,WAAU,2EACV,uBACH,IACE;AAAA,aACN;AAAA,UAGC,oBAAoB,UAAa,oBAAoB,OACpD,gBAAAA,MAAC,SAAI,WAAU,8BAA8B,UAAAE,YAAW,iBAAiB,QAAQ,GAAE,IACjF;AAAA,UAGH,kBACC,gBAAAF;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAS,CAAC,MAAM;AACd,kBAAE,gBAAgB;AAClB;AAAA,cACF;AAAA,cACA,cAAY;AAAA,cACZ,WAAU;AAAA,cAEV,0BAAAA,MAACG,IAAA,EAAE;AAAA;AAAA,UACL,IACE;AAAA;AAAA;AAAA,IACN,GACA;AAAA;AAEJ;AAOA,SAASD,YAAW,MAAuB,UAAwC;AACjF,MAAU,sBAAe,IAAI,EAAG,QAAO;AACvC,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAU;AAAA,MACV,SAAS,CAAC,MAAM;AACd,UAAE,gBAAgB;AAClB;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACpNA,YAAYI,YAAW;AACvB,SAAS,gBAAgB;AACzB,SAAS,QAAAC,aAAY;AAkIjB,SAWE,OAAAC,OAXF,QAAAC,aAAA;AAvGJ,IAAM,YAAY;AAElB,IAAM,UAAU;AAChB,IAAM,WAAW;AACjB,IAAM,SAAS;AAIf,SAAS,OAAO,QAA6B,OAAe,UAAkB;AAC5E,QAAM,MAAM,OAAO,iBAAiB,KAAK,EAAE,KAAK;AAChD,QAAM,QAAQ,WAAW,GAAG;AAC5B,MAAI,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACpC,SAAO,IAAI,SAAS,IAAI,IAAI,QAAQ,QAAQ;AAC9C;AAEA,SAAS,iBAAiB,IAIM;AAJN,eACxB;AAAA;AAAA,IACA;AAAA,EAhDF,IA8C0B,IAGrB,kBAHqB,IAGrB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,QAAM,SAAe,cAAoB,IAAI;AAC7C,QAAM,YAAkB,cAAwB,IAAI;AACpD,QAAM,WAAiB,cAAsB,IAAI;AAEjD,QAAM,QAAc,gBAAS,QAAQ,QAAQ;AAC7C,MAAI,QAAQ,IAAI,aAAa,gBAAgB,MAAM,SAAS,WAAW;AACrE,YAAQ;AAAA,MACN,qBAAqB,MAAM,MAAM,sCAAiC,SAAS;AAAA,IAC7E;AAAA,EACF;AACA,QAAM,cAAc,MAAM;AAAA,IACxB,CAAC,UACO,sBAAqC,KAAK,KAAK,MAAM,MAAM;AAAA,EACrE;AAKA,QAAM,UAAgB,mBAAY,MAAM;AACtC,UAAM,MAAM,OAAO;AACnB,UAAM,SAAS,UAAU;AACzB,QAAI,CAAC,OAAO,CAAC,OAAQ;AACrB,UAAM,SAAS,IAAI;AAAA,MACjB;AAAA,IACF,EAAE,WAAW;AACb,QAAI,CAAC,QAAQ;AACX,aAAO,MAAM,UAAU;AACvB,eAAS,UAAU;AACnB;AAAA,IACF;AACA,UAAM,OAAO,OAAO;AACpB,UAAM,QAAQ,IAAI,eAAe,OAAO,aAAa,OAAO;AAE5D,UAAM,QAAQ,SAAS,YAAY;AACnC,UAAM,cAAc,CAAC,SAAS,OAAQ,SAAS;AAC/C,aAAS,UAAU;AAEnB,QAAI,OAAO;AAET,aAAO,MAAM,aAAa;AAAA,IAC5B,OAAO;AACL,YAAM,SAAS,iBAAiB,GAAG;AACnC,YAAM,OAAO,OAAO,QAAQ,wBAAwB,OAAO;AAC3D,YAAM,QAAQ,OAAO,QAAQ,yBAAyB,QAAQ;AAC9D,YAAM,SAAS,OAAO,iBAAiB,yBAAyB,EAAE,KAAK,KAAK;AAC5E,YAAM,SAAS,cAAc,QAAQ;AACrC,YAAM,UAAU,cAAc,OAAO;AACrC,aAAO,MAAM,aAAa,QAAQ,MAAM,MAAM,MAAM,WAAW,OAAO,MAAM,MAAM;AAAA,IACpF;AACA,WAAO,MAAM,UAAU;AACvB,WAAO,MAAM,OAAO,GAAG,IAAI;AAC3B,WAAO,MAAM,QAAQ,GAAG,KAAK;AAC7B,QAAI,OAAO;AACT,4BAAsB,MAAM;AAC1B,YAAI,UAAU,QAAS,WAAU,QAAQ,MAAM,aAAa;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,EAAM,uBAAgB,MAAM;AAC1B,YAAQ;AAAA,EACV,GAAG,CAAC,SAAS,MAAM,MAAM,CAAC;AAE1B,QAAM,YAAkB,cAAsB,IAAI;AAClD,EAAM,iBAAU,MAAM;AACpB,UAAM,MAAM,OAAO;AACnB,QAAI,CAAC,IAAK;AACV,UAAM,KAAK,IAAI,eAAe,CAAC,YAAY;AAtH/C,UAAAC,KAAAC;AAuHM,YAAM,SAAQA,OAAAD,MAAA,QAAQ,CAAC,MAAT,gBAAAA,IAAY,YAAY,UAAxB,OAAAC,MAAiC,IAAI;AAInD,UAAI,UAAU,YAAY,QAAQ,UAAU,YAAY,OAAO;AAC7D,iBAAS,UAAU;AACnB,gBAAQ;AAAA,MACV;AACA,gBAAU,UAAU;AAAA,IACtB,CAAC;AACD,OAAG,QAAQ,GAAG;AACd,WAAO,MAAM,GAAG,WAAW;AAAA,EAC7B,GAAG,CAAC,OAAO,CAAC;AAEZ,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI,QATL;AAAA,MAWC;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,eAAW;AAAA,YACX,aAAU;AAAA,YACV,WAAU;AAAA;AAAA,QACZ;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,qBAAqB,IAW3B;AAX2B,eAC5B;AAAA;AAAA,IACA,SAAS;AAAA,IACT,UAAU;AAAA,IACV;AAAA,EAhKF,IA4J8B,IAKzB,kBALyB,IAKzB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAQA,QAAM,OAAO,UAAUI,MAAK,OAAO;AACnC,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,eAAa,UAAU;AAAA,MACvB,gBAAc,SAAS,SAAS;AAAA,MAChC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA;AAAA;AAAA,QAGA;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAbL;AAAA,MAeE;AAAA;AAAA,EACH;AAEJ;AAOA,SAAS,mBAAmB,IAQzB;AARyB,eAC1B;AAAA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,EAtMF,IAmM4B,IAIvB,kBAJuB,IAIvB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAMA,QAAM,OAAO,UAAUI,MAAK,OAAO;AACnC,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAXL;AAAA,MAaE,wCAAY,gBAAAA,MAAC,YAAS;AAAA;AAAA,EACzB;AAEJ;;;AC7NA,SAAS,cAAc,sBAAsB;AAC7C,SAAS,QAAAK,aAAY;AAKZ,gBAAAC,OAgFL,QAAAC,aAhFK;AADT,SAAS,WAAW,IAA2C;AAA3C,MAAK,kBAAL,IAAK;AACvB,SAAO,gBAAAD,MAAC,wBAAI,cAAW,cAAa,aAAU,gBAAiB,MAAO;AACxE;AAEA,SAAS,eAAe,IAAqD;AAArD,eAAE,YAV1B,IAUwB,IAAgB,kBAAhB,IAAgB,CAAd;AACxB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAAqD;AAArD,eAAE,YAvB1B,IAuBwB,IAAgB,kBAAhB,IAAgB,CAAd;AACxB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oCAAoC,SAAS;AAAA,OACvD;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAMrB;AANqB,eACtB;AAAA;AAAA,IACA;AAAA,EAnCF,IAiCwB,IAGnB,kBAHmB,IAGnB;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,QAAM,OAAO,UAAUE,MAAK,OAAO;AAEnC,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,uDAAuD,SAAS;AAAA,OAC1E;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAAuD;AAAvD,eAAE,YAnD1B,IAmDwB,IAAgB,kBAAhB,IAAgB,CAAd;AACxB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,iBAAc;AAAA,MACd,gBAAa;AAAA,MACb,WAAW,GAAG,iDAAiD,SAAS;AAAA,OACpE;AAAA,EACN;AAEJ;AAEA,SAAS,oBAAoB,IAIE;AAJF,eAC3B;AAAA;AAAA,IACA;AAAA,EAlEF,IAgE6B,IAGxB,kBAHwB,IAGxB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAW,GAAG,oBAAoB,SAAS;AAAA,OACvC,QALL;AAAA,MAOE,wCAAY,gBAAAA,MAAC,gBAAa;AAAA;AAAA,EAC7B;AAEJ;AAEA,SAAS,mBAAmB,IAGK;AAHL,eAC1B;AAAA;AAAA,EAnFF,IAkF4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAW,GAAG,2CAA2C,SAAS;AAAA,OAC9D,QALL;AAAA,MAOC;AAAA,wBAAAD,MAAC,kBAAe,WAAU,UAAS;AAAA,QACnC,gBAAAA,MAAC,UAAK,WAAU,WAAU,kBAAI;AAAA;AAAA;AAAA,EAChC;AAEJ;;;AChGA,YAAYG,YAAW;AACvB;AAAA,EACE,mBAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAEK;;;ACTP,SAAS,WAAW,mBAAAC,kBAAiB,qBAAqB;AAC1D,SAAS,UAAU,uBAAuB;AAOjC,gBAAAC,OAkCL,QAAAC,aAlCK;AAHT,SAAS,OAAO,IAEsC;AAFtC,MACX,kBADW,IACX;AAEH,SAAO,gBAAAD,MAAC,gBAAgB,MAAhB,iBAAqB,aAAU,YAAa,MAAO;AAC7D;AAEA,SAAS,YAAY,IAEkC;AAFlC,MAChB,kBADgB,IAChB;AAEH,SAAO,gBAAAA,MAAC,gBAAgB,OAAhB,iBAAsB,aAAU,kBAAmB,MAAO;AACpE;AAEA,SAAS,YAAY,IAEkC;AAFlC,MAChB,kBADgB,IAChB;AAEH,SAAO,gBAAAA,MAAC,gBAAgB,OAAhB,iBAAsB,aAAU,kBAAmB,MAAO;AACpE;AAIA,IAAM,oBAAoB;AAAA,EACxB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAAS,cAAc,IASpB;AAToB,eACrB;AAAA;AAAA,IACA,OAAO;AAAA,IACP,WAAW;AAAA,IACX;AAAA,EAtCF,IAkCuB,IAKlB,kBALkB,IAKlB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAMA,SACE,gBAAAC;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,iBAAe,WAAW,KAAK;AAAA,MAC/B,WAAW;AAAA,QACT,kBAAkB,IAAI;AAAA,QACtB;AAAA,QACA;AAAA,MACF;AAAA,OACI,QATL;AAAA,MAaC,iBAAe,YAAY;AAAA,MAC3B,eAAe,CAAC,MAAM;AA3D5B,YAAAC;AA4DQ,YAAI,UAAU;AAAE,YAAE,eAAe;AAAG;AAAA,QAAO;AAC3C,SAAAA,MAAA,MAAM,kBAAN,gBAAAA,IAAA,YAAsB;AAAA,MACxB;AAAA,MACA,WAAW,CAAC,MAAM;AA/DxB,YAAAA;AAgEQ,YAAI,YAAY,CAAC,SAAS,KAAK,aAAa,SAAS,EAAE,SAAS,EAAE,GAAG,GAAG;AACtE,YAAE,eAAe;AACjB;AAAA,QACF;AACA,SAAAA,MAAA,MAAM,cAAN,gBAAAA,IAAA,YAAkB;AAAA,MACpB;AAAA,MAEC;AAAA;AAAA,QACD,gBAAAF,MAAC,gBAAgB,MAAhB,EAAqB,SAAO,MAC3B,0BAAAA,MAACG,kBAAA,EAAgB,WAAW,GAAG,UAAU,WAAW,eAAe,YAAY,GAAG,GACpF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,cAAc,IASkC;AATlC,eACrB;AAAA;AAAA,IACA;AAAA,IAIA,qBAAW;AAAA,IACX,QAAQ;AAAA,EAtFV,IA+EuB,IAQlB,kBARkB,IAQlB;AAAA,IAPH;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAH,MAAC,gBAAgB,QAAhB,EACC,0BAAAC;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA,aAAa,YACb;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,OACI,QAVL;AAAA,MAYC;AAAA,wBAAAD,MAAC,wBAAqB;AAAA,QACtB,gBAAAA;AAAA,UAAC,gBAAgB;AAAA,UAAhB;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,aAAa,YACb;AAAA,YACF;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QACA,gBAAAA,MAAC,0BAAuB;AAAA;AAAA;AAAA,EAC1B,GACF;AAEJ;AAEA,SAAS,YAAY,IAGkC;AAHlC,eACnB;AAAA;AAAA,EAxHF,IAuHqB,IAEhB,kBAFgB,IAEhB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,0DAA0D,SAAS;AAAA,OAC7E;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAIkC;AAJlC,eAClB;AAAA;AAAA,IACA;AAAA,EAtIF,IAoIoB,IAGf,kBAHe,IAGf;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAC;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YAEV,0BAAAA,MAAC,gBAAgB,eAAhB,EACC,0BAAAA,MAAC,aAAU,WAAU,mCAAkC,GACzD;AAAA;AAAA,QACF;AAAA,QACA,gBAAAA,MAAC,gBAAgB,UAAhB,EAA0B,UAAS;AAAA;AAAA;AAAA,EACtC;AAEJ;AAEA,SAAS,gBAAgB,IAGkC;AAHlC,eACvB;AAAA;AAAA,EAhKF,IA+JyB,IAEpB,kBAFoB,IAEpB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iEAAiE,SAAS;AAAA,OACpF;AAAA,EACN;AAEJ;AAEA,SAAS,qBAAqB,IAGkC;AAHlC,eAC5B;AAAA;AAAA,EA7KF,IA4K8B,IAEzB,kBAFyB,IAEzB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC,0BAAAA,MAAC,iBAAc,WAAU,UAAS;AAAA;AAAA,EACpC;AAEJ;AAEA,SAAS,uBAAuB,IAGkC;AAHlC,eAC9B;AAAA;AAAA,EA/LF,IA8LgC,IAE3B,kBAF2B,IAE3B;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC,0BAAAA,MAACG,kBAAA,EAAgB,WAAU,UAAS;AAAA;AAAA,EACtC;AAEJ;;;ADlEY,gBAAAC,OA+DR,QAAAC,aA/DQ;AApHZ,SAAS,SAAS,IAWf;AAXe,eAChB;AAAA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,EA/BF,IAwBkB,IAQb,kBARa,IAQb;AAAA,IAPH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAKA,QAAM,oBAAoB,qBAAqB;AAE/C,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,QACP;AAAA,MACF;AAAA,MACA;AAAA,MACA,YAAY;AAAA,QACV,qBAAqB,CAAC,SACpB,KAAK,eAAe,WAAW,EAAE,OAAO,QAAQ,CAAC;AAAA,SAChD;AAAA,MAEL,YAAY;AAAA,QACV,MAAM,GAAG,SAAS,kBAAkB,IAAI;AAAA,QACxC,QAAQ;AAAA,UACN;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,OAAO,GAAG,8BAA8B,kBAAkB,KAAK;AAAA,QAC/D,KAAK;AAAA;AAAA;AAAA,UAGH;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,iBAAiB;AAAA,UACf,eAAe,EAAE,SAAS,cAAc,CAAC;AAAA,UACzC;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,UACX,eAAe,EAAE,SAAS,cAAc,CAAC;AAAA,UACzC;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,eAAe;AAAA,UACb;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,WAAW;AAAA,UACT;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,eAAe;AAAA,UACb;AAAA,UACA,kBAAkB,UACd,KACA;AAAA,UACJ,kBAAkB;AAAA,QACpB;AAAA,QACA,OAAO;AAAA,QACP,UAAU,GAAG,QAAQ,kBAAkB,QAAQ;AAAA,QAC/C,SAAS;AAAA,UACP;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,MAAM,GAAG,oBAAoB,kBAAkB,IAAI;AAAA,QACnD,oBAAoB;AAAA,UAClB;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,UACX;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,KAAK;AAAA,UACH;AAAA,UACA,MAAM,iBACF,+DACA;AAAA,UACJ,kBAAkB;AAAA,QACpB;AAAA;AAAA;AAAA;AAAA,QAIA,aAAa;AAAA,UACX;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,cAAc,GAAG,gBAAgB,kBAAkB,YAAY;AAAA,QAC/D,WAAW,GAAG,+CAA+C,kBAAkB,SAAS;AAAA,QACxF,OAAO;AAAA,UACL;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,SAAS;AAAA,UACP;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,UAAU;AAAA,UACR;AAAA,UACA,kBAAkB;AAAA,QACpB;AAAA,QACA,QAAQ,GAAG,aAAa,kBAAkB,MAAM;AAAA,SAC7C;AAAA,MAEL,YAAY;AAAA,QACV,MAAM,CAACE,QAAqC;AAArC,cAAAC,MAAAD,KAAE,aAAAE,YAAW,QA1I5B,IA0IeD,KAAyBE,SAAA,UAAzBF,KAAyB,CAAvB,aAAW;AAClB,iBACE,gBAAAH;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,KAAK;AAAA,cACL,WAAW,GAAGI,UAAS;AAAA,eACnBC;AAAA,UACN;AAAA,QAEJ;AAAA,QACA,SAAS,CAAC,OAAyC;AAAzC,uBAAE,aAAAD,YAAW,YApJ/B,IAoJkB,IAA6BC,SAAA,UAA7B,IAA6B,CAA3B,aAAW;AACrB,cAAI,gBAAgB,QAAQ;AAC1B,mBACE,gBAAAL,MAAC,kCAAgB,WAAW,GAAG,UAAUI,UAAS,KAAOC,OAAO;AAAA,UAEpE;AAEA,cAAI,gBAAgB,SAAS;AAC3B,mBACE,gBAAAL;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,GAAG,UAAUI,UAAS;AAAA,iBAC7BC;AAAA,YACN;AAAA,UAEJ;AAEA,iBACE,gBAAAL,MAACM,kBAAA,iBAAgB,WAAW,GAAG,UAAUF,UAAS,KAAOC,OAAO;AAAA,QAEpE;AAAA,QACA,UAAU;AAAA,QACV,WAAW;AAAA,QACX,YAAY,CAAC,OAA2B;AAA3B,uBAAE,WA1KvB,IA0KqB,IAAeA,SAAA,UAAf,IAAe,CAAb;AACb,iBACE,gBAAAL,MAAC,uCAAOK,SAAP,EACC,0BAAAL,MAAC,SAAI,WAAU,mEACZ,UACH,IACF;AAAA,QAEJ;AAAA,SACG;AAAA,OAED;AAAA,EACN;AAEJ;AAOA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAEG;AAtMH;AAyME,QAAM,WAAU,wCAAS,KAAK,CAAC,EAAE,MAAM,MAAM,SAAS,KAAK,KAAK,OAAhD,YAAsD;AACtE,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,OAAO,KAAK;AAAA,MACnB,eAAe,CAAC,SAAS;AACvB,cAAM,QAAQ;AAAA,UACZ,QAAQ,EAAE,OAAO,KAAK;AAAA,QACxB;AACA,6CAAW;AAAA,MACb;AAAA,MAEA;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,cAAY;AAAA,YACZ,MAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,cACA,UAAU,SAAS;AAAA,YACrB;AAAA,YAEA,0BAAAA,MAAC,eAAY;AAAA;AAAA,QACf;AAAA,QACA,gBAAAA,MAAC,iBAAc,UAAS,UAAS,WAAU,qBACxC,6CAAS,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,SAAS,MACzC,gBAAAA,MAAC,cAAmB,OAAO,OAAO,CAAC,GAAG,UACnC,mBADc,CAEjB,IAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,kBAAkB,IAKgB;AALhB,eACzB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EA5OF,IAyO2B,IAItB,kBAJsB,IAItB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,oBAAoB,qBAAqB;AAE/C,QAAM,MAAY,cAA0B,IAAI;AAChD,EAAM,iBAAU,MAAM;AAlPxB,QAAAE;AAmPI,QAAI,UAAU,QAAS,EAAAA,MAAA,IAAI,YAAJ,gBAAAA,IAAa;AAAA,EACtC,GAAG,CAAC,UAAU,OAAO,CAAC;AAEtB,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,YAAU,IAAI,KAAK,mBAAmB;AAAA,MACtC,cAAY,UAAU,SAAS;AAAA,MAC/B,wBACE,UAAU,YACV,CAAC,UAAU,eACX,CAAC,UAAU,aACX,CAAC,UAAU;AAAA,MAEb,oBAAkB,UAAU;AAAA,MAC5B,kBAAgB,UAAU;AAAA,MAC1B,qBAAmB,UAAU;AAAA,MAC7B,WAAW;AAAA;AAAA;AAAA,QAGT;AAAA;AAAA;AAAA;AAAA,QAIA;AAAA;AAAA;AAAA,QAGA;AAAA;AAAA;AAAA;AAAA,QAIA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,kBAAkB;AAAA,QAClB;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AEpQI,gBAAAO,aAAA;AAVJ,SAAS,KAAK,IAQX;AARW,eACZ;AAAA;AAAA,IACA,UAAU;AAAA,IACV,cAAc;AAAA,EAnBhB,IAgBc,IAIT,kBAJS,IAIT;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAMA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA,YAAY,sBAAsB,YAAY,UAC1C,uHACA,YAAY,YACV,0DACA;AAAA,QACN,eACE;AAAA,QACF;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAAsD;AAAtD,eAAE,YA7CtB,IA6CoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,IAAsD;AAAtD,eAAE,YA1DrB,IA0DmB,IAAgB,kBAAhB,IAAgB,CAAd;AACnB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,MAAM,SAAS;AAAA,OACzB;AAAA,EACN;AAEJ;AAEA,SAAS,gBAAgB,IAAsD;AAAtD,eAAE,YApE3B,IAoEyB,IAAgB,kBAAhB,IAAgB,CAAd;AACzB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oCAAoC,SAAS;AAAA,OACvD;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAAsD;AAAtD,eAAE,YA9EtB,IA8EoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAAsD;AAAtD,eAAE,YA3FvB,IA2FqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,QAAQ,SAAS;AAAA,OAC3B;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAAsD;AAAtD,eAAE,YArGtB,IAqGoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,2CAA2C,SAAS;AAAA,OAC9D;AAAA,EACN;AAEJ;;;AC3GA,YAAYC,YAAW;AACvB,OAAO,sBAEA;AACP,SAAS,WAAW,kBAAkB;;;ACNtC,YAAYC,YAAW;AACvB;AAAA,EACE,mBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA;AAAA,OACK;AAOH,gBAAAC,OAoFA,QAAAC,cApFA;AAFJ,SAAS,WAAW,IAAsD;AAAtD,eAAE,YAVtB,IAUoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,aAAU;AAAA,MACV,WAAW,GAAG,sCAAsC,SAAS;AAAA,OACzD;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB,IAGI;AAHJ,eACzB;AAAA;AAAA,EAvBF,IAsB2B,IAEtB,kBAFsB,IAEtB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oCAAoC,SAAS;AAAA,OACvD;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAA0C;AAA1C,MAAK,kBAAL,IAAK;AAC3B,SAAO,gBAAAA,MAAC,uBAAG,aAAU,qBAAsB,MAAO;AACpD;AAMA,SAAS,eAAe,IAIA;AAJA,eACtB;AAAA;AAAA,IACA;AAAA,EA7CF,IA2CwB,IAGnB,kBAHmB,IAGnB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,gBAAc,WAAW,SAAS;AAAA,MAClC,aAAU;AAAA,MACV,eAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA,WACI,uFACA;AAAA,QACJ;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,IAGE;AAHF,eAC1B;AAAA;AAAA,EAlEF,IAiE4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA,MAAC,UAAO,SAAO,MAAC,SAAQ,YAAW,MAAK,WAAU,WAAW,GAAG,SAAS,GACvE,0BAAAA,MAAC,oCAAE,cAAW,uBAAsB,aAAU,qBAAsB,QAAnE,EACC,0BAAAA,MAACE,kBAAA,EAAgB,WAAU,UAAS,IACtC,GACF;AAEJ;AAEA,SAAS,eAAe,IAGM;AAHN,eACtB;AAAA;AAAA,EA/EF,IA8EwB,IAEnB,kBAFmB,IAEnB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAF,MAAC,UAAO,SAAO,MAAC,SAAQ,YAAW,MAAK,WAAU,WAAW,GAAG,SAAS,GACvE,0BAAAA,MAAC,oCAAE,cAAW,mBAAkB,aAAU,qBAAsB,QAA/D,EACC,0BAAAA,MAACG,mBAAA,EAAiB,WAAU,UAAS,IACvC,GACF;AAEJ;AAEA,SAAS,mBAAmB,IAGK;AAHL,eAC1B;AAAA;AAAA,EA5FF,IA2F4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,MACX,aAAU;AAAA,MACV,WAAW,GAAG,4CAA4C,SAAS;AAAA,OAC/D,QAJL;AAAA,MAMC;AAAA,wBAAAD,MAAC,sBAAmB,WAAU,UAAS;AAAA,QACvC,gBAAAA,MAAC,UAAK,WAAU,WAAU,wBAAU;AAAA;AAAA;AAAA,EACtC;AAEJ;AAqBA,IAAM,mBAAkD;AAAA,EACtD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAIA,IAAM,oBAAmD;AAAA,EACvD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,YAA2C;AAAA,EAC/C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAgBA,SAAS,kBAAkB,OAAe;AACxC,SAAa;AAAA,IACX,MAAM,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,KAAK,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAAA,IAC5D,CAAC,KAAK;AAAA,EACR;AACF;AAEA,SAAS,eAAe,IAQK;AARL,eACtB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,EA9KV,IAwKwB,IAOnB,kBAPmB,IAOnB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,QAAQ,kBAAkB,KAAK;AACrC,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,aAAU;AAAA,MACV,WAAW,GAAG,0CAA0C,SAAS;AAAA,OAC7D,QALL;AAAA,MAOE,gBAAM,IAAI,CAAC,MAAM;AAChB,cAAM,SAAS,MAAM;AACrB,eACE,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,aAAU;AAAA,YACV,eAAa,UAAU;AAAA,YACvB,gBAAc,SAAS,SAAS;AAAA,YAChC,cAAY,cAAc,IAAI,CAAC;AAAA,YAC/B,SAAS,MAAM,6CAAe;AAAA,YAC9B,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,SACI,GAAG,qCAAqC,kBAAkB,IAAI,CAAC,IAC/D,GAAG,UAAU,IAAI,GAAG,oEAAoE;AAAA,YAC9F;AAAA;AAAA,UAbK;AAAA,QAcP;AAAA,MAEJ,CAAC;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,cAAc,IAQM;AARN,eACrB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,EAzNV,IAmNuB,IAOlB,kBAPkB,IAOlB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,QAAQ,kBAAkB,KAAK;AACrC,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,aAAU;AAAA,MACV,WAAW,GAAG,0CAA0C,SAAS;AAAA,OAC7D,QALL;AAAA,MAOE,gBAAM,IAAI,CAAC,MAAM;AAChB,cAAM,SAAS,MAAM;AACrB,eACE,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,aAAU;AAAA,YACV,eAAa,UAAU;AAAA,YACvB,gBAAc,SAAS,SAAS;AAAA,YAChC,cAAY,cAAc,IAAI,CAAC;AAAA,YAC/B,SAAS,MAAM,6CAAe;AAAA,YAC9B,WAAW;AAAA,cACT;AAAA,cACA,iBAAiB,IAAI;AAAA,cACrB;AAAA,cACA,SACI,gCACA;AAAA,YACN;AAAA;AAAA,UAdK;AAAA,QAeP;AAAA,MAEJ,CAAC;AAAA;AAAA,EACH;AAEJ;;;ADnHM,gBAAAI,OA8DF,QAAAC,cA9DE;AAnGN,IAAM,kBAAwB,qBAA2C,IAAI;AAE7E,SAAS,cAAc;AACrB,QAAM,UAAgB,kBAAW,eAAe;AAEhD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,SAAO;AACT;AAEA,SAAS,SAAS,IAQ8B;AAR9B,eAChB;AAAA,kBAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAzDF,IAmDkB,IAOb,kBAPa,IAOb;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,CAAC,aAAa,GAAG,IAAI;AAAA,IACzB,iCACK,OADL;AAAA,MAEE,MAAM,gBAAgB,eAAe,MAAM;AAAA,IAC7C;AAAA,IACA;AAAA,EACF;AACA,QAAM,CAAC,eAAe,gBAAgB,IAAU,gBAAS,KAAK;AAC9D,QAAM,CAAC,eAAe,gBAAgB,IAAU,gBAAS,KAAK;AAC9D,QAAM,CAAC,eAAe,gBAAgB,IAAU,gBAAS,CAAC;AAC1D,QAAM,CAAC,YAAY,aAAa,IAAU,gBAAS,CAAC;AAEpD,QAAM,WAAiB,mBAAY,CAACC,SAAqB;AACvD,QAAI,CAACA,KAAK;AACV,qBAAiBA,KAAI,cAAc,CAAC;AACpC,qBAAiBA,KAAI,cAAc,CAAC;AACpC,qBAAiBA,KAAI,mBAAmB,CAAC;AACzC,kBAAcA,KAAI,eAAe,EAAE,MAAM;AAAA,EAC3C,GAAG,CAAC,CAAC;AAEL,QAAM,aAAmB,mBAAY,MAAM;AACzC,+BAAK;AAAA,EACP,GAAG,CAAC,GAAG,CAAC;AAER,QAAM,aAAmB,mBAAY,MAAM;AACzC,+BAAK;AAAA,EACP,GAAG,CAAC,GAAG,CAAC;AAER,QAAM,WAAiB,mBAAY,CAAC,UAAkB;AACpD,+BAAK,SAAS;AAAA,EAChB,GAAG,CAAC,GAAG,CAAC;AAER,QAAM,gBAAsB;AAAA,IAC1B,CAAC,UAA+C;AAC9C,UAAI,MAAM,QAAQ,aAAa;AAC7B,cAAM,eAAe;AACrB,mBAAW;AAAA,MACb,WAAW,MAAM,QAAQ,cAAc;AACrC,cAAM,eAAe;AACrB,mBAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,CAAC,YAAY,UAAU;AAAA,EACzB;AAEA,EAAM,iBAAU,MAAM;AACpB,QAAI,CAAC,OAAO,CAAC,OAAQ;AACrB,WAAO,GAAG;AAAA,EACZ,GAAG,CAAC,KAAK,MAAM,CAAC;AAEhB,EAAM,iBAAU,MAAM;AACpB,QAAI,CAAC,IAAK;AACV,aAAS,GAAG;AACZ,QAAI,GAAG,UAAU,QAAQ;AACzB,QAAI,GAAG,UAAU,QAAQ;AAEzB,WAAO,MAAM;AACX,iCAAK,IAAI,UAAU;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,KAAK,QAAQ,CAAC;AAElB,SACE,gBAAAF;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,aACE,iBAAgB,6BAAM,UAAS,MAAM,aAAa;AAAA,QACpD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEA,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,kBAAkB;AAAA,UAClB,WAAW,GAAG,YAAY,SAAS;AAAA,UACnC,MAAK;AAAA,UACL,wBAAqB;AAAA,UACrB,aAAU;AAAA,WACN,QANL;AAAA,UAQE;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,gBAAgB,IAAsD;AAAtD,eAAE,YAxJ3B,IAwJyB,IAAgB,kBAAhB,IAAgB,CAAd;AACzB,QAAM,EAAE,aAAa,YAAY,IAAI,YAAY;AAEjD,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAU;AAAA,MACV,aAAU;AAAA,MAEV,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,gBAAgB,eAAe,UAAU;AAAA,YACzC;AAAA,UACF;AAAA,WACI;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,aAAa,IAAsD;AAAtD,eAAE,YA7KxB,IA6KsB,IAAgB,kBAAhB,IAAgB,CAAd;AACtB,QAAM,EAAE,YAAY,IAAI,YAAY;AAEpC,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,wBAAqB;AAAA,MACrB,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA,gBAAgB,eAAe,SAAS;AAAA,QACxC;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAKc;AALd,eACxB;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EAlMT,IA+L0B,IAIrB,kBAJqB,IAIrB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,EAAE,aAAa,YAAY,cAAc,IAAI,YAAY;AAE/D,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,gBAAgB,eACZ,sCACA;AAAA,QACJ;AAAA,MACF;AAAA,MACA,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,OACL,QAbL;AAAA,MAeC;AAAA,wBAAAD,MAAC,aAAU;AAAA,QACX,gBAAAA,MAAC,UAAK,WAAU,WAAU,4BAAc;AAAA;AAAA;AAAA,EAC1C;AAEJ;AAEA,SAAS,aAAa,IAKkB;AALlB,eACpB;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EAhOT,IA6NsB,IAIjB,kBAJiB,IAIjB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,EAAE,aAAa,YAAY,cAAc,IAAI,YAAY;AAE/D,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,gBAAgB,eACZ,uCACA;AAAA,QACJ;AAAA,MACF;AAAA,MACA,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,OACL,QAbL;AAAA,MAeC;AAAA,wBAAAD,MAAC,cAAW;AAAA,QACZ,gBAAAA,MAAC,UAAK,WAAU,WAAU,wBAAU;AAAA;AAAA;AAAA,EACtC;AAEJ;AAMA,SAAS,aAAa,IAKnB;AALmB,eACpB;AAAA,cAAU;AAAA,EAhQZ,IA+PsB,IAEjB,kBAFiB,IAEjB;AAAA,IADH;AAAA;AAKA,QAAM,EAAE,eAAe,YAAY,SAAS,IAAI,YAAY;AAC5D,QAAM,YAAY,YAAY,QAAQ,gBAAgB;AACtD,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc;AAAA,MACd,OAAM;AAAA,OACF;AAAA,EACN;AAEJ;;;AE/QA,SAAS,OAAAG,YAA8B;AAmCnC,gBAAAC,aAAA;AAzBJ,IAAM,eAAeC;AAAA,EACnB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAUA,SAAS,KAAK,IAAqG;AAArG,eAAE,YAAU,WAAW,OAAO,UAAU,WAAW,MAAM,WAAW,SAlClF,IAkCc,IAAiF,kBAAjF,IAAiF,CAA/E,YAAU,YAAkB,WAAqB,QAAM,aAAW;AAChF,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,gBAAc;AAAA,MACd,aAAU;AAAA,MACV,aAAW;AAAA,MACX,gBAAc;AAAA,MACd,iBAAe,YAAY;AAAA,MAC3B;AAAA,MACA,WAAW;AAAA,QACT,aAAa,EAAE,KAAK,CAAC;AAAA,QACrB,WACI,uHACA,YAAY,YACV,yIACA;AAAA,QACN;AAAA,MACF;AAAA,OACI,QAjBL;AAAA,MAmBE;AAAA;AAAA,EACH;AAEJ;;;ACvDA,SAAS,aAAAE,kBAAiB;AAC1B,SAAS,YAAY,yBAAyB;AAqBtC,gBAAAC,aAAA;AAjBR,SAAS,SAAS,IAGsC;AAHtC,eAChB;AAAA;AAAA,EATF,IAQkB,IAEb,kBAFa,IAEb;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC,0BAAAA;AAAA,QAAC,kBAAkB;AAAA,QAAlB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,0BAAAA,MAACC,YAAA,EAAU,WAAU,YAAW;AAAA;AAAA,MAClC;AAAA;AAAA,EACF;AAEJ;;;AC1BA,SAAS,WAAW,wBAAwB;AAC5C,SAAS,kBAAkB;;;ACD3B,SAAS,aAAa;AACtB,SAAS,UAAU,uBAAuB;AASjC,gBAAAC,OAgDH,QAAAC,cAhDG;AAHT,SAAS,OAAO,IAEsC;AAFtC,MACX,kBADW,IACX;AAEH,SAAO,gBAAAD,MAAC,gBAAgB,MAAhB,iBAAqB,aAAU,YAAa,MAAO;AAC7D;AAEA,SAAS,cAAc,IAEkC;AAFlC,MAClB,kBADkB,IAClB;AAEH,SAAO,gBAAAA,MAAC,gBAAgB,SAAhB,iBAAwB,aAAU,oBAAqB,MAAO;AACxE;AAEA,SAAS,aAAa,IAEkC;AAFlC,MACjB,kBADiB,IACjB;AAEH,SAAO,gBAAAA,MAAC,gBAAgB,QAAhB,iBAAuB,aAAU,mBAAoB,MAAO;AACtE;AAEA,SAAS,YAAY,IAEkC;AAFlC,MAChB,kBADgB,IAChB;AAEH,SAAO,gBAAAA,MAAC,gBAAgB,OAAhB,iBAAsB,aAAU,kBAAmB,MAAO;AACpE;AAEA,SAAS,cAAc,IAGkC;AAHlC,eACrB;AAAA;AAAA,EAnCF,IAkCuB,IAElB,kBAFkB,IAElB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,IAOpB;AAPoB,eACrB;AAAA;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,EArDpB,IAkDuB,IAIlB,kBAJkB,IAIlB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAKA,SACE,gBAAAC,OAAC,gBAAa,aAAU,iBACtB;AAAA,oBAAAD,MAAC,iBAAc;AAAA,IACf,gBAAAC;AAAA,MAAC,gBAAgB;AAAA,MAAhB;AAAA,QACC,aAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,SACI,QANL;AAAA,QAQE;AAAA;AAAA,UACA,mBACC,gBAAAD,MAAC,gBAAgB,OAAhB,EAAsB,SAAO,MAC5B,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,MAAK;AAAA,cACL,cAAW;AAAA,cACX,WAAU;AAAA,cAEV,0BAAAA,MAAC,SAAM,WAAU,UAAS;AAAA;AAAA,UAC5B,GACF;AAAA;AAAA;AAAA,IAEJ;AAAA,KACF;AAEJ;AAEA,SAAS,aAAa,IAAsD;AAAtD,eAAE,YAvFxB,IAuFsB,IAAgB,kBAAhB,IAAgB,CAAd;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,gDAAgD,SAAS;AAAA,OACnE;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAOnB;AAPmB,eACpB;AAAA;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,EApGF,IAiGsB,IAIjB,kBAJiB,IAIjB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAKA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQE;AAAA;AAAA,QACA,mBACC,gBAAAD,MAAC,gBAAgB,OAAhB,EAAsB,SAAO,MAC5B,0BAAAA,MAAC,UAAO,SAAQ,aAAY,MAAK,MAAK,mBAAK,GAC7C;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,YAAY,IAGkC;AAHlC,eACnB;AAAA;AAAA,EA7HF,IA4HqB,IAEhB,kBAFgB,IAEhB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iDAAiD,SAAS;AAAA,OACpE;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB,IAGkC;AAHlC,eACzB;AAAA;AAAA,EA1IF,IAyI2B,IAEtB,kBAFsB,IAEtB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oDAAoD,SAAS;AAAA,OACvE;AAAA,EACN;AAEJ;;;ADhII,gBAAAE,OA0BE,QAAAC,cA1BF;AALJ,SAAS,QAAQ,IAGiC;AAHjC,eACf;AAAA;AAAA,EAhBF,IAeiB,IAEZ,kBAFY,IAEZ;AAAA,IADH;AAAA;AAGA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,IAYpB;AAZoB,eACrB;AAAA,YAAQ;AAAA,IACR,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,EApCpB,IA+BuB,IAMlB,kBANkB,IAMlB;AAAA,IALH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAQA,SACE,gBAAAC,OAAC,yCAAW,QAAX,EACC;AAAA,oBAAAA,OAAC,gBAAa,WAAU,WACtB;AAAA,sBAAAD,MAAC,eAAa,iBAAM;AAAA,MACpB,gBAAAA,MAAC,qBAAmB,uBAAY;AAAA,OAClC;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,uBAAuB,SAAS;AAAA,QAC9C;AAAA,QAEA,0BAAAA,MAAC,WAAQ,WAAU,4ZAChB,UACH;AAAA;AAAA,IACF;AAAA,MACF;AAEJ;AAEA,SAAS,aAAa,IAGkC;AAHlC,eACpB;AAAA;AAAA,EA/DF,IA8DsB,IAEjB,kBAFiB,IAEjB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MAEV;AAAA,wBAAAD,MAAC,cAAW,WAAU,4CAA2C;AAAA,QACjE,gBAAAA;AAAA,UAAC,iBAAiB;AAAA,UAAjB;AAAA,YACC,aAAU;AAAA,YACV,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,aACI;AAAA,QACN;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,YAAY,IAGkC;AAHlC,eACnB;AAAA;AAAA,EArFF,IAoFqB,IAEhB,kBAFgB,IAEhB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAEkC;AAFlC,MACjB,kBADiB,IACjB;AAEH,SACE,gBAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,OACN;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAGkC;AAHlC,eACpB;AAAA;AAAA,EAjHF,IAgHsB,IAEjB,kBAFiB,IAEjB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAGkC;AAHlC,eACxB;AAAA;AAAA,EAjIF,IAgI0B,IAErB,kBAFqB,IAErB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,wCAAwC,SAAS;AAAA,OAC3D;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAGkC;AAHlC,eACnB;AAAA;AAAA,EA9IF,IA6IqB,IAEhB,kBAFgB,IAEhB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,gBAAgB,IAGQ;AAHR,eACvB;AAAA;AAAA,EA9JF,IA6JyB,IAEpB,kBAFoB,IAEpB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AExKA,SAAS,aAAAE,YAAW,oBAAAC,mBAAkB,kBAAkB;AACxD,SAAS,eAAe,4BAA4B;AAO3C,gBAAAC,OAqDL,QAAAC,cArDK;AAHT,SAAS,YAAY,IAEsC;AAFtC,MAChB,kBADgB,IAChB;AAEH,SAAO,gBAAAD,MAAC,qBAAqB,MAArB,iBAA0B,aAAU,kBAAmB,MAAO;AACxE;AAEA,SAAS,mBAAmB,IAEkC;AAFlC,MACvB,kBADuB,IACvB;AAEH,SACE,gBAAAA,MAAC,qBAAqB,SAArB,iBAA6B,aAAU,0BAA2B,MAAO;AAE9E;AAEA,SAAS,iBAAiB,IAEkC;AAFlC,MACrB,kBADqB,IACrB;AAEH,SACE,gBAAAA,MAAC,qBAAqB,OAArB,iBAA2B,aAAU,wBAAyB,MAAO;AAE1E;AAEA,SAAS,kBAAkB,IAEkC;AAFlC,MACtB,kBADsB,IACtB;AAEH,SACE,gBAAAA,MAAC,qBAAqB,QAArB,iBAA4B,aAAU,yBAA0B,MAAO;AAE5E;AAEA,SAAS,eAAe,IAEkC;AAFlC,MACnB,kBADmB,IACnB;AAEH,SAAO,gBAAAA,MAAC,qBAAqB,KAArB,iBAAyB,aAAU,sBAAuB,MAAO;AAC3E;AAEA,SAAS,sBAAsB,IAEkC;AAFlC,MAC1B,kBAD0B,IAC1B;AAEH,SACE,gBAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,OACN;AAAA,EACN;AAEJ;AAEA,SAAS,sBAAsB,IAO5B;AAP4B,eAC7B;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EA1DF,IAuD+B,IAI1B,kBAJ0B,IAI1B;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAKA,SACE,gBAAAC;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAPL;AAAA,MASE;AAAA;AAAA,QACD,gBAAAD,MAACE,mBAAA,EAAiB,WAAU,WAAU;AAAA;AAAA;AAAA,EACxC;AAEJ;AAEA,SAAS,sBAAsB,IAGkC;AAHlC,eAC7B;AAAA;AAAA,EAhFF,IA+E+B,IAE1B,kBAF0B,IAE1B;AAAA,IADH;AAAA;AAGA,SACE,gBAAAF;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,IAGkC;AAHlC,eAC1B;AAAA;AAAA,EAhGF,IA+F4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA,MAAC,qBAAqB,QAArB,EACC,0BAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,gBAAgB,IAQtB;AARsB,eACvB;AAAA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EApHZ,IAiHyB,IAIpB,kBAJoB,IAIpB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAMA,SACE,gBAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,gBAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,wBAAwB,IAKkC;AALlC,eAC/B;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EA3IF,IAwIiC,IAI5B,kBAJ4B,IAI5B;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAC;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,OACI,QAPL;AAAA,MASC;AAAA,wBAAAD,MAAC,UAAK,WAAU,iFACd,0BAAAA,MAAC,qBAAqB,eAArB,EACC,0BAAAA,MAACG,YAAA,EAAU,WAAU,UAAS,GAChC,GACF;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,qBAAqB,IAIkC;AAJlC,eAC5B;AAAA;AAAA,IACA;AAAA,EApKF,IAkK8B,IAGzB,kBAHyB,IAGzB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAF;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC;AAAA,wBAAAD,MAAC,UAAK,WAAU,iFACd,0BAAAA,MAAC,qBAAqB,eAArB,EACC,0BAAAA,MAAC,cAAW,WAAU,uBAAsB,GAC9C,GACF;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,iBAAiB,IAMvB;AANuB,eACxB;AAAA;AAAA,IACA;AAAA,EA5LF,IA0L0B,IAGrB,kBAHqB,IAGrB;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,qBAAqB,IAGkC;AAHlC,eAC5B;AAAA;AAAA,EA/MF,IA8M8B,IAEzB,kBAFyB,IAEzB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6CAA6C,SAAS;AAAA,OAChE;AAAA,EACN;AAEJ;AAEA,SAAS,oBAAoB,IAGI;AAHJ,eAC3B;AAAA;AAAA,EA5NF,IA2N6B,IAExB,kBAFwB,IAExB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;ACtOA,SAAS,UAAU,uBAAuB;AAOjC,gBAAAI,OA6CH,QAAAC,cA7CG;AAHT,SAAS,OAAO,IAEsC;AAFtC,MACX,kBADW,IACX;AAEH,SAAO,gBAAAD,MAAC,gBAAgB,MAAhB,iBAAqB,aAAU,YAAa,MAAO;AAC7D;AAEA,SAAS,cAAc,IAEkC;AAFlC,MAClB,kBADkB,IAClB;AAEH,SAAO,gBAAAA,MAAC,gBAAgB,SAAhB,iBAAwB,aAAU,oBAAqB,MAAO;AACxE;AAEA,SAAS,aAAa,IAEkC;AAFlC,MACjB,kBADiB,IACjB;AAEH,SAAO,gBAAAA,MAAC,gBAAgB,QAAhB,iBAAuB,aAAU,mBAAoB,MAAO;AACtE;AAEA,SAAS,YAAY,IAEkC;AAFlC,MAChB,kBADgB,IAChB;AAEH,SAAO,gBAAAA,MAAC,gBAAgB,OAAhB,iBAAsB,aAAU,kBAAmB,MAAO;AACpE;AAEA,SAAS,cAAc,IAGkC;AAHlC,eACrB;AAAA;AAAA,EAhCF,IA+BuB,IAElB,kBAFkB,IAElB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,IAIkC;AAJlC,eACrB;AAAA;AAAA,IACA;AAAA,EAjDF,IA+CuB,IAGlB,kBAHkB,IAGlB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAC,OAAC,gBAAa,aAAU,iBACtB;AAAA,oBAAAD,MAAC,iBAAc;AAAA,IACf,gBAAAC;AAAA,MAAC,gBAAgB;AAAA,MAAhB;AAAA,QACC,aAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,SACI,QAVL;AAAA,QAYC;AAAA,0BAAAD,MAAC,SAAI,WAAU,oJAAmJ;AAAA,UACjK;AAAA;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;AAEA,SAAS,aAAa,IAAsD;AAAtD,eAAE,YA1ExB,IA0EsB,IAAgB,kBAAhB,IAAgB,CAAd;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAAsD;AAAtD,eAAE,YAvFxB,IAuFsB,IAAgB,kBAAhB,IAAgB,CAAd;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,gDAAgD,SAAS;AAAA,OACnE;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAGkC;AAHlC,eACnB;AAAA;AAAA,EAlGF,IAiGqB,IAEhB,kBAFgB,IAEhB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iDAAiD,SAAS;AAAA,OACpE;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB,IAGkC;AAHlC,eACzB;AAAA;AAAA,EA/GF,IA8G2B,IAEtB,kBAFsB,IAEtB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oDAAoD,SAAS;AAAA,OACvE;AAAA,EACN;AAEJ;;;ACtHA,SAAS,aAAAE,YAAW,oBAAAC,mBAAkB,cAAAC,mBAAkB;AACxD,SAAS,gBAAgB,6BAA6B;AAO7C,gBAAAC,OAgFL,QAAAC,cAhFK;AAHT,SAAS,aAAa,IAEsC;AAFtC,MACjB,kBADiB,IACjB;AAEH,SAAO,gBAAAD,MAAC,sBAAsB,MAAtB,iBAA2B,aAAU,mBAAoB,MAAO;AAC1E;AAEA,SAAS,mBAAmB,IAEkC;AAFlC,MACvB,kBADuB,IACvB;AAEH,SACE,gBAAAA,MAAC,sBAAsB,QAAtB,iBAA6B,aAAU,0BAA2B,MAAO;AAE9E;AAEA,SAAS,oBAAoB,IAEkC;AAFlC,MACxB,kBADwB,IACxB;AAEH,SACE,gBAAAA;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,OACN;AAAA,EACN;AAEJ;AAEA,SAAS,oBAAoB,IAIkC;AAJlC,eAC3B;AAAA;AAAA,IACA,aAAa;AAAA,EAnCf,IAiC6B,IAGxB,kBAHwB,IAGxB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA,MAAC,sBAAsB,QAAtB,EACC,0BAAAA;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,kBAAkB,IAEkC;AAFlC,MACtB,kBADsB,IACtB;AAEH,SACE,gBAAAA,MAAC,sBAAsB,OAAtB,iBAA4B,aAAU,yBAA0B,MAAO;AAE5E;AAEA,SAAS,iBAAiB,IAQvB;AARuB,eACxB;AAAA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EAhEZ,IA6D0B,IAIrB,kBAJqB,IAIrB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAMA,SACE,gBAAAA;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,gBAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,yBAAyB,IAKkC;AALlC,eAChC;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EAvFF,IAoFkC,IAI7B,kBAJ6B,IAI7B;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAC;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,OACI,QAPL;AAAA,MASC;AAAA,wBAAAD,MAAC,UAAK,WAAU,iFACd,0BAAAA,MAAC,sBAAsB,eAAtB,EACC,0BAAAA,MAACE,YAAA,EAAU,WAAU,UAAS,GAChC,GACF;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,uBAAuB,IAEkC;AAFlC,MAC3B,kBAD2B,IAC3B;AAEH,SACE,gBAAAF;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,OACN;AAAA,EACN;AAEJ;AAEA,SAAS,sBAAsB,IAIkC;AAJlC,eAC7B;AAAA;AAAA,IACA;AAAA,EA3HF,IAyH+B,IAG1B,kBAH0B,IAG1B;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAC;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC;AAAA,wBAAAD,MAAC,UAAK,WAAU,iFACd,0BAAAA,MAAC,sBAAsB,eAAtB,EACC,0BAAAA,MAACG,aAAA,EAAW,WAAU,uBAAsB,GAC9C,GACF;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,kBAAkB,IAMxB;AANwB,eACzB;AAAA;AAAA,IACA;AAAA,EAnJF,IAiJ2B,IAGtB,kBAHsB,IAGtB;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAH;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,sBAAsB,IAGkC;AAHlC,eAC7B;AAAA;AAAA,EAtKF,IAqK+B,IAE1B,kBAF0B,IAE1B;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6CAA6C,SAAS;AAAA,OAChE;AAAA,EACN;AAEJ;AAEA,SAAS,qBAAqB,IAGG;AAHH,eAC5B;AAAA;AAAA,EAnLF,IAkL8B,IAEzB,kBAFyB,IAEzB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,gBAAgB,IAEkC;AAFlC,MACpB,kBADoB,IACpB;AAEH,SAAO,gBAAAA,MAAC,sBAAsB,KAAtB,iBAA0B,aAAU,uBAAwB,MAAO;AAC7E;AAEA,SAAS,uBAAuB,IAO7B;AAP6B,eAC9B;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EA3MF,IAwMgC,IAI3B,kBAJ2B,IAI3B;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAKA,SACE,gBAAAC;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAPL;AAAA,MASE;AAAA;AAAA,QACD,gBAAAD,MAACI,mBAAA,EAAiB,WAAU,kBAAiB;AAAA;AAAA;AAAA,EAC/C;AAEJ;AAEA,SAAS,uBAAuB,IAGkC;AAHlC,eAC9B;AAAA;AAAA,EAjOF,IAgOgC,IAE3B,kBAF2B,IAE3B;AAAA,IADH;AAAA;AAGA,SACE,gBAAAJ;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AC9OA,SAAS,OAAAK,YAA8B;AAMnC,gBAAAC,aAAA;AAFJ,SAAS,MAAM,IAAsD;AAAtD,eAAE,YAJjB,IAIe,IAAgB,kBAAhB,IAAgB,CAAd;AACf,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAAsD;AAAtD,eAAE,YAjBvB,IAiBqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,IAAM,qBAAqBC;AAAA,EACzB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,WAAW,IAIsD;AAJtD,eAClB;AAAA;AAAA,IACA,UAAU;AAAA,EA/CZ,IA6CoB,IAGf,kBAHe,IAGf;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW,GAAG,mBAAmB,EAAE,SAAS,UAAU,CAAC,CAAC;AAAA,OACpD;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAAsD;AAAtD,eAAE,YA5DtB,IA4DoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,gDAAgD,SAAS;AAAA,OACnE;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAAoD;AAApD,eAAE,YAtE5B,IAsE0B,IAAgB,kBAAhB,IAAgB,CAAd;AAC1B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAAsD;AAAtD,eAAE,YAnFxB,IAmFsB,IAAgB,kBAAhB,IAAgB,CAAd;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AC5FA,YAAYE,YAAW;AACvB,SAAS,WAAAC,gBAAe;AACxB,SAAS,OAAAC,YAA8B;;;ACDvC,SAAS,SAAS,sBAAsB;AASpC,gBAAAC,aAAA;AALJ,SAAS,MAAM,IAGsC;AAHtC,eACb;AAAA;AAAA,EARF,IAOe,IAEV,kBAFU,IAEV;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,eAAe;AAAA,IAAf;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA;AAAA;AAAA,QAGT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;ACpBA,SAAS,aAAa,0BAA0B;AAW5C,gBAAAC,aAAA;AAPJ,SAAS,UAAU,IAKsC;AALtC,eACjB;AAAA;AAAA,IACA,cAAc;AAAA,IACd,aAAa;AAAA,EAVf,IAOmB,IAId,kBAJc,IAId;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AFOI,gBAAAC,OAuKA,QAAAC,cAvKA;AAdJ,IAAM,mBAAyB,qBAAyB,IAAI;AAE5D,SAAS,eAAe;AACtB,SAAa,kBAAW,gBAAgB;AAC1C;AAEA,IAAM,iBAA4C;AAAA,EAChD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAAS,SAAS,IAA2D;AAA3D,eAAE,YA9BpB,IA8BkB,IAAgB,kBAAhB,IAAgB,CAAd;AAClB,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAIiD;AAJjD,eACnB;AAAA;AAAA,IACA,UAAU;AAAA,EA9CZ,IA4CqB,IAGhB,kBAHgB,IAGhB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA;AAAA;AAAA,QAGA,YAAY,WAAW,sBAAsB;AAAA,QAC7C;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAAsD;AAAtD,eAAE,YAjEtB,IAiEoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,IAAM,gBAAgBE;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,MACA,aAAa;AAAA,QACX,UAAU,CAAC,2CAA2C;AAAA,QACtD,YAAY;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,YAAY;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,MAAM,IAKsD;AALtD,eACb;AAAA;AAAA,IACA,cAAc;AAAA,IACd,OAAO;AAAA,EA/GT,IA4Ge,IAIV,kBAJU,IAIV;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAF,MAAC,iBAAiB,UAAjB,EAA0B,OAAO,sBAAQ,MACxC,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,oBAAkB;AAAA,MAClB,aAAW;AAAA,MACX,WAAW,GAAG,cAAc,EAAE,aAAa,KAAK,CAAC,GAAG,SAAS;AAAA,OACzD;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,aAAa,IAAsD;AAAtD,eAAE,YAhIxB,IAgIsB,IAAgB,kBAAhB,IAAgB,CAAd;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAGmB;AAHnB,eAClB;AAAA;AAAA,EA9IF,IA6IoB,IAEf,kBAFe,IAEf;AAAA,IADH;AAAA;AAGA,QAAM,OAAO,aAAa;AAC1B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT,eAAe,IAAI;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAAsD;AAAtD,eAAE,YAjKtB,IAiKoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,QAAM,OAAO,aAAa;AAC1B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT,eAAe,IAAI;AAAA,QACnB;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAAoD;AAApD,eAAE,YAhL5B,IAgL0B,IAAgB,kBAAhB,IAAgB,CAAd;AAC1B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAMrB;AANqB,eACtB;AAAA;AAAA,IACA;AAAA,EAjMF,IA+LwB,IAGnB,kBAHmB,IAGnB;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc,CAAC,CAAC;AAAA,MAChB,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAPL;AAAA,MASC;AAAA,wBAAAD,MAAC,aAAU,WAAU,4BAA2B;AAAA,QAC/C,YACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,aAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,WAAW,IAOjB;AAPiB,eAClB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EAhOF,IA6NoB,IAIf,kBAJe,IAIf;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAKA,QAAM,UAAUG,SAAQ,MAAM;AArOhC,QAAAC;AAsOI,QAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAEA,QAAI,EAAC,iCAAQ,SAAQ;AACnB,aAAO;AAAA,IACT;AAEA,UAAM,eAAe;AAAA,MACnB,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,+BAAO,SAAS,KAAK,CAAC,CAAC,EAAE,OAAO;AAAA,IACpE;AAEA,SAAI,6CAAc,WAAU,GAAG;AAC7B,cAAOA,MAAA,aAAa,CAAC,MAAd,gBAAAA,IAAiB;AAAA,IAC1B;AAEA,WACE,gBAAAJ,MAAC,QAAG,WAAU,sCACX,uBAAa;AAAA,MACZ,CAAC,OAAO,WACN,+BAAO,YAAW,gBAAAA,MAAC,QAAgB,gBAAM,WAAd,KAAsB;AAAA,IACrD,GACF;AAAA,EAEJ,GAAG,CAAC,UAAU,MAAM,CAAC;AAErB,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,WAAW,GAAG,kDAAkD,SAAS;AAAA,OACrE,QAJL;AAAA,MAME;AAAA;AAAA,EACH;AAEJ;;;AG3QA,SAAS,aAAa,0BAA0B;AAOvC,gBAAAK,aAAA;AAHT,SAAS,UAAU,IAEsC;AAFtC,MACd,kBADc,IACd;AAEH,SAAO,gBAAAA,MAAC,mBAAmB,MAAnB,iBAAwB,aAAU,gBAAiB,MAAO;AACpE;AAEA,SAAS,iBAAiB,IAEkC;AAFlC,MACrB,kBADqB,IACrB;AAEH,SACE,gBAAAA,MAAC,mBAAmB,SAAnB,iBAA2B,aAAU,wBAAyB,MAAO;AAE1E;AAEA,SAAS,iBAAiB,IAKkC;AALlC,eACxB;AAAA;AAAA,IACA,QAAQ;AAAA,IACR,aAAa;AAAA,EAxBf,IAqB0B,IAIrB,kBAJqB,IAIrB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA,MAAC,mBAAmB,QAAnB,EAA0B,aAAU,qBACnC,0BAAAA;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN,GACF;AAEJ;;;ACtCA,SAAS,OAAAC,YAA8B;AA0EnC,gBAAAC,aAAA;AArEJ,IAAM,gBAAgBC;AAAA,EACpB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAKR,SAAS;AAAA,QACP,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE,KAAK,GAAG;AAAA,QACV,YAAY;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE,KAAK,GAAG;AAAA;AAAA,QAEV,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE,KAAK,GAAG;AAAA,MACZ;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,MAAM,IAMsE;AANtE,eACb;AAAA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,EArEF,IAiEe,IAKV,kBALU,IAKV;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAKA,QAAM,YAAY,aAAa;AAC/B,QAAM,eAAe,sBAAQ;AAC7B,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,WAAW,GAAG,cAAc,EAAE,SAAS,MAAM,aAAa,CAAC,GAAG,SAAS;AAAA,OACnE;AAAA,EACN;AAEJ;;;ACpFA,YAAYE,YAAW;AACvB,SAAS,OAAAC,YAA8B;;;ACGnC,gBAAAC,aAAA;AAFJ,SAAS,SAAS,IAA2D;AAA3D,eAAE,YAJpB,IAIkB,IAAgB,kBAAhB,IAAgB,CAAd;AAClB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;ADiEQ,gBAAAC,aAAA;AAlER,IAAM,wBAA8B,qBAA8B,IAAI;AACtE,IAAM,2BACE,qBAAiC,SAAS;AAElD,IAAM,qBAAqBC;AAAA,EACzB;AAAA,IACE;AAAA,IACA;AAAA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA;AAAA;AAAA,MAGR,SAAS;AAAA,QACP,SAAS;AAAA,UACP;AAAA,UACA;AAAA,QACF,EAAE,KAAK,GAAG;AAAA,QACV,YAAY;AAAA,UACV;AAAA,UACA;AAAA,QACF,EAAE,KAAK,GAAG;AAAA;AAAA,QAEV,SAAS;AAAA,UACP;AAAA,UACA;AAAA,QACF,EAAE,KAAK,GAAG;AAAA,MACZ;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,WAAW,IAKsD;AALtD,eAClB;AAAA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,EApEF,IAiEoB,IAIf,kBAJe,IAIf;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAKA,QAAM,YAAY,aAAa;AAC/B,QAAM,eAAgB,sBAAQ;AAC9B,SACE,gBAAAD;AAAA,IAAC,yBAAyB;AAAA,IAAzB;AAAA,MACC,OAAO;AAAA,MAEP,0BAAAA,MAAC,sBAAsB,UAAtB,EAA+B,OAAO,cACrC,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,aAAU;AAAA,UACV,gBAAc;AAAA,UACd,aAAW;AAAA,UACX,MAAK;AAAA,UACL,WAAW,GAAG,mBAAmB,EAAE,SAAS,MAAM,aAAa,CAAC,GAAG,SAAS;AAAA,WACxE;AAAA,MACN,GACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAM,0BAA0BC;AAAA,EAC9B;AAAA,IACE;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,OAAO;AAAA,QACL,gBACE;AAAA,QACF,cACE;AAAA,QACF,eACE;AAAA,QACF,aACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,IAIsD;AAJtD,eACvB;AAAA;AAAA,IACA,QAAQ;AAAA,EAtIV,IAoIyB,IAGpB,kBAHoB,IAGpB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW,GAAG,wBAAwB,EAAE,MAAM,CAAC,GAAG,SAAS;AAAA,MAC3D,SAAS,CAAC,MAAM;AA/ItB,YAAAE,KAAAC;AAgJQ,YAAK,EAAE,OAAuB,QAAQ,QAAQ,GAAG;AAC/C;AAAA,QACF;AACA,SAAAA,OAAAD,MAAA,EAAE,cAAc,kBAAhB,gBAAAA,IAA+B,cAAc,aAA7C,gBAAAC,IAAuD;AAAA,MACzD;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,IAAM,2BAA2BF;AAAA;AAAA;AAAA,EAG/B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,IAOuB;AAPvB,eACxB;AAAA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV,OAAO;AAAA,EAjLT,IA6K0B,IAKrB,kBALqB,IAKrB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAIA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAW;AAAA,MACX;AAAA,MACA,MAAK;AAAA,MACL,WAAW,GAAG,yBAAyB,EAAE,KAAK,CAAC,GAAG,SAAS;AAAA,OACvD;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAAuD;AAAvD,eAAE,YAjM1B,IAiMwB,IAAgB,kBAAhB,IAAgB,CAAd;AACxB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA;AAAA;AAAA,QAGA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,gBAAgB,IAQtB;AARsB,eACvB;AAAA;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,EAzNX,IAsNyB,IAIpB,kBAJoB,IAIpB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAMA,QAAM,YAAkB,kBAAW,qBAAqB;AACxD,QAAM,eAAqB,kBAAW,wBAAwB;AAC9D,QAAM,OAAO,8BAAY;AACzB,QAAM,UAAU,oCAAe;AAC/B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,IAGS;AAHT,eAC1B;AAAA;AAAA,EAlPF,IAiP4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AE7PA,YAAYI,YAAW;AACvB,SAAS,UAAU,uBAAuB;AAC1C,SAAS,iBAAiB;AAYtB,gBAAAC,OAiCA,QAAAC,cAjCA;AARJ,SAAS,SAAS,IAMf;AANe,eAChB;AAAA;AAAA,IACA;AAAA,EAVF,IAQkB,IAGb,kBAHa,IAGb;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,oBAAoB;AAAA,QAClB;AAAA,QACA;AAAA,MACF;AAAA,MACA,WAAW,GAAG,+BAA+B,SAAS;AAAA,OAClD;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,IAAsD;AAAtD,eAAE,YA5BzB,IA4BuB,IAAgB,kBAAhB,IAAgB,CAAd;AACvB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,qBAAqB,SAAS;AAAA,OACxC;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAMnB;AANmB,eACpB;AAAA;AAAA,IACA;AAAA,EAxCF,IAsCsB,IAGjB,kBAHiB,IAGjB;AAAA,IAFH;AAAA,IACA;AAAA;AAxCF,MAAAE;AA6CE,QAAM,kBAAwB,kBAAW,eAAe;AACxD,QAAM,EAAE,MAAM,cAAc,SAAS,KAAIA,MAAA,mDAAiB,MAAM,WAAvB,OAAAA,MAAiC,CAAC;AAE3E,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,eAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAPL;AAAA,MASE;AAAA;AAAA,QACA,gBACC,gBAAAD,MAAC,SAAI,WAAU,yEACb,0BAAAA,MAAC,SAAI,WAAU,wEAAuE,GACxF;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,SAAS,kBAAkB,IAA2C;AAA3C,MAAK,kBAAL,IAAK;AAC9B,SACE,gBAAAA,MAAC,sCAAI,aAAU,uBAAsB,MAAK,eAAgB,QAAzD,EACC,0BAAAA,MAAC,aAAU,IACb;AAEJ;;;ACzEA,SAAS,OAAAG,aAA8B;AACvC,SAAS,QAAAC,aAAY;AAqBjB,gBAAAC,aAAA;AAhBJ,SAAS,UAAU,IAchB;AAdgB,eACjB;AAAA;AAAA,IACA,UAAU;AAAA,EATZ,IAOmB,IAGd,kBAHc,IAGd;AAAA,IAFH;AAAA,IACA;AAAA;AAaA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,gBAAc,UAAU,SAAS;AAAA,MACjC,WAAW;AAAA,QACT;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,IAGoB;AAHpB,eACrB;AAAA;AAAA,EAnDF,IAkDuB,IAElB,kBAFkB,IAElB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAY;AAAA,MACZ,WAAW,GAAG,QAAQ,SAAS;AAAA,OAC3B;AAAA,EACN;AAEJ;AAEA,IAAM,eAAeC;AAAA,EACnB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,KAAK,IAO+C;AAP/C,eACZ;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,EAzFZ,IAqFc,IAKT,kBALS,IAKT;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAIA,QAAM,OAAO,UAAUC,MAAK,OAAO;AACnC,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,WAAW,GAAG,aAAa,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,OACpD;AAAA,EACN;AAEJ;AAEA,IAAM,oBAAoBC;AAAA,EACxB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,QACN,OACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,UAAU,IAIsD;AAJtD,eACjB;AAAA;AAAA,IACA,UAAU;AAAA,EA5HZ,IA0HmB,IAGd,kBAHc,IAGd;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW,GAAG,kBAAkB,EAAE,SAAS,UAAU,CAAC,CAAC;AAAA,OACnD;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAAsD;AAAtD,eAAE,YAzIvB,IAyIqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,IAAsD;AAAtD,eAAE,YAtJrB,IAsJmB,IAAgB,kBAAhB,IAAgB,CAAd;AACnB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,gBAAgB,IAAoD;AAApD,eAAE,YAnK3B,IAmKyB,IAAgB,kBAAhB,IAAgB,CAAd;AACzB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAAsD;AAAtD,eAAE,YAjLvB,IAiLqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,2BAA2B,SAAS;AAAA,OAC9C;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAAsD;AAAtD,eAAE,YA3LtB,IA2LoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAAsD;AAAtD,eAAE,YAxMtB,IAwMoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AClNA,SAAS,OAAAG,aAA8B;AACvC,SAAS,QAAAC,aAAY;AA+CjB,gBAAAC,aAAA;AA3CJ,IAAM,eAAeC;AAAA,EACnB;AAAA,IACE;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF,EAAE,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA;AAAA;AAAA,MAGA,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,YACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,KAAK,IAST;AATS,eACZ;AAAA;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EAxCZ,IAoCc,IAKT,kBALS,IAKT;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAMA,QAAM,OAAO,UAAUC,MAAK,OAAO;AAEnC,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,aAAW;AAAA,MACX,WAAW,GAAG,aAAa,EAAE,MAAM,MAAM,UAAU,CAAC,CAAC;AAAA,OACjD;AAAA,EACN;AAEJ;;;ACtDA,SAAS,aAAAG,YAAW,oBAAAC,mBAAkB,cAAAC,mBAAkB;AACxD,SAAS,WAAW,wBAAwB;AASxC,gBAAAC,OA2GA,QAAAC,cA3GA;AALJ,SAAS,QAAQ,IAGsC;AAHtC,eACf;AAAA;AAAA,EATF,IAQiB,IAEZ,kBAFY,IAEZ;AAAA,IADH;AAAA;AAGA,SACE,gBAAAD;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAEkC;AAFlC,MAChB,kBADgB,IAChB;AAEH,SAAO,gBAAAA,MAAC,iBAAiB,MAAjB,iBAAsB,aAAU,kBAAmB,MAAO;AACpE;AAEA,SAAS,aAAa,IAEkC;AAFlC,MACjB,kBADiB,IACjB;AAEH,SAAO,gBAAAA,MAAC,iBAAiB,OAAjB,iBAAuB,aAAU,mBAAoB,MAAO;AACtE;AAEA,SAAS,cAAc,IAEkC;AAFlC,MAClB,kBADkB,IAClB;AAEH,SAAO,gBAAAA,MAAC,iBAAiB,QAAjB,iBAAwB,aAAU,oBAAqB,MAAO;AACxE;AAEA,SAAS,kBAAkB,IAEkC;AAFlC,MACtB,kBADsB,IACtB;AAEH,SACE,gBAAAA,MAAC,iBAAiB,YAAjB,iBAA4B,aAAU,yBAA0B,MAAO;AAE5E;AAEA,SAAS,eAAe,IAGkC;AAHlC,eACtB;AAAA;AAAA,EAnDF,IAkDwB,IAEnB,kBAFmB,IAEnB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAMkC;AANlC,eACtB;AAAA;AAAA,IACA,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA,EAtEf,IAkEwB,IAKnB,kBALmB,IAKnB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA,MAAC,iBACC,0BAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,YAAY,IAQlB;AARkB,eACnB;AAAA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EA7FZ,IA0FqB,IAIhB,kBAJgB,IAIhB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAMA,SACE,gBAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,gBAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,oBAAoB,IAKkC;AALlC,eAC3B;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EApHF,IAiH6B,IAIxB,kBAJwB,IAIxB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAC;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,OACI,QAPL;AAAA,MASC;AAAA,wBAAAD,MAAC,UAAK,WAAU,iFACd,0BAAAA,MAAC,iBAAiB,eAAjB,EACC,0BAAAA,MAACE,YAAA,EAAU,WAAU,UAAS,GAChC,GACF;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,iBAAiB,IAIkC;AAJlC,eACxB;AAAA;AAAA,IACA;AAAA,EA7IF,IA2I0B,IAGrB,kBAHqB,IAGrB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAD;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC;AAAA,wBAAAD,MAAC,UAAK,WAAU,iFACd,0BAAAA,MAAC,iBAAiB,eAAjB,EACC,0BAAAA,MAACG,aAAA,EAAW,WAAU,uBAAsB,GAC9C,GACF;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,aAAa,IAMnB;AANmB,eACpB;AAAA;AAAA,IACA;AAAA,EArKF,IAmKsB,IAGjB,kBAHiB,IAGjB;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAH;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAGkC;AAHlC,eACxB;AAAA;AAAA,EAxLF,IAuL0B,IAErB,kBAFqB,IAErB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6CAA6C,SAAS;AAAA,OAChE;AAAA,EACN;AAEJ;AAEA,SAAS,gBAAgB,IAGQ;AAHR,eACvB;AAAA;AAAA,EArMF,IAoMyB,IAEpB,kBAFoB,IAEpB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAEkC;AAFlC,MACf,kBADe,IACf;AAEH,SAAO,gBAAAA,MAAC,iBAAiB,KAAjB,iBAAqB,aAAU,iBAAkB,MAAO;AAClE;AAEA,SAAS,kBAAkB,IAOxB;AAPwB,eACzB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EA7NF,IA0N2B,IAItB,kBAJsB,IAItB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAKA,SACE,gBAAAC;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAPL;AAAA,MASE;AAAA;AAAA,QACD,gBAAAD,MAACI,mBAAA,EAAiB,WAAU,WAAU;AAAA;AAAA;AAAA,EACxC;AAEJ;AAEA,SAAS,kBAAkB,IAGkC;AAHlC,eACzB;AAAA;AAAA,EAnPF,IAkP2B,IAEtB,kBAFsB,IAEtB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAJ;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AC7PA,SAAS,mBAAAK,wBAAuB;AA2B5B,SAIE,OAAAC,OAJF,QAAAC,cAAA;AApBJ,IAAM,cAAgD;AAAA,EACpD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAAS,aAAa,IAOnB;AAPmB,eACpB;AAAA;AAAA,IACA;AAAA,EAlBF,IAgBsB,IAGjB,kBAHiB,IAGjB;AAAA,IAFH;AAAA,IACA;AAAA;AAQA,QAAM,YAAY,aAAa;AAC/B,QAAM,eACJ,SAAS,aAAa,QAAQ,OAAQ,QAAQ,OAAO,YAAY,OAAQ;AAC3E,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,aAAU;AAAA,MAEV;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,aAAW;AAAA,YACX,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,YAAY,YAAY;AAAA,cACxB;AAAA,YACF;AAAA,aACI;AAAA,QACN;AAAA,QACA,gBAAAA;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAY;AAAA,YACZ,aAAU;AAAA;AAAA,QACZ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,mBAAmB,IAA8C;AAA9C,MAAK,kBAAL,IAAK;AAC/B,SAAO,gBAAAF,MAAC,2BAAO,aAAU,0BAA2B,MAAO;AAC7D;AAEA,SAAS,qBAAqB,IAGO;AAHP,eAC5B;AAAA;AAAA,EA3DF,IA0D8B,IAEzB,kBAFyB,IAEzB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,SAAS;AAAA,OACnB;AAAA,EACN;AAEJ;;;ACpEA,SAAS,OAAAG,aAAW;AACpB,SAAS,mBAAAC,wBAAuB;AAChC,SAAS,kBAAkB,+BAA+B;AAatD,SAUe,OAAAC,OAVf,QAAAC,cAAA;AATJ,SAAS,eAAe,IAOrB;AAPqB,eACtB;AAAA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EAVb,IAOwB,IAInB,kBAJmB,IAInB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAKA,SACE,gBAAAA;AAAA,IAAC,wBAAwB;AAAA,IAAxB;AAAA,MACC,aAAU;AAAA,MACV,iBAAe;AAAA,MACf,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAPL;AAAA,MASE;AAAA;AAAA,QACA,YAAY,gBAAAD,MAAC,0BAAuB;AAAA;AAAA;AAAA,EACvC;AAEJ;AAEA,SAAS,mBAAmB,IAGkC;AAHlC,eAC1B;AAAA;AAAA,EAhCF,IA+B4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,wBAAwB;AAAA,IAAxB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,IAGkC;AAHlC,eAC1B;AAAA;AAAA,EAhDF,IA+C4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,wBAAwB;AAAA,IAAxB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,YAAY,SAAS;AAAA,OAC/B;AAAA,EACN;AAEJ;AAEA,IAAM,6BAA6BE;AAAA,EACjC;AACF;AAEA,SAAS,sBAAsB,IAIkC;AAJlC,eAC7B;AAAA;AAAA,IACA;AAAA,EAlEF,IAgE+B,IAG1B,kBAH0B,IAG1B;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAD;AAAA,IAAC,wBAAwB;AAAA,IAAxB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,2BAA2B,GAAG,SAAS,SAAS;AAAA,OAC1D,QAHL;AAAA,MAKE;AAAA;AAAA,QAAU;AAAA,QACX,gBAAAD;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAY;AAAA;AAAA,QACd;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,sBAAsB,IAGkC;AAHlC,eAC7B;AAAA;AAAA,EArFF,IAoF+B,IAE1B,kBAF0B,IAE1B;AAAA,IADH;AAAA;AAGA,SACE,gBAAAH;AAAA,IAAC,wBAAwB;AAAA,IAAxB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,uBAAuB,IAGkC;AAHlC,eAC9B;AAAA;AAAA,EAtGF,IAqGgC,IAE3B,kBAF2B,IAE3B;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,MACF;AAAA,MAEA,0BAAAA;AAAA,QAAC,wBAAwB;AAAA,QAAxB;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,WACI;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,mBAAmB,IAGkC;AAHlC,eAC1B;AAAA;AAAA,EA5HF,IA2H4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,wBAAwB;AAAA,IAAxB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,wBAAwB,IAGkC;AAHlC,eAC/B;AAAA;AAAA,EA5IF,IA2IiC,IAE5B,kBAF4B,IAE5B;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,wBAAwB;AAAA,IAAxB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC,0BAAAA,MAAC,SAAI,WAAU,gFAA+E;AAAA;AAAA,EAChG;AAEJ;;;ACzJA,YAAYI,aAAW;AACvB,SAAS,cAAc;AA4Eb,gBAAAC,aAAA;AAhEV,IAAM,gBAAgB;AAiBtB,SAAS,OAAO,IAOA;AAPA,eACd;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,WAAW;AAAA,EArCb,IAgCgB,IAMX,kBANW,IAMX;AAAA,IALH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAKA,QAAM,YAAkB,eAA6C,IAAI;AACzE,QAAM,iBAAuB,eAAO,KAAK;AAEzC,QAAM,YAAY,MAAM;AACtB,mBAAe,UAAU;AACzB,cAAU,UAAU,WAAW,MAAM;AACnC,qBAAe,UAAU;AACzB;AAAA,IACF,GAAG,aAAa;AAAA,EAClB;AACA,QAAM,aAAa,MAAM;AACvB,QAAI,UAAU,QAAS,cAAa,UAAU,OAAO;AACrD,cAAU,UAAU;AAAA,EACtB;AACA,EAAM,kBAAU,MAAM,YAAY,CAAC,CAAC;AAEpC,QAAM,OAA6B;AAAA,IACjC;AAAA,IAAK;AAAA,IAAK;AAAA,IACV;AAAA,IAAK;AAAA,IAAK;AAAA,IACV;AAAA,IAAK;AAAA,IAAK;AAAA,IACV,UAAU,MAAM;AAAA,IAAM;AAAA,IAAK;AAAA,EAC7B;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,OACI,QATL;AAAA,MAWE,eAAK;AAAA,QAAI,CAAC,KAAK,MACd,QAAQ,OACN,gBAAAA,MAAC,UAAwB,eAAW,QAAzB,SAAS,CAAC,EAAgB,IAErC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,aAAU;AAAA,YACV,YAAU;AAAA,YACV;AAAA,YACA,cAAY,QAAQ,cAAc,mCAA8B;AAAA,YAChE,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA,QAAQ,eAAe;AAAA,YACzB;AAAA,YACA,eAAe,QAAQ,cAAc,YAAY;AAAA,YACjD,aAAa,QAAQ,cAAc,aAAa;AAAA,YAChD,gBAAgB,QAAQ,cAAc,aAAa;AAAA,YACnD,eACE,QAAQ,cAAc,CAAC,MAAM,EAAE,eAAe,IAAI;AAAA,YAEpD,SAAS,MAAM;AACb,kBAAI,QAAQ,eAAe,eAAe,SAAS;AACjD,+BAAe,UAAU;AACzB;AAAA,cACF;AACA,uDAAa;AAAA,YACf;AAAA,YAEC,kBAAQ,cAAc,gBAAAA,MAAC,UAAO,WAAU,YAAW,IAAK;AAAA;AAAA,UA1BpD;AAAA,QA2BP;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;;;AC/GA,SAAS,WAAW,wBAAwB;AAOnC,gBAAAC,aAAA;AAHT,SAAS,QAAQ,IAEsC;AAFtC,MACZ,kBADY,IACZ;AAEH,SAAO,gBAAAA,MAAC,iBAAiB,MAAjB,iBAAsB,aAAU,aAAc,MAAO;AAC/D;AAEA,SAAS,eAAe,IAEkC;AAFlC,MACnB,kBADmB,IACnB;AAEH,SAAO,gBAAAA,MAAC,iBAAiB,SAAjB,iBAAyB,aAAU,qBAAsB,MAAO;AAC1E;AAEA,SAAS,eAAe,IAKkC;AALlC,eACtB;AAAA;AAAA,IACA,QAAQ;AAAA,IACR,aAAa;AAAA,EAtBf,IAmBwB,IAInB,kBAJmB,IAInB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA,MAAC,iBAAiB,QAAjB,EACC,0BAAAA;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,cAAc,IAEkC;AAFlC,MAClB,kBADkB,IAClB;AAEH,SAAO,gBAAAA,MAAC,iBAAiB,QAAjB,iBAAwB,aAAU,oBAAqB,MAAO;AACxE;AAEA,SAAS,cAAc,IAAsD;AAAtD,eAAE,YA/CzB,IA+CuB,IAAgB,kBAAhB,IAAgB,CAAd;AACvB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,uBAAuB,SAAS;AAAA,OAC1C;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAAqD;AAArD,eAAE,YAzDxB,IAyDsB,IAAgB,kBAAhB,IAAgB,CAAd;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,kDAAkD,SAAS;AAAA,OACrE;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,IAGE;AAHF,eAC1B;AAAA;AAAA,EApEF,IAmE4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,qDAAqD,SAAS;AAAA,OACxE;AAAA,EACN;AAEJ;;;AC5EA,YAAYC,aAAW;AACvB,SAAS,YAAY,yBAAyB;AAyIpC,gBAAAC,OAgCF,QAAAC,cAhCE;AA/GV,IAAM,cAA+C;AAAA,EACnD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,aAA8C;AAAA,EAClD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAIA,IAAM,QAA8E;AAAA,EAClF,IAAI,EAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;AAAA,EAChC,IAAI,EAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;AAAA,EAChC,IAAI,EAAE,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;AAAA,EAChC,IAAI,EAAE,KAAK,KAAK,GAAG,IAAI,QAAQ,EAAE;AACnC;AA6BA,SAAS,SAAS,IAaA;AAbA,eAChB;AAAA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EAxFF,IA6EkB,IAYb,kBAZa,IAYb;AAAA,IAXH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,CAAC,UAAU,WAAW,IAAU;AAAA,IACpC,SAAS,OAAQ,cAAc,OAAO,IAAI,MAAO;AAAA,EACnD;AACA,QAAM,WAAiB,eAAO,KAAK;AAKnC,EAAM,kBAAU,MAAM;AACpB,QAAI,SAAS,MAAM;AACjB,kBAAY,IAAI;AAChB;AAAA,IACF;AACA,aAAS,UAAU;AACnB,UAAM,QAAQ,YAAY,IAAI;AAC9B,QAAI,MAAM;AACV,UAAM,QAAQ,CAAC,QAAgB;AAC7B,YAAM,IAAI,KAAK,KAAM,MAAM,SAAS,QAAS,KAAK,GAAG;AACrD,kBAAY,cAAc,OAAO,IAAI,MAAM,CAAC;AAC5C,UAAI,IAAI,KAAK;AACX,cAAM,sBAAsB,KAAK;AAAA,MACnC,WAAW,CAAC,SAAS,SAAS;AAC5B,iBAAS,UAAU;AACnB;AAAA,MACF;AAAA,IACF;AACA,UAAM,sBAAsB,KAAK;AACjC,WAAO,MAAM,qBAAqB,GAAG;AAAA,EAEvC,GAAG,CAAC,OAAO,SAAS,CAAC;AAErB,QAAM,QAAQ,YAAY;AAC1B,QAAM,MAAM,QAAQ,WAAW,KAAK,IAAI,KAAK,IAAI,wBAAS,GAAG,CAAC,GAAG,GAAG;AACpE,QAAM,UAAU,OAAO,aAAa,aAAa,SAAS,GAAG,IAAI;AAEjE,MAAI,YAAY,QAAQ;AACtB,UAAM,SAAS,KAAK,MAAO,MAAM,MAAO,QAAQ;AAChD,WACE,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,gBAAa;AAAA,QACb,MAAK;AAAA,QACL,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,WAAW,GAAG,2BAA2B,SAAS;AAAA,SAC9C,QARL;AAAA,QAUE,gBAAM,KAAK,EAAE,QAAQ,SAAS,GAAG,CAAC,GAAG,MACpC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,aAAU;AAAA,YACV,eAAa,IAAI,UAAU;AAAA,YAC3B,WAAW;AAAA,cACT;AAAA,cACA,WAAY,QAA4B,cAAe,OAA2B,IAAI;AAAA,cACtF,IAAI,SACA,gCACA;AAAA,YACN;AAAA;AAAA,UATK;AAAA,QAUP,CACD;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,MAAI,YAAY,QAAQ;AACtB,UAAM,EAAE,KAAK,GAAG,OAAO,IAAI,MAAO,QAA6B,QAAS,OAA4B,IAAI;AACxG,UAAM,gBAAgB,IAAI,KAAK,KAAK;AACpC,WACE,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,gBAAa;AAAA,QACb,MAAK;AAAA,QACL,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,WAAW,GAAG,2CAA2C,SAAS;AAAA,QAClE,OAAO,EAAE,OAAO,KAAK,QAAQ,IAAI;AAAA,SAC7B,QATL;AAAA,QAWC;AAAA,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,OAAO,GAAG,IAAI,GAAG;AAAA,cAC1B,WAAU;AAAA,cACV,eAAW;AAAA,cAEX;AAAA,gCAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,IAAI,MAAM;AAAA,oBACV,IAAI,MAAM;AAAA,oBACV;AAAA,oBACA,MAAK;AAAA,oBACL,WAAU;AAAA,oBACV,aAAa;AAAA;AAAA,gBACf;AAAA,gBAGC,MAAM,KACL,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,aAAU;AAAA,oBACV,IAAI,MAAM;AAAA,oBACV,IAAI,MAAM;AAAA,oBACV;AAAA,oBACA,MAAK;AAAA,oBACL,WAAW;AAAA,sBACT;AAAA,sBACA,CAAC,SAAS;AAAA,oBACZ;AAAA,oBACA,aAAa;AAAA,oBACb,eAAc;AAAA,oBACd,iBAAiB;AAAA,oBACjB,kBAAkB,iBAAiB,IAAI,MAAM;AAAA;AAAA,gBAC/C;AAAA;AAAA;AAAA,UAEJ;AAAA,UACC,WAAW,QACV,gBAAAA,MAAC,UAAK,WAAU,4DACb,mBACH;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAEA,QAAM,MACJ,gBAAAA;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,OAAO;AAAA,MACP,WAAW;AAAA;AAAA;AAAA,QAGT;AAAA,QACA,YAAa,QAA4B,cAAe,OAA2B,IAAI;AAAA,QACvF,SAAS,QAAQ,cAAc,QAAQ;AAAA,MACzC;AAAA,OACI,QAXL;AAAA,MAaC,0BAAAA;AAAA,QAAC,kBAAkB;AAAA,QAAlB;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,YACA,CAAC,SAAS;AAAA,UACZ;AAAA,UACA,OAAO,EAAE,WAAW,eAAe,MAAM,GAAG,KAAK;AAAA;AAAA,MACnD;AAAA;AAAA,EACF;AAGF,MAAI,SAAS,QAAQ,cAAc,KAAM,QAAO;AAEhD,SACE,gBAAAC,OAAC,SAAI,aAAU,kBAAiB,WAAW,GAAG,gCAAgC,SAAS,GACrF;AAAA,oBAAAA,OAAC,SAAI,WAAU,6CACZ;AAAA,eAAS,QACR,gBAAAD,MAAC,UAAK,WAAU,mDAAmD,iBAAM;AAAA,MAE1E,cAAc,QACb,gBAAAA,MAAC,UAAK,WAAU,qEACb,sBACH;AAAA,OAEJ;AAAA,IACC;AAAA,KACH;AAEJ;;;AC7PA,SAAS,QAAQ,YAAY;AA8EvB,SAKE,OAAAE,OALF,QAAAC,cAAA;AA9DN,IAAM,MAAM;AACZ,IAAM,QAAQ;AACd,IAAM,SAAS;AACf,IAAM,SAAS,MAAM,IAAI,SAAS;AAClC,IAAM,gBAAgB,IAAI,KAAK,KAAK;AACpC,IAAM,SAAS,MAAM,SAAS;AAgC9B,SAAS,aAAa,IASA;AATA,eACpB;AAAA;AAAA,IACA,MAAM;AAAA,IACN,WAAW;AAAA,IACX;AAAA,IACA,mBAAmB;AAAA,IACnB;AAAA,IACA;AAAA,EA/DF,IAwDsB,IAQjB,kBARiB,IAQjB;AAAA,IAPH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,MAAM,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,QAAQ,CAAC;AAC/C,QAAM,WAAW,OAAO;AAExB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,iBAAe;AAAA,MACf,iBAAe,YAAY;AAAA,MAC3B,WAAW,GAAG,qBAAqB,SAAS;AAAA,MAC5C,OAAO,EAAE,OAAO,KAAK,QAAQ,IAAI;AAAA,OAC7B,QANL;AAAA,MAWC;AAAA,wBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,OAAO,GAAG,IAAI,GAAG;AAAA,YAC1B,eAAY;AAAA,YACZ,WAAU;AAAA,YAEV;AAAA,8BAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAI,MAAM;AAAA,kBACV,IAAI,MAAM;AAAA,kBACV,GAAG;AAAA,kBACH,MAAK;AAAA,kBACL,QAAO;AAAA,kBACP,aAAa;AAAA;AAAA,cACf;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,aAAU;AAAA,kBACV,IAAI,MAAM;AAAA,kBACV,IAAI,MAAM;AAAA,kBACV,GAAG;AAAA,kBACH,MAAK;AAAA,kBACL,aAAa;AAAA,kBACb,eAAc;AAAA,kBACd,QAAQ,WAAW,gCAAgC;AAAA,kBACnD,iBAAiB;AAAA,kBACjB,kBAAkB,iBAAiB,IAAI,MAAM;AAAA,kBAC7C,WAAU;AAAA;AAAA,cACZ;AAAA;AAAA;AAAA,QACF;AAAA,QAEA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YACV,OAAO,EAAE,OAAO,MAAM;AAAA,YAErB,gBACC,gBAAAA,MAAC,SAAI,KAAU,KAAU,WAAU,0BAAyB,IAE5D,gBAAAA,MAAC,QAAK,WAAU,oCAAmC,aAAa,KAAK,eAAY,QAAO;AAAA;AAAA,QAE5F;AAAA,QAEC;AAAA;AAAA;AAAA,UAGC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,cAAY;AAAA,cACZ,SAAS;AAAA,cACT,aAAU;AAAA,cACV,WAAU;AAAA,cAEV,0BAAAA,MAAC,UAAO;AAAA;AAAA,UACV;AAAA,YACE;AAAA,QAEH,SACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YAET;AAAA;AAAA,QACH,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;;;AC/IA,SAAS,cAAAE,mBAAkB;AAC3B,SAAS,cAAc,2BAA2B;AAS9C,gBAAAC,aAAA;AALJ,SAAS,WAAW,IAGsC;AAHtC,eAClB;AAAA;AAAA,EATF,IAQoB,IAEf,kBAFe,IAEf;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,oBAAoB;AAAA,IAApB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,cAAc,SAAS;AAAA,OACjC;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAGkC;AAHlC,eACtB;AAAA;AAAA,EAtBF,IAqBwB,IAEnB,kBAFmB,IAEnB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,oBAAoB;AAAA,IAApB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQC,0BAAAA;AAAA,QAAC,oBAAoB;AAAA,QAApB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,0BAAAA,MAACC,aAAA,EAAW,WAAU,6HAA4H;AAAA;AAAA,MACpJ;AAAA;AAAA,EACF;AAEJ;;;ACxCA,SAAS,wBAAwB;AACjC,YAAY,wBAAwB;AAShC,gBAAAC,aAAA;AALJ,SAAS,oBAAoB,IAGK;AAHL,eAC3B;AAAA;AAAA,EARF,IAO6B,IAExB,kBAFwB,IAExB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAA6C;AAA7C,MAAK,kBAAL,IAAK;AAC3B,SAAO,gBAAAA,MAAoB,0BAAnB,iBAAyB,aAAU,qBAAsB,MAAO;AAC1E;AAEA,SAAS,gBAAgB,IAMtB;AANsB,eACvB;AAAA;AAAA,IACA;AAAA,EA7BF,IA2ByB,IAGpB,kBAHoB,IAGpB;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAA;AAAA,IAAoB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QANL;AAAA,MAQE,wBACC,gBAAAA,MAAC,SAAI,WAAU,oJACb,0BAAAA,MAAC,oBAAiB,WAAU,YAAW,GACzC;AAAA;AAAA,EAEJ;AAEJ;;;AC/CA,SAAS,cAAc,2BAA2B;AAU9C,SAKE,OAAAC,OALF,QAAAC,cAAA;AANJ,SAAS,WAAW,IAIsC;AAJtC,eAClB;AAAA;AAAA,IACA;AAAA,EATF,IAOoB,IAGf,kBAHe,IAGf;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,oBAAoB;AAAA,IAApB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,YAAY,SAAS;AAAA,OAC/B,QAHL;AAAA,MAKC;AAAA,wBAAAD;AAAA,UAAC,oBAAoB;AAAA,UAApB;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YAET;AAAA;AAAA,QACH;AAAA,QACA,gBAAAA,MAAC,aAAU;AAAA,QACX,gBAAAA,MAAC,oBAAoB,QAApB,EAA2B;AAAA;AAAA;AAAA,EAC9B;AAEJ;AAEA,SAAS,UAAU,IAIsD;AAJtD,eACjB;AAAA;AAAA,IACA,cAAc;AAAA,EAhChB,IA8BmB,IAGd,kBAHc,IAGd;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,oBAAoB;AAAA,IAApB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA,gBAAgB,cACd;AAAA,QACF,gBAAgB,gBACd;AAAA,QACF;AAAA,MACF;AAAA,OACI,QAXL;AAAA,MAaC,0BAAAA;AAAA,QAAC,oBAAoB;AAAA,QAApB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA;AAAA,MACZ;AAAA;AAAA,EACF;AAEJ;;;ACpDA,SAAS,SAAAE,cAAa;AACtB,SAAS,UAAU,sBAAsB;AAMhC,gBAAAC,OAkDH,QAAAC,cAlDG;AADT,SAAS,MAAM,IAAgE;AAAhE,MAAK,kBAAL,IAAK;AAClB,SAAO,gBAAAD,MAAC,eAAe,MAAf,iBAAoB,aAAU,WAAY,MAAO;AAC3D;AAEA,SAAS,aAAa,IAEkC;AAFlC,MACjB,kBADiB,IACjB;AAEH,SAAO,gBAAAA,MAAC,eAAe,SAAf,iBAAuB,aAAU,mBAAoB,MAAO;AACtE;AAEA,SAAS,WAAW,IAEkC;AAFlC,MACf,kBADe,IACf;AAEH,SAAO,gBAAAA,MAAC,eAAe,OAAf,iBAAqB,aAAU,iBAAkB,MAAO;AAClE;AAEA,SAAS,YAAY,IAEkC;AAFlC,MAChB,kBADgB,IAChB;AAEH,SAAO,gBAAAA,MAAC,eAAe,QAAf,iBAAsB,aAAU,kBAAmB,MAAO;AACpE;AAEA,SAAS,aAAa,IAGkC;AAHlC,eACpB;AAAA;AAAA,EAhCF,IA+BsB,IAEjB,kBAFiB,IAEjB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,eAAe;AAAA,IAAf;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IASnB;AATmB,eACpB;AAAA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,kBAAkB;AAAA,EAnDpB,IA+CsB,IAKjB,kBALiB,IAKjB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAMA,SACE,gBAAAC,OAAC,eACC;AAAA,oBAAAD,MAAC,gBAAa;AAAA,IACd,gBAAAC;AAAA,MAAC,eAAe;AAAA,MAAf;AAAA,QACC,aAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA,SAAS,WACP;AAAA,UACF,SAAS,UACP;AAAA,UACF,SAAS,SACP;AAAA,UACF,SAAS,YACP;AAAA,UACF;AAAA,QACF;AAAA,SACI,QAdL;AAAA,QAgBE;AAAA;AAAA,UACA,mBACC,gBAAAD,MAAC,eAAe,OAAf,EAAqB,SAAO,MAC3B,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,MAAK;AAAA,cACL,cAAW;AAAA,cACX,WAAU;AAAA,cAEV,0BAAAA,MAACE,QAAA,EAAM,WAAU,UAAS;AAAA;AAAA,UAC5B,GACF;AAAA;AAAA;AAAA,IAEJ;AAAA,KACF;AAEJ;AAEA,SAAS,YAAY,IAAsD;AAAtD,eAAE,YA9FvB,IA8FqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,6BAA6B,SAAS;AAAA,OAChD;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAAsD;AAAtD,eAAE,YAxGvB,IAwGqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,mCAAmC,SAAS;AAAA,OACtD;AAAA,EACN;AAEJ;AAEA,SAAS,WAAW,IAGkC;AAHlC,eAClB;AAAA;AAAA,EAnHF,IAkHoB,IAEf,kBAFe,IAEf;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,eAAe;AAAA,IAAf;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,gDAAgD,SAAS;AAAA,OACnE;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAGkC;AAHlC,eACxB;AAAA;AAAA,EAhIF,IA+H0B,IAErB,kBAFqB,IAErB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,eAAe;AAAA,IAAf;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,mDAAmD,SAAS;AAAA,OACtE;AAAA,EACN;AAEJ;;;ACxIA,YAAYG,aAAW;AACvB,SAAS,OAAAC,aAA8B;AACvC,SAAS,qBAAqB;AAC9B,SAAS,QAAAC,aAAY;;;ACLrB,YAAYC,aAAW;AAEvB,IAAM,oBAAoB;AAEnB,SAAS,cAAc;AAC5B,QAAM,CAAC,UAAU,WAAW,IAAU,iBAA8B,MAAS;AAE7E,EAAM,kBAAU,MAAM;AACpB,UAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,CAAC,KAAK;AACvE,UAAM,WAAW,MAAM;AACrB,kBAAY,OAAO,aAAa,iBAAiB;AAAA,IACnD;AACA,QAAI,iBAAiB,UAAU,QAAQ;AACvC,gBAAY,OAAO,aAAa,iBAAiB;AACjD,WAAO,MAAM,IAAI,oBAAoB,UAAU,QAAQ;AAAA,EACzD,GAAG,CAAC,CAAC;AAEL,SAAO,CAAC,CAAC;AACX;;;ACdI,gBAAAC,aAAA;AAFJ,SAAS,SAAS,IAAsD;AAAtD,eAAE,YAFpB,IAEkB,IAAgB,kBAAhB,IAAgB,CAAd;AAClB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;ACZA,YAAYC,aAAW;AACvB,SAAS,WAAW,wBAAwB;AAgCxC,gBAAAC,OAgGE,QAAAC,cAhGF;AAPJ,IAAM,qBAA2B,sBAA2B,SAAS;AAErE,SAAS,gBAAgB,IAGkC;AAHlC,eACvB;AAAA,oBAAgB;AAAA,EA/BlB,IA8ByB,IAEpB,kBAFoB,IAEpB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAD;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,QAAQ,IAGsC;AAHtC,eACf;AAAA;AAAA,EA5CF,IA2CiB,IAEZ,kBAFY,IAEZ;AAAA,IADH;AAAA;AAGA,QAAM,WAAW,YAAY;AAC7B,QAAM,OAAoB,WAAW,WAAW;AAEhD,MAAI,SAAS,UAAU;AACrB,WACE,gBAAAA,MAAC,mBAAmB,UAAnB,EAA4B,OAAM,UACjC,0BAAAA,MAAC,UAAQ,UAAS,GACpB;AAAA,EAEJ;AAEA,SACE,gBAAAA,MAAC,mBAAmB,UAAnB,EAA4B,OAAM,WACjC,0BAAAA,MAAC,iBAAiB,MAAjB,+BAAsB,aAAU,aAAc,QAA9C,EACE,WACH,GACF;AAEJ;AAEA,SAAS,eAAe,IAGkC;AAHlC,eACtB;AAAA;AAAA,EApEF,IAmEwB,IAEnB,kBAFmB,IAEnB;AAAA,IADH;AAAA;AAGA,QAAM,OAAa,mBAAW,kBAAkB;AAEhD,MAAI,SAAS,UAAU;AACrB,WACE,gBAAAA,MAAC,8CAAc,aAAU,qBAAsB,QAA9C,EACE,WACH;AAAA,EAEJ;AAEA,SACE,gBAAAA,MAAC,iBAAiB,SAAjB,+BAAyB,aAAU,qBAAsB,QAAzD,EACE,WACH;AAEJ;AAIA,SAAS,eAAe,IA8BrB;AA9BqB,eACtB;AAAA;AAAA,IACA,aAAa;AAAA,IACb,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,aAAa;AAAA,IACb;AAAA,EAhGF,IA0FwB,IAOnB,kBAPmB,IAOnB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAyBA,QAAM,OAAa,mBAAW,kBAAkB;AAQhD,MAAI,SAAS,UAAU;AACrB,WACE,gBAAAC,OAAC,iBAAc,aAAU,mBAAkB,gBAAc,SACvD;AAAA,sBAAAD,MAAC,gBACC,0BAAAA,MAAC,eAAa,iBAAM,GACtB;AAAA,MACA,gBAAAA,MAAC,SAAI,WAAW,GAAG,wDAAwD,SAAS,GACjF,UACH;AAAA,MACA,gBAAAA,MAAC,gBACC,0BAAAA,MAAC,eAAY,SAAO,MAClB,0BAAAA,MAAC,UAAO,SAAQ,WAAU,MAAK,MAC5B,sBACH,GACF,GACF;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,iBACJ,YAAY,YACR,mGACA;AACN,QAAM,eACJ,YAAY,YACR,oCACA;AAEN,SACE,gBAAAA,MAAC,iBAAiB,QAAjB,EACC,0BAAAC;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI,QATL;AAAA,MAWE;AAAA;AAAA,QACD,gBAAAD,MAAC,iBAAiB,OAAjB,EAAuB,WAAW,cAAc;AAAA;AAAA;AAAA,EACnD,GACF;AAEJ;;;AH7CQ,gBAAAE,OAkEE,QAAAC,cAlEF;AAxGR,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB,KAAK,KAAK,KAAK;AAC9C,IAAM,gBAAgB;AACtB,IAAM,uBAAuB;AAC7B,IAAM,qBAAqB;AAC3B,IAAM,4BAA4B;AAYlC,IAAM,iBAAuB,sBAA0C,IAAI;AAE3E,SAAS,aAAa;AACpB,QAAM,UAAgB,mBAAW,cAAc;AAC/C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,IAYtB;AAZsB,eACvB;AAAA,kBAAc;AAAA,IACd,MAAM;AAAA,IACN,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EA7DF,IAuDyB,IAOpB,kBAPoB,IAOpB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAOA,QAAM,WAAW,YAAY;AAC7B,QAAM,CAAC,YAAY,aAAa,IAAU,iBAAS,KAAK;AAIxD,QAAM,CAAC,OAAO,QAAQ,IAAU,iBAAS,WAAW;AACpD,QAAM,OAAO,8BAAY;AACzB,QAAM,UAAgB;AAAA,IACpB,CAAC,UAAmD;AAClD,YAAM,YAAY,OAAO,UAAU,aAAa,MAAM,IAAI,IAAI;AAC9D,UAAI,aAAa;AACf,oBAAY,SAAS;AAAA,MACvB,OAAO;AACL,iBAAS,SAAS;AAAA,MACpB;AAGA,eAAS,SAAS,GAAG,mBAAmB,IAAI,SAAS,qBAAqB,sBAAsB;AAAA,IAClG;AAAA,IACA,CAAC,aAAa,IAAI;AAAA,EACpB;AAGA,QAAM,gBAAsB,oBAAY,MAAM;AAC5C,WAAO,WAAW,cAAc,CAACC,UAAS,CAACA,KAAI,IAAI,QAAQ,CAACA,UAAS,CAACA,KAAI;AAAA,EAC5E,GAAG,CAAC,UAAU,SAAS,aAAa,CAAC;AAGrC,EAAM,kBAAU,MAAM;AACpB,UAAM,gBAAgB,CAAC,UAAyB;AAC9C,UACE,MAAM,QAAQ,8BACb,MAAM,WAAW,MAAM,UACxB;AACA,cAAM,eAAe;AACrB,sBAAc;AAAA,MAChB;AAAA,IACF;AAEA,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,EAClE,GAAG,CAAC,aAAa,CAAC;AAIlB,QAAM,QAAQ,OAAO,aAAa;AAElC,QAAM,eAAqB;AAAA,IACzB,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,OAAO,MAAM,SAAS,UAAU,YAAY,eAAe,aAAa;AAAA,EAC3E;AAEA,SACE,gBAAAF,MAAC,eAAe,UAAf,EAAwB,OAAO,cAC9B,0BAAAA,MAAC,mBAAgB,eAAe,GAC9B,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,OACE;AAAA,QACE,mBAAmB;AAAA,QACnB,wBAAwB;AAAA,SACrB;AAAA,MAGP,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAbL;AAAA,MAeE;AAAA;AAAA,EACH,GACF,GACF;AAEJ;AAEA,SAAS,QAAQ,IAWd;AAXc,eACf;AAAA,WAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd;AAAA,IACA;AAAA,EA9JF,IAyJiB,IAMZ,kBANY,IAMZ;AAAA,IALH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAOA,QAAM,EAAE,UAAU,OAAO,YAAY,cAAc,IAAI,WAAW;AAElE,MAAI,gBAAgB,QAAQ;AAC1B,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,SACI,QANL;AAAA,QAQE;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,MAAI,UAAU;AACZ,WACE,gBAAAA,MAAC,sCAAM,MAAM,YAAY,cAAc,iBAAmB,QAAzD,EACC,0BAAAC;AAAA,MAAC;AAAA;AAAA,QACC,gBAAa;AAAA,QACb,aAAU;AAAA,QACV,eAAY;AAAA,QACZ,WAAU;AAAA,QACV,OACE;AAAA,UACE,mBAAmB;AAAA,QACrB;AAAA,QAEF;AAAA,QAEA;AAAA,0BAAAA,OAAC,eAAY,WAAU,WACrB;AAAA,4BAAAD,MAAC,cAAW,qBAAO;AAAA,YACnB,gBAAAA,MAAC,oBAAiB,0CAA4B;AAAA,aAChD;AAAA,UACA,gBAAAA,MAAC,SAAI,WAAU,+BAA+B,UAAS;AAAA;AAAA;AAAA,IACzD,IACF;AAAA,EAEJ;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,cAAY;AAAA,MACZ,oBAAkB,UAAU,cAAc,cAAc;AAAA,MACxD,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,aAAU;AAAA,MAGV;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA,YAAY,cAAc,YAAY,UAClC,qFACA;AAAA,YACN;AAAA;AAAA,QACF;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAW;AAAA,cACT;AAAA,cACA,SAAS,SACL,mFACA;AAAA;AAAA,cAEJ,YAAY,cAAc,YAAY,UAClC,6FACA;AAAA,cACJ;AAAA,YACF;AAAA,aACI,QAbL;AAAA,YAeC,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAa;AAAA,gBACb,aAAU;AAAA,gBACV,WAAU;AAAA,gBAET;AAAA;AAAA,YACH;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,eAAe,IAIgB;AAJhB,eACtB;AAAA;AAAA,IACA;AAAA,EAjQF,IA+PwB,IAGnB,kBAHmB,IAGnB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,QAAM,EAAE,cAAc,IAAI,WAAW;AAErC,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,gBAAa;AAAA,MACb,aAAU;AAAA,MACV,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAW,GAAG,UAAU,SAAS;AAAA,MACjC,SAAS,CAAC,UAAU;AAClB,2CAAU;AACV,sBAAc;AAAA,MAChB;AAAA,OACI,QAVL;AAAA,MAYC;AAAA,wBAAAD,MAAC,iBAAc;AAAA,QACf,gBAAAA,MAAC,UAAK,WAAU,WAAU,4BAAc;AAAA;AAAA;AAAA,EAC1C;AAEJ;AAEA,SAAS,YAAY,IAAyD;AAAzD,eAAE,YAzRvB,IAyRqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,QAAM,EAAE,cAAc,IAAI,WAAW;AAErC,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,gBAAa;AAAA,MACb,aAAU;AAAA,MACV,cAAW;AAAA,MACX,UAAU;AAAA,MACV,SAAS;AAAA,MACT,OAAM;AAAA,MACN,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAAuD;AAAvD,eAAE,YAlTxB,IAkTsB,IAAgB,kBAAhB,IAAgB,CAAd;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAGiB;AAHjB,eACpB;AAAA;AAAA,EAjUF,IAgUsB,IAEjB,kBAFiB,IAEjB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW,GAAG,wDAAwD,SAAS;AAAA,OAC3E;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,IAAsD;AAAtD,eAAE,YA9UzB,IA8UuB,IAAgB,kBAAhB,IAAgB,CAAd;AACvB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,IAAsD;AAAtD,eAAE,YA5VzB,IA4VuB,IAAgB,kBAAhB,IAAgB,CAAd;AACvB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAGiB;AAHjB,eACxB;AAAA;AAAA,EA3WF,IA0W0B,IAErB,kBAFqB,IAErB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW,GAAG,yCAAyC,SAAS;AAAA,OAC5D;AAAA,EACN;AAEJ;AAEA,SAAS,eAAe,IAAsD;AAAtD,eAAE,YAxX1B,IAwXwB,IAAgB,kBAAhB,IAAgB,CAAd;AACxB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAAsD;AAAtD,eAAE,YAtYxB,IAsYsB,IAAgB,kBAAhB,IAAgB,CAAd;AACtB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,kBAAkB,IAI6B;AAJ7B,eACzB;AAAA;AAAA,IACA,UAAU;AAAA,EAtZZ,IAoZ2B,IAGtB,kBAHsB,IAGtB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,QAAM,OAAO,UAAUG,MAAK,OAAO;AAEnC,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,IAI+B;AAJ/B,eAC1B;AAAA;AAAA,IACA,UAAU;AAAA,EA3aZ,IAya4B,IAGvB,kBAHuB,IAGvB;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,QAAM,OAAO,UAAUG,MAAK,OAAO;AAEnC,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,oBAAoB,IAGG;AAHH,eAC3B;AAAA;AAAA,EAjcF,IAgc6B,IAExB,kBAFwB,IAExB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW,GAAG,4BAA4B,SAAS;AAAA,OAC/C;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAAqD;AAArD,eAAE,YA9cvB,IA8cqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW,GAAG,sCAAsC,SAAS;AAAA,OACzD;AAAA,EACN;AAEJ;AAEA,SAAS,gBAAgB,IAAqD;AAArD,eAAE,YAzd3B,IAydyB,IAAgB,kBAAhB,IAAgB,CAAd;AACzB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW,GAAG,4BAA4B,SAAS;AAAA,OAC/C;AAAA,EACN;AAEJ;AAEA,IAAM,4BAA4BI;AAAA,EAChC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,IAYyB;AAZzB,eACzB;AAAA,cAAU;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EAhgBF,IA0f2B,IAOtB,kBAPsB,IAOtB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAOA,QAAM,OAAO,UAAUD,MAAK,OAAO;AACnC,QAAM,EAAE,UAAU,MAAM,IAAI,WAAW;AAEvC,QAAM,SACJ,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,aAAW;AAAA,MACX,eAAa;AAAA,MACb,WAAW,GAAG,0BAA0B,EAAE,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,OACjE;AAAA,EACN;AAGF,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,UAAU;AAC/B,cAAU;AAAA,MACR,UAAU;AAAA,IACZ;AAAA,EACF;AAEA,SACE,gBAAAC,OAAC,WACC;AAAA,oBAAAD,MAAC,kBAAe,SAAO,MAAE,kBAAO;AAAA,IAChC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAM;AAAA,QACN,QAAQ,UAAU,eAAe;AAAA,SAC7B;AAAA,IACN;AAAA,KACF;AAEJ;AAEA,SAAS,kBAAkB,IAQxB;AARwB,eACzB;AAAA;AAAA,IACA,UAAU;AAAA,IACV,cAAc;AAAA,EA/iBhB,IA4iB2B,IAItB,kBAJsB,IAItB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAMA,QAAM,OAAO,UAAUG,MAAK,OAAO;AAEnC,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eACE;AAAA,QACF;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB,IAGM;AAHN,eACxB;AAAA;AAAA,EA7kBF,IA4kB0B,IAErB,kBAFqB,IAErB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,oBAAoB,IAM1B;AAN0B,eAC3B;AAAA;AAAA,IACA,WAAW;AAAA,EApmBb,IAkmB6B,IAGxB,kBAHwB,IAGxB;AAAA,IAFH;AAAA,IACA;AAAA;AAMA,QAAM,QAAQ;AAEd,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW,GAAG,+CAA+C,SAAS;AAAA,OAClE,QAJL;AAAA,MAME;AAAA,oBACC,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,gBAAa;AAAA;AAAA,QACf;AAAA,QAEF,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,gBAAa;AAAA,YACb,OACE;AAAA,cACE,oBAAoB;AAAA,YACtB;AAAA;AAAA,QAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,eAAe,IAAqD;AAArD,eAAE,YAtoB1B,IAsoBwB,IAAgB,kBAAhB,IAAgB,CAAd;AACxB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,IAGG;AAHH,eAC1B;AAAA;AAAA,EAtpBF,IAqpB4B,IAEvB,kBAFuB,IAEvB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,WAAW,GAAG,gCAAgC,SAAS;AAAA,OACnD;AAAA,EACN;AAEJ;AAEA,SAAS,qBAAqB,IAU3B;AAV2B,eAC5B;AAAA,cAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX;AAAA,EAvqBF,IAmqB8B,IAKzB,kBALyB,IAKzB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAOA,QAAM,OAAO,UAAUG,MAAK,OAAO;AAEnC,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAa;AAAA,MACb,aAAW;AAAA,MACX,eAAa;AAAA,MACb,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,SAAS,QAAQ;AAAA,QACjB;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;;;AI/rBA,YAAYK,aAAW;AACvB,SAAS,UAAU,uBAAuB;AAuBtC,SAoBI,OAAAC,OApBJ,QAAAC,cAAA;AAnBJ,SAAS,OAAO,IAOsC;AAPtC,eACd;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EAZR,IAOgB,IAMX,kBANW,IAMX;AAAA,IALH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,UAAgB;AAAA,IACpB,MACE,MAAM,QAAQ,KAAK,IACf,QACA,MAAM,QAAQ,YAAY,IACxB,eACA,CAAC,KAAK,GAAG;AAAA,IACjB,CAAC,OAAO,cAAc,KAAK,GAAG;AAAA,EAChC;AAEA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAVL;AAAA,MAYC;AAAA,wBAAAD;AAAA,UAAC,gBAAgB;AAAA,UAAhB;AAAA,YACC,aAAU;AAAA,YACV,WAAW;AAAA;AAAA;AAAA,cAGT;AAAA,YACF;AAAA,YAEA,0BAAAA;AAAA,cAAC,gBAAgB;AAAA,cAAhB;AAAA,gBACC,aAAU;AAAA,gBACV,WAAW;AAAA,kBACT;AAAA,gBACF;AAAA;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QACC,MAAM,KAAK,EAAE,QAAQ,QAAQ,OAAO,GAAG,CAAC,GAAG,UAC1C,gBAAAA;AAAA,UAAC,gBAAgB;AAAA,UAAhB;AAAA,YACC,aAAU;AAAA,YAEV,WAAU;AAAA;AAAA,UADL;AAAA,QAEP,CACD;AAAA;AAAA;AAAA,EACH;AAEJ;;;AC5DA,YAAYE,aAAW;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,gBAAgB;AACzB,SAAS,WAAW,QAAQ,aAAgC;AAgB3C,gBAAAC,OAgOT,QAAAC,cAhOS;AAZjB,IAAM,UAAU,CAAC,OAA+B;AAA/B,MAAK,kBAAL,IAAK;AACpB,QAAM,EAAE,QAAQ,SAAS,IAAI,SAAS;AACtC,QAAM,WAAW,YAAY;AAE7B,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAU;AAAA,MACV,UAAU,WAAW,eAAe;AAAA,MACpC,eAAe,WAAW,IAAI;AAAA,MAC9B,UAAU;AAAA,MACV,OAAO;AAAA,QACL,SAAS,gBAAAA,MAAC,mBAAgB,WAAU,UAAS;AAAA,QAC7C,MAAM,gBAAAA,MAAC,YAAS,WAAU,UAAS;AAAA,QACnC,SAAS,gBAAAA,MAAC,qBAAkB,WAAU,UAAS;AAAA,QAC/C,OAAO,gBAAAA,MAAC,gBAAa,WAAU,UAAS;AAAA,QACxC,SAAS,gBAAAA,MAAC,eAAY,WAAU,uBAAsB;AAAA,MACxD;AAAA,MACA,cAAc;AAAA,QACZ,YAAY;AAAA,UACV,OAAO;AAAA,UACP,OAAO;AAAA,UACP,aAAa;AAAA,UACb,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,MACA,OACE;AAAA,QACE,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,MACrB;AAAA,OAEE;AAAA,EACN;AAEJ;AA2BA,IAAM,0BAA0B;AAChC,IAAM,gCAAgC;AA8CtC,SAAS,eAAe,IAcA;AAdA,eACtB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EA1IF,IA8HwB,IAanB,kBAbmB,IAanB;AAAA,IAZH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,QAAQ,YAAY;AAC1B,QAAM,CAAC,SAAS,UAAU,IAAU,iBAAS,KAAK;AAClD,QAAM,UAAU,wBAAwB;AAKxC,QAAM,eAAqB,eAAO,SAAS;AAC3C,EAAM,kBAAU,MAAM;AACpB,iBAAa,UAAU;AAAA,EACzB,GAAG,CAAC,SAAS,CAAC;AACd,QAAM,WAAiB,eAAO,KAAK;AACnC,QAAM,SAAe,oBAAY,MAAM;AAzJzC,QAAAE;AA0JI,QAAI,SAAS,QAAS;AACtB,aAAS,UAAU;AACnB,KAAAA,MAAA,aAAa,YAAb,gBAAAA,IAAA;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,EAAM,kBAAU,MAAM;AACpB,UAAM,QAAQ,OAAO,WAAW,MAAM,WAAW,IAAI,GAAG,UAAU;AAClE,WAAO,MAAM,OAAO,aAAa,KAAK;AAAA,EACxC,GAAG,CAAC,UAAU,CAAC;AAEf,EAAM,kBAAU,MAAM;AACpB,QAAI,CAAC,QAAS;AACd,UAAM,OAAO,OAAO,WAAW,QAAQ,UAAU,IAAI,uBAAuB;AAC5E,WAAO,MAAM,OAAO,aAAa,IAAI;AAAA,EACvC,GAAG,CAAC,SAAS,QAAQ,OAAO,CAAC;AAI7B,QAAM,CAAC,SAAS,UAAU,IAAU,iBAAwB,IAAI;AAChE,EAAM,kBAAU,MAAM;AACpB,QAAI,gBAAgB,UAAa,WAAW,CAAC,OAAO,SAAS,WAAW,GAAG;AACzE,iBAAW,IAAI;AACf;AAAA,IACF;AAGA,UAAM,QAAQ,QAAQ,MAAM;AAC5B,UAAM,OAAO,QAAQ,MAAM;AAC3B,UAAM,YAAY,YAAY,IAAI;AAClC,QAAI,QAAQ;AACZ,UAAM,OAAO,CAAC,QAAgB;AAC5B,YAAM,IAAI,KAAK,IAAI,IAAI,MAAM,aAAa,KAAK;AAC/C,YAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC;AACnC,UAAI,IAAI,GAAG;AACT,mBAAW,GAAG,IAAI,IAAI,cAAc,OAAO,QAAQ,CAAC,CAAC,EAAE;AACvD,gBAAQ,sBAAsB,IAAI;AAAA,MACpC,OAAO;AACL,mBAAW,IAAI;AAAA,MACjB;AAAA,IACF;AACA,YAAQ,sBAAsB,IAAI;AAClC,WAAO,MAAM,qBAAqB,KAAK;AAAA,EACzC,GAAG,CAAC,aAAa,OAAO,OAAO,CAAC;AAEhC,QAAM,SACJ,sCACA,GAAG,QAAQ,QAAQ,MAAM,IAAI,MAAM,IAAI,QAAQ,KAAK,aAAa,KAAK,QAAQ;AAEhF,QAAM,WAAW,UAAU,QAAQ;AACnC,QAAM,aAAa,mBAAmB,QAAQ,IAAI,SAAS;AAE3D,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MAGC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,gBAAc,WAAW;AAAA,MACzB,WAAW;AAAA;AAAA;AAAA;AAAA,QAIT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,WAAW,UACP,yEAAyE,UAAU,qBAAqB,UAAU,KAClH,GAAG,UAAU,IAAI,uBAAuB;AAAA,MAC9C;AAAA,OACI,QAxBL;AAAA,MA0BC;AAAA,wBAAAD,MAAC,UAAK,WAAU,WAAW,kBAAO;AAAA,QAEjC,OACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA,YACV,OACE,UACI,SACA;AAAA,cACE,WAAW,wBAAwB,OAAO,sDAAsD,6BAA6B;AAAA,YAC/H;AAAA,YAGL;AAAA;AAAA,QACH,IACE;AAAA,QAEJ,gBAAAC,OAAC,UAAK,eAAW,MAAC,WAAU,mCAC1B;AAAA,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,QAAQ,8BAA8B;AAAA,cACxC;AAAA,cAEC;AAAA,4CAAW;AAAA,gBAAQ;AAAA,gBACpB,gBAAAD,MAAC,UAAK,WAAU,iCAAiC,oBAAS;AAAA;AAAA;AAAA,UAC5D;AAAA,UACA,gBAAAC,OAAC,UAAK,WAAU,iEACb;AAAA;AAAA,YAAc;AAAA,YAAI;AAAA,aACrB;AAAA,WACF;AAAA,QAOA,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,eAAW;AAAA,YACX,aAAU;AAAA,YACV,WAAW;AAAA,cACT;AAAA,cACA,QAAQ,gCAAgC;AAAA,YAC1C;AAAA,YACA,OACE,UACI,EAAE,WAAW,YAAY,IACzB;AAAA,cACE,WAAW,yBAAyB,UAAU;AAAA,YAChD;AAAA;AAAA,QAER;AAAA;AAAA;AAAA,EACF;AAEJ;AAMA,SAAS,0BAAmC;AAC1C,QAAM,CAAC,SAAS,UAAU,IAAU,iBAAS,KAAK;AAClD,EAAM,kBAAU,MAAM;AACpB,UAAM,QAAQ,OAAO,WAAW,kCAAkC;AAClE,eAAW,MAAM,OAAO;AACxB,UAAM,WAAW,CAAC,UAA+B,WAAW,MAAM,OAAO;AACzE,UAAM,iBAAiB,UAAU,QAAQ;AACzC,WAAO,MAAM,MAAM,oBAAoB,UAAU,QAAQ;AAAA,EAC3D,GAAG,CAAC,CAAC;AACL,SAAO;AACT;;;AC7SA,YAAYG,aAAW;AACvB,SAAS,cAAAC,aAAY,aAAa;AAiI9B,SAmBI,OAAAC,OAnBJ,QAAAC,cAAA;AA/GJ,IAAM,aAAa;AACnB,IAAM,SAAS;AACf,IAAMC,SAAQ;AAed,SAAS,eAAe,IAQA;AARA,eACtB;AAAA;AAAA,IACA,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,WAAW;AAAA,IACX;AAAA,EA5CF,IAsCwB,IAOnB,kBAPmB,IAOnB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,WAAiB,eAAuB,IAAI;AAClD,QAAM,CAAC,OAAO,QAAQ,IAAU,iBAAS,CAAC;AAC1C,QAAM,CAAC,UAAU,WAAW,IAAU,iBAAS,KAAK;AACpD,QAAM,CAAC,YAAY,aAAa,IAAU,iBAAS,CAAC;AACpD,QAAM,CAAC,mBAAmB,oBAAoB,IAAU,iBAAS,KAAK;AACtE,QAAM,YAAY,oDAAuB;AACzC,QAAM,WAAiB,eAAO,KAAK;AAEnC,EAAM,kBAAU,MAAM;AACpB,QAAI,wBAAwB,OAAO;AACjC,2BAAqB,KAAK;AAC1B,eAAS,CAAC;AACV,eAAS,UAAU;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,mBAAmB,CAAC;AAIxB,EAAM,kBAAU,MAAM;AACpB,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,MAAO;AACZ,UAAM,KAAK,IAAI,eAAe,MAAM,cAAc,MAAM,WAAW,CAAC;AACpE,OAAG,QAAQ,KAAK;AAChB,kBAAc,MAAM,WAAW;AAC/B,WAAO,MAAM,GAAG,WAAW;AAAA,EAC7B,GAAG,CAAC,CAAC;AAEL,QAAM,YAAY,KAAK,IAAI,aAAa,SAASA,SAAQ,GAAG,CAAC;AAE7D,WAAS,UAAU;AACjB,QAAI,SAAS,QAAS;AACtB,aAAS,UAAU;AACnB,yBAAqB,IAAI;AACzB;AAAA,EACF;AAEA,WAAS,kBAAkB,GAAwC;AACjE,QAAI,YAAY,UAAW;AAC1B,IAAC,EAAE,OAAuB,kBAAkB,EAAE,SAAS;AACxD,gBAAY,IAAI;AAAA,EAClB;AAEA,WAAS,kBAAkB,GAAwC;AACjE,QAAI,CAAC,YAAY,YAAY,UAAW;AACxC,UAAM,QAAQ,SAAS;AACvB,QAAI,CAAC,MAAO;AACZ,UAAM,OAAO,MAAM,sBAAsB;AACzC,UAAM,IAAI,EAAE,UAAU,KAAK,OAAOA,SAAQ,SAAS;AACnD,aAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC;AAAA,EAC9C;AAEA,WAAS,kBAAkB;AACzB,QAAI,CAAC,SAAU;AACf,gBAAY,KAAK;AACjB,QAAI,SAAS,YAAY,YAAY;AACnC,eAAS,SAAS;AAClB,cAAQ;AAAA,IACV,OAAO;AACL,eAAS,CAAC;AAAA,IACZ;AAAA,EACF;AAEA,WAAS,cAAc,GAAwC;AAC7D,QAAI,YAAY,UAAW;AAC3B,QAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,QAAE,eAAe;AACjB,eAAS,SAAS;AAClB,cAAQ;AAAA,IACV;AAAA,EACF;AAWA,QAAM,YAAY,UAAU,IAAI,IAAI,QAAQ;AAC5C,QAAM,cAAcA,SAAQ,QAAQ,SAAS;AAC7C,QAAM,SAAS;AAEf,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,aAAU;AAAA,MACV,kBAAgB,aAAa;AAAA,MAC7B,MAAK;AAAA,MACL,UAAU,WAAW,KAAK;AAAA,MAC1B,iBAAe,YAAY;AAAA,MAC3B,cAAY,OAAO,UAAU,WAAW,QAAQ;AAAA,MAChD,WAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAfL;AAAA,MAkBC;AAAA,wBAAAD,MAAC,UAAK,WAAU,4CACd,0BAAAA,MAAC,UAAK,WAAU,kDACb,iBACH,GACF;AAAA,QAGA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,eAAW;AAAA,YACX,aAAU;AAAA,YACV,WAAW;AAAA,cACT;AAAA;AAAA;AAAA,cAGA,YAAY,YAAY;AAAA,cACxB,CAAC,YAAY,GAAG,sBAAsB,MAAM;AAAA,YAC9C;AAAA,YACA,OACE;AAAA,cACE,WAAW,GAAGE,MAAK;AAAA,cACnB,OAAO,YAAY,SAAS,GAAG,SAAS;AAAA,YAC1C;AAAA;AAAA,QAEJ;AAAA,QAIA,gBAAAF;AAAA,UAAC;AAAA;AAAA,YACC,eAAW;AAAA,YACX,aAAU;AAAA,YACV,WAAW;AAAA,cACT;AAAA,cACA,CAAC,YAAY,GAAG,0BAA0B,MAAM;AAAA,YAClD;AAAA,YACA,OAAO;AAAA,cACL,UAAU,YACN,0BACA,uBAAuB,WAAW;AAAA,YACxC;AAAA,YAEA,0BAAAA,MAAC,UAAK,WAAU,2EAGb,sBAAY,iBAAiB,OAChC;AAAA;AAAA,QACF;AAAA,QAMA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,kBAAgB,aAAa;AAAA,YAC7B,eAAe;AAAA,YACf,eAAe;AAAA,YACf,aAAa;AAAA,YACb,iBAAiB;AAAA,YACjB,WAAW;AAAA,cACT;AAAA,cACA;AAAA;AAAA;AAAA,gBAGI;AAAA,kBACA;AAAA,cACJ,CAAC,YAAY,GAAG,0BAA0B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,cAKhD,CAAC,YACC,CAAC,YACD,CAAC,aACD,UAAU,KACV;AAAA,YACJ;AAAA,YACA,OAAO;AAAA,cACL,MAAM,GAAGE,MAAK;AAAA;AAAA;AAAA,cAGd,WAAW,GAAG,YAAY,YAAY,KAAK;AAAA,YAC7C;AAAA,YAEC,sBACC,gBAAAF,MAAC,SAAM,WAAU,4FAA2F,IAE5G,gBAAAA,MAACG,aAAA,EAAW,WAAU,YAAW;AAAA;AAAA,QAErC;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC/OA,YAAYC,aAAW;AACvB,SAAS,OAAO,YAAY;AAqJpB,gBAAAC,OAGF,QAAAC,cAHE;AAhJR,SAAS,MAAM,OAAe,KAAa,KAAa;AACtD,SAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAC3C;AAEA,SAAS,iBAAiB,GAAW;AACnC,QAAM,IAAI,OAAO,CAAC;AAClB,QAAM,IAAI,EAAE,QAAQ,GAAG;AACvB,SAAO,MAAM,KAAK,IAAI,EAAE,SAAS,IAAI;AACvC;AAEA,SAAS,YAAY,OAAe,eAAuB;AACzD,SAAO,gBAAgB,IAAI,MAAM,QAAQ,aAAa,IAAI,OAAO,KAAK;AACxE;AAoBA,SAAS,QAAQ;AAAA,EACf;AAAA,EACA,OAAO;AAAA,EACP,eAAe;AAAA,EACf;AAAA,EACA,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAAiB;AACf,QAAM,eAAe,oBAAoB;AACzC,QAAM,CAAC,eAAe,gBAAgB,IAAU;AAAA,IAC9C,MAAM,cAAc,KAAK,GAAG;AAAA,EAC9B;AACA,QAAM,eAAe,eAAe,kBAAkB;AACtD,QAAM,gBAAgB,iBAAiB,IAAI;AAE3C,QAAM,CAAC,eAAe,gBAAgB,IAAU;AAAA,IAC9C,YAAY,cAAc,aAAa;AAAA,EACzC;AACA,QAAM,CAAC,WAAW,YAAY,IAAU,iBAAS,KAAK;AAGtD,EAAM,kBAAU,MAAM;AACpB,QAAI,CAAC,WAAW;AACd,uBAAiB,YAAY,cAAc,aAAa,CAAC;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC,cAAc,eAAe,SAAS,CAAC;AAE3C,WAAS,OAAO,MAAc;AAC5B,UAAM,UAAU,MAAM,MAAM,KAAK,GAAG;AACpC,UAAM,UACJ,gBAAgB,IACZ,WAAW,QAAQ,QAAQ,aAAa,CAAC,IACzC,KAAK,MAAM,OAAO;AAExB,QAAI,CAAC,aAAc,kBAAiB,OAAO;AAC3C,qBAAiB,YAAY,SAAS,aAAa,CAAC;AACpD,mDAAgB;AAAA,EAClB;AAEA,WAAS,kBAAkB;AACzB,WAAO,eAAe,IAAI;AAAA,EAC5B;AAEA,WAAS,kBAAkB;AACzB,WAAO,eAAe,IAAI;AAAA,EAC5B;AAEA,WAAS,kBAAkB,GAAwC;AACjE,qBAAiB,EAAE,OAAO,KAAK;AAAA,EACjC;AAEA,WAAS,aAAa;AACpB,iBAAa,KAAK;AAClB,UAAM,SAAS,WAAW,aAAa;AACvC,QAAI,OAAO,MAAM,MAAM,GAAG;AACxB,uBAAiB,YAAY,cAAc,aAAa,CAAC;AAAA,IAC3D,OAAO;AACL,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AAEA,WAAS,cAAc;AACrB,iBAAa,IAAI;AAAA,EACnB;AAEA,WAAS,cAAc,GAA0C;AAC/D,QAAI,EAAE,QAAQ,WAAW;AACvB,QAAE,eAAe;AACjB,sBAAgB;AAAA,IAClB,WAAW,EAAE,QAAQ,aAAa;AAChC,QAAE,eAAe;AACjB,sBAAgB;AAAA,IAClB,WAAW,EAAE,QAAQ,SAAS;AAC5B,QAAE,eAAe;AACjB,YAAM,SAAS,WAAW,aAAa;AACvC,UAAI,OAAO,MAAM,MAAM,GAAG;AACxB,yBAAiB,YAAY,cAAc,aAAa,CAAC;AAAA,MAC3D,OAAO;AACL,eAAO,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,iBAAe,YAAY;AAAA,MAC3B,WAAW;AAAA,QACT;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,MAEA;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS;AAAA,YACT,UAAU,YAAY,gBAAgB;AAAA,YACtC,cAAW;AAAA,YAEX,0BAAAA,MAAC,SAAM;AAAA;AAAA,QACT;AAAA,QAEA,gBAAAC,OAAC,SAAI,WAAU,sCACZ;AAAA,mBAAS,QACR,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,WAAW,+BAA+B;AAAA,cAC5C;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,UAEF,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,MAAK;AAAA,cACL,iBAAe,QAAQ,YAAY,SAAY;AAAA,cAC/C,iBAAe,QAAQ,WAAW,SAAY;AAAA,cAC9C,iBAAe;AAAA,cACf,cAAY;AAAA,cACZ,OAAO;AAAA,cACP,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,WAAW;AAAA,cACX;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM,KAAK,IAAI,cAAc,QAAQ,CAAC;AAAA,cACtC,WAAU;AAAA;AAAA,UACZ;AAAA,WACF;AAAA,QAEA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS;AAAA,YACT,UAAU,YAAY,gBAAgB;AAAA,YACtC,cAAW;AAAA,YAEX,0BAAAA,MAAC,QAAK;AAAA;AAAA,QACR;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACtMA,YAAYE,aAAW;AACvB,SAAS,SAAAC,cAAa;AA4ChB,gBAAAC,OAgGE,QAAAC,cAhGF;AArBN,IAAM,eAAqB,sBAIxB,EAAE,OAAO,UAAU,aAAa,cAAc,MAAM,KAAK,CAAC;AAE7D,SAAS,MAAM,IAWZ;AAXY,eACb;AAAA,YAAQ;AAAA,IACR,cAAc;AAAA,IACd,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EArCF,IAgCe,IAMV,kBANU,IAMV;AAAA,IALH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAOA,QAAM,QAAc,iBAAS,QAAQ,QAAQ;AAC7C,SACE,gBAAAD,MAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,OAAO,aAAa,KAAK,GACvD,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,oBAAkB;AAAA,MAClB,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA,gBAAgB,eACZ,yBACA;AAAA,QACJ;AAAA,MACF;AAAA,OACI,QAZL;AAAA,MAcE,gBAAM;AAAA,QAAI,CAAC,OAAO,UACX,uBAA0B,KAAK,IAC3B,qBAAa,OAAO;AAAA,UACxB,OAAO,QAAQ;AAAA,UACf,SAAS,UAAU;AAAA,UACnB,QAAQ,UAAU,MAAM,SAAS;AAAA,QACnC,CAAC,IACD;AAAA,MACN;AAAA;AAAA,EACF,GACF;AAEJ;AAmBA,SAAS,KAAK,IAWA;AAXA,eACZ;AAAA,YAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,SAAS;AAAA,IACT;AAAA,EArGF,IA4Fc,IAUT,kBAVS,IAUT;AAAA,IATH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,EAAE,OAAO,aAAa,KAAK,IAAU,mBAAW,YAAY;AAClE,QAAM,aAAa,gBAAgB;AACnC,QAAM,KAAK,SAAS;AAEpB,QAAM,YACJ,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA,KAAK,WAAW;AAAA,QAChB,UAAU,WAAW,iBAAiB;AAAA,QACtC,UAAU,UACR;AAAA,QACF,UAAU,YACR;AAAA,QACF,UAAU,cACR;AAAA,QACF;AAAA,QACA,KACI,2CACA;AAAA,MACN;AAAA,MAEC,oBAAU,SAAS,gBAAAA,MAACE,QAAA,EAAM,IAAK,sBAAQ;AAAA;AAAA,EAC1C;AAGF,MAAI,YAAY;AAId,WACE,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,cAAY;AAAA,QACZ,gBAAc,UAAU,WAAW,SAAS;AAAA,QAC5C,WAAW,GAAG,6CAA6C,SAAS;AAAA,SAChE,QALL;AAAA,QAOC;AAAA,0BAAAA,OAAC,SAAI,WAAU,4BACb;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,eAAW;AAAA,gBACX,aAAU;AAAA,gBACV,WAAW,GAAG,eAAe,CAAC,WAAW,2BAA2B;AAAA;AAAA,YACtE;AAAA,YACA,gBAAAA,MAAC,UAAK,WAAW,GAAG,CAAC,WAAW,OAAO,UAAU,GAAG;AAAA,YACnD;AAAA,YACD,gBAAAA,MAAC,UAAK,WAAW,GAAG,CAAC,UAAU,OAAO,UAAU,GAAG;AAAA,YACnD,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAW;AAAA,gBACX,aAAU;AAAA,gBACV,WAAW,GAAG,eAAe,CAAC,UAAU,2BAA2B;AAAA;AAAA,YACrE;AAAA,aACF;AAAA,WACE,SAAS,QAAQ,eAAe,SAChC,gBAAAC;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,WAAW;AAAA,gBACT;AAAA,gBACA,KAAK,SAAS;AAAA,cAChB;AAAA,cAEC;AAAA,yBAAS,QACR,gBAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAW;AAAA,sBACT;AAAA,sBACA,UAAU,aACN,6BACA;AAAA,oBACN;AAAA,oBAEC;AAAA;AAAA,gBACH;AAAA,gBAED,OAAO,QACN,gBAAAA,MAAC,UAAK,WAAU,6DAA6D,eAAI;AAAA,gBAElF,eAAe,QACd,gBAAAA,MAAC,UAAK,WAAU,mDAAmD,uBAAY;AAAA;AAAA;AAAA,UAEnF;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAEA,QAAM,UAAU,SAAS,QAAQ,eAAe;AAEhD,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,cAAY;AAAA,MACZ,gBAAc,UAAU,WAAW,SAAS;AAAA,MAC5C,WAAW;AAAA,QACT;AAAA,QACA,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA,QAIjB,CAAC,WAAW,KAAK,aAAa;AAAA,QAC9B;AAAA,MACF;AAAA,OACI,QAbL;AAAA,MAeC;AAAA,wBAAAA,OAAC,SAAI,WAAU,2CACZ;AAAA;AAAA,UACA,CAAC,UACA,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,eAAW;AAAA,cACX,aAAU;AAAA,cACV,WAAU;AAAA;AAAA,UACZ;AAAA,WAEJ;AAAA,QACA,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAW,GAAG,yBAAyB,CAAC,WAAW,KAAK,SAAS,OAAO;AAAA,YAEvE;AAAA,uBAAS,QACR,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA,UAAU,aACN,6BACA;AAAA,kBACN;AAAA,kBAEC;AAAA;AAAA,oBACA,OAAO,QACN,gBAAAD,MAAC,UAAK,WAAU,kEACb,eACH;AAAA;AAAA;AAAA,cAEJ;AAAA,cAED,eAAe,QACd,gBAAAA,MAAC,UAAK,WAAU,mDACb,uBACH;AAAA,cAED,CAAC,WAAW,gBAAAC,OAAC,UAAK,WAAU,WAAU;AAAA;AAAA,gBAAM;AAAA,iBAAM;AAAA;AAAA;AAAA,QACrD;AAAA;AAAA;AAAA,EACF;AAEJ;;;ACrPA,SAAS,UAAU,uBAAuB;AAqBpC,gBAAAE,aAAA;AAjBN,SAAS,OAAO,IAMb;AANa,eACd;AAAA;AAAA,IACA,OAAO;AAAA,EATT,IAOgB,IAGX,kBAHW,IAGX;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAPL;AAAA,MASC,0BAAAA;AAAA,QAAC,gBAAgB;AAAA,QAAhB;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;ACpBM,gBAAAC,aAAA;AANN,SAAS,MAAM,IAAwD;AAAxD,eAAE,YANjB,IAMe,IAAgB,kBAAhB,IAAgB,CAAd;AACf,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MAEV,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAW,GAAG,oCAAoC,SAAS;AAAA,WACvD;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,YAAY,IAAwD;AAAxD,eAAE,YArBvB,IAqBqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,wDAAwD,SAAS;AAAA,OAC3E;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,IAAwD;AAAxD,eAAE,YA/BrB,IA+BmB,IAAgB,kBAAhB,IAAgB,CAAd;AACnB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,8BAA8B,SAAS;AAAA,OACjD;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAAwD;AAAxD,eAAE,YAzCvB,IAyCqB,IAAgB,kBAAhB,IAAgB,CAAd;AACrB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,SAAS,IAAqD;AAArD,eAAE,YAtDpB,IAsDkB,IAAgB,kBAAhB,IAAgB,CAAd;AAClB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,IAAqD;AAArD,eAAE,YAnErB,IAmEmB,IAAgB,kBAAhB,IAAgB,CAAd;AACnB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,UAAU,IAAqD;AAArD,eAAE,YAhFrB,IAgFmB,IAAgB,kBAAhB,IAAgB,CAAd;AACnB,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,IAGc;AAHd,eACpB;AAAA;AAAA,EA9FF,IA6FsB,IAEjB,kBAFiB,IAEjB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,OACpD;AAAA,EACN;AAEJ;;;ACrGA,SAAS,OAAAC,aAA8B;AACvC,SAAS,QAAQ,qBAAqB;AAUlC,gBAAAC,aAAA;AANJ,SAAS,KAAK,IAIsC;AAJtC,eACZ;AAAA;AAAA,IACA,cAAc;AAAA,EAVhB,IAQc,IAGT,kBAHS,IAGT;AAAA,IAFH;AAAA,IACA;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,aAAU;AAAA,MACV,oBAAkB;AAAA,MAClB;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,IAAM,mBAAmBC;AAAA,EACvB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,SAAS,IAMuB;AANvB,eAChB;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EAnDT,IAgDkB,IAIb,kBAJa,IAIb;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAIA,SACE,gBAAAD;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,WAAW,GAAG,iBAAiB,EAAE,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,OACxD;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAMlB;AANkB,eACnB;AAAA;AAAA,IACA,eAAe;AAAA,EApEjB,IAkEqB,IAGhB,kBAHgB,IAGhB;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,SACE,gBAAAA;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,aAAU;AAAA,MACV,sBAAoB;AAAA,MACpB,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB,SAAS;AAAA,QAC1B,iBAAiB,SAAS;AAAA,QAC1B,iBAAiB,SAAS;AAAA,QAC1B;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,YAAY,IAGkC;AAHlC,eACnB;AAAA;AAAA,EA/FF,IA8FqB,IAEhB,kBAFgB,IAEhB;AAAA,IADH;AAAA;AAGA,SACE,gBAAAA;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,uBAAuB,SAAS;AAAA,OAC1C;AAAA,EACN;AAEJ;;;ACtGA,SAAS,OAAAE,aAA8B;AACvC,SAAS,UAAU,uBAAuB;AA8BtC,gBAAAC,aAAA;AAvBJ,IAAM,iBAAiBC;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,OAAO,IAKuB;AALvB,eACd;AAAA;AAAA,IACA;AAAA,EA7BF,IA2BgB,IAGX,kBAHW,IAGX;AAAA,IAFH;AAAA,IACA;AAAA;AAIA,SACE,gBAAAD;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,eAAe,EAAE,MAAM,UAAU,CAAC,CAAC;AAAA,OAC7C;AAAA,EACN;AAEJ;;;ACtCA,YAAYE,aAAW;AAEvB,SAAS,eAAe,4BAA4B;AAoC9C,gBAAAC,aAAA;AA/BN,IAAM,qBAA2B,sBAI/B;AAAA,EACA,MAAM;AAAA,EACN,SAAS;AACX,CAAC;AAED,SAAS,YAAY,IAShB;AATgB,eACnB;AAAA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,EAtBF,IAkBqB,IAKhB,kBALgB,IAKhB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAMA,SACE,gBAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,aAAW;AAAA,MACX,gBAAc;AAAA,MACd,OAAO,EAAE,SAAS,QAAQ;AAAA,MAC1B,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI,QATL;AAAA,MAWC,0BAAAA,MAAC,mBAAmB,UAAnB,EAA4B,OAAO,EAAE,MAAM,QAAQ,GACjD,UACH;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,gBAAgB,IAMc;AANd,eACvB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EAlDF,IA+CyB,IAIpB,kBAJoB,IAIpB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAIA,QAAM,UAAgB,mBAAW,kBAAkB;AAEnD,SACE,gBAAAA;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACV,aAAW,QAAQ,QAAQ;AAAA,MAC3B,gBAAc,QAAQ;AAAA,MACtB,WAAW;AAAA,QACT,eAAe;AAAA,UACb,MAAM,QAAQ,QAAQ;AAAA,QACxB,CAAC;AAAA,QACD;AAAA;AAAA;AAAA,QAGA;AAAA,QACA;AAAA,MACF;AAAA,OACI,QAdL;AAAA,MAgBE;AAAA;AAAA,EACH;AAEJ;;;AC3BM,SA2BM,YAAAC,WA1BJ,OAAAC,OADF,QAAAC,cAAA;AAvCN,IAAM,qBACJ;AACF,IAAM,uBACJ;AAmBK,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,QAAQ,WAAW;AACzB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,eAAe,QAAQ,IAAI,MAAM,KAAK,SAAI,MAAM;AACtD,QAAM,mBAAmB,QAAQ,sBAAsB;AACvD,QAAM,cAAc,QAAQ,oBAAoB;AAEhD,SACE,gBAAAA,OAAC,QAAK,WAAU,mFACd;AAAA,oBAAAA,OAAC,SAAI,WAAU,kDACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,uBAAoB;AAAA,UACpB,WAAW,qDAAqD,WAAW;AAAA;AAAA,MAC7E;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,uBAAqB,QAAQ,aAAa;AAAA,UAC1C,KAAK,QAAQ,qBAAqB;AAAA,UAClC,KAAK,QAAQ,QAAQ;AAAA,UACrB,WAAU;AAAA;AAAA,MACZ;AAAA,OACF;AAAA,IAEA,gBAAAA,MAAC,OAAE,WAAU,2CAA2C,qBAAU;AAAA,IAElE,gBAAAC,OAAC,OAAE,WAAW,+BAA+B,gBAAgB,IAC3D;AAAA,sBAAAD,MAAC,UAAK,WAAU,mEACb,wBACH;AAAA,MACA,gBAAAA,MAAC,UAAK,WAAU,yBAAyB,oBAAS;AAAA,OACpD;AAAA,IAEA,gBAAAC,OAAC,SAAI,WAAU,2BACb;AAAA,sBAAAA,OAAC,SAAM,SAAQ,gBAAe,MAAK,MAChC;AAAA;AAAA,QACA,gBAAgB,UACf,gBAAAA,OAAAF,WAAA,EACE;AAAA,0BAAAC,MAAC,UAAK,eAAW,MAAC,WAAU,wCAAuC;AAAA,UACnE,gBAAAA,MAAC,UAAK,WAAU,gBAAgB,uBAAY;AAAA,WAC9C;AAAA,SAEJ;AAAA,MACA,gBAAAA,MAAC,SAAM,SAAQ,gBAAe,MAAK,MAAM,oBAAS;AAAA,OACpD;AAAA,IAEA,gBAAAC,OAAC,SAAI,WAAU,eACZ;AAAA,kBAAY,gBAAgB,gBAAAD,MAAC,UAAO,WAAU,UAAS,wBAAU;AAAA,MACjE,YAAY,cAAc,gBAAAA,MAAC,UAAO,WAAU,UAAS,sBAAQ;AAAA,MAC7D,YAAY,gBACX,gBAAAC,OAAC,SAAI,WAAU,8BACb;AAAA,wBAAAD,MAAC,OAAE,WAAU,yDAAwD,qCAErE;AAAA,QACA,gBAAAA,MAAC,UAAO,WAAU,UAAS,yBAAW;AAAA,QACtC,gBAAAA,MAAC,UAAO,SAAQ,aAAY,WAAU,UAAS,0BAAY;AAAA,SAC7D;AAAA,OAEJ;AAAA,KACF;AAEJ;AAaO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsB;AACpB,SACE,gBAAAC,OAAC,QAAK,WAAU,mFACd;AAAA,oBAAAA,OAAC,SAAI,WAAU,gDACb;AAAA,sBAAAD,MAAC,OAAE,WAAU,2CAA2C,iBAAM;AAAA,MAC9D,gBAAAA,MAAC,OAAE,WAAU,0BAA0B,gBAAK;AAAA,OAC9C;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,8BACb;AAAA,sBAAAD,MAAC,UAAO,WAAU,UAAU,wBAAa;AAAA,MACzC,gBAAAA,MAAC,UAAO,SAAQ,aAAY,WAAU,UAAU,0BAAe;AAAA,OACjE;AAAA,KACF;AAEJ;;;AClIA,SAAS,aAAAE,YAAW,eAAe;AAiCvB,gBAAAC,OAGJ,QAAAC,cAHI;AAZL,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AA5B/B;AA6BE,SACE,gBAAAD,MAAC,SAAI,WAAU,sFACb,0BAAAC,OAAC,YAAO,WAAU,mGACf;AAAA,cACC,gBAAAD,MAAC,oBAAiB,MAAK,UAAS,MAAK,MAAK,cAAW,QAAO,SAAS,QACnE,0BAAAA,MAACE,YAAA,EAAU,WAAU,UAAS,GAChC;AAAA,IAEF,gBAAAD,OAAC,SAAI,WAAU,yDACZ;AAAA,eACC,gBAAAD,MAAC,SAAM,UAAS,WAAM,YAAN,YAAiB,gBAAgB,MAAK,MACnD,gBAAM,OACT;AAAA,MAEF,gBAAAA,MAAC,UAAK,WAAU,6DACb,kBAAQ,QACX;AAAA,MACA,gBAAAA,MAAC,UAAK,WAAU,0BAA0B,kBAAQ,UAAS;AAAA,OAC7D;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,oCACZ;AAAA,iBAAW,gBAAAD,MAAC,kCAAkB,QAAS;AAAA,MACvC;AAAA,OACH;AAAA,KACF,GACF;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAAuD;AACrD,QAAM,OAAO,OAAO,UAAU,YAAY,QAAQ;AAClD,QAAM,QAAQ,OAAQ,QAAS,KAAK,QAAQ,OAAO,KAAK,IAAK;AAC7D,QAAM,YACJ,gDAAsB,OAAO,iBAAiB,KAAK,SAAS;AAC9D,SACE,gBAAAC,OAAC,SAAI,WAAU,wBACb;AAAA,oBAAAD,MAAC,oBAAiB,MAAK,UAAS,MAAK,MAAK,cAAY,WAAW,SAC/D,0BAAAA,MAAC,WAAQ,WAAU,UAAS,GAC9B;AAAA,IACC,QACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,QACX,WAAU;AAAA,QAET;AAAA;AAAA,IACH;AAAA,KAEJ;AAEJ;;;AChFA,SAAS,QAAAG,aAAY;AACrB,SAAS,aAAaC,2BAA0B;AAoDxC,SACE,OAAAC,OADF,QAAAC,cAAA;AAdD,SAAS,SAAS;AAAA,EACvB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AACX,GAAkB;AAhDlB;AAiDE,MAAI,WAAW,cAAc;AAC3B,WACE,gBAAAD,MAAC,SAAI,WAAU,qBACf,0BAAAC,OAAC,SAAI,WAAU,yDAEb;AAAA,sBAAAA,OAAC,SAAI,WAAU,gDACb;AAAA,wBAAAD,MAAC,UAAK,WAAU,4EAA4E,mBAAQ;AAAA,QACpG,gBAAAA,MAAC,QAAG,WAAU,0FAA0F,iBAAM;AAAA,QAC7G,SACC,gBAAAA,MAAC,OAAE,WAAU,sCAAsC,iBAAM;AAAA,SAE7D;AAAA,MAEA,gBAAAA,MAAC,SAAI,WAAU,UACb,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,aAAW;AAAA,UACX,cAAc,uCAAgB,WAAM,CAAC,MAAP,mBAAU;AAAA,UACxC,WAAU;AAAA,UAET,gBAAM,IAAI,CAAC,EAAE,OAAO,UAAU,OAAO,GAAG,MACvC,gBAAAC,OAAC,iBAA0B,OACzB;AAAA,4BAAAD,MAACE,oBAAmB,QAAnB,EAA0B,WAAU,QACnC,0BAAAD;AAAA,cAACC,oBAAmB;AAAA,cAAnB;AAAA,gBACC,WAAU;AAAA,gBAEV;AAAA,kCAAAD,OAAC,UAAK,WAAU,6BACd;AAAA,oCAAAD,MAAC,UAAK,WAAU,iDACb,iBAAO,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG,GAChC;AAAA,oBACA,gBAAAA,MAAC,UAAK,WAAU,yEAAyE,oBAAS;AAAA,qBACpG;AAAA,kBACA,gBAAAA,MAAC,UAAK,WAAW;AAAA,oBACf;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,GACE,0BAAAA,MAACG,OAAA,EAAK,WAAW;AAAA,oBACf;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,GAAG,GACL;AAAA;AAAA;AAAA,YACF,GACF;AAAA,YACA,gBAAAH,MAAC,oBACC,0BAAAA,MAAC,OAAE,WAAU,iDAAiD,kBAAO,GACvE;AAAA,eA1BkB,KA2BpB,CACD;AAAA;AAAA,MACH,GACF;AAAA,OACF,GACA;AAAA,EAEJ;AAEA,QAAM,eACJ,WAAW,YACP,qFACA;AACN,QAAM,iBACJ,WAAW,YACP,0DACA;AACN,QAAM,uBAAuB,WAAW,YAAY,QAAQ;AAC5D,QAAM,WAAW,WAAW,YAAY,WAAW;AACnD,QAAM,iBAAiB,WAAW,YAAY,UAAU;AAExD,SACE,gBAAAC,OAAC,SAAI,WAAW,wBAAwB,QAAQ,IAC9C;AAAA,oBAAAA,OAAC,SAAI,WAAW,iBAAiB,cAAc,wBAC7C;AAAA,sBAAAD,MAAC,UAAK,WAAU,oCAAoC,mBAAQ;AAAA,MAC5D,gBAAAA,MAAC,QAAG,WAAW,cAAe,iBAAM;AAAA,MACnC,SACC,gBAAAA,MAAC,OAAE,WAAU,gDAAgD,iBAAM;AAAA,OAEvE;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,aAAW;AAAA,QACX,cAAc,uCAAgB,WAAM,CAAC,MAAP,mBAAU;AAAA,QACxC,WAAU;AAAA,QAET,gBAAM,IAAI,CAAC,EAAE,OAAO,UAAU,OAAO,MACpC,gBAAAC,OAAC,iBAA0B,OACzB;AAAA,0BAAAD,MAAC,oBAAiB,WAAU,wEACzB,oBACH;AAAA,UACA,gBAAAA,MAAC,oBACC,0BAAAA,MAAC,OAAE,WAAU,yCAAyC,kBAAO,GAC/D;AAAA,aANkB,KAOpB,CACD;AAAA;AAAA,IACH;AAAA,IAEC,YACC,gBAAAC,OAAC,SAAI,WAAW,gEAAgE,oBAAoB,IAClG;AAAA,sBAAAA,OAAC,SAAI,WAAU,8BACb;AAAA,wBAAAD,MAAC,QAAG,WAAW,gBAAiB,mBAAS,OAAM;AAAA,QAC/C,gBAAAA,MAAC,OAAE,WAAU,sCAAsC,mBAAS,MAAK;AAAA,SACnE;AAAA,MACA,gBAAAA,MAAC,UAAO,MAAK,MAAK,SAAS,SAAS,YAAa,mBAAS,UAAS;AAAA,OACrE;AAAA,KAEJ;AAEJ;;;AC5JA,SAAS,cAAAI,aAAY,oBAAoB;AA2C/B,SACc,OAAAC,OADd,QAAAC,cAAA;AAbH,SAAS,UAAU;AAAA,EACxB,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACjB,MAAI,WAAW,YAAY;AACzB,WACE,gBAAAD,MAAC,SAAI,WAAU,8EACb,0BAAAC,OAAC,SAAI,WAAU,+GACb;AAAA,sBAAAA,OAAC,SAAI,WAAU,2CACZ;AAAA,mBAAW,gBAAAD,MAAC,gCAAgB,QAAS;AAAA,QACtC,gBAAAA,MAAC,QAAG,WAAU,oFACX,mBACH;AAAA,QACA,gBAAAA,MAAC,OAAE,WAAU,gDAAgD,gBAAK;AAAA,SACpE;AAAA,MACA,gBAAAC,OAAC,UAAO,MAAK,MAAK,SAAS,WAAW,SACnC;AAAA,mBAAW;AAAA,QACX,WAAW,kBAAkB,SAAS,gBAAAD,MAACE,aAAA,EAAW,WAAU,UAAS;AAAA,SACxE;AAAA,OACF,GACF;AAAA,EAEJ;AAGA,SACE,gBAAAF,MAAC,SAAI,WAAU,8EACb,0BAAAC,OAAC,SAAI,WAAU,uIACb;AAAA,oBAAAA,OAAC,SAAI,WAAU,sIACb;AAAA,sBAAAA,OAAC,SAAI,WAAU,qFACZ;AAAA,mBAAW,gBAAAD,MAAC,8CAAgB,UAAhB,EAAyB,YAAU,OAAC;AAAA,QACjD,gBAAAA,MAAC,QAAG,WAAU,6FACX,mBACH;AAAA,QACA,gBAAAA,MAAC,OAAE,WAAU,oCAAoC,gBAAK;AAAA,SACxD;AAAA,MACA,gBAAAC,OAAC,SAAI,WAAU,oEACb;AAAA,wBAAAD,MAAC,UAAO,MAAK,MAAK,SAAS,WAAW,SAAU,qBAAW,OAAM;AAAA,QAChE,gBACC,gBAAAA,MAAC,UAAO,SAAQ,aAAY,MAAK,MAAK,SAAS,aAAa,SACzD,uBAAa,OAChB;AAAA,SAEJ;AAAA,OACF;AAAA,IACA,gBAAAA,MAAC,SAAI,WAAU,6FAA4F,eAAY,QACpH,iBACH;AAAA,KACF,GACF;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACF,GAAgD;AAC9C,SACE,gBAAAC,OAAC,SAAI,WAAU,sHACb;AAAA,oBAAAD,MAAC,UAAK,WAAU,kDAAiD,eAAY,QAAO;AAAA,IACnF,cAAc,SACb,gBAAAC,OAAC,UAAK,WAAU,yDACd;AAAA,sBAAAA,OAAC,UAAK,WAAU,6BAA6B;AAAA;AAAA,QAAM,gBAAAD,MAAC,UAAK,WAAU,kBAAkB,oBAAM;AAAA,SAAO;AAAA,MAClG,gBAAAA,MAAC,UAAK,WAAU,gDAAgD,kBAAO;AAAA,OACzE,IAEA,gBAAAC,OAAC,UAAK,WAAU,yDACb;AAAA;AAAA,MACA,UAAU,gBAAAD,MAAC,UAAK,WAAU,kBAAkB,mBAAM,MAAM,IAAG;AAAA,OAC9D;AAAA,IAEF,gBAAAA,MAAC,gBAAa,WAAU,kCAAiC,eAAY,QAAO;AAAA,KAC9E;AAEJ;;;AC/GA,YAAYG,aAAW;AA2CjB,SACE,OAAAC,OADF,QAAAC,cAAA;AAnBC,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY,CAAC,UAAU,YAAY,GAAG;AAAA,EACtC;AAAA,EACA,gBAAgB;AAAA,EAChB,WAAW;AACb,GAAmB;AACjB,QAAM,cAAc,SAAS,YAAY,YAAY;AACrD,QAAM,YAAY,SAAS,YAAY,kBAAkB;AACzD,QAAM,UAAU,SAAS,YAAY,YAAY;AACjD,QAAM,eACJ,SAAS,YAAY,2BAA2B;AAClD,QAAM,kBAAkB,SAAS,YAAY,YAAY;AACzD,QAAM,CAAC,OAAO,QAAQ,IAAU,iBAAS,EAAE;AAE3C,SACE,gBAAAA,OAAC,SAAI,WAAU,2CACb;AAAA,oBAAAA,OAAC,SAAI,WAAU,2BACb;AAAA,sBAAAD,MAAC,SAAI,KAAK,SAAS,KAAK,UAAU,WAAU,yBAAwB;AAAA,MACpE,gBAAAA,MAAC,UAAK,WAAU,yEACb,oBACH;AAAA,OACF;AAAA,IAEA,gBAAAA,MAAC,QAAG,WAAU,qEACX,uBACH;AAAA,IAEA,gBAAAA,MAAC,SAAI,WAAU,8BACZ,oBAAU,IAAI,CAAC,MACd,gBAAAA,MAAC,kBAAuB,UAAU,KAAb,CAAgB,CACtC,GACH;AAAA,IAEA,gBAAAC,OAAC,SAAI,WAAU,kCACb;AAAA,sBAAAD,MAAC,SAAI,WAAU,gCAA+B;AAAA,MAC9C,gBAAAA,MAAC,UAAK,WAAU,oCAAmC,gBAAE;AAAA,MACrD,gBAAAA,MAAC,SAAI,WAAU,gCAA+B;AAAA,OAChD;AAAA,IAEA,gBAAAA,MAAC,SAAI,WAAU,kCACb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,GAAG,QAAQ;AAAA,QACf,MAAK;AAAA,QACL,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA;AAAA,IAC1C,GACF;AAAA,IAEA,gBAAAC,OAAC,OAAE,WAAU,qDACV;AAAA;AAAA,MAAU;AAAA,MAAmB;AAAA,MAC9B,gBAAAD,MAAC,QAAK,MAAK,MAAK,MAAK,KAAI,gCAAsB;AAAA,OACjD;AAAA,IAEA,gBAAAA,MAAC,UAAO,MAAK,MAAK,WAAU,UAAS,SAAS,MAAM,qCAAW,EAAE,MAAM,IACpE,mBACH;AAAA,IAEA,gBAAAC,OAAC,OAAE,WAAU,gDACV;AAAA;AAAA,MAAc;AAAA,MACf,gBAAAD,MAAC,QAAK,MAAK,MAAK,MAAM,eAAgB,2BAAgB;AAAA,OACxD;AAAA,KACF;AAEJ;AAEA,SAAS,eAAe,EAAE,SAAS,GAAoC;AACrE,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aACE,gBAAAC,OAAC,UAAO,SAAQ,aAAY,MAAK,MAAK,WAAU,UAC9C;AAAA,wBAAAA,OAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,eAAY,QAAO,MAAK,QAAO,WAAU,YACvF;AAAA,0BAAAD,MAAC,UAAK,GAAE,wIAAuI,MAAK,WAAU;AAAA,UAC9J,gBAAAA,MAAC,UAAK,GAAE,iJAAgJ,MAAK,WAAU;AAAA,UACvK,gBAAAA,MAAC,UAAK,GAAE,2IAA0I,MAAK,WAAU;AAAA,UACjK,gBAAAA,MAAC,UAAK,GAAE,kJAAiJ,MAAK,WAAU;AAAA,WAC1K;AAAA,QAAM;AAAA,SAER;AAAA,IAEJ,KAAK;AACH,aACE,gBAAAC,OAAC,UAAO,SAAQ,aAAY,MAAK,MAAK,WAAU,UAC9C;AAAA,wBAAAA,OAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,eAAY,QAAO,MAAK,QAAO,WAAU,YACvF;AAAA,0BAAAD,MAAC,YAAO,IAAG,KAAI,IAAG,KAAI,GAAE,KAAI,MAAK,WAAU;AAAA,UAC3C,gBAAAA,MAAC,UAAK,GAAE,uDAAsD,MAAK,SAAQ,SAAQ,OAAM;AAAA,UACzF,gBAAAA,MAAC,UAAK,GAAE,8DAA6D,MAAK,SAAQ;AAAA,WACpF;AAAA,QAAM;AAAA,SAER;AAAA,IAEJ,KAAK;AACH,aACE,gBAAAC,OAAC,UAAO,SAAQ,aAAY,MAAK,MAAK,WAAU,UAC9C;AAAA,wBAAAD,MAAC,SAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,eAAY,QAAO,MAAK,gBAAe,WAAU,YAC/F,0BAAAA,MAAC,UAAK,GAAE,2LAA0L,GACpM;AAAA,QAAM;AAAA,SAER;AAAA,EAEN;AACF;;;AC/HA,YAAYE,aAAW;AACvB,SAAS,MAAM,KAAAC,UAAS;AA+Bd,SACE,OAAAC,OADF,QAAAC,cAAA;AAPH,SAAS,YAAY,EAAE,OAAO,OAAO,QAAQ,OAAO,GAAqB;AA3BhF;AA4BE,QAAM,CAAC,gBAAgB,iBAAiB,IAAU,iBAAS,KAAK;AAEhE,SACE,gBAAAD,MAAC,SAAI,WAAU,iEACb,0BAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,oBAAAA,OAAC,SAAI,WAAU,kEACb;AAAA,sBAAAA,OAAC,SAAI,WAAU,2BACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,MAAM;AAAA,YACX,KAAK,MAAM;AAAA,YACX,WAAU;AAAA;AAAA,QACZ;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,MAAM;AAAA,YACX,KAAK,MAAM;AAAA,YACX,WAAU;AAAA;AAAA,QACZ;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,8CACZ,gBAAM,IAAI,CAAC,MACV,gBAAAA,MAAC,UAAqB,SAAQ,YAAW,MAAK,MAAK,SAAS,EAAE,SAC3D,YAAE,SADQ,EAAE,KAEf,CACD,GACH;AAAA,SACF;AAAA,MAEA,gBAAAC,OAAC,SAAI,WAAU,8CACZ;AAAA,kBACC,gBAAAD,MAAC,UAAO,SAAQ,YAAW,MAAK,MAAK,SAAS,OAAO,SAClD,uBAAO,UAAP,YAAgB,WACnB;AAAA,QAED,UACC,gBAAAA,MAAC,UAAO,MAAK,MAAK,SAAS,OAAO,SAC/B,uBAAO,UAAP,YAAgB,WACnB;AAAA,SAEJ;AAAA,MAEA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,cAAY,iBAAiB,0BAA0B;AAAA,UACvD,iBAAe;AAAA,UACf,WAAU;AAAA,UACV,SAAS,MAAM,kBAAkB,CAAC,SAAS,CAAC,IAAI;AAAA,UAE/C,2BAAiB,gBAAAA,MAACE,IAAA,EAAE,WAAU,UAAS,IAAK,gBAAAF,MAAC,QAAK,WAAU,UAAS;AAAA;AAAA,MACxE;AAAA,OACF;AAAA,IAEC,kBACC,gBAAAC,OAAC,SAAI,WAAU,qGACZ;AAAA,YAAM,IAAI,CAAC,MACV,gBAAAD;AAAA,QAAC;AAAA;AAAA,UAEC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS,EAAE;AAAA,UAEV,YAAE;AAAA;AAAA,QANE,EAAE;AAAA,MAOT,CACD;AAAA,OACC,UAAU,WACV,gBAAAC,OAAC,SAAI,WAAU,+DACZ;AAAA,kBACC,gBAAAD,MAAC,UAAO,SAAQ,aAAY,MAAK,MAAK,WAAU,UAAS,SAAS,OAAO,SACtE,uBAAO,UAAP,YAAgB,WACnB;AAAA,QAED,UACC,gBAAAA,MAAC,UAAO,MAAK,MAAK,WAAU,UAAS,SAAS,OAAO,SAClD,uBAAO,UAAP,YAAgB,WACnB;AAAA,SAEJ;AAAA,OAEJ;AAAA,KAEJ,GACF;AAEJ;;;AC5GA,SAAS,WAAAG,UAAS,KAAAC,UAAS;AAqDJ,gBAAAC,OAQb,QAAAC,cARa;AAXhB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,WAAW,YAAY;AAE7B,QAAM,OACJ,UAAU,WAAW,IAChB,kCAAc,gBAAAD,MAAC,qBAAkB,eAA8B,IAChE,gBAAAA,MAAC,iBAAc,WAAsB,eAA8B;AAEzE,MAAI,UAAU;AACZ,WACE,gBAAAC,OAAC,UACC;AAAA,sBAAAD,MAAC,iBAAc,SAAO,MAAE,mBAAQ;AAAA,MAChC,gBAAAC,OAAC,iBAAc,WAAU,qBACvB;AAAA,wBAAAA,OAAC,gBAAa,WAAU,sEACtB;AAAA,0BAAAD,MAAC,eAAY,WAAU,0DACpB,sBACH;AAAA,UACA,gBAAAA,MAAC,eAAY,SAAO,MAClB,0BAAAA,MAAC,oBAAiB,MAAK,MAAK,cAAW,SAAQ,0BAAAA,MAACE,IAAA,EAAE,GAAE,GACtD;AAAA,WACF;AAAA,QACA,gBAAAF,MAAC,aAAU;AAAA,QACV;AAAA,SACH;AAAA,OACF;AAAA,EAEJ;AAEA,SACE,gBAAAC,OAAC,SACC;AAAA,oBAAAD,MAAC,gBAAa,SAAO,MAAE,mBAAQ;AAAA,IAC/B,gBAAAC,OAAC,gBAAa,MAAK,SAAQ,iBAAiB,OAAO,WAAU,sCAC3D;AAAA,sBAAAA,OAAC,eAAY,WAAU,4DACrB;AAAA,wBAAAD,MAAC,cAAW,WAAU,0DACnB,sBACH;AAAA,QACA,gBAAAA,MAAC,cAAW,SAAO,MACjB,0BAAAA,MAAC,oBAAiB,MAAK,MAAK,cAAW,SAAQ,0BAAAA,MAACE,IAAA,EAAE,GAAE,GACtD;AAAA,SACF;AAAA,MACA,gBAAAF,MAAC,aAAU;AAAA,MACV;AAAA,OACH;AAAA,KACF;AAEJ;AAGA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AACF,GAGG;AACD,SACE,gBAAAC,OAAC,SAAI,WAAU,gCACb;AAAA,oBAAAD,MAAC,aAAU,WAAU,2BAClB,oBAAU,IAAI,CAAC,KAAK,MACnB,gBAAAA,MAAC,eAAoB,UAAU,OAAb,CAAkB,CACrC,GACH;AAAA,IACA,gBAAAA,MAAC,aAAU;AAAA,IACX,gBAAAA,MAAC,SAAI,WAAU,qCACb,0BAAAA,MAAC,UAAO,SAAQ,YAAW,MAAK,MAAK,SAAS,eAAe,gCAE7D,GACF;AAAA,KACF;AAEJ;AAEA,SAAS,YAAY,EAAE,SAAS,GAA2B;AACzD,QAAM,EAAE,OAAO,OAAO,IAAI,mBAAmB,QAAQ;AACrD,SACE,gBAAAC,OAAC,QAAK,MAAK,MACT;AAAA,oBAAAA,OAAC,eACC;AAAA,sBAAAA,OAAC,aACC;AAAA,wBAAAD,MAAC,UAAK,WAAU,qBAAqB,iBAAM;AAAA,QAC1C,UAAU,gBAAAA,MAAC,UAAK,WAAU,kBAAkB,cAAI,MAAM,IAAG;AAAA,SAC5D;AAAA,MACA,gBAAAA,MAAC,YAAS,QAAQ,SAAS,QAAQ,UAAU,SAAS,UAAU;AAAA,OAClE;AAAA,IACA,gBAAAA,MAAC,eACC,0BAAAA,MAAC,WAAQ,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,OAAO,SAAS,OAAO,GACxE;AAAA,KACF;AAEJ;AAEA,IAAM,oBAA4D;AAAA,EAChE,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AACT;AAOA,SAAS,mBAAmB,GAAiD;AAC3E,UAAQ,EAAE,MAAM;AAAA,IACd,KAAK;AAAa,aAAO,EAAE,OAAO,EAAE,UAAU;AAAA,IAC9C,KAAK;AAAa,aAAO,EAAE,OAAO,SAAS,EAAE,UAAU,YAAY,CAAC,GAAG;AAAA,IACvE,KAAK;AAAa,aAAO,EAAE,OAAO,SAAS,QAAQ,EAAE,WAAW;AAAA;AAAA;AAAA,IAGhE,KAAK;AAAa,aAAO,EAAE,OAAO,kBAAkB,EAAE,IAAI,GAAG,QAAQ,EAAE,MAAM;AAAA,EAC/E;AACF;AAEA,SAAS,SAAS,EAAE,QAAQ,SAAS,GAAyC;AAC5E,SACE,gBAAAC,OAAC,UAAK,WAAU,4CACb;AAAA;AAAA,IAAO;AAAA,IAAI;AAAA,KACd;AAEJ;AAEA,SAAS,QAAQ,EAAE,KAAK,KAAK,MAAM,GAAiD;AAClF,SACE,gBAAAA,OAAC,SAAI,WAAU,mCACb;AAAA,oBAAAD,MAAC,UAAK,WAAW,qDAAqD,MAAM,sBAAsB,oBAAoB,IACnH,eACH;AAAA,IACA,gBAAAA,MAAC,UAAK,WAAU,uCAAuC,iBAAM;AAAA,KAC/D;AAEJ;AAEA,SAAS,kBAAkB,EAAE,cAAc,GAAmC;AAC5E,SACE,gBAAAA,MAAC,SAAM,WAAU,wFACf,0BAAAC,OAAC,eAAY,WAAU,SACrB;AAAA,oBAAAD,MAAC,cACC,0BAAAA,MAACG,UAAA,EAAQ,WAAU,yBAAwB,GAC7C;AAAA,IAKA,gBAAAH,MAAC,cAAW,WAAU,qBAAoB,4BAE1C;AAAA,IACA,gBAAAA,MAAC,UAAO,SAAQ,YAAW,MAAK,MAAK,SAAS,eAAe,gCAE7D;AAAA,KACF,GACF;AAEJ;;;AC3MA,YAAYI,aAAW;AA+Nf,gBAAAC,OAIA,QAAAC,cAJA;AApLD,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,UAAU;AAAA,EACV,aAAa;AACf,GAA6C;AApD7C;AAqDE,QAAM,CAAC,UAAU,WAAW,IAAU,iBAAS,CAAC;AAChD,QAAM,CAAC,SAAS,UAAU,IAAU,iBAAS,KAAK;AAIlD,QAAM,iBAAuB,eAAO,WAAW;AAC/C,QAAM,aAAmB,eAAO,OAAO;AACvC,QAAM,UAAgB,eAAO,IAAI;AAMjC,EAAM,kBAAU,MAAM;AACpB,mBAAe,UAAU;AACzB,eAAW,UAAU;AACrB,YAAQ,UAAU;AAAA,EACpB,CAAC;AAED,QAAM,cAAoB,eAAO,CAAC;AAClC,QAAM,iBAAuB,eAAO,CAAC;AAErC,EAAM,kBAAU,MAAM;AACpB,QAAI,MAAM;AACV,QAAI,OAAO;AACX,UAAM,OAAO,CAAC,OAAe;AA9EjC,UAAAC,KAAAC;AA+EM,UAAI,CAAC,KAAM,QAAO;AAClB,YAAM,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAM,IAAI;AAC5C,aAAO;AAEP,YAAM,MAAM,eAAe;AAC3B,YAAM,SAAS,QAAQ;AACvB,YAAMC,OAAM,KAAK,IAAI,WAAW,SAAS,IAAI,SAAS,CAAC;AACvD,YAAM,UAAU,SAAS,OAAMD,OAAAD,MAAA,IAAIE,IAAG,MAAP,gBAAAF,IAAU,WAAV,OAAAC,MAAoB;AACnD,YAAM,MAAM,YAAY;AACxB,YAAM,MAAM,UAAU;AAMtB,UAAI,MAAM,MAAM;AACd,oBAAY,UAAU;AACtB,uBAAe,UAAU;AACzB,oBAAY,CAAC;AACb,mBAAW,KAAK;AAChB,cAAM,sBAAsB,IAAI;AAChC;AAAA,MACF;AAEA,UAAI,MAAM,MAAM;AACd,cAAM,OAAO,KAAK,IAAI,aAAa,MAAM,GAAG;AAC5C,YAAI,OAAO,MAAM,OAAO;AACxB,YAAI,OAAO,QAAS,QAAO;AAC3B,YAAI,UAAU,OAAO,KAAM,QAAO;AAClC,oBAAY,UAAU;AACtB,uBAAe,UAAU;AACzB,oBAAY,IAAI;AAChB,mBAAW,KAAK;AAAA,MAClB,WAAW,CAAC,UAAU,eAAe,WAAW,KAAK,eAAe,UAAU,SAAS;AACrF,mBAAW,IAAI;AAAA,MACjB;AAEA,YAAM,sBAAsB,IAAI;AAAA,IAClC;AACA,UAAM,sBAAsB,IAAI;AAChC,WAAO,MAAM,qBAAqB,GAAG;AAAA,EACvC,GAAG,CAAC,aAAa,OAAO,CAAC;AAEzB,QAAM,MAAM,KAAK,IAAI,SAAS,YAAY,SAAS,CAAC;AACpD,QAAM,QAAQ,QAAQ,YAAY,OAAO,cAAa,uBAAY,GAAG,MAAf,mBAAkB,UAAlB,YAA2B;AACjF,SAAO,EAAE,UAAU,OAAO,SAAS,UAAU,QAAQ,YAAY,IAAI;AACvE;AAOA,IAAM,aACJ;AAkCK,SAAS,iBAAiB;AAAA,EAC/B,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,UAAU;AAAA,EACV;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,CAAC,IAAI,KAAK,IAAU,iBAAS,KAAK;AACxC,QAAM,CAAC,SAAS,UAAU,IAAU,iBAAS,KAAK;AAElD,EAAM,kBAAU,MAAM;AACpB,QAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,iBAAW,OAAO,WAAW,kCAAkC,EAAE,OAAO;AAAA,IAC1E;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,EAAM,kBAAU,MAAM;AACpB,QAAI,CAAC,QAAS;AACd,UAAM,MAAM,sBAAsB,MAAM,MAAM,IAAI,CAAC;AACnD,UAAM,QAAQ,WAAW,MAAM,0CAAe,UAAU,MAAM,GAAG;AACjE,WAAO,MAAM;AACX,2BAAqB,GAAG;AACxB,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,SAAS,CAAC;AAGhC,QAAM,aAAa,WAAW;AAE9B,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,cAAW;AAAA,MACX,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA,aAAa,aAAa;AAAA;AAAA,QAE1B,CAAC,sBAAsB;AAAA,QACvB,sBAAsB;AAAA,QACtB,YAAY,UAAU,oCAAoC;AAAA,QAC1D,WAAW,KAAK,cAAc;AAAA,QAC9B;AAAA,MACF;AAAA,MACA,OAAO,qBAAqB,EAAE,iBAAiB,OAAO,kBAAkB,IAAI,IAAI;AAAA,MAEhF;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,eAAY;AAAA,YACZ,WAAW,GAAG,oCAAoC,WAAW,MAAM,CAAC,WAAW,uBAAuB;AAAA,YAEtG,0BAAAA,MAAC,UAAK,GAAG,YAAY;AAAA;AAAA,QACvB;AAAA,QAEC,CAAC,WACA,gBAAAC,OAAC,SAAI,WAAU,+CACb;AAAA,0BAAAD,MAAC,SAAI,WAAU,mEACb,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAI;AAAA,cAE/B,0BAAAA,MAAC,UAAK,eAAY,QAAO,WAAU,8DAA6D;AAAA;AAAA,UAClG,GACF;AAAA,UACA,gBAAAA,MAAC,UAAK,WAAU,8BACb,oBAAU,mCAA8B,OAC3C;AAAA,WACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":["cva","jsx","jsx","jsxs","cva","Slot","jsx","cva","Slot","jsx","jsxs","cva","jsx","jsxs","jsx","jsx","cva","Slot","jsx","cva","Slot","React","X","jsx","jsxs","wrapAction","X","React","Slot","jsx","jsxs","_a","_b","Slot","Slot","jsx","jsxs","Slot","React","ChevronDownIcon","ChevronDownIcon","jsx","jsxs","_a","ChevronDownIcon","jsx","jsxs","_a","_b","className","props","ChevronDownIcon","jsx","React","React","ChevronLeftIcon","ChevronRightIcon","jsx","jsxs","ChevronLeftIcon","ChevronRightIcon","jsx","jsxs","api","cva","jsx","cva","CheckIcon","jsx","CheckIcon","jsx","jsxs","jsx","jsxs","CheckIcon","ChevronRightIcon","jsx","jsxs","ChevronRightIcon","CheckIcon","jsx","jsxs","CheckIcon","ChevronRightIcon","CircleIcon","jsx","jsxs","CheckIcon","CircleIcon","ChevronRightIcon","cva","jsx","cva","React","useMemo","cva","jsx","jsx","jsx","jsxs","cva","useMemo","_a","jsx","cva","jsx","cva","React","cva","jsx","jsx","cva","_a","_b","React","jsx","jsxs","_a","cva","Slot","jsx","cva","Slot","cva","Slot","jsx","cva","Slot","CheckIcon","ChevronRightIcon","CircleIcon","jsx","jsxs","CheckIcon","CircleIcon","ChevronRightIcon","ChevronDownIcon","jsx","jsxs","ChevronDownIcon","cva","ChevronDownIcon","jsx","jsxs","cva","ChevronDownIcon","React","jsx","jsx","React","jsx","jsxs","jsx","jsxs","CircleIcon","jsx","CircleIcon","jsx","jsx","jsxs","XIcon","jsx","jsxs","XIcon","React","cva","Slot","React","jsx","React","jsx","jsxs","jsx","jsxs","open","Slot","cva","React","jsx","jsxs","React","jsx","jsxs","_a","React","ArrowRight","jsx","jsxs","INSET","ArrowRight","React","jsx","jsxs","React","Check","jsx","jsxs","Check","jsx","jsx","cva","jsx","cva","cva","jsx","cva","React","jsx","Fragment","jsx","jsxs","ArrowLeft","jsx","jsxs","ArrowLeft","Plus","AccordionPrimitive","jsx","jsxs","AccordionPrimitive","Plus","ArrowRight","jsx","jsxs","ArrowRight","React","jsx","jsxs","React","X","jsx","jsxs","X","History","X","jsx","jsxs","X","History","React","jsx","jsxs","_a","_b","idx"]}