reend-components 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.cjs +249 -6
- package/dist/lib/index.cjs +4 -1
- package/dist/lib/index.cjs.map +1 -1
- package/dist/lib/index.d.ts +574 -19
- package/dist/lib/index.mjs +4414 -1403
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/style.css +1 -1
- package/package.json +10 -1
- package/src/styles/utilities.css +580 -0
- package/src/styles/variables.css +250 -14
- package/src/tailwind-preset.ts +194 -15
package/dist/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/lib/utils.ts","../../src/components/ui/tooltip.tsx","../../src/components/ui/toast.tsx","../../src/hooks/use-toast.ts","../../src/components/ui/toaster.tsx","../../src/components/ui/sonner.tsx","../../src/components/ui/button.tsx","../../src/components/ui/badge.tsx","../../src/components/ui/card.tsx","../../src/components/ui/input.tsx","../../src/components/ui/textarea.tsx","../../src/components/ui/checkbox.tsx","../../src/components/ui/radio-group.tsx","../../src/components/ui/switch.tsx","../../src/components/ui/select.tsx","../../src/components/ui/avatar.tsx","../../src/components/ui/progress.tsx","../../src/components/ui/accordion.tsx","../../src/components/ui/tabs.tsx","../../src/components/ui/popover.tsx","../../src/components/ui/dialog.tsx","../../src/components/ui/separator.tsx","../../src/components/ui/skeleton.tsx","../../src/components/ui/empty-state.tsx","../../src/components/ui/alert.tsx","../../src/components/ui/timeline.tsx","../../src/components/ui/stepper.tsx","../../src/components/ui/pagination.tsx","../../src/components/ui/breadcrumb.tsx","../../src/components/ui/number-input.tsx","../../src/components/ui/signature/glitch-text.tsx","../../src/components/ui/signature/diamond-loader.tsx","../../src/components/ui/signature/tactical-panel.tsx","../../src/components/ui/signature/holo-card.tsx","../../src/components/ui/signature/data-stream.tsx","../../src/components/ui/signature/tactical-badge.tsx","../../src/components/ui/signature/warning-banner.tsx","../../src/components/ui/signature/scan-divider.tsx","../../src/components/ui/signature/coordinate-tag.tsx","../../src/components/ui/signature/radar-chart.tsx","../../src/components/ui/signature/hud-overlay.tsx","../../src/components/ui/signature/mission-card.tsx","../../src/components/ui/signature/operator-card.tsx","../../src/components/ui/signature/status-bar.tsx","../../src/components/ui/signature/command-output.tsx","../../src/components/ui/signature/countdown-timer.tsx","../../src/components/ui/signature/tactical-table.tsx","../../src/components/ui/signature/matrix-grid.tsx","../../src/components/ui/signature/frequency-bars.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from \"react\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Viewport\n ref={ref}\n className={cn(\n \"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\",\n className,\n )}\n {...props}\n />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n {\n variants: {\n variant: {\n default: \"border bg-background text-foreground\",\n destructive:\n \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Toast = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n return (\n <ToastPrimitives.Root\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Action\n ref={ref}\n className={cn(\n \"inline-flex h-8 shrink-0 items-center justify-center border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Close\n ref={ref}\n className={cn(\n \"absolute right-2 top-2 p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\",\n className,\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"h-4 w-4\" />\n </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Title\n ref={ref}\n className={cn(\"text-sm font-semibold\", className)}\n {...props}\n />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Description\n ref={ref}\n className={cn(\"text-sm opacity-90\", className)}\n {...props}\n />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n","import * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"../components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 5000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import { useToast } from \"../../hooks/use-toast\";\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"./toast\";\n\nexport function Toaster() {\n const { toasts } = useToast();\n\n return (\n <ToastProvider>\n {toasts.map(function ({ id, title, description, action, ...props }) {\n return (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && (\n <ToastDescription>{description}</ToastDescription>\n )}\n </div>\n {action}\n <ToastClose />\n </Toast>\n );\n })}\n <ToastViewport />\n </ToastProvider>\n );\n}\n","import { Toaster as Sonner, toast } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ theme = \"dark\", ...props }: ToasterProps) => {\n return (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n description: \"group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster, toast };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 font-display font-bold uppercase tracking-[0.1em] transition-all duration-150 select-none whitespace-nowrap focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-40\",\n {\n variants: {\n variant: {\n primary:\n \"clip-corner bg-primary text-primary-foreground hover:brightness-110 hover:shadow-glow active:brightness-90\",\n secondary:\n \"clip-corner border border-border-strong text-card-foreground bg-transparent hover:border-primary/60 hover:text-primary active:bg-primary/5\",\n ghost:\n \"bg-transparent text-muted-foreground hover:text-primary hover:bg-primary/5 active:bg-primary/10\",\n danger:\n \"clip-corner bg-destructive text-destructive-foreground hover:brightness-110 active:brightness-90\",\n link: \"bg-transparent text-primary underline-offset-4 hover:underline h-auto p-0\",\n icon: \"bg-surface-2 border border-border text-muted-foreground hover:border-primary/30 hover:bg-primary/10 hover:text-primary\",\n },\n size: {\n xs: \"h-7 px-3 text-[11px]\",\n sm: \"h-8 px-4 text-xs\",\n md: \"h-11 px-7 text-sm\",\n lg: \"h-[52px] px-9 text-base\",\n xl: \"h-[60px] px-12 text-lg\",\n icon: \"h-10 w-10 p-0\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * When true, renders the button as its child element (Radix Slot pattern).\n * Useful for wrapping `<a>` or other elements with button styling.\n * @example <Button asChild><a href=\"/page\">Go</a></Button>\n */\n asChild?: boolean;\n /**\n * Displays a diamond spinner and disables interaction.\n * Sets `aria-busy` for accessibility.\n */\n loading?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n disabled,\n children,\n type = \"button\",\n ...props\n },\n ref,\n ) => {\n if (asChild) {\n return (\n <Slot\n ref={ref as React.ForwardedRef<HTMLElement>}\n className={cn(buttonVariants({ variant, size }), className)}\n aria-disabled={disabled || undefined}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n buttonVariants({ variant, size }),\n loading && \"pointer-events-none opacity-80\",\n className,\n )}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading && (\n <span\n className=\"h-4 w-4 shrink-0 border-2 border-current clip-corner-sm animate-diamond-spin\"\n aria-hidden=\"true\"\n />\n )}\n {children}\n </button>\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1.5 border px-2.5 py-0.5 font-mono text-[10px] font-semibold tracking-[0.12em] uppercase transition-colors\",\n {\n variants: {\n variant: {\n default: \"border-border text-muted-foreground bg-surface-2\",\n primary: \"border-primary/40 text-primary bg-primary/10\",\n info: \"border-ef-blue/40 text-ef-blue bg-ef-blue/10\",\n success: \"border-ef-green/40 text-ef-green bg-ef-green/10\",\n warning: \"border-ef-orange/40 text-ef-orange bg-ef-orange/10\",\n danger: \"border-destructive/40 text-destructive bg-destructive/10\",\n purple: \"border-ef-purple/40 text-ef-purple bg-ef-purple/10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface BadgeProps\n extends\n React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n /**\n * Displays a × remove button at the end of the badge.\n * Use together with `onRemove` to handle removal.\n */\n removable?: boolean;\n /**\n * Called when the × remove button is clicked.\n * Only fires when `removable` is true.\n */\n onRemove?: () => void;\n}\n\nconst Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, removable, onRemove, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(badgeVariants({ variant }), removable && \"pr-1\", className)}\n {...props}\n >\n {children}\n {removable && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove?.();\n }}\n className=\"ml-0.5 inline-flex items-center justify-center leading-none opacity-50 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-current\"\n aria-label=\"Remove\"\n tabIndex={0}\n >\n ×\n </button>\n )}\n </span>\n ),\n);\nBadge.displayName = \"Badge\";\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n// ── Corner brackets via Tailwind before:/after: utilities ─────────────────────\nconst BRACKET_BASE =\n \"before:content-[''] before:absolute before:-top-px before:-left-px \" +\n \"before:w-6 before:h-6 before:border-t-2 before:border-l-2 \" +\n \"before:border-primary/40 before:pointer-events-none \" +\n \"after:content-[''] after:absolute after:-bottom-px after:-right-px \" +\n \"after:w-6 after:h-6 after:border-b-2 after:border-r-2 \" +\n \"after:border-primary/40 after:pointer-events-none\";\n\nconst cardVariants = cva(\n [\n \"relative bg-surface-1 border border-border transition-all duration-300\",\n BRACKET_BASE,\n ].join(\" \"),\n {\n variants: {\n hoverable: {\n true: [\n \"cursor-pointer\",\n \"hover:-translate-y-1\",\n \"hover:shadow-[0_16px_48px_rgba(0,0,0,0.5)]\",\n \"hover:border-primary/20\",\n \"hover:before:border-primary/60\",\n \"hover:after:border-primary/60\",\n ].join(\" \"),\n false: \"\",\n },\n selected: {\n true: \"border-2 border-primary/40 bg-primary/[0.06]\",\n false: \"\",\n },\n },\n defaultVariants: {\n hoverable: false,\n selected: false,\n },\n },\n);\n\n// ── CardProps ─────────────────────────────────────────────────────────────────\n\nexport interface CardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /**\n * Adds hover lift effect — `translateY(-4px)` + deep shadow + yellow border tint.\n * Bracket corners intensify on hover.\n */\n hoverable?: boolean;\n /**\n * Highlights card with primary border + subtle yellow background.\n * Use for selected/active state in selection grids.\n */\n selected?: boolean;\n}\n\n// ── Card (root) ───────────────────────────────────────────────────────────────\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, hoverable, selected, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardVariants({ hoverable, selected }), className)}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\n// ── CardHeader ────────────────────────────────────────────────────────────────\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-start justify-between gap-4 p-5\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\n// ── CardMeta ──────────────────────────────────────────────────────────────────\nconst CardMeta = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"font-mono text-[10px] tracking-[0.15em] uppercase text-primary mb-2\",\n className,\n )}\n {...props}\n />\n));\nCardMeta.displayName = \"CardMeta\";\n\n// ── CardTitle ─────────────────────────────────────────────────────────────────\nconst CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"font-display text-sm font-bold tracking-[0.02em] uppercase text-foreground\",\n className,\n )}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\n// ── CardDescription ───────────────────────────────────────────────────────────\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground leading-relaxed\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\n// ── CardBody ──────────────────────────────────────────────────────────────────\nconst CardBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-5\", className)} {...props} />\n));\nCardBody.displayName = \"CardBody\";\n\n// ── CardFooter ────────────────────────────────────────────────────────────────\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-3 px-5 py-4 border-t border-border\",\n className,\n )}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\n// ── Exports ───────────────────────────────────────────────────────────────────\n\nexport {\n Card,\n cardVariants,\n CardHeader,\n CardMeta,\n CardTitle,\n CardDescription,\n CardBody,\n CardFooter,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n// ── Wrapper variants ──────────────────────────────────────────────────────────\nconst inputWrapperVariants = cva(\n \"relative flex items-center border transition-all duration-150 bg-surface-1\",\n {\n variants: {\n state: {\n default: [\n \"border-input\",\n \"hover:border-border-strong\",\n \"focus-within:border-primary\",\n \"focus-within:shadow-[0_0_0_3px_rgba(255,212,41,0.1)]\",\n ].join(\" \"),\n error: [\n \"border-ef-red\",\n \"focus-within:shadow-[0_0_0_3px_rgba(255,71,87,0.1)]\",\n ].join(\" \"),\n success: \"border-ef-green\",\n },\n size: {\n sm: \"h-8\",\n md: \"h-11\",\n lg: \"h-[52px]\",\n },\n },\n defaultVariants: {\n state: \"default\",\n size: \"md\",\n },\n },\n);\n\n// ── InputProps ────────────────────────────────────────────────────────────────\nexport interface InputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\"\n> {\n state?: \"default\" | \"error\" | \"success\";\n size?: \"sm\" | \"md\" | \"lg\";\n leftElement?: React.ReactNode;\n rightElement?: React.ReactNode;\n}\n\n// ── Input ──────────────────────────────────────────────────────────────────────\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n state = \"default\",\n size = \"md\",\n leftElement,\n rightElement,\n disabled,\n ...props\n },\n ref,\n ) => {\n const pl = leftElement ? \"pl-2\" : size === \"sm\" ? \"pl-2\" : \"pl-3\";\n const pr = rightElement ? \"pr-2\" : size === \"sm\" ? \"pr-2\" : \"pr-3\";\n\n return (\n <div\n className={cn(\n inputWrapperVariants({ state, size }),\n disabled &&\n \"opacity-40 cursor-not-allowed pointer-events-none bg-background\",\n className,\n )}\n >\n {leftElement && (\n <span className=\"pl-3 flex-shrink-0 text-muted-foreground flex items-center\">\n {leftElement}\n </span>\n )}\n <input\n ref={ref}\n disabled={disabled}\n className={cn(\n \"h-full flex-1 min-w-0 bg-transparent text-foreground text-sm font-mono\",\n \"placeholder:text-muted-foreground focus:outline-none\",\n pl,\n pr,\n )}\n {...props}\n />\n {rightElement && (\n <span className=\"pr-3 flex-shrink-0 text-muted-foreground flex items-center\">\n {rightElement}\n </span>\n )}\n </div>\n );\n },\n);\nInput.displayName = \"Input\";\n\n// ── Label ─────────────────────────────────────────────────────────────────────\n\nconst Label = React.forwardRef<\n HTMLLabelElement,\n React.LabelHTMLAttributes<HTMLLabelElement>\n>(({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={cn(\n \"font-display text-[11px] font-semibold uppercase tracking-widest text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nLabel.displayName = \"Label\";\n\n// ── HelperText ────────────────────────────────────────────────────────────────\n\nexport interface HelperTextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n state?: \"default\" | \"error\" | \"success\";\n}\n\nconst HelperText = React.forwardRef<HTMLParagraphElement, HelperTextProps>(\n ({ className, state = \"default\", ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"text-[12px] leading-tight\",\n state === \"error\" && \"text-destructive\",\n state === \"success\" && \"text-ef-green\",\n state === \"default\" && \"text-muted-foreground\",\n className,\n )}\n {...props}\n />\n ),\n);\nHelperText.displayName = \"HelperText\";\n\n// ── Exports ───────────────────────────────────────────────────────────────────\n\nexport { Input, inputWrapperVariants, Label, HelperText };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n// ── Textarea variants ─────────────────────────────────────────────────────────\n\nconst textareaVariants = cva(\n [\n \"w-full resize-y border bg-surface-1 text-foreground\",\n \"placeholder:text-muted-foreground font-mono text-sm\",\n \"transition-all duration-150 focus:outline-none\",\n \"min-h-[120px] px-3 py-2.5\",\n \"disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-background disabled:pointer-events-none\",\n ].join(\" \"),\n {\n variants: {\n state: {\n default: [\n \"border-input\",\n \"hover:border-border-strong\",\n \"focus:border-primary\",\n \"focus:shadow-[0_0_0_3px_rgba(255,212,41,0.1)]\",\n ].join(\" \"),\n error: [\n \"border-ef-red\",\n \"focus:shadow-[0_0_0_3px_rgba(255,71,87,0.1)]\",\n ].join(\" \"),\n success: \"border-ef-green\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n },\n);\n\n// ── TextareaProps ─────────────────────────────────────────────────────────────\n\nexport interface TextareaProps\n extends\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {\n state?: \"default\" | \"error\" | \"success\";\n showCount?: boolean;\n}\n\n// ── Textarea ──────────────────────────────────────────────────────────────────\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n { className, state = \"default\", showCount, maxLength, onChange, ...rest },\n ref,\n ) => {\n const [count, setCount] = React.useState(() => {\n const initial = rest.value ?? rest.defaultValue ?? \"\";\n return String(initial).length;\n });\n\n React.useEffect(() => {\n if (rest.value !== undefined) {\n setCount(String(rest.value).length);\n }\n }, [rest.value]);\n\n const counterColorClass = (): string => {\n if (maxLength !== undefined && count > maxLength)\n return \"text-destructive\";\n if (maxLength !== undefined && count / maxLength >= 0.8)\n return \"text-ef-orange\";\n return \"text-muted-foreground\";\n };\n\n return (\n <div className=\"relative\">\n <textarea\n ref={ref}\n maxLength={maxLength}\n onChange={(e) => {\n setCount(e.target.value.length);\n onChange?.(e);\n }}\n className={cn(\n textareaVariants({ state }),\n showCount && \"pb-7\",\n className,\n )}\n {...rest}\n />\n {showCount && (\n <span\n className={cn(\n \"absolute bottom-2 right-3 font-mono text-[11px] pointer-events-none select-none\",\n counterColorClass(),\n )}\n >\n {maxLength !== undefined ? `${count}/${maxLength}` : count}\n </span>\n )}\n </div>\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\n// ── Exports ───────────────────────────────────────────────────────────────────\nexport { Textarea, textareaVariants };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface CheckboxProps extends React.ComponentPropsWithoutRef<\n typeof CheckboxPrimitive.Root\n> {\n label?: string;\n helperText?: string;\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, label, helperText, id, ...props }, ref) => {\n const generatedId = React.useId();\n const checkboxId = id ?? generatedId;\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center gap-3\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={checkboxId}\n className={cn(\n \"group peer h-[18px] w-[18px] shrink-0 border-2 border-input bg-transparent\",\n \"cursor-pointer transition-all duration-150\",\n \"hover:border-primary/60\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n \"data-[state=indeterminate]:bg-primary/50 data-[state=indeterminate]:border-primary\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center\">\n <span className=\"hidden group-data-[state=checked]:inline leading-none text-primary-foreground text-[10px] font-bold select-none\">\n ◆\n </span>\n <span className=\"hidden group-data-[state=indeterminate]:inline leading-none text-primary-foreground text-sm font-bold select-none\">\n −\n </span>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"text-sm text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-40 select-none leading-none\"\n >\n {label}\n </label>\n )}\n </div>\n {helperText && (\n <p className=\"text-[12px] text-muted-foreground pl-[30px]\">\n {helperText}\n </p>\n )}\n </div>\n );\n});\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"../../lib/utils\";\n\nexport type RadioGroupProps = React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Root\n>;\n\nexport interface RadioGroupItemProps extends React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Item\n> {\n label?: string;\n helperText?: string;\n}\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(\"flex flex-col gap-3\", className)}\n {...props}\n />\n));\nRadioGroup.displayName = \"RadioGroup\";\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({ className, label, helperText, id, ...props }, ref) => {\n const generatedId = React.useId();\n const itemId = id ?? generatedId;\n\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-3\">\n <RadioGroupPrimitive.Item\n ref={ref}\n id={itemId}\n className={cn(\n \"group peer cursor-pointer shrink-0 flex items-center justify-center\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n className,\n )}\n {...props}\n >\n <span className=\"text-[18px] leading-none select-none transition-colors duration-150 group-data-[state=unchecked]:inline group-data-[state=checked]:hidden text-muted-foreground/50 group-hover:text-muted-foreground group-data-[disabled]:pointer-events-none\">\n ◇\n </span>\n <span className=\"text-[18px] leading-none select-none transition-colors duration-150 group-data-[state=checked]:inline group-data-[state=unchecked]:hidden text-primary\">\n ◆\n </span>\n </RadioGroupPrimitive.Item>\n {label && (\n <label\n htmlFor={itemId}\n className=\"text-sm text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-40 select-none leading-none\"\n >\n {label}\n </label>\n )}\n </div>\n {helperText && (\n <p className=\"text-[12px] text-muted-foreground pl-[30px]\">\n {helperText}\n </p>\n )}\n </div>\n );\n});\nRadioGroupItem.displayName = \"RadioGroupItem\";\n\nexport { RadioGroup, RadioGroupItem };\n","import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<\n typeof SwitchPrimitive.Root\n> {\n label?: string;\n offLabel?: string;\n onLabel?: string;\n}\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, label, offLabel, onLabel, id, checked, ...props }, ref) => {\n const generatedId = React.useId();\n const switchId = id ?? generatedId;\n\n return (\n <div className=\"flex items-center gap-3\">\n {(offLabel || onLabel) && (\n <span className=\"text-[11px] font-mono uppercase tracking-widest text-muted-foreground select-none min-w-[32px] text-right\">\n {checked ? onLabel : offLabel}\n </span>\n )}\n <SwitchPrimitive.Root\n ref={ref}\n id={switchId}\n checked={checked}\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-none\",\n \"border border-input bg-surface-3\",\n \"transition-all duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 bg-white shadow-sm ring-0\",\n \"transition-transform duration-200\",\n \"data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5\",\n )}\n />\n </SwitchPrimitive.Root>\n {label && (\n <label\n htmlFor={switchId}\n className=\"text-sm text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-40 select-none\"\n >\n {label}\n </label>\n )}\n </div>\n );\n});\n\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root, Group, Value ─────────────────────────────────────────────────── */\n\nconst Select = SelectPrimitive.Root;\nSelect.displayName = \"Select\";\n\nconst SelectGroup = SelectPrimitive.Group;\nSelectGroup.displayName = \"SelectGroup\";\n\nconst SelectValue = SelectPrimitive.Value;\nSelectValue.displayName = \"SelectValue\";\n\n/* ── Trigger ─────────────────────────────────────────────────────────────── */\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"relative flex h-11 w-full items-center justify-between\",\n \"border border-input bg-surface-1 px-3\",\n \"font-mono text-sm text-foreground\",\n \"transition-all duration-150\",\n \"hover:border-border-strong\",\n \"focus:outline-none focus:border-primary focus:shadow-[0_0_0_3px_rgba(255,212,41,0.1)]\",\n \"disabled:cursor-not-allowed disabled:opacity-40 disabled:pointer-events-none\",\n \"data-[placeholder]:text-muted-foreground\",\n \"[&>span]:line-clamp-1\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <span className=\"shrink-0 text-muted-foreground text-xs ml-2 select-none\">\n ▾\n </span>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = \"SelectTrigger\";\n\n/* ── ScrollUpButton ─────────────────────────────────────────────────────── */\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 text-muted-foreground text-xs\",\n className,\n )}\n {...props}\n >\n ▴\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = \"SelectScrollUpButton\";\n\n/* ── ScrollDownButton ────────────────────────────────────────────────────── */\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 text-muted-foreground text-xs\",\n className,\n )}\n {...props}\n >\n ▾\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = \"SelectScrollDownButton\";\n\n/* ── Content (dropdown panel) ────────────────────────────────────────────── */\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-[var(--z-overlay,50)] min-w-[8rem] overflow-hidden\",\n \"bg-surface-2 border border-border shadow-lg\",\n \"data-[state=open]:animate-fade-in-up\",\n \"data-[state=closed]:animate-fade-in-up\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\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)]\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = \"SelectContent\";\n\n/* ── Label ───────────────────────────────────────────────────────────────── */\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"font-mono text-[10px] uppercase tracking-widest text-muted-foreground/60 px-4 py-1.5\",\n className,\n )}\n {...props}\n />\n));\nSelectLabel.displayName = \"SelectLabel\";\n\n/* ── Item ────────────────────────────────────────────────────────────────── */\n\nexport interface SelectItemProps extends React.ComponentPropsWithoutRef<\n typeof SelectPrimitive.Item\n> {\n danger?: boolean;\n}\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n SelectItemProps\n>(({ className, children, danger, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-pointer select-none items-center px-4 py-2 text-sm text-muted-foreground\",\n \"outline-none transition-colors duration-100\",\n \"focus:bg-primary/6 focus:text-primary\",\n \"data-[state=checked]:text-primary data-[state=checked]:font-medium\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-40\",\n danger\n ? \"hover:bg-destructive/6 hover:text-destructive focus:bg-destructive/6 focus:text-destructive\"\n : \"hover:bg-primary/6 hover:text-primary\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = \"SelectItem\";\n\n/* ── Separator ───────────────────────────────────────────────────────────── */\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"my-1 h-px bg-border\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = \"SelectSeparator\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Size variants ───────────────────────────────────────────────────────── */\n\nconst avatarVariants = cva(\n \"relative inline-flex shrink-0 overflow-hidden clip-corner-sm\",\n {\n variants: {\n size: {\n xs: \"h-6 w-6\",\n sm: \"h-8 w-8\",\n md: \"h-10 w-10\",\n lg: \"h-14 w-14\",\n xl: \"h-20 w-20\",\n \"2xl\": \"h-[120px] w-[120px]\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/* ── Status dot colors ───────────────────────────────────────────────────── */\n\nconst statusColors: Record<string, string> = {\n online: \"text-ef-green\",\n offline: \"text-muted-foreground/50\",\n busy: \"text-destructive\",\n away: \"text-ef-orange\",\n};\n\n/* ── Avatar (root) ───────────────────────────────────────────────────────── */\n\nexport interface AvatarProps\n extends\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>,\n VariantProps<typeof avatarVariants> {\n status?: \"online\" | \"offline\" | \"busy\" | \"away\";\n}\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n AvatarProps\n>(({ className, size, status, ...props }, ref) => (\n <div className=\"relative inline-flex shrink-0\">\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n />\n {status && (\n <span\n className={cn(\n \"absolute -bottom-0.5 -right-0.5 text-[10px] leading-none select-none\",\n statusColors[status],\n )}\n aria-label={status}\n >\n ◆\n </span>\n )}\n </div>\n));\nAvatar.displayName = \"Avatar\";\n\n/* ── AvatarImage ─────────────────────────────────────────────────────────── */\n\nexport type AvatarImageProps = React.ComponentPropsWithoutRef<\n typeof AvatarPrimitive.Image\n>;\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n AvatarImageProps\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full object-cover\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = \"AvatarImage\";\n\n/* ── AvatarFallback ──────────────────────────────────────────────────────── */\n\nexport type AvatarFallbackProps = React.ComponentPropsWithoutRef<\n typeof AvatarPrimitive.Fallback\n>;\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n AvatarFallbackProps\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center\",\n \"bg-surface-2 font-display text-muted-foreground uppercase text-center\",\n \"text-[clamp(8px,35%,28px)]\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = \"AvatarFallback\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Avatar, AvatarImage, AvatarFallback, avatarVariants };\n","import * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Track variants (height / size) ─────────────────────────────────────── */\n\nconst progressTrackVariants = cva(\n \"relative w-full overflow-hidden bg-surface-3\",\n {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-1.5\",\n lg: \"h-2.5\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/* ── Fill color variants ─────────────────────────────────────────────────── */\n\nconst progressFillVariants = cva(\n \"h-full w-full flex-1 transition-all duration-500 ease-smooth origin-left\",\n {\n variants: {\n variant: {\n default: \"bg-primary\",\n success: \"bg-ef-green\",\n danger: \"bg-destructive\",\n info: \"bg-ef-blue\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface ProgressProps\n extends\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>,\n VariantProps<typeof progressTrackVariants>,\n VariantProps<typeof progressFillVariants> {\n value?: number;\n showLabel?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({ className, value, showLabel, size, variant, ...props }, ref) => {\n const isIndeterminate = value === undefined || value === null;\n const clampedValue = isIndeterminate\n ? undefined\n : Math.min(100, Math.max(0, value));\n\n return (\n <div className=\"w-full space-y-1\">\n {showLabel && !isIndeterminate && (\n <div className=\"flex justify-end\">\n <span className=\"font-mono text-[11px] text-muted-foreground\">\n {clampedValue}%\n </span>\n </div>\n )}\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(progressTrackVariants({ size }), className)}\n value={clampedValue}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n isIndeterminate\n ? \"h-full animate-skeleton\"\n : progressFillVariants({ variant }),\n )}\n style={\n isIndeterminate\n ? undefined\n : { transform: `translateX(-${100 - (clampedValue ?? 0)}%)` }\n }\n />\n </ProgressPrimitive.Root>\n </div>\n );\n});\n\nProgress.displayName = \"Progress\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Progress, progressTrackVariants, progressFillVariants };\n","import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root ────────────────────────────────────────────────────────────────── */\n\nconst Accordion = AccordionPrimitive.Root;\nAccordion.displayName = \"Accordion\";\n\n/* ── Item ────────────────────────────────────────────────────────────────── */\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border border-border\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\n/* ── Trigger ─────────────────────────────────────────────────────────────── */\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"group flex flex-1 items-center justify-between px-4 py-3\",\n \"font-display text-[13px] font-semibold uppercase tracking-wider text-foreground\",\n \"transition-all duration-200\",\n \"hover:text-primary hover:bg-surface-hover\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n className,\n )}\n {...props}\n >\n {children}\n <span\n className={cn(\n \"font-mono text-base leading-none select-none shrink-0 ml-2\",\n \"text-muted-foreground transition-colors duration-200\",\n \"group-hover:text-primary\",\n \"group-data-[state=open]:hidden group-data-[state=closed]:inline\",\n )}\n aria-hidden\n >\n +\n </span>\n <span\n className={cn(\n \"font-mono text-base leading-none select-none shrink-0 ml-2\",\n \"text-primary transition-colors duration-200\",\n \"group-data-[state=open]:inline group-data-[state=closed]:hidden\",\n )}\n aria-hidden\n >\n −\n </span>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\n/* ── Content ─────────────────────────────────────────────────────────────── */\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\"\n {...props}\n >\n <div className={cn(\"px-4 pb-4 pt-1 text-sm text-muted-foreground\", className)}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root ────────────────────────────────────────────────────────────────── */\n\nconst Tabs = TabsPrimitive.Root;\nTabs.displayName = \"Tabs\";\n\n/* ── List variants ───────────────────────────────────────────────────────── */\n\nconst tabsListVariants = cva(\"flex items-center overflow-x-auto\", {\n variants: {\n variant: {\n underline: \"border-b border-border gap-0 w-full\",\n pill: \"gap-1 bg-surface-1 p-1 w-fit\",\n bordered: \"border border-border gap-0 w-full\",\n },\n },\n defaultVariants: { variant: \"underline\" },\n});\n\nexport interface TabsListProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>,\n VariantProps<typeof tabsListVariants> {}\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, variant, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n));\nTabsList.displayName = \"TabsList\";\n\n/* ── Trigger variants ────────────────────────────────────────────────────── */\n\nconst tabsTriggerVariants = cva(\n [\n \"font-display text-[13px] font-semibold uppercase tracking-wider\",\n \"transition-all duration-150 cursor-pointer\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n ],\n {\n variants: {\n variant: {\n underline: [\n \"px-4 py-2.5 text-muted-foreground border-b-2 border-transparent -mb-px\",\n \"hover:text-foreground\",\n \"data-[state=active]:text-primary data-[state=active]:border-b-primary\",\n ],\n pill: [\n \"px-4 py-1.5 text-muted-foreground\",\n \"hover:text-foreground\",\n \"data-[state=active]:bg-surface-3 data-[state=active]:text-primary\",\n ],\n bordered: [\n \"px-4 py-2.5 text-muted-foreground border-r border-border last:border-r-0\",\n \"hover:text-foreground hover:bg-surface-hover\",\n \"data-[state=active]:text-primary data-[state=active]:bg-surface-3\",\n ],\n },\n },\n defaultVariants: { variant: \"underline\" },\n },\n);\n\nexport interface TabsTriggerProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>,\n VariantProps<typeof tabsTriggerVariants> {}\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(({ className, variant, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(tabsTriggerVariants({ variant }), className)}\n {...props}\n />\n));\nTabsTrigger.displayName = \"TabsTrigger\";\n\n/* ── Content ─────────────────────────────────────────────────────────────── */\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-4 text-sm text-muted-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n className,\n )}\n {...props}\n />\n));\nTabsContent.displayName = \"TabsContent\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n tabsListVariants,\n tabsTriggerVariants,\n};\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root, Trigger, Anchor ───────────────────────────────────────────────── */\n\nconst Popover = PopoverPrimitive.Root;\nPopover.displayName = \"Popover\";\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\nPopoverAnchor.displayName = \"PopoverAnchor\";\n\n/* ── Content ─────────────────────────────────────────────────────────────── */\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 6, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 min-w-[200px]\",\n \"bg-surface-2 border border-border shadow-lg\",\n \"p-4\",\n \"data-[state=open]:animate-fade-in-up\",\n \"data-[state=closed]:animate-fade-in-up\",\n \"focus:outline-none\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = \"PopoverContent\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root, Trigger, Portal, Close ────────────────────────────────────────── */\n\nconst Dialog = DialogPrimitive.Root;\nDialog.displayName = \"Dialog\";\n\nconst DialogTrigger = DialogPrimitive.Trigger;\nDialogTrigger.displayName = \"DialogTrigger\";\n\nconst DialogPortal = DialogPrimitive.Portal;\nDialogPortal.displayName = \"DialogPortal\";\n\nconst DialogClose = DialogPrimitive.Close;\nDialogClose.displayName = \"DialogClose\";\n\n/* ── Overlay ─────────────────────────────────────────────────────────────── */\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/75 backdrop-blur-sm\",\n \"data-[state=open]:animate-fade-in-up\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = \"DialogOverlay\";\n\n/* ── Content size variants ───────────────────────────────────────────────── */\n\nconst dialogContentVariants = cva(\n [\n \"fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2\",\n \"bg-surface-2 border border-border shadow-xl\",\n \"flex flex-col max-h-[90vh]\",\n \"data-[state=open]:animate-dialog-in\",\n \"focus:outline-none\",\n ],\n {\n variants: {\n size: {\n sm: \"w-full max-w-sm\",\n md: \"w-full max-w-lg\",\n lg: \"w-full max-w-2xl\",\n xl: \"w-full max-w-4xl\",\n fullscreen: \"w-screen h-screen max-w-none\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nexport interface DialogContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof dialogContentVariants> {}\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(({ className, size, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(dialogContentVariants({ size }), className)}\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = \"DialogContent\";\n\n/* ── Header ──────────────────────────────────────────────────────────────── */\n\nfunction DialogHeader({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"flex shrink-0 items-center justify-between border-b border-border px-6 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\nDialogHeader.displayName = \"DialogHeader\";\n\n/* ── Footer ──────────────────────────────────────────────────────────────── */\n\nfunction DialogFooter({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"flex shrink-0 items-center justify-end gap-3 border-t border-border px-6 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\nDialogFooter.displayName = \"DialogFooter\";\n\n/* ── Title ───────────────────────────────────────────────────────────────── */\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"font-display text-base font-semibold uppercase tracking-wider text-foreground\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = \"DialogTitle\";\n\n/* ── Description ─────────────────────────────────────────────────────────── */\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"flex-1 overflow-y-auto px-6 py-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n dialogContentVariants,\n};\n","import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Variants ────────────────────────────────────────────────────────────── */\n\nconst separatorVariants = cva(\"shrink-0\", {\n variants: {\n variant: {\n default: \"bg-border\",\n subtle: \"bg-border\",\n strong: \"bg-border-strong\",\n glow: \"bg-gradient-to-r from-transparent via-primary/40 to-transparent\",\n accent: \"bg-primary/30\",\n },\n orientation: {\n horizontal: \"h-px w-full\",\n vertical: \"w-px h-full\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n orientation: \"horizontal\",\n },\n});\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface SeparatorProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>,\n \"orientation\"\n >,\n VariantProps<typeof separatorVariants> {}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorProps\n>(({ className, orientation = \"horizontal\", variant, decorative = true, ...props }, ref) => {\n const resolvedOrientation = orientation ?? \"horizontal\";\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={resolvedOrientation}\n className={cn(\n separatorVariants({ variant, orientation: resolvedOrientation }),\n className,\n )}\n {...props}\n />\n );\n});\nSeparator.displayName = \"Separator\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Separator, separatorVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── SkeletonLine ─────────────────────────────────────────────────────────── */\n\nconst skeletonLineVariants = cva(\"animate-skeleton rounded-none\", {\n variants: {\n width: {\n full: \"w-full\",\n \"3/4\": \"w-3/4\",\n \"1/2\": \"w-1/2\",\n \"1/3\": \"w-1/3\",\n \"1/4\": \"w-1/4\",\n },\n height: {\n xs: \"h-2\",\n sm: \"h-3\",\n md: \"h-4\",\n lg: \"h-6\",\n },\n },\n defaultVariants: { width: \"full\", height: \"md\" },\n});\n\nexport interface SkeletonLineProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof skeletonLineVariants> {}\n\nconst SkeletonLine = React.forwardRef<HTMLDivElement, SkeletonLineProps>(\n ({ className, width, height, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(skeletonLineVariants({ width, height }), className)}\n aria-hidden=\"true\"\n {...props}\n />\n ),\n);\nSkeletonLine.displayName = \"SkeletonLine\";\n\n/* ── SkeletonText ────────────────────────────────────────────────────────── */\n\nexport interface SkeletonTextProps extends React.HTMLAttributes<HTMLDivElement> {\n lines?: number;\n}\n\nconst SkeletonText = React.forwardRef<HTMLDivElement, SkeletonTextProps>(\n ({ lines = 3, className, ...props }, ref) => {\n const lineWidths: Array<\n VariantProps<typeof skeletonLineVariants>[\"width\"]\n > = [\"full\", \"3/4\", \"full\", \"1/2\", \"3/4\"];\n\n return (\n <div\n ref={ref}\n className={cn(\"space-y-2\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n {Array.from({ length: lines }).map((_, i) => (\n <SkeletonLine\n key={i}\n width={lineWidths[i % lineWidths.length]}\n height=\"sm\"\n />\n ))}\n </div>\n );\n },\n);\nSkeletonText.displayName = \"SkeletonText\";\n\n/* ── SkeletonAvatar ──────────────────────────────────────────────────────── */\n\nconst skeletonAvatarSizes = {\n xs: \"w-6 h-6\",\n sm: \"w-8 h-8\",\n md: \"w-10 h-10\",\n lg: \"w-14 h-14\",\n xl: \"w-20 h-20\",\n};\n\nexport interface SkeletonAvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: keyof typeof skeletonAvatarSizes;\n}\n\nconst SkeletonAvatar = React.forwardRef<HTMLDivElement, SkeletonAvatarProps>(\n ({ size = \"md\", className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"animate-skeleton clip-corner-sm shrink-0\",\n skeletonAvatarSizes[size],\n className,\n )}\n aria-hidden=\"true\"\n {...props}\n />\n ),\n);\nSkeletonAvatar.displayName = \"SkeletonAvatar\";\n\n/* ── SkeletonCard ────────────────────────────────────────────────────────── */\n\nexport interface SkeletonCardProps extends React.HTMLAttributes<HTMLDivElement> {\n showAvatar?: boolean;\n lines?: number;\n}\n\nconst SkeletonCard = React.forwardRef<HTMLDivElement, SkeletonCardProps>(\n ({ showAvatar = false, lines = 3, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"border border-border bg-surface-1 p-4 space-y-3\",\n className,\n )}\n aria-hidden=\"true\"\n {...props}\n >\n {/* Header row */}\n <div className=\"flex items-center gap-3\">\n {showAvatar && <SkeletonAvatar size=\"md\" />}\n <div className=\"flex-1 space-y-2\">\n <SkeletonLine width=\"3/4\" height=\"md\" />\n <SkeletonLine width=\"1/2\" height=\"sm\" />\n </div>\n </div>\n\n {/* Body lines */}\n <SkeletonText lines={lines} />\n\n {/* Footer strip */}\n <SkeletonLine width=\"1/3\" height=\"xs\" />\n </div>\n ),\n);\nSkeletonCard.displayName = \"SkeletonCard\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n SkeletonLine,\n SkeletonText,\n SkeletonAvatar,\n SkeletonCard,\n skeletonLineVariants,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Preset variant copy ─────────────────────────────────────────────────── */\n\nconst PRESET_COPY: Record<string, { title: string; description: string }> = {\n search: {\n title: \"NO RESULTS FOUND\",\n description: \"Try adjusting your search query.\",\n },\n error: {\n title: \"FAILED TO LOAD\",\n description: \"An error occurred. Please try again.\",\n },\n permission: {\n title: \"ACCESS RESTRICTED\",\n description: \"You don't have permission to view this.\",\n },\n empty: {\n title: \"NO ITEMS YET\",\n description: \"Add your first item to get started.\",\n },\n default: { title: \"\", description: \"\" },\n};\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst emptyStateVariants = cva(\n \"flex flex-col items-center justify-center text-center py-16 px-8\",\n {\n variants: {\n size: {\n sm: \"py-8 px-4\",\n md: \"py-16 px-8\",\n lg: \"py-24 px-12\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface EmptyStateProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof emptyStateVariants> {\n icon?: React.ReactNode;\n title?: string;\n description?: string;\n action?: React.ReactNode;\n variant?: \"default\" | \"search\" | \"error\" | \"permission\" | \"empty\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n (\n {\n icon,\n title,\n description,\n action,\n variant = \"default\",\n size,\n className,\n ...props\n },\n ref,\n ) => {\n const preset = PRESET_COPY[variant] ?? PRESET_COPY.default;\n const resolvedTitle = title ?? preset.title;\n const resolvedDesc = description ?? preset.description;\n\n return (\n <div\n ref={ref}\n className={cn(emptyStateVariants({ size }), className)}\n {...props}\n >\n {icon && (\n <div className=\"text-muted-foreground/30 mb-6 [&>svg]:w-12 [&>svg]:h-12\">\n {icon}\n </div>\n )}\n\n {resolvedTitle && (\n <h3 className=\"font-display text-[18px] font-bold uppercase tracking-wider text-foreground mb-3\">\n {resolvedTitle}\n </h3>\n )}\n\n {resolvedDesc && (\n <p className=\"text-[14px] text-muted-foreground max-w-[360px] leading-relaxed\">\n {resolvedDesc}\n </p>\n )}\n\n {action && <div className=\"mt-6\">{action}</div>}\n </div>\n );\n },\n);\nEmptyState.displayName = \"EmptyState\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { EmptyState, emptyStateVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst alertVariants = cva(\n \"relative flex items-start gap-3 p-4 border-l-[3px] transition-all\",\n {\n variants: {\n variant: {\n info: \"bg-ef-blue/[0.08] border-l-ef-blue border border-ef-blue/20\",\n success:\n \"bg-ef-green/[0.08] border-l-ef-green border border-ef-green/20\",\n warning:\n \"bg-ef-orange/[0.08] border-l-ef-orange border border-ef-orange/20\",\n error:\n \"bg-destructive/[0.08] border-l-destructive border border-destructive/20\",\n },\n },\n defaultVariants: { variant: \"info\" },\n },\n);\n\n/* ── Default icon + icon colors per variant ───────────────────────────────── */\n\nconst VARIANT_CONFIG = {\n info: { icon: \"◆\", color: \"text-ef-blue\" },\n success: { icon: \"✓\", color: \"text-ef-green\" },\n warning: { icon: \"⚠\", color: \"text-ef-orange\" },\n error: { icon: \"✕\", color: \"text-destructive\" },\n} as const;\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface AlertProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alertVariants> {\n variant?: \"info\" | \"success\" | \"warning\" | \"error\";\n title?: string;\n dismissible?: boolean;\n onDismiss?: () => void;\n icon?: React.ReactNode;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n variant = \"info\",\n title,\n dismissible = false,\n onDismiss,\n icon,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const cfg = VARIANT_CONFIG[variant];\n const showIcon = icon !== null;\n const iconNode =\n icon !== null && icon !== undefined ? (\n icon\n ) : (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"font-mono text-[14px] font-bold leading-none\",\n cfg.color,\n )}\n >\n {cfg.icon}\n </span>\n );\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n aria-live={variant === \"error\" ? \"assertive\" : \"polite\"}\n className={cn(alertVariants({ variant }), className)}\n {...props}\n >\n {/* Icon */}\n {showIcon && <div className=\"shrink-0 mt-0.5\">{iconNode}</div>}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"font-display text-[13px] font-bold uppercase tracking-wider text-foreground mb-1\">\n {title}\n </p>\n )}\n {children && (\n <div className=\"text-[13px] text-muted-foreground leading-relaxed\">\n {children}\n </div>\n )}\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={onDismiss}\n className=\"shrink-0 text-muted-foreground hover:text-foreground transition-colors font-mono text-[12px] leading-none\"\n >\n ✕\n </button>\n )}\n </div>\n );\n },\n);\nAlert.displayName = \"Alert\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Alert, alertVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst timelineItemVariants = cva(\"\", {\n variants: {\n status: {\n complete: \"text-primary\",\n current: \"text-primary\",\n upcoming: \"text-muted-foreground/40\",\n },\n },\n defaultVariants: { status: \"upcoming\" },\n});\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface TimelineItemProps extends React.HTMLAttributes<HTMLDivElement> {\n date?: string;\n title: string;\n description?: string;\n status?: \"complete\" | \"current\" | \"upcoming\";\n}\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n items?: TimelineItemProps[];\n}\n\n/* ── TimelineItem ─────────────────────────────────────────────────────────── */\n\nconst TimelineItem = React.forwardRef<HTMLDivElement, TimelineItemProps>(\n ({ date, title, description, status = \"upcoming\", children, className, ...props }, ref) => {\n const isActive = status === \"complete\" || status === \"current\";\n const marker = isActive ? \"◆\" : \"◇\";\n\n return (\n <div\n ref={ref}\n role=\"listitem\"\n aria-current={status === \"current\" ? \"true\" : undefined}\n className={cn(\"relative pb-8 last:pb-0\", className)}\n {...props}\n >\n {/* Timeline node */}\n <span\n className={cn(\n \"absolute -left-[15px] top-0.5 font-mono text-[11px] leading-none select-none\",\n timelineItemVariants({ status }),\n status === \"current\" && \"drop-shadow-[0_0_6px_rgba(255,212,41,0.6)]\",\n )}\n aria-hidden=\"true\"\n >\n {marker}\n </span>\n\n {/* Date */}\n {date && (\n <p className=\"font-mono text-[11px] text-muted-foreground/60 mb-1\">{date}</p>\n )}\n\n {/* Title */}\n <p className=\"font-display text-[14px] font-semibold uppercase text-foreground\">\n {title}\n </p>\n\n {/* Description */}\n {description && (\n <p className=\"text-[13px] text-muted-foreground mt-1\">{description}</p>\n )}\n\n {/* Slot children */}\n {children}\n </div>\n );\n },\n);\nTimelineItem.displayName = \"TimelineItem\";\n\n/* ── Timeline ────────────────────────────────────────────────────────────── */\n\nconst Timeline = React.forwardRef<HTMLDivElement, TimelineProps>(\n ({ items, children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"list\"\n className={cn(\n \"relative pl-6 space-y-0\",\n \"before:absolute before:left-[9px] before:top-2 before:bottom-2 before:w-px before:bg-border\",\n className,\n )}\n {...props}\n >\n {items\n ? items.map((item, i) => {\n const { date, title, description, status, children: itemChildren, className: itemCn, ...rest } = item;\n return (\n <TimelineItem\n key={i}\n date={date}\n title={title}\n description={description}\n status={status}\n className={itemCn}\n {...rest}\n >\n {itemChildren}\n </TimelineItem>\n );\n })\n : children}\n </div>\n );\n },\n);\nTimeline.displayName = \"Timeline\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Timeline, TimelineItem, timelineItemVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface StepItem {\n label: string;\n description?: string;\n}\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n steps: StepItem[];\n currentStep: number;\n orientation?: \"horizontal\" | \"vertical\";\n}\n\n/* ── Helpers ─────────────────────────────────────────────────────────────── */\n\nfunction getStepState(\n index: number,\n currentStep: number,\n): \"complete\" | \"current\" | \"upcoming\" {\n if (index < currentStep) return \"complete\";\n if (index === currentStep) return \"current\";\n return \"upcoming\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Stepper = React.forwardRef<HTMLDivElement, StepperProps>(\n (\n { steps, currentStep, orientation = \"horizontal\", className, ...props },\n ref,\n ) => {\n if (orientation === \"vertical\") {\n return (\n <div\n ref={ref}\n role=\"list\"\n aria-label=\"Progress steps\"\n className={cn(\"flex flex-col gap-0\", className)}\n {...props}\n >\n {steps.map((step, i) => {\n const state = getStepState(i, currentStep);\n const isComplete = state === \"complete\";\n const isCurrent = state === \"current\";\n const isLast = i === steps.length - 1;\n const marker = isComplete || isCurrent ? \"◆\" : \"◇\";\n const stateLabel = isComplete ? \"completed\" : isCurrent ? \"current\" : \"upcoming\";\n\n return (\n <div\n key={i}\n role=\"listitem\"\n aria-label={`Step ${i + 1} of ${steps.length}: ${step.label}, ${stateLabel}`}\n aria-current={isCurrent ? \"step\" : undefined}\n className=\"flex items-start gap-3 relative\"\n >\n {/* Node column */}\n <div className=\"flex flex-col items-center flex-shrink-0\">\n <span\n className={cn(\n \"font-mono text-[13px] leading-none\",\n isComplete && \"text-primary\",\n isCurrent &&\n \"text-primary drop-shadow-[0_0_6px_rgba(255,212,41,0.6)]\",\n !isComplete && !isCurrent && \"text-muted-foreground/40\",\n )}\n aria-hidden=\"true\"\n >\n {marker}\n </span>\n {!isLast && (\n <div\n className={cn(\n \"flex-1 w-px min-h-6 mt-1\",\n isComplete ? \"bg-primary\" : \"bg-border\",\n )}\n />\n )}\n </div>\n\n {/* Content */}\n <div className=\"pb-6 last:pb-0\">\n <p\n className={cn(\n \"font-display text-[11px] uppercase tracking-wider mt-1\",\n isCurrent && \"text-foreground font-semibold\",\n isComplete && \"text-primary\",\n !isComplete && !isCurrent && \"text-muted-foreground/60\",\n )}\n >\n {step.label}\n </p>\n {step.description && (\n <p className=\"text-[12px] text-muted-foreground/60 mt-0.5\">\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // Horizontal (default)\n return (\n <div\n ref={ref}\n role=\"list\"\n aria-label=\"Progress steps\"\n className={cn(\"flex items-start w-full min-w-max\", className)}\n {...props}\n >\n {steps.map((step, i) => {\n const state = getStepState(i, currentStep);\n const isComplete = state === \"complete\";\n const isCurrent = state === \"current\";\n const isLast = i === steps.length - 1;\n const marker = isComplete || isCurrent ? \"◆\" : \"◇\";\n const stateLabel = isComplete ? \"completed\" : isCurrent ? \"current\" : \"upcoming\";\n\n return (\n <React.Fragment key={i}>\n <div\n role=\"listitem\"\n aria-label={`Step ${i + 1} of ${steps.length}: ${step.label}, ${stateLabel}`}\n aria-current={isCurrent ? \"step\" : undefined}\n className=\"flex flex-col items-center flex-shrink-0\"\n >\n <span\n className={cn(\n \"font-mono text-[13px] leading-none mb-1.5\",\n isComplete && \"text-primary\",\n isCurrent &&\n \"text-primary drop-shadow-[0_0_6px_rgba(255,212,41,0.6)]\",\n !isComplete && !isCurrent && \"text-muted-foreground/40\",\n )}\n aria-hidden=\"true\"\n >\n {marker}\n </span>\n <p\n className={cn(\n \"font-display text-[11px] uppercase tracking-wider mt-1\",\n isCurrent && \"text-foreground font-semibold\",\n isComplete && \"text-primary\",\n !isComplete && !isCurrent && \"text-muted-foreground/60\",\n )}\n >\n {step.label}\n </p>\n {step.description && (\n <p className=\"text-[12px] text-muted-foreground/60 mt-0.5 text-center\">\n {step.description}\n </p>\n )}\n </div>\n\n {/* Connector between steps */}\n {!isLast && (\n <div\n className={cn(\n \"flex-1 h-px self-start mt-[0.45em] mx-2\",\n isComplete ? \"bg-primary\" : \"bg-border\",\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n },\n);\nStepper.displayName = \"Stepper\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Stepper };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst paginationItemVariants = cva(\n \"font-mono text-[12px] w-9 h-9 flex items-center justify-center transition-all border\",\n {\n variants: {\n active: {\n true: \"bg-primary text-primary-foreground border-primary font-bold\",\n false:\n \"text-muted-foreground border-border hover:border-primary/40 hover:text-foreground\",\n },\n disabled: {\n true: \"opacity-40 cursor-not-allowed pointer-events-none\",\n false: \"\",\n },\n },\n defaultVariants: { active: false, disabled: false },\n },\n);\n\n/* ── Page range helper ───────────────────────────────────────────────────── */\n\nfunction getPageRange(\n current: number,\n total: number,\n siblings: number,\n): (number | \"...\")[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n const left = Math.max(2, current - siblings);\n const right = Math.min(total - 1, current + siblings);\n const pages: (number | \"...\")[] = [1];\n if (left > 2) pages.push(\"...\");\n for (let i = left; i <= right; i++) pages.push(i);\n if (right < total - 1) pages.push(\"...\");\n pages.push(total);\n return pages;\n}\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface PaginationProps extends React.HTMLAttributes<HTMLElement> {\n totalPages: number;\n currentPage: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n (\n {\n totalPages,\n currentPage,\n onPageChange,\n siblingCount = 1,\n className,\n ...props\n },\n ref,\n ) => {\n const pages = getPageRange(currentPage, totalPages, siblingCount);\n const isPrevDisabled = currentPage <= 1;\n const isNextDisabled = currentPage >= totalPages;\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n className={cn(className)}\n {...props}\n >\n <div className=\"flex items-center gap-1\">\n {/* PREV */}\n <button\n type=\"button\"\n onClick={() => !isPrevDisabled && onPageChange(currentPage - 1)}\n disabled={isPrevDisabled}\n aria-label=\"Previous page\"\n className={cn(\n paginationItemVariants({\n active: false,\n disabled: isPrevDisabled,\n }),\n \"font-display uppercase text-[11px] tracking-wider px-2 w-auto\",\n )}\n >\n ◆ PREV\n </button>\n\n {/* Page numbers */}\n {pages.map((page, i) =>\n page === \"...\" ? (\n <span\n key={`ellipsis-${i}`}\n className=\"w-9 h-9 flex items-center justify-center font-mono text-[12px] text-muted-foreground/40 select-none\"\n aria-hidden=\"true\"\n >\n …\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => onPageChange(page)}\n aria-label={`Page ${page}`}\n aria-current={page === currentPage ? \"page\" : undefined}\n className={cn(\n paginationItemVariants({ active: page === currentPage }),\n )}\n >\n {page}\n </button>\n ),\n )}\n\n {/* NEXT */}\n <button\n type=\"button\"\n onClick={() => !isNextDisabled && onPageChange(currentPage + 1)}\n disabled={isNextDisabled}\n aria-label=\"Next page\"\n className={cn(\n paginationItemVariants({\n active: false,\n disabled: isNextDisabled,\n }),\n \"font-display uppercase text-[11px] tracking-wider px-2 w-auto\",\n )}\n >\n NEXT ◆\n </button>\n </div>\n </nav>\n );\n },\n);\nPagination.displayName = \"Pagination\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Pagination, paginationItemVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface BreadcrumbItemData {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItemData[];\n separator?: React.ReactNode;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(\n ({ items, separator, className, ...props }, ref) => {\n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cn(className)}\n {...props}\n >\n <ol className=\"flex items-center gap-2 flex-wrap font-display text-[12px] uppercase tracking-wider\">\n {items.map((item, i) => {\n const isCurrent = i === items.length - 1;\n return (\n <React.Fragment key={i}>\n <li>\n {isCurrent || !item.href ? (\n <span\n aria-current={isCurrent ? \"page\" : undefined}\n className={\n isCurrent\n ? \"text-foreground font-semibold\"\n : \"text-muted-foreground\"\n }\n >\n {item.label}\n </span>\n ) : (\n <a\n href={item.href}\n className=\"text-muted-foreground hover:text-primary transition-colors\"\n >\n {item.label}\n </a>\n )}\n </li>\n {!isCurrent && (\n <li\n aria-hidden=\"true\"\n role=\"presentation\"\n className=\"text-[10px] text-muted-foreground/40 select-none\"\n >\n {separator ?? \"›\"}\n </li>\n )}\n </React.Fragment>\n );\n })}\n </ol>\n </nav>\n );\n },\n);\nBreadcrumb.displayName = \"Breadcrumb\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Breadcrumb };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst numberInputVariants = cva(\n \"inline-flex items-center border border-input bg-transparent\",\n {\n variants: {\n size: {\n sm: \"h-8\",\n md: \"h-9\",\n lg: \"h-10\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface NumberInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"onChange\" | \"value\" | \"defaultValue\" | \"size\"\n >,\n VariantProps<typeof numberInputVariants> {\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n min,\n max,\n step = 1,\n size = \"md\",\n className,\n disabled,\n ...props\n },\n ref,\n ) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<number>(\n defaultValue ?? 0,\n );\n const current = isControlled ? value! : internalValue;\n\n const clamp = (n: number) =>\n Math.min(max ?? Infinity, Math.max(min ?? -Infinity, n));\n\n const update = (next: number) => {\n const clamped = clamp(next);\n if (!isControlled) setInternalValue(clamped);\n onChange?.(clamped);\n };\n\n const decrement = () => update(current - step);\n const increment = () => update(current + step);\n\n const atMin = min !== undefined && current <= min;\n const atMax = max !== undefined && current >= max;\n\n const buttonBase =\n \"px-2 font-mono text-[13px] text-muted-foreground transition-colors select-none\";\n\n return (\n <div className={cn(numberInputVariants({ size }), className)}>\n {/* Decrement */}\n <button\n type=\"button\"\n onClick={decrement}\n disabled={disabled || atMin}\n aria-label=\"Decrement\"\n className={cn(\n buttonBase,\n \"h-full border-r border-input\",\n (disabled || atMin) && \"opacity-40 cursor-not-allowed\",\n !(disabled || atMin) && \"hover:text-foreground\",\n )}\n >\n −\n </button>\n\n {/* Input */}\n <input\n ref={ref}\n type=\"number\"\n value={current}\n disabled={disabled}\n onChange={(e) => {\n const parsed = parseFloat(e.target.value);\n if (!isNaN(parsed)) update(parsed);\n }}\n onKeyDown={(e) => {\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n increment();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n decrement();\n }\n }}\n className={cn(\n \"w-16 h-full text-center font-mono text-[13px] text-foreground bg-transparent\",\n \"border-x border-input outline-none\",\n \"[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\",\n disabled && \"opacity-40 cursor-not-allowed\",\n )}\n {...props}\n />\n\n {/* Increment */}\n <button\n type=\"button\"\n onClick={increment}\n disabled={disabled || atMax}\n aria-label=\"Increment\"\n className={cn(\n buttonBase,\n \"h-full border-l border-input\",\n (disabled || atMax) && \"opacity-40 cursor-not-allowed\",\n !(disabled || atMax) && \"hover:text-foreground\",\n )}\n >\n +\n </button>\n </div>\n );\n },\n);\nNumberInput.displayName = \"NumberInput\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { NumberInput, numberInputVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport type GlitchIntensity = \"low\" | \"medium\" | \"high\";\n\n/* ── Intensity config ────────────────────────────────────────────────────── */\n\nconst INTENSITY_CONFIG: Record<\n GlitchIntensity,\n {\n duration: string;\n clipTop: string;\n clipBot: string;\n offset: number;\n defaultInterval: number;\n }\n> = {\n low: {\n duration: \"6s\",\n clipTop: \"15% 0 70% 0\",\n clipBot: \"65% 0 15% 0\",\n offset: 1,\n defaultInterval: 4000,\n },\n medium: {\n duration: \"3s\",\n clipTop: \"20% 0 50% 0\",\n clipBot: \"50% 0 20% 0\",\n offset: 2,\n defaultInterval: 2500,\n },\n high: {\n duration: \"1.2s\",\n clipTop: \"10% 0 60% 0\",\n clipBot: \"55% 0 10% 0\",\n offset: 4,\n defaultInterval: 1200,\n },\n};\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface GlitchTextProps extends Omit<\n React.HTMLAttributes<HTMLSpanElement>,\n \"children\"\n> {\n children: string;\n intensity?: GlitchIntensity;\n continuous?: boolean;\n continuousInterval?: number;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst GlitchText = React.forwardRef<HTMLSpanElement, GlitchTextProps>(\n (\n {\n children,\n className,\n intensity = \"medium\",\n continuous = false,\n continuousInterval,\n ...props\n },\n ref,\n ) => {\n const cfg = INTENSITY_CONFIG[intensity];\n const interval = continuousInterval ?? cfg.defaultInterval;\n\n const [glitching, setGlitching] = React.useState(false);\n\n React.useEffect(() => {\n if (!continuous) return;\n const id = setInterval(() => {\n setGlitching(true);\n const off = setTimeout(\n () => setGlitching(false),\n parseFloat(cfg.duration) * 1000,\n );\n return () => clearTimeout(off);\n }, interval);\n return () => clearInterval(id);\n }, [continuous, interval, cfg.duration]);\n\n const animClass = glitching || !continuous ? \"animate-glitch\" : \"\";\n\n return (\n <span\n ref={ref}\n className={cn(\"relative inline-block\", className)}\n {...props}\n >\n {/* Visible text */}\n <span className=\"relative z-10\">{children}</span>\n\n {/* Glitch layer 1 — cyan, top slice */}\n <span\n aria-hidden\n className={cn(\"absolute inset-0 text-ef-cyan opacity-70\", animClass)}\n style={{\n clipPath: `inset(${cfg.clipTop})`,\n transform: `translate(-${cfg.offset}px, 0)`,\n animationDuration: cfg.duration,\n }}\n >\n {children}\n </span>\n\n {/* Glitch layer 2 — red, bottom slice */}\n <span\n aria-hidden\n className={cn(\"absolute inset-0 text-ef-red opacity-70\", animClass)}\n style={{\n clipPath: `inset(${cfg.clipBot})`,\n transform: `translate(${cfg.offset}px, 0)`,\n animationDuration: cfg.duration,\n animationDelay: \"0.1s\",\n }}\n >\n {children}\n </span>\n </span>\n );\n },\n);\nGlitchText.displayName = \"GlitchText\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { GlitchText };\n","import * as React from \"react\";\n\nexport interface DiamondLoaderProps {\n size?: \"sm\" | \"md\" | \"lg\";\n label?: string;\n className?: string;\n}\n\nconst SIZE_MAP = { sm: 16, md: 28, lg: 44 } as const;\n\nexport const DiamondLoader = React.forwardRef<\n HTMLDivElement,\n DiamondLoaderProps\n>(({ size = \"md\", label, className }, ref) => {\n const s = SIZE_MAP[size];\n return (\n <div\n ref={ref}\n className={`flex flex-col items-center gap-3${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"relative\" style={{ width: s * 2, height: s * 2 }}>\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className=\"absolute inset-0 border-2 border-primary\"\n style={{\n transform: `rotate(45deg) scale(${1 - i * 0.25})`,\n animation: `diamondSpin ${1.2 + i * 0.4}s linear infinite${i === 1 ? \" reverse\" : \"\"}`,\n opacity: 1 - i * 0.25,\n }}\n />\n ))}\n </div>\n {label && (\n <span className=\"font-mono text-xs text-muted-foreground tracking-[0.15em] uppercase\">\n {label}\n </span>\n )}\n </div>\n );\n});\nDiamondLoader.displayName = \"DiamondLoader\";\n","import * as React from \"react\";\nimport { Crosshair } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Status config ───────────────────────────────────────────────────────── */\n\nconst STATUS_LABELS: Record<string, string> = {\n online: \"ONLINE\",\n warning: \"CAUTION\",\n offline: \"OFFLINE\",\n scanning: \"SCANNING\",\n};\n\nconst STATUS_COLORS: Record<string, string> = {\n online: \"bg-ef-green\",\n warning: \"bg-ef-yellow\",\n offline: \"bg-ef-red\",\n scanning: \"bg-ef-cyan animate-pulse\",\n};\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface TacticalPanelProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n status?: \"online\" | \"warning\" | \"offline\" | \"scanning\";\n headerAction?: React.ReactNode;\n collapsible?: boolean;\n defaultCollapsed?: boolean;\n collapsed?: boolean;\n onCollapseChange?: (collapsed: boolean) => void;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst TacticalPanel = React.forwardRef<HTMLDivElement, TacticalPanelProps>(\n (\n {\n title,\n status = \"online\",\n children,\n className,\n headerAction,\n collapsible = false,\n defaultCollapsed = false,\n collapsed: controlledCollapsed,\n onCollapseChange,\n ...props\n },\n ref,\n ) => {\n const [internalCollapsed, setInternalCollapsed] =\n React.useState(defaultCollapsed);\n\n const isControlled = controlledCollapsed !== undefined;\n const isCollapsed = isControlled ? controlledCollapsed : internalCollapsed;\n\n const handleHeaderClick = () => {\n if (!collapsible) return;\n const next = !isCollapsed;\n if (!isControlled) setInternalCollapsed(next);\n onCollapseChange?.(next);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative border border-border bg-surface-1 scanline-overlay\",\n className,\n )}\n {...props}\n >\n {/* ── HUD Header ── */}\n <div\n className={cn(\n \"flex items-center justify-between px-4 py-2.5 border-b border-border bg-surface-0\",\n collapsible && \"cursor-pointer select-none\",\n )}\n onClick={handleHeaderClick}\n >\n <div className=\"flex items-center gap-3\">\n <Crosshair className=\"w-3.5 h-3.5 text-primary\" />\n <span className=\"font-display text-[11px] font-bold tracking-[0.15em] uppercase text-foreground\">\n {title}\n </span>\n {collapsible && (\n <span className=\"font-mono text-[14px] text-primary/60 ml-1 leading-none\">\n {isCollapsed ? \"+\" : \"−\"}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-3\">\n <div className=\"flex items-center gap-2\">\n <div\n className={cn(\"w-2 h-2\", STATUS_COLORS[status])}\n style={{\n clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\",\n }}\n />\n <span className=\"font-mono text-[10px] tracking-[0.1em] text-muted-foreground\">\n {STATUS_LABELS[status]}\n </span>\n </div>\n {headerAction && (\n <div\n className=\"flex items-center\"\n onClick={(e) => e.stopPropagation()}\n >\n {headerAction}\n </div>\n )}\n </div>\n </div>\n\n {/* ── Corner accents ── */}\n <div className=\"absolute top-0 left-0 w-6 h-6 border-t-2 border-l-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute top-0 right-0 w-6 h-6 border-t-2 border-r-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute bottom-0 left-0 w-6 h-6 border-b-2 border-l-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute bottom-0 right-0 w-6 h-6 border-b-2 border-r-2 border-primary/40 pointer-events-none\" />\n\n <div\n className={cn(\n \"overflow-hidden transition-all duration-300\",\n isCollapsed ? \"max-h-0\" : \"max-h-[9999px]\",\n )}\n >\n <div className=\"p-5\">{children}</div>\n </div>\n </div>\n );\n },\n);\nTacticalPanel.displayName = \"TacticalPanel\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { TacticalPanel };\n","import * as React from \"react\";\n\nexport interface HoloCardProps {\n title: string;\n subtitle: string;\n icon: React.ElementType;\n value?: string;\n className?: string;\n}\n\nexport const HoloCard = React.forwardRef<HTMLDivElement, HoloCardProps>(\n ({ title, subtitle, icon: Icon, value, className }, ref) => {\n const [hovering, setHovering] = React.useState(false);\n return (\n <div\n ref={ref}\n className={`relative clip-corner border border-border bg-surface-1 p-6 overflow-hidden group cursor-pointer transition-all duration-500 hover:border-primary/30${className ? ` ${className}` : \"\"}`}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n >\n {/* Scan line */}\n <div\n className=\"absolute left-0 right-0 h-px bg-gradient-to-r from-transparent via-primary/60 to-transparent pointer-events-none transition-all\"\n style={{\n top: hovering ? \"100%\" : \"-10%\",\n opacity: hovering ? 1 : 0,\n transitionDuration: \"2000ms\",\n }}\n />\n {/* Holographic shimmer */}\n <div\n className=\"absolute inset-0 pointer-events-none transition-opacity duration-500\"\n style={{\n background:\n \"linear-gradient(135deg, transparent 0%, hsl(var(--primary) / 0.03) 40%, transparent 60%)\",\n opacity: hovering ? 1 : 0,\n }}\n />\n <div className=\"relative z-10\">\n <Icon className=\"w-5 h-5 text-primary mb-4 group-hover:drop-shadow-[0_0_8px_hsl(var(--primary)/0.5)] transition-all\" />\n {value && (\n <p className=\"font-display text-3xl font-bold text-primary mb-1\">\n {value}\n </p>\n )}\n <h4 className=\"font-display text-sm font-bold tracking-[0.05em] uppercase text-foreground mb-1\">\n {title}\n </h4>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n {/* Bottom diamond */}\n <div className=\"absolute bottom-3 right-3 text-primary/20 group-hover:text-primary/60 transition-colors text-xs\">\n ◆\n </div>\n </div>\n );\n },\n);\nHoloCard.displayName = \"HoloCard\";\n","import * as React from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Terminal } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Speed map ───────────────────────────────────────────────────────────── */\n\nconst SPEED_INTERVALS: Record<number, number> = {\n 1: 2000,\n 2: 1500,\n 3: 1000,\n 4: 600,\n 5: 300,\n};\n\n/* ── Message type config ─────────────────────────────────────────────────── */\n\ntype MessageColorMode = \"mono\" | \"classified\" | \"transmission\";\n\nconst STREAM_COLOR_OVERRIDES: Record<MessageColorMode, string> = {\n mono: \"text-muted-foreground\",\n classified: \"text-primary\",\n transmission: \"text-ef-cyan\",\n};\n\nconst MSG_TYPE_COLORS: Record<string, string> = {\n system: \"text-muted-foreground\",\n data: \"text-ef-cyan\",\n warning: \"text-ef-orange\",\n classified: \"text-primary\",\n};\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport type DataStreamMessage =\n | string\n | { text: string; type?: \"system\" | \"data\" | \"warning\" | \"classified\" };\n\n/* ── Defaults ────────────────────────────────────────────────────────────── */\n\nconst DEFAULT_MESSAGES: DataStreamMessage[] = [\n \"[SYS] Initializing ENDFIELD protocol...\",\n \"[NET] Connection established — latency: 12ms\",\n \"[SEC] Authentication verified ◆ Level: ALPHA\",\n \"[DAT] Loading design tokens: 94 variables mapped\",\n \"[GPU] Render pipeline: Optimized (60fps locked)\",\n \"[SYS] Component registry: 70 modules online\",\n \"[NET] Sync complete — all nodes operational\",\n \"[DAT] Color system: HSL-based, 9 neutrals, 9 accents\",\n \"[SEC] Encryption: AES-256 ◆ Status: ACTIVE\",\n \"[SYS] ENDFIELD DESIGN SYSTEM v2.0 ◆ READY\",\n];\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface DataStreamProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"children\"\n> {\n messages?: DataStreamMessage[];\n speed?: 1 | 2 | 3 | 4 | 5;\n messageType?: MessageColorMode;\n}\n\n/* ── Helpers ─────────────────────────────────────────────────────────────── */\n\nfunction msgText(m: DataStreamMessage): string {\n return typeof m === \"string\" ? m : m.text;\n}\n\nfunction msgColor(m: DataStreamMessage, override?: MessageColorMode): string {\n if (override) return STREAM_COLOR_OVERRIDES[override];\n\n if (typeof m !== \"string\" && m.type) {\n return MSG_TYPE_COLORS[m.type] ?? \"text-muted-foreground\";\n }\n\n const txt = typeof m === \"string\" ? m : m.text;\n if (txt.includes(\"[SEC]\")) return \"text-ef-green\";\n if (txt.includes(\"[NET]\")) return \"text-ef-blue\";\n if (txt.includes(\"[DAT]\")) return \"text-ef-cyan\";\n if (txt.includes(\"[GPU]\")) return \"text-ef-purple\";\n return \"text-muted-foreground\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst DataStream = React.forwardRef<HTMLDivElement, DataStreamProps>(\n (\n {\n messages = DEFAULT_MESSAGES,\n speed = 3,\n messageType,\n className,\n ...props\n },\n ref,\n ) => {\n const intervalMs = SPEED_INTERVALS[speed] ?? SPEED_INTERVALS[3];\n\n const [lines, setLines] = React.useState<DataStreamMessage[]>([]);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n let i = 0;\n const id = setInterval(() => {\n setLines((prev) => {\n const next = [...prev, messages[i % messages.length]];\n return next.length > 8 ? next.slice(-8) : next;\n });\n i++;\n }, intervalMs);\n return () => clearInterval(id);\n }, [messages, intervalMs]);\n\n React.useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n }, [lines]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"border border-border bg-background clip-corner overflow-hidden\",\n className,\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 px-4 py-2 border-b border-border bg-surface-0\">\n <Terminal className=\"w-3.5 h-3.5 text-primary\" />\n <span className=\"font-mono text-[10px] tracking-[0.1em] text-muted-foreground uppercase\">\n LIVE FEED\n </span>\n <div className=\"ml-auto flex items-center gap-1.5\">\n <div\n className=\"w-1.5 h-1.5 bg-ef-green animate-pulse\"\n style={{\n clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\",\n }}\n />\n <span className=\"font-mono text-[10px] text-ef-green\">ACTIVE</span>\n </div>\n </div>\n\n {/* Stream body */}\n <div\n ref={containerRef}\n className=\"p-4 h-48 overflow-y-auto font-mono text-xs space-y-1\"\n >\n <AnimatePresence>\n {lines.map((line, i) => (\n <motion.div\n key={`${msgText(line)}-${i}`}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n className={msgColor(line, messageType)}\n >\n {msgText(line)}\n </motion.div>\n ))}\n </AnimatePresence>\n <span className=\"inline-block w-2 h-4 bg-primary animate-cursor-blink\" />\n </div>\n </div>\n );\n },\n);\nDataStream.displayName = \"DataStream\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { DataStream };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\nexport const tacticalBadgeVariants = cva(\n \"inline-flex items-center gap-1.5 clip-corner-sm border px-3 py-1 font-display text-[10px] font-bold tracking-[0.15em] uppercase\",\n {\n variants: {\n variant: {\n default: \"border-primary/40 text-primary bg-primary/10\",\n success: \"border-ef-green/40 text-ef-green bg-ef-green/10\",\n warning: \"border-ef-yellow/40 text-ef-yellow bg-ef-yellow/10\",\n danger: \"border-ef-red/40 text-ef-red bg-ef-red/10\",\n info: \"border-ef-cyan/40 text-ef-cyan bg-ef-cyan/10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface TacticalBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof tacticalBadgeVariants> {}\n\nexport const TacticalBadge = React.forwardRef<\n HTMLSpanElement,\n TacticalBadgeProps\n>(({ variant, className, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(tacticalBadgeVariants({ variant }), className)}\n {...props}\n >\n <span style={{ fontSize: \"6px\" }}>◆</span>\n {children}\n </span>\n));\nTacticalBadge.displayName = \"TacticalBadge\";\n","import * as React from \"react\";\nimport { AlertTriangle } from \"lucide-react\";\n\nexport interface WarningBannerProps {\n level?: \"caution\" | \"alert\" | \"critical\";\n children: React.ReactNode;\n className?: string;\n}\n\nconst WARNING_STYLES = {\n caution: {\n border: \"border-ef-yellow/30\",\n bg: \"bg-ef-yellow/5\",\n icon: \"text-ef-yellow\",\n label: \"CAUTION\",\n },\n alert: {\n border: \"border-ef-orange/30\",\n bg: \"bg-ef-orange/5\",\n icon: \"text-ef-orange\",\n label: \"ALERT\",\n },\n critical: {\n border: \"border-ef-red/30\",\n bg: \"bg-ef-red/5\",\n icon: \"text-ef-red\",\n label: \"CRITICAL\",\n },\n} as const;\n\nexport const WarningBanner = React.forwardRef<\n HTMLDivElement,\n WarningBannerProps\n>(({ level = \"caution\", children, className }, ref) => {\n const s = WARNING_STYLES[level];\n return (\n <div\n ref={ref}\n className={`clip-corner border ${s.border} ${s.bg} p-4 flex items-start gap-3${className ? ` ${className}` : \"\"}`}\n >\n <AlertTriangle className={`w-5 h-5 ${s.icon} shrink-0 mt-0.5`} />\n <div>\n <span\n className={`font-display text-[11px] font-bold tracking-[0.15em] ${s.icon}`}\n >\n {s.label}\n </span>\n <p className=\"text-sm text-muted-foreground mt-1\">{children}</p>\n </div>\n </div>\n );\n});\nWarningBanner.displayName = \"WarningBanner\";\n","import * as React from \"react\";\n\nexport interface ScanDividerProps {\n label?: string;\n className?: string;\n}\n\nexport const ScanDivider = React.forwardRef<HTMLDivElement, ScanDividerProps>(\n ({ label, className }, ref) => (\n <div\n ref={ref}\n className={`relative flex items-center gap-4 py-2${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent\" />\n {label && (\n <span className=\"font-display text-[10px] font-bold tracking-[0.2em] uppercase text-primary/60 flex items-center gap-2\">\n <span style={{ fontSize: \"6px\" }}>◆</span> {label}{\" \"}\n <span style={{ fontSize: \"6px\" }}>◆</span>\n </span>\n )}\n <div className=\"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent\" />\n </div>\n ),\n);\nScanDivider.displayName = \"ScanDivider\";\n","import * as React from \"react\";\n\nexport interface CoordinateTagProps {\n label: string;\n value: string;\n unit?: string;\n className?: string;\n}\n\nexport const CoordinateTag = React.forwardRef<\n HTMLDivElement,\n CoordinateTagProps\n>(({ label, value, unit, className }, ref) => (\n <div\n ref={ref}\n className={`inline-flex items-center border border-border bg-surface-0 overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n <span className=\"font-mono text-[10px] tracking-[0.1em] uppercase text-muted-foreground bg-surface-2 px-2.5 py-1.5 border-r border-border\">\n {label}\n </span>\n <span className=\"font-mono text-xs text-primary px-2.5 py-1.5 font-bold\">\n {value}\n </span>\n {unit && (\n <span className=\"font-mono text-[10px] text-muted-foreground pr-2.5\">\n {unit}\n </span>\n )}\n </div>\n));\nCoordinateTag.displayName = \"CoordinateTag\";\n","import * as React from \"react\";\nimport { motion, useInView } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface RadarChartDataPoint {\n label: string;\n value: number;\n}\n\nexport interface RadarAxisConfig {\n label: string;\n min?: number;\n max?: number;\n}\n\nexport interface RadarDataset {\n label?: string;\n values: number[];\n color?: string;\n fillOpacity?: number;\n}\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface RadarChartProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"color\"\n> {\n data?: RadarChartDataPoint[];\n color?: \"primary\" | \"cyan\";\n\n axes?: RadarAxisConfig[];\n datasets?: RadarDataset[];\n showLegend?: boolean;\n\n size?: number;\n}\n\n/* ── Helpers ─────────────────────────────────────────────────────────────── */\n\nfunction getPoint(\n cx: number,\n cy: number,\n r: number,\n angleStep: number,\n i: number,\n) {\n return {\n x: cx + r * Math.sin(i * angleStep),\n y: cy - r * Math.cos(i * angleStep),\n };\n}\n\nfunction toPoints(pts: { x: number; y: number }[]) {\n return pts.map((p) => `${p.x},${p.y}`).join(\" \");\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst RadarChart = React.forwardRef<HTMLDivElement, RadarChartProps>(\n (\n {\n data,\n color = \"primary\",\n axes,\n datasets,\n showLegend = false,\n size = 260,\n className,\n ...props\n },\n forwardedRef,\n ) => {\n const innerRef = React.useRef<HTMLDivElement>(null);\n const isInView = useInView(innerRef, { once: true });\n\n const mergeRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n (innerRef as React.MutableRefObject<HTMLDivElement | null>).current =\n el;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el);\n } else if (forwardedRef) {\n (\n forwardedRef as React.MutableRefObject<HTMLDivElement | null>\n ).current = el;\n }\n },\n [forwardedRef],\n );\n\n /* ── Normalise input (legacy → new) ── */\n const resolvedAxes: RadarAxisConfig[] =\n axes ?? data?.map((d) => ({ label: d.label, min: 0, max: 100 })) ?? [];\n\n const resolvedDatasets: RadarDataset[] =\n datasets ??\n (data\n ? [\n {\n label: undefined,\n values: data.map((d) => d.value),\n color:\n color === \"cyan\"\n ? \"hsl(var(--ef-cyan))\"\n : \"hsl(var(--primary))\",\n },\n ]\n : []);\n\n const n = resolvedAxes.length;\n if (n < 3) return null;\n\n const cx = size / 2;\n const cy = size / 2;\n const r = size * 0.38;\n const levels = 4;\n const angleStep = (Math.PI * 2) / n;\n\n /* Grid ring polygons */\n const gridPolygons = Array.from({ length: levels }, (_, lvl) => {\n const lr = r * ((lvl + 1) / levels);\n return toPoints(\n resolvedAxes.map((_, i) => getPoint(cx, cy, lr, angleStep, i)),\n );\n });\n\n /* Axis lines */\n const axisLines = resolvedAxes.map((_, i) =>\n getPoint(cx, cy, r, angleStep, i),\n );\n\n /* Per-dataset polygon paths */\n const datasetPaths = resolvedDatasets.map((ds) => {\n const dataPoints = resolvedAxes.map((axis, i) => {\n const min = axis.min ?? 0;\n const max = axis.max ?? 100;\n const norm = max > min ? (ds.values[i] - min) / (max - min) : 0;\n return getPoint(\n cx,\n cy,\n Math.max(0, Math.min(1, norm)) * r,\n angleStep,\n i,\n );\n });\n return {\n ds,\n path: toPoints(dataPoints),\n center: toPoints(resolvedAxes.map(() => ({ x: cx, y: cy }))),\n };\n });\n\n /* Default dataset colors */\n const defaultColors = [\n \"hsl(var(--primary))\",\n \"hsl(var(--ef-blue))\",\n \"hsl(var(--ef-green))\",\n ];\n\n return (\n <div\n ref={mergeRef}\n className={cn(\"flex flex-col items-center w-full\", className)}\n {...props}\n >\n <svg\n viewBox={`0 0 ${size} ${size}`}\n className=\"w-full max-w-[260px] h-auto overflow-visible\"\n >\n {/* Grid rings */}\n {gridPolygons.map((pts, i) => (\n <polygon\n key={i}\n points={pts}\n fill=\"none\"\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n opacity={0.5}\n />\n ))}\n\n {/* Axis lines */}\n {axisLines.map((p, i) => (\n <line\n key={i}\n x1={cx}\n y1={cy}\n x2={p.x}\n y2={p.y}\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n opacity={0.3}\n />\n ))}\n\n {/* Data polygons — one per dataset */}\n {datasetPaths.map(({ ds, path, center }, di) => {\n const fillColor =\n ds.color ?? defaultColors[di % defaultColors.length];\n const fillOpacity = ds.fillOpacity ?? 0.15;\n return (\n <motion.polygon\n key={di}\n points={isInView ? path : center}\n fill={fillColor}\n fillOpacity={fillOpacity}\n stroke={fillColor}\n strokeWidth={2}\n initial={false}\n animate={{ points: isInView ? path : center }}\n transition={{\n duration: 0.8,\n ease: [0.25, 0.8, 0.25, 1],\n delay: di * 0.1,\n }}\n style={{\n filter: `drop-shadow(0 0 8px ${fillColor.replace(\")\", \" / 0.3)\")})`,\n }}\n />\n );\n })}\n\n {/* Data point circles — first dataset only */}\n {datasetPaths[0] &&\n (() => {\n const { ds, path: _ } = datasetPaths[0];\n const fillColor = ds.color ?? defaultColors[0];\n return resolvedAxes.map((axis, i) => {\n const min = axis.min ?? 0;\n const max = axis.max ?? 100;\n const norm = max > min ? (ds.values[i] - min) / (max - min) : 0;\n const p = getPoint(\n cx,\n cy,\n Math.max(0, Math.min(1, norm)) * r,\n angleStep,\n i,\n );\n return (\n <motion.circle\n key={i}\n cx={cx}\n cy={cy}\n r={4}\n fill={fillColor}\n stroke=\"hsl(var(--background))\"\n strokeWidth={2}\n initial={false}\n animate={{\n cx: isInView ? p.x : cx,\n cy: isInView ? p.y : cy,\n }}\n transition={{ duration: 0.8, delay: i * 0.05 }}\n style={{\n filter: `drop-shadow(0 0 4px ${fillColor.replace(\")\", \" / 0.5)\")})`,\n }}\n />\n );\n });\n })()}\n\n {/* Axis labels */}\n {resolvedAxes.map((axis, i) => {\n const p = getPoint(cx, cy, r + 20, angleStep, i);\n return (\n <text\n key={i}\n x={p.x}\n y={p.y}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"font-display text-[9px] font-bold tracking-[0.1em] uppercase\"\n fill=\"hsl(var(--muted-foreground))\"\n >\n {axis.label}\n </text>\n );\n })}\n </svg>\n\n {/* Legend row */}\n {showLegend && resolvedDatasets.some((ds) => ds.label) && (\n <div className=\"flex items-center gap-4 mt-3\">\n {resolvedDatasets.map((ds, di) => {\n if (!ds.label) return null;\n const c = ds.color ?? defaultColors[di % defaultColors.length];\n return (\n <div key={di} className=\"flex items-center gap-1.5\">\n <span\n className=\"inline-block w-2.5 h-2.5\"\n style={{ backgroundColor: c }}\n />\n <span className=\"font-mono text-[11px] text-muted-foreground uppercase tracking-wider\">\n {ds.label}\n </span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n },\n);\nRadarChart.displayName = \"RadarChart\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { RadarChart };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Bracket size config ─────────────────────────────────────────────────── */\n\nconst BRACKET_SIZE: Record<string, string> = {\n sm: \"w-5 h-5\",\n md: \"w-8 h-8\",\n lg: \"w-12 h-12\",\n};\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface HUDOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n systemLabel?: string;\n lat?: string;\n lon?: string;\n showCoords?: boolean;\n showCrosshair?: boolean;\n showScanlines?: boolean;\n showNoise?: boolean;\n bracketSize?: \"sm\" | \"md\" | \"lg\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst HUDOverlay = React.forwardRef<HTMLDivElement, HUDOverlayProps>(\n (\n {\n children,\n systemLabel = \"SYS::ENDFIELD v2.0\",\n lat = \"LAT 37.7749°N\",\n lon = \"LON 122.4194°W\",\n showCoords = true,\n showCrosshair = true,\n showScanlines = true,\n showNoise = false,\n bracketSize = \"md\",\n className,\n ...props\n },\n ref,\n ) => {\n const [time, setTime] = React.useState(\"\");\n\n React.useEffect(() => {\n const tick = () => setTime(new Date().toLocaleTimeString(\"en-GB\"));\n tick();\n const id = setInterval(tick, 1000);\n return () => clearInterval(id);\n }, []);\n\n const bClass = BRACKET_SIZE[bracketSize] ?? BRACKET_SIZE.md;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative border border-border bg-surface-0 aspect-video flex items-center justify-center overflow-hidden\",\n className,\n )}\n {...props}\n >\n {showScanlines && (\n <div className=\"absolute inset-0 scanline-overlay pointer-events-none\" />\n )}\n\n {showNoise && (\n <div\n className=\"absolute inset-0 pointer-events-none noise-overlay\"\n style={{\n backgroundImage:\n \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E\\\")\",\n backgroundRepeat: \"repeat\",\n backgroundSize: \"200px 200px\",\n opacity: 0.6,\n }}\n />\n )}\n\n {/* Corner brackets */}\n {(\n [\n [\"top-3 left-3\", \"border-t-2 border-l-2\"],\n [\"top-3 right-3\", \"border-t-2 border-r-2\"],\n [\"bottom-3 left-3\", \"border-b-2 border-l-2\"],\n [\"bottom-3 right-3\", \"border-b-2 border-r-2\"],\n ] as const\n ).map(([pos, borders], i) => (\n <div\n key={i}\n className={cn(\n \"absolute border-primary/40 pointer-events-none\",\n bClass,\n pos,\n borders,\n )}\n />\n ))}\n\n {/* Crosshair */}\n {showCrosshair && (\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none\">\n <div\n className=\"w-6 h-px bg-primary/20\"\n style={{ position: \"absolute\", top: \"50%\", left: \"-12px\" }}\n />\n <div\n className=\"h-6 w-px bg-primary/20\"\n style={{ position: \"absolute\", left: \"50%\", top: \"-12px\" }}\n />\n </div>\n )}\n\n {/* Top-left: system label + live time */}\n {showCoords && (\n <div className=\"absolute top-4 left-12 font-mono text-[9px] text-muted-foreground/60 space-y-0.5\">\n <div>{systemLabel}</div>\n <div className=\"text-primary/60\">{time}</div>\n </div>\n )}\n\n {/* Top-right: coordinates */}\n {showCoords && (\n <div className=\"absolute top-4 right-12 font-mono text-[9px] text-muted-foreground/60 text-right space-y-0.5\">\n <div>{lat}</div>\n <div>{lon}</div>\n </div>\n )}\n\n {/* Bottom status bar */}\n <div className=\"absolute bottom-4 left-12 right-12 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-1.5 h-1.5 bg-ef-green\"\n style={{\n clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\",\n }}\n />\n <span className=\"font-mono text-[9px] text-ef-green/80\">\n LINK ACTIVE\n </span>\n </div>\n <div className=\"flex gap-4\">\n {[\"FPS:60\", \"MEM:47%\", \"NET:12ms\"].map((s) => (\n <span\n key={s}\n className=\"font-mono text-[9px] text-muted-foreground/50\"\n >\n {s}\n </span>\n ))}\n </div>\n </div>\n\n {/* User content — rendered above all decoration layers */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n },\n);\nHUDOverlay.displayName = \"HUDOverlay\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { HUDOverlay };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst missionCardVariants = cva(\n [\n \"relative bg-surface-1 border overflow-hidden transition-all duration-300\",\n \"before:absolute before:top-0 before:left-0 before:w-5 before:h-5\",\n \"before:border-t-2 before:border-l-2 before:border-primary/40 before:pointer-events-none\",\n \"after:absolute after:bottom-0 after:right-0 after:w-5 after:h-5\",\n \"after:border-b-2 after:border-r-2 after:border-primary/40 after:pointer-events-none\",\n ].join(\" \"),\n {\n variants: {\n priority: {\n low: \"border-white/8\",\n medium: \"border-ef-blue/30\",\n high: \"border-ef-orange/40\",\n critical: \"border-ef-red/50 shadow-[0_0_12px_rgba(255,71,87,0.1)]\",\n },\n status: {\n active: \"\",\n completed: \"opacity-70\",\n failed: \"opacity-60\",\n pending: \"border-dashed\",\n classified: \"border-primary/20\",\n },\n clickable: {\n true: \"cursor-pointer hover:-translate-y-0.5 hover:shadow-lg\",\n false: \"\",\n },\n },\n defaultVariants: { priority: \"medium\", status: \"active\", clickable: false },\n },\n);\n\n/* ── Config maps ──────────────────────────────────────────────────────────── */\n\nconst STATUS_CONFIG = {\n active: {\n label: \"ACTIVE\",\n cls: \"text-ef-green border-ef-green/40 bg-ef-green/10\",\n },\n completed: {\n label: \"COMPLETED\",\n cls: \"text-muted-foreground border-white/20 bg-white/5\",\n },\n failed: {\n label: \"FAILED\",\n cls: \"text-destructive border-destructive/40 bg-destructive/10\",\n },\n pending: {\n label: \"PENDING\",\n cls: \"text-ef-orange border-ef-orange/40 bg-ef-orange/10\",\n },\n classified: {\n label: \"CLASSIFIED\",\n cls: \"text-primary border-primary/40 bg-primary/10\",\n },\n} as const;\n\nconst PRIORITY_CONFIG = {\n low: { label: \"LOW\", cls: \"text-muted-foreground\" },\n medium: { label: \"MEDIUM\", cls: \"text-ef-blue\" },\n high: { label: \"HIGH\", cls: \"text-ef-orange\" },\n critical: { label: \"CRITICAL\", cls: \"text-destructive\" },\n} as const;\n\n/* ── Types ────────────────────────────────────────────────────────────────── */\n\nexport type MissionStatus = keyof typeof STATUS_CONFIG;\nexport type MissionPriority = keyof typeof PRIORITY_CONFIG;\n\nexport interface MissionCardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n Omit<VariantProps<typeof missionCardVariants>, \"clickable\"> {\n title: string;\n missionId?: string;\n description?: string;\n status?: MissionStatus;\n priority?: MissionPriority;\n date?: string;\n progress?: number;\n tags?: string[];\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst MissionCard = React.forwardRef<HTMLDivElement, MissionCardProps>(\n (\n {\n className,\n title,\n missionId,\n description,\n status = \"active\",\n priority = \"medium\",\n date,\n progress,\n tags,\n onClick,\n ...props\n },\n ref,\n ) => {\n const statusCfg = STATUS_CONFIG[status];\n const priorityCfg = PRIORITY_CONFIG[priority];\n const isClickable = !!onClick;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (isClickable && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onClick?.(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n const clampedProgress =\n progress !== undefined ? Math.min(100, Math.max(0, progress)) : undefined;\n\n return (\n <div\n ref={ref}\n role={isClickable ? \"button\" : \"article\"}\n aria-label={`Mission: ${title}`}\n tabIndex={isClickable ? 0 : undefined}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n className={cn(\n missionCardVariants({ priority, status, clickable: isClickable }),\n className,\n )}\n {...props}\n >\n {/* ── Header ── */}\n <div className=\"flex items-center justify-between px-4 py-2.5 border-b border-white/8 bg-surface-0\">\n <span\n className={cn(\n \"font-mono text-[10px] font-semibold tracking-[0.1em] uppercase\",\n priorityCfg.cls,\n )}\n >\n ◆ PRIORITY: {priorityCfg.label}\n </span>\n <span\n className={cn(\n \"font-mono text-[10px] font-semibold tracking-[0.1em] uppercase border px-2 py-0.5\",\n statusCfg.cls,\n )}\n >\n {statusCfg.label}\n </span>\n </div>\n\n {/* ── Body ── */}\n <div className=\"px-4 pt-3 pb-2\">\n <h3 className=\"font-display text-[15px] font-bold uppercase tracking-wider text-foreground leading-tight\">\n {title}\n </h3>\n {missionId && (\n <p className=\"font-mono text-[11px] text-muted-foreground/60 mt-0.5\">\n ID: {missionId}\n </p>\n )}\n {description && (\n <p className=\"text-[13px] text-muted-foreground mt-2 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n\n {/* ── Footer ── */}\n {(date !== undefined ||\n clampedProgress !== undefined ||\n (tags && tags.length > 0)) && (\n <div className=\"px-4 pb-3 pt-1 space-y-2\">\n {clampedProgress !== undefined && (\n <div className=\"flex items-center gap-2\">\n <div\n role=\"progressbar\"\n aria-valuenow={clampedProgress}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label=\"Mission progress\"\n className=\"flex-1 h-1 bg-white/8 overflow-hidden\"\n >\n <div\n className=\"h-full bg-primary transition-all duration-500\"\n style={{ width: `${clampedProgress}%` }}\n />\n </div>\n <span className=\"font-mono text-[10px] text-muted-foreground shrink-0 w-8 text-right\" aria-hidden=\"true\">\n {clampedProgress}%\n </span>\n </div>\n )}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n {date && (\n <span className=\"font-mono text-[11px] text-muted-foreground/60\">\n {date}\n </span>\n )}\n {tags && tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1 ml-auto\">\n {tags.map((tag) => (\n <span\n key={tag}\n className=\"font-mono text-[9px] uppercase tracking-wider border border-white/10 px-1.5 py-0.5 text-muted-foreground/60\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\nMissionCard.displayName = \"MissionCard\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { MissionCard, missionCardVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Rarity config ────────────────────────────────────────────────────────── */\n\nconst RARITY_STAR_COLORS: Record<number, string> = {\n 1: \"text-white/40\",\n 2: \"text-ef-green/70\",\n 3: \"text-ef-blue/80\",\n 4: \"text-ef-purple\",\n 5: \"text-ef-orange\",\n 6: \"text-primary\",\n};\n\n/* ── Stat fill colors ─────────────────────────────────────────────────────── */\n\nconst STAT_FILL: Record<string, string> = {\n default: \"bg-primary\",\n success: \"bg-ef-green\",\n danger: \"bg-destructive\",\n info: \"bg-ef-blue\",\n};\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst operatorCardVariants = cva(\n [\n \"relative bg-surface-1 border border-white/8 overflow-hidden transition-all duration-300\",\n \"before:absolute before:top-0 before:left-0 before:w-5 before:h-5\",\n \"before:border-t-2 before:border-l-2 before:border-primary/40 before:pointer-events-none\",\n ].join(\" \"),\n {\n variants: {\n size: {\n compact: \"flex gap-3 p-3\",\n default: \"p-4\",\n },\n },\n defaultVariants: { size: \"default\" },\n },\n);\n\n/* ── Types ────────────────────────────────────────────────────────────────── */\n\nexport interface OperatorStat {\n label: string;\n value: number;\n max?: number;\n color?: \"default\" | \"success\" | \"danger\" | \"info\";\n}\n\nexport interface OperatorCardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof operatorCardVariants> {\n name: string;\n operatorClass?: string;\n rarity?: 1 | 2 | 3 | 4 | 5 | 6;\n avatarSrc?: string;\n initials?: string;\n stats?: OperatorStat[];\n faction?: string;\n tags?: string[];\n}\n\n/* ── Avatar block ─────────────────────────────────────────────────────────── */\n\nfunction OperatorAvatar({\n src,\n name,\n initials,\n sizeClass,\n}: {\n src?: string;\n name: string;\n initials?: string;\n sizeClass: string;\n}) {\n return (\n <div\n className={cn(\n \"shrink-0 bg-surface-2 flex items-center justify-center\",\n \"font-display font-bold uppercase text-primary\",\n sizeClass,\n )}\n style={{\n clipPath:\n \"polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 0 100%)\",\n }}\n >\n {src ? (\n <img src={src} alt={name} className=\"w-full h-full object-cover\" />\n ) : (\n <span>{initials ?? name.slice(0, 2)}</span>\n )}\n </div>\n );\n}\n\n/* ── Stars ────────────────────────────────────────────────────────────────── */\n\nfunction RarityStars({ rarity }: { rarity: number }) {\n const starColor = RARITY_STAR_COLORS[rarity] ?? RARITY_STAR_COLORS[3];\n return (\n <span\n className=\"font-mono text-[11px]\"\n aria-label={`${rarity} star${rarity !== 1 ? \"s\" : \"\"}`}\n >\n {Array.from({ length: rarity }).map((_, i) => (\n <span key={`f-${i}`} className={starColor}>\n ◆\n </span>\n ))}\n {Array.from({ length: 6 - rarity }).map((_, i) => (\n <span key={`e-${i}`} className=\"text-white/15\">\n ◇\n </span>\n ))}\n </span>\n );\n}\n\n/* ── Class badge (inline, replicates TacticalBadge style) ────────────────── */\n\nfunction ClassBadge({ label }: { label: string }) {\n return (\n <span\n className={[\n \"inline-flex items-center gap-1.5 clip-corner-sm border\",\n \"px-2.5 py-0.5 font-display text-[10px] font-bold tracking-[0.15em] uppercase\",\n \"border-primary/40 text-primary bg-primary/10\",\n ].join(\" \")}\n >\n <span style={{ fontSize: \"6px\" }}>◆</span>\n {label}\n </span>\n );\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst OperatorCard = React.forwardRef<HTMLDivElement, OperatorCardProps>(\n (\n {\n className,\n name,\n operatorClass,\n rarity = 3,\n avatarSrc,\n initials,\n stats,\n faction,\n tags,\n size,\n ...props\n },\n ref,\n ) => {\n const clampedRarity = Math.min(6, Math.max(1, rarity)) as\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6;\n\n /* ── Compact layout ── */\n if (size === \"compact\") {\n return (\n <div\n ref={ref}\n className={cn(operatorCardVariants({ size }), className)}\n {...props}\n >\n <OperatorAvatar\n src={avatarSrc}\n name={name}\n initials={initials}\n sizeClass=\"w-12 h-12 text-sm\"\n />\n <div className=\"flex-1 min-w-0 py-0.5\">\n <p className=\"font-display text-[13px] font-bold uppercase tracking-wider text-foreground truncate\">\n {name}\n </p>\n {operatorClass && (\n <p className=\"font-mono text-[10px] text-muted-foreground mt-0.5\">\n ◆ {operatorClass.toUpperCase()}\n </p>\n )}\n <div className=\"mt-1\">\n <RarityStars rarity={clampedRarity} />\n </div>\n </div>\n </div>\n );\n }\n\n /* ── Default layout ── */\n return (\n <div\n ref={ref}\n className={cn(operatorCardVariants({ size }), className)}\n {...props}\n >\n {/* Top section: avatar + identity */}\n <div className=\"flex items-start gap-4 mb-3\">\n <OperatorAvatar\n src={avatarSrc}\n name={name}\n initials={initials}\n sizeClass=\"w-20 h-20 text-xl\"\n />\n <div className=\"flex-1 min-w-0 pt-1\">\n <h3 className=\"font-display text-[16px] font-bold uppercase tracking-wider text-foreground leading-tight\">\n {name}\n </h3>\n {faction && (\n <p className=\"font-mono text-[10px] text-muted-foreground/60 mt-0.5 uppercase tracking-wider\">\n {faction}\n </p>\n )}\n {operatorClass && (\n <div className=\"mt-1.5\">\n <ClassBadge label={operatorClass} />\n </div>\n )}\n <div className=\"mt-2\">\n <RarityStars rarity={clampedRarity} />\n </div>\n </div>\n </div>\n\n {/* Tags */}\n {tags && tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1 mb-3\">\n {tags.map((tag) => (\n <span\n key={tag}\n className=\"font-mono text-[9px] uppercase tracking-wider border border-white/10 px-1.5 py-0.5 text-muted-foreground/60\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n\n {/* Stats */}\n {stats && stats.length > 0 && (\n <div className=\"space-y-2 pt-2 border-t border-white/6\">\n {stats.map((stat) => {\n const maxVal = stat.max ?? stat.value;\n const pct =\n maxVal > 0 ? Math.min(100, (stat.value / maxVal) * 100) : 0;\n const fill =\n STAT_FILL[stat.color ?? \"default\"] ?? STAT_FILL.default;\n return (\n <div key={stat.label} className=\"flex items-center gap-2\">\n <span className=\"font-mono text-[10px] uppercase tracking-wider text-muted-foreground w-8 shrink-0\">\n {stat.label}\n </span>\n <div className=\"flex-1 h-1 bg-white/8 overflow-hidden\">\n <div\n className={cn(\"h-full transition-all duration-500\", fill)}\n style={{ width: `${pct}%` }}\n />\n </div>\n <span className=\"font-mono text-[10px] text-muted-foreground/70 w-12 text-right shrink-0\">\n {stat.value.toLocaleString()}\n </span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n },\n);\nOperatorCard.displayName = \"OperatorCard\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { OperatorCard, operatorCardVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst statusBarContainerVariants = cva(\"flex items-center gap-1.5\", {\n variants: {\n size: {\n sm: \"[&>span.seg]:w-3 [&>span.seg]:h-2\",\n md: \"[&>span.seg]:w-4 [&>span.seg]:h-3\",\n lg: \"[&>span.seg]:w-6 [&>span.seg]:h-4\",\n },\n },\n defaultVariants: { size: \"md\" },\n});\n\nconst statusBarSegmentVariants = cva(\"seg transition-all duration-200\", {\n variants: {\n variant: {\n health: \"\",\n energy: \"\",\n shield: \"\",\n experience: \"\",\n },\n },\n defaultVariants: { variant: \"health\" },\n});\n\n/* ── Fill color per variant ───────────────────────────────────────────────── */\n\nconst FILL_COLORS: Record<string, string> = {\n health: \"bg-ef-green\",\n energy: \"bg-primary\",\n shield: \"bg-ef-blue\",\n experience: \"bg-ef-purple\",\n};\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface StatusBarProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof statusBarContainerVariants>,\n VariantProps<typeof statusBarSegmentVariants> {\n value: number;\n max?: number;\n segments?: number;\n label?: string;\n showValue?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst StatusBar = React.forwardRef<HTMLDivElement, StatusBarProps>(\n (\n {\n className,\n value,\n max = 100,\n segments = 10,\n label,\n showValue = false,\n size,\n variant = \"health\",\n ...props\n },\n ref,\n ) => {\n const clampedValue = Math.min(max, Math.max(0, value));\n const ratio = max > 0 ? clampedValue / max : 0;\n const filledCount = Math.round(ratio * segments);\n\n /* Auto-danger color for health bar at low values */\n const resolveFill = (segIdx: number): string => {\n if (segIdx >= filledCount) return \"bg-white/8\";\n if (variant === \"health\") {\n if (ratio <= 0.15) return \"bg-destructive\";\n if (ratio <= 0.3) return \"bg-ef-orange\";\n }\n return FILL_COLORS[variant ?? \"health\"] ?? FILL_COLORS.health;\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-2\", className)}\n role=\"meter\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label ?? `${variant} bar`}\n {...props}\n >\n {label && (\n <span className=\"font-mono text-[10px] uppercase tracking-wider text-muted-foreground shrink-0\">\n {label}\n </span>\n )}\n\n <div className={cn(statusBarContainerVariants({ size }))}>\n {Array.from({ length: segments }).map((_, i) => (\n <span\n key={i}\n className={cn(\n statusBarSegmentVariants({ variant }),\n resolveFill(i),\n )}\n />\n ))}\n </div>\n\n {showValue && (\n <span className=\"font-mono text-[10px] text-muted-foreground shrink-0 ml-1\">\n {clampedValue}/{max}\n </span>\n )}\n </div>\n );\n },\n);\nStatusBar.displayName = \"StatusBar\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { StatusBar, statusBarContainerVariants, statusBarSegmentVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Log level config ─────────────────────────────────────────────────────── */\n\nexport type LogLevel = \"system\" | \"info\" | \"success\" | \"warning\" | \"error\";\n\nconst LOG_CONFIG: Record<\n LogLevel,\n { prefix: string; color: string; ariaLive: string }\n> = {\n system: { prefix: \"[SYS] \", color: \"text-muted-foreground\", ariaLive: \"off\" },\n info: { prefix: \"[INFO]\", color: \"text-ef-blue\", ariaLive: \"off\" },\n success: { prefix: \"[OK] \", color: \"text-ef-green\", ariaLive: \"polite\" },\n warning: { prefix: \"[WARN]\", color: \"text-ef-orange\", ariaLive: \"polite\" },\n error: { prefix: \"[ERR] \", color: \"text-destructive\", ariaLive: \"assertive\" },\n};\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface LogEntry {\n id?: string | number;\n level: LogLevel;\n message: string;\n timestamp?: string;\n}\n\nexport interface CommandOutputProps extends React.HTMLAttributes<HTMLDivElement> {\n entries: LogEntry[];\n showHeader?: boolean;\n headerText?: string;\n showCursor?: boolean;\n autoScroll?: boolean;\n maxHeight?: string;\n showTimestamp?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst CommandOutput = React.forwardRef<HTMLDivElement, CommandOutputProps>(\n (\n {\n className,\n entries,\n showHeader = true,\n headerText = \"TERMINAL\",\n showCursor = true,\n autoScroll = true,\n maxHeight = \"320px\",\n showTimestamp = false,\n ...props\n },\n ref,\n ) => {\n const scrollRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (autoScroll && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [entries, autoScroll]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"bg-[#0F0F0F] border border-white/8 font-mono text-[13px]\",\n className,\n )}\n {...props}\n >\n {/* Header */}\n {showHeader && (\n <div className=\"flex items-center gap-2 px-4 py-2 border-b border-white/8\">\n <div className=\"flex gap-1\">\n <span className=\"w-2.5 h-2.5 bg-white/10\" />\n <span className=\"w-2.5 h-2.5 bg-white/10\" />\n <span className=\"w-2.5 h-2.5 bg-white/10\" />\n </div>\n <span className=\"font-mono text-[10px] text-muted-foreground/60 uppercase tracking-[0.15em] mx-auto\">\n {headerText}\n </span>\n </div>\n )}\n\n {/* Output area */}\n <div\n ref={scrollRef}\n style={{ maxHeight }}\n className=\"overflow-y-auto py-2 scrollbar-thin\"\n role=\"log\"\n aria-live=\"polite\"\n aria-label={headerText}\n >\n {entries.length === 0 && (\n <div className=\"px-4 py-2 text-muted-foreground/40 text-[12px]\">\n No output.\n </div>\n )}\n {entries.map((entry, i) => {\n const cfg = LOG_CONFIG[entry.level];\n const key = entry.id ?? i;\n return (\n <div\n key={key}\n className=\"flex gap-3 px-4 py-0.5 hover:bg-white/[0.02] transition-colors\"\n >\n {/* Prefix */}\n <span\n className={cn(\n \"text-[11px] font-semibold shrink-0 select-none\",\n \"w-[54px]\",\n cfg.color,\n )}\n >\n {cfg.prefix}\n </span>\n\n {/* Timestamp */}\n {showTimestamp && (\n <span className=\"text-[11px] text-muted-foreground/40 shrink-0\">\n {entry.timestamp ??\n new Date().toISOString().slice(0, 19).replace(\"T\", \"/\")}\n </span>\n )}\n\n {/* Message */}\n <span className=\"text-[#E0E0E0] break-all\">\n {entry.message}\n </span>\n </div>\n );\n })}\n\n {/* Blinking cursor */}\n {showCursor && (\n <div className=\"flex items-center gap-3 px-4 py-0.5 mt-0.5\">\n <span className=\"w-[54px] shrink-0\" />\n <span\n className=\"inline-block w-2 h-4 bg-primary animate-pulse\"\n aria-hidden\n />\n </div>\n )}\n </div>\n </div>\n );\n },\n);\nCommandOutput.displayName = \"CommandOutput\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { CommandOutput };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst countdownDigitVariants = cva(\n \"font-display font-bold text-primary tabular-nums leading-none\",\n {\n variants: {\n size: {\n sm: \"text-2xl\",\n md: \"text-5xl\",\n lg: \"text-7xl\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nconst countdownUnitVariants = cva(\n \"font-mono uppercase tracking-widest text-muted-foreground/60\",\n {\n variants: {\n size: {\n sm: \"text-[9px]\",\n md: \"text-[10px]\",\n lg: \"text-[11px]\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/* ── Helpers ─────────────────────────────────────────────────────────────── */\n\ninterface TimeLeft {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n total: number;\n}\n\nfunction computeTimeLeft(targetMs: number): TimeLeft {\n const total = Math.max(0, targetMs - Date.now());\n const seconds = Math.floor((total / 1000) % 60);\n const minutes = Math.floor((total / 1000 / 60) % 60);\n const hours = Math.floor((total / (1000 * 60 * 60)) % 24);\n const days = Math.floor(total / (1000 * 60 * 60 * 24));\n return { days, hours, minutes, seconds, total };\n}\n\nfunction pad2(n: number) {\n return String(n).padStart(2, \"0\");\n}\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface CountdownTimerProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof countdownDigitVariants> {\n targetDate?: string;\n seconds?: number;\n onComplete?: () => void;\n label?: string;\n autoHideZero?: boolean;\n showDays?: boolean;\n}\n\n/* ── Unit cell ───────────────────────────────────────────────────────────── */\n\nfunction UnitCell({\n value,\n unit,\n size,\n}: {\n value: string;\n unit: string;\n size: \"sm\" | \"md\" | \"lg\" | null | undefined;\n}) {\n return (\n <div className=\"flex flex-col items-center gap-1\">\n <span className={countdownDigitVariants({ size })}>{value}</span>\n <span className={countdownUnitVariants({ size })}>{unit}</span>\n </div>\n );\n}\n\n/* ── Separator ────────────────────────────────────────────────────────────── */\n\nfunction Colon({ size }: { size: \"sm\" | \"md\" | \"lg\" | null | undefined }) {\n const cls =\n size === \"sm\" ? \"text-xl\" : size === \"lg\" ? \"text-5xl\" : \"text-3xl\";\n return (\n <span\n className={cn(\n \"font-mono text-primary/30 font-bold select-none mb-4\",\n cls,\n )}\n >\n :\n </span>\n );\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst CountdownTimer = React.forwardRef<HTMLDivElement, CountdownTimerProps>(\n (\n {\n className,\n targetDate,\n seconds: durationSeconds,\n onComplete,\n label,\n autoHideZero = false,\n showDays = true,\n size,\n ...props\n },\n ref,\n ) => {\n const targetMs = React.useMemo(() => {\n if (targetDate) return new Date(targetDate).getTime();\n if (durationSeconds !== undefined)\n return Date.now() + durationSeconds * 1000;\n return Date.now();\n }, [targetDate, durationSeconds]);\n\n const [timeLeft, setTimeLeft] = React.useState<TimeLeft>(() =>\n computeTimeLeft(targetMs),\n );\n\n const completedRef = React.useRef(false);\n\n React.useEffect(() => {\n completedRef.current = false;\n\n const tick = () => {\n const tl = computeTimeLeft(targetMs);\n setTimeLeft(tl);\n if (tl.total === 0 && !completedRef.current) {\n completedRef.current = true;\n onComplete?.();\n }\n };\n\n tick();\n const id = setInterval(tick, 1000);\n return () => clearInterval(id);\n }, [targetMs, onComplete]);\n\n const ariaLabel = React.useMemo(\n () =>\n `Countdown: ${timeLeft.days} days ${timeLeft.hours} hours ${timeLeft.minutes} minutes ${timeLeft.seconds} seconds`,\n [timeLeft.days, timeLeft.hours, timeLeft.minutes],\n );\n\n const displayDays = showDays && !(autoHideZero && timeLeft.days === 0);\n\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-center gap-4\", className)}\n role=\"timer\"\n aria-label={ariaLabel}\n aria-live=\"off\"\n {...props}\n >\n {label && (\n <p className=\"font-mono text-[11px] uppercase tracking-widest text-muted-foreground\">\n {label}\n </p>\n )}\n\n <div className=\"flex items-end gap-2\">\n {displayDays && (\n <>\n <UnitCell value={String(timeLeft.days)} unit=\"DAYS\" size={size} />\n <Colon size={size} />\n </>\n )}\n <UnitCell value={pad2(timeLeft.hours)} unit=\"HRS\" size={size} />\n <Colon size={size} />\n <UnitCell value={pad2(timeLeft.minutes)} unit=\"MIN\" size={size} />\n <Colon size={size} />\n <UnitCell value={pad2(timeLeft.seconds)} unit=\"SEC\" size={size} />\n </div>\n </div>\n );\n },\n);\nCountdownTimer.displayName = \"CountdownTimer\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { CountdownTimer };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface TacticalTableColumn<T> {\n key: keyof T & string;\n header: string;\n sortable?: boolean;\n cell?: (row: T, rowIndex: number) => React.ReactNode;\n width?: string;\n align?: \"left\" | \"center\" | \"right\";\n}\n\nexport interface TacticalTableProps<\n T extends Record<string, unknown>,\n> extends React.HTMLAttributes<HTMLDivElement> {\n columns: TacticalTableColumn<T>[];\n data: T[];\n sortKey?: keyof T & string;\n sortDirection?: \"asc\" | \"desc\";\n onSort?: (key: keyof T & string) => void;\n selectable?: boolean;\n selectedIndices?: number[];\n onRowClick?: (row: T, index: number) => void;\n loading?: boolean;\n skeletonRows?: number;\n emptyState?: React.ReactNode;\n caption?: string;\n}\n\n/* ── Sort indicator ───────────────────────────────────────────────────────── */\n\nfunction SortIndicator({\n active,\n direction,\n}: {\n active: boolean;\n direction?: \"asc\" | \"desc\";\n}) {\n if (!active)\n return <span className=\"ml-1 text-muted-foreground/20 text-[10px]\">↕</span>;\n return (\n <span className=\"ml-1 text-primary text-[10px]\">\n {direction === \"asc\" ? \"▲\" : \"▼\"}\n </span>\n );\n}\n\n/* ── Skeleton row ─────────────────────────────────────────────────────────── */\n\nfunction SkeletonRow({ colCount }: { colCount: number }) {\n return (\n <tr>\n {Array.from({ length: colCount }).map((_, i) => (\n <td key={i} className=\"px-4 py-3 border-b border-white/[0.04]\">\n <div\n className={cn(\n \"h-3 bg-surface-2 animate-skeleton\",\n i === 0 ? \"w-3/4\" : i % 3 === 0 ? \"w-1/2\" : \"w-full\",\n )}\n />\n </td>\n ))}\n </tr>\n );\n}\n\n/* ── Align map ────────────────────────────────────────────────────────────── */\n\nconst ALIGN_CLASS = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n};\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nfunction TacticalTableInner<T extends Record<string, unknown>>(\n {\n className,\n columns,\n data,\n sortKey,\n sortDirection,\n onSort,\n selectable = false,\n selectedIndices,\n onRowClick,\n loading = false,\n skeletonRows = 4,\n emptyState,\n caption,\n ...props\n }: TacticalTableProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const selectedSet = new Set(selectedIndices ?? []);\n\n return (\n <div\n ref={ref}\n className={cn(\"w-full overflow-x-auto\", className)}\n {...props}\n >\n <table className=\"w-full border-collapse\" role=\"grid\">\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n\n {/* Head */}\n <thead>\n <tr>\n {columns.map((col) => {\n const isActiveSort = sortKey === col.key;\n return (\n <th\n key={col.key}\n scope=\"col\"\n className={cn(\n \"px-4 py-3 border-b border-white/10 bg-surface-0 sticky top-0 z-10\",\n \"font-mono text-[11px] font-bold tracking-[0.12em] uppercase text-muted-foreground\",\n col.width ?? \"\",\n ALIGN_CLASS[col.align ?? \"left\"],\n col.sortable &&\n \"cursor-pointer select-none hover:text-foreground transition-colors\",\n )}\n aria-sort={\n col.sortable && isActiveSort\n ? sortDirection === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : undefined\n }\n onClick={col.sortable ? () => onSort?.(col.key) : undefined}\n >\n {col.header}\n {col.sortable && (\n <SortIndicator\n active={isActiveSort}\n direction={sortDirection}\n />\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n\n {/* Body */}\n <tbody>\n {loading ? (\n Array.from({ length: skeletonRows }).map((_, i) => (\n <SkeletonRow key={i} colCount={columns.length} />\n ))\n ) : data.length === 0 ? (\n <tr>\n <td colSpan={columns.length} className=\"px-4 py-12 text-center\">\n {emptyState ?? (\n <span className=\"font-mono text-[12px] text-muted-foreground/40 uppercase tracking-wider\">\n NO DATA\n </span>\n )}\n </td>\n </tr>\n ) : (\n data.map((row, rowIdx) => {\n const isSelected = selectable && selectedSet.has(rowIdx);\n const isEven = rowIdx % 2 === 1;\n return (\n <tr\n key={rowIdx}\n aria-selected={selectable ? isSelected : undefined}\n tabIndex={selectable ? 0 : undefined}\n onClick={\n selectable ? () => onRowClick?.(row, rowIdx) : undefined\n }\n onKeyDown={\n selectable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick?.(row, rowIdx);\n }\n }\n : undefined\n }\n className={cn(\n \"transition-colors\",\n isSelected\n ? \"bg-primary/[0.06]\"\n : isEven\n ? \"bg-white/[0.015] hover:bg-primary/[0.03]\"\n : \"hover:bg-primary/[0.03]\",\n selectable && \"cursor-pointer focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary\",\n )}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n className={cn(\n \"px-4 py-3 text-[14px] text-foreground border-b border-white/[0.04]\",\n ALIGN_CLASS[col.align ?? \"left\"],\n )}\n >\n {col.cell\n ? col.cell(row, rowIdx)\n : (row[col.key] as React.ReactNode)}\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nconst TacticalTable = React.forwardRef(TacticalTableInner) as <\n T extends Record<string, unknown>,\n>(\n props: TacticalTableProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> },\n) => React.ReactElement;\n\n(TacticalTable as { displayName?: string }).displayName = \"TacticalTable\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { TacticalTable };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface MatrixGridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: number;\n rows?: number;\n dotSize?: number;\n gap?: number;\n activeColor?: string;\n activeProbability?: number;\n intervalMs?: number;\n static?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst MatrixGrid = React.forwardRef<HTMLDivElement, MatrixGridProps>(\n (\n {\n className,\n cols = 20,\n rows = 10,\n dotSize = 4,\n gap = 8,\n activeColor = \"bg-primary\",\n activeProbability = 0.05,\n intervalMs = 300,\n static: isStatic = false,\n ...props\n },\n ref,\n ) => {\n const total = cols * rows;\n const [activeDots, setActiveDots] = React.useState<Set<number>>(\n () => new Set<number>(),\n );\n\n /* Detect reduced-motion preference */\n const prefersReduced = React.useMemo(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n }, []);\n\n /* Random activation loop */\n React.useEffect(() => {\n if (isStatic || prefersReduced) return;\n\n const id = setInterval(() => {\n setActiveDots((prev) => {\n const next = new Set(prev);\n /* Activate random dots */\n for (let i = 0; i < total; i++) {\n if (Math.random() < activeProbability) {\n next.add(i);\n }\n }\n for (const dot of next) {\n if (Math.random() < 0.3) next.delete(dot);\n }\n return next;\n });\n }, intervalMs);\n\n return () => clearInterval(id);\n }, [isStatic, prefersReduced, total, activeProbability, intervalMs]);\n\n return (\n <div\n ref={ref}\n className={cn(\"overflow-hidden\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${cols}, ${dotSize}px)`,\n gap: `${gap}px`,\n }}\n >\n {Array.from({ length: total }).map((_, i) => (\n <div\n key={i}\n style={{ width: dotSize, height: dotSize }}\n className={cn(\n \"transition-opacity\",\n isStatic || prefersReduced ? \"duration-0\" : \"duration-500\",\n activeDots.has(i)\n ? cn(\"opacity-100\", activeColor)\n : \"opacity-10 bg-white\",\n )}\n />\n ))}\n </div>\n </div>\n );\n },\n);\nMatrixGrid.displayName = \"MatrixGrid\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { MatrixGrid };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst frequencyBarsVariants = cva(\"flex items-end gap-px\", {\n variants: {\n color: {\n primary: \"[&>span]:bg-primary\",\n success: \"[&>span]:bg-ef-green\",\n danger: \"[&>span]:bg-destructive\",\n info: \"[&>span]:bg-ef-blue\",\n muted: \"[&>span]:bg-white/20\",\n },\n },\n defaultVariants: { color: \"primary\" },\n});\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface FrequencyBarsProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"color\">,\n VariantProps<typeof frequencyBarsVariants> {\n barCount?: number;\n barWidth?: number;\n height?: number;\n speed?: \"slow\" | \"medium\" | \"fast\";\n paused?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst SPEED_DURATION: Record<string, string> = {\n slow: \"1.4s\",\n medium: \"0.8s\",\n fast: \"0.4s\",\n};\n\nconst FrequencyBars = React.forwardRef<HTMLDivElement, FrequencyBarsProps>(\n (\n {\n className,\n barCount = 12,\n barWidth = 3,\n height = 32,\n speed = \"medium\",\n paused = false,\n color,\n style,\n ...props\n },\n ref,\n ) => {\n const duration = SPEED_DURATION[speed] ?? SPEED_DURATION.medium;\n\n const bars = React.useMemo(\n () =>\n Array.from({ length: barCount }, (_, i) => ({\n delay: `${((i * 0.13) % 0.9).toFixed(2)}s`,\n })),\n [barCount],\n );\n\n return (\n <div\n ref={ref}\n className={cn(frequencyBarsVariants({ color }), className)}\n style={{ height, ...style }}\n aria-hidden=\"true\"\n {...props}\n >\n {bars.map((bar, i) => (\n <span\n key={i}\n style={{\n display: \"inline-block\",\n width: barWidth,\n height: \"100%\",\n transformOrigin: \"center bottom\",\n animation: `frequency-bar ${duration} ease-in-out infinite alternate`,\n animationDelay: bar.delay,\n animationPlayState: paused ? \"paused\" : \"running\",\n }}\n />\n ))}\n </div>\n );\n },\n);\nFrequencyBars.displayName = \"FrequencyBars\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { FrequencyBars, frequencyBarsVariants };\n"],"names":["cn","inputs","twMerge","clsx","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","React","className","sideOffset","props","ref","jsx","ToastProvider","ToastPrimitives","ToastViewport","toastVariants","cva","Toast","variant","ToastAction","ToastClose","X","ToastTitle","ToastDescription","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","t","toast","listeners","memoryState","listener","id","update","dismiss","open","useToast","setState","index","Toaster","toasts","title","description","jsxs","theme","Sonner","buttonVariants","Button","size","asChild","loading","disabled","children","type","Slot","badgeVariants","Badge","removable","onRemove","e","BRACKET_BASE","cardVariants","Card","hoverable","selected","CardHeader","CardMeta","CardTitle","CardDescription","CardBody","CardFooter","inputWrapperVariants","Input","leftElement","rightElement","pl","pr","Label","HelperText","textareaVariants","Textarea","showCount","maxLength","onChange","rest","setCount","initial","counterColorClass","Checkbox","label","helperText","generatedId","checkboxId","CheckboxPrimitive","RadioGroup","RadioGroupPrimitive","RadioGroupItem","itemId","Switch","offLabel","onLabel","checked","switchId","SwitchPrimitive","Select","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","SelectScrollUpButton","SelectScrollDownButton","SelectContent","position","SelectLabel","SelectItem","danger","SelectSeparator","avatarVariants","statusColors","Avatar","status","AvatarPrimitive","AvatarImage","AvatarFallback","progressTrackVariants","progressFillVariants","Progress","value","showLabel","isIndeterminate","clampedValue","ProgressPrimitive","Accordion","AccordionPrimitive","AccordionItem","AccordionTrigger","AccordionContent","Tabs","TabsPrimitive","tabsListVariants","TabsList","tabsTriggerVariants","TabsTrigger","TabsContent","Popover","PopoverPrimitive","PopoverTrigger","PopoverAnchor","PopoverContent","align","Dialog","DialogPrimitive","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","dialogContentVariants","DialogContent","DialogHeader","DialogFooter","DialogTitle","DialogDescription","separatorVariants","Separator","orientation","decorative","resolvedOrientation","SeparatorPrimitive","skeletonLineVariants","SkeletonLine","width","height","SkeletonText","lines","lineWidths","_","i","skeletonAvatarSizes","SkeletonAvatar","SkeletonCard","showAvatar","PRESET_COPY","emptyStateVariants","EmptyState","icon","preset","resolvedTitle","resolvedDesc","alertVariants","VARIANT_CONFIG","Alert","dismissible","onDismiss","cfg","showIcon","iconNode","timelineItemVariants","TimelineItem","date","marker","Timeline","items","item","itemChildren","itemCn","getStepState","currentStep","Stepper","steps","step","isComplete","isCurrent","isLast","stateLabel","paginationItemVariants","getPageRange","current","total","siblings","left","right","pages","Pagination","totalPages","currentPage","onPageChange","siblingCount","isPrevDisabled","isNextDisabled","page","Breadcrumb","separator","numberInputVariants","NumberInput","defaultValue","min","max","isControlled","internalValue","setInternalValue","clamp","n","next","clamped","decrement","increment","atMin","atMax","buttonBase","parsed","INTENSITY_CONFIG","GlitchText","intensity","continuous","continuousInterval","interval","glitching","setGlitching","off","animClass","SIZE_MAP","DiamondLoader","s","STATUS_LABELS","STATUS_COLORS","TacticalPanel","headerAction","collapsible","defaultCollapsed","controlledCollapsed","onCollapseChange","internalCollapsed","setInternalCollapsed","isCollapsed","handleHeaderClick","Crosshair","HoloCard","subtitle","Icon","hovering","setHovering","SPEED_INTERVALS","STREAM_COLOR_OVERRIDES","MSG_TYPE_COLORS","DEFAULT_MESSAGES","msgText","m","msgColor","override","txt","DataStream","messages","speed","messageType","intervalMs","setLines","containerRef","prev","Terminal","AnimatePresence","line","motion","tacticalBadgeVariants","TacticalBadge","WARNING_STYLES","WarningBanner","level","AlertTriangle","ScanDivider","CoordinateTag","unit","getPoint","cx","cy","r","angleStep","toPoints","pts","p","RadarChart","data","color","axes","datasets","showLegend","forwardedRef","innerRef","isInView","useInView","mergeRef","el","resolvedAxes","d","resolvedDatasets","levels","gridPolygons","lvl","lr","axisLines","datasetPaths","ds","dataPoints","axis","norm","defaultColors","path","center","di","fillColor","fillOpacity","c","BRACKET_SIZE","HUDOverlay","systemLabel","lat","lon","showCoords","showCrosshair","showScanlines","showNoise","bracketSize","time","setTime","tick","bClass","pos","borders","missionCardVariants","STATUS_CONFIG","PRIORITY_CONFIG","MissionCard","missionId","priority","progress","tags","onClick","statusCfg","priorityCfg","isClickable","handleKeyDown","clampedProgress","tag","RARITY_STAR_COLORS","STAT_FILL","operatorCardVariants","OperatorAvatar","src","name","initials","sizeClass","RarityStars","rarity","starColor","ClassBadge","OperatorCard","operatorClass","avatarSrc","stats","faction","clampedRarity","stat","maxVal","pct","fill","statusBarContainerVariants","statusBarSegmentVariants","FILL_COLORS","StatusBar","segments","showValue","ratio","filledCount","resolveFill","segIdx","LOG_CONFIG","CommandOutput","entries","showHeader","headerText","showCursor","autoScroll","maxHeight","showTimestamp","scrollRef","entry","key","countdownDigitVariants","countdownUnitVariants","computeTimeLeft","targetMs","seconds","minutes","hours","pad2","UnitCell","Colon","CountdownTimer","targetDate","durationSeconds","onComplete","autoHideZero","showDays","timeLeft","setTimeLeft","completedRef","tl","ariaLabel","displayDays","Fragment","SortIndicator","active","direction","SkeletonRow","colCount","ALIGN_CLASS","TacticalTableInner","columns","sortKey","sortDirection","onSort","selectable","selectedIndices","onRowClick","skeletonRows","emptyState","caption","selectedSet","col","isActiveSort","row","rowIdx","isSelected","isEven","TacticalTable","MatrixGrid","cols","rows","dotSize","gap","activeColor","activeProbability","isStatic","activeDots","setActiveDots","prefersReduced","dot","frequencyBarsVariants","SPEED_DURATION","FrequencyBars","barCount","barWidth","paused","style","duration","bars","bar"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/lib/utils.ts","../../src/components/ui/tooltip.tsx","../../src/components/ui/toast.tsx","../../src/hooks/use-toast.ts","../../src/components/ui/toaster.tsx","../../src/components/ui/sonner.tsx","../../src/components/ui/button.tsx","../../src/components/ui/badge.tsx","../../src/components/ui/card.tsx","../../src/hooks/use-focus-trap.ts","../../src/hooks/use-shortcut.ts","../../src/hooks/use-in-view.ts","../../src/hooks/use-stagger.ts","../../src/components/ui/input.tsx","../../src/components/ui/textarea.tsx","../../src/components/ui/checkbox.tsx","../../src/components/ui/radio-group.tsx","../../src/components/ui/switch.tsx","../../src/components/ui/select.tsx","../../src/components/ui/avatar.tsx","../../src/components/ui/progress.tsx","../../src/components/ui/accordion.tsx","../../src/components/ui/tabs.tsx","../../src/components/ui/popover.tsx","../../src/components/ui/dialog.tsx","../../src/components/ui/separator.tsx","../../src/components/ui/skeleton.tsx","../../src/components/ui/empty-state.tsx","../../src/components/ui/alert.tsx","../../src/components/ui/timeline.tsx","../../src/components/ui/stepper.tsx","../../src/components/ui/pagination.tsx","../../src/components/ui/breadcrumb.tsx","../../src/components/ui/number-input.tsx","../../src/components/ui/view-toggle.tsx","../../src/components/ui/filter-bar.tsx","../../src/components/ui/otp-input.tsx","../../src/components/ui/date-picker.tsx","../../src/components/ui/rating.tsx","../../src/components/ui/session-timeout-modal.tsx","../../src/components/ui/file-upload.tsx","../../src/components/ui/bottom-sheet.tsx","../../src/components/ui/carousel.tsx","../../src/components/ui/resizable.tsx","../../src/components/ui/chart.tsx","../../src/components/ui/rich-text-editor.tsx","../../src/components/ui/footer.tsx","../../src/components/ui/table.tsx","../../src/components/ui/list.tsx","../../src/components/ui/stat.tsx","../../src/components/ui/sort-control.tsx","../../src/components/ui/pull-to-refresh.tsx","../../src/components/ui/swipeable-item.tsx","../../src/components/ui/copy-clipboard.tsx","../../src/components/ui/back-to-top.tsx","../../src/components/ui/scroll-progress.tsx","../../src/components/ui/cookie-consent.tsx","../../src/components/ui/command-palette.tsx","../../src/components/ui/dropdown.tsx","../../src/components/ui/context-menu.tsx","../../src/components/ui/spoiler-block.tsx","../../src/components/ui/theme-switcher.tsx","../../src/components/ui/signature/glitch-text.tsx","../../src/components/ui/signature/diamond-loader.tsx","../../src/components/ui/signature/tactical-panel.tsx","../../src/components/ui/signature/holo-card.tsx","../../src/components/ui/signature/data-stream.tsx","../../src/components/ui/signature/tactical-badge.tsx","../../src/components/ui/signature/warning-banner.tsx","../../src/components/ui/signature/scan-divider.tsx","../../src/components/ui/signature/coordinate-tag.tsx","../../src/components/ui/signature/radar-chart.tsx","../../src/components/ui/signature/hud-overlay.tsx","../../src/components/ui/signature/mission-card.tsx","../../src/components/ui/signature/operator-card.tsx","../../src/components/ui/signature/status-bar.tsx","../../src/components/ui/signature/command-output.tsx","../../src/components/ui/signature/countdown-timer.tsx","../../src/components/ui/signature/tactical-table.tsx","../../src/components/ui/signature/matrix-grid.tsx","../../src/components/ui/signature/frequency-bars.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-tooltip overflow-hidden border border-border bg-surface-2 px-3 py-1.5 text-xs text-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from \"react\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Viewport>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Viewport\n ref={ref}\n className={cn(\n \"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\",\n className,\n )}\n {...props}\n />\n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n {\n variants: {\n variant: {\n default: \"border bg-background text-foreground\",\n destructive:\n \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Toast = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n return (\n <ToastPrimitives.Root\n ref={ref}\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Action>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Action\n ref={ref}\n className={cn(\n \"inline-flex h-8 shrink-0 items-center justify-center border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Close>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Close\n ref={ref}\n className={cn(\n \"absolute right-2 top-2 p-1 text-foreground/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\",\n className,\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"h-4 w-4\" />\n </ToastPrimitives.Close>\n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Title>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Title\n ref={ref}\n className={cn(\"text-sm font-semibold\", className)}\n {...props}\n />\n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef<typeof ToastPrimitives.Description>,\n React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitives.Description\n ref={ref}\n className={cn(\"text-sm opacity-90\", className)}\n {...props}\n />\n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n","import * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"../components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 5000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n","import { useToast } from \"../../hooks/use-toast\";\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"./toast\";\n\nexport function Toaster() {\n const { toasts } = useToast();\n\n return (\n <ToastProvider>\n {toasts.map(function ({ id, title, description, action, ...props }) {\n return (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && (\n <ToastDescription>{description}</ToastDescription>\n )}\n </div>\n {action}\n <ToastClose />\n </Toast>\n );\n })}\n <ToastViewport />\n </ToastProvider>\n );\n}\n","import { Toaster as Sonner, toast } from \"sonner\";\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\nconst Toaster = ({ theme = \"dark\", ...props }: ToasterProps) => (\n <Sonner\n theme={theme as ToasterProps[\"theme\"]}\n className=\"toaster group\"\n richColors\n closeButton\n duration={4000}\n visibleToasts={3}\n pauseWhenPageIsHidden\n toastOptions={{\n classNames: {\n toast:\n \"group toast group-[.toaster]:bg-surface-2 group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg group-[.toaster]:border-l-[3px]\",\n title:\n \"group-[.toast]:font-display group-[.toast]:text-[13px] group-[.toast]:font-bold group-[.toast]:uppercase group-[.toast]:tracking-wider\",\n description: \"group-[.toast]:text-[14px] group-[.toast]:text-muted-foreground\",\n actionButton:\n \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n cancelButton:\n \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n closeButton:\n \"group-[.toast]:!text-muted-foreground group-[.toast]:hover:!text-foreground\",\n error: \"group-[.toaster]:!border-l-destructive group-[.toaster]:!border-destructive/40\",\n success: \"group-[.toaster]:!border-l-ef-green\",\n warning: \"group-[.toaster]:!border-l-ef-orange\",\n info: \"group-[.toaster]:!border-l-ef-blue\",\n },\n }}\n {...props}\n />\n);\n\nconst notify = {\n info: (msg: string, opts?: object) =>\n toast(msg, { duration: 5000, ...opts }),\n success: (msg: string, opts?: object) =>\n toast.success(msg, { duration: 4000, ...opts }),\n warning: (msg: string, opts?: object) =>\n toast.warning(msg, { duration: 8000, ...opts }),\n error: (msg: string, opts?: object) =>\n toast.error(msg, { duration: Infinity, ...opts }),\n};\n\nexport { Toaster, toast, notify };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 font-display font-bold uppercase tracking-[0.1em] transition-all duration-150 select-none whitespace-nowrap focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-40\",\n {\n variants: {\n variant: {\n primary:\n \"clip-corner bg-primary text-primary-foreground hover:brightness-110 hover:shadow-glow hover:-translate-y-px active:brightness-90 active:translate-y-0\",\n secondary:\n \"clip-corner border border-border-strong text-card-foreground bg-transparent hover:border-primary/60 hover:text-primary active:bg-primary/5\",\n ghost:\n \"bg-transparent text-muted-foreground hover:text-primary hover:bg-primary/5 active:bg-primary/10\",\n danger:\n \"clip-corner bg-destructive text-destructive-foreground hover:brightness-110 active:brightness-90\",\n link: \"bg-transparent text-primary underline-offset-4 hover:underline h-auto p-0\",\n icon: \"bg-surface-2 border border-border text-muted-foreground hover:border-primary/30 hover:bg-primary/10 hover:text-primary\",\n },\n size: {\n xs: \"h-7 px-3 text-[11px]\",\n sm: \"h-8 px-4 text-xs\",\n md: \"h-11 px-7 text-sm\",\n lg: \"h-[52px] px-9 text-base\",\n xl: \"h-[60px] px-12 text-lg\",\n icon: \"h-10 w-10 p-0\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * When true, renders the button as its child element (Radix Slot pattern).\n * Useful for wrapping `<a>` or other elements with button styling.\n * @example <Button asChild><a href=\"/page\">Go</a></Button>\n */\n asChild?: boolean;\n /**\n * Displays a diamond spinner and disables interaction.\n * Sets `aria-busy` for accessibility.\n */\n loading?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n disabled,\n children,\n type = \"button\",\n ...props\n },\n ref,\n ) => {\n if (asChild) {\n return (\n <Slot\n ref={ref as React.ForwardedRef<HTMLElement>}\n className={cn(buttonVariants({ variant, size }), className)}\n aria-disabled={disabled || undefined}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n buttonVariants({ variant, size }),\n loading && \"pointer-events-none opacity-80\",\n className,\n )}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading && (\n <span\n className=\"h-4 w-4 shrink-0 border-2 border-current clip-corner-sm animate-diamond-spin\"\n aria-hidden=\"true\"\n />\n )}\n {children}\n </button>\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1.5 border px-2.5 py-0.5 font-mono text-[10px] font-semibold tracking-[0.12em] uppercase transition-colors\",\n {\n variants: {\n variant: {\n default: \"border-border text-muted-foreground bg-surface-2\",\n primary: \"border-primary/40 text-primary bg-primary/10\",\n info: \"border-ef-blue/40 text-ef-blue bg-ef-blue/10\",\n success: \"border-ef-green/40 text-ef-green bg-ef-green/10\",\n warning: \"border-ef-orange/40 text-ef-orange bg-ef-orange/10\",\n danger: \"border-destructive/40 text-destructive bg-destructive/10\",\n purple: \"border-ef-purple/40 text-ef-purple bg-ef-purple/10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface BadgeProps\n extends\n React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n /**\n * Displays a × remove button at the end of the badge.\n * Use together with `onRemove` to handle removal.\n */\n removable?: boolean;\n /**\n * Called when the × remove button is clicked.\n * Only fires when `removable` is true.\n */\n onRemove?: () => void;\n}\n\nconst Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, variant, removable, onRemove, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(badgeVariants({ variant }), removable && \"pr-1\", className)}\n {...props}\n >\n {children}\n {removable && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove?.();\n }}\n className=\"ml-0.5 inline-flex items-center justify-center leading-none opacity-50 hover:opacity-100 transition-opacity focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-current\"\n aria-label=\"Remove\"\n tabIndex={0}\n >\n ×\n </button>\n )}\n </span>\n ),\n);\nBadge.displayName = \"Badge\";\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n// ── Corner brackets via Tailwind before:/after: utilities ─────────────────────\nconst BRACKET_BASE =\n \"before:content-[''] before:absolute before:-top-px before:-left-px \" +\n \"before:w-6 before:h-6 before:border-t-2 before:border-l-2 \" +\n \"before:border-primary/40 before:pointer-events-none \" +\n \"after:content-[''] after:absolute after:-bottom-px after:-right-px \" +\n \"after:w-6 after:h-6 after:border-b-2 after:border-r-2 \" +\n \"after:border-primary/40 after:pointer-events-none\";\n\nconst cardVariants = cva(\n [\n \"relative bg-surface-1 border border-border transition-all duration-300\",\n BRACKET_BASE,\n ].join(\" \"),\n {\n variants: {\n hoverable: {\n true: [\n \"cursor-pointer\",\n \"hover:-translate-y-1\",\n \"hover:shadow-[0_16px_48px_rgba(0,0,0,0.5)]\",\n \"hover:border-primary/20\",\n \"hover:before:border-primary/60\",\n \"hover:after:border-primary/60\",\n ].join(\" \"),\n false: \"\",\n },\n selected: {\n true: \"border-2 border-primary/40 bg-primary/[0.06]\",\n false: \"\",\n },\n },\n defaultVariants: {\n hoverable: false,\n selected: false,\n },\n },\n);\n\n// ── CardProps ─────────────────────────────────────────────────────────────────\n\nexport interface CardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /**\n * Adds hover lift effect — `translateY(-4px)` + deep shadow + yellow border tint.\n * Bracket corners intensify on hover.\n */\n hoverable?: boolean;\n /**\n * Highlights card with primary border + subtle yellow background.\n * Use for selected/active state in selection grids.\n */\n selected?: boolean;\n}\n\n// ── Card (root) ───────────────────────────────────────────────────────────────\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, hoverable, selected, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(cardVariants({ hoverable, selected }), className)}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\n// ── CardHeader ────────────────────────────────────────────────────────────────\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-start justify-between gap-4 p-5\", className)}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\n// ── CardMeta ──────────────────────────────────────────────────────────────────\nconst CardMeta = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"font-mono text-[10px] tracking-[0.15em] uppercase text-primary mb-2\",\n className,\n )}\n {...props}\n />\n));\nCardMeta.displayName = \"CardMeta\";\n\n// ── CardTitle ─────────────────────────────────────────────────────────────────\nconst CardTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"font-display text-sm font-bold tracking-[0.02em] uppercase text-foreground\",\n className,\n )}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\n// ── CardDescription ───────────────────────────────────────────────────────────\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground leading-relaxed\", className)}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\n// ── CardBody ──────────────────────────────────────────────────────────────────\nconst CardBody = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-5\", className)} {...props} />\n));\nCardBody.displayName = \"CardBody\";\n\n// ── CardFooter ────────────────────────────────────────────────────────────────\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-3 px-5 py-4 border-t border-border\",\n className,\n )}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n\n// ── OperatorCard ──────────────────────────────────────────────────────────────\n\nexport interface OperatorCardProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string;\n faction?: string;\n rarity?: 1 | 2 | 3 | 4 | 5 | 6;\n imageSrc?: string;\n imageAlt?: string;\n selected?: boolean;\n}\n\nconst OperatorCard = React.forwardRef<HTMLDivElement, OperatorCardProps>(\n (\n { name, faction, rarity = 5, imageSrc, imageAlt, selected, className, ...props },\n ref,\n ) => (\n <div\n ref={ref}\n className={cn(\n \"relative bg-surface-1 border border-border transition-all duration-300 w-[120px] sm:w-[140px] shrink-0 cursor-pointer\",\n \"hover:-translate-y-1 hover:shadow-[0_16px_48px_rgba(0,0,0,0.5)] hover:border-primary/20\",\n selected && \"border-2 border-primary/40 bg-primary/[0.06]\",\n className,\n )}\n {...props}\n >\n {/* Portrait area 3:4 */}\n <div className=\"clip-corner-sm aspect-[3/4] bg-surface-2 overflow-hidden\">\n {imageSrc ? (\n <img\n src={imageSrc}\n alt={imageAlt ?? name}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"w-full h-full flex items-center justify-center\">\n <span className=\"text-primary/20 text-4xl\">◆</span>\n </div>\n )}\n </div>\n {/* Rarity */}\n <div className=\"px-2 pt-1.5 pb-0\">\n <span className=\"text-[10px] text-primary tracking-wider\">\n {\"◆\".repeat(rarity)}\n {\"◇\".repeat(6 - rarity)}\n </span>\n </div>\n {/* Name + Faction */}\n <div className=\"px-2 pb-2\">\n <p className=\"font-display text-[13px] font-semibold uppercase text-foreground leading-tight truncate\">\n {name}\n </p>\n {faction && (\n <p className=\"font-mono text-[10px] text-muted-foreground truncate\">\n {faction}\n </p>\n )}\n </div>\n </div>\n ),\n);\nOperatorCard.displayName = \"OperatorCard\";\n\n// ── LinkCard ──────────────────────────────────────────────────────────────────\n\nexport interface LinkCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n icon?: React.ReactNode;\n href?: string;\n external?: boolean;\n}\n\nconst LinkCard = React.forwardRef<HTMLDivElement, LinkCardProps>(\n ({ title, icon, href, external, className, onClick, ...props }, ref) => {\n const inner = (\n <div\n className={cn(\n \"relative bg-surface-1 border border-border flex items-center gap-3 p-3\",\n \"transition-all duration-200 cursor-pointer group\",\n \"hover:border-primary/40 hover:bg-primary/[0.04]\",\n className,\n )}\n {...props}\n >\n {icon && (\n <div className=\"w-10 h-10 flex items-center justify-center bg-surface-2 shrink-0 text-primary\">\n {icon}\n </div>\n )}\n <span className=\"font-display text-[13px] font-semibold uppercase text-foreground flex-1 truncate\">\n {title}\n </span>\n <span className=\"text-primary transition-transform duration-200 group-hover:translate-x-1 shrink-0\">\n →\n </span>\n </div>\n );\n if (href) {\n return (\n <a\n ref={ref as React.ForwardedRef<HTMLAnchorElement>}\n href={href}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n className=\"block\"\n >\n {inner}\n </a>\n );\n }\n return (\n <div ref={ref} onClick={onClick}>\n {inner}\n </div>\n );\n },\n);\nLinkCard.displayName = \"LinkCard\";\n\n// ── Exports ───────────────────────────────────────────────────────────────────\n\nexport {\n Card,\n cardVariants,\n CardHeader,\n CardMeta,\n CardTitle,\n CardDescription,\n CardBody,\n CardFooter,\n OperatorCard,\n LinkCard,\n};\n","import { type RefObject, useEffect } from \"react\";\n\nconst FOCUSABLE =\n 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\nexport function useFocusTrap(\n containerRef: RefObject<HTMLElement | null>,\n active = true,\n): void {\n useEffect(() => {\n if (!active || !containerRef.current) return;\n const container = containerRef.current;\n const getFocusable = () =>\n Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE));\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Tab\") return;\n const focusable = getFocusable();\n if (!focusable.length) return;\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n }\n };\n\n container.addEventListener(\"keydown\", handleKeyDown);\n return () => container.removeEventListener(\"keydown\", handleKeyDown);\n }, [containerRef, active]);\n}\n","import { useEffect } from \"react\";\n\ninterface ShortcutOptions {\n /** Match Meta key (⌘ on Mac) */\n meta?: boolean;\n /** Match Ctrl key (or ⌘ on Mac, cross-platform) */\n ctrl?: boolean;\n /** Match Shift key */\n shift?: boolean;\n /** Prevent default browser action */\n preventDefault?: boolean;\n}\n\nexport function useShortcut(\n key: string,\n handler: () => void,\n options: ShortcutOptions = {},\n): void {\n useEffect(() => {\n const { meta = false, ctrl = false, shift = false, preventDefault = true } = options;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (meta && !e.metaKey) return;\n if (ctrl && !(e.ctrlKey || e.metaKey)) return;\n if (shift && !e.shiftKey) return;\n if (e.key.toLowerCase() !== key.toLowerCase()) return;\n if (preventDefault) e.preventDefault();\n handler();\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [key, handler, options]);\n}\n","import { RefObject, useEffect, useRef, useState } from \"react\";\n\nexport interface UseInViewOptions {\n /** Intersection ratio threshold (0–1). Default: 0.1 */\n threshold?: number;\n /** Only trigger once (stays true after first intersection). Default: true */\n once?: boolean;\n}\n\n/**\n * Returns `true` when the referenced element enters the viewport.\n * Respects `prefers-reduced-motion` by returning `true` immediately when motion is reduced.\n *\n * @example\n * const ref = useRef(null);\n * const inView = useInView(ref, { threshold: 0.1, once: true });\n * return <div ref={ref} className={inView ? \"animate-fade-in-up\" : \"opacity-0\"} />;\n */\nexport function useInView(\n ref: RefObject<Element | null>,\n options: UseInViewOptions = {},\n): boolean {\n const { threshold = 0.1, once = true } = options;\n\n const [inView, setInView] = useState(() => {\n if (typeof window !== \"undefined\") {\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n }\n return false;\n });\n\n const inViewRef = useRef(inView);\n inViewRef.current = inView;\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n if (inViewRef.current && once) return;\n\n const el = ref.current;\n if (!el) return;\n\n const obs = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setInView(true);\n if (once) obs.disconnect();\n } else if (!once) {\n setInView(false);\n }\n },\n { threshold },\n );\n obs.observe(el);\n return () => obs.disconnect();\n }, [ref, threshold, once]);\n\n return inView;\n}\n","/**\n * Returns an array of CSS `animation-delay` strings for staggered child animations.\n *\n * @param count Number of items to stagger\n * @param delay Delay increment in ms between each item (default: 100)\n * @returns Array like [\"0ms\", \"100ms\", \"200ms\", ...]\n *\n * @example\n * const delays = useStagger(3, 150); // [\"0ms\", \"150ms\", \"300ms\"]\n * return items.map((item, i) => (\n * <div key={i} className=\"animate-fade-in-up\" style={{ animationDelay: delays[i] }}>\n * {item}\n * </div>\n * ));\n */\nexport function useStagger(count: number, delay = 100): string[] {\n return Array.from({ length: count }, (_, i) => `${i * delay}ms`);\n}\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n// ── Wrapper variants ──────────────────────────────────────────────────────────\nconst inputWrapperVariants = cva(\n \"relative flex items-center border transition-all duration-150 bg-surface-1\",\n {\n variants: {\n state: {\n default: [\n \"border-input\",\n \"hover:border-border-strong\",\n \"focus-within:border-primary\",\n \"focus-within:shadow-[0_0_0_3px_rgba(255,212,41,0.1)]\",\n ].join(\" \"),\n error: [\n \"border-ef-red\",\n \"focus-within:shadow-[0_0_0_3px_rgba(255,71,87,0.1)]\",\n ].join(\" \"),\n success: \"border-ef-green\",\n },\n size: {\n sm: \"h-8\",\n md: \"h-11\",\n lg: \"h-[52px]\",\n },\n },\n defaultVariants: {\n state: \"default\",\n size: \"md\",\n },\n },\n);\n\n// ── InputProps ────────────────────────────────────────────────────────────────\nexport interface InputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"size\"\n> {\n state?: \"default\" | \"error\" | \"success\";\n size?: \"sm\" | \"md\" | \"lg\";\n leftElement?: React.ReactNode;\n rightElement?: React.ReactNode;\n}\n\n// ── Input ──────────────────────────────────────────────────────────────────────\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n state = \"default\",\n size = \"md\",\n leftElement,\n rightElement,\n disabled,\n ...props\n },\n ref,\n ) => {\n const pl = leftElement ? \"pl-2\" : size === \"sm\" ? \"pl-2\" : \"pl-3\";\n const pr = rightElement ? \"pr-2\" : size === \"sm\" ? \"pr-2\" : \"pr-3\";\n\n return (\n <div\n className={cn(\n inputWrapperVariants({ state, size }),\n disabled &&\n \"opacity-40 cursor-not-allowed pointer-events-none bg-background\",\n className,\n )}\n >\n {leftElement && (\n <span className=\"pl-3 flex-shrink-0 text-muted-foreground flex items-center\">\n {leftElement}\n </span>\n )}\n <input\n ref={ref}\n disabled={disabled}\n className={cn(\n \"h-full flex-1 min-w-0 bg-transparent text-foreground text-sm font-mono\",\n \"placeholder:text-muted-foreground focus:outline-none\",\n pl,\n pr,\n )}\n {...props}\n />\n {rightElement && (\n <span className=\"pr-3 flex-shrink-0 text-muted-foreground flex items-center\">\n {rightElement}\n </span>\n )}\n </div>\n );\n },\n);\nInput.displayName = \"Input\";\n\n// ── Label ─────────────────────────────────────────────────────────────────────\n\nconst Label = React.forwardRef<\n HTMLLabelElement,\n React.LabelHTMLAttributes<HTMLLabelElement>\n>(({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={cn(\n \"font-display text-[11px] font-semibold uppercase tracking-widest text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nLabel.displayName = \"Label\";\n\n// ── HelperText ────────────────────────────────────────────────────────────────\n\nexport interface HelperTextProps extends React.HTMLAttributes<HTMLParagraphElement> {\n state?: \"default\" | \"error\" | \"success\";\n}\n\nconst HelperText = React.forwardRef<HTMLParagraphElement, HelperTextProps>(\n ({ className, state = \"default\", ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"text-[12px] leading-tight\",\n state === \"error\" && \"text-destructive\",\n state === \"success\" && \"text-ef-green\",\n state === \"default\" && \"text-muted-foreground\",\n className,\n )}\n {...props}\n />\n ),\n);\nHelperText.displayName = \"HelperText\";\n\n// ── Exports ───────────────────────────────────────────────────────────────────\n\nexport { Input, inputWrapperVariants, Label, HelperText };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\n// ── Textarea variants ─────────────────────────────────────────────────────────\n\nconst textareaVariants = cva(\n [\n \"w-full resize-y border bg-surface-1 text-foreground\",\n \"placeholder:text-muted-foreground font-mono text-sm\",\n \"transition-all duration-150 focus:outline-none\",\n \"min-h-[120px] px-3 py-2.5\",\n \"disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-background disabled:pointer-events-none\",\n ].join(\" \"),\n {\n variants: {\n state: {\n default: [\n \"border-input\",\n \"hover:border-border-strong\",\n \"focus:border-primary\",\n \"focus:shadow-[0_0_0_3px_rgba(255,212,41,0.1)]\",\n ].join(\" \"),\n error: [\n \"border-ef-red\",\n \"focus:shadow-[0_0_0_3px_rgba(255,71,87,0.1)]\",\n ].join(\" \"),\n success: \"border-ef-green\",\n },\n },\n defaultVariants: {\n state: \"default\",\n },\n },\n);\n\n// ── TextareaProps ─────────────────────────────────────────────────────────────\n\nexport interface TextareaProps\n extends\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {\n state?: \"default\" | \"error\" | \"success\";\n showCount?: boolean;\n}\n\n// ── Textarea ──────────────────────────────────────────────────────────────────\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n { className, state = \"default\", showCount, maxLength, onChange, ...rest },\n ref,\n ) => {\n const [count, setCount] = React.useState(() => {\n const initial = rest.value ?? rest.defaultValue ?? \"\";\n return String(initial).length;\n });\n\n React.useEffect(() => {\n if (rest.value !== undefined) {\n setCount(String(rest.value).length);\n }\n }, [rest.value]);\n\n const counterColorClass = (): string => {\n if (maxLength !== undefined && count > maxLength)\n return \"text-destructive\";\n if (maxLength !== undefined && count / maxLength >= 0.8)\n return \"text-ef-orange\";\n return \"text-muted-foreground\";\n };\n\n return (\n <div className=\"relative\">\n <textarea\n ref={ref}\n maxLength={maxLength}\n onChange={(e) => {\n setCount(e.target.value.length);\n onChange?.(e);\n }}\n className={cn(\n textareaVariants({ state }),\n showCount && \"pb-7\",\n className,\n )}\n {...rest}\n />\n {showCount && (\n <span\n className={cn(\n \"absolute bottom-2 right-3 font-mono text-[11px] pointer-events-none select-none\",\n counterColorClass(),\n )}\n >\n {maxLength !== undefined ? `${count}/${maxLength}` : count}\n </span>\n )}\n </div>\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\n// ── Exports ───────────────────────────────────────────────────────────────────\nexport { Textarea, textareaVariants };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface CheckboxProps extends React.ComponentPropsWithoutRef<\n typeof CheckboxPrimitive.Root\n> {\n label?: string;\n helperText?: string;\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, label, helperText, id, ...props }, ref) => {\n const generatedId = React.useId();\n const checkboxId = id ?? generatedId;\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center gap-3\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={checkboxId}\n className={cn(\n \"group peer h-[18px] w-[18px] shrink-0 border-2 border-input bg-transparent\",\n \"cursor-pointer transition-all duration-150\",\n \"hover:border-primary/60\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n \"data-[state=indeterminate]:bg-primary/50 data-[state=indeterminate]:border-primary\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center\">\n <span className=\"hidden group-data-[state=checked]:inline leading-none text-primary-foreground text-[10px] font-bold select-none\">\n ◆\n </span>\n <span className=\"hidden group-data-[state=indeterminate]:inline leading-none text-primary-foreground text-sm font-bold select-none\">\n −\n </span>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"text-sm text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-40 select-none leading-none\"\n >\n {label}\n </label>\n )}\n </div>\n {helperText && (\n <p className=\"text-[12px] text-muted-foreground pl-[30px]\">\n {helperText}\n </p>\n )}\n </div>\n );\n});\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { cn } from \"../../lib/utils\";\n\nexport type RadioGroupProps = React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Root\n>;\n\nexport interface RadioGroupItemProps extends React.ComponentPropsWithoutRef<\n typeof RadioGroupPrimitive.Item\n> {\n label?: string;\n helperText?: string;\n}\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n RadioGroupProps\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root\n ref={ref}\n className={cn(\"flex flex-col gap-3\", className)}\n {...props}\n />\n));\nRadioGroup.displayName = \"RadioGroup\";\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n RadioGroupItemProps\n>(({ className, label, helperText, id, ...props }, ref) => {\n const generatedId = React.useId();\n const itemId = id ?? generatedId;\n\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-3\">\n <RadioGroupPrimitive.Item\n ref={ref}\n id={itemId}\n className={cn(\n \"group peer cursor-pointer shrink-0 flex items-center justify-center\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n className,\n )}\n {...props}\n >\n <span className=\"text-[18px] leading-none select-none transition-colors duration-150 group-data-[state=unchecked]:inline group-data-[state=checked]:hidden text-muted-foreground/50 group-hover:text-muted-foreground group-data-[disabled]:pointer-events-none\">\n ◇\n </span>\n <span className=\"text-[18px] leading-none select-none transition-colors duration-150 group-data-[state=checked]:inline group-data-[state=unchecked]:hidden text-primary\">\n ◆\n </span>\n </RadioGroupPrimitive.Item>\n {label && (\n <label\n htmlFor={itemId}\n className=\"text-sm text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-40 select-none leading-none\"\n >\n {label}\n </label>\n )}\n </div>\n {helperText && (\n <p className=\"text-[12px] text-muted-foreground pl-[30px]\">\n {helperText}\n </p>\n )}\n </div>\n );\n});\nRadioGroupItem.displayName = \"RadioGroupItem\";\n\nexport { RadioGroup, RadioGroupItem };\n","import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<\n typeof SwitchPrimitive.Root\n> {\n label?: string;\n offLabel?: string;\n onLabel?: string;\n}\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(({ className, label, offLabel, onLabel, id, checked, defaultChecked, onCheckedChange, ...props }, ref) => {\n const generatedId = React.useId();\n const switchId = id ?? generatedId;\n\n const [isOn, setIsOn] = React.useState<boolean>(\n checked !== undefined ? checked : (defaultChecked ?? false),\n );\n const [spinKey, setSpinKey] = React.useState(0);\n\n React.useEffect(() => {\n if (checked !== undefined) setIsOn(checked);\n }, [checked]);\n\n const handleChange = (v: boolean) => {\n setIsOn(v);\n setSpinKey((k) => k + 1);\n onCheckedChange?.(v);\n };\n\n return (\n <div className=\"flex items-center gap-3\">\n {(offLabel || onLabel) && (\n <span className=\"text-[11px] font-mono uppercase tracking-widest text-muted-foreground select-none min-w-[32px] text-right\">\n {isOn ? onLabel : offLabel}\n </span>\n )}\n <SwitchPrimitive.Root\n ref={ref}\n id={switchId}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={handleChange}\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center\",\n \"border border-input bg-surface-3\",\n \"transition-colors duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n \"data-[state=checked]:bg-primary data-[state=checked]:border-primary\",\n className,\n )}\n {...props}\n >\n {/* Outer thumb handles translateX sliding */}\n <SwitchPrimitive.Thumb\n className={cn(\n \"pointer-events-none flex items-center justify-center\",\n \"h-4 w-4 transition-transform duration-200\",\n \"data-[state=checked]:translate-x-6 data-[state=unchecked]:translate-x-1\",\n )}\n >\n {/* Inner diamond spins on each toggle via key remount */}\n <span\n key={spinKey}\n aria-hidden=\"true\"\n className={cn(\n \"block h-[14px] w-[14px]\",\n spinKey > 0 && \"animate-switch-spin\",\n isOn ? \"bg-primary-foreground\" : \"bg-foreground/80\",\n )}\n style={{ clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\" }}\n />\n </SwitchPrimitive.Thumb>\n </SwitchPrimitive.Root>\n {label && (\n <label\n htmlFor={switchId}\n className=\"text-sm text-foreground cursor-pointer peer-disabled:cursor-not-allowed peer-disabled:opacity-40 select-none\"\n >\n {label}\n </label>\n )}\n </div>\n );\n});\n\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root, Group, Value ─────────────────────────────────────────────────── */\n\nconst Select = SelectPrimitive.Root;\nSelect.displayName = \"Select\";\n\nconst SelectGroup = SelectPrimitive.Group;\nSelectGroup.displayName = \"SelectGroup\";\n\nconst SelectValue = SelectPrimitive.Value;\nSelectValue.displayName = \"SelectValue\";\n\n/* ── Trigger ─────────────────────────────────────────────────────────────── */\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"relative flex h-11 w-full items-center justify-between\",\n \"border border-input bg-surface-1 px-3\",\n \"font-mono text-sm text-foreground\",\n \"transition-all duration-150\",\n \"hover:border-border-strong\",\n \"focus:outline-none focus:border-primary focus:shadow-[0_0_0_3px_rgba(255,212,41,0.1)]\",\n \"disabled:cursor-not-allowed disabled:opacity-40 disabled:pointer-events-none\",\n \"data-[placeholder]:text-muted-foreground\",\n \"[&>span]:line-clamp-1\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <span className=\"shrink-0 text-muted-foreground text-xs ml-2 select-none\">\n ▾\n </span>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = \"SelectTrigger\";\n\n/* ── ScrollUpButton ─────────────────────────────────────────────────────── */\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 text-muted-foreground text-xs\",\n className,\n )}\n {...props}\n >\n ▴\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = \"SelectScrollUpButton\";\n\n/* ── ScrollDownButton ────────────────────────────────────────────────────── */\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1 text-muted-foreground text-xs\",\n className,\n )}\n {...props}\n >\n ▾\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = \"SelectScrollDownButton\";\n\n/* ── Content (dropdown panel) ────────────────────────────────────────────── */\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-[var(--z-overlay,50)] min-w-[8rem] overflow-hidden\",\n \"bg-surface-2 border border-border shadow-lg\",\n \"data-[state=open]:animate-fade-in-up\",\n \"data-[state=closed]:animate-fade-in-up\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\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)]\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = \"SelectContent\";\n\n/* ── Label ───────────────────────────────────────────────────────────────── */\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"font-mono text-[10px] uppercase tracking-widest text-muted-foreground/60 px-4 py-1.5\",\n className,\n )}\n {...props}\n />\n));\nSelectLabel.displayName = \"SelectLabel\";\n\n/* ── Item ────────────────────────────────────────────────────────────────── */\n\nexport interface SelectItemProps extends React.ComponentPropsWithoutRef<\n typeof SelectPrimitive.Item\n> {\n danger?: boolean;\n}\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n SelectItemProps\n>(({ className, children, danger, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-pointer select-none items-center px-4 py-2 text-sm text-muted-foreground\",\n \"outline-none transition-colors duration-100\",\n \"focus:bg-primary/6 focus:text-primary\",\n \"data-[state=checked]:text-primary data-[state=checked]:font-medium\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-40\",\n danger\n ? \"hover:bg-destructive/6 hover:text-destructive focus:bg-destructive/6 focus:text-destructive\"\n : \"hover:bg-primary/6 hover:text-primary\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = \"SelectItem\";\n\n/* ── Separator ───────────────────────────────────────────────────────────── */\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"my-1 h-px bg-border\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = \"SelectSeparator\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Size variants ───────────────────────────────────────────────────────── */\n\nconst avatarVariants = cva(\n \"relative inline-flex shrink-0 overflow-hidden clip-corner-sm\",\n {\n variants: {\n size: {\n xs: \"h-6 w-6 text-[10px]\",\n sm: \"h-8 w-8 text-xs\",\n md: \"h-10 w-10 text-sm\",\n lg: \"h-14 w-14 text-lg\",\n xl: \"h-20 w-20 text-2xl\",\n \"2xl\": \"h-[120px] w-[120px] text-4xl\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/* ── Status dot colors ───────────────────────────────────────────────────── */\n\nconst statusColors: Record<string, string> = {\n online: \"text-ef-green\",\n offline: \"text-muted-foreground/50\",\n busy: \"text-destructive\",\n away: \"text-ef-orange\",\n};\n\n/* ── Avatar (root) ───────────────────────────────────────────────────────── */\n\nexport interface AvatarProps\n extends\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>,\n VariantProps<typeof avatarVariants> {\n status?: \"online\" | \"offline\" | \"busy\" | \"away\";\n}\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n AvatarProps\n>(({ className, size, status, ...props }, ref) => (\n <div className=\"relative inline-flex shrink-0 transition-all duration-200 hover:drop-shadow-[0_0_6px_rgba(255,212,41,0.5)]\">\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(avatarVariants({ size }), className)}\n {...props}\n />\n {status && (\n <span\n className={cn(\n \"absolute -bottom-0.5 -right-0.5 text-[10px] leading-none select-none\",\n statusColors[status],\n )}\n aria-label={status}\n >\n ◆\n </span>\n )}\n </div>\n));\nAvatar.displayName = \"Avatar\";\n\n/* ── AvatarImage ─────────────────────────────────────────────────────────── */\n\nexport type AvatarImageProps = React.ComponentPropsWithoutRef<\n typeof AvatarPrimitive.Image\n>;\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n AvatarImageProps\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full object-cover\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = \"AvatarImage\";\n\n/* ── AvatarFallback ──────────────────────────────────────────────────────── */\n\nexport type AvatarFallbackProps = React.ComponentPropsWithoutRef<\n typeof AvatarPrimitive.Fallback\n>;\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n AvatarFallbackProps\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center\",\n \"bg-surface-2 font-display text-muted-foreground uppercase text-center\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = \"AvatarFallback\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Avatar, AvatarImage, AvatarFallback, avatarVariants };\n","import * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Track variants (height / size) ─────────────────────────────────────── */\n\nconst progressTrackVariants = cva(\n \"relative w-full overflow-hidden bg-surface-3\",\n {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-1.5\",\n lg: \"h-2.5\",\n },\n },\n defaultVariants: { size: \"sm\" },\n },\n);\n\n/* ── Fill color variants ─────────────────────────────────────────────────── */\n\nconst progressFillVariants = cva(\n \"h-full w-full flex-1 transition-all duration-500 ease-smooth origin-left\",\n {\n variants: {\n variant: {\n default: \"bg-primary\",\n success: \"bg-ef-green\",\n danger: \"bg-destructive\",\n info: \"bg-ef-blue\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface ProgressProps\n extends\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>,\n VariantProps<typeof progressTrackVariants>,\n VariantProps<typeof progressFillVariants> {\n value?: number;\n showLabel?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({ className, value, showLabel, size, variant, ...props }, ref) => {\n const isIndeterminate = value === undefined || value === null;\n const clampedValue = isIndeterminate\n ? undefined\n : Math.min(100, Math.max(0, value));\n\n return (\n <div className=\"w-full space-y-1\">\n {showLabel && !isIndeterminate && (\n <div className=\"flex justify-end\">\n <span className=\"font-mono text-[11px] text-muted-foreground\">\n {clampedValue}%\n </span>\n </div>\n )}\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(progressTrackVariants({ size }), className)}\n value={clampedValue}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n isIndeterminate\n ? \"h-full animate-skeleton\"\n : progressFillVariants({ variant }),\n )}\n style={\n isIndeterminate\n ? undefined\n : { transform: `translateX(-${100 - (clampedValue ?? 0)}%)` }\n }\n />\n </ProgressPrimitive.Root>\n </div>\n );\n});\n\nProgress.displayName = \"Progress\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Progress, progressTrackVariants, progressFillVariants };\n","import * as React from \"react\";\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root ────────────────────────────────────────────────────────────────── */\n\nconst Accordion = AccordionPrimitive.Root;\nAccordion.displayName = \"Accordion\";\n\n/* ── Item ────────────────────────────────────────────────────────────────── */\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn(\"border border-border\", className)}\n {...props}\n />\n));\nAccordionItem.displayName = \"AccordionItem\";\n\n/* ── Trigger ─────────────────────────────────────────────────────────────── */\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n \"group flex flex-1 items-center justify-between px-4 py-3\",\n \"font-display text-[13px] font-semibold uppercase tracking-wider text-foreground\",\n \"transition-all duration-200\",\n \"hover:text-primary hover:bg-surface-hover\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n className,\n )}\n {...props}\n >\n {children}\n <span\n className={cn(\n \"font-mono text-base leading-none select-none shrink-0 ml-2\",\n \"text-primary transition-transform duration-200\",\n \"group-data-[state=open]:rotate-45\",\n )}\n aria-hidden\n >\n +\n </span>\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = \"AccordionTrigger\";\n\n/* ── Content ─────────────────────────────────────────────────────────────── */\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"overflow-hidden data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\"\n {...props}\n >\n <div className={cn(\"px-4 pb-4 pt-1 text-sm text-muted-foreground\", className)}>\n {children}\n </div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = \"AccordionContent\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root ────────────────────────────────────────────────────────────────── */\n\nconst Tabs = TabsPrimitive.Root;\nTabs.displayName = \"Tabs\";\n\n/* ── List variants ───────────────────────────────────────────────────────── */\n\nconst tabsListVariants = cva(\"flex items-center flex-wrap\", {\n variants: {\n variant: {\n underline: \"border-b border-border gap-0 w-full\",\n pill: \"gap-1 bg-surface-1 p-1 w-fit\",\n bordered: \"border border-border gap-0 w-full\",\n },\n },\n defaultVariants: { variant: \"underline\" },\n});\n\nexport interface TabsListProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>,\n VariantProps<typeof tabsListVariants> {}\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n TabsListProps\n>(({ className, variant, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n));\nTabsList.displayName = \"TabsList\";\n\n/* ── Trigger variants ────────────────────────────────────────────────────── */\n\nconst tabsTriggerVariants = cva(\n [\n \"font-display text-[13px] font-semibold uppercase tracking-wider\",\n \"transition-all duration-150 cursor-pointer\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset\",\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n ],\n {\n variants: {\n variant: {\n underline: [\n \"px-4 py-2.5 text-muted-foreground border-b-2 border-transparent -mb-px\",\n \"hover:text-foreground\",\n \"data-[state=active]:text-primary data-[state=active]:border-b-primary\",\n ],\n pill: [\n \"px-4 py-1.5 text-muted-foreground\",\n \"hover:text-foreground\",\n \"data-[state=active]:bg-surface-3 data-[state=active]:text-primary\",\n ],\n bordered: [\n \"px-4 py-2.5 text-muted-foreground border-r border-border last:border-r-0\",\n \"hover:text-foreground hover:bg-surface-hover\",\n \"data-[state=active]:text-primary data-[state=active]:bg-surface-3\",\n ],\n },\n },\n defaultVariants: { variant: \"underline\" },\n },\n);\n\nexport interface TabsTriggerProps\n extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>,\n VariantProps<typeof tabsTriggerVariants> {}\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(({ className, variant, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(tabsTriggerVariants({ variant }), className)}\n {...props}\n />\n));\nTabsTrigger.displayName = \"TabsTrigger\";\n\n/* ── Content ─────────────────────────────────────────────────────────────── */\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-4 text-sm text-muted-foreground\",\n \"animate-in fade-in-0 duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n className,\n )}\n {...props}\n />\n));\nTabsContent.displayName = \"TabsContent\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n tabsListVariants,\n tabsTriggerVariants,\n};\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root, Trigger, Anchor ───────────────────────────────────────────────── */\n\nconst Popover = PopoverPrimitive.Root;\nPopover.displayName = \"Popover\";\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\nPopoverAnchor.displayName = \"PopoverAnchor\";\n\n/* ── Content ─────────────────────────────────────────────────────────────── */\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 6, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-[100] min-w-[200px]\",\n \"bg-surface-2 border border-border shadow-lg\",\n \"p-4\",\n \"data-[state=open]:animate-fade-in-up\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n \"focus:outline-none\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = \"PopoverContent\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Root, Trigger, Portal, Close ────────────────────────────────────────── */\n\nconst Dialog = DialogPrimitive.Root;\nDialog.displayName = \"Dialog\";\n\nconst DialogTrigger = DialogPrimitive.Trigger;\nDialogTrigger.displayName = \"DialogTrigger\";\n\nconst DialogPortal = DialogPrimitive.Portal;\nDialogPortal.displayName = \"DialogPortal\";\n\nconst DialogClose = DialogPrimitive.Close;\nDialogClose.displayName = \"DialogClose\";\n\n/* ── Overlay ─────────────────────────────────────────────────────────────── */\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-modal bg-black/75 backdrop-blur-[4px]\",\n \"data-[state=open]:animate-fade-in\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = \"DialogOverlay\";\n\n/* ── Content size variants ───────────────────────────────────────────────── */\n\nconst dialogContentVariants = cva(\n [\n \"fixed left-[50%] top-[50%] z-modal\",\n \"bg-surface-3 border border-border shadow-xl\",\n \"flex flex-col max-h-[90vh]\",\n \"data-[state=open]:animate-dialog-in\",\n \"focus:outline-none\",\n ],\n {\n variants: {\n size: {\n sm: \"w-full max-w-[400px]\",\n md: \"w-full max-w-[540px]\",\n lg: \"w-full max-w-[720px]\",\n xl: \"w-full max-w-[960px]\",\n fullscreen: \"w-screen h-screen max-w-none\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nexport interface DialogContentProps\n extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>,\n VariantProps<typeof dialogContentVariants> {}\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(({ className, size, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(dialogContentVariants({ size }), className)}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 text-muted-foreground hover:text-foreground transition-colors focus:outline-none\">\n <span className=\"font-mono text-sm\" aria-hidden=\"true\">\n ✕\n </span>\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = \"DialogContent\";\n\n/* ── Header ──────────────────────────────────────────────────────────────── */\n\nfunction DialogHeader({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"flex shrink-0 items-center justify-between border-b border-border px-6 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\nDialogHeader.displayName = \"DialogHeader\";\n\n/* ── Footer ──────────────────────────────────────────────────────────────── */\n\nfunction DialogFooter({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"flex shrink-0 items-center justify-end gap-3 border-t border-border px-6 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\nDialogFooter.displayName = \"DialogFooter\";\n\n/* ── Title ───────────────────────────────────────────────────────────────── */\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"font-display text-base font-bold uppercase tracking-wider text-foreground\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = \"DialogTitle\";\n\n/* ── Description ─────────────────────────────────────────────────────────── */\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"flex-1 overflow-y-auto px-6 py-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = \"DialogDescription\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n DialogClose,\n dialogContentVariants,\n};\n","import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Variants ────────────────────────────────────────────────────────────── */\n\nconst separatorVariants = cva(\"shrink-0\", {\n variants: {\n variant: {\n default: \"bg-border\",\n subtle: \"bg-border\",\n strong: \"bg-border-strong\",\n glow: \"bg-gradient-to-r from-transparent via-primary/40 to-transparent\",\n accent: \"bg-primary/30\",\n },\n orientation: {\n horizontal: \"h-px w-full\",\n vertical: \"w-px h-full\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n orientation: \"horizontal\",\n },\n});\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface SeparatorProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>,\n \"orientation\"\n >,\n VariantProps<typeof separatorVariants> {}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n SeparatorProps\n>(({ className, orientation = \"horizontal\", variant, decorative = true, ...props }, ref) => {\n const resolvedOrientation = orientation ?? \"horizontal\";\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={resolvedOrientation}\n className={cn(\n separatorVariants({ variant, orientation: resolvedOrientation }),\n className,\n )}\n {...props}\n />\n );\n});\nSeparator.displayName = \"Separator\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Separator, separatorVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── SkeletonLine ─────────────────────────────────────────────────────────── */\n\nconst skeletonLineVariants = cva(\"animate-skeleton rounded-none\", {\n variants: {\n width: {\n full: \"w-full\",\n \"3/4\": \"w-3/4\",\n \"1/2\": \"w-1/2\",\n \"1/3\": \"w-1/3\",\n \"1/4\": \"w-1/4\",\n },\n height: {\n xs: \"h-2\",\n sm: \"h-3\",\n md: \"h-4\",\n lg: \"h-6\",\n },\n },\n defaultVariants: { width: \"full\", height: \"md\" },\n});\n\nexport interface SkeletonLineProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof skeletonLineVariants> {}\n\nconst SkeletonLine = React.forwardRef<HTMLDivElement, SkeletonLineProps>(\n ({ className, width, height, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(skeletonLineVariants({ width, height }), className)}\n aria-hidden=\"true\"\n {...props}\n />\n ),\n);\nSkeletonLine.displayName = \"SkeletonLine\";\n\n/* ── SkeletonText ────────────────────────────────────────────────────────── */\n\nexport interface SkeletonTextProps extends React.HTMLAttributes<HTMLDivElement> {\n lines?: number;\n}\n\nconst SkeletonText = React.forwardRef<HTMLDivElement, SkeletonTextProps>(\n ({ lines = 3, className, ...props }, ref) => {\n const lineWidths: Array<\n VariantProps<typeof skeletonLineVariants>[\"width\"]\n > = [\"full\", \"3/4\", \"full\", \"1/2\", \"3/4\"];\n\n return (\n <div\n ref={ref}\n className={cn(\"space-y-2\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n {Array.from({ length: lines }).map((_, i) => (\n <SkeletonLine\n key={i}\n width={lineWidths[i % lineWidths.length]}\n height=\"sm\"\n />\n ))}\n </div>\n );\n },\n);\nSkeletonText.displayName = \"SkeletonText\";\n\n/* ── SkeletonAvatar ──────────────────────────────────────────────────────── */\n\nconst skeletonAvatarSizes = {\n xs: \"w-6 h-6\",\n sm: \"w-8 h-8\",\n md: \"w-10 h-10\",\n lg: \"w-14 h-14\",\n xl: \"w-20 h-20\",\n};\n\nexport interface SkeletonAvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: keyof typeof skeletonAvatarSizes;\n}\n\nconst SkeletonAvatar = React.forwardRef<HTMLDivElement, SkeletonAvatarProps>(\n ({ size = \"md\", className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"animate-skeleton clip-corner-sm shrink-0\",\n skeletonAvatarSizes[size],\n className,\n )}\n aria-hidden=\"true\"\n {...props}\n />\n ),\n);\nSkeletonAvatar.displayName = \"SkeletonAvatar\";\n\n/* ── SkeletonCard ────────────────────────────────────────────────────────── */\n\nexport interface SkeletonCardProps extends React.HTMLAttributes<HTMLDivElement> {\n showAvatar?: boolean;\n lines?: number;\n}\n\nconst SkeletonCard = React.forwardRef<HTMLDivElement, SkeletonCardProps>(\n ({ showAvatar = false, lines = 3, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"border border-border bg-surface-1 p-4 space-y-3\",\n className,\n )}\n aria-hidden=\"true\"\n {...props}\n >\n {/* Header row */}\n <div className=\"flex items-center gap-3\">\n {showAvatar && <SkeletonAvatar size=\"md\" />}\n <div className=\"flex-1 space-y-2\">\n <SkeletonLine width=\"3/4\" height=\"md\" />\n <SkeletonLine width=\"1/2\" height=\"sm\" />\n </div>\n </div>\n\n {/* Body lines */}\n <SkeletonText lines={lines} />\n\n {/* Footer strip */}\n <SkeletonLine width=\"1/3\" height=\"xs\" />\n </div>\n ),\n);\nSkeletonCard.displayName = \"SkeletonCard\";\n\n/* ── SkeletonImage ───────────────────────────────────────────────────────── */\n\nexport interface SkeletonImageProps extends React.HTMLAttributes<HTMLDivElement> {\n aspectRatio?: \"video\" | \"square\" | \"portrait\";\n}\n\nconst ASPECT_RATIOS = {\n video: \"aspect-video\",\n square: \"aspect-square\",\n portrait: \"aspect-[3/4]\",\n};\n\nconst SkeletonImage = React.forwardRef<HTMLDivElement, SkeletonImageProps>(\n ({ aspectRatio = \"video\", className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"animate-skeleton w-full\",\n ASPECT_RATIOS[aspectRatio],\n className,\n )}\n aria-hidden=\"true\"\n {...props}\n />\n ),\n);\nSkeletonImage.displayName = \"SkeletonImage\";\n\n/* ── SkeletonTableRow ───────────────────────────────────────────────────── */\n\nexport interface SkeletonTableRowProps\n extends React.HTMLAttributes<HTMLDivElement> {\n columns?: number;\n}\n\nconst SkeletonTableRow = React.forwardRef<HTMLDivElement, SkeletonTableRowProps>(\n ({ columns = 4, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-4 py-3\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n {Array.from({ length: columns }).map((_, i) => (\n <SkeletonLine\n key={i}\n width={i === 0 ? \"1/4\" : \"full\"}\n height=\"sm\"\n className=\"flex-1\"\n />\n ))}\n </div>\n ),\n);\nSkeletonTableRow.displayName = \"SkeletonTableRow\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n SkeletonLine,\n SkeletonText,\n SkeletonAvatar,\n SkeletonCard,\n SkeletonImage,\n SkeletonTableRow,\n skeletonLineVariants,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Preset variant copy ─────────────────────────────────────────────────── */\n\nconst PRESET_COPY: Record<string, { title: string; description: string }> = {\n search: {\n title: \"NO RESULTS FOUND\",\n description: \"Try adjusting your search query.\",\n },\n \"empty-list\": {\n title: \"NO ITEMS YET\",\n description: \"Add your first item to get started.\",\n },\n \"no-notifications\": {\n title: \"NO NOTIFICATIONS\",\n description: \"You're all caught up. Check back later.\",\n },\n \"error-loading\": {\n title: \"FAILED TO LOAD\",\n description: \"An error occurred. Please try again.\",\n },\n \"no-permission\": {\n title: \"ACCESS RESTRICTED\",\n description: \"You don't have permission to view this.\",\n },\n \"empty-filter\": {\n title: \"NO MATCHING RESULTS\",\n description: \"Try adjusting or clearing your filters.\",\n },\n \"inbox-zero\": {\n title: \"INBOX ZERO\",\n description: \"All messages have been processed.\",\n },\n \"no-connection\": {\n title: \"NO CONNECTION\",\n description: \"Check your network and try again.\",\n },\n /* Legacy aliases for backward compatibility */\n error: {\n title: \"FAILED TO LOAD\",\n description: \"An error occurred. Please try again.\",\n },\n permission: {\n title: \"ACCESS RESTRICTED\",\n description: \"You don't have permission to view this.\",\n },\n empty: {\n title: \"NO ITEMS YET\",\n description: \"Add your first item to get started.\",\n },\n default: { title: \"\", description: \"\" },\n};\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst emptyStateVariants = cva(\n \"flex flex-col items-center justify-center text-center py-16 px-8\",\n {\n variants: {\n size: {\n sm: \"py-8 px-4\",\n md: \"py-16 px-8\",\n lg: \"py-24 px-12\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface EmptyStateProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof emptyStateVariants> {\n icon?: React.ReactNode;\n title?: string;\n description?: string;\n action?: React.ReactNode;\n variant?:\n | \"default\"\n | \"search\"\n | \"empty-list\"\n | \"no-notifications\"\n | \"error-loading\"\n | \"no-permission\"\n | \"empty-filter\"\n | \"inbox-zero\"\n | \"no-connection\"\n /* Legacy aliases */\n | \"error\"\n | \"permission\"\n | \"empty\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n (\n {\n icon,\n title,\n description,\n action,\n variant = \"default\",\n size,\n className,\n ...props\n },\n ref,\n ) => {\n const preset = PRESET_COPY[variant] ?? PRESET_COPY.default;\n const resolvedTitle = title ?? preset.title;\n const resolvedDesc = description ?? preset.description;\n\n return (\n <div\n ref={ref}\n className={cn(emptyStateVariants({ size }), className)}\n {...props}\n >\n {icon && (\n <div className=\"text-muted-foreground/30 mb-6 [&>svg]:w-12 [&>svg]:h-12\">\n {icon}\n </div>\n )}\n\n {resolvedTitle && (\n <h3 className=\"font-display text-[18px] font-bold uppercase tracking-wider text-foreground mb-3\">\n {resolvedTitle}\n </h3>\n )}\n\n {resolvedDesc && (\n <p className=\"text-[14px] text-muted-foreground max-w-[360px] leading-relaxed\">\n {resolvedDesc}\n </p>\n )}\n\n {action && <div className=\"mt-6\">{action}</div>}\n </div>\n );\n },\n);\nEmptyState.displayName = \"EmptyState\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { EmptyState, emptyStateVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst alertVariants = cva(\n \"relative flex items-start gap-3 p-4 border-l-[3px] transition-all\",\n {\n variants: {\n variant: {\n info: \"bg-ef-blue/[0.08] border-l-ef-blue border border-ef-blue/20\",\n success:\n \"bg-ef-green/[0.08] border-l-ef-green border border-ef-green/20\",\n warning:\n \"bg-ef-orange/[0.08] border-l-ef-orange border border-ef-orange/20\",\n error:\n \"bg-destructive/[0.08] border-l-destructive border border-destructive/20\",\n },\n },\n defaultVariants: { variant: \"info\" },\n },\n);\n\n/* ── Default icon + icon colors per variant ───────────────────────────────── */\n\nconst VARIANT_CONFIG = {\n info: { icon: \"◆\", color: \"text-ef-blue\" },\n success: { icon: \"✓\", color: \"text-ef-green\" },\n warning: { icon: \"⚠\", color: \"text-ef-orange\" },\n error: { icon: \"✕\", color: \"text-destructive\" },\n} as const;\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface AlertProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alertVariants> {\n variant?: \"info\" | \"success\" | \"warning\" | \"error\";\n title?: string;\n dismissible?: boolean;\n onDismiss?: () => void;\n icon?: React.ReactNode;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n variant = \"info\",\n title,\n dismissible = false,\n onDismiss,\n icon,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const cfg = VARIANT_CONFIG[variant];\n const showIcon = icon !== null;\n const iconNode =\n icon !== null && icon !== undefined ? (\n icon\n ) : (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"font-mono text-[14px] font-bold leading-none\",\n cfg.color,\n )}\n >\n {cfg.icon}\n </span>\n );\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n aria-live={variant === \"error\" ? \"assertive\" : \"polite\"}\n className={cn(alertVariants({ variant }), className)}\n {...props}\n >\n {/* Icon */}\n {showIcon && <div className=\"shrink-0 mt-0.5\">{iconNode}</div>}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"font-display text-[13px] font-bold uppercase tracking-wider text-foreground mb-1\">\n {title}\n </p>\n )}\n {children && (\n <div className=\"text-[13px] text-foreground leading-relaxed\">\n {children}\n </div>\n )}\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={onDismiss}\n className=\"shrink-0 opacity-50 hover:opacity-100 text-foreground transition-opacity font-mono text-[12px] leading-none\"\n >\n ✕\n </button>\n )}\n </div>\n );\n },\n);\nAlert.displayName = \"Alert\";\n\n/* ── TopBanner ──────────────────────────────────────────────────────────── */\n\nexport interface TopBannerProps extends React.HTMLAttributes<HTMLDivElement> {\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nconst TopBanner = React.forwardRef<HTMLDivElement, TopBannerProps>(\n ({ dismissible = true, onDismiss, children, className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"banner\"\n className={cn(\n \"sticky top-0 z-header bg-primary text-primary-foreground\",\n \"flex items-center justify-center gap-3 px-6 py-2\",\n \"font-display text-xs font-semibold uppercase tracking-wider text-center\",\n className,\n )}\n {...props}\n >\n <span className=\"flex-1 text-center\">{children}</span>\n {dismissible && (\n <button\n type=\"button\"\n aria-label=\"Dismiss banner\"\n onClick={onDismiss}\n className=\"shrink-0 opacity-70 hover:opacity-100 transition-opacity font-mono text-sm leading-none\"\n >\n ✕\n </button>\n )}\n </div>\n ),\n);\nTopBanner.displayName = \"TopBanner\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Alert, alertVariants, TopBanner };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst timelineItemVariants = cva(\"\", {\n variants: {\n status: {\n complete: \"text-primary\",\n current: \"text-primary\",\n upcoming: \"text-muted-foreground/40\",\n },\n },\n defaultVariants: { status: \"upcoming\" },\n});\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface TimelineItemProps extends React.HTMLAttributes<HTMLDivElement> {\n date?: string;\n title: string;\n description?: string;\n status?: \"complete\" | \"current\" | \"upcoming\";\n}\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n items?: TimelineItemProps[];\n}\n\n/* ── TimelineItem ─────────────────────────────────────────────────────────── */\n\nconst TimelineItem = React.forwardRef<HTMLDivElement, TimelineItemProps>(\n ({ date, title, description, status = \"upcoming\", children, className, ...props }, ref) => {\n const isActive = status === \"complete\" || status === \"current\";\n const marker = isActive ? \"◆\" : \"◇\";\n\n return (\n <div\n ref={ref}\n role=\"listitem\"\n aria-current={status === \"current\" ? \"true\" : undefined}\n className={cn(\"relative pb-8 last:pb-0\", className)}\n {...props}\n >\n {/* Timeline node */}\n <span\n className={cn(\n \"absolute -left-[15px] top-0.5 font-mono text-[11px] leading-none select-none\",\n \"transition-all duration-150 hover:scale-125\",\n timelineItemVariants({ status }),\n status === \"current\" && \"drop-shadow-[0_0_6px_rgba(255,212,41,0.6)]\",\n (status === \"current\" || status === \"complete\") && \"hover:drop-shadow-[0_0_8px_rgba(255,212,41,0.8)]\",\n )}\n aria-hidden=\"true\"\n >\n {marker}\n </span>\n\n {/* Date */}\n {date && (\n <p className=\"font-display text-[11px] text-muted-foreground/60 mb-1\">{date}</p>\n )}\n\n {/* Title */}\n <p className=\"font-display text-[14px] font-semibold uppercase text-foreground\">\n {title}\n </p>\n\n {/* Description */}\n {description && (\n <p className=\"text-[13px] text-muted-foreground mt-1\">{description}</p>\n )}\n\n {/* Slot children */}\n {children}\n </div>\n );\n },\n);\nTimelineItem.displayName = \"TimelineItem\";\n\n/* ── Timeline ────────────────────────────────────────────────────────────── */\n\nconst Timeline = React.forwardRef<HTMLDivElement, TimelineProps>(\n ({ items, children, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"list\"\n className={cn(\n \"relative pl-6 space-y-0\",\n \"before:absolute before:left-[9px] before:top-2 before:bottom-2 before:w-px before:bg-border\",\n className,\n )}\n {...props}\n >\n {items\n ? items.map((item, i) => {\n const { date, title, description, status, children: itemChildren, className: itemCn, ...rest } = item;\n return (\n <TimelineItem\n key={i}\n date={date}\n title={title}\n description={description}\n status={status}\n className={itemCn}\n {...rest}\n >\n {itemChildren}\n </TimelineItem>\n );\n })\n : children}\n </div>\n );\n },\n);\nTimeline.displayName = \"Timeline\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Timeline, TimelineItem, timelineItemVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface StepItem {\n label: string;\n description?: string;\n}\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n steps: StepItem[];\n currentStep: number;\n orientation?: \"horizontal\" | \"vertical\";\n}\n\n/* ── Helpers ─────────────────────────────────────────────────────────────── */\n\nfunction getStepState(\n index: number,\n currentStep: number,\n): \"complete\" | \"current\" | \"upcoming\" {\n if (index < currentStep) return \"complete\";\n if (index === currentStep) return \"current\";\n return \"upcoming\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Stepper = React.forwardRef<HTMLDivElement, StepperProps>(\n (\n { steps, currentStep, orientation = \"horizontal\", className, ...props },\n ref,\n ) => {\n if (orientation === \"vertical\") {\n return (\n <div\n ref={ref}\n role=\"list\"\n aria-label=\"Progress steps\"\n className={cn(\"flex flex-col gap-0\", className)}\n {...props}\n >\n {steps.map((step, i) => {\n const state = getStepState(i, currentStep);\n const isComplete = state === \"complete\";\n const isCurrent = state === \"current\";\n const isLast = i === steps.length - 1;\n const marker = isComplete || isCurrent ? \"◆\" : \"◇\";\n const stateLabel = isComplete\n ? \"completed\"\n : isCurrent\n ? \"current\"\n : \"upcoming\";\n\n return (\n <div\n key={i}\n role=\"listitem\"\n aria-label={`Step ${i + 1} of ${steps.length}: ${step.label}, ${stateLabel}`}\n aria-current={isCurrent ? \"step\" : undefined}\n className=\"flex items-start gap-3 relative\"\n >\n {/* Node column */}\n <div className=\"flex flex-col items-center flex-shrink-0\">\n <span\n className={cn(\n \"font-mono text-[13px] leading-none\",\n isComplete && \"text-primary\",\n isCurrent &&\n \"text-primary drop-shadow-[0_0_6px_rgba(255,212,41,0.6)]\",\n !isComplete && !isCurrent && \"text-muted-foreground/40\",\n )}\n aria-hidden=\"true\"\n >\n {marker}\n </span>\n {!isLast && (\n <div\n className={cn(\n \"flex-1 w-px min-h-6 mt-1\",\n isComplete ? \"bg-primary\" : \"bg-border\",\n )}\n />\n )}\n </div>\n\n {/* Content */}\n <div className=\"pb-6 last:pb-0\">\n <p\n className={cn(\n \"font-display text-[11px] uppercase tracking-wider mt-1\",\n isCurrent && \"text-foreground font-semibold\",\n isComplete && \"text-primary\",\n !isComplete && !isCurrent && \"text-muted-foreground/60\",\n )}\n >\n {step.label}\n </p>\n {step.description && (\n <p className=\"text-[12px] text-muted-foreground/60 mt-0.5\">\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className=\"overflow-x-auto\">\n <div\n ref={ref}\n role=\"list\"\n aria-label=\"Progress steps\"\n className={cn(\"flex items-start min-w-full\", className)}\n {...props}\n >\n {steps.map((step, i) => {\n const state = getStepState(i, currentStep);\n const isComplete = state === \"complete\";\n const isCurrent = state === \"current\";\n const isLast = i === steps.length - 1;\n const marker = isComplete || isCurrent ? \"◆\" : \"◇\";\n const stateLabel = isComplete\n ? \"completed\"\n : isCurrent\n ? \"current\"\n : \"upcoming\";\n\n return (\n <React.Fragment key={i}>\n <div\n role=\"listitem\"\n aria-label={`Step ${i + 1} of ${steps.length}: ${step.label}, ${stateLabel}`}\n aria-current={isCurrent ? \"step\" : undefined}\n className=\"flex flex-col items-center flex-shrink-0\"\n >\n <span\n className={cn(\n \"font-mono text-[13px] leading-none mb-1.5\",\n isComplete && \"text-primary\",\n isCurrent &&\n \"text-primary drop-shadow-[0_0_6px_rgba(255,212,41,0.6)]\",\n !isComplete && !isCurrent && \"text-muted-foreground/40\",\n )}\n aria-hidden=\"true\"\n >\n {marker}\n </span>\n <p\n className={cn(\n \"font-display text-[11px] uppercase tracking-wider mt-1 whitespace-nowrap\",\n isCurrent && \"text-foreground font-semibold\",\n isComplete && \"text-primary\",\n !isComplete && !isCurrent && \"text-muted-foreground/60\",\n )}\n >\n {step.label}\n </p>\n {step.description && (\n <p className=\"text-[12px] text-muted-foreground/60 mt-0.5 text-center whitespace-nowrap\">\n {step.description}\n </p>\n )}\n </div>\n\n {/* Connector between steps */}\n {!isLast && (\n <div\n className={cn(\n \"flex-1 min-w-[16px] h-px self-start mt-[0.45em] mx-2\",\n isComplete ? \"bg-primary\" : \"bg-border\",\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n </div>\n );\n },\n);\nStepper.displayName = \"Stepper\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Stepper };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst paginationItemVariants = cva(\n \"font-display text-[12px] w-9 h-9 flex items-center justify-center transition-all border\",\n {\n variants: {\n active: {\n true: \"bg-primary text-primary-foreground border-primary font-bold\",\n false:\n \"text-muted-foreground border-border hover:border-primary/40 hover:text-foreground\",\n },\n disabled: {\n true: \"opacity-40 cursor-not-allowed pointer-events-none\",\n false: \"\",\n },\n },\n defaultVariants: { active: false, disabled: false },\n },\n);\n\n/* ── Page range helper ───────────────────────────────────────────────────── */\n\nfunction getPageRange(\n current: number,\n total: number,\n siblings: number,\n): (number | \"...\")[] {\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n const left = Math.max(2, current - siblings);\n const right = Math.min(total - 1, current + siblings);\n const pages: (number | \"...\")[] = [1];\n if (left > 2) pages.push(\"...\");\n for (let i = left; i <= right; i++) pages.push(i);\n if (right < total - 1) pages.push(\"...\");\n pages.push(total);\n return pages;\n}\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface PaginationProps extends React.HTMLAttributes<HTMLElement> {\n totalPages: number;\n currentPage: number;\n onPageChange: (page: number) => void;\n siblingCount?: number;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n (\n {\n totalPages,\n currentPage,\n onPageChange,\n siblingCount = 1,\n className,\n ...props\n },\n ref,\n ) => {\n const pages = getPageRange(currentPage, totalPages, siblingCount);\n const isPrevDisabled = currentPage <= 1;\n const isNextDisabled = currentPage >= totalPages;\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n className={cn(className)}\n {...props}\n >\n <div className=\"flex items-center gap-1\">\n {/* PREV */}\n <button\n type=\"button\"\n onClick={() => !isPrevDisabled && onPageChange(currentPage - 1)}\n disabled={isPrevDisabled}\n aria-label=\"Previous page\"\n className={cn(\n paginationItemVariants({\n active: false,\n disabled: isPrevDisabled,\n }),\n \"font-display uppercase text-[11px] tracking-wider px-2 w-auto\",\n )}\n >\n ◆ PREV\n </button>\n\n {/* Page numbers */}\n {pages.map((page, i) =>\n page === \"...\" ? (\n <span\n key={`ellipsis-${i}`}\n className=\"w-9 h-9 flex items-center justify-center font-mono text-[12px] text-muted-foreground/40 select-none\"\n aria-hidden=\"true\"\n >\n …\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => onPageChange(page)}\n aria-label={`Page ${page}`}\n aria-current={page === currentPage ? \"page\" : undefined}\n className={cn(\n paginationItemVariants({ active: page === currentPage }),\n )}\n >\n {page}\n </button>\n ),\n )}\n\n {/* NEXT */}\n <button\n type=\"button\"\n onClick={() => !isNextDisabled && onPageChange(currentPage + 1)}\n disabled={isNextDisabled}\n aria-label=\"Next page\"\n className={cn(\n paginationItemVariants({\n active: false,\n disabled: isNextDisabled,\n }),\n \"font-display uppercase text-[11px] tracking-wider px-2 w-auto\",\n )}\n >\n NEXT ◆\n </button>\n </div>\n </nav>\n );\n },\n);\nPagination.displayName = \"Pagination\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Pagination, paginationItemVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface BreadcrumbItemData {\n label: string;\n href?: string;\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItemData[];\n separator?: React.ReactNode;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst Breadcrumb = React.forwardRef<HTMLElement, BreadcrumbProps>(\n ({ items, separator, className, ...props }, ref) => {\n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cn(className)}\n {...props}\n >\n <ol className=\"flex items-center gap-2 flex-wrap font-display text-[12px] uppercase tracking-wider\">\n {items.map((item, i) => {\n const isCurrent = i === items.length - 1;\n return (\n <React.Fragment key={i}>\n <li>\n {isCurrent || !item.href ? (\n <span\n aria-current={isCurrent ? \"page\" : undefined}\n className={\n isCurrent\n ? \"text-foreground font-semibold\"\n : \"text-muted-foreground\"\n }\n >\n {item.label}\n </span>\n ) : (\n <a\n href={item.href}\n className=\"text-muted-foreground hover:text-primary transition-colors\"\n >\n {item.label}\n </a>\n )}\n </li>\n {!isCurrent && (\n <li\n aria-hidden=\"true\"\n role=\"presentation\"\n className=\"text-[10px] text-muted-foreground/40 select-none\"\n >\n {separator ?? \"›\"}\n </li>\n )}\n </React.Fragment>\n );\n })}\n </ol>\n </nav>\n );\n },\n);\nBreadcrumb.displayName = \"Breadcrumb\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Breadcrumb };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst numberInputVariants = cva(\n \"inline-flex items-center border border-input bg-transparent\",\n {\n variants: {\n size: {\n sm: \"h-8\",\n md: \"h-9\",\n lg: \"h-10\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface NumberInputProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"onChange\" | \"value\" | \"defaultValue\" | \"size\"\n >,\n VariantProps<typeof numberInputVariants> {\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n min,\n max,\n step = 1,\n size = \"md\",\n className,\n disabled,\n ...props\n },\n ref,\n ) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = React.useState<number>(\n defaultValue ?? 0,\n );\n const current = isControlled ? value! : internalValue;\n\n const clamp = (n: number) =>\n Math.min(max ?? Infinity, Math.max(min ?? -Infinity, n));\n\n const update = (next: number) => {\n const clamped = clamp(next);\n if (!isControlled) setInternalValue(clamped);\n onChange?.(clamped);\n };\n\n const decrement = () => update(current - step);\n const increment = () => update(current + step);\n\n const atMin = min !== undefined && current <= min;\n const atMax = max !== undefined && current >= max;\n\n const buttonBase =\n \"px-2 font-mono text-[13px] text-muted-foreground transition-colors select-none\";\n\n return (\n <div className={cn(numberInputVariants({ size }), className)}>\n {/* Decrement */}\n <button\n type=\"button\"\n onClick={decrement}\n disabled={disabled || atMin}\n aria-label=\"Decrement\"\n className={cn(\n buttonBase,\n \"h-full border-r border-input\",\n (disabled || atMin) && \"opacity-40 cursor-not-allowed\",\n !(disabled || atMin) && \"hover:text-foreground\",\n )}\n >\n −\n </button>\n\n {/* Input */}\n <input\n ref={ref}\n type=\"number\"\n value={current}\n disabled={disabled}\n onChange={(e) => {\n const parsed = parseFloat(e.target.value);\n if (!isNaN(parsed)) update(parsed);\n }}\n onKeyDown={(e) => {\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n increment();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n decrement();\n }\n }}\n className={cn(\n \"w-16 h-full text-center font-mono text-[13px] text-foreground bg-transparent\",\n \"border-x border-input outline-none\",\n \"[appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none\",\n disabled && \"opacity-40 cursor-not-allowed\",\n )}\n {...props}\n />\n\n {/* Increment */}\n <button\n type=\"button\"\n onClick={increment}\n disabled={disabled || atMax}\n aria-label=\"Increment\"\n className={cn(\n buttonBase,\n \"h-full border-l border-input\",\n (disabled || atMax) && \"opacity-40 cursor-not-allowed\",\n !(disabled || atMax) && \"hover:text-foreground\",\n )}\n >\n +\n </button>\n </div>\n );\n },\n);\nNumberInput.displayName = \"NumberInput\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { NumberInput, numberInputVariants };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ViewToggleProps {\n value?: \"grid\" | \"list\";\n defaultValue?: \"grid\" | \"list\";\n onChange?: (value: \"grid\" | \"list\") => void;\n storageKey?: string;\n className?: string;\n}\n\nconst ViewToggle = React.forwardRef<HTMLDivElement, ViewToggleProps>(\n (\n {\n value: controlledValue,\n defaultValue = \"grid\",\n onChange,\n storageKey,\n className,\n },\n ref,\n ) => {\n const [internalValue, setInternalValue] = React.useState<\"grid\" | \"list\">(\n () => {\n if (storageKey && typeof window !== \"undefined\") {\n const stored = localStorage.getItem(storageKey);\n if (stored === \"grid\" || stored === \"list\") return stored;\n }\n return defaultValue;\n },\n );\n\n const value = controlledValue ?? internalValue;\n\n const handleChange = (next: \"grid\" | \"list\") => {\n if (!controlledValue) setInternalValue(next);\n if (storageKey && typeof window !== \"undefined\") localStorage.setItem(storageKey, next);\n onChange?.(next);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"inline-flex border border-border\", className)}\n role=\"group\"\n aria-label=\"View toggle\"\n >\n <button\n type=\"button\"\n onClick={() => handleChange(\"grid\")}\n aria-pressed={value === \"grid\"}\n aria-label=\"Grid view\"\n className={cn(\n \"w-9 h-9 flex items-center justify-center transition-colors duration-150\",\n value === \"grid\"\n ? \"bg-primary/[0.08] text-primary\"\n : \"text-muted-foreground hover:text-foreground hover:bg-surface-2\",\n )}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" className=\"shrink-0\">\n <rect x=\"0\" y=\"0\" width=\"6\" height=\"6\" fill=\"currentColor\"/>\n <rect x=\"8\" y=\"0\" width=\"6\" height=\"6\" fill=\"currentColor\"/>\n <rect x=\"0\" y=\"8\" width=\"6\" height=\"6\" fill=\"currentColor\"/>\n <rect x=\"8\" y=\"8\" width=\"6\" height=\"6\" fill=\"currentColor\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n onClick={() => handleChange(\"list\")}\n aria-pressed={value === \"list\"}\n aria-label=\"List view\"\n className={cn(\n \"w-9 h-9 flex items-center justify-center transition-colors duration-150\",\n \"border-l border-border\",\n value === \"list\"\n ? \"bg-primary/[0.08] text-primary\"\n : \"text-muted-foreground hover:text-foreground hover:bg-surface-2\",\n )}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" className=\"shrink-0\">\n <rect x=\"0\" y=\"2\" width=\"14\" height=\"2\" fill=\"currentColor\"/>\n <rect x=\"0\" y=\"6\" width=\"14\" height=\"2\" fill=\"currentColor\"/>\n <rect x=\"0\" y=\"10\" width=\"14\" height=\"2\" fill=\"currentColor\"/>\n </svg>\n </button>\n </div>\n );\n },\n);\n\nViewToggle.displayName = \"ViewToggle\";\n\nexport { ViewToggle };\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface FilterOption {\n label: string;\n value: string;\n}\n\nexport interface FilterChipProps {\n label: string;\n onRemove?: () => void;\n className?: string;\n}\n\nconst FilterChip = ({ label, onRemove, className }: FilterChipProps) => (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 px-[10px] py-1 text-[12px] font-display text-primary bg-primary/[0.08] border border-primary/20\",\n className,\n )}\n >\n {label}\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label={`Remove ${label} filter`}\n className=\"opacity-50 hover:opacity-100 transition-opacity leading-none\"\n >\n ✕\n </button>\n )}\n </span>\n);\n\nexport interface FilterBarProps extends React.HTMLAttributes<HTMLDivElement> {\n filters: {\n id: string;\n label: string;\n options: FilterOption[];\n }[];\n activeFilters?: Record<string, string[]>;\n onFilterChange?: (id: string, values: string[]) => void;\n onClearAll?: () => void;\n chips?: { label: string; value: string; filterId: string }[];\n /** Placeholder text for the built-in search input (renders when onSearchChange or searchValue is provided) */\n searchPlaceholder?: string;\n /** Controlled value for the built-in search input */\n searchValue?: string;\n /** Called when the built-in search input value changes */\n onSearchChange?: (value: string) => void;\n}\n\nconst FilterBar = React.forwardRef<HTMLDivElement, FilterBarProps>(\n (\n {\n filters,\n activeFilters = {},\n onFilterChange,\n onClearAll,\n chips,\n searchPlaceholder,\n searchValue,\n onSearchChange,\n className,\n ...props\n },\n ref,\n ) => {\n const [openFilter, setOpenFilter] = React.useState<string | null>(null);\n const [dropdownPos, setDropdownPos] = React.useState<{\n x: number;\n y: number;\n width: number;\n } | null>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n\n const hasActive =\n chips && chips.length > 0\n ? true\n : Object.values(activeFilters).some((v) => v.length > 0);\n\n React.useEffect(() => {\n if (!openFilter) return;\n const handleClose = (e: MouseEvent | Event) => {\n if (\n e instanceof MouseEvent &&\n dropdownRef.current?.contains(e.target as Node)\n )\n return;\n setOpenFilter(null);\n setDropdownPos(null);\n };\n const handleScroll = () => {\n setOpenFilter(null);\n setDropdownPos(null);\n };\n document.addEventListener(\"mousedown\", handleClose);\n document.addEventListener(\"scroll\", handleScroll, true);\n window.addEventListener(\"resize\", handleScroll);\n return () => {\n document.removeEventListener(\"mousedown\", handleClose);\n document.removeEventListener(\"scroll\", handleScroll, true);\n window.removeEventListener(\"resize\", handleScroll);\n };\n }, [openFilter]);\n\n const handleFilterToggle = (\n filterId: string,\n e: React.MouseEvent<HTMLButtonElement>,\n ) => {\n if (openFilter === filterId) {\n setOpenFilter(null);\n setDropdownPos(null);\n return;\n }\n const rect = e.currentTarget.getBoundingClientRect();\n const menuHeight = Math.min(\n filters.find((f) => f.id === filterId)!.options.length * 36 + 8,\n 240,\n );\n const spaceBelow = window.innerHeight - rect.bottom - 4;\n const y =\n spaceBelow < menuHeight && rect.top > menuHeight\n ? rect.top - menuHeight - 4\n : rect.bottom + 4;\n setDropdownPos({ x: rect.left, y, width: Math.max(rect.width, 160) });\n setOpenFilter(filterId);\n };\n\n const activeFilterForOpen = openFilter\n ? filters.find((f) => f.id === openFilter)\n : null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-wrap items-center gap-2 p-3 bg-surface-0 border border-border\",\n className,\n )}\n {...props}\n >\n {(onSearchChange !== undefined || searchValue !== undefined) && (\n <div className=\"relative\">\n <span\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground/50 text-sm select-none\"\n aria-hidden=\"true\"\n >\n ◆\n </span>\n <input\n type=\"search\"\n value={searchValue ?? \"\"}\n onChange={(e) => onSearchChange?.(e.target.value)}\n placeholder={searchPlaceholder ?? \"SEARCH...\"}\n className=\"h-9 pl-8 pr-3 bg-surface-1 border border-border text-sm text-foreground placeholder:text-muted-foreground/40 focus:outline-none focus:border-primary font-display tracking-wide uppercase\"\n />\n </div>\n )}\n\n {filters.map((filter) => {\n const isActive =\n activeFilters[filter.id] && activeFilters[filter.id].length > 0;\n return (\n <div key={filter.id} className=\"relative\">\n <button\n type=\"button\"\n onClick={(e) => handleFilterToggle(filter.id, e)}\n aria-haspopup=\"listbox\"\n aria-expanded={openFilter === filter.id}\n className={cn(\n \"px-3 py-1.5 font-display text-[12px] uppercase border border-border transition-colors duration-150\",\n isActive\n ? \"border-primary text-primary bg-primary/[0.06]\"\n : \"text-muted-foreground hover:text-foreground hover:border-border-strong\",\n openFilter === filter.id && \"border-primary/60\",\n )}\n >\n {filter.label}\n {isActive && ` (${activeFilters[filter.id].length})`}\n </button>\n </div>\n );\n })}\n\n {chips && chips.length > 0 && (\n <>\n <div className=\"h-4 w-px bg-border\" />\n {chips.map((chip) => (\n <FilterChip\n key={`${chip.filterId}-${chip.value}`}\n label={chip.label}\n onRemove={() => {\n const current = activeFilters[chip.filterId] ?? [];\n onFilterChange?.(\n chip.filterId,\n current.filter((v) => v !== chip.value),\n );\n }}\n />\n ))}\n </>\n )}\n\n {hasActive && onClearAll && (\n <button\n type=\"button\"\n onClick={onClearAll}\n className=\"ml-auto text-[11px] font-mono text-muted-foreground hover:text-destructive transition-colors\"\n >\n CLEAR ALL\n </button>\n )}\n\n {/* Portal dropdown — renders outside any overflow:hidden ancestor */}\n {openFilter && dropdownPos && activeFilterForOpen &&\n ReactDOM.createPortal(\n <div\n ref={dropdownRef}\n role=\"listbox\"\n className=\"fixed bg-surface-2 border border-border shadow-[0_8px_32px_rgba(0,0,0,0.45)] min-w-[160px] max-h-60 overflow-y-auto animate-fade-in-up\"\n style={{\n left: dropdownPos.x,\n top: dropdownPos.y,\n zIndex: 9999,\n minWidth: dropdownPos.width,\n }}\n >\n {activeFilterForOpen.options.map((opt) => {\n const selected = activeFilters[openFilter]?.includes(opt.value);\n return (\n <button\n key={opt.value}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n onClick={() => {\n const current = activeFilters[openFilter] ?? [];\n const next = selected\n ? current.filter((v) => v !== opt.value)\n : [...current, opt.value];\n onFilterChange?.(openFilter, next);\n }}\n className={cn(\n \"w-full text-left px-3 py-2 text-[12px] font-display hover:bg-surface-3 transition-colors\",\n selected ? \"text-primary\" : \"text-foreground\",\n )}\n >\n {selected ? \"◆\" : \"◇\"} {opt.label}\n </button>\n );\n })}\n </div>,\n document.body,\n )}\n </div>\n );\n },\n);\nFilterBar.displayName = \"FilterBar\";\n\nexport { FilterBar, FilterChip };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface OTPInputProps {\n length?: number;\n value?: string;\n onChange?: (value: string) => void;\n onComplete?: (value: string) => void;\n /** Show success state on all boxes */\n success?: boolean;\n error?: boolean;\n disabled?: boolean;\n /** Show resend link — pass initial countdown seconds (e.g. 45) */\n resendCooldown?: number;\n /** Called when user clicks RESEND */\n onResend?: () => void;\n resendLabel?: string;\n className?: string;\n}\n\nconst OTPInput = ({\n length = 6,\n value = \"\",\n onChange,\n onComplete,\n success,\n error,\n disabled,\n resendCooldown,\n onResend,\n resendLabel = \"RESEND\",\n className,\n}: OTPInputProps) => {\n const [shaking, setShaking] = React.useState(false);\n const [countdown, setCountdown] = React.useState(resendCooldown ?? 0);\n const inputsRef = React.useRef<(HTMLInputElement | null)[]>([]);\n\n React.useEffect(() => {\n if (error) {\n setShaking(true);\n const t = setTimeout(() => setShaking(false), 500);\n return () => clearTimeout(t);\n }\n }, [error]);\n\n React.useEffect(() => {\n if (!resendCooldown) return;\n setCountdown(resendCooldown);\n }, [resendCooldown]);\n\n React.useEffect(() => {\n if (countdown <= 0) return;\n const id = setInterval(() => {\n setCountdown((c) => {\n if (c <= 1) { clearInterval(id); return 0; }\n return c - 1;\n });\n }, 1000);\n return () => clearInterval(id);\n }, [countdown]);\n\n const digits = Array.from({ length }, (_, i) => value[i] ?? \"\");\n const midpoint = Math.ceil(length / 2);\n\n const handleChange = (index: number, char: string) => {\n const digit = char.replace(/\\D/g, \"\").slice(-1);\n const next = digits.map((d, i) => (i === index ? digit : d)).join(\"\");\n onChange?.(next);\n if (digit && index < length - 1) {\n inputsRef.current[index + 1]?.focus();\n }\n if (next.replace(/\\s/g, \"\").length === length && !next.includes(\"\")) {\n onComplete?.(next);\n }\n };\n\n const handleKeyDown = (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Backspace\") {\n if (!digits[index] && index > 0) {\n inputsRef.current[index - 1]?.focus();\n const next = digits.map((d, i) => (i === index - 1 ? \"\" : d)).join(\"\");\n onChange?.(next);\n } else {\n const next = digits.map((d, i) => (i === index ? \"\" : d)).join(\"\");\n onChange?.(next);\n }\n } else if (e.key === \"ArrowLeft\" && index > 0) {\n inputsRef.current[index - 1]?.focus();\n } else if (e.key === \"ArrowRight\" && index < length - 1) {\n inputsRef.current[index + 1]?.focus();\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData(\"text\").replace(/\\D/g, \"\").slice(0, length);\n const next = Array.from({ length }, (_, i) => pasted[i] ?? \"\").join(\"\");\n onChange?.(next);\n const focusIndex = Math.min(pasted.length, length - 1);\n inputsRef.current[focusIndex]?.focus();\n if (pasted.length === length) onComplete?.(next);\n };\n\n const handleResend = () => {\n if (countdown > 0 || !onResend) return;\n onResend();\n if (resendCooldown) setCountdown(resendCooldown);\n };\n\n const renderInput = (digit: string, index: number) => (\n <input\n key={index}\n ref={(el) => { inputsRef.current[index] = el; }}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={digit}\n disabled={disabled}\n aria-label={`Digit ${index + 1} of ${length}`}\n onChange={(e) => handleChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n onPaste={handlePaste}\n onFocus={(e) => e.target.select()}\n className={cn(\n /* Base — matches spec: 48px × 56px, Orbitron 24px bold */\n \"w-12 h-14 font-['Orbitron',monospace] text-2xl font-bold text-center\",\n \"bg-surface-1 border border-border caret-primary\",\n \"focus:outline-none focus:border-primary focus:ring-[3px] focus:ring-primary/[0.10]\",\n \"focus:bg-surface-hover transition-all duration-200\",\n /* Filled: yellow text, white/20 border */\n digit && !success && !error && \"border-white/20 text-primary\",\n /* Error */\n error && \"border-destructive ring-[3px] ring-destructive/[0.10]\",\n /* Success */\n success && \"border-ef-green text-ef-green\",\n /* Disabled */\n disabled && \"bg-surface-canvas text-disabled cursor-not-allowed opacity-100\",\n )}\n />\n );\n\n return (\n <div className={cn(\"flex flex-col items-center gap-6\", className)}>\n {/* Input row */}\n <div\n className={cn(\"flex items-center\", shaking && \"animate-shake\")}\n aria-label=\"One-time password input\"\n role=\"group\"\n >\n {/* First group */}\n <div className=\"flex items-center gap-2\">\n {digits.slice(0, midpoint).map((digit, index) => renderInput(digit, index))}\n </div>\n\n {/* Group separator — 16px gap as spec */}\n {length >= 4 && (\n <div className=\"w-4 flex justify-center\" aria-hidden=\"true\">\n <div className=\"w-2 h-px bg-border\" />\n </div>\n )}\n\n {/* Second group */}\n <div className=\"flex items-center gap-2\">\n {digits.slice(midpoint).map((digit, index) => renderInput(digit, index + midpoint))}\n </div>\n </div>\n\n {/* Resend section */}\n {onResend !== undefined && (\n <div className=\"text-center text-[13px] text-muted-foreground\">\n {countdown > 0 ? (\n <span>\n {resendLabel} available in{\" \"}\n <span className=\"font-['Orbitron',monospace] text-xs text-muted-foreground\">\n {countdown}s\n </span>\n </span>\n ) : (\n <span>\n Didn't receive code?{\" \"}\n <button\n type=\"button\"\n onClick={handleResend}\n className=\"font-semibold text-primary hover:text-primary/80 transition-colors cursor-pointer\"\n >\n [{resendLabel}]\n </button>\n </span>\n )}\n </div>\n )}\n </div>\n );\n};\n\nOTPInput.displayName = \"OTPInput\";\n\nexport { OTPInput };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\n/* ─── Constants ─────────────────────────────────────────────────────────── */\nconst DAY_HEADERS = [\"MO\", \"TU\", \"WE\", \"TH\", \"FR\", \"SA\", \"SU\"];\nconst MONTHS = [\n \"JANUARY\", \"FEBRUARY\", \"MARCH\", \"APRIL\", \"MAY\", \"JUNE\",\n \"JULY\", \"AUGUST\", \"SEPTEMBER\", \"OCTOBER\", \"NOVEMBER\", \"DECEMBER\",\n];\n\n/* ─── Helpers ────────────────────────────────────────────────────────────── */\nfunction parseISO(str: string): Date | null {\n if (!str || !/^\\d{4}-\\d{2}-\\d{2}$/.test(str)) return null;\n const [y, m, d] = str.split(\"-\").map(Number);\n const dt = new Date(y, m - 1, d);\n return isNaN(dt.getTime()) ? null : dt;\n}\n\nfunction toISO(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n}\n\nfunction formatDisplay(iso: string): string {\n const d = parseISO(iso);\n if (!d) return \"\";\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}.${m}.${day}`;\n}\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n}\n\nfunction isToday(d: Date): boolean {\n return isSameDay(d, new Date());\n}\n\n/** Build the 6-row × 7-col grid for a given month view */\nfunction buildGrid(year: number, month: number): Date[] {\n const first = new Date(year, month, 1);\n // Monday-first: 0=Mon … 6=Sun\n const startOffset = (first.getDay() + 6) % 7;\n const cells: Date[] = [];\n for (let i = -startOffset; i < 42 - startOffset; i++) {\n cells.push(new Date(year, month, 1 + i));\n }\n return cells;\n}\n\n/* ─── Types ──────────────────────────────────────────────────────────────── */\nexport interface DatePickerProps {\n value?: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n error?: boolean | string;\n label?: string;\n /** Dates before minDate are disabled */\n minDate?: string;\n /** Dates after maxDate are disabled */\n maxDate?: string;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\nconst sizeMap = {\n sm: \"h-8 text-xs px-3\",\n md: \"h-10 text-sm px-3\",\n lg: \"h-12 text-base px-4\",\n};\n\n/* ─── Component ──────────────────────────────────────────────────────────── */\nconst DatePicker = React.forwardRef<HTMLButtonElement, DatePickerProps>(\n (\n {\n value,\n onChange,\n placeholder = \"YYYY.MM.DD\",\n size = \"md\",\n error,\n label,\n minDate,\n maxDate,\n disabled,\n className,\n id,\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const triggerId = id ?? generatedId;\n\n const today = new Date();\n const selectedDate = value ? parseISO(value) : null;\n\n /* Calendar view state */\n const [viewYear, setViewYear] = React.useState(\n selectedDate?.getFullYear() ?? today.getFullYear(),\n );\n const [viewMonth, setViewMonth] = React.useState(\n selectedDate?.getMonth() ?? today.getMonth(),\n );\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n const parsed = value ? parseISO(value) : null;\n if (parsed) {\n setViewYear(parsed.getFullYear());\n setViewMonth(parsed.getMonth());\n }\n }, [value]);\n\n const grid = buildGrid(viewYear, viewMonth);\n\n const goToPrevMonth = () => {\n if (viewMonth === 0) { setViewMonth(11); setViewYear((y) => y - 1); }\n else setViewMonth((m) => m - 1);\n };\n\n const goToNextMonth = () => {\n if (viewMonth === 11) { setViewMonth(0); setViewYear((y) => y + 1); }\n else setViewMonth((m) => m + 1);\n };\n\n const goToPrevYear = () => setViewYear((y) => y - 1);\n const goToNextYear = () => setViewYear((y) => y + 1);\n\n const isDisabledDate = (d: Date): boolean => {\n const iso = toISO(d);\n if (minDate && iso < minDate) return true;\n if (maxDate && iso > maxDate) return true;\n return false;\n };\n\n const handleSelectDay = (d: Date) => {\n if (isDisabledDate(d)) return;\n onChange?.(toISO(d));\n setOpen(false);\n };\n\n const handleToday = () => {\n if (isDisabledDate(today)) return;\n onChange?.(toISO(today));\n setOpen(false);\n };\n\n const handleClear = () => {\n onChange?.(\"\");\n };\n\n const displayValue = value ? formatDisplay(value) : \"\";\n\n return (\n <div className={cn(\"flex flex-col gap-1.5\", className)}>\n {label && (\n <label\n htmlFor={triggerId}\n className=\"font-display text-[11px] uppercase tracking-wider text-muted-foreground\"\n >\n {label}\n </label>\n )}\n\n <PopoverPrimitive.Root open={open} onOpenChange={disabled ? undefined : setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n ref={ref}\n id={triggerId}\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={cn(\n \"w-full flex items-center justify-between bg-transparent border border-border\",\n \"focus:outline-none focus:border-primary focus:ring-2 focus:ring-primary/25\",\n \"transition-colors duration-150 cursor-pointer\",\n sizeMap[size],\n error ? \"border-destructive focus:border-destructive focus:ring-destructive/25\" : \"\",\n disabled ? \"opacity-38 cursor-not-allowed\" : \"\",\n )}\n >\n <span className={cn(\n \"font-['Orbitron',monospace] text-sm tracking-wider\",\n displayValue ? \"text-foreground\" : \"text-muted-foreground\",\n )}>\n {displayValue || placeholder}\n </span>\n {/* Diamond calendar icon */}\n <span className=\"text-primary/60 text-xs ml-2\" aria-hidden=\"true\">◆</span>\n </button>\n </PopoverPrimitive.Trigger>\n\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align=\"start\"\n sideOffset={6}\n className={cn(\n \"z-[var(--z-dropdown,100)] bg-surface-2 border border-border\",\n \"shadow-[var(--shadow-lg)] w-80 p-4\",\n \"animate-fade-in-down\",\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n {/* Month/Year nav */}\n <div className=\"flex items-center justify-between mb-4\">\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n onClick={goToPrevYear}\n className=\"w-7 h-8 flex items-center justify-center text-muted-foreground hover:text-primary transition-colors text-xs\"\n aria-label=\"Previous year\"\n >\n ◂◂\n </button>\n <button\n type=\"button\"\n onClick={goToPrevMonth}\n className=\"w-7 h-8 flex items-center justify-center text-muted-foreground hover:text-primary transition-colors\"\n aria-label=\"Previous month\"\n >\n ◂\n </button>\n </div>\n <span className=\"font-display text-sm font-bold tracking-[0.08em] uppercase text-foreground\">\n {MONTHS[viewMonth]} {viewYear}\n </span>\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n onClick={goToNextMonth}\n className=\"w-7 h-8 flex items-center justify-center text-muted-foreground hover:text-primary transition-colors\"\n aria-label=\"Next month\"\n >\n ▸\n </button>\n <button\n type=\"button\"\n onClick={goToNextYear}\n className=\"w-7 h-8 flex items-center justify-center text-muted-foreground hover:text-primary transition-colors text-xs\"\n aria-label=\"Next year\"\n >\n ▸▸\n </button>\n </div>\n </div>\n\n {/* Day-of-week headers */}\n <div className=\"grid grid-cols-7 mb-1\">\n {DAY_HEADERS.map((h) => (\n <div\n key={h}\n className=\"font-['Orbitron',monospace] text-[10px] tracking-[0.1em] text-muted-foreground text-center py-1\"\n >\n {h}\n </div>\n ))}\n </div>\n\n {/* Day cells */}\n <div className=\"grid grid-cols-7\">\n {grid.map((d, i) => {\n const inMonth = d.getMonth() === viewMonth;\n const isSelected = selectedDate ? isSameDay(d, selectedDate) : false;\n const todayFlag = isToday(d);\n const disabledFlag = isDisabledDate(d);\n\n return (\n <button\n key={i}\n type=\"button\"\n disabled={disabledFlag}\n onClick={() => handleSelectDay(d)}\n aria-label={d.toDateString()}\n aria-pressed={isSelected}\n className={cn(\n \"w-9 h-9 flex items-center justify-center\",\n \"font-['Orbitron',monospace] text-xs transition-all duration-150\",\n \"focus:outline-none\",\n /* Base states */\n inMonth ? \"text-foreground/80\" : \"text-muted-foreground/30\",\n /* Hover (non-selected, non-disabled) */\n !isSelected && !disabledFlag && \"hover:bg-primary/[0.08] hover:text-primary\",\n /* Today border */\n todayFlag && !isSelected && \"border border-primary/40\",\n /* Selected — diamond clip-path */\n isSelected && [\n \"bg-primary text-primary-foreground font-bold\",\n \"[clip-path:polygon(50%_0%,100%_50%,50%_100%,0%_50%)]\",\n ],\n /* Disabled */\n disabledFlag && \"text-muted-foreground/30 cursor-not-allowed\",\n )}\n >\n {d.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Footer: TODAY / CLEAR */}\n <div className=\"flex items-center justify-between mt-3 pt-3 border-t border-border\">\n <button\n type=\"button\"\n onClick={handleToday}\n disabled={isDisabledDate(today)}\n className=\"font-display text-[11px] uppercase tracking-wider text-primary hover:text-primary/70 disabled:text-muted-foreground disabled:cursor-not-allowed transition-colors\"\n >\n [TODAY]\n </button>\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"font-display text-[11px] uppercase tracking-wider text-muted-foreground hover:text-foreground transition-colors\"\n >\n [CLEAR]\n </button>\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n\n {error && typeof error === \"string\" && (\n <p className=\"text-[11px] text-destructive font-mono\">{error}</p>\n )}\n </div>\n );\n },\n);\nDatePicker.displayName = \"DatePicker\";\n\nexport { DatePicker };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n value?: number;\n defaultValue?: number;\n max?: number;\n onChange?: (value: number) => void;\n readOnly?: boolean;\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizeClasses = {\n sm: \"text-sm gap-0.5\",\n md: \"text-base gap-1\",\n lg: \"text-xl gap-1.5\",\n};\n\nconst Rating = React.forwardRef<HTMLDivElement, RatingProps>(\n (\n {\n value: controlledValue,\n defaultValue = 0,\n max = 5,\n onChange,\n readOnly,\n size = \"md\",\n className,\n ...props\n },\n ref,\n ) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue);\n const [hovered, setHovered] = React.useState<number | null>(null);\n\n const value = controlledValue ?? internalValue;\n const display = hovered ?? value;\n\n const handleSelect = (v: number) => {\n if (readOnly) return;\n if (!controlledValue) setInternalValue(v);\n onChange?.(v);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (readOnly) return;\n if (e.key === \"ArrowRight\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n const next = Math.min(value + 1, max);\n if (!controlledValue) setInternalValue(next);\n onChange?.(next);\n } else if (e.key === \"ArrowLeft\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n const next = Math.max(value - 1, 0);\n if (!controlledValue) setInternalValue(next);\n onChange?.(next);\n } else if (e.key === \"Home\") {\n e.preventDefault();\n if (!controlledValue) setInternalValue(0);\n onChange?.(0);\n } else if (e.key === \"End\") {\n e.preventDefault();\n if (!controlledValue) setInternalValue(max);\n onChange?.(max);\n }\n };\n\n return (\n <div\n ref={ref}\n role={readOnly ? \"img\" : \"slider\"}\n aria-label={`Rating: ${value} out of ${max}`}\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n tabIndex={readOnly ? undefined : 0}\n onKeyDown={handleKeyDown}\n onMouseLeave={() => setHovered(null)}\n className={cn(\n \"inline-flex items-center\",\n !readOnly && \"cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary/25\",\n sizeClasses[size],\n className,\n )}\n {...props}\n >\n {Array.from({ length: max }, (_, i) => {\n const starValue = i + 1;\n const filled = starValue <= display;\n return (\n <span\n key={i}\n onClick={() => handleSelect(starValue)}\n onMouseEnter={() => !readOnly && setHovered(starValue)}\n className={cn(\n \"w-5 h-5 flex items-center justify-center leading-none transition-colors duration-100 select-none\",\n filled ? \"text-primary\" : \"text-muted-foreground/25\",\n !readOnly && \"cursor-pointer hover:text-primary/70\",\n )}\n aria-hidden=\"true\"\n >\n {filled ? \"◆\" : \"◇\"}\n </span>\n );\n })}\n </div>\n );\n },\n);\nRating.displayName = \"Rating\";\n\nexport { Rating };\n","import * as React from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from \"./dialog\";\nimport { Button } from \"./button\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SessionTimeoutModalProps {\n open: boolean;\n secondsRemaining: number;\n onExtend: () => void;\n onLogout: () => void;\n onAutoLogout?: () => void;\n warningAt?: number;\n}\n\nfunction formatCountdown(seconds: number): string {\n const m = Math.floor(Math.max(0, seconds) / 60);\n const s = Math.max(0, seconds) % 60;\n return `${String(m).padStart(2, \"0\")}:${String(s).padStart(2, \"0\")}`;\n}\n\nconst SessionTimeoutModal = ({\n open,\n secondsRemaining,\n onExtend,\n onLogout,\n onAutoLogout,\n warningAt = 60,\n}: SessionTimeoutModalProps) => {\n const isCritical = secondsRemaining <= warningAt;\n const isUrgent = secondsRemaining <= 30;\n\n React.useEffect(() => {\n if (open && secondsRemaining <= 0 && onAutoLogout) {\n onAutoLogout();\n }\n }, [open, secondsRemaining, onAutoLogout]);\n\n const countdownClass = isUrgent\n ? \"animate-[pulse_0.5s_ease-in-out_infinite]\"\n : isCritical\n ? \"animate-pulse\"\n : \"\";\n\n const progress = Math.min(100, (secondsRemaining / (warningAt * 2)) * 100);\n\n return (\n <Dialog open={open}>\n <DialogContent size=\"sm\" className=\"flex flex-col gap-0 p-0\">\n {/* ── Header: centered title only ── */}\n <div className=\"shrink-0 border-b border-border px-6 py-4 flex items-center justify-center\">\n <DialogTitle className=\"text-center\">\n <span aria-hidden=\"true\">⏱ </span>SESSION EXPIRING\n </DialogTitle>\n </div>\n\n {/* ── Description ── */}\n <DialogDescription className=\"text-center px-8 pt-5 pb-0 text-sm text-muted-foreground overflow-visible shrink-0\">\n Your session will expire due to inactivity. Stay connected to\n continue.\n </DialogDescription>\n\n {/* ── Countdown ── */}\n <div className=\"flex flex-col items-center px-8 py-8 gap-3\">\n {/* Corner-bracketed countdown display */}\n <div className=\"relative inline-block\">\n <span\n className=\"absolute -top-1 -left-2 font-mono text-[10px] select-none leading-none\"\n style={{ color: isCritical ? \"hsl(var(--ef-red))\" : \"hsl(var(--ef-orange))\", opacity: 0.35 }}\n aria-hidden=\"true\"\n >\n ◤\n </span>\n <span\n className=\"absolute -top-1 -right-2 font-mono text-[10px] select-none leading-none\"\n style={{ color: isCritical ? \"hsl(var(--ef-red))\" : \"hsl(var(--ef-orange))\", opacity: 0.35 }}\n aria-hidden=\"true\"\n >\n ◥\n </span>\n <span\n className={cn(\n \"font-display text-5xl font-bold tracking-[0.12em] tabular-nums block px-2\",\n isCritical ? \"text-ef-red\" : \"text-ef-orange\",\n countdownClass,\n )}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n data-state={isCritical ? \"critical\" : \"warning\"}\n >\n {formatCountdown(secondsRemaining)}\n </span>\n <span\n className=\"absolute -bottom-1 -left-2 font-mono text-[10px] select-none leading-none\"\n style={{ color: isCritical ? \"hsl(var(--ef-red))\" : \"hsl(var(--ef-orange))\", opacity: 0.35 }}\n aria-hidden=\"true\"\n >\n ◣\n </span>\n <span\n className=\"absolute -bottom-1 -right-2 font-mono text-[10px] select-none leading-none\"\n style={{ color: isCritical ? \"hsl(var(--ef-red))\" : \"hsl(var(--ef-orange))\", opacity: 0.35 }}\n aria-hidden=\"true\"\n >\n ◢\n </span>\n </div>\n\n {/* \"REMAINING\" label */}\n <p className=\"font-mono text-[10px] text-muted-foreground uppercase tracking-[0.15em]\">\n remaining\n </p>\n\n {/* Countdown progress bar */}\n <div className=\"w-32 h-[2px] bg-surface-0\">\n <div\n className={cn(\n \"h-full transition-all duration-1000\",\n isCritical ? \"bg-ef-red\" : \"bg-ef-orange\",\n )}\n style={{ width: `${Math.max(0, progress)}%` }}\n aria-hidden=\"true\"\n />\n </div>\n </div>\n\n {/* ── Footer ── */}\n <DialogFooter className=\"border-t border-border px-6 py-4\">\n <Button variant=\"ghost\" onClick={onLogout}>\n LOG OUT\n </Button>\n <Button variant=\"primary\" onClick={onExtend}>\n STAY CONNECTED\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n\nSessionTimeoutModal.displayName = \"SessionTimeoutModal\";\n\nexport { SessionTimeoutModal };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type FileUploadState =\n | \"idle\"\n | \"hover\"\n | \"dragging\"\n | \"drag-invalid\"\n | \"uploading\"\n | \"success\"\n | \"error\"\n | \"disabled\";\n\nexport interface FileUploadProps extends React.HTMLAttributes<HTMLDivElement> {\n accept?: string;\n multiple?: boolean;\n /** Max file size in bytes */\n maxSize?: number;\n onFileSelect?: (files: File[]) => void;\n state?: FileUploadState;\n /** Overall upload progress 0–100 (used when state=uploading) */\n progress?: number;\n error?: string;\n}\n\n/* Per-file item type for the file list */\ninterface FileItem {\n file: File;\n previewUrl?: string;\n progress: number;\n status: \"uploading\" | \"done\" | \"error\";\n error?: string;\n}\n\nconst ZONE_CONFIG: Record<\n FileUploadState,\n { label: string; icon: string; border: string; bg?: string; iconColor: string }\n> = {\n idle: {\n label: \"Drag files here or click to upload\",\n icon: \"↑\",\n border: \"border-2 border-dashed border-border\",\n iconColor: \"text-muted-foreground/70\",\n },\n hover: {\n label: \"Release to upload\",\n icon: \"↑\",\n border: \"border-2 border-dashed border-border/70\",\n iconColor: \"text-muted-foreground\",\n },\n dragging: {\n label: \"Drop to upload\",\n icon: \"↑\",\n border: \"border-2 border-dashed border-primary\",\n bg: \"bg-primary/[0.03]\",\n iconColor: \"text-primary\",\n },\n \"drag-invalid\": {\n label: \"File type not supported\",\n icon: \"✕\",\n border: \"border-2 border-dashed border-destructive\",\n bg: \"bg-destructive/[0.03]\",\n iconColor: \"text-destructive\",\n },\n uploading: {\n label: \"Uploading...\",\n icon: \"◆\",\n border: \"border-2 border-solid border-border\",\n iconColor: \"text-primary/40\",\n },\n success: {\n label: \"Upload complete\",\n icon: \"✓\",\n border: \"border-2 border-solid border-ef-green/40\",\n bg: \"bg-ef-green/[0.03]\",\n iconColor: \"text-ef-green\",\n },\n error: {\n label: \"Upload failed\",\n icon: \"✕\",\n border: \"border-2 border-solid border-destructive/40\",\n bg: \"bg-destructive/[0.03]\",\n iconColor: \"text-destructive\",\n },\n disabled: {\n label: \"Upload disabled\",\n icon: \"↑\",\n border: \"border-2 border-dashed border-border/50\",\n bg: \"bg-surface-canvas\",\n iconColor: \"text-muted-foreground/40\",\n },\n};\n\nconst FileUpload = React.forwardRef<HTMLDivElement, FileUploadProps>(\n (\n {\n accept,\n multiple,\n maxSize,\n onFileSelect,\n state: controlledState,\n progress = 0,\n error,\n className,\n ...props\n },\n ref,\n ) => {\n const [internalState, setInternalState] = React.useState<FileUploadState>(\"idle\");\n const [files, setFiles] = React.useState<FileItem[]>([]);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const instructionsId = React.useId();\n\n const state = controlledState ?? internalState;\n const config = ZONE_CONFIG[state];\n const isDisabled = state === \"disabled\";\n\n const isValidType = (file: File): boolean => {\n if (!accept) return true;\n const accepted = accept.split(\",\").map((a) => a.trim());\n return accepted.some((a) => {\n if (a.startsWith(\".\")) return file.name.toLowerCase().endsWith(a.toLowerCase());\n if (a.endsWith(\"/*\")) return file.type.startsWith(a.replace(\"/*\", \"/\"));\n return file.type === a;\n });\n };\n\n const processFiles = (rawFiles: File[]) => {\n if (!rawFiles.length) return;\n\n const valid: File[] = [];\n const items: FileItem[] = rawFiles.map((file) => {\n const sizeOk = !maxSize || file.size <= maxSize;\n const typeOk = isValidType(file);\n const hasError = !sizeOk\n ? `File exceeds ${maxSize ? (maxSize / 1024 / 1024).toFixed(0) : \"?\"} MB limit`\n : !typeOk\n ? \"File type not supported\"\n : undefined;\n if (!hasError) valid.push(file);\n return {\n file,\n previewUrl: file.type.startsWith(\"image/\") ? URL.createObjectURL(file) : undefined,\n progress: 0,\n status: hasError ? \"error\" : \"uploading\",\n error: hasError,\n };\n });\n\n setFiles(items);\n if (valid.length) onFileSelect?.(valid);\n if (!controlledState) setInternalState(valid.length ? \"uploading\" : \"error\");\n };\n\n const hasUploadingFiles = files.some((f) => f.status === \"uploading\");\n React.useEffect(() => {\n if (!hasUploadingFiles) return;\n const interval = setInterval(() => {\n setFiles((prev) => {\n const updated = prev.map((item) => {\n if (item.status !== \"uploading\") return item;\n const newProgress = Math.min(item.progress + 15, 100);\n return {\n ...item,\n progress: newProgress,\n status: newProgress >= 100 ? (\"done\" as const) : (\"uploading\" as const),\n };\n });\n const allDone = updated.every((i) => i.status !== \"uploading\");\n if (allDone && !controlledState) {\n const hasErrors = updated.some((i) => i.status === \"error\");\n setInternalState(hasErrors ? \"error\" : \"success\");\n }\n return updated;\n });\n }, 250);\n return () => clearInterval(interval);\n }, [hasUploadingFiles, controlledState]);\n\n React.useEffect(() => {\n if (controlledState === \"success\") {\n setFiles((prev) =>\n prev.map((item) =>\n item.status === \"uploading\" ? { ...item, progress: 100, status: \"done\" } : item,\n ),\n );\n } else if (controlledState === \"error\") {\n setFiles((prev) =>\n prev.map((item) =>\n item.status === \"uploading\" ? { ...item, status: \"error\" } : item,\n ),\n );\n }\n }, [controlledState]);\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n if (isDisabled || controlledState) return;\n const hasInvalid = accept && Array.from(e.dataTransfer.items).some(\n (item) => !accept.split(\",\").some((a) => {\n const t = a.trim();\n if (t.endsWith(\"/*\")) return item.type.startsWith(t.replace(\"/*\", \"/\"));\n return item.type === t;\n }),\n );\n setInternalState(hasInvalid ? \"drag-invalid\" : \"dragging\");\n };\n\n const handleDragLeave = () => {\n if (!controlledState) setInternalState(\"idle\");\n };\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault();\n if (isDisabled) return;\n processFiles(Array.from(e.dataTransfer.files));\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n processFiles(Array.from(e.target.files ?? []));\n e.target.value = \"\";\n };\n\n const removeFile = (index: number) => {\n setFiles((prev) => {\n const next = prev.filter((_, i) => i !== index);\n if (next.length === 0 && !controlledState) setInternalState(\"idle\");\n return next;\n });\n };\n\n return (\n <div className={cn(\"flex flex-col gap-2\", className)} ref={ref} {...props}>\n {/* Drop zone */}\n <div\n className={cn(\n \"relative flex flex-col items-center justify-center py-12 px-6 text-center\",\n \"transition-all duration-200 cursor-pointer bg-surface-0\",\n config.border,\n config.bg,\n isDisabled && \"opacity-50 cursor-not-allowed\",\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n onClick={() => !isDisabled && inputRef.current?.click()}\n role=\"button\"\n tabIndex={isDisabled ? -1 : 0}\n aria-label=\"File upload zone\"\n aria-describedby={state === \"idle\" ? instructionsId : undefined}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={isDisabled}\n onChange={handleChange}\n className=\"sr-only\"\n aria-label=\"File input\"\n />\n\n {/* Icon 48px */}\n <div\n className={cn(\"text-5xl mb-4 transition-colors\", config.iconColor)}\n aria-hidden=\"true\"\n >\n {config.icon}\n </div>\n\n <p className={cn(\"text-sm mb-1 transition-colors\", config.iconColor === \"text-muted-foreground/70\" ? \"text-foreground/80\" : config.iconColor)}>\n {config.label}\n </p>\n\n {state === \"idle\" && (\n <p id={instructionsId} className=\"text-xs text-muted-foreground/70 mt-1\">\n {accept ? `${accept.split(\",\").map(a => a.trim()).join(\", \")} ` : \"\"}\n {maxSize ? `up to ${(maxSize / 1024 / 1024).toFixed(0)} MB` : \"\"}\n </p>\n )}\n\n {state === \"idle\" && (\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"mt-4 font-display text-[11px] uppercase tracking-wider border border-border px-4 py-2 text-muted-foreground hover:border-primary hover:text-primary transition-colors\"\n >\n [SELECT FILES]\n </button>\n )}\n\n {state === \"uploading\" && files.length === 0 && (\n /* Only show zone progress when there's no per-file list (controlled mode without files) */\n <div className=\"mt-3 w-full max-w-[200px]\">\n <div className=\"h-[3px] bg-surface-2 w-full\">\n <div\n className=\"h-full bg-primary transition-all duration-300\"\n style={{ width: `${progress}%` }}\n />\n </div>\n <p className=\"mt-1 font-['Orbitron',monospace] text-[11px] text-muted-foreground text-center\">\n {progress}%\n </p>\n </div>\n )}\n\n {error && (\n <p className=\"mt-2 text-[11px] font-mono text-destructive\">{error}</p>\n )}\n </div>\n\n {/* Per-file list */}\n {files.length > 0 && (\n <div className=\"flex flex-col gap-2\">\n {files.map((item, index) => (\n <div\n key={index}\n className=\"flex items-center gap-3 border border-border px-4 py-3 bg-surface-1\"\n >\n {/* Thumbnail or icon */}\n {item.previewUrl ? (\n <img\n src={item.previewUrl}\n alt={item.file.name}\n className=\"w-20 h-20 object-cover border border-border bg-surface-1 shrink-0\"\n />\n ) : (\n <div className=\"w-10 h-10 flex items-center justify-center bg-surface-2 shrink-0 text-muted-foreground text-lg\">\n ◆\n </div>\n )}\n\n {/* File info */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-foreground truncate\">{item.file.name}</p>\n <p className=\"font-['Orbitron',monospace] text-[11px] text-muted-foreground/70\">\n {(item.file.size / 1024 / 1024).toFixed(1)} MB\n </p>\n\n {/* Per-file progress bar */}\n {item.status === \"uploading\" && (\n <div className=\"mt-2 h-[3px] bg-surface-2 w-full\">\n <div\n className=\"h-full bg-primary transition-all duration-300\"\n style={{ width: `${item.progress}%` }}\n />\n </div>\n )}\n {item.status === \"done\" && (\n <div className=\"mt-2 h-[3px] bg-ef-green w-full\" />\n )}\n {item.status === \"error\" && (\n <>\n <div className=\"mt-2 h-[3px] bg-destructive w-full\" />\n {item.error && (\n <p className=\"mt-1 text-[11px] text-destructive font-mono\">{item.error}</p>\n )}\n </>\n )}\n </div>\n\n {/* Percentage or status */}\n <div className=\"shrink-0 text-right\">\n {item.status === \"uploading\" && (\n <span className=\"font-['Orbitron',monospace] text-[11px] text-muted-foreground min-w-[36px] block text-right\">\n {item.progress}%\n </span>\n )}\n {item.status === \"done\" && (\n <span className=\"text-ef-green text-sm\">✓</span>\n )}\n {item.status === \"error\" && (\n <span className=\"text-destructive text-sm\">✕</span>\n )}\n </div>\n\n {/* Remove button — always shows ✕ so users can remove after upload */}\n <button\n type=\"button\"\n onClick={() => removeFile(index)}\n className=\"w-6 h-6 flex items-center justify-center shrink-0 text-muted-foreground/70 hover:text-destructive transition-colors cursor-pointer\"\n aria-label={`Remove ${item.file.name}`}\n >\n ✕\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n },\n);\nFileUpload.displayName = \"FileUpload\";\n\nexport { FileUpload };\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface BottomSheetProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n children: React.ReactNode;\n maxHeight?: string;\n /** Snap points as fraction of viewport height (0-1). Default: [0.5] */\n snapPoints?: number[];\n /** Initial snap point index (into the snapPoints array). Default: 0 */\n initialSnap?: number;\n className?: string;\n}\n\n/** Pixel threshold: if dragged down further than this, dismiss instead of snapping */\nconst DISMISS_THRESHOLD = 120;\n\n/**\n * Find the snap point closest to the current sheet height (in px).\n * Returns the snap height in pixels.\n */\nfunction closestSnapHeight(\n currentHeightPx: number,\n snapHeightsPx: number[],\n): number {\n let closest = snapHeightsPx[0];\n let minDist = Math.abs(currentHeightPx - closest);\n for (let i = 1; i < snapHeightsPx.length; i++) {\n const dist = Math.abs(currentHeightPx - snapHeightsPx[i]);\n if (dist < minDist) {\n minDist = dist;\n closest = snapHeightsPx[i];\n }\n }\n return closest;\n}\n\nconst BottomSheet = ({\n open,\n onClose,\n title,\n children,\n maxHeight = \"85vh\",\n snapPoints = [0.5],\n initialSnap = 0,\n className,\n}: BottomSheetProps) => {\n const [mounted, setMounted] = React.useState(false);\n const [visible, setVisible] = React.useState(false);\n\n const [dragOffset, setDragOffset] = React.useState(0);\n const [isDragging, setIsDragging] = React.useState(false);\n const startYRef = React.useRef(0);\n const sheetRef = React.useRef<HTMLDivElement>(null);\n\n const hasMultipleSnaps = snapPoints.length > 1;\n const clampedInitial = Math.min(initialSnap, snapPoints.length - 1);\n const [activeSnapIndex, setActiveSnapIndex] = React.useState(clampedInitial);\n\n React.useEffect(() => {\n if (open) {\n setActiveSnapIndex(Math.min(initialSnap, snapPoints.length - 1));\n setDragOffset(0);\n }\n }, [open, initialSnap, snapPoints.length]);\n\n React.useEffect(() => {\n if (open) {\n setMounted(true);\n const raf = requestAnimationFrame(() => setVisible(true));\n return () => cancelAnimationFrame(raf);\n } else {\n setVisible(false);\n const t = setTimeout(() => setMounted(false), 350);\n return () => clearTimeout(t);\n }\n }, [open]);\n\n React.useEffect(() => {\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n if (open) document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [open, onClose]);\n\n // ── Pointer handlers for drag handle ──────────────────────────────────\n const handlePointerDown = React.useCallback(\n (e: React.PointerEvent) => {\n e.currentTarget.setPointerCapture(e.pointerId);\n startYRef.current = e.clientY;\n setIsDragging(true);\n },\n [],\n );\n\n const handlePointerMove = React.useCallback(\n (e: React.PointerEvent) => {\n if (!isDragging) return;\n const delta = Math.max(0, e.clientY - startYRef.current);\n setDragOffset(delta);\n },\n [isDragging],\n );\n\n const handlePointerUp = React.useCallback(() => {\n if (!isDragging) return;\n setIsDragging(false);\n\n if (dragOffset > DISMISS_THRESHOLD) {\n setDragOffset(0);\n onClose();\n } else if (hasMultipleSnaps && dragOffset > 0) {\n const vh = window.innerHeight;\n const snapHeightsPx = snapPoints.map((sp) => sp * vh);\n const currentSnapHeight = snapHeightsPx[activeSnapIndex];\n const effectiveHeight = currentSnapHeight - dragOffset;\n const newHeight = closestSnapHeight(effectiveHeight, snapHeightsPx);\n const newIndex = snapHeightsPx.indexOf(newHeight);\n if (newIndex !== -1) {\n setActiveSnapIndex(newIndex);\n }\n setDragOffset(0);\n } else {\n setDragOffset(0);\n }\n }, [isDragging, dragOffset, onClose, hasMultipleSnaps, snapPoints, activeSnapIndex]);\n\n const handlePointerCancel = React.useCallback(() => {\n setIsDragging(false);\n setDragOffset(0);\n }, []);\n\n if (!mounted) return null;\n\n const sheetStyle: React.CSSProperties = hasMultipleSnaps\n ? { height: `${snapPoints[activeSnapIndex] * 100}vh`, maxHeight }\n : { maxHeight };\n\n return ReactDOM.createPortal(\n <div className=\"fixed inset-0 z-overlay flex flex-col justify-end\">\n {/* Backdrop — always dark for proper contrast in both light and dark modes */}\n <div\n className={cn(\n \"absolute inset-0 bg-black/60 transition-opacity duration-300\",\n visible ? \"opacity-100\" : \"opacity-0\",\n )}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n\n {/* Sheet */}\n <div\n ref={sheetRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title ?? \"Bottom sheet\"}\n style={{\n ...sheetStyle,\n transform: visible\n ? `translateY(${dragOffset}px)`\n : \"translateY(100%)\",\n }}\n className={cn(\n \"relative bg-surface-1 border-t border-border w-full flex flex-col rounded-none\",\n isDragging\n ? \"transition-none\"\n : \"transition-[transform,height] duration-300 ease-out\",\n className,\n )}\n >\n {/* Drag handle — interactive for swipe gestures */}\n <div\n className=\"w-full py-3 flex justify-center cursor-grab active:cursor-grabbing touch-none shrink-0\"\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerCancel}\n aria-label=\"Drag to resize or dismiss\"\n role=\"separator\"\n >\n <div className=\"w-12 h-1 bg-border/50 rounded-full\" />\n </div>\n\n {title && (\n <div className=\"px-4 pb-3 border-b border-border shrink-0\">\n <h2 className=\"font-display text-sm font-semibold uppercase tracking-wider text-foreground\">\n {title}\n </h2>\n </div>\n )}\n\n <div className=\"overflow-y-auto flex-1 p-4\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n};\n\nBottomSheet.displayName = \"BottomSheet\";\n\nexport { BottomSheet };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface CarouselProps extends React.HTMLAttributes<HTMLDivElement> {\n autoPlay?: boolean;\n autoPlayInterval?: number;\n showDots?: boolean;\n showArrows?: boolean;\n loop?: boolean;\n}\n\nexport type CarouselItemProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CarouselItem = React.forwardRef<HTMLDivElement, CarouselItemProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\"shrink-0 w-full\", className)}\n style={{ scrollSnapAlign: \"start\" }}\n {...props}\n />\n ),\n);\nCarouselItem.displayName = \"CarouselItem\";\n\nconst Carousel = React.forwardRef<HTMLDivElement, CarouselProps>(\n (\n {\n autoPlay,\n autoPlayInterval = 4000,\n showDots = true,\n showArrows = true,\n loop,\n children,\n className,\n ...props\n },\n ref,\n ) => {\n const trackRef = React.useRef<HTMLDivElement>(null);\n const [current, setCurrent] = React.useState(0);\n\n const items = React.Children.toArray(children);\n const count = items.length;\n\n const scrollTo = React.useCallback(\n (index: number) => {\n let next = index;\n if (loop) {\n next = ((index % count) + count) % count;\n } else {\n next = Math.max(0, Math.min(index, count - 1));\n }\n setCurrent(next);\n const track = trackRef.current;\n if (!track) return;\n const child = track.children[next] as HTMLElement;\n if (child) {\n track.scrollTo({ left: child.offsetLeft, behavior: \"smooth\" });\n }\n },\n [count, loop],\n );\n\n React.useEffect(() => {\n if (!autoPlay || count <= 1) return;\n const timer = setInterval(() => scrollTo(current + 1), autoPlayInterval);\n return () => clearInterval(timer);\n }, [autoPlay, autoPlayInterval, current, count, scrollTo]);\n\n const handleScroll = React.useCallback(() => {\n const track = trackRef.current;\n if (!track) return;\n const index = Math.round(track.scrollLeft / track.clientWidth);\n setCurrent(index);\n }, []);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n scrollTo(current - 1);\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault();\n scrollTo(current + 1);\n }\n },\n [current, scrollTo],\n );\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={`Carousel, slide ${current + 1} of ${count}`}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={cn(\"relative focus:outline-none focus-visible:ring-1 focus-visible:ring-primary/40\", className)}\n {...props}\n >\n {/* Track */}\n <div\n ref={trackRef}\n onScroll={handleScroll}\n className=\"flex overflow-x-hidden snap-x snap-mandatory\"\n style={{\n scrollSnapType: \"x mandatory\",\n scrollbarWidth: \"none\",\n msOverflowStyle: \"none\",\n }}\n >\n {React.Children.map(children, (child, i) =>\n React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement, {\n \"aria-label\": `Slide ${i + 1} of ${count}`,\n } as Record<string, unknown>)\n : child,\n )}\n </div>\n\n {/* Arrows */}\n {showArrows && count > 1 && (\n <>\n <button\n type=\"button\"\n onClick={() => scrollTo(current - 1)}\n disabled={!loop && current === 0}\n aria-label=\"Previous slide\"\n className={cn(\n \"absolute left-2 top-1/2 -translate-y-1/2 z-raised\",\n \"w-11 h-11 flex items-center justify-center\",\n \"bg-surface-2/90 backdrop-blur-sm border border-border\",\n \"text-muted-foreground hover:text-primary hover:bg-primary/[0.08] hover:border-primary/30\",\n \"transition-all duration-150\",\n \"disabled:opacity-30 disabled:cursor-not-allowed\",\n )}\n >\n ◂\n </button>\n <button\n type=\"button\"\n onClick={() => scrollTo(current + 1)}\n disabled={!loop && current === count - 1}\n aria-label=\"Next slide\"\n className={cn(\n \"absolute right-2 top-1/2 -translate-y-1/2 z-raised\",\n \"w-11 h-11 flex items-center justify-center\",\n \"bg-surface-2/90 backdrop-blur-sm border border-border\",\n \"text-muted-foreground hover:text-primary hover:bg-primary/[0.08] hover:border-primary/30\",\n \"transition-all duration-150\",\n \"disabled:opacity-30 disabled:cursor-not-allowed\",\n )}\n >\n ▸\n </button>\n </>\n )}\n\n {/* Dots */}\n {showDots && count > 1 && (\n <div\n role=\"tablist\"\n aria-label=\"Carousel slides\"\n className=\"flex justify-center gap-2 mt-3\"\n >\n {Array.from({ length: count }, (_, i) => (\n <button\n key={i}\n type=\"button\"\n role=\"tab\"\n onClick={() => scrollTo(i)}\n aria-label={`Go to slide ${i + 1}`}\n aria-selected={i === current}\n className={cn(\n \"w-2 h-2 transition-all duration-200\",\n \"[clip-path:polygon(50%_0%,100%_50%,50%_100%,0%_50%)]\",\n i === current\n ? \"bg-primary scale-125\"\n : \"bg-muted-foreground/30 hover:bg-muted-foreground/60\",\n )}\n />\n ))}\n </div>\n )}\n </div>\n );\n },\n);\nCarousel.displayName = \"Carousel\";\n\nexport { Carousel, CarouselItem };\n","import * as React from \"react\";\nimport {\n Panel,\n Group as PanelGroup,\n Separator as PanelResizeHandle,\n} from \"react-resizable-panels\";\nimport { cn } from \"../../lib/utils\";\n\ninterface ResizeHandleProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"horizontal\" | \"vertical\";\n}\n\nconst ResizeHandle = ({ direction = \"horizontal\", className, ...props }: ResizeHandleProps) => (\n <PanelResizeHandle\n className={cn(\n \"group relative flex items-center justify-center bg-border transition-colors duration-150\",\n \"hover:bg-primary/40 focus:outline-none focus:bg-primary/40\",\n direction === \"horizontal\" ? \"w-1 cursor-col-resize\" : \"h-1 cursor-row-resize\",\n className,\n )}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n \"text-[8px] text-muted-foreground group-hover:text-primary transition-colors\",\n direction === \"horizontal\" ? \"rotate-0\" : \"rotate-90\",\n )}\n >\n ◆\n </span>\n </PanelResizeHandle>\n);\n\nResizeHandle.displayName = \"ResizeHandle\";\n\nexport { Panel, PanelGroup, PanelResizeHandle, ResizeHandle };\n","export {\n LineChart,\n BarChart,\n AreaChart,\n PieChart,\n RadarChart as RechartsRadarChart,\n} from \"recharts\";\nexport {\n Line,\n Bar,\n Area,\n Pie,\n Radar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n Cell,\n} from \"recharts\";\n\nexport const CHART_COLORS = [\n \"var(--chart-1)\",\n \"var(--chart-2)\",\n \"var(--chart-3)\",\n \"var(--chart-4)\",\n \"var(--chart-5)\",\n \"var(--chart-6)\",\n \"var(--chart-7)\",\n \"var(--chart-8)\",\n] as const;\n\nexport const endfieldChartTheme = {\n backgroundColor: \"transparent\",\n style: { fontFamily: \"JetBrains Mono, monospace\", fontSize: 11 },\n tick: { fill: \"hsl(var(--muted-foreground))\" },\n grid: { stroke: \"hsl(var(--border))\" },\n} as const;\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/* ─── Types ──────────────────────────────────────────────────────────────── */\nexport interface RichTextEditorProps {\n value?: string;\n onChange?: (value: string) => void;\n placeholder?: string;\n maxLength?: number;\n minHeight?: number;\n mode?: \"markdown\" | \"preview\";\n onModeChange?: (mode: \"markdown\" | \"preview\") => void;\n disabled?: boolean;\n className?: string;\n id?: string;\n}\n\n/* ─── Helpers ────────────────────────────────────────────────────────────── */\n/** Minimal markdown → HTML renderer for the preview pane */\nfunction renderMarkdown(md: string): string {\n return md\n .replace(/^### (.+)$/gm, \"<h3>$1</h3>\")\n .replace(/^## (.+)$/gm, \"<h2>$1</h2>\")\n .replace(/^# (.+)$/gm, \"<h1>$1</h1>\")\n .replace(/^---$/gm, \"<hr />\")\n .replace(/^> (.+)$/gm, \"<blockquote>$1</blockquote>\")\n .replace(/^\\d+\\. (.+)$/gm, \"<li>$1</li>\")\n .replace(/^[-*] (.+)$/gm, \"<li class=\\\"ul\\\">$1</li>\")\n .replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, \"<strong><em>$1</em></strong>\")\n .replace(/\\*\\*(.+?)\\*\\*/g, \"<strong>$1</strong>\")\n .replace(/\\*(.+?)\\*/g, \"<em>$1</em>\")\n .replace(/__(.+?)__/g, \"<u>$1</u>\")\n .replace(/~~(.+?)~~/g, \"<s>$1</s>\")\n .replace(/`(.+?)`/g, \"<code>$1</code>\")\n .replace(/\\[(.+?)\\]\\((.+?)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>')\n .replace(/\\n\\n+/g, \"</p><p>\")\n .replace(/^(?!<[hbloius])(.+)$/gm, (line) => {\n if (line.trim() === \"\") return \"\";\n if (line.startsWith(\"<\")) return line;\n return `<p>${line}</p>`;\n });\n}\n\n/** Wrap selected text in textarea with markdown syntax */\nfunction wrapSelection(\n textarea: HTMLTextAreaElement,\n before: string,\n after: string = before,\n placeholder = \"\",\n) {\n const { selectionStart: start, selectionEnd: end, value } = textarea;\n const selected = value.slice(start, end) || placeholder;\n const newVal = value.slice(0, start) + before + selected + after + value.slice(end);\n const newCursor = start + before.length + selected.length;\n return { newVal, newCursor };\n}\n\n/** Insert at cursor, on a new line if needed */\nfunction insertBlock(\n textarea: HTMLTextAreaElement,\n block: string,\n) {\n const { selectionStart: start, value } = textarea;\n const needsNewline = start > 0 && value[start - 1] !== \"\\n\";\n const insertion = (needsNewline ? \"\\n\" : \"\") + block + \"\\n\";\n const newVal = value.slice(0, start) + insertion + value.slice(start);\n const newCursor = start + insertion.length;\n return { newVal, newCursor };\n}\n\n/* ─── Toolbar button ─────────────────────────────────────────────────────── */\ninterface ToolbarBtnProps {\n label: string;\n title?: string;\n active?: boolean;\n onClick: () => void;\n}\nconst ToolbarBtn = ({ label, title, active, onClick }: ToolbarBtnProps) => (\n <button\n type=\"button\"\n title={title ?? label}\n onClick={onClick}\n className={cn(\n \"w-8 h-8 flex items-center justify-center text-[13px] font-['JetBrains_Mono',monospace]\",\n \"text-muted-foreground hover:text-foreground hover:bg-surface-hover transition-all duration-150 select-none\",\n active && \"text-primary bg-primary/[0.08]\",\n )}\n aria-pressed={active}\n >\n {label}\n </button>\n);\n\nconst ToolbarSep = () => (\n <div className=\"w-px h-5 bg-border mx-1.5 shrink-0\" aria-hidden=\"true\" />\n);\n\n/* ─── Component ──────────────────────────────────────────────────────────── */\nconst RichTextEditor = React.forwardRef<HTMLDivElement, RichTextEditorProps>(\n (\n {\n value: controlledValue,\n onChange,\n placeholder = \"Type your content here...\",\n maxLength,\n minHeight = 240,\n mode: controlledMode,\n onModeChange,\n disabled,\n className,\n id,\n },\n ref,\n ) => {\n const [internalValue, setInternalValue] = React.useState(controlledValue ?? \"\");\n const [internalMode, setInternalMode] = React.useState<\"markdown\" | \"preview\">(\n controlledMode ?? \"markdown\",\n );\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n\n const value = controlledValue ?? internalValue;\n const mode = controlledMode ?? internalMode;\n\n React.useEffect(() => {\n if (controlledValue !== undefined) setInternalValue(controlledValue);\n }, [controlledValue]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const next = e.target.value;\n if (maxLength && next.length > maxLength) return;\n if (controlledValue === undefined) setInternalValue(next);\n onChange?.(next);\n };\n\n const handleMode = (m: \"markdown\" | \"preview\") => {\n if (controlledMode === undefined) setInternalMode(m);\n onModeChange?.(m);\n };\n\n const applyInline = (before: string, after: string = before, ph = \"text\") => {\n const ta = textareaRef.current;\n if (!ta || disabled) return;\n const { newVal, newCursor } = wrapSelection(ta, before, after, ph);\n const next = maxLength ? newVal.slice(0, maxLength) : newVal;\n if (controlledValue === undefined) setInternalValue(next);\n onChange?.(next);\n requestAnimationFrame(() => {\n ta.focus();\n ta.setSelectionRange(newCursor, newCursor);\n });\n };\n\n const applyBlock = (block: string) => {\n const ta = textareaRef.current;\n if (!ta || disabled) return;\n const { newVal, newCursor } = insertBlock(ta, block);\n const next = maxLength ? newVal.slice(0, maxLength) : newVal;\n if (controlledValue === undefined) setInternalValue(next);\n onChange?.(next);\n requestAnimationFrame(() => {\n ta.focus();\n ta.setSelectionRange(newCursor, newCursor);\n });\n };\n\n const charCount = value.length;\n\n return (\n <div\n ref={ref}\n id={id}\n className={cn(\n \"flex flex-col\",\n disabled && \"opacity-38 pointer-events-none\",\n className,\n )}\n >\n {/* Toolbar */}\n <div className=\"flex items-center gap-0.5 flex-wrap px-3 py-2 bg-surface-1 border border-border border-b-0\">\n {/* Text formatting */}\n <ToolbarBtn label=\"B\" title=\"Bold (**text**)\" onClick={() => applyInline(\"**\", \"**\", \"bold\")} />\n <ToolbarBtn label=\"I\" title=\"Italic (*text*)\" onClick={() => applyInline(\"*\", \"*\", \"italic\")} />\n <ToolbarBtn label=\"U\" title=\"Underline (__text__)\" onClick={() => applyInline(\"__\", \"__\", \"text\")} />\n <ToolbarBtn label=\"S\" title=\"Strikethrough (~~text~~)\" onClick={() => applyInline(\"~~\", \"~~\", \"text\")} />\n\n <ToolbarSep />\n\n {/* Headings */}\n <ToolbarBtn label=\"H1\" title=\"Heading 1\" onClick={() => applyBlock(\"# Heading 1\")} />\n <ToolbarBtn label=\"H2\" title=\"Heading 2\" onClick={() => applyBlock(\"## Heading 2\")} />\n <ToolbarBtn label=\"H3\" title=\"Heading 3\" onClick={() => applyBlock(\"### Heading 3\")} />\n\n <ToolbarSep />\n\n {/* Block elements */}\n <ToolbarBtn label=\"❝\" title=\"Blockquote\" onClick={() => applyBlock(\"> Quote\")} />\n <ToolbarBtn label=\"≡\" title=\"Unordered list\" onClick={() => applyBlock(\"- Item\")} />\n <ToolbarBtn label=\"≡·\" title=\"Ordered list\" onClick={() => applyBlock(\"1. Item\")} />\n\n <ToolbarSep />\n\n {/* Insert */}\n <ToolbarBtn label=\"url\" title=\"Link\" onClick={() => applyInline(\"[\", \"](https://)\", \"link text\")} />\n <ToolbarBtn label=\"img\" title=\"Image\" onClick={() => applyInline(\"\", \"alt text\")} />\n <ToolbarBtn label=\"⎯\" title=\"Horizontal divider (---)\" onClick={() => applyBlock(\"---\")} />\n <ToolbarBtn label=\"`\" title=\"Inline code\" onClick={() => applyInline(\"`\", \"`\", \"code\")} />\n </div>\n\n {/* Content area */}\n {mode === \"markdown\" ? (\n <textarea\n ref={textareaRef}\n value={value}\n onChange={handleChange}\n placeholder={placeholder}\n disabled={disabled}\n spellCheck\n className={cn(\n \"w-full resize-y bg-surface-0 border border-border\",\n \"text-foreground font-['JetBrains_Mono',monospace] text-sm leading-relaxed\",\n \"px-5 py-4 outline-none transition-colors duration-150\",\n \"placeholder:text-muted-foreground/40\",\n \"focus:border-primary\",\n \"focus:[&]:border-primary\",\n )}\n style={{ minHeight: `${minHeight}px` }}\n aria-multiline=\"true\"\n aria-label=\"Rich text editor content\"\n />\n ) : (\n /* Preview pane */\n <div\n className={cn(\n \"w-full bg-surface-0 border border-border\",\n \"px-5 py-4 text-foreground text-base leading-[1.65]\",\n \"prose-endfield\",\n \"[&_h1]:font-display [&_h1]:text-2xl [&_h1]:font-bold [&_h1]:uppercase [&_h1]:text-foreground [&_h1]:mt-6 [&_h1]:mb-3\",\n \"[&_h2]:font-display [&_h2]:text-xl [&_h2]:font-semibold [&_h2]:uppercase [&_h2]:text-foreground [&_h2]:mt-5 [&_h2]:mb-2.5\",\n \"[&_h3]:font-display [&_h3]:text-lg [&_h3]:font-semibold [&_h3]:text-foreground [&_h3]:mt-4 [&_h3]:mb-2\",\n \"[&_blockquote]:border-l-[3px] [&_blockquote]:border-primary [&_blockquote]:pl-4 [&_blockquote]:py-2 [&_blockquote]:bg-primary/[0.03] [&_blockquote]:text-foreground/70\",\n \"[&_a]:text-[hsl(var(--ef-blue-light))] [&_a]:underline\",\n \"[&_code]:font-['JetBrains_Mono',monospace] [&_code]:text-sm [&_code]:bg-surface-2 [&_code]:px-1.5 [&_code]:py-0.5\",\n \"[&_ul_li]:list-disc [&_ul_li]:ml-5 [&_ul_li]:marker:text-primary\",\n \"[&_ol_li]:list-decimal [&_ol_li]:ml-5\",\n \"[&_hr]:border-none [&_hr]:h-px [&_hr]:bg-gradient-to-r [&_hr]:from-transparent [&_hr]:via-primary/30 [&_hr]:to-transparent [&_hr]:my-6\",\n \"[&_p]:mb-3\",\n \"[&_strong]:text-foreground [&_strong]:font-bold\",\n \"[&_em]:italic\",\n \"[&_u]:underline\",\n \"[&_s]:line-through [&_s]:text-muted-foreground/70\",\n )}\n style={{ minHeight: `${minHeight}px` }}\n dangerouslySetInnerHTML={{\n __html: value ? renderMarkdown(value) : `<p class=\"text-muted-foreground/40\">${placeholder}</p>`,\n }}\n aria-label=\"Preview\"\n aria-live=\"polite\"\n />\n )}\n\n {/* Footer */}\n <div className=\"flex items-center justify-between px-3 py-2 bg-surface-1 border border-border border-t-0 text-[12px] text-muted-foreground/70\">\n <span>\n {charCount.toLocaleString()}\n {maxLength ? ` / ${maxLength.toLocaleString()}` : \"\"}{\" \"}\n <span className=\"opacity-50\">characters</span>\n </span>\n\n {/* Mode toggle */}\n <div className=\"flex items-center gap-0\">\n <button\n type=\"button\"\n onClick={() => handleMode(\"markdown\")}\n className={cn(\n \"font-display text-[11px] uppercase tracking-wider px-3 py-1 transition-colors\",\n mode === \"markdown\"\n ? \"text-primary border-b border-primary\"\n : \"text-muted-foreground/70 hover:text-muted-foreground\",\n )}\n >\n MARKDOWN\n </button>\n <button\n type=\"button\"\n onClick={() => handleMode(\"preview\")}\n className={cn(\n \"font-display text-[11px] uppercase tracking-wider px-3 py-1 transition-colors\",\n mode === \"preview\"\n ? \"text-primary border-b border-primary\"\n : \"text-muted-foreground/70 hover:text-muted-foreground\",\n )}\n >\n PREVIEW\n </button>\n </div>\n </div>\n </div>\n );\n },\n);\nRichTextEditor.displayName = \"RichTextEditor\";\n\nexport { RichTextEditor };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── FooterColumn ─────────────────────────────────────────────────────────── */\n\nexport interface FooterColumnProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n}\n\nconst FooterColumn = React.forwardRef<HTMLDivElement, FooterColumnProps>(\n ({ title, className, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"space-y-3\", className)} {...props}>\n <h3 className=\"font-display text-[12px] font-bold tracking-[0.15em] uppercase text-muted-foreground\">\n {title}\n </h3>\n <ul className=\"space-y-2\">{children}</ul>\n </div>\n ),\n);\nFooterColumn.displayName = \"FooterColumn\";\n\n/* ── FooterLink ───────────────────────────────────────────────────────────── */\n\nexport interface FooterLinkProps\n extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n external?: boolean;\n}\n\nconst FooterLink = React.forwardRef<HTMLAnchorElement, FooterLinkProps>(\n ({ external, className, children, ...props }, ref) => (\n <li>\n <a\n ref={ref}\n target={external ? \"_blank\" : undefined}\n rel={external ? \"noopener noreferrer\" : undefined}\n className={cn(\n \"font-body text-sm text-ef-gray-mid hover:text-primary transition-colors duration-150 cursor-pointer\",\n className,\n )}\n {...props}\n >\n {children}\n </a>\n </li>\n ),\n);\nFooterLink.displayName = \"FooterLink\";\n\n/* ── Footer ───────────────────────────────────────────────────────────────── */\n\nexport interface FooterProps extends React.HTMLAttributes<HTMLElement> {\n brand?: string;\n tagline?: string;\n copyright?: string;\n note?: string;\n}\n\nconst Footer = React.forwardRef<HTMLElement, FooterProps>(\n ({ brand, tagline, copyright, note, className, children, ...props }, ref) => (\n <footer\n ref={ref}\n className={cn(\n \"bg-background border-t border-border\",\n className,\n )}\n {...props}\n >\n {/* Main columns grid */}\n {children && (\n <div className=\"max-w-5xl mx-auto px-6 py-12\">\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-10\">\n {children}\n </div>\n </div>\n )}\n\n {/* Bottom bar */}\n {(brand || copyright || note) && (\n <div className=\"border-t border-border\">\n <div className=\"max-w-5xl mx-auto px-6 py-6 flex flex-col sm:flex-row items-center justify-between gap-3\">\n {brand && (\n <div>\n <p className=\"font-display text-xs font-bold tracking-[0.1em] uppercase text-foreground\">\n {brand}\n </p>\n {tagline && (\n <p className=\"font-mono text-[10px] text-muted-foreground mt-0.5\">\n {tagline}\n </p>\n )}\n </div>\n )}\n {copyright && (\n <p className=\"font-mono text-xs text-ef-gray-mid\">{copyright}</p>\n )}\n </div>\n {note && (\n <div className=\"max-w-5xl mx-auto px-6 pb-6\">\n <p className=\"font-mono text-[9px] text-muted-foreground/40 text-center leading-relaxed\">\n {note}\n </p>\n </div>\n )}\n </div>\n )}\n </footer>\n ),\n);\nFooter.displayName = \"Footer\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Footer, FooterColumn, FooterLink };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Table (responsive wrapper) ─────────────────────────────────────────── */\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-x-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n));\nTable.displayName = \"Table\";\n\n/* ── TableHeader ─────────────────────────────────────────────────────────── */\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n));\nTableHeader.displayName = \"TableHeader\";\n\n/* ── TableBody ───────────────────────────────────────────────────────────── */\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n));\nTableBody.displayName = \"TableBody\";\n\n/* ── TableFooter ─────────────────────────────────────────────────────────── */\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t border-border bg-surface-0 font-display text-[11px] uppercase tracking-[0.08em] text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\n/* ── TableRow ────────────────────────────────────────────────────────────── */\n\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n selected?: boolean;\n}\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n ({ className, selected, ...props }, ref) => (\n <tr\n ref={ref}\n aria-selected={selected || undefined}\n className={cn(\n \"border-b border-border/50 transition-colors\",\n \"hover:bg-primary/[0.03]\",\n \"even:bg-foreground/[0.015]\",\n selected && \"bg-primary/[0.06]\",\n \"data-[state=selected]:bg-primary/[0.06]\",\n className,\n )}\n {...props}\n />\n ),\n);\nTableRow.displayName = \"TableRow\";\n\n/* ── TableHead (th) ──────────────────────────────────────────────────────── */\n\nexport type SortDirection = \"asc\" | \"desc\" | null;\n\nexport interface TableHeadProps\n extends React.ThHTMLAttributes<HTMLTableCellElement> {\n sortable?: boolean;\n sortDirection?: SortDirection;\n onSort?: () => void;\n}\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, sortable, sortDirection, onSort, children, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"font-display text-[11px] font-bold tracking-[0.12em] uppercase text-muted-foreground\",\n \"py-3 px-4 text-left border-b border-border bg-surface-0 sticky top-0 z-10\",\n sortable &&\n \"cursor-pointer select-none hover:text-foreground transition-colors\",\n className,\n )}\n onClick={sortable ? onSort : undefined}\n aria-sort={\n sortDirection === \"asc\"\n ? \"ascending\"\n : sortDirection === \"desc\"\n ? \"descending\"\n : undefined\n }\n {...props}\n >\n <span className=\"inline-flex items-center gap-1\">\n {children}\n {sortable && (\n <span className=\"text-[9px] leading-none\" aria-hidden=\"true\">\n {sortDirection === \"asc\" ? (\n <span className=\"text-primary\">▲</span>\n ) : sortDirection === \"desc\" ? (\n <span className=\"text-primary\">▼</span>\n ) : (\n <span className=\"text-muted-foreground/50\">▲▼</span>\n )}\n </span>\n )}\n </span>\n </th>\n ),\n);\nTableHead.displayName = \"TableHead\";\n\n/* ── TableCell (td) ──────────────────────────────────────────────────────── */\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n \"py-3 px-4 text-foreground border-b border-border/50 align-middle\",\n className,\n )}\n {...props}\n />\n));\nTableCell.displayName = \"TableCell\";\n\n/* ── TableCaption ────────────────────────────────────────────────────────── */\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\n \"mt-4 font-display text-[11px] tracking-[0.08em] uppercase text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\n/* ── TableEmpty (empty state slot) ───────────────────────────────────────── */\n\nexport interface TableEmptyProps extends React.HTMLAttributes<HTMLTableRowElement> {\n colSpan: number;\n}\n\nconst TableEmpty = React.forwardRef<HTMLTableRowElement, TableEmptyProps>(\n ({ colSpan, className, children, ...props }, ref) => (\n <tr ref={ref} {...props}>\n <td\n colSpan={colSpan}\n className={cn(\n \"py-12 text-center text-muted-foreground font-display text-[11px] uppercase tracking-wider\",\n className,\n )}\n >\n {children ?? (\n <span className=\"flex flex-col items-center gap-2\">\n <span className=\"text-2xl text-muted-foreground/30\">◇</span>\n <span>NO DATA AVAILABLE</span>\n </span>\n )}\n </td>\n </tr>\n ),\n);\nTableEmpty.displayName = \"TableEmpty\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n TableEmpty,\n};\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Diamond Bullet List ─────────────────────────────────────────────────── */\n\nexport type ListProps = React.HTMLAttributes<HTMLUListElement>;\n\nconst List = React.forwardRef<HTMLUListElement, ListProps>(\n ({ className, ...props }, ref) => (\n <ul ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n ),\n);\nList.displayName = \"List\";\n\n/* ── ListItem (diamond bullet) ───────────────────────────────────────────── */\n\nexport type ListItemProps = React.HTMLAttributes<HTMLLIElement>;\n\nconst ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n ({ className, children, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\n \"flex items-start gap-2.5 pl-5 relative text-sm text-foreground\",\n className,\n )}\n {...props}\n >\n <span\n className=\"absolute left-0 top-[0.45em] text-[8px] text-primary leading-none select-none\"\n aria-hidden=\"true\"\n >\n ◆\n </span>\n {children}\n </li>\n ),\n);\nListItem.displayName = \"ListItem\";\n\n/* ── Numbered List ───────────────────────────────────────────────────────── */\n\nexport type NumberedListProps = React.HTMLAttributes<HTMLOListElement>;\n\nconst NumberedList = React.forwardRef<HTMLOListElement, NumberedListProps>(\n ({ className, children, ...props }, ref) => {\n const items = React.Children.map(children, (child, index) => {\n if (!React.isValidElement(child)) return child;\n return React.cloneElement(\n child as React.ReactElement<{ _index?: number }>,\n {\n _index: index,\n },\n );\n });\n\n return (\n <ol ref={ref} className={cn(\"space-y-2\", className)} {...props}>\n {items}\n </ol>\n );\n },\n);\nNumberedList.displayName = \"NumberedList\";\n\n/* ── NumberedListItem ────────────────────────────────────────────────────── */\n\ninterface NumberedListItemProps extends React.HTMLAttributes<HTMLLIElement> {\n /** @internal Injected by NumberedList */\n _index?: number;\n}\n\nconst NumberedListItem = React.forwardRef<HTMLLIElement, NumberedListItemProps>(\n ({ className, children, _index = 0, ...props }, ref) => (\n <li\n ref={ref}\n className={cn(\"flex items-start gap-3 text-sm\", className)}\n {...props}\n >\n <span className=\"font-display text-[11px] text-primary font-bold leading-[1.5] select-none shrink-0\">\n {String(_index + 1).padStart(2, \"0\")}\n </span>\n <span className=\"text-foreground\">{children}</span>\n </li>\n ),\n);\nNumberedListItem.displayName = \"NumberedListItem\";\n\n/* ── Description List ────────────────────────────────────────────────────── */\n\nexport type DescriptionListProps = React.HTMLAttributes<HTMLDListElement>;\n\nconst DescriptionList = React.forwardRef<\n HTMLDListElement,\n DescriptionListProps\n>(({ className, ...props }, ref) => (\n <dl ref={ref} className={cn(\"space-y-3\", className)} {...props} />\n));\nDescriptionList.displayName = \"DescriptionList\";\n\n/* ── DescriptionTerm ─────────────────────────────────────────────────────── */\n\nconst DescriptionTerm = React.forwardRef<\n HTMLElement,\n React.HTMLAttributes<HTMLElement>\n>(({ className, ...props }, ref) => (\n <dt\n ref={ref}\n className={cn(\n \"font-display text-[11px] font-bold tracking-[0.1em] uppercase text-muted-foreground\",\n className,\n )}\n {...props}\n />\n));\nDescriptionTerm.displayName = \"DescriptionTerm\";\n\n/* ── DescriptionDetail ───────────────────────────────────────────────────── */\n\nconst DescriptionDetail = React.forwardRef<\n HTMLElement,\n React.HTMLAttributes<HTMLElement>\n>(({ className, ...props }, ref) => (\n <dd\n ref={ref}\n className={cn(\"text-sm text-foreground\", className)}\n {...props}\n />\n));\nDescriptionDetail.displayName = \"DescriptionDetail\";\n\n/* ── Link List ───────────────────────────────────────────────────────────── */\n\nexport type LinkListProps = React.HTMLAttributes<HTMLUListElement>;\n\nconst LinkList = React.forwardRef<HTMLUListElement, LinkListProps>(\n ({ className, ...props }, ref) => (\n <ul\n ref={ref}\n className={cn(\"divide-y divide-border\", className)}\n {...props}\n />\n ),\n);\nLinkList.displayName = \"LinkList\";\n\n/* ── LinkListItem ────────────────────────────────────────────────────────── */\n\nexport interface LinkListItemProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n description?: string;\n}\n\nconst LinkListItem = React.forwardRef<HTMLAnchorElement, LinkListItemProps>(\n ({ className, children, description, ...props }, ref) => (\n <li>\n <a\n ref={ref}\n className={cn(\n \"group flex items-center justify-between py-3 px-4\",\n \"text-sm text-foreground transition-colors\",\n \"hover:bg-surface-hover hover:text-primary\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset\",\n className,\n )}\n {...props}\n >\n <div>\n <span>{children}</span>\n {description && (\n <p className=\"text-[12px] text-muted-foreground mt-0.5\">\n {description}\n </p>\n )}\n </div>\n <span\n className=\"text-muted-foreground/40 group-hover:text-primary transition-all duration-200 group-hover:translate-x-0.5 ml-2 shrink-0\"\n aria-hidden=\"true\"\n >\n →\n </span>\n </a>\n </li>\n ),\n);\nLinkListItem.displayName = \"LinkListItem\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport {\n List,\n ListItem,\n NumberedList,\n NumberedListItem,\n DescriptionList,\n DescriptionTerm,\n DescriptionDetail,\n LinkList,\n LinkListItem,\n};\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface StatProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string | number;\n label: string;\n trend?: \"up\" | \"down\" | \"neutral\";\n trendValue?: string;\n description?: string;\n}\n\n/* ── Stat ─────────────────────────────────────────────────────────────────── */\n\nconst Stat = React.forwardRef<HTMLDivElement, StatProps>(\n (\n { value, label, trend, trendValue, description, className, ...props },\n ref,\n ) => {\n const trendColor =\n trend === \"up\"\n ? \"text-ef-green\"\n : trend === \"down\"\n ? \"text-destructive\"\n : \"text-muted-foreground\";\n\n const trendIndicator =\n trend === \"up\" ? \"\\u25B2\" : trend === \"down\" ? \"\\u25BC\" : null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"group corner-brackets bg-surface-1 border border-border p-5 overflow-hidden\",\n className,\n )}\n {...props}\n >\n <p className=\"font-display text-[11px] font-bold tracking-[0.15em] uppercase text-muted-foreground mb-2\">\n {label}\n </p>\n\n <p className=\"font-display text-5xl font-bold text-primary leading-none truncate transition-all duration-300 group-hover:drop-shadow-[0_0_20px_rgba(255,212,41,0.3)]\">\n {value}\n </p>\n\n {trendValue && (\n <p className={cn(\"text-xs mt-2\", trendColor)}>\n {trendIndicator && (\n <span aria-hidden=\"true\">{trendIndicator} </span>\n )}\n <span>{trendValue}</span>\n </p>\n )}\n\n {description && (\n <p className=\"text-[12px] text-muted-foreground mt-1\">\n {description}\n </p>\n )}\n </div>\n );\n },\n);\nStat.displayName = \"Stat\";\n\n/* ── StatGrid ────────────────────────────────────────────────────────────── */\n\nexport type StatGridProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst StatGrid = React.forwardRef<HTMLDivElement, StatGridProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"grid gap-6\",\n \"grid-cols-[repeat(auto-fit,minmax(200px,1fr))]\",\n className,\n )}\n {...props}\n />\n ),\n);\nStatGrid.displayName = \"StatGrid\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { Stat, StatGrid };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type SortDirection = \"asc\" | \"desc\" | \"none\";\n\nexport interface SortOption {\n id: string;\n label: string;\n}\n\nexport interface SortControlProps {\n options: SortOption[];\n activeId?: string;\n direction?: SortDirection;\n onSortChange?: (id: string, direction: SortDirection) => void;\n className?: string;\n}\n\nconst SortControl = React.forwardRef<HTMLDivElement, SortControlProps>(\n ({ options, activeId, direction = \"none\", onSortChange, className }, ref) => {\n const handleClick = (id: string) => {\n if (!onSortChange) return;\n if (id === activeId) {\n // cycle: asc -> desc -> none\n if (direction === \"asc\") onSortChange(id, \"desc\");\n else if (direction === \"desc\") onSortChange(id, \"none\");\n else onSortChange(id, \"asc\");\n } else {\n onSortChange(id, \"asc\");\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-1 flex-wrap\", className)}\n >\n <span className=\"font-display text-[10px] uppercase tracking-widest text-muted-foreground/50 mr-1\">\n SORT\n </span>\n {options.map((opt) => {\n const isActive = opt.id === activeId && direction !== \"none\";\n return (\n <button\n key={opt.id}\n type=\"button\"\n onClick={() => handleClick(opt.id)}\n aria-pressed={isActive}\n className={cn(\n \"flex items-center px-3 py-1.5 font-display text-[11px] uppercase tracking-wider transition-all duration-150\",\n isActive\n ? \"text-primary border border-primary/40 bg-primary/[0.05]\"\n : \"text-muted-foreground hover:text-foreground border border-transparent hover:border-border\",\n )}\n >\n {opt.label}\n {isActive && (\n <span\n className=\"font-['Orbitron',monospace] text-[9px] ml-1\"\n aria-hidden=\"true\"\n >\n {direction === \"asc\" ? \"\\u25B2\" : \"\\u25BC\"}\n </span>\n )}\n </button>\n );\n })}\n </div>\n );\n },\n);\nSortControl.displayName = \"SortControl\";\n\nexport { SortControl };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface PullToRefreshProps {\n onRefresh: () => Promise<void>;\n /** Pull distance (px) to trigger refresh. Default: 60 */\n threshold?: number;\n /** Text shown while refreshing. Default: \"SYNCING...\" */\n refreshingLabel?: string;\n /** Text shown on complete. Default: \"UPDATED\" */\n completeLabel?: string;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\ntype PTRPhase = \"idle\" | \"pulling\" | \"threshold\" | \"refreshing\" | \"complete\";\n\nconst MAX_PULL = 120;\n\nconst PullToRefresh = React.forwardRef<HTMLDivElement, PullToRefreshProps>(\n (\n {\n onRefresh,\n threshold = 60,\n refreshingLabel = \"SYNCING...\",\n completeLabel = \"UPDATED\",\n disabled = false,\n className,\n children,\n },\n ref,\n ) => {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const startYRef = React.useRef<number | null>(null);\n const thresholdVibratedRef = React.useRef(false);\n\n const [phase, setPhase] = React.useState<PTRPhase>(\"idle\");\n const [distance, setDistance] = React.useState(0);\n\n const mergedRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n containerRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n },\n [ref],\n );\n\n const tryVibrate = React.useCallback((duration: number) => {\n try {\n navigator.vibrate?.(duration);\n } catch {\n /* empty */\n }\n }, []);\n\n const handleTouchStart = React.useCallback(\n (e: React.TouchEvent<HTMLDivElement>) => {\n if (disabled || phase === \"refreshing\" || phase === \"complete\") return;\n\n const container = containerRef.current;\n if (!container || container.scrollTop !== 0) return;\n\n startYRef.current = e.touches[0].clientY;\n thresholdVibratedRef.current = false;\n },\n [disabled, phase],\n );\n\n const handleTouchMove = React.useCallback(\n (e: React.TouchEvent<HTMLDivElement>) => {\n if (\n disabled ||\n startYRef.current === null ||\n phase === \"refreshing\" ||\n phase === \"complete\"\n )\n return;\n\n const currentY = e.touches[0].clientY;\n const diff = currentY - startYRef.current;\n\n if (diff <= 0) {\n setDistance(0);\n setPhase(\"idle\");\n return;\n }\n\n const clamped = Math.min(diff, MAX_PULL);\n setDistance(clamped);\n\n if (clamped >= threshold) {\n if (!thresholdVibratedRef.current) {\n tryVibrate(10);\n thresholdVibratedRef.current = true;\n }\n setPhase(\"threshold\");\n } else {\n setPhase(\"pulling\");\n }\n },\n [disabled, phase, threshold, tryVibrate],\n );\n\n const handleTouchEnd = React.useCallback(() => {\n if (disabled || startYRef.current === null) return;\n\n startYRef.current = null;\n\n if (phase === \"threshold\") {\n tryVibrate(20);\n setPhase(\"refreshing\");\n setDistance(threshold);\n\n onRefresh()\n .then(() => {\n setPhase(\"complete\");\n setTimeout(() => {\n setPhase(\"idle\");\n setDistance(0);\n }, 1000);\n })\n .catch(() => {\n setPhase(\"idle\");\n setDistance(0);\n });\n } else {\n setPhase(\"idle\");\n setDistance(0);\n }\n }, [disabled, phase, threshold, onRefresh, tryVibrate]);\n\n const indicatorOpacity =\n phase === \"refreshing\" || phase === \"complete\"\n ? 1\n : Math.min(distance / threshold, 1);\n const indicatorY =\n phase === \"refreshing\" || phase === \"complete\"\n ? 0\n : distance - threshold;\n\n return (\n <div\n ref={mergedRef}\n className={cn(\"relative overflow-y-auto\", className)}\n style={{ touchAction: \"pan-x\" }}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n data-ptr-phase={phase}\n >\n {/* PTR Indicator */}\n <div\n style={{\n transform: `translateY(${indicatorY}px)`,\n opacity: indicatorOpacity,\n transition:\n phase === \"idle\"\n ? \"transform 0.2s ease, opacity 0.2s ease\"\n : undefined,\n }}\n className=\"absolute top-0 left-0 right-0 flex flex-col items-center -translate-y-16 pointer-events-none z-10\"\n aria-hidden=\"true\"\n data-testid=\"ptr-indicator\"\n >\n {phase === \"refreshing\" ? (\n <div\n className=\"w-6 h-6 [clip-path:polygon(50%_0%,100%_50%,50%_100%,0%_50%)] border-2 border-primary/30 border-t-primary animate-rotate\"\n data-testid=\"ptr-spinner\"\n role=\"status\"\n aria-label=\"Refreshing\"\n />\n ) : phase === \"complete\" ? (\n <span className=\"text-primary text-base\" data-testid=\"ptr-check\">\n ✓\n </span>\n ) : (\n <div\n className=\"w-6 h-6 [clip-path:polygon(50%_0%,100%_50%,50%_100%,0%_50%)] border-2 border-primary/40\"\n style={{\n transform: `rotate(${Math.min((distance / threshold) * 45, 45)}deg)`,\n }}\n data-testid=\"ptr-diamond\"\n />\n )}\n {(phase === \"refreshing\" || phase === \"complete\") && (\n <span\n className=\"font-['Orbitron',monospace] text-[10px] uppercase tracking-[0.1em] text-muted-foreground mt-1\"\n data-testid=\"ptr-label\"\n >\n {phase === \"refreshing\" ? refreshingLabel : completeLabel}\n </span>\n )}\n </div>\n\n {/* Content */}\n {children}\n </div>\n );\n },\n);\n\nPullToRefresh.displayName = \"PullToRefresh\";\n\nexport { PullToRefresh };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SwipeAction {\n label: string;\n /** 'delete' | 'archive' | 'custom' -- affects background color */\n variant?: \"delete\" | \"archive\" | \"custom\";\n /** Custom background color class (used when variant='custom') */\n bgClass?: string;\n onTrigger: () => void;\n}\n\nexport interface SwipeableItemProps {\n /** Action revealed on left-swipe (appears on the right side) */\n leftSwipeAction?: SwipeAction;\n /** Action revealed on right-swipe (appears on the left side) */\n rightSwipeAction?: SwipeAction;\n /** Swipe distance to reveal action (default: 80) */\n revealThreshold?: number;\n /** Swipe distance to auto-trigger (default: 160) */\n triggerThreshold?: number;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n}\n\nfunction getActionBg(action: SwipeAction): string {\n switch (action.variant) {\n case \"archive\":\n return \"bg-surface-2 border-l border-[#4DA8DA]/30\";\n case \"custom\":\n return action.bgClass ?? \"bg-surface-2\";\n case \"delete\":\n default:\n return \"bg-destructive\";\n }\n}\n\nfunction getActionTextColor(action: SwipeAction): string {\n switch (action.variant) {\n case \"archive\":\n return \"text-[#4DA8DA]\";\n case \"custom\":\n return \"text-foreground\";\n case \"delete\":\n default:\n return \"text-white\";\n }\n}\n\nconst SwipeableItem = React.forwardRef<HTMLDivElement, SwipeableItemProps>(\n (\n {\n leftSwipeAction,\n rightSwipeAction,\n revealThreshold = 80,\n triggerThreshold = 160,\n disabled = false,\n className,\n children,\n },\n ref,\n ) => {\n const [translateX, setTranslateX] = React.useState(0);\n const [isDragging, setIsDragging] = React.useState(false);\n\n const startXRef = React.useRef(0);\n const currentDeltaRef = React.useRef(0);\n const isDraggingRef = React.useRef(false);\n const hapticThresholdFiredRef = React.useRef(false);\n const hapticTriggerFiredRef = React.useRef(false);\n\n const tryVibrate = React.useCallback((duration: number) => {\n try {\n navigator.vibrate?.(duration);\n } catch {\n /* empty */\n }\n }, []);\n\n const handlePointerDown = React.useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n e.currentTarget.setPointerCapture(e.pointerId);\n startXRef.current = e.clientX;\n currentDeltaRef.current = 0;\n isDraggingRef.current = true;\n setIsDragging(true);\n\n hapticThresholdFiredRef.current = false;\n hapticTriggerFiredRef.current = false;\n },\n [disabled],\n );\n\n const handlePointerMove = React.useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (!isDraggingRef.current || disabled) return;\n\n let deltaX = e.clientX - startXRef.current;\n\n if (deltaX < 0 && !leftSwipeAction) {\n deltaX = 0;\n }\n if (deltaX > 0 && !rightSwipeAction) {\n deltaX = 0;\n }\n\n const maxSwipe = triggerThreshold + 40;\n deltaX = Math.max(-maxSwipe, Math.min(maxSwipe, deltaX));\n\n const absDelta = Math.abs(deltaX);\n\n if (absDelta >= revealThreshold && !hapticThresholdFiredRef.current) {\n hapticThresholdFiredRef.current = true;\n tryVibrate(10);\n }\n\n if (absDelta >= triggerThreshold && !hapticTriggerFiredRef.current) {\n hapticTriggerFiredRef.current = true;\n tryVibrate(20);\n }\n\n currentDeltaRef.current = deltaX;\n setTranslateX(deltaX);\n },\n [disabled, leftSwipeAction, rightSwipeAction, revealThreshold, triggerThreshold, tryVibrate],\n );\n\n const handlePointerUp = React.useCallback(() => {\n if (!isDraggingRef.current) return;\n\n isDraggingRef.current = false;\n setIsDragging(false);\n\n const delta = currentDeltaRef.current;\n const absDelta = Math.abs(delta);\n\n if (absDelta >= triggerThreshold) {\n if (delta < 0 && leftSwipeAction) {\n leftSwipeAction.onTrigger();\n } else if (delta > 0 && rightSwipeAction) {\n rightSwipeAction.onTrigger();\n }\n }\n\n currentDeltaRef.current = 0;\n setTranslateX(0);\n }, [triggerThreshold, leftSwipeAction, rightSwipeAction]);\n\n return (\n <div ref={ref} className={cn(\"relative overflow-hidden\", className)}>\n {/* Right action (revealed by left swipe) */}\n {leftSwipeAction && (\n <div\n className={cn(\n \"absolute right-0 top-0 bottom-0 w-20 flex items-center justify-center\",\n getActionBg(leftSwipeAction),\n )}\n data-testid=\"swipe-action-right\"\n >\n <span\n className={cn(\n \"font-display text-xs uppercase\",\n getActionTextColor(leftSwipeAction),\n )}\n >\n {leftSwipeAction.label}\n </span>\n </div>\n )}\n\n {/* Left action (revealed by right swipe) */}\n {rightSwipeAction && (\n <div\n className={cn(\n \"absolute left-0 top-0 bottom-0 w-20 flex items-center justify-center\",\n getActionBg(rightSwipeAction),\n )}\n data-testid=\"swipe-action-left\"\n >\n <span\n className={cn(\n \"font-display text-xs uppercase\",\n getActionTextColor(rightSwipeAction),\n )}\n >\n {rightSwipeAction.label}\n </span>\n </div>\n )}\n\n {/* Swipeable content */}\n <div\n style={{ transform: `translateX(${translateX}px)` }}\n className={cn(\n \"relative z-10 bg-surface-1 touch-pan-y\",\n isDragging ? \"transition-none\" : \"transition-transform duration-200\",\n )}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n data-testid=\"swipe-content\"\n >\n {children}\n </div>\n </div>\n );\n },\n);\nSwipeableItem.displayName = \"SwipeableItem\";\n\nexport { SwipeableItem };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface CopyClipboardProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n text: string;\n resetDelay?: number;\n onCopy?: () => void;\n}\n\nconst CopyClipboard = React.forwardRef<HTMLButtonElement, CopyClipboardProps>(\n ({ text, resetDelay = 2000, onCopy, className, ...props }, ref) => {\n const [copied, setCopied] = React.useState(false);\n const timerRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n React.useEffect(() => () => clearTimeout(timerRef.current), []);\n\n const handleClick = async () => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n onCopy?.();\n clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), resetDelay);\n } catch {\n /* empty */\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"inline-flex items-center gap-1.5 px-3 py-1.5 bg-surface-2 border border-border\",\n \"font-mono text-xs text-muted-foreground\",\n \"hover:border-primary/30 hover:text-primary transition-all duration-150\",\n className,\n )}\n aria-label={copied ? \"Copied!\" : \"Copy to clipboard\"}\n {...props}\n >\n {copied ? (\n <>\n <span className=\"text-ef-green text-[10px]\">✓</span>\n <span className=\"text-ef-green\">Copied!</span>\n </>\n ) : (\n <>\n <span className=\"text-[10px]\">⎘</span>\n <span>Copy</span>\n </>\n )}\n </button>\n );\n },\n);\nCopyClipboard.displayName = \"CopyClipboard\";\n\nexport { CopyClipboard };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface BackToTopProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n threshold?: number;\n smooth?: boolean;\n}\n\nconst BackToTop = React.forwardRef<HTMLButtonElement, BackToTopProps>(\n ({ threshold = 300, smooth = true, className, ...props }, ref) => {\n const [visible, setVisible] = React.useState(false);\n\n React.useEffect(() => {\n const onScroll = () => setVisible(window.scrollY > threshold);\n onScroll();\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, [threshold]);\n\n const handleClick = () =>\n window.scrollTo({ top: 0, behavior: smooth ? \"smooth\" : \"instant\" });\n\n if (!visible) return null;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={handleClick}\n className={cn(\n \"fixed bottom-6 right-6 z-sticky\",\n \"bg-surface-2 border border-border p-3\",\n \"text-muted-foreground hover:text-primary hover:border-primary/30\",\n \"transition-all duration-200\",\n \"animate-in fade-in-0 slide-in-from-bottom-2 duration-200\",\n className,\n )}\n aria-label=\"Back to top\"\n {...props}\n >\n ↑\n </button>\n );\n },\n);\nBackToTop.displayName = \"BackToTop\";\n\nexport { BackToTop };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ScrollProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n color?: string;\n height?: number;\n zIndex?: number;\n}\n\nconst ScrollProgress = React.forwardRef<HTMLDivElement, ScrollProgressProps>(\n ({ color, height = 2, className, style, ...props }, ref) => {\n const [progress, setProgress] = React.useState(0);\n\n React.useEffect(() => {\n const onScroll = () => {\n const scrolled = window.scrollY;\n const total =\n document.documentElement.scrollHeight - window.innerHeight;\n setProgress(total > 0 ? (scrolled / total) * 100 : 0);\n };\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, []);\n\n return (\n <div\n ref={ref}\n className={cn(\"fixed top-0 left-0 right-0 z-max bg-transparent\", className)}\n style={{ height, ...style }}\n role=\"progressbar\"\n aria-valuenow={Math.round(progress)}\n aria-valuemin={0}\n aria-valuemax={100}\n {...props}\n >\n <div\n className=\"h-full transition-[width] duration-100\"\n style={{\n width: `${progress}%`,\n backgroundColor: color ?? \"hsl(var(--primary))\",\n }}\n />\n </div>\n );\n },\n);\nScrollProgress.displayName = \"ScrollProgress\";\n\nexport { ScrollProgress };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface CookieConsentProps extends React.HTMLAttributes<HTMLDivElement> {\n message?: string;\n onAccept: () => void;\n onCustomize?: () => void;\n acceptLabel?: string;\n customizeLabel?: string;\n}\n\nconst CookieConsent = React.forwardRef<HTMLDivElement, CookieConsentProps>(\n (\n {\n message,\n onAccept,\n onCustomize,\n acceptLabel = \"ACCEPT ALL\",\n customizeLabel = \"CUSTOMIZE\",\n className,\n ...props\n },\n ref,\n ) => (\n <div\n ref={ref}\n className={cn(\n \"fixed bottom-0 left-0 right-0 z-overlay\",\n \"bg-surface-2 border-t border-border px-6 py-4\",\n \"flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4\",\n className,\n )}\n role=\"dialog\"\n aria-label=\"Cookie consent\"\n {...props}\n >\n <p className=\"text-sm text-muted-foreground flex-1\">\n {message ??\n \"We use cookies to enhance your experience. By continuing to use this site, you agree to our use of cookies.\"}\n </p>\n <div className=\"flex gap-3 shrink-0\">\n {onCustomize && (\n <button\n type=\"button\"\n onClick={onCustomize}\n className=\"text-muted-foreground font-display text-xs font-bold tracking-[0.1em] uppercase px-4 py-2 hover:text-foreground transition-colors bg-transparent\"\n >\n {customizeLabel}\n </button>\n )}\n <button\n type=\"button\"\n onClick={onAccept}\n className=\"clip-corner bg-primary text-primary-foreground font-display text-xs font-bold tracking-[0.1em] uppercase px-6 py-2\"\n >\n {acceptLabel}\n </button>\n </div>\n </div>\n ),\n);\nCookieConsent.displayName = \"CookieConsent\";\n\nexport { CookieConsent };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface CommandItem {\n id: string;\n label: string;\n recent?: boolean;\n onSelect?: () => void;\n}\n\nexport interface CommandGroup {\n label: string;\n items: CommandItem[];\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n groups: CommandGroup[];\n onSelect?: (item: CommandItem) => void;\n placeholder?: string;\n}\n\n/* ── Hook ──────────────────────────────────────────────────────────────────── */\n\nexport function useCommandPalette() {\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault();\n setOpen((prev) => !prev);\n }\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, []);\n\n return {\n open,\n toggle: () => setOpen((p) => !p),\n close: () => setOpen(false),\n };\n}\n\n/* ── Helpers ───────────────────────────────────────────────────────────────── */\n\nfunction filterGroups(groups: CommandGroup[], query: string): CommandGroup[] {\n if (!query.trim()) return groups;\n const q = query.toLowerCase();\n return groups\n .map((g) => ({\n ...g,\n items: g.items.filter((i) => i.label.toLowerCase().includes(q)),\n }))\n .filter((g) => g.items.length > 0);\n}\n\n/* ── CommandPalette ────────────────────────────────────────────────────────── */\n\nconst CommandPalette = ({\n open,\n onOpenChange,\n groups,\n onSelect,\n placeholder = \"Type a command or search...\",\n}: CommandPaletteProps) => {\n const [query, setQuery] = React.useState(\"\");\n const [activeIdx, setActiveIdx] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const filtered = filterGroups(groups, query);\n const allItems = filtered.flatMap((g) => g.items);\n\n React.useEffect(() => {\n if (open) {\n setQuery(\"\");\n setActiveIdx(0);\n const t = setTimeout(() => inputRef.current?.focus(), 10);\n return () => clearTimeout(t);\n }\n }, [open]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActiveIdx((i) => Math.min(i + 1, allItems.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIdx((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n const item = allItems[activeIdx];\n if (item) {\n item.onSelect?.();\n onSelect?.(item);\n onOpenChange(false);\n }\n } else if (e.key === \"Escape\") {\n onOpenChange(false);\n }\n };\n\n if (!open) return null;\n\n let itemCounter = 0;\n\n return (\n <div className=\"fixed inset-0 z-modal flex items-start justify-center pt-[20vh]\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-black/60 backdrop-blur-sm\"\n onClick={() => onOpenChange(false)}\n aria-hidden=\"true\"\n />\n {/* Panel */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n className=\"relative w-full max-w-[600px] mx-4 bg-surface-2 border border-border shadow-[0_24px_64px_rgba(0,0,0,0.6)] animate-in fade-in-0 zoom-in-95 duration-150\"\n onKeyDown={handleKeyDown}\n >\n {/* Search input */}\n <div className=\"flex items-center gap-3 px-4 py-3 border-b border-border\">\n <span className=\"text-muted-foreground select-none\" aria-hidden=\"true\">\n ⌕\n </span>\n <input\n ref={inputRef}\n className=\"bg-transparent text-base text-card-foreground outline-none flex-1 placeholder:text-muted-foreground/50\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => {\n setQuery(e.target.value);\n setActiveIdx(0);\n }}\n aria-label=\"Search\"\n aria-autocomplete=\"list\"\n />\n <kbd className=\"font-mono text-[10px] bg-surface-3 px-1.5 py-0.5 border border-border text-muted-foreground\">\n ESC\n </kbd>\n </div>\n\n {/* Results */}\n <div className=\"py-2 max-h-[320px] overflow-y-auto\" role=\"listbox\">\n {filtered.length === 0 ? (\n <p className=\"px-4 py-8 text-center text-sm text-muted-foreground\">\n No results found.\n </p>\n ) : (\n filtered.map((group) => (\n <div key={group.label}>\n <p className=\"font-display text-[10px] tracking-[0.12em] uppercase text-muted-foreground px-4 py-2\">\n {group.label}\n </p>\n {group.items.map((item) => {\n const idx = itemCounter++;\n const isActive = idx === activeIdx;\n return (\n <button\n key={item.id}\n role=\"option\"\n aria-selected={isActive}\n className={cn(\n \"w-full text-left px-4 py-2 text-sm flex items-center gap-3 transition-colors\",\n isActive\n ? \"bg-primary/[0.08] text-primary\"\n : \"text-muted-foreground hover:bg-primary/[0.06] hover:text-primary\",\n )}\n onClick={() => {\n item.onSelect?.();\n onSelect?.(item);\n onOpenChange(false);\n }}\n onMouseEnter={() => setActiveIdx(idx)}\n >\n <span className=\"text-[8px] text-primary\" aria-hidden=\"true\">\n {item.recent ? \"◆\" : \"◇\"}\n </span>\n {item.label}\n </button>\n );\n })}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n );\n};\nCommandPalette.displayName = \"CommandPalette\";\n\nexport { CommandPalette };\n","import * as React from \"react\";\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface DropdownItemDef {\n label: string;\n onClick?: () => void;\n variant?: \"default\" | \"danger\";\n disabled?: boolean;\n}\n\nexport interface DropdownGroupDef {\n label?: string;\n items: DropdownItemDef[];\n}\n\nexport interface DropdownProps {\n trigger: React.ReactNode;\n groups?: DropdownGroupDef[];\n items?: DropdownItemDef[];\n align?: \"start\" | \"end\" | \"center\";\n sideOffset?: number;\n}\n\n/* ── Dropdown ──────────────────────────────────────────────────────────────── */\n\nconst Dropdown = ({\n trigger,\n groups,\n items,\n align = \"start\",\n sideOffset = 4,\n}: DropdownProps) => {\n const normalizedGroups: DropdownGroupDef[] =\n groups ?? (items ? [{ items }] : []);\n\n return (\n <PopoverPrimitive.Root>\n <PopoverPrimitive.Trigger asChild>\n {React.isValidElement(trigger) ? (\n trigger\n ) : (\n <button type=\"button\">{trigger as React.ReactNode}</button>\n )}\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-dropdown min-w-[180px] bg-surface-2 border border-border\",\n \"shadow-[0_16px_48px_rgba(0,0,0,0.5)] py-1\",\n \"animate-in fade-in-0 zoom-in-95 duration-150\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-100\",\n \"outline-none\",\n )}\n >\n {normalizedGroups.map((group, gi) => (\n <React.Fragment key={gi}>\n {gi > 0 && <div className=\"border-t border-border my-1\" />}\n {group.label && (\n <p className=\"font-display text-[10px] tracking-[0.12em] uppercase text-muted-foreground px-4 py-2\">\n {group.label}\n </p>\n )}\n {group.items.map((item, ii) => (\n <PopoverPrimitive.Close asChild key={ii}>\n <button\n type=\"button\"\n disabled={item.disabled}\n onClick={item.onClick}\n className={cn(\n \"w-full text-left px-4 py-2 text-sm transition-colors\",\n item.variant === \"danger\"\n ? \"text-muted-foreground hover:bg-ef-red/[0.06] hover:text-ef-red\"\n : \"text-muted-foreground hover:bg-primary/[0.06] hover:text-primary\",\n item.disabled && \"opacity-40 pointer-events-none\",\n )}\n >\n {item.label}\n </button>\n </PopoverPrimitive.Close>\n ))}\n </React.Fragment>\n ))}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n};\nDropdown.displayName = \"Dropdown\";\n\nexport { Dropdown };\nexport type { DropdownItemDef as DropdownItem, DropdownGroupDef as DropdownGroup };\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { cn } from \"../../lib/utils\";\n\n/* ── Types ─────────────────────────────────────────────────────────────────── */\n\nexport interface ContextMenuItemDef {\n label: string;\n shortcut?: string;\n onClick?: () => void;\n variant?: \"default\" | \"danger\";\n disabled?: boolean;\n}\n\nexport interface ContextMenuGroupDef {\n label?: string;\n items: ContextMenuItemDef[];\n}\n\nexport interface ContextMenuProps {\n children: React.ReactNode;\n groups?: ContextMenuGroupDef[];\n items?: ContextMenuItemDef[];\n className?: string;\n}\n\n/* ── ContextMenu ───────────────────────────────────────────────────────────── */\n\nconst ContextMenu = ({\n children,\n groups,\n items,\n className,\n}: ContextMenuProps) => {\n const [pos, setPos] = React.useState<{ x: number; y: number } | null>(null);\n const menuRef = React.useRef<HTMLDivElement>(null);\n\n const normalizedGroups: ContextMenuGroupDef[] =\n groups ?? (items ? [{ items }] : []);\n\n React.useEffect(() => {\n if (!pos) return;\n\n const onMouseDown = (e: MouseEvent) => {\n if (!menuRef.current?.contains(e.target as Node)) setPos(null);\n };\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setPos(null);\n };\n\n document.addEventListener(\"mousedown\", onMouseDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onMouseDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [pos]);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n e.preventDefault();\n const menuW = 220;\n const menuH = normalizedGroups.reduce(\n (acc, g) => acc + g.items.length * 36 + (g.label ? 32 : 0) + 8,\n 8,\n );\n const x = Math.min(e.clientX, window.innerWidth - menuW - 8);\n const y = Math.min(e.clientY, window.innerHeight - menuH - 8);\n setPos({ x, y });\n };\n\n return (\n <div\n onContextMenu={handleContextMenu}\n className={cn(\"select-none\", className)}\n >\n {children}\n {pos &&\n ReactDOM.createPortal(\n <div\n ref={menuRef}\n role=\"menu\"\n className=\"fixed z-dropdown bg-surface-2 border border-border shadow-[0_16px_48px_rgba(0,0,0,0.5)] py-1 min-w-[200px] animate-in fade-in-0 zoom-in-95 duration-150\"\n style={{ left: pos.x, top: pos.y }}\n >\n {normalizedGroups.map((group, gi) => (\n <React.Fragment key={gi}>\n {gi > 0 && <div className=\"border-t border-border my-1\" />}\n {group.label && (\n <p className=\"font-display text-[10px] tracking-[0.12em] uppercase text-muted-foreground px-4 py-2\">\n {group.label}\n </p>\n )}\n {group.items.map((item, ii) => (\n <button\n key={ii}\n role=\"menuitem\"\n type=\"button\"\n disabled={item.disabled}\n onClick={() => {\n item.onClick?.();\n setPos(null);\n }}\n className={cn(\n \"w-full text-left px-4 py-2 text-sm flex items-center justify-between gap-8 transition-colors\",\n item.variant === \"danger\"\n ? \"text-muted-foreground hover:bg-ef-red/[0.06] hover:text-ef-red\"\n : \"text-muted-foreground hover:bg-primary/[0.06] hover:text-primary\",\n item.disabled && \"opacity-40 pointer-events-none\",\n )}\n >\n <span>{item.label}</span>\n {item.shortcut && (\n <span className=\"font-mono text-[11px] text-ef-gray-mid shrink-0\">\n {item.shortcut}\n </span>\n )}\n </button>\n ))}\n </React.Fragment>\n ))}\n </div>,\n document.body,\n )}\n </div>\n );\n};\nContextMenu.displayName = \"ContextMenu\";\n\nexport { ContextMenu };\nexport type {\n ContextMenuItemDef as ContextMenuItem,\n ContextMenuGroupDef as ContextMenuGroup,\n};\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface SpoilerBlockProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n title?: string;\n revealLabel?: string;\n hideLabel?: string;\n defaultRevealed?: boolean;\n}\n\nconst SpoilerBlock = React.forwardRef<HTMLDivElement, SpoilerBlockProps>(\n (\n {\n children,\n title,\n revealLabel = \"REVEAL CONTENT\",\n hideLabel = \"HIDE\",\n defaultRevealed = false,\n className,\n ...props\n },\n ref,\n ) => {\n const [revealed, setRevealed] = React.useState(defaultRevealed);\n\n return (\n <div\n ref={ref}\n aria-expanded={revealed}\n className={cn(\"relative border p-6 overflow-hidden\", className)}\n style={{\n borderColor: \"rgba(255,165,2,0.2)\",\n background: \"rgba(255,165,2,0.03)\",\n }}\n {...props}\n >\n {/* Header */}\n <div className=\"font-display text-[13px] font-bold uppercase tracking-widest text-primary mb-4 flex items-center gap-2\">\n <span>⚠</span>\n <span>SPOILER{title ? ` — ${title}` : \"\"}</span>\n </div>\n\n {/* Content with blur when hidden */}\n <div\n className={cn(\n \"transition-[filter] duration-400\",\n revealed ? \"\" : \"pointer-events-none select-none\",\n )}\n style={{ filter: revealed ? \"blur(0px)\" : \"blur(8px)\" }}\n >\n {children}\n </div>\n\n {/* Overlay when hidden */}\n {!revealed && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-background/30 backdrop-blur-[2px] z-10\">\n <button\n type=\"button\"\n onClick={() => setRevealed(true)}\n className=\"border border-primary text-primary hover:bg-primary/[0.1] font-display text-[12px] uppercase tracking-wider px-4 py-2 transition-colors\"\n >\n {revealLabel}\n </button>\n </div>\n )}\n\n {/* Hide button when revealed */}\n {revealed && (\n <div className=\"mt-4 flex justify-end\">\n <button\n type=\"button\"\n onClick={() => setRevealed(false)}\n className=\"text-muted-foreground hover:text-primary font-display text-[11px] uppercase tracking-wider transition-colors\"\n >\n {hideLabel}\n </button>\n </div>\n )}\n </div>\n );\n },\n);\nSpoilerBlock.displayName = \"SpoilerBlock\";\n\nexport interface SpoilerInlineProps\n extends React.HTMLAttributes<HTMLSpanElement> {\n children: React.ReactNode;\n}\n\nconst SpoilerInline = React.forwardRef<HTMLSpanElement, SpoilerInlineProps>(\n ({ children, className, ...props }, ref) => {\n const [revealed, setRevealed] = React.useState(false);\n\n return (\n <span\n ref={ref}\n role=\"button\"\n tabIndex={0}\n data-revealed={revealed ? \"true\" : undefined}\n onClick={() => setRevealed(true)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") setRevealed(true);\n }}\n className={cn(\"spoiler\", className)}\n aria-label={\n revealed ? undefined : \"Spoiler. Press to reveal hidden content.\"\n }\n {...props}\n >\n {children}\n </span>\n );\n },\n);\nSpoilerInline.displayName = \"SpoilerInline\";\n\nexport { SpoilerBlock, SpoilerInline };\n","import * as React from \"react\";\nimport { Sun, Moon } from \"lucide-react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface ThemeSwitcherProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n storageKey?: string;\n}\n\nconst ThemeSwitcher = React.forwardRef<HTMLButtonElement, ThemeSwitcherProps>(\n ({ storageKey = \"ef-theme\", className, ...props }, ref) => {\n const [isLight, setIsLight] = React.useState(false);\n const [isAnimating, setIsAnimating] = React.useState(false);\n const timerRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n React.useEffect(() => {\n const saved = localStorage.getItem(storageKey);\n if (saved === \"light\") {\n setIsLight(true);\n document.documentElement.classList.add(\"light\");\n } else if (saved === \"dark\") {\n setIsLight(false);\n document.documentElement.classList.remove(\"light\");\n } else {\n setIsLight(document.documentElement.classList.contains(\"light\"));\n }\n }, [storageKey]);\n\n React.useEffect(() => () => clearTimeout(timerRef.current), []);\n\n React.useEffect(() => {\n const handleExternal = (e: Event) => {\n const newTheme = (e as CustomEvent<{ theme: string }>).detail.theme;\n setIsLight((prev) => {\n const next = newTheme === \"light\";\n return prev !== next ? next : prev;\n });\n };\n window.addEventListener(\"ef-theme-change\", handleExternal);\n return () => window.removeEventListener(\"ef-theme-change\", handleExternal);\n }, []);\n\n const toggle = () => {\n setIsAnimating(true);\n timerRef.current = setTimeout(() => setIsAnimating(false), 500);\n const next = !isLight;\n setIsLight(next);\n if (next) {\n document.documentElement.classList.add(\"light\");\n localStorage.setItem(storageKey, \"light\");\n } else {\n document.documentElement.classList.remove(\"light\");\n localStorage.setItem(storageKey, \"dark\");\n }\n window.dispatchEvent(\n new CustomEvent(\"ef-theme-change\", { detail: { theme: next ? \"light\" : \"dark\" } }),\n );\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={toggle}\n aria-label={isLight ? \"Switch to dark mode\" : \"Switch to light mode\"}\n className={cn(\n \"relative p-2 text-muted-foreground hover:text-primary transition-colors overflow-hidden\",\n className,\n )}\n {...props}\n >\n <span\n className={cn(\n \"block transition-all duration-500\",\n isAnimating\n ? \"rotate-[360deg] scale-0 opacity-0\"\n : \"rotate-0 scale-100 opacity-100\",\n )}\n style={{ transitionTimingFunction: \"cubic-bezier(0.25, 0.8, 0.25, 1)\" }}\n >\n {isLight ? (\n <Moon className=\"w-4 h-4\" />\n ) : (\n <Sun className=\"w-4 h-4\" />\n )}\n </span>\n </button>\n );\n },\n);\nThemeSwitcher.displayName = \"ThemeSwitcher\";\n\nexport { ThemeSwitcher };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport type GlitchIntensity = \"low\" | \"medium\" | \"high\";\n\n/* ── Intensity config ────────────────────────────────────────────────────── */\n\nconst INTENSITY_CONFIG: Record<\n GlitchIntensity,\n {\n duration: string;\n clipTop: string;\n clipBot: string;\n offset: number;\n defaultInterval: number;\n }\n> = {\n low: {\n duration: \"6s\",\n clipTop: \"15% 0 70% 0\",\n clipBot: \"65% 0 15% 0\",\n offset: 1,\n defaultInterval: 4000,\n },\n medium: {\n duration: \"3s\",\n clipTop: \"20% 0 50% 0\",\n clipBot: \"50% 0 20% 0\",\n offset: 2,\n defaultInterval: 2500,\n },\n high: {\n duration: \"1.2s\",\n clipTop: \"10% 0 60% 0\",\n clipBot: \"55% 0 10% 0\",\n offset: 4,\n defaultInterval: 1200,\n },\n};\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface GlitchTextProps extends Omit<\n React.HTMLAttributes<HTMLSpanElement>,\n \"children\"\n> {\n children: string;\n intensity?: GlitchIntensity;\n continuous?: boolean;\n continuousInterval?: number;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst GlitchText = React.forwardRef<HTMLSpanElement, GlitchTextProps>(\n (\n {\n children,\n className,\n intensity = \"medium\",\n continuous = false,\n continuousInterval,\n ...props\n },\n ref,\n ) => {\n const cfg = INTENSITY_CONFIG[intensity];\n const interval = continuousInterval ?? cfg.defaultInterval;\n\n const [glitching, setGlitching] = React.useState(false);\n\n React.useEffect(() => {\n if (!continuous) return;\n const id = setInterval(() => {\n setGlitching(true);\n const off = setTimeout(\n () => setGlitching(false),\n parseFloat(cfg.duration) * 1000,\n );\n return () => clearTimeout(off);\n }, interval);\n return () => clearInterval(id);\n }, [continuous, interval, cfg.duration]);\n\n const animClass = glitching || !continuous ? \"animate-glitch\" : \"\";\n\n return (\n <span\n ref={ref}\n className={cn(\"relative inline-block\", className)}\n {...props}\n >\n {/* Visible text */}\n <span className=\"relative z-10\">{children}</span>\n\n {/* Glitch layer 1 — cyan, top slice */}\n <span\n aria-hidden\n className={cn(\"absolute inset-0 text-ef-cyan opacity-70\", animClass)}\n style={{\n clipPath: `inset(${cfg.clipTop})`,\n transform: `translate(-${cfg.offset}px, 0)`,\n animationDuration: cfg.duration,\n }}\n >\n {children}\n </span>\n\n {/* Glitch layer 2 — red, bottom slice */}\n <span\n aria-hidden\n className={cn(\"absolute inset-0 text-ef-red opacity-70\", animClass)}\n style={{\n clipPath: `inset(${cfg.clipBot})`,\n transform: `translate(${cfg.offset}px, 0)`,\n animationDuration: cfg.duration,\n animationDelay: \"0.1s\",\n }}\n >\n {children}\n </span>\n </span>\n );\n },\n);\nGlitchText.displayName = \"GlitchText\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { GlitchText };\n","import * as React from \"react\";\n\nexport interface DiamondLoaderProps {\n size?: \"sm\" | \"md\" | \"lg\";\n label?: string;\n className?: string;\n}\n\nconst SIZE_MAP = { sm: 16, md: 28, lg: 44 } as const;\n\nexport const DiamondLoader = React.forwardRef<\n HTMLDivElement,\n DiamondLoaderProps\n>(({ size = \"md\", label, className }, ref) => {\n const s = SIZE_MAP[size];\n return (\n <div\n ref={ref}\n className={`flex flex-col items-center gap-3${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"relative\" style={{ width: s * 2, height: s * 2 }}>\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className=\"absolute inset-0 border-2 border-primary\"\n style={{\n transform: `rotate(45deg) scale(${1 - i * 0.25})`,\n animation: `diamondSpin ${1.2 + i * 0.4}s linear infinite${i === 1 ? \" reverse\" : \"\"}`,\n opacity: 1 - i * 0.25,\n }}\n />\n ))}\n </div>\n {label && (\n <span className=\"font-mono text-xs text-muted-foreground tracking-[0.15em] uppercase\">\n {label}\n </span>\n )}\n </div>\n );\n});\nDiamondLoader.displayName = \"DiamondLoader\";\n","import * as React from \"react\";\nimport { Crosshair } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Status config ───────────────────────────────────────────────────────── */\n\nconst STATUS_LABELS: Record<string, string> = {\n online: \"ONLINE\",\n warning: \"CAUTION\",\n offline: \"OFFLINE\",\n scanning: \"SCANNING\",\n};\n\nconst STATUS_COLORS: Record<string, string> = {\n online: \"bg-ef-green\",\n warning: \"bg-ef-yellow\",\n offline: \"bg-ef-red\",\n scanning: \"bg-ef-cyan animate-pulse\",\n};\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface TacticalPanelProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string;\n status?: \"online\" | \"warning\" | \"offline\" | \"scanning\";\n headerAction?: React.ReactNode;\n collapsible?: boolean;\n defaultCollapsed?: boolean;\n collapsed?: boolean;\n onCollapseChange?: (collapsed: boolean) => void;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst TacticalPanel = React.forwardRef<HTMLDivElement, TacticalPanelProps>(\n (\n {\n title,\n status = \"online\",\n children,\n className,\n headerAction,\n collapsible = false,\n defaultCollapsed = false,\n collapsed: controlledCollapsed,\n onCollapseChange,\n ...props\n },\n ref,\n ) => {\n const [internalCollapsed, setInternalCollapsed] =\n React.useState(defaultCollapsed);\n\n const isControlled = controlledCollapsed !== undefined;\n const isCollapsed = isControlled ? controlledCollapsed : internalCollapsed;\n\n const handleHeaderClick = () => {\n if (!collapsible) return;\n const next = !isCollapsed;\n if (!isControlled) setInternalCollapsed(next);\n onCollapseChange?.(next);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative border border-border bg-surface-1 scanline-overlay\",\n className,\n )}\n {...props}\n >\n {/* ── HUD Header ── */}\n <div\n className={cn(\n \"flex items-center justify-between px-4 py-2.5 border-b border-border bg-surface-0\",\n collapsible && \"cursor-pointer select-none\",\n )}\n onClick={handleHeaderClick}\n >\n <div className=\"flex items-center gap-3\">\n <Crosshair className=\"w-3.5 h-3.5 text-primary\" />\n <span className=\"font-display text-[11px] font-bold tracking-[0.15em] uppercase text-foreground\">\n {title}\n </span>\n {collapsible && (\n <span className=\"font-mono text-[14px] text-primary/60 ml-1 leading-none\">\n {isCollapsed ? \"+\" : \"−\"}\n </span>\n )}\n </div>\n\n <div className=\"flex items-center gap-3\">\n <div className=\"flex items-center gap-2\">\n <div\n className={cn(\"w-2 h-2\", STATUS_COLORS[status])}\n style={{\n clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\",\n }}\n />\n <span className=\"font-mono text-[10px] tracking-[0.1em] text-muted-foreground\">\n {STATUS_LABELS[status]}\n </span>\n </div>\n {headerAction && (\n <div\n className=\"flex items-center\"\n onClick={(e) => e.stopPropagation()}\n >\n {headerAction}\n </div>\n )}\n </div>\n </div>\n\n {/* ── Corner accents ── */}\n <div className=\"absolute top-0 left-0 w-6 h-6 border-t-2 border-l-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute top-0 right-0 w-6 h-6 border-t-2 border-r-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute bottom-0 left-0 w-6 h-6 border-b-2 border-l-2 border-primary/40 pointer-events-none\" />\n <div className=\"absolute bottom-0 right-0 w-6 h-6 border-b-2 border-r-2 border-primary/40 pointer-events-none\" />\n\n <div\n className={cn(\n \"overflow-hidden transition-all duration-300\",\n isCollapsed ? \"max-h-0\" : \"max-h-[9999px]\",\n )}\n >\n <div className=\"p-5\">{children}</div>\n </div>\n </div>\n );\n },\n);\nTacticalPanel.displayName = \"TacticalPanel\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { TacticalPanel };\n","import * as React from \"react\";\n\nexport interface HoloCardProps {\n title: string;\n subtitle: string;\n icon: React.ElementType;\n value?: string;\n className?: string;\n}\n\nexport const HoloCard = React.forwardRef<HTMLDivElement, HoloCardProps>(\n ({ title, subtitle, icon: Icon, value, className }, ref) => {\n const [hovering, setHovering] = React.useState(false);\n return (\n <div\n ref={ref}\n className={`relative clip-corner border border-border bg-surface-1 p-6 overflow-hidden group cursor-pointer transition-all duration-500 hover:border-primary/30${className ? ` ${className}` : \"\"}`}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n >\n {/* Scan line */}\n <div\n className=\"absolute left-0 right-0 h-px bg-gradient-to-r from-transparent via-primary/60 to-transparent pointer-events-none transition-all\"\n style={{\n top: hovering ? \"100%\" : \"-10%\",\n opacity: hovering ? 1 : 0,\n transitionDuration: \"2000ms\",\n }}\n />\n {/* Holographic shimmer */}\n <div\n className=\"absolute inset-0 pointer-events-none transition-opacity duration-500\"\n style={{\n background:\n \"linear-gradient(135deg, transparent 0%, hsl(var(--primary) / 0.03) 40%, transparent 60%)\",\n opacity: hovering ? 1 : 0,\n }}\n />\n <div className=\"relative z-10\">\n <Icon className=\"w-5 h-5 text-primary mb-4 group-hover:drop-shadow-[0_0_8px_hsl(var(--primary)/0.5)] transition-all\" />\n {value && (\n <p className=\"font-display text-3xl font-bold text-primary mb-1\">\n {value}\n </p>\n )}\n <h4 className=\"font-display text-sm font-bold tracking-[0.05em] uppercase text-foreground mb-1\">\n {title}\n </h4>\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n {/* Bottom diamond */}\n <div className=\"absolute bottom-3 right-3 text-primary/20 group-hover:text-primary/60 transition-colors text-xs\">\n ◆\n </div>\n </div>\n );\n },\n);\nHoloCard.displayName = \"HoloCard\";\n","import * as React from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Terminal } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Speed map ───────────────────────────────────────────────────────────── */\n\nconst SPEED_INTERVALS: Record<number, number> = {\n 1: 2000,\n 2: 1500,\n 3: 1000,\n 4: 600,\n 5: 300,\n};\n\n/* ── Message type config ─────────────────────────────────────────────────── */\n\ntype MessageColorMode = \"mono\" | \"classified\" | \"transmission\";\n\nconst STREAM_COLOR_OVERRIDES: Record<MessageColorMode, string> = {\n mono: \"text-muted-foreground\",\n classified: \"text-primary\",\n transmission: \"text-ef-cyan\",\n};\n\nconst MSG_TYPE_COLORS: Record<string, string> = {\n system: \"text-muted-foreground\",\n data: \"text-ef-cyan\",\n warning: \"text-ef-orange\",\n classified: \"text-primary\",\n};\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport type DataStreamMessage =\n | string\n | { text: string; type?: \"system\" | \"data\" | \"warning\" | \"classified\" };\n\n/* ── Defaults ────────────────────────────────────────────────────────────── */\n\nconst DEFAULT_MESSAGES: DataStreamMessage[] = [\n \"[SYS] Initializing ENDFIELD protocol...\",\n \"[NET] Connection established — latency: 12ms\",\n \"[SEC] Authentication verified ◆ Level: ALPHA\",\n \"[DAT] Loading design tokens: 94 variables mapped\",\n \"[GPU] Render pipeline: Optimized (60fps locked)\",\n \"[SYS] Component registry: 70 modules online\",\n \"[NET] Sync complete — all nodes operational\",\n \"[DAT] Color system: HSL-based, 9 neutrals, 9 accents\",\n \"[SEC] Encryption: AES-256 ◆ Status: ACTIVE\",\n \"[SYS] ENDFIELD DESIGN SYSTEM v2.0 ◆ READY\",\n];\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface DataStreamProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"children\"\n> {\n messages?: DataStreamMessage[];\n speed?: 1 | 2 | 3 | 4 | 5;\n messageType?: MessageColorMode;\n}\n\n/* ── Helpers ─────────────────────────────────────────────────────────────── */\n\nfunction msgText(m: DataStreamMessage): string {\n return typeof m === \"string\" ? m : m.text;\n}\n\nfunction msgColor(m: DataStreamMessage, override?: MessageColorMode): string {\n if (override) return STREAM_COLOR_OVERRIDES[override];\n\n if (typeof m !== \"string\" && m.type) {\n return MSG_TYPE_COLORS[m.type] ?? \"text-muted-foreground\";\n }\n\n const txt = typeof m === \"string\" ? m : m.text;\n if (txt.includes(\"[SEC]\")) return \"text-ef-green\";\n if (txt.includes(\"[NET]\")) return \"text-ef-blue\";\n if (txt.includes(\"[DAT]\")) return \"text-ef-cyan\";\n if (txt.includes(\"[GPU]\")) return \"text-ef-purple\";\n return \"text-muted-foreground\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst DataStream = React.forwardRef<HTMLDivElement, DataStreamProps>(\n (\n {\n messages = DEFAULT_MESSAGES,\n speed = 3,\n messageType,\n className,\n ...props\n },\n ref,\n ) => {\n const intervalMs = SPEED_INTERVALS[speed] ?? SPEED_INTERVALS[3];\n\n const [lines, setLines] = React.useState<DataStreamMessage[]>([]);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n let i = 0;\n const id = setInterval(() => {\n setLines((prev) => {\n const next = [...prev, messages[i % messages.length]];\n return next.length > 8 ? next.slice(-8) : next;\n });\n i++;\n }, intervalMs);\n return () => clearInterval(id);\n }, [messages, intervalMs]);\n\n React.useEffect(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n }, [lines]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"border border-border bg-background clip-corner overflow-hidden\",\n className,\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 px-4 py-2 border-b border-border bg-surface-0\">\n <Terminal className=\"w-3.5 h-3.5 text-primary\" />\n <span className=\"font-mono text-[10px] tracking-[0.1em] text-muted-foreground uppercase\">\n LIVE FEED\n </span>\n <div className=\"ml-auto flex items-center gap-1.5\">\n <div\n className=\"w-1.5 h-1.5 bg-ef-green animate-pulse\"\n style={{\n clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\",\n }}\n />\n <span className=\"font-mono text-[10px] text-ef-green\">ACTIVE</span>\n </div>\n </div>\n\n {/* Stream body */}\n <div\n ref={containerRef}\n className=\"p-4 h-48 overflow-y-auto font-mono text-xs space-y-1\"\n >\n <AnimatePresence>\n {lines.map((line, i) => (\n <motion.div\n key={`${msgText(line)}-${i}`}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n className={msgColor(line, messageType)}\n >\n {msgText(line)}\n </motion.div>\n ))}\n </AnimatePresence>\n <span className=\"inline-block w-2 h-4 bg-primary animate-cursor-blink\" />\n </div>\n </div>\n );\n },\n);\nDataStream.displayName = \"DataStream\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { DataStream };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\nexport const tacticalBadgeVariants = cva(\n \"inline-flex items-center gap-1.5 clip-corner-sm border px-3 py-1 font-display text-[10px] font-bold tracking-[0.15em] uppercase\",\n {\n variants: {\n variant: {\n default: \"border-primary/40 text-primary bg-primary/10\",\n success: \"border-ef-green/40 text-ef-green bg-ef-green/10\",\n warning: \"border-ef-yellow/40 text-ef-yellow bg-ef-yellow/10\",\n danger: \"border-ef-red/40 text-ef-red bg-ef-red/10\",\n info: \"border-ef-cyan/40 text-ef-cyan bg-ef-cyan/10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport interface TacticalBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof tacticalBadgeVariants> {}\n\nexport const TacticalBadge = React.forwardRef<\n HTMLSpanElement,\n TacticalBadgeProps\n>(({ variant, className, children, ...props }, ref) => (\n <span\n ref={ref}\n className={cn(tacticalBadgeVariants({ variant }), className)}\n {...props}\n >\n <span style={{ fontSize: \"6px\" }}>◆</span>\n {children}\n </span>\n));\nTacticalBadge.displayName = \"TacticalBadge\";\n","import * as React from \"react\";\nimport { AlertTriangle } from \"lucide-react\";\n\nexport interface WarningBannerProps {\n level?: \"caution\" | \"alert\" | \"critical\";\n children: React.ReactNode;\n className?: string;\n}\n\nconst WARNING_STYLES = {\n caution: {\n border: \"border-ef-yellow/30\",\n bg: \"bg-ef-yellow/5\",\n icon: \"text-ef-yellow\",\n label: \"CAUTION\",\n },\n alert: {\n border: \"border-ef-orange/30\",\n bg: \"bg-ef-orange/5\",\n icon: \"text-ef-orange\",\n label: \"ALERT\",\n },\n critical: {\n border: \"border-ef-red/30\",\n bg: \"bg-ef-red/5\",\n icon: \"text-ef-red\",\n label: \"CRITICAL\",\n },\n} as const;\n\nexport const WarningBanner = React.forwardRef<\n HTMLDivElement,\n WarningBannerProps\n>(({ level = \"caution\", children, className }, ref) => {\n const s = WARNING_STYLES[level];\n return (\n <div\n ref={ref}\n className={`clip-corner border ${s.border} ${s.bg} p-4 flex items-start gap-3${className ? ` ${className}` : \"\"}`}\n >\n <AlertTriangle className={`w-5 h-5 ${s.icon} shrink-0 mt-0.5`} />\n <div>\n <span\n className={`font-display text-[11px] font-bold tracking-[0.15em] ${s.icon}`}\n >\n {s.label}\n </span>\n <p className=\"text-sm text-muted-foreground mt-1\">{children}</p>\n </div>\n </div>\n );\n});\nWarningBanner.displayName = \"WarningBanner\";\n","import * as React from \"react\";\n\nexport interface ScanDividerProps {\n label?: string;\n className?: string;\n}\n\nexport const ScanDivider = React.forwardRef<HTMLDivElement, ScanDividerProps>(\n ({ label, className }, ref) => (\n <div\n ref={ref}\n className={`relative flex items-center gap-4 py-2${className ? ` ${className}` : \"\"}`}\n >\n <div className=\"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent\" />\n {label && (\n <span className=\"font-display text-[10px] font-bold tracking-[0.2em] uppercase text-primary/60 flex items-center gap-2\">\n <span style={{ fontSize: \"6px\" }}>◆</span> {label}{\" \"}\n <span style={{ fontSize: \"6px\" }}>◆</span>\n </span>\n )}\n <div className=\"flex-1 h-px bg-gradient-to-r from-transparent via-primary/30 to-transparent\" />\n </div>\n ),\n);\nScanDivider.displayName = \"ScanDivider\";\n","import * as React from \"react\";\n\nexport interface CoordinateTagProps {\n label: string;\n value: string;\n unit?: string;\n className?: string;\n}\n\nexport const CoordinateTag = React.forwardRef<\n HTMLDivElement,\n CoordinateTagProps\n>(({ label, value, unit, className }, ref) => (\n <div\n ref={ref}\n className={`inline-flex items-center border border-border bg-surface-0 overflow-hidden${className ? ` ${className}` : \"\"}`}\n >\n <span className=\"font-mono text-[10px] tracking-[0.1em] uppercase text-muted-foreground bg-surface-2 px-2.5 py-1.5 border-r border-border\">\n {label}\n </span>\n <span className=\"font-mono text-xs text-primary px-2.5 py-1.5 font-bold\">\n {value}\n </span>\n {unit && (\n <span className=\"font-mono text-[10px] text-muted-foreground pr-2.5\">\n {unit}\n </span>\n )}\n </div>\n));\nCoordinateTag.displayName = \"CoordinateTag\";\n","import * as React from \"react\";\nimport { motion, useInView } from \"framer-motion\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface RadarChartDataPoint {\n label: string;\n value: number;\n}\n\nexport interface RadarAxisConfig {\n label: string;\n min?: number;\n max?: number;\n}\n\nexport interface RadarDataset {\n label?: string;\n values: number[];\n color?: string;\n fillOpacity?: number;\n}\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface RadarChartProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"color\"\n> {\n data?: RadarChartDataPoint[];\n color?: \"primary\" | \"cyan\";\n\n axes?: RadarAxisConfig[];\n datasets?: RadarDataset[];\n showLegend?: boolean;\n\n size?: number;\n}\n\n/* ── Helpers ─────────────────────────────────────────────────────────────── */\n\nfunction getPoint(\n cx: number,\n cy: number,\n r: number,\n angleStep: number,\n i: number,\n) {\n return {\n x: cx + r * Math.sin(i * angleStep),\n y: cy - r * Math.cos(i * angleStep),\n };\n}\n\nfunction toPoints(pts: { x: number; y: number }[]) {\n return pts.map((p) => `${p.x},${p.y}`).join(\" \");\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst RadarChart = React.forwardRef<HTMLDivElement, RadarChartProps>(\n (\n {\n data,\n color = \"primary\",\n axes,\n datasets,\n showLegend = false,\n size = 260,\n className,\n ...props\n },\n forwardedRef,\n ) => {\n const innerRef = React.useRef<HTMLDivElement>(null);\n const isInView = useInView(innerRef, { once: true });\n\n const mergeRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n (innerRef as React.MutableRefObject<HTMLDivElement | null>).current =\n el;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(el);\n } else if (forwardedRef) {\n (\n forwardedRef as React.MutableRefObject<HTMLDivElement | null>\n ).current = el;\n }\n },\n [forwardedRef],\n );\n\n /* ── Normalise input (legacy → new) ── */\n const resolvedAxes: RadarAxisConfig[] =\n axes ?? data?.map((d) => ({ label: d.label, min: 0, max: 100 })) ?? [];\n\n const resolvedDatasets: RadarDataset[] =\n datasets ??\n (data\n ? [\n {\n label: undefined,\n values: data.map((d) => d.value),\n color:\n color === \"cyan\"\n ? \"hsl(var(--ef-cyan))\"\n : \"hsl(var(--primary))\",\n },\n ]\n : []);\n\n const n = resolvedAxes.length;\n if (n < 3) return null;\n\n const cx = size / 2;\n const cy = size / 2;\n const r = size * 0.38;\n const levels = 4;\n const angleStep = (Math.PI * 2) / n;\n\n /* Grid ring polygons */\n const gridPolygons = Array.from({ length: levels }, (_, lvl) => {\n const lr = r * ((lvl + 1) / levels);\n return toPoints(\n resolvedAxes.map((_, i) => getPoint(cx, cy, lr, angleStep, i)),\n );\n });\n\n /* Axis lines */\n const axisLines = resolvedAxes.map((_, i) =>\n getPoint(cx, cy, r, angleStep, i),\n );\n\n /* Per-dataset polygon paths */\n const datasetPaths = resolvedDatasets.map((ds) => {\n const dataPoints = resolvedAxes.map((axis, i) => {\n const min = axis.min ?? 0;\n const max = axis.max ?? 100;\n const norm = max > min ? (ds.values[i] - min) / (max - min) : 0;\n return getPoint(\n cx,\n cy,\n Math.max(0, Math.min(1, norm)) * r,\n angleStep,\n i,\n );\n });\n return {\n ds,\n path: toPoints(dataPoints),\n center: toPoints(resolvedAxes.map(() => ({ x: cx, y: cy }))),\n };\n });\n\n /* Default dataset colors */\n const defaultColors = [\n \"hsl(var(--primary))\",\n \"hsl(var(--ef-blue))\",\n \"hsl(var(--ef-green))\",\n ];\n\n return (\n <div\n ref={mergeRef}\n className={cn(\"flex flex-col items-center w-full\", className)}\n {...props}\n >\n <svg\n viewBox={`0 0 ${size} ${size}`}\n className=\"w-full max-w-[260px] h-auto overflow-visible\"\n >\n {/* Grid rings */}\n {gridPolygons.map((pts, i) => (\n <polygon\n key={i}\n points={pts}\n fill=\"none\"\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n opacity={0.5}\n />\n ))}\n\n {/* Axis lines */}\n {axisLines.map((p, i) => (\n <line\n key={i}\n x1={cx}\n y1={cy}\n x2={p.x}\n y2={p.y}\n stroke=\"hsl(var(--border))\"\n strokeWidth={1}\n opacity={0.3}\n />\n ))}\n\n {/* Data polygons — one per dataset */}\n {datasetPaths.map(({ ds, path, center }, di) => {\n const fillColor =\n ds.color ?? defaultColors[di % defaultColors.length];\n const fillOpacity = ds.fillOpacity ?? 0.15;\n return (\n <motion.polygon\n key={di}\n points={isInView ? path : center}\n fill={fillColor}\n fillOpacity={fillOpacity}\n stroke={fillColor}\n strokeWidth={2}\n initial={false}\n animate={{ points: isInView ? path : center }}\n transition={{\n duration: 0.8,\n ease: [0.25, 0.8, 0.25, 1],\n delay: di * 0.1,\n }}\n style={{\n filter: `drop-shadow(0 0 8px ${fillColor.replace(\")\", \" / 0.3)\")})`,\n }}\n />\n );\n })}\n\n {/* Data point circles — first dataset only */}\n {datasetPaths[0] &&\n (() => {\n const { ds, path: _ } = datasetPaths[0];\n const fillColor = ds.color ?? defaultColors[0];\n return resolvedAxes.map((axis, i) => {\n const min = axis.min ?? 0;\n const max = axis.max ?? 100;\n const norm = max > min ? (ds.values[i] - min) / (max - min) : 0;\n const p = getPoint(\n cx,\n cy,\n Math.max(0, Math.min(1, norm)) * r,\n angleStep,\n i,\n );\n return (\n <motion.circle\n key={i}\n cx={cx}\n cy={cy}\n r={4}\n fill={fillColor}\n stroke=\"hsl(var(--background))\"\n strokeWidth={2}\n initial={false}\n animate={{\n cx: isInView ? p.x : cx,\n cy: isInView ? p.y : cy,\n }}\n transition={{ duration: 0.8, delay: i * 0.05 }}\n style={{\n filter: `drop-shadow(0 0 4px ${fillColor.replace(\")\", \" / 0.5)\")})`,\n }}\n />\n );\n });\n })()}\n\n {/* Axis labels */}\n {resolvedAxes.map((axis, i) => {\n const p = getPoint(cx, cy, r + 20, angleStep, i);\n return (\n <text\n key={i}\n x={p.x}\n y={p.y}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n className=\"font-display text-[9px] font-bold tracking-[0.1em] uppercase\"\n fill=\"hsl(var(--muted-foreground))\"\n >\n {axis.label}\n </text>\n );\n })}\n </svg>\n\n {/* Legend row */}\n {showLegend && resolvedDatasets.some((ds) => ds.label) && (\n <div className=\"flex items-center gap-4 mt-3\">\n {resolvedDatasets.map((ds, di) => {\n if (!ds.label) return null;\n const c = ds.color ?? defaultColors[di % defaultColors.length];\n return (\n <div key={di} className=\"flex items-center gap-1.5\">\n <span\n className=\"inline-block w-2.5 h-2.5\"\n style={{ backgroundColor: c }}\n />\n <span className=\"font-mono text-[11px] text-muted-foreground uppercase tracking-wider\">\n {ds.label}\n </span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n },\n);\nRadarChart.displayName = \"RadarChart\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { RadarChart };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Bracket size config ─────────────────────────────────────────────────── */\n\nconst BRACKET_SIZE: Record<string, string> = {\n sm: \"w-5 h-5\",\n md: \"w-8 h-8\",\n lg: \"w-12 h-12\",\n};\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface HUDOverlayProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n systemLabel?: string;\n lat?: string;\n lon?: string;\n showCoords?: boolean;\n showCrosshair?: boolean;\n showScanlines?: boolean;\n showNoise?: boolean;\n bracketSize?: \"sm\" | \"md\" | \"lg\";\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst HUDOverlay = React.forwardRef<HTMLDivElement, HUDOverlayProps>(\n (\n {\n children,\n systemLabel = \"SYS::ENDFIELD v2.0\",\n lat = \"LAT 37.7749°N\",\n lon = \"LON 122.4194°W\",\n showCoords = true,\n showCrosshair = true,\n showScanlines = true,\n showNoise = false,\n bracketSize = \"md\",\n className,\n ...props\n },\n ref,\n ) => {\n const [time, setTime] = React.useState(\"\");\n\n React.useEffect(() => {\n const tick = () => setTime(new Date().toLocaleTimeString(\"en-GB\"));\n tick();\n const id = setInterval(tick, 1000);\n return () => clearInterval(id);\n }, []);\n\n const bClass = BRACKET_SIZE[bracketSize] ?? BRACKET_SIZE.md;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative border border-border bg-surface-0 aspect-video flex items-center justify-center overflow-hidden\",\n className,\n )}\n {...props}\n >\n {showScanlines && (\n <div className=\"absolute inset-0 scanline-overlay pointer-events-none\" />\n )}\n\n {showNoise && (\n <div\n className=\"absolute inset-0 pointer-events-none noise-overlay\"\n style={{\n backgroundImage:\n \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E\\\")\",\n backgroundRepeat: \"repeat\",\n backgroundSize: \"200px 200px\",\n opacity: 0.6,\n }}\n />\n )}\n\n {/* Corner brackets */}\n {(\n [\n [\"top-3 left-3\", \"border-t-2 border-l-2\"],\n [\"top-3 right-3\", \"border-t-2 border-r-2\"],\n [\"bottom-3 left-3\", \"border-b-2 border-l-2\"],\n [\"bottom-3 right-3\", \"border-b-2 border-r-2\"],\n ] as const\n ).map(([pos, borders], i) => (\n <div\n key={i}\n className={cn(\n \"absolute border-primary/40 pointer-events-none\",\n bClass,\n pos,\n borders,\n )}\n />\n ))}\n\n {/* Crosshair */}\n {showCrosshair && (\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 pointer-events-none\">\n <div\n className=\"w-6 h-px bg-primary/20\"\n style={{ position: \"absolute\", top: \"50%\", left: \"-12px\" }}\n />\n <div\n className=\"h-6 w-px bg-primary/20\"\n style={{ position: \"absolute\", left: \"50%\", top: \"-12px\" }}\n />\n </div>\n )}\n\n {/* Top-left: system label + live time */}\n {showCoords && (\n <div className=\"absolute top-4 left-12 font-mono text-[9px] text-muted-foreground/60 space-y-0.5\">\n <div>{systemLabel}</div>\n <div className=\"text-primary/60\">{time}</div>\n </div>\n )}\n\n {/* Top-right: coordinates */}\n {showCoords && (\n <div className=\"absolute top-4 right-12 font-mono text-[9px] text-muted-foreground/60 text-right space-y-0.5\">\n <div>{lat}</div>\n <div>{lon}</div>\n </div>\n )}\n\n {/* Bottom status bar */}\n <div className=\"absolute bottom-4 left-12 right-12 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-1.5 h-1.5 bg-ef-green\"\n style={{\n clipPath: \"polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)\",\n }}\n />\n <span className=\"font-mono text-[9px] text-ef-green/80\">\n LINK ACTIVE\n </span>\n </div>\n <div className=\"flex gap-4\">\n {[\"FPS:60\", \"MEM:47%\", \"NET:12ms\"].map((s) => (\n <span\n key={s}\n className=\"font-mono text-[9px] text-muted-foreground/50\"\n >\n {s}\n </span>\n ))}\n </div>\n </div>\n\n {/* User content — rendered above all decoration layers */}\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n },\n);\nHUDOverlay.displayName = \"HUDOverlay\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { HUDOverlay };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst missionCardVariants = cva(\n [\n \"relative bg-surface-1 border overflow-hidden transition-all duration-300\",\n \"before:absolute before:top-0 before:left-0 before:w-5 before:h-5\",\n \"before:border-t-2 before:border-l-2 before:border-primary/40 before:pointer-events-none\",\n \"after:absolute after:bottom-0 after:right-0 after:w-5 after:h-5\",\n \"after:border-b-2 after:border-r-2 after:border-primary/40 after:pointer-events-none\",\n ].join(\" \"),\n {\n variants: {\n priority: {\n low: \"border-border\",\n medium: \"border-ef-blue/30\",\n high: \"border-ef-orange/40\",\n critical: \"border-ef-red/50 shadow-[0_0_12px_rgba(255,71,87,0.1)]\",\n },\n status: {\n active: \"\",\n completed: \"opacity-70\",\n failed: \"opacity-60\",\n pending: \"border-dashed\",\n classified: \"border-primary/20\",\n },\n clickable: {\n true: \"cursor-pointer hover:-translate-y-0.5 hover:shadow-lg\",\n false: \"\",\n },\n },\n defaultVariants: { priority: \"medium\", status: \"active\", clickable: false },\n },\n);\n\n/* ── Config maps ──────────────────────────────────────────────────────────── */\n\nconst STATUS_CONFIG = {\n active: {\n label: \"ACTIVE\",\n cls: \"text-ef-green border-ef-green/40 bg-ef-green/10\",\n },\n completed: {\n label: \"COMPLETED\",\n cls: \"text-muted-foreground border-border bg-surface-1\",\n },\n failed: {\n label: \"FAILED\",\n cls: \"text-destructive border-destructive/40 bg-destructive/10\",\n },\n pending: {\n label: \"PENDING\",\n cls: \"text-ef-orange border-ef-orange/40 bg-ef-orange/10\",\n },\n classified: {\n label: \"CLASSIFIED\",\n cls: \"text-primary border-primary/40 bg-primary/10\",\n },\n} as const;\n\nconst PRIORITY_CONFIG = {\n low: { label: \"LOW\", cls: \"text-muted-foreground\" },\n medium: { label: \"MEDIUM\", cls: \"text-ef-blue\" },\n high: { label: \"HIGH\", cls: \"text-ef-orange\" },\n critical: { label: \"CRITICAL\", cls: \"text-destructive\" },\n} as const;\n\n/* ── Types ────────────────────────────────────────────────────────────────── */\n\nexport type MissionStatus = keyof typeof STATUS_CONFIG;\nexport type MissionPriority = keyof typeof PRIORITY_CONFIG;\n\nexport interface MissionCardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n Omit<VariantProps<typeof missionCardVariants>, \"clickable\"> {\n title: string;\n missionId?: string;\n description?: string;\n status?: MissionStatus;\n priority?: MissionPriority;\n date?: string;\n progress?: number;\n tags?: string[];\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst MissionCard = React.forwardRef<HTMLDivElement, MissionCardProps>(\n (\n {\n className,\n title,\n missionId,\n description,\n status = \"active\",\n priority = \"medium\",\n date,\n progress,\n tags,\n onClick,\n ...props\n },\n ref,\n ) => {\n const statusCfg = STATUS_CONFIG[status];\n const priorityCfg = PRIORITY_CONFIG[priority];\n const isClickable = !!onClick;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (isClickable && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onClick?.(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n const clampedProgress =\n progress !== undefined ? Math.min(100, Math.max(0, progress)) : undefined;\n\n return (\n <div\n ref={ref}\n role={isClickable ? \"button\" : \"article\"}\n aria-label={`Mission: ${title}`}\n tabIndex={isClickable ? 0 : undefined}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n className={cn(\n missionCardVariants({ priority, status, clickable: isClickable }),\n className,\n )}\n {...props}\n >\n {/* ── Header ── */}\n <div className=\"flex items-center justify-between px-4 py-2.5 border-b border-border bg-surface-0\">\n <span\n className={cn(\n \"font-mono text-[10px] font-semibold tracking-[0.1em] uppercase\",\n priorityCfg.cls,\n )}\n >\n ◆ PRIORITY: {priorityCfg.label}\n </span>\n <span\n className={cn(\n \"font-mono text-[10px] font-semibold tracking-[0.1em] uppercase border px-2 py-0.5\",\n statusCfg.cls,\n )}\n >\n {statusCfg.label}\n </span>\n </div>\n\n {/* ── Body ── */}\n <div className=\"px-4 pt-3 pb-2\">\n <h3 className=\"font-display text-[15px] font-bold uppercase tracking-wider text-foreground leading-tight\">\n {title}\n </h3>\n {missionId && (\n <p className=\"font-mono text-[11px] text-muted-foreground/60 mt-0.5\">\n ID: {missionId}\n </p>\n )}\n {description && (\n <p className=\"text-[13px] text-muted-foreground mt-2 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n\n {/* ── Footer ── */}\n {(date !== undefined ||\n clampedProgress !== undefined ||\n (tags && tags.length > 0)) && (\n <div className=\"px-4 pb-3 pt-1 space-y-2\">\n {clampedProgress !== undefined && (\n <div className=\"flex items-center gap-2\">\n <div\n role=\"progressbar\"\n aria-valuenow={clampedProgress}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label=\"Mission progress\"\n className=\"flex-1 h-1 bg-surface-2 overflow-hidden\"\n >\n <div\n className=\"h-full bg-primary transition-all duration-500\"\n style={{ width: `${clampedProgress}%` }}\n />\n </div>\n <span className=\"font-mono text-[10px] text-muted-foreground shrink-0 w-8 text-right\" aria-hidden=\"true\">\n {clampedProgress}%\n </span>\n </div>\n )}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n {date && (\n <span className=\"font-mono text-[11px] text-muted-foreground/60\">\n {date}\n </span>\n )}\n {tags && tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1 ml-auto\">\n {tags.map((tag) => (\n <span\n key={tag}\n className=\"font-mono text-[9px] uppercase tracking-wider border border-border px-1.5 py-0.5 text-muted-foreground/60\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\nMissionCard.displayName = \"MissionCard\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { MissionCard, missionCardVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Rarity config ────────────────────────────────────────────────────────── */\n\nconst RARITY_STAR_COLORS: Record<number, string> = {\n 1: \"text-muted-foreground/60\",\n 2: \"text-ef-green/70\",\n 3: \"text-ef-blue/80\",\n 4: \"text-ef-purple\",\n 5: \"text-ef-orange\",\n 6: \"text-primary\",\n};\n\n/* ── Stat fill colors ─────────────────────────────────────────────────────── */\n\nconst STAT_FILL: Record<string, string> = {\n default: \"bg-primary\",\n success: \"bg-ef-green\",\n danger: \"bg-destructive\",\n info: \"bg-ef-blue\",\n};\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst operatorCardVariants = cva(\n [\n \"relative bg-surface-1 border border-border overflow-hidden transition-all duration-300\",\n \"before:absolute before:top-0 before:left-0 before:w-5 before:h-5\",\n \"before:border-t-2 before:border-l-2 before:border-primary/40 before:pointer-events-none\",\n ].join(\" \"),\n {\n variants: {\n size: {\n compact: \"flex gap-3 p-3\",\n default: \"p-4\",\n },\n },\n defaultVariants: { size: \"default\" },\n },\n);\n\n/* ── Types ────────────────────────────────────────────────────────────────── */\n\nexport interface OperatorStat {\n label: string;\n value: number;\n max?: number;\n color?: \"default\" | \"success\" | \"danger\" | \"info\";\n}\n\nexport interface OperatorCardProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof operatorCardVariants> {\n name: string;\n operatorClass?: string;\n rarity?: 1 | 2 | 3 | 4 | 5 | 6;\n avatarSrc?: string;\n initials?: string;\n stats?: OperatorStat[];\n faction?: string;\n tags?: string[];\n}\n\n/* ── Avatar block ─────────────────────────────────────────────────────────── */\n\nfunction OperatorAvatar({\n src,\n name,\n initials,\n sizeClass,\n}: {\n src?: string;\n name: string;\n initials?: string;\n sizeClass: string;\n}) {\n return (\n <div\n className={cn(\n \"shrink-0 bg-surface-2 flex items-center justify-center\",\n \"font-display font-bold uppercase text-primary\",\n sizeClass,\n )}\n style={{\n clipPath:\n \"polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 0 100%)\",\n }}\n >\n {src ? (\n <img src={src} alt={name} className=\"w-full h-full object-cover\" />\n ) : (\n <span>{initials ?? name.slice(0, 2)}</span>\n )}\n </div>\n );\n}\n\n/* ── Stars ────────────────────────────────────────────────────────────────── */\n\nfunction RarityStars({ rarity }: { rarity: number }) {\n const starColor = RARITY_STAR_COLORS[rarity] ?? RARITY_STAR_COLORS[3];\n return (\n <span\n className=\"font-mono text-[11px]\"\n aria-label={`${rarity} star${rarity !== 1 ? \"s\" : \"\"}`}\n >\n {Array.from({ length: rarity }).map((_, i) => (\n <span key={`f-${i}`} className={starColor}>\n ◆\n </span>\n ))}\n {Array.from({ length: 6 - rarity }).map((_, i) => (\n <span key={`e-${i}`} className=\"text-muted-foreground/30\">\n ◇\n </span>\n ))}\n </span>\n );\n}\n\n/* ── Class badge (inline, replicates TacticalBadge style) ────────────────── */\n\nfunction ClassBadge({ label }: { label: string }) {\n return (\n <span\n className={[\n \"inline-flex items-center gap-1.5 clip-corner-sm border\",\n \"px-2.5 py-0.5 font-display text-[10px] font-bold tracking-[0.15em] uppercase\",\n \"border-primary/40 text-primary bg-primary/10\",\n ].join(\" \")}\n >\n <span style={{ fontSize: \"6px\" }}>◆</span>\n {label}\n </span>\n );\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst OperatorCard = React.forwardRef<HTMLDivElement, OperatorCardProps>(\n (\n {\n className,\n name,\n operatorClass,\n rarity = 3,\n avatarSrc,\n initials,\n stats,\n faction,\n tags,\n size,\n ...props\n },\n ref,\n ) => {\n const clampedRarity = Math.min(6, Math.max(1, rarity)) as\n | 1\n | 2\n | 3\n | 4\n | 5\n | 6;\n\n /* ── Compact layout ── */\n if (size === \"compact\") {\n return (\n <div\n ref={ref}\n className={cn(operatorCardVariants({ size }), className)}\n {...props}\n >\n <OperatorAvatar\n src={avatarSrc}\n name={name}\n initials={initials}\n sizeClass=\"w-12 h-12 text-sm\"\n />\n <div className=\"flex-1 min-w-0 py-0.5\">\n <p className=\"font-display text-[13px] font-bold uppercase tracking-wider text-foreground truncate\">\n {name}\n </p>\n {operatorClass && (\n <p className=\"font-mono text-[10px] text-muted-foreground mt-0.5\">\n ◆ {operatorClass.toUpperCase()}\n </p>\n )}\n <div className=\"mt-1\">\n <RarityStars rarity={clampedRarity} />\n </div>\n </div>\n </div>\n );\n }\n\n /* ── Default layout ── */\n return (\n <div\n ref={ref}\n className={cn(operatorCardVariants({ size }), className)}\n {...props}\n >\n {/* Top section: avatar + identity */}\n <div className=\"flex items-start gap-4 mb-3\">\n <OperatorAvatar\n src={avatarSrc}\n name={name}\n initials={initials}\n sizeClass=\"w-20 h-20 text-xl\"\n />\n <div className=\"flex-1 min-w-0 pt-1\">\n <h3 className=\"font-display text-[16px] font-bold uppercase tracking-wider text-foreground leading-tight\">\n {name}\n </h3>\n {faction && (\n <p className=\"font-mono text-[10px] text-muted-foreground/60 mt-0.5 uppercase tracking-wider\">\n {faction}\n </p>\n )}\n {operatorClass && (\n <div className=\"mt-1.5\">\n <ClassBadge label={operatorClass} />\n </div>\n )}\n <div className=\"mt-2\">\n <RarityStars rarity={clampedRarity} />\n </div>\n </div>\n </div>\n\n {/* Tags */}\n {tags && tags.length > 0 && (\n <div className=\"flex flex-wrap gap-1 mb-3\">\n {tags.map((tag) => (\n <span\n key={tag}\n className=\"font-mono text-[9px] uppercase tracking-wider border border-border px-1.5 py-0.5 text-muted-foreground/60\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n\n {/* Stats */}\n {stats && stats.length > 0 && (\n <div className=\"space-y-2 pt-2 border-t border-border\">\n {stats.map((stat) => {\n const maxVal = stat.max ?? stat.value;\n const pct =\n maxVal > 0 ? Math.min(100, (stat.value / maxVal) * 100) : 0;\n const fill =\n STAT_FILL[stat.color ?? \"default\"] ?? STAT_FILL.default;\n return (\n <div key={stat.label} className=\"flex items-center gap-2\">\n <span className=\"font-mono text-[10px] uppercase tracking-wider text-muted-foreground w-8 shrink-0\">\n {stat.label}\n </span>\n <div className=\"flex-1 h-1 bg-surface-2 overflow-hidden\">\n <div\n className={cn(\"h-full transition-all duration-500\", fill)}\n style={{ width: `${pct}%` }}\n />\n </div>\n <span className=\"font-mono text-[10px] text-muted-foreground/70 w-12 text-right shrink-0\">\n {stat.value.toLocaleString()}\n </span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n },\n);\nOperatorCard.displayName = \"OperatorCard\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { OperatorCard, operatorCardVariants };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst statusBarContainerVariants = cva(\"flex items-center gap-1.5\", {\n variants: {\n size: {\n sm: \"[&>span.seg]:w-3 [&>span.seg]:h-2\",\n md: \"[&>span.seg]:w-4 [&>span.seg]:h-3\",\n lg: \"[&>span.seg]:w-6 [&>span.seg]:h-4\",\n },\n },\n defaultVariants: { size: \"md\" },\n});\n\nconst statusBarSegmentVariants = cva(\"seg transition-all duration-200\", {\n variants: {\n variant: {\n health: \"\",\n energy: \"\",\n shield: \"\",\n experience: \"\",\n },\n },\n defaultVariants: { variant: \"health\" },\n});\n\n/* ── Fill color per variant ───────────────────────────────────────────────── */\n\nconst FILL_COLORS: Record<string, string> = {\n health: \"bg-ef-green\",\n energy: \"bg-primary\",\n shield: \"bg-ef-blue\",\n experience: \"bg-ef-purple\",\n};\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface StatusBarProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof statusBarContainerVariants>,\n VariantProps<typeof statusBarSegmentVariants> {\n value: number;\n max?: number;\n segments?: number;\n label?: string;\n showValue?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst StatusBar = React.forwardRef<HTMLDivElement, StatusBarProps>(\n (\n {\n className,\n value,\n max = 100,\n segments = 10,\n label,\n showValue = false,\n size,\n variant = \"health\",\n ...props\n },\n ref,\n ) => {\n const clampedValue = Math.min(max, Math.max(0, value));\n const ratio = max > 0 ? clampedValue / max : 0;\n const filledCount = Math.round(ratio * segments);\n\n const resolveFill = (segIdx: number): string => {\n if (segIdx >= filledCount) return \"bg-surface-2\";\n if (variant === \"health\") {\n if (ratio <= 0.15) return \"bg-destructive\";\n if (ratio <= 0.3) return \"bg-ef-orange\";\n }\n return FILL_COLORS[variant ?? \"health\"] ?? FILL_COLORS.health;\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"flex items-center gap-2\", className)}\n role=\"meter\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label ?? `${variant} bar`}\n {...props}\n >\n {label && (\n <span className=\"font-mono text-[10px] uppercase tracking-wider text-muted-foreground shrink-0\">\n {label}\n </span>\n )}\n\n <div className={cn(statusBarContainerVariants({ size }))}>\n {Array.from({ length: segments }).map((_, i) => (\n <span\n key={i}\n className={cn(\n statusBarSegmentVariants({ variant }),\n resolveFill(i),\n )}\n />\n ))}\n </div>\n\n {showValue && (\n <span className=\"font-mono text-[10px] text-muted-foreground shrink-0 ml-1\">\n {clampedValue}/{max}\n </span>\n )}\n </div>\n );\n },\n);\nStatusBar.displayName = \"StatusBar\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { StatusBar, statusBarContainerVariants, statusBarSegmentVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Log level config ─────────────────────────────────────────────────────── */\n\nexport type LogLevel = \"system\" | \"info\" | \"success\" | \"warning\" | \"error\";\n\nconst LOG_CONFIG: Record<\n LogLevel,\n { prefix: string; color: string; ariaLive: string }\n> = {\n system: { prefix: \"[SYS] \", color: \"text-muted-foreground\", ariaLive: \"off\" },\n info: { prefix: \"[INFO]\", color: \"text-ef-blue\", ariaLive: \"off\" },\n success: { prefix: \"[OK] \", color: \"text-ef-green\", ariaLive: \"polite\" },\n warning: { prefix: \"[WARN]\", color: \"text-ef-orange\", ariaLive: \"polite\" },\n error: { prefix: \"[ERR] \", color: \"text-destructive\", ariaLive: \"assertive\" },\n};\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface LogEntry {\n id?: string | number;\n level: LogLevel;\n message: string;\n timestamp?: string;\n}\n\nexport interface CommandOutputProps extends React.HTMLAttributes<HTMLDivElement> {\n entries: LogEntry[];\n showHeader?: boolean;\n headerText?: string;\n showCursor?: boolean;\n autoScroll?: boolean;\n maxHeight?: string;\n showTimestamp?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst CommandOutput = React.forwardRef<HTMLDivElement, CommandOutputProps>(\n (\n {\n className,\n entries,\n showHeader = true,\n headerText = \"TERMINAL\",\n showCursor = true,\n autoScroll = true,\n maxHeight = \"320px\",\n showTimestamp = false,\n ...props\n },\n ref,\n ) => {\n const scrollRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (autoScroll && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [entries, autoScroll]);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"bg-background border border-border font-mono text-[13px]\",\n className,\n )}\n {...props}\n >\n {/* Header */}\n {showHeader && (\n <div className=\"flex items-center gap-2 px-4 py-2 border-b border-border\">\n <div className=\"flex gap-1\">\n <span className=\"w-2.5 h-2.5 bg-surface-2\" />\n <span className=\"w-2.5 h-2.5 bg-surface-2\" />\n <span className=\"w-2.5 h-2.5 bg-surface-2\" />\n </div>\n <span className=\"font-mono text-[10px] text-muted-foreground/60 uppercase tracking-[0.15em] mx-auto\">\n {headerText}\n </span>\n </div>\n )}\n\n {/* Output area */}\n <div\n ref={scrollRef}\n style={{ maxHeight }}\n className=\"overflow-y-auto py-2 scrollbar-thin\"\n role=\"log\"\n aria-live=\"polite\"\n aria-label={headerText}\n >\n {entries.length === 0 && (\n <div className=\"px-4 py-2 text-muted-foreground/40 text-[12px]\">\n No output.\n </div>\n )}\n {entries.map((entry, i) => {\n const cfg = LOG_CONFIG[entry.level];\n const key = entry.id ?? i;\n return (\n <div\n key={key}\n className=\"flex gap-3 px-4 py-0.5 hover:bg-surface-1 transition-colors\"\n >\n {/* Prefix */}\n <span\n className={cn(\n \"text-[11px] font-semibold shrink-0 select-none\",\n \"w-[54px]\",\n cfg.color,\n )}\n >\n {cfg.prefix}\n </span>\n\n {/* Timestamp */}\n {showTimestamp && (\n <span className=\"text-[11px] text-muted-foreground/40 shrink-0\">\n {entry.timestamp ??\n new Date().toISOString().slice(0, 19).replace(\"T\", \"/\")}\n </span>\n )}\n\n {/* Message */}\n <span className=\"text-[#E0E0E0] break-all\">\n {entry.message}\n </span>\n </div>\n );\n })}\n\n {/* Blinking cursor */}\n {showCursor && (\n <div className=\"flex items-center gap-3 px-4 py-0.5 mt-0.5\">\n <span className=\"w-[54px] shrink-0\" />\n <span\n className=\"inline-block w-2 h-4 bg-primary animate-pulse\"\n aria-hidden\n />\n </div>\n )}\n </div>\n </div>\n );\n },\n);\nCommandOutput.displayName = \"CommandOutput\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { CommandOutput };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst countdownDigitVariants = cva(\n \"font-display font-bold text-primary tabular-nums leading-none\",\n {\n variants: {\n size: {\n sm: \"text-2xl\",\n md: \"text-5xl\",\n lg: \"text-7xl\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nconst countdownUnitVariants = cva(\n \"font-mono uppercase tracking-widest text-muted-foreground/60\",\n {\n variants: {\n size: {\n sm: \"text-[9px]\",\n md: \"text-[10px]\",\n lg: \"text-[11px]\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/* ── Helpers ─────────────────────────────────────────────────────────────── */\n\ninterface TimeLeft {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n total: number;\n}\n\nfunction computeTimeLeft(targetMs: number): TimeLeft {\n const total = Math.max(0, targetMs - Date.now());\n const seconds = Math.floor((total / 1000) % 60);\n const minutes = Math.floor((total / 1000 / 60) % 60);\n const hours = Math.floor((total / (1000 * 60 * 60)) % 24);\n const days = Math.floor(total / (1000 * 60 * 60 * 24));\n return { days, hours, minutes, seconds, total };\n}\n\nfunction pad2(n: number) {\n return String(n).padStart(2, \"0\");\n}\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface CountdownTimerProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof countdownDigitVariants> {\n targetDate?: string;\n seconds?: number;\n onComplete?: () => void;\n label?: string;\n autoHideZero?: boolean;\n showDays?: boolean;\n}\n\n/* ── Unit cell ───────────────────────────────────────────────────────────── */\n\nfunction UnitCell({\n value,\n unit,\n size,\n}: {\n value: string;\n unit: string;\n size: \"sm\" | \"md\" | \"lg\" | null | undefined;\n}) {\n return (\n <div className=\"flex flex-col items-center gap-1\">\n <span className={countdownDigitVariants({ size })}>{value}</span>\n <span className={countdownUnitVariants({ size })}>{unit}</span>\n </div>\n );\n}\n\n/* ── Separator ────────────────────────────────────────────────────────────── */\n\nfunction Colon({ size }: { size: \"sm\" | \"md\" | \"lg\" | null | undefined }) {\n const cls =\n size === \"sm\" ? \"text-xl\" : size === \"lg\" ? \"text-5xl\" : \"text-3xl\";\n return (\n <span\n className={cn(\n \"font-mono text-primary/30 font-bold select-none mb-4\",\n cls,\n )}\n >\n :\n </span>\n );\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst CountdownTimer = React.forwardRef<HTMLDivElement, CountdownTimerProps>(\n (\n {\n className,\n targetDate,\n seconds: durationSeconds,\n onComplete,\n label,\n autoHideZero = false,\n showDays = true,\n size,\n ...props\n },\n ref,\n ) => {\n const targetMs = React.useMemo(() => {\n if (targetDate) return new Date(targetDate).getTime();\n if (durationSeconds !== undefined)\n return Date.now() + durationSeconds * 1000;\n return Date.now();\n }, [targetDate, durationSeconds]);\n\n const [timeLeft, setTimeLeft] = React.useState<TimeLeft>(() =>\n computeTimeLeft(targetMs),\n );\n\n const completedRef = React.useRef(false);\n\n React.useEffect(() => {\n completedRef.current = false;\n\n const tick = () => {\n const tl = computeTimeLeft(targetMs);\n setTimeLeft(tl);\n if (tl.total === 0 && !completedRef.current) {\n completedRef.current = true;\n onComplete?.();\n }\n };\n\n tick();\n const id = setInterval(tick, 1000);\n return () => clearInterval(id);\n }, [targetMs, onComplete]);\n\n const ariaLabel = React.useMemo(\n () =>\n `Countdown: ${timeLeft.days} days ${timeLeft.hours} hours ${timeLeft.minutes} minutes ${timeLeft.seconds} seconds`,\n [timeLeft.days, timeLeft.hours, timeLeft.minutes],\n );\n\n const displayDays = showDays && !(autoHideZero && timeLeft.days === 0);\n\n return (\n <div\n ref={ref}\n className={cn(\"flex flex-col items-center gap-4\", className)}\n role=\"timer\"\n aria-label={ariaLabel}\n aria-live=\"off\"\n {...props}\n >\n {label && (\n <p className=\"font-mono text-[11px] uppercase tracking-widest text-muted-foreground\">\n {label}\n </p>\n )}\n\n <div className=\"flex items-end gap-2\">\n {displayDays && (\n <>\n <UnitCell value={String(timeLeft.days)} unit=\"DAYS\" size={size} />\n <Colon size={size} />\n </>\n )}\n <UnitCell value={pad2(timeLeft.hours)} unit=\"HRS\" size={size} />\n <Colon size={size} />\n <UnitCell value={pad2(timeLeft.minutes)} unit=\"MIN\" size={size} />\n <Colon size={size} />\n <UnitCell value={pad2(timeLeft.seconds)} unit=\"SEC\" size={size} />\n </div>\n </div>\n );\n },\n);\nCountdownTimer.displayName = \"CountdownTimer\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { CountdownTimer };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Types ───────────────────────────────────────────────────────────────── */\n\nexport interface TacticalTableColumn<T> {\n key: keyof T & string;\n header: string;\n sortable?: boolean;\n cell?: (row: T, rowIndex: number) => React.ReactNode;\n width?: string;\n align?: \"left\" | \"center\" | \"right\";\n}\n\nexport interface TacticalTableProps<\n T extends Record<string, unknown>,\n> extends React.HTMLAttributes<HTMLDivElement> {\n columns: TacticalTableColumn<T>[];\n data: T[];\n sortKey?: keyof T & string;\n sortDirection?: \"asc\" | \"desc\";\n onSort?: (key: keyof T & string) => void;\n selectable?: boolean;\n selectedIndices?: number[];\n onRowClick?: (row: T, index: number) => void;\n loading?: boolean;\n skeletonRows?: number;\n emptyState?: React.ReactNode;\n caption?: string;\n}\n\n/* ── Sort indicator ───────────────────────────────────────────────────────── */\n\nfunction SortIndicator({\n active,\n direction,\n}: {\n active: boolean;\n direction?: \"asc\" | \"desc\";\n}) {\n if (!active)\n return <span className=\"ml-1 text-muted-foreground/20 text-[10px]\">↕</span>;\n return (\n <span className=\"ml-1 text-primary text-[10px]\">\n {direction === \"asc\" ? \"▲\" : \"▼\"}\n </span>\n );\n}\n\n/* ── Skeleton row ─────────────────────────────────────────────────────────── */\n\nfunction SkeletonRow({ colCount }: { colCount: number }) {\n return (\n <tr>\n {Array.from({ length: colCount }).map((_, i) => (\n <td key={i} className=\"px-4 py-3 border-b border-border\">\n <div\n className={cn(\n \"h-3 bg-surface-2 animate-skeleton\",\n i === 0 ? \"w-3/4\" : i % 3 === 0 ? \"w-1/2\" : \"w-full\",\n )}\n />\n </td>\n ))}\n </tr>\n );\n}\n\n/* ── Align map ────────────────────────────────────────────────────────────── */\n\nconst ALIGN_CLASS = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n};\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nfunction TacticalTableInner<T extends Record<string, unknown>>(\n {\n className,\n columns,\n data,\n sortKey,\n sortDirection,\n onSort,\n selectable = false,\n selectedIndices,\n onRowClick,\n loading = false,\n skeletonRows = 4,\n emptyState,\n caption,\n ...props\n }: TacticalTableProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const selectedSet = new Set(selectedIndices ?? []);\n\n return (\n <div\n ref={ref}\n className={cn(\"w-full overflow-x-auto\", className)}\n {...props}\n >\n <table className=\"w-full border-collapse\" role=\"grid\">\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n\n {/* Head */}\n <thead>\n <tr>\n {columns.map((col) => {\n const isActiveSort = sortKey === col.key;\n return (\n <th\n key={col.key}\n scope=\"col\"\n className={cn(\n \"px-4 py-3 border-b border-border bg-surface-0 sticky top-0 z-10\",\n \"font-mono text-[11px] font-bold tracking-[0.12em] uppercase text-muted-foreground\",\n col.width ?? \"\",\n ALIGN_CLASS[col.align ?? \"left\"],\n col.sortable &&\n \"cursor-pointer select-none hover:text-foreground transition-colors\",\n )}\n aria-sort={\n col.sortable && isActiveSort\n ? sortDirection === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : undefined\n }\n onClick={col.sortable ? () => onSort?.(col.key) : undefined}\n >\n {col.header}\n {col.sortable && (\n <SortIndicator\n active={isActiveSort}\n direction={sortDirection}\n />\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n\n {/* Body */}\n <tbody>\n {loading ? (\n Array.from({ length: skeletonRows }).map((_, i) => (\n <SkeletonRow key={i} colCount={columns.length} />\n ))\n ) : data.length === 0 ? (\n <tr>\n <td colSpan={columns.length} className=\"px-4 py-12 text-center\">\n {emptyState ?? (\n <span className=\"font-mono text-[12px] text-muted-foreground/40 uppercase tracking-wider\">\n NO DATA\n </span>\n )}\n </td>\n </tr>\n ) : (\n data.map((row, rowIdx) => {\n const isSelected = selectable && selectedSet.has(rowIdx);\n const isEven = rowIdx % 2 === 1;\n return (\n <tr\n key={rowIdx}\n aria-selected={selectable ? isSelected : undefined}\n tabIndex={selectable ? 0 : undefined}\n onClick={\n selectable ? () => onRowClick?.(row, rowIdx) : undefined\n }\n onKeyDown={\n selectable\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onRowClick?.(row, rowIdx);\n }\n }\n : undefined\n }\n className={cn(\n \"transition-colors\",\n isSelected\n ? \"bg-primary/[0.06]\"\n : isEven\n ? \"bg-surface-1 hover:bg-primary/[0.03]\"\n : \"hover:bg-primary/[0.03]\",\n selectable && \"cursor-pointer focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-primary\",\n )}\n >\n {columns.map((col) => (\n <td\n key={col.key}\n className={cn(\n \"px-4 py-3 text-[14px] text-foreground border-b border-border\",\n ALIGN_CLASS[col.align ?? \"left\"],\n )}\n >\n {col.cell\n ? col.cell(row, rowIdx)\n : (row[col.key] as React.ReactNode)}\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nconst TacticalTable = React.forwardRef(TacticalTableInner) as <\n T extends Record<string, unknown>,\n>(\n props: TacticalTableProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> },\n) => React.ReactElement;\n\n(TacticalTable as { displayName?: string }).displayName = \"TacticalTable\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { TacticalTable };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface MatrixGridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: number;\n rows?: number;\n dotSize?: number;\n gap?: number;\n activeColor?: string;\n activeProbability?: number;\n intervalMs?: number;\n static?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst MatrixGrid = React.forwardRef<HTMLDivElement, MatrixGridProps>(\n (\n {\n className,\n cols = 20,\n rows = 10,\n dotSize = 4,\n gap = 8,\n activeColor = \"bg-primary\",\n activeProbability = 0.05,\n intervalMs = 300,\n static: isStatic = false,\n ...props\n },\n ref,\n ) => {\n const total = cols * rows;\n const [activeDots, setActiveDots] = React.useState<Set<number>>(\n () => new Set<number>(),\n );\n\n const prefersReduced = React.useMemo(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n }, []);\n\n React.useEffect(() => {\n if (isStatic || prefersReduced) return;\n\n const id = setInterval(() => {\n setActiveDots((prev) => {\n const next = new Set(prev);\n for (let i = 0; i < total; i++) {\n if (Math.random() < activeProbability) {\n next.add(i);\n }\n }\n for (const dot of next) {\n if (Math.random() < 0.3) next.delete(dot);\n }\n return next;\n });\n }, intervalMs);\n\n return () => clearInterval(id);\n }, [isStatic, prefersReduced, total, activeProbability, intervalMs]);\n\n return (\n <div\n ref={ref}\n className={cn(\"overflow-hidden\", className)}\n aria-hidden=\"true\"\n {...props}\n >\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${cols}, ${dotSize}px)`,\n gap: `${gap}px`,\n }}\n >\n {Array.from({ length: total }).map((_, i) => (\n <div\n key={i}\n style={{ width: dotSize, height: dotSize }}\n className={cn(\n \"transition-opacity\",\n isStatic || prefersReduced ? \"duration-0\" : \"duration-500\",\n activeDots.has(i)\n ? cn(\"opacity-100\", activeColor)\n : \"opacity-10 bg-foreground\",\n )}\n />\n ))}\n </div>\n </div>\n );\n },\n);\nMatrixGrid.displayName = \"MatrixGrid\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { MatrixGrid };\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\n/* ── Variants ─────────────────────────────────────────────────────────────── */\n\nconst frequencyBarsVariants = cva(\"flex items-end gap-px\", {\n variants: {\n color: {\n primary: \"[&>span]:bg-primary\",\n success: \"[&>span]:bg-ef-green\",\n danger: \"[&>span]:bg-destructive\",\n info: \"[&>span]:bg-ef-blue\",\n muted: \"[&>span]:bg-muted-foreground/40\",\n },\n },\n defaultVariants: { color: \"primary\" },\n});\n\n/* ── Props ───────────────────────────────────────────────────────────────── */\n\nexport interface FrequencyBarsProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, \"color\">,\n VariantProps<typeof frequencyBarsVariants> {\n barCount?: number;\n barWidth?: number;\n height?: number;\n speed?: \"slow\" | \"medium\" | \"fast\";\n paused?: boolean;\n}\n\n/* ── Component ───────────────────────────────────────────────────────────── */\n\nconst SPEED_DURATION: Record<string, string> = {\n slow: \"1.4s\",\n medium: \"0.8s\",\n fast: \"0.4s\",\n};\n\nconst FrequencyBars = React.forwardRef<HTMLDivElement, FrequencyBarsProps>(\n (\n {\n className,\n barCount = 12,\n barWidth = 3,\n height = 32,\n speed = \"medium\",\n paused = false,\n color,\n style,\n ...props\n },\n ref,\n ) => {\n const duration = SPEED_DURATION[speed] ?? SPEED_DURATION.medium;\n\n const bars = React.useMemo(\n () =>\n Array.from({ length: barCount }, (_, i) => ({\n delay: `${((i * 0.13) % 0.9).toFixed(2)}s`,\n })),\n [barCount],\n );\n\n return (\n <div\n ref={ref}\n className={cn(frequencyBarsVariants({ color }), className)}\n style={{ height, ...style }}\n aria-hidden=\"true\"\n {...props}\n >\n {bars.map((bar, i) => (\n <span\n key={i}\n style={{\n display: \"inline-block\",\n width: barWidth,\n height: \"100%\",\n transformOrigin: \"center bottom\",\n animation: `frequency-bar ${duration} ease-in-out infinite alternate`,\n animationDelay: bar.delay,\n animationPlayState: paused ? \"paused\" : \"running\",\n }}\n />\n ))}\n </div>\n );\n },\n);\nFrequencyBars.displayName = \"FrequencyBars\";\n\n/* ── Exports ─────────────────────────────────────────────────────────────── */\n\nexport { FrequencyBars, frequencyBarsVariants };\n"],"names":["cn","inputs","twMerge","clsx","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","React","className","sideOffset","props","ref","jsx","ToastProvider","ToastPrimitives","ToastViewport","toastVariants","cva","Toast","variant","ToastAction","ToastClose","X","ToastTitle","ToastDescription","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","t","toast","listeners","memoryState","listener","id","update","dismiss","open","useToast","setState","index","Toaster","toasts","title","description","jsxs","theme","Sonner","notify","msg","opts","buttonVariants","Button","size","asChild","loading","disabled","children","type","Slot","badgeVariants","Badge","removable","onRemove","e","BRACKET_BASE","cardVariants","Card","hoverable","selected","CardHeader","CardMeta","CardTitle","CardDescription","CardBody","CardFooter","OperatorCard","name","faction","rarity","imageSrc","imageAlt","LinkCard","icon","href","external","onClick","inner","FOCUSABLE","useFocusTrap","containerRef","active","useEffect","container","getFocusable","handleKeyDown","focusable","first","last","useShortcut","key","handler","options","meta","ctrl","shift","preventDefault","useInView","threshold","once","inView","setInView","useState","inViewRef","useRef","el","obs","entry","useStagger","delay","_","i","inputWrapperVariants","Input","leftElement","rightElement","pl","pr","Label","HelperText","textareaVariants","Textarea","showCount","maxLength","onChange","rest","setCount","initial","counterColorClass","Checkbox","label","helperText","generatedId","checkboxId","CheckboxPrimitive","RadioGroup","RadioGroupPrimitive","RadioGroupItem","itemId","Switch","offLabel","onLabel","checked","defaultChecked","onCheckedChange","switchId","isOn","setIsOn","spinKey","setSpinKey","handleChange","v","k","SwitchPrimitive","Select","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","SelectScrollUpButton","SelectScrollDownButton","SelectContent","position","SelectLabel","SelectItem","danger","SelectSeparator","avatarVariants","statusColors","Avatar","status","AvatarPrimitive","AvatarImage","AvatarFallback","progressTrackVariants","progressFillVariants","Progress","value","showLabel","isIndeterminate","clampedValue","ProgressPrimitive","Accordion","AccordionPrimitive","AccordionItem","AccordionTrigger","AccordionContent","Tabs","TabsPrimitive","tabsListVariants","TabsList","tabsTriggerVariants","TabsTrigger","TabsContent","Popover","PopoverPrimitive","PopoverTrigger","PopoverAnchor","PopoverContent","align","Dialog","DialogPrimitive","DialogTrigger","DialogPortal","DialogClose","DialogOverlay","dialogContentVariants","DialogContent","DialogHeader","DialogFooter","DialogTitle","DialogDescription","separatorVariants","Separator","orientation","decorative","resolvedOrientation","SeparatorPrimitive","skeletonLineVariants","SkeletonLine","width","height","SkeletonText","lines","lineWidths","skeletonAvatarSizes","SkeletonAvatar","SkeletonCard","showAvatar","ASPECT_RATIOS","SkeletonImage","aspectRatio","SkeletonTableRow","columns","PRESET_COPY","emptyStateVariants","EmptyState","preset","resolvedTitle","resolvedDesc","alertVariants","VARIANT_CONFIG","Alert","dismissible","onDismiss","cfg","showIcon","iconNode","TopBanner","timelineItemVariants","TimelineItem","date","marker","Timeline","items","item","itemChildren","itemCn","getStepState","currentStep","Stepper","steps","step","isComplete","isCurrent","isLast","stateLabel","paginationItemVariants","getPageRange","current","total","siblings","left","right","pages","Pagination","totalPages","currentPage","onPageChange","siblingCount","isPrevDisabled","isNextDisabled","page","Breadcrumb","separator","numberInputVariants","NumberInput","defaultValue","min","max","isControlled","internalValue","setInternalValue","clamp","n","next","clamped","decrement","increment","atMin","atMax","buttonBase","parsed","ViewToggle","controlledValue","storageKey","stored","FilterChip","FilterBar","filters","activeFilters","onFilterChange","onClearAll","chips","searchPlaceholder","searchValue","onSearchChange","openFilter","setOpenFilter","dropdownPos","setDropdownPos","dropdownRef","hasActive","handleClose","_a","handleScroll","handleFilterToggle","filterId","rect","menuHeight","f","y","activeFilterForOpen","filter","isActive","Fragment","chip","ReactDOM","opt","OTPInput","length","onComplete","success","error","resendCooldown","onResend","resendLabel","shaking","setShaking","countdown","setCountdown","inputsRef","c","digits","midpoint","char","digit","d","_b","_c","handlePaste","pasted","focusIndex","handleResend","renderInput","DAY_HEADERS","MONTHS","parseISO","str","m","dt","toISO","day","formatDisplay","iso","isSameDay","a","b","isToday","buildGrid","year","month","startOffset","cells","sizeMap","DatePicker","placeholder","minDate","maxDate","triggerId","today","selectedDate","viewYear","setViewYear","viewMonth","setViewMonth","setOpen","grid","goToPrevMonth","goToNextMonth","goToPrevYear","goToNextYear","isDisabledDate","handleSelectDay","handleToday","handleClear","displayValue","h","inMonth","isSelected","todayFlag","disabledFlag","sizeClasses","Rating","readOnly","hovered","setHovered","display","handleSelect","starValue","filled","formatCountdown","seconds","s","SessionTimeoutModal","secondsRemaining","onExtend","onLogout","onAutoLogout","warningAt","isCritical","isUrgent","countdownClass","progress","ZONE_CONFIG","FileUpload","accept","multiple","maxSize","onFileSelect","controlledState","internalState","setInternalState","files","setFiles","inputRef","instructionsId","config","isDisabled","isValidType","file","processFiles","rawFiles","valid","sizeOk","typeOk","hasError","hasUploadingFiles","interval","prev","updated","newProgress","hasErrors","handleDragOver","hasInvalid","handleDragLeave","handleDrop","removeFile","DISMISS_THRESHOLD","closestSnapHeight","currentHeightPx","snapHeightsPx","closest","minDist","dist","BottomSheet","onClose","maxHeight","snapPoints","initialSnap","mounted","setMounted","visible","setVisible","dragOffset","setDragOffset","isDragging","setIsDragging","startYRef","sheetRef","hasMultipleSnaps","clampedInitial","activeSnapIndex","setActiveSnapIndex","raf","handleKey","handlePointerDown","handlePointerMove","delta","handlePointerUp","vh","sp","effectiveHeight","newHeight","newIndex","handlePointerCancel","sheetStyle","CarouselItem","Carousel","autoPlay","autoPlayInterval","showDots","showArrows","loop","trackRef","setCurrent","scrollTo","track","child","timer","ResizeHandle","direction","PanelResizeHandle","CHART_COLORS","endfieldChartTheme","renderMarkdown","md","line","wrapSelection","textarea","before","after","start","end","newVal","newCursor","insertBlock","block","insertion","ToolbarBtn","ToolbarSep","RichTextEditor","minHeight","controlledMode","onModeChange","internalMode","setInternalMode","textareaRef","mode","handleMode","applyInline","ph","ta","applyBlock","charCount","FooterColumn","FooterLink","Footer","brand","tagline","copyright","note","Table","TableHeader","TableBody","TableFooter","TableRow","TableHead","sortable","sortDirection","onSort","TableCell","TableCaption","TableEmpty","colSpan","List","ListItem","NumberedList","NumberedListItem","_index","DescriptionList","DescriptionTerm","DescriptionDetail","LinkList","LinkListItem","Stat","trend","trendValue","trendColor","trendIndicator","StatGrid","SortControl","activeId","onSortChange","handleClick","MAX_PULL","PullToRefresh","onRefresh","refreshingLabel","completeLabel","thresholdVibratedRef","phase","setPhase","distance","setDistance","mergedRef","node","tryVibrate","duration","handleTouchStart","handleTouchMove","diff","handleTouchEnd","indicatorOpacity","indicatorY","getActionBg","getActionTextColor","SwipeableItem","leftSwipeAction","rightSwipeAction","revealThreshold","triggerThreshold","translateX","setTranslateX","startXRef","currentDeltaRef","isDraggingRef","hapticThresholdFiredRef","hapticTriggerFiredRef","deltaX","maxSwipe","absDelta","CopyClipboard","text","resetDelay","onCopy","copied","setCopied","timerRef","BackToTop","smooth","onScroll","ScrollProgress","color","style","setProgress","scrolled","CookieConsent","message","onAccept","onCustomize","acceptLabel","customizeLabel","useCommandPalette","p","filterGroups","groups","query","q","g","CommandPalette","onOpenChange","onSelect","setQuery","activeIdx","setActiveIdx","filtered","allItems","itemCounter","group","idx","Dropdown","trigger","normalizedGroups","gi","ii","ContextMenu","pos","setPos","menuRef","onMouseDown","onKeyDown","menuW","menuH","acc","x","SpoilerBlock","revealLabel","hideLabel","defaultRevealed","revealed","setRevealed","SpoilerInline","ThemeSwitcher","isLight","setIsLight","isAnimating","setIsAnimating","saved","handleExternal","newTheme","Moon","Sun","INTENSITY_CONFIG","GlitchText","intensity","continuous","continuousInterval","glitching","setGlitching","off","animClass","SIZE_MAP","DiamondLoader","STATUS_LABELS","STATUS_COLORS","TacticalPanel","headerAction","collapsible","defaultCollapsed","controlledCollapsed","onCollapseChange","internalCollapsed","setInternalCollapsed","isCollapsed","handleHeaderClick","Crosshair","HoloCard","subtitle","Icon","hovering","setHovering","SPEED_INTERVALS","STREAM_COLOR_OVERRIDES","MSG_TYPE_COLORS","DEFAULT_MESSAGES","msgText","msgColor","override","txt","DataStream","messages","speed","messageType","intervalMs","setLines","Terminal","AnimatePresence","motion","tacticalBadgeVariants","TacticalBadge","WARNING_STYLES","WarningBanner","level","AlertTriangle","ScanDivider","CoordinateTag","unit","getPoint","cx","cy","r","angleStep","toPoints","pts","RadarChart","data","axes","datasets","showLegend","forwardedRef","innerRef","isInView","mergeRef","resolvedAxes","resolvedDatasets","levels","gridPolygons","lvl","lr","axisLines","datasetPaths","ds","dataPoints","axis","norm","defaultColors","path","center","di","fillColor","fillOpacity","BRACKET_SIZE","HUDOverlay","systemLabel","lat","lon","showCoords","showCrosshair","showScanlines","showNoise","bracketSize","time","setTime","tick","bClass","borders","missionCardVariants","STATUS_CONFIG","PRIORITY_CONFIG","MissionCard","missionId","priority","tags","statusCfg","priorityCfg","isClickable","clampedProgress","tag","RARITY_STAR_COLORS","STAT_FILL","operatorCardVariants","OperatorAvatar","src","initials","sizeClass","RarityStars","starColor","ClassBadge","operatorClass","avatarSrc","stats","clampedRarity","stat","maxVal","pct","fill","statusBarContainerVariants","statusBarSegmentVariants","FILL_COLORS","StatusBar","segments","showValue","ratio","filledCount","resolveFill","segIdx","LOG_CONFIG","CommandOutput","entries","showHeader","headerText","showCursor","autoScroll","showTimestamp","scrollRef","countdownDigitVariants","countdownUnitVariants","computeTimeLeft","targetMs","minutes","hours","pad2","UnitCell","Colon","CountdownTimer","targetDate","durationSeconds","autoHideZero","showDays","timeLeft","setTimeLeft","completedRef","tl","ariaLabel","displayDays","SortIndicator","SkeletonRow","colCount","ALIGN_CLASS","TacticalTableInner","sortKey","selectable","selectedIndices","onRowClick","skeletonRows","emptyState","caption","selectedSet","col","isActiveSort","row","rowIdx","isEven","TacticalTable","MatrixGrid","cols","rows","dotSize","gap","activeColor","activeProbability","isStatic","activeDots","setActiveDots","prefersReduced","dot","frequencyBarsVariants","SPEED_DURATION","FrequencyBars","barCount","barWidth","paused","bars","bar"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,SAASA,KAAMC,GAAsB;AAC1C,SAAOC,GAAQC,GAAKF,CAAM,CAAC;AAC7B;ACAA,MAAMG,KAAkBC,EAAiB,UAEnCC,KAAUD,EAAiB,MAE3BE,KAAiBF,EAAiB,SAElCG,KAAiBC,EAAM,WAG3B,CAAC,EAAE,WAAAC,GAAW,YAAAC,IAAa,GAAG,GAAGC,KAASC,MAC1C,gBAAAC;AAAA,EAACT,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAAQ;AAAA,IACA,YAAAF;AAAA,IACA,WAAWX;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDJ,GAAe,cAAcH,EAAiB,QAAQ;AClBtD,MAAMU,KAAgBC,EAAgB,UAEhCC,KAAgBR,EAAM,WAG1B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACE,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAH;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDK,GAAc,cAAcD,EAAgB,SAAS;AAErD,MAAME,KAAgBC;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAEMC,KAAQX,EAAM,WAIlB,CAAC,EAAE,WAAAC,GAAW,SAAAW,GAAS,GAAGT,EAAA,GAASC,MAEjC,gBAAAC;AAAA,EAACE,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAH;AAAA,IACA,WAAWb,EAAGkB,GAAc,EAAE,SAAAG,EAAA,CAAS,GAAGX,CAAS;AAAA,IAClD,GAAGE;AAAA,EAAA;AAAA,CAGT;AACDQ,GAAM,cAAcJ,EAAgB,KAAK;AAEzC,MAAMM,KAAcb,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACE,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAH;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDU,GAAY,cAAcN,EAAgB,OAAO;AAEjD,MAAMO,KAAad,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACE,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAH;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAEF,eAAY;AAAA,IACX,GAAGE;AAAA,IAEJ,UAAA,gBAAAE,EAACU,IAAA,EAAE,WAAU,UAAA,CAAU;AAAA,EAAA;AACzB,CACD;AACDD,GAAW,cAAcP,EAAgB,MAAM;AAE/C,MAAMS,KAAahB,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACE,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAH;AAAA,IACA,WAAWb,EAAG,yBAAyBU,CAAS;AAAA,IAC/C,GAAGE;AAAA,EAAA;AACN,CACD;AACDa,GAAW,cAAcT,EAAgB,MAAM;AAE/C,MAAMU,KAAmBjB,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACE,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAH;AAAA,IACA,WAAWb,EAAG,sBAAsBU,CAAS;AAAA,IAC5C,GAAGE;AAAA,EAAA;AACN,CACD;AACDc,GAAiB,cAAcV,EAAgB,YAAY;AC1G3D,MAAMW,KAAc,GACdC,KAAqB;AAgB3B,IAAIC,KAAQ;AAEZ,SAASC,KAAQ;AACf,SAAAD,MAASA,KAAQ,KAAK,OAAO,kBACtBA,GAAM,SAAA;AACf;AA0BA,MAAME,yBAAoB,IAAA,GAEpBC,KAAmB,CAACC,MAAoB;AAC5C,MAAIF,GAAc,IAAIE,CAAO;AAC3B;AAGF,QAAMC,IAAU,WAAW,MAAM;AAC/B,IAAAH,GAAc,OAAOE,CAAO,GAC5BE,EAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAAF;AAAA,IAAA,CACD;AAAA,EACH,GAAGL,EAAkB;AAErB,EAAAG,GAAc,IAAIE,GAASC,CAAO;AACpC,GAEaE,KAAU,CAACC,GAAcC,MAA0B;AAC9D,UAAQA,EAAO,MAAA;AAAA,IACb,KAAK;AACH,aAAO;AAAA,QACL,GAAGD;AAAA,QACH,QAAQ,CAACC,EAAO,OAAO,GAAGD,EAAM,MAAM,EAAE,MAAM,GAAGV,EAAW;AAAA,MAAA;AAAA,IAGhE,KAAK;AACH,aAAO;AAAA,QACL,GAAGU;AAAA,QACH,QAAQA,EAAM,OAAO;AAAA,UAAI,CAACE,MACxBA,EAAE,OAAOD,EAAO,MAAM,KAAK,EAAE,GAAGC,GAAG,GAAGD,EAAO,UAAUC;AAAA,QAAA;AAAA,MACzD;AAAA,IAGJ,KAAK,iBAAiB;AACpB,YAAM,EAAE,SAAAN,MAAYK;AAIpB,aAAIL,IACFD,GAAiBC,CAAO,IAExBI,EAAM,OAAO,QAAQ,CAACG,MAAU;AAC9B,QAAAR,GAAiBQ,EAAM,EAAE;AAAA,MAC3B,CAAC,GAGI;AAAA,QACL,GAAGH;AAAA,QACH,QAAQA,EAAM,OAAO;AAAA,UAAI,CAACE,MACxBA,EAAE,OAAON,KAAWA,MAAY,SAC5B;AAAA,YACE,GAAGM;AAAA,YACH,MAAM;AAAA,UAAA,IAERA;AAAA,QAAA;AAAA,MACN;AAAA,IAEJ;AAAA,IACA,KAAK;AACH,aAAID,EAAO,YAAY,SACd;AAAA,QACL,GAAGD;AAAA,QACH,QAAQ,CAAA;AAAA,MAAC,IAGN;AAAA,QACL,GAAGA;AAAA,QACH,QAAQA,EAAM,OAAO,OAAO,CAACE,MAAMA,EAAE,OAAOD,EAAO,OAAO;AAAA,MAAA;AAAA,EAC5D;AAEN,GAEMG,IAA2C,CAAA;AAEjD,IAAIC,KAAqB,EAAE,QAAQ,GAAC;AAEpC,SAASP,EAASG,GAAgB;AAChC,EAAAI,KAAcN,GAAQM,IAAaJ,CAAM,GACzCG,EAAU,QAAQ,CAACE,MAAa;AAC9B,IAAAA,EAASD,EAAW;AAAA,EACtB,CAAC;AACH;AAIA,SAASF,GAAM,EAAE,GAAG5B,KAAgB;AAClC,QAAMgC,IAAKd,GAAA,GAELe,IAAS,CAACjC,MACduB,EAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO,EAAE,GAAGvB,GAAO,IAAAgC,EAAA;AAAA,EAAG,CACvB,GACGE,IAAU,MAAMX,EAAS,EAAE,MAAM,iBAAiB,SAASS,GAAI;AAErE,SAAAT,EAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAGvB;AAAA,MACH,IAAAgC;AAAA,MACA,MAAM;AAAA,MACN,cAAc,CAACG,MAAS;AACtB,QAAKA,KAAMD,EAAA;AAAA,MACb;AAAA,IAAA;AAAA,EACF,CACD,GAEM;AAAA,IACL,IAAAF;AAAA,IACA,SAAAE;AAAA,IACA,QAAAD;AAAA,EAAA;AAEJ;AAEA,SAASG,KAAW;AAClB,QAAM,CAACX,GAAOY,CAAQ,IAAIxC,EAAM,SAAgBiC,EAAW;AAE3D,SAAAjC,EAAM,UAAU,OACdgC,EAAU,KAAKQ,CAAQ,GAChB,MAAM;AACX,UAAMC,IAAQT,EAAU,QAAQQ,CAAQ;AACxC,IAAIC,IAAQ,MACVT,EAAU,OAAOS,GAAO,CAAC;AAAA,EAE7B,IACC,CAACb,CAAK,CAAC,GAEH;AAAA,IACL,GAAGA;AAAA,IACH,OAAAG;AAAA,IACA,SAAS,CAACP,MAAqBE,EAAS,EAAE,MAAM,iBAAiB,SAAAF,GAAS;AAAA,EAAA;AAE9E;AC/KO,SAASkB,KAAU;AACxB,QAAM,EAAE,QAAAC,EAAA,IAAWJ,GAAA;AAEnB,2BACGjC,IAAA,EACE,UAAA;AAAA,IAAAqC,EAAO,IAAI,SAAU,EAAE,IAAAR,GAAI,OAAAS,GAAO,aAAAC,GAAa,QAAAhB,GAAQ,GAAG1B,KAAS;AAClE,aACE,gBAAA2C,EAACnC,IAAA,EAAgB,GAAGR,GAClB,UAAA;AAAA,QAAA,gBAAA2C,EAAC,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,UAAAF,KAAS,gBAAAvC,EAACW,MAAY,UAAA4B,EAAA,CAAM;AAAA,UAC5BC,KACC,gBAAAxC,EAACY,IAAA,EAAkB,UAAA4B,EAAA,CAAY;AAAA,QAAA,GAEnC;AAAA,QACChB;AAAA,0BACAf,IAAA,CAAA,CAAW;AAAA,MAAA,EAAA,GARFqB,CASZ;AAAA,IAEJ,CAAC;AAAA,sBACA3B,IAAA,CAAA,CAAc;AAAA,EAAA,GACjB;AAEJ;AC5BA,MAAMkC,KAAU,CAAC,EAAE,OAAAK,IAAQ,QAAQ,GAAG5C,QACpC,gBAAAE;AAAA,EAAC2C;AAAAA,EAAA;AAAA,IACC,OAAAD;AAAA,IACA,WAAU;AAAA,IACV,YAAU;AAAA,IACV,aAAW;AAAA,IACX,UAAU;AAAA,IACV,eAAe;AAAA,IACf,uBAAqB;AAAA,IACrB,cAAc;AAAA,MACZ,YAAY;AAAA,QACV,OACE;AAAA,QACF,OACE;AAAA,QACF,aAAa;AAAA,QACb,cACE;AAAA,QACF,cACE;AAAA,QACF,aACE;AAAA,QACF,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAED,GAAG5C;AAAA,EAAA;AACN,GAGI8C,KAAS;AAAA,EACb,MAAM,CAACC,GAAaC,MAClBpB,EAAMmB,GAAK,EAAE,UAAU,KAAM,GAAGC,GAAM;AAAA,EACxC,SAAS,CAACD,GAAaC,MACrBpB,EAAM,QAAQmB,GAAK,EAAE,UAAU,KAAM,GAAGC,EAAA,CAAM;AAAA,EAChD,SAAS,CAACD,GAAaC,MACrBpB,EAAM,QAAQmB,GAAK,EAAE,UAAU,KAAM,GAAGC,EAAA,CAAM;AAAA,EAChD,OAAO,CAACD,GAAaC,MACnBpB,EAAM,MAAMmB,GAAK,EAAE,UAAU,OAAU,GAAGC,EAAA,CAAM;AACpD,GCvCMC,KAAiB1C;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,WACE;AAAA,QACF,OACE;AAAA,QACF,QACE;AAAA,QACF,MAAM;AAAA,QACN,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAmBM2C,KAASrD,EAAM;AAAA,EACnB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,SAAAW;AAAA,IACA,MAAA0C;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,SAAAC,IAAU;AAAA,IACV,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,GAAGxD;AAAA,EAAA,GAELC,MAEImD,IAEA,gBAAAlD;AAAA,IAACuD;AAAA,IAAA;AAAA,MACC,KAAAxD;AAAA,MACA,WAAWb,EAAG6D,GAAe,EAAE,SAAAxC,GAAS,MAAA0C,EAAA,CAAM,GAAGrD,CAAS;AAAA,MAC1D,iBAAewD,KAAY;AAAA,MAC1B,GAAGtD;AAAA,MAEH,UAAAuD;AAAA,IAAA;AAAA,EAAA,IAML,gBAAAZ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,MAAAuD;AAAA,MACA,WAAWpE;AAAA,QACT6D,GAAe,EAAE,SAAAxC,GAAS,MAAA0C,GAAM;AAAA,QAChCE,KAAW;AAAA,QACXvD;AAAA,MAAA;AAAA,MAEF,UAAUwD,KAAYD;AAAA,MACtB,aAAWA,KAAW;AAAA,MACrB,GAAGrD;AAAA,MAEH,UAAA;AAAA,QAAAqD,KACC,gBAAAnD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAY;AAAA,UAAA;AAAA,QAAA;AAAA,QAGfqD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIT;AACAL,GAAO,cAAc;ACtGrB,MAAMQ,KAAgBnD;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAkBMoD,KAAQ9D,EAAM;AAAA,EAClB,CAAC,EAAE,WAAAC,GAAW,SAAAW,GAAS,WAAAmD,GAAW,UAAAC,GAAU,UAAAN,GAAU,GAAGvD,KAASC,MAChE,gBAAA0C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAWb,EAAGsE,GAAc,EAAE,SAAAjD,GAAS,GAAGmD,KAAa,QAAQ9D,CAAS;AAAA,MACvE,GAAGE;AAAA,MAEH,UAAA;AAAA,QAAAuD;AAAA,QACAK,KACC,gBAAA1D;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,CAAC4D,MAAM;AACd,cAAAA,EAAE,gBAAA,GACFD,KAAA,QAAAA;AAAA,YACF;AAAA,YACA,WAAU;AAAA,YACV,cAAW;AAAA,YACX,UAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAAA;AAAA,EAAA;AAIR;AACAF,GAAM,cAAc;AC5DpB,MAAMI,KACJ,+VAOIC,KAAezD;AAAA,EACnB;AAAA,IACE;AAAA,IACAwD;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,WAAW;AAAA,QACT,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACV,OAAO;AAAA,MAAA;AAAA,MAET,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,WAAW;AAAA,MACX,UAAU;AAAA,IAAA;AAAA,EACZ;AAEJ,GAsBME,KAAOpE,EAAM;AAAA,EACjB,CAAC,EAAE,WAAAC,GAAW,WAAAoE,GAAW,UAAAC,GAAU,GAAGnE,EAAA,GAASC,MAC7C,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb,EAAG4E,GAAa,EAAE,WAAAE,GAAW,UAAAC,EAAA,CAAU,GAAGrE,CAAS;AAAA,MAC7D,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACAiE,GAAK,cAAc;AAGnB,MAAMG,KAAavE,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb,EAAG,8CAA8CU,CAAS;AAAA,IACpE,GAAGE;AAAA,EAAA;AACN,CACD;AACDoE,GAAW,cAAc;AAGzB,MAAMC,KAAWxE,EAAM,WAGrB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDqE,GAAS,cAAc;AAGvB,MAAMC,KAAYzE,EAAM,WAGtB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDsE,GAAU,cAAc;AAGxB,MAAMC,KAAkB1E,EAAM,WAG5B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb,EAAG,iDAAiDU,CAAS;AAAA,IACvE,GAAGE;AAAA,EAAA;AACN,CACD;AACDuE,GAAgB,cAAc;AAG9B,MAAMC,KAAW3E,EAAM,WAGrB,CAAC,EAAE,WAAAC,GAAW,GAAGE,KAASC,wBACzB,OAAA,EAAI,KAAAA,GAAU,WAAWb,EAAG,OAAOU,CAAS,GAAI,GAAGE,GAAO,CAC5D;AACDwE,GAAS,cAAc;AAGvB,MAAMC,KAAa5E,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDyE,GAAW,cAAc;AAazB,MAAMC,KAAe7E,EAAM;AAAA,EACzB,CACE,EAAE,MAAA8E,GAAM,SAAAC,GAAS,QAAAC,IAAS,GAAG,UAAAC,GAAU,UAAAC,GAAU,UAAAZ,GAAU,WAAArE,GAAW,GAAGE,EAAA,GACzEC,MAEA,gBAAA0C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACA;AAAA,QACA+E,KAAY;AAAA,QACZrE;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAGJ,UAAA;AAAA,QAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,4DACZ,UAAA4E,IACC,gBAAA5E;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK4E;AAAA,YACL,KAAKC,KAAYJ;AAAA,YACjB,WAAU;AAAA,UAAA;AAAA,QAAA,IAGZ,gBAAAzE,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,4BAA2B,UAAA,IAAA,CAAC,EAAA,CAC9C,GAEJ;AAAA,0BAEC,OAAA,EAAI,WAAU,oBACb,UAAA,gBAAAyC,EAAC,QAAA,EAAK,WAAU,2CACb,UAAA;AAAA,UAAA,IAAI,OAAOkC,CAAM;AAAA,UACjB,IAAI,OAAO,IAAIA,CAAM;AAAA,QAAA,EAAA,CACxB,EAAA,CACF;AAAA,QAEA,gBAAAlC,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,UAAA,gBAAAzC,EAAC,KAAA,EAAE,WAAU,2FACV,UAAAyE,GACH;AAAA,UACCC,KACC,gBAAA1E,EAAC,KAAA,EAAE,WAAU,wDACV,UAAA0E,EAAA,CACH;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AACAF,GAAa,cAAc;AAW3B,MAAMM,KAAWnF,EAAM;AAAA,EACrB,CAAC,EAAE,OAAA4C,GAAO,MAAAwC,GAAM,MAAAC,GAAM,UAAAC,GAAU,WAAArF,GAAW,SAAAsF,GAAS,GAAGpF,EAAA,GAASC,MAAQ;AACtE,UAAMoF,IACJ,gBAAA1C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWvD;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACAU;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAEH,UAAA;AAAA,UAAAiF,KACC,gBAAA/E,EAAC,OAAA,EAAI,WAAU,iFACZ,UAAA+E,GACH;AAAA,UAEF,gBAAA/E,EAAC,QAAA,EAAK,WAAU,oFACb,UAAAuC,GACH;AAAA,UACA,gBAAAvC,EAAC,QAAA,EAAK,WAAU,qFAAoF,UAAA,IAAA,CAEpG;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAGJ,WAAIgF,IAEA,gBAAAhF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,MAAAiF;AAAA,QACA,QAAQC,IAAW,WAAW;AAAA,QAC9B,KAAKA,IAAW,wBAAwB;AAAA,QACxC,WAAU;AAAA,QAET,UAAAE;AAAA,MAAA;AAAA,IAAA,IAKL,gBAAAnF,EAAC,OAAA,EAAI,KAAAD,GAAU,SAAAmF,GACZ,UAAAC,GACH;AAAA,EAEJ;AACF;AACAL,GAAS,cAAc;ACjRvB,MAAMM,KACJ;AAEK,SAASC,GACdC,GACAC,IAAS,IACH;AACN,EAAAC,GAAU,MAAM;AACd,QAAI,CAACD,KAAU,CAACD,EAAa,QAAS;AACtC,UAAMG,IAAYH,EAAa,SACzBI,IAAe,MACnB,MAAM,KAAKD,EAAU,iBAA8BL,EAAS,CAAC,GAEzDO,IAAgB,CAAC/B,MAAqB;AAC1C,UAAIA,EAAE,QAAQ,MAAO;AACrB,YAAMgC,IAAYF,EAAA;AAClB,UAAI,CAACE,EAAU,OAAQ;AACvB,YAAMC,IAAQD,EAAU,CAAC,GACnBE,IAAOF,EAAUA,EAAU,SAAS,CAAC;AAC3C,MAAIhC,EAAE,WACA,SAAS,kBAAkBiC,MAC7BjC,EAAE,eAAA,GACFkC,EAAK,MAAA,KAGH,SAAS,kBAAkBA,MAC7BlC,EAAE,eAAA,GACFiC,EAAM,MAAA;AAAA,IAGZ;AAEA,WAAAJ,EAAU,iBAAiB,WAAWE,CAAa,GAC5C,MAAMF,EAAU,oBAAoB,WAAWE,CAAa;AAAA,EACrE,GAAG,CAACL,GAAcC,CAAM,CAAC;AAC3B;ACxBO,SAASQ,GACdC,GACAC,GACAC,IAA2B,CAAA,GACrB;AACN,EAAAV,GAAU,MAAM;AACd,UAAM,EAAE,MAAAW,IAAO,IAAO,MAAAC,IAAO,IAAO,OAAAC,IAAQ,IAAO,gBAAAC,IAAiB,GAAA,IAASJ,GACvEP,IAAgB,CAAC/B,MAAqB;AAC1C,MAAIuC,KAAQ,CAACvC,EAAE,WACXwC,KAAQ,EAAExC,EAAE,WAAWA,EAAE,YACzByC,KAAS,CAACzC,EAAE,YACZA,EAAE,IAAI,YAAA,MAAkBoC,EAAI,kBAC5BM,OAAkB,eAAA,GACtBL,EAAA;AAAA,IACF;AACA,kBAAO,iBAAiB,WAAWN,CAAa,GACzC,MAAM,OAAO,oBAAoB,WAAWA,CAAa;AAAA,EAClE,GAAG,CAACK,GAAKC,GAASC,CAAO,CAAC;AAC5B;ACbO,SAASK,GACdxG,GACAmG,IAA4B,IACnB;AACT,QAAM,EAAE,WAAAM,IAAY,KAAK,MAAAC,IAAO,OAASP,GAEnC,CAACQ,GAAQC,CAAS,IAAIC,GAAS,MAC/B,OAAO,SAAW,MACb,OAAO,WAAW,kCAAkC,EAAE,UAExD,EACR,GAEKC,IAAYC,GAAOJ,CAAM;AAC/B,SAAAG,EAAU,UAAUH,GAEpBlB,GAAU,MAAM;AAEd,QADI,OAAO,SAAW,OAClBqB,EAAU,WAAWJ,EAAM;AAE/B,UAAMM,IAAKhH,EAAI;AACf,QAAI,CAACgH,EAAI;AAET,UAAMC,IAAM,IAAI;AAAA,MACd,CAAC,CAACC,CAAK,MAAM;AACX,QAAIA,EAAM,kBACRN,EAAU,EAAI,GACVF,OAAU,WAAA,KACJA,KACVE,EAAU,EAAK;AAAA,MAEnB;AAAA,MACA,EAAE,WAAAH,EAAA;AAAA,IAAU;AAEd,WAAAQ,EAAI,QAAQD,CAAE,GACP,MAAMC,EAAI,WAAA;AAAA,EACnB,GAAG,CAACjH,GAAKyG,GAAWC,CAAI,CAAC,GAElBC;AACT;AC1CO,SAASQ,GAAWnG,GAAeoG,IAAQ,KAAe;AAC/D,SAAO,MAAM,KAAK,EAAE,QAAQpG,EAAA,GAAS,CAACqG,GAAGC,MAAM,GAAGA,IAAIF,CAAK,IAAI;AACjE;ACXA,MAAMG,KAAuBjH;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,OAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACV,OAAO;AAAA,UACL;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACV,SAAS;AAAA,MAAA;AAAA,MAEX,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB;AAAA,MACf,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAeMkH,KAAQ5H,EAAM;AAAA,EAClB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,OAAA2B,IAAQ;AAAA,IACR,MAAA0B,IAAO;AAAA,IACP,aAAAuE;AAAA,IACA,cAAAC;AAAA,IACA,UAAArE;AAAA,IACA,GAAGtD;AAAA,EAAA,GAELC,MACG;AACH,UAAM2H,IAAKF,KAAuBvE,MAAS,OAAlB,SAAkC,QACrD0E,IAAKF,KAAwBxE,MAAS,OAAlB,SAAkC;AAE5D,WACE,gBAAAR;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWvD;AAAA,UACToI,GAAqB,EAAE,OAAA/F,GAAO,MAAA0B,GAAM;AAAA,UACpCG,KACE;AAAA,UACFxD;AAAA,QAAA;AAAA,QAGD,UAAA;AAAA,UAAA4H,KACC,gBAAAxH,EAAC,QAAA,EAAK,WAAU,8DACb,UAAAwH,GACH;AAAA,UAEF,gBAAAxH;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAAD;AAAA,cACA,UAAAqD;AAAA,cACA,WAAWlE;AAAA,gBACT;AAAA,gBACA;AAAA,gBACAwI;AAAA,gBACAC;AAAA,cAAA;AAAA,cAED,GAAG7H;AAAA,YAAA;AAAA,UAAA;AAAA,UAEL2H,KACC,gBAAAzH,EAAC,QAAA,EAAK,WAAU,8DACb,UAAAyH,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACAF,GAAM,cAAc;AAIpB,MAAMK,KAAQjI,EAAM,WAGlB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACD8H,GAAM,cAAc;AAQpB,MAAMC,KAAalI,EAAM;AAAA,EACvB,CAAC,EAAE,WAAAC,GAAW,OAAA2B,IAAQ,WAAW,GAAGzB,EAAA,GAASC,MAC3C,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACAqC,MAAU,WAAW;AAAA,QACrBA,MAAU,aAAa;AAAA,QACvBA,MAAU,aAAa;AAAA,QACvB3B;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACA+H,GAAW,cAAc;ACpIzB,MAAMC,KAAmBzH;AAAA,EACvB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,OAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACV,OAAO;AAAA,UACL;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACV,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ,GAcM0H,KAAWpI,EAAM;AAAA,EACrB,CACE,EAAE,WAAAC,GAAW,OAAA2B,IAAQ,WAAW,WAAAyG,GAAW,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GACnEpI,MACG;AACH,UAAM,CAACgB,GAAOqH,CAAQ,IAAIzI,EAAM,SAAS,MAAM;AAC7C,YAAM0I,IAAUF,EAAK,SAASA,EAAK,gBAAgB;AACnD,aAAO,OAAOE,CAAO,EAAE;AAAA,IACzB,CAAC;AAED,IAAA1I,EAAM,UAAU,MAAM;AACpB,MAAIwI,EAAK,UAAU,UACjBC,EAAS,OAAOD,EAAK,KAAK,EAAE,MAAM;AAAA,IAEtC,GAAG,CAACA,EAAK,KAAK,CAAC;AAEf,UAAMG,IAAoB,MACpBL,MAAc,UAAalH,IAAQkH,IAC9B,qBACLA,MAAc,UAAalH,IAAQkH,KAAa,MAC3C,mBACF;AAGT,WACE,gBAAAxF,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAA,gBAAAzC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAD;AAAA,UACA,WAAAkI;AAAA,UACA,UAAU,CAACrE,MAAM;AACf,YAAAwE,EAASxE,EAAE,OAAO,MAAM,MAAM,GAC9BsE,KAAA,QAAAA,EAAWtE;AAAA,UACb;AAAA,UACA,WAAW1E;AAAA,YACT4I,GAAiB,EAAE,OAAAvG,GAAO;AAAA,YAC1ByG,KAAa;AAAA,YACbpI;AAAA,UAAA;AAAA,UAED,GAAGuI;AAAA,QAAA;AAAA,MAAA;AAAA,MAELH,KACC,gBAAAhI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWd;AAAA,YACT;AAAA,YACAoJ,EAAA;AAAA,UAAkB;AAAA,UAGnB,gBAAc,SAAY,GAAGvH,CAAK,IAAIkH,CAAS,KAAKlH;AAAA,QAAA;AAAA,MAAA;AAAA,IACvD,GAEJ;AAAA,EAEJ;AACF;AACAgH,GAAS,cAAc;AC5FvB,MAAMQ,KAAW5I,EAAM,WAGrB,CAAC,EAAE,WAAAC,GAAW,OAAA4I,GAAO,YAAAC,GAAY,IAAA3G,GAAI,GAAGhC,EAAA,GAASC,MAAQ;AACzD,QAAM2I,IAAc/I,EAAM,MAAA,GACpBgJ,IAAa7G,KAAM4G;AAEzB,SACE,gBAAAjG,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,MAAA,gBAAAzC;AAAA,QAAC4I,GAAkB;AAAA,QAAlB;AAAA,UACC,KAAA7I;AAAA,UACA,IAAI4I;AAAA,UACJ,WAAWzJ;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACAU;AAAA,UAAA;AAAA,UAED,GAAGE;AAAA,UAEJ,UAAA,gBAAA2C,EAACmG,GAAkB,WAAlB,EAA4B,WAAU,oCACrC,UAAA;AAAA,YAAA,gBAAA5I,EAAC,QAAA,EAAK,WAAU,mHAAkH,UAAA,KAElI;AAAA,YACA,gBAAAA,EAAC,QAAA,EAAK,WAAU,qHAAoH,UAAA,IAAA,CAEpI;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,MAEDwI,KACC,gBAAAxI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS2I;AAAA,UACT,WAAU;AAAA,UAET,UAAAH;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GAEJ;AAAA,IACCC,KACC,gBAAAzI,EAAC,KAAA,EAAE,WAAU,+CACV,UAAAyI,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ,CAAC;AAEDF,GAAS,cAAc;AChDvB,MAAMM,KAAalJ,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC8I,GAAoB;AAAA,EAApB;AAAA,IACC,KAAA/I;AAAA,IACA,WAAWb,EAAG,uBAAuBU,CAAS;AAAA,IAC7C,GAAGE;AAAA,EAAA;AACN,CACD;AACD+I,GAAW,cAAc;AAEzB,MAAME,KAAiBpJ,EAAM,WAG3B,CAAC,EAAE,WAAAC,GAAW,OAAA4I,GAAO,YAAAC,GAAY,IAAA3G,GAAI,GAAGhC,EAAA,GAASC,MAAQ;AACzD,QAAM2I,IAAc/I,EAAM,MAAA,GACpBqJ,IAASlH,KAAM4G;AAErB,SACE,gBAAAjG,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAACqG,GAAoB;AAAA,QAApB;AAAA,UACC,KAAA/I;AAAA,UACA,IAAIiJ;AAAA,UACJ,WAAW9J;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACAU;AAAA,UAAA;AAAA,UAED,GAAGE;AAAA,UAEJ,UAAA;AAAA,YAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,kPAAiP,UAAA,KAEjQ;AAAA,YACA,gBAAAA,EAAC,QAAA,EAAK,WAAU,0JAAyJ,UAAA,IAAA,CAEzK;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEDwI,KACC,gBAAAxI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASgJ;AAAA,UACT,WAAU;AAAA,UAET,UAAAR;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GAEJ;AAAA,IACCC,KACC,gBAAAzI,EAAC,KAAA,EAAE,WAAU,+CACV,UAAAyI,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ,CAAC;AACDM,GAAe,cAAc;AC5D7B,MAAME,KAAStJ,EAAM,WAGnB,CAAC,EAAE,WAAAC,GAAW,OAAA4I,GAAO,UAAAU,GAAU,SAAAC,GAAS,IAAArH,GAAI,SAAAsH,GAAS,gBAAAC,GAAgB,iBAAAC,GAAiB,GAAGxJ,EAAA,GAASC,MAAQ;AAC1G,QAAM2I,IAAc/I,EAAM,MAAA,GACpB4J,IAAWzH,KAAM4G,GAEjB,CAACc,GAAMC,CAAO,IAAI9J,EAAM;AAAA,IAC5ByJ,MAAY,SAAYA,IAAWC,KAAkB;AAAA,EAAA,GAEjD,CAACK,GAASC,CAAU,IAAIhK,EAAM,SAAS,CAAC;AAE9C,EAAAA,EAAM,UAAU,MAAM;AACpB,IAAIyJ,MAAY,UAAWK,EAAQL,CAAO;AAAA,EAC5C,GAAG,CAACA,CAAO,CAAC;AAEZ,QAAMQ,IAAe,CAACC,MAAe;AACnC,IAAAJ,EAAQI,CAAC,GACTF,EAAW,CAACG,MAAMA,IAAI,CAAC,GACvBR,KAAA,QAAAA,EAAkBO;AAAA,EACpB;AAEA,SACE,gBAAApH,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,KAAAyG,KAAYC,MACZ,gBAAAnJ,EAAC,QAAA,EAAK,WAAU,6GACb,UAAAwJ,IAAOL,IAAUD,EAAA,CACpB;AAAA,IAEF,gBAAAlJ;AAAA,MAAC+J,GAAgB;AAAA,MAAhB;AAAA,QACC,KAAAhK;AAAA,QACA,IAAIwJ;AAAA,QACJ,SAAAH;AAAA,QACA,gBAAAC;AAAA,QACA,iBAAiBO;AAAA,QACjB,WAAW1K;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACAU;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAGJ,UAAA,gBAAAE;AAAA,UAAC+J,GAAgB;AAAA,UAAhB;AAAA,YACC,WAAW7K;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,YAIF,UAAA,gBAAAc;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,eAAY;AAAA,gBACZ,WAAWd;AAAA,kBACT;AAAA,kBACAwK,IAAU,KAAK;AAAA,kBACfF,IAAO,0BAA0B;AAAA,gBAAA;AAAA,gBAEnC,OAAO,EAAE,UAAU,8CAAA;AAAA,cAA8C;AAAA,cAP5DE;AAAA,YAAA;AAAA,UAQP;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAEDlB,KACC,gBAAAxI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASuJ;AAAA,QACT,WAAU;AAAA,QAET,UAAAf;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GAEJ;AAEJ,CAAC;AAEDS,GAAO,cAAc;ACrFrB,MAAMe,KAASC,EAAgB;AAC/BD,GAAO,cAAc;AAErB,MAAME,KAAcD,EAAgB;AACpCC,GAAY,cAAc;AAE1B,MAAMC,KAAcF,EAAgB;AACpCE,GAAY,cAAc;AAI1B,MAAMC,KAAgBzK,EAAM,WAG1B,CAAC,EAAE,WAAAC,GAAW,UAAAyD,GAAU,GAAGvD,KAASC,MACpC,gBAAA0C;AAAA,EAACwH,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlK;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IAEH,UAAA;AAAA,MAAAuD;AAAA,MACD,gBAAArD,EAACiK,EAAgB,MAAhB,EAAqB,SAAO,IAC3B,UAAA,gBAAAjK,EAAC,QAAA,EAAK,WAAU,2DAA0D,UAAA,IAAA,CAE1E,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AACF,CACD;AACDoK,GAAc,cAAc;AAI5B,MAAMC,KAAuB1K,EAAM,WAGjC,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACiK,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlK;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IACL,UAAA;AAAA,EAAA;AAED,CACD;AACDuK,GAAqB,cAAc;AAInC,MAAMC,KAAyB3K,EAAM,WAGnC,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACiK,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlK;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IACL,UAAA;AAAA,EAAA;AAED,CACD;AACDwK,GAAuB,cAAc;AAIrC,MAAMC,KAAgB5K,EAAM,WAG1B,CAAC,EAAE,WAAAC,GAAW,UAAAyD,GAAU,UAAAmH,IAAW,UAAU,GAAG1K,KAASC,MACzD,gBAAAC,EAACiK,EAAgB,QAAhB,EACC,UAAA,gBAAAxH;AAAA,EAACwH,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlK;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAsL,MAAa,YACX;AAAA,MACF5K;AAAA,IAAA;AAAA,IAEF,UAAA4K;AAAA,IACC,GAAG1K;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAE,EAACqK,IAAA,EAAqB;AAAA,MACtB,gBAAArK;AAAA,QAACiK,EAAgB;AAAA,QAAhB;AAAA,UACC,WAAW/K;AAAA,YACT;AAAA,YACAsL,MAAa,YACX;AAAA,UAAA;AAAA,UAGH,UAAAnH;AAAA,QAAA;AAAA,MAAA;AAAA,wBAEFiH,IAAA,CAAA,CAAuB;AAAA,IAAA;AAAA,EAAA;AAC1B,GACF,CACD;AACDC,GAAc,cAAc;AAI5B,MAAME,KAAc9K,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACiK,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlK;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACD2K,GAAY,cAAc;AAU1B,MAAMC,KAAa/K,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,UAAAyD,GAAU,QAAAsH,GAAQ,GAAG7K,KAASC,MAC5C,gBAAAC;AAAA,EAACiK,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlK;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAyL,IACI,gGACA;AAAA,MACJ/K;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IAEJ,UAAA,gBAAAE,EAACiK,EAAgB,UAAhB,EAA0B,UAAA5G,EAAA,CAAS;AAAA,EAAA;AACtC,CACD;AACDqH,GAAW,cAAc;AAIzB,MAAME,KAAkBjL,EAAM,WAG5B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACiK,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlK;AAAA,IACA,WAAWb,EAAG,uBAAuBU,CAAS;AAAA,IAC7C,GAAGE;AAAA,EAAA;AACN,CACD;AACD8K,GAAgB,cAAc;AChL9B,MAAMC,KAAiBxK;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,QACL,IAAK;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAIMyK,KAAuC;AAAA,EAC3C,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AACR,GAWMC,KAASpL,EAAM,WAGnB,CAAC,EAAE,WAAAC,GAAW,MAAAqD,GAAM,QAAA+H,GAAQ,GAAGlL,KAASC,MACxC,gBAAA0C,EAAC,OAAA,EAAI,WAAU,8GACb,UAAA;AAAA,EAAA,gBAAAzC;AAAA,IAACiL,GAAgB;AAAA,IAAhB;AAAA,MACC,KAAAlL;AAAA,MACA,WAAWb,EAAG2L,GAAe,EAAE,MAAA5H,EAAA,CAAM,GAAGrD,CAAS;AAAA,MAChD,GAAGE;AAAA,IAAA;AAAA,EAAA;AAAA,EAELkL,KACC,gBAAAhL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWd;AAAA,QACT;AAAA,QACA4L,GAAaE,CAAM;AAAA,MAAA;AAAA,MAErB,cAAYA;AAAA,MACb,UAAA;AAAA,IAAA;AAAA,EAAA;AAED,GAEJ,CACD;AACDD,GAAO,cAAc;AAQrB,MAAMG,KAAcvL,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACiL,GAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlL;AAAA,IACA,WAAWb,EAAG,4CAA4CU,CAAS;AAAA,IAClE,GAAGE;AAAA,EAAA;AACN,CACD;AACDoL,GAAY,cAAc;AAQ1B,MAAMC,KAAiBxL,EAAM,WAG3B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACiL,GAAgB;AAAA,EAAhB;AAAA,IACC,KAAAlL;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACA;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDqL,GAAe,cAAc;AClG7B,MAAMC,KAAwB/K;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAIMgL,KAAuBhL;AAAA,EAC3B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB,EAAE,SAAS,UAAA;AAAA,EAAU;AAE1C,GAeMiL,KAAW3L,EAAM,WAGrB,CAAC,EAAE,WAAAC,GAAW,OAAA2L,GAAO,WAAAC,GAAW,MAAAvI,GAAM,SAAA1C,GAAS,GAAGT,EAAA,GAASC,MAAQ;AACnE,QAAM0L,IAAyCF,KAAU,MACnDG,IAAeD,IACjB,SACA,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGF,CAAK,CAAC;AAEpC,SACE,gBAAA9I,EAAC,OAAA,EAAI,WAAU,oBACZ,UAAA;AAAA,IAAA+I,KAAa,CAACC,KACb,gBAAAzL,EAAC,OAAA,EAAI,WAAU,oBACb,UAAA,gBAAAyC,EAAC,QAAA,EAAK,WAAU,+CACb,UAAA;AAAA,MAAAiJ;AAAA,MAAa;AAAA,IAAA,EAAA,CAChB,EAAA,CACF;AAAA,IAEF,gBAAA1L;AAAA,MAAC2L,GAAkB;AAAA,MAAlB;AAAA,QACC,KAAA5L;AAAA,QACA,WAAWb,EAAGkM,GAAsB,EAAE,MAAAnI,EAAA,CAAM,GAAGrD,CAAS;AAAA,QACxD,OAAO8L;AAAA,QACN,GAAG5L;AAAA,QAEJ,UAAA,gBAAAE;AAAA,UAAC2L,GAAkB;AAAA,UAAlB;AAAA,YACC,WAAWzM;AAAA,cACTuM,IACI,4BACAJ,GAAqB,EAAE,SAAA9K,GAAS;AAAA,YAAA;AAAA,YAEtC,OACEkL,IACI,SACA,EAAE,WAAW,eAAe,OAAOC,KAAgB,EAAE,KAAA;AAAA,UAAK;AAAA,QAAA;AAAA,MAElE;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,CAAC;AAEDJ,GAAS,cAAc;ACtFvB,MAAMM,KAAYC,EAAmB;AACrCD,GAAU,cAAc;AAIxB,MAAME,KAAgBnM,EAAM,WAG1B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC6L,EAAmB;AAAA,EAAnB;AAAA,IACC,KAAA9L;AAAA,IACA,WAAWb,EAAG,wBAAwBU,CAAS;AAAA,IAC9C,GAAGE;AAAA,EAAA;AACN,CACD;AACDgM,GAAc,cAAc;AAI5B,MAAMC,KAAmBpM,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,UAAAyD,GAAU,GAAGvD,EAAA,GAASC,MACpC,gBAAAC,EAAC6L,EAAmB,QAAnB,EAA0B,WAAU,QACnC,UAAA,gBAAApJ;AAAA,EAACoJ,EAAmB;AAAA,EAAnB;AAAA,IACC,KAAA9L;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IAEH,UAAA;AAAA,MAAAuD;AAAA,MACD,gBAAArD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWd;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,eAAW;AAAA,UACZ,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED;AAAA,EAAA;AACF,GACF,CACD;AACD6M,GAAiB,cAAc;AAI/B,MAAMC,KAAmBrM,EAAM,WAG7B,CAAC,EAAE,WAAAC,GAAW,UAAAyD,GAAU,GAAGvD,KAASC,MACpC,gBAAAC;AAAA,EAAC6L,EAAmB;AAAA,EAAnB;AAAA,IACC,KAAA9L;AAAA,IACA,WAAU;AAAA,IACT,GAAGD;AAAA,IAEJ,4BAAC,OAAA,EAAI,WAAWZ,EAAG,gDAAgDU,CAAS,GACzE,UAAAyD,EAAA,CACH;AAAA,EAAA;AACF,CACD;AACD2I,GAAiB,cAAc;ACpE/B,MAAMC,KAAOC,GAAc;AAC3BD,GAAK,cAAc;AAInB,MAAME,KAAmB9L,EAAI,+BAA+B;AAAA,EAC1D,UAAU;AAAA,IACR,SAAS;AAAA,MACP,WAAW;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,iBAAiB,EAAE,SAAS,YAAA;AAC9B,CAAC,GAMK+L,KAAWzM,EAAM,WAGrB,CAAC,EAAE,WAAAC,GAAW,SAAAW,GAAS,GAAGT,KAASC,MACnC,gBAAAC;AAAA,EAACkM,GAAc;AAAA,EAAd;AAAA,IACC,KAAAnM;AAAA,IACA,WAAWb,EAAGiN,GAAiB,EAAE,SAAA5L,EAAA,CAAS,GAAGX,CAAS;AAAA,IACrD,GAAGE;AAAA,EAAA;AACN,CACD;AACDsM,GAAS,cAAc;AAIvB,MAAMC,KAAsBhM;AAAA,EAC1B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,IAEF,iBAAiB,EAAE,SAAS,YAAA;AAAA,EAAY;AAE5C,GAMMiM,KAAc3M,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,SAAAW,GAAS,GAAGT,KAASC,MACnC,gBAAAC;AAAA,EAACkM,GAAc;AAAA,EAAd;AAAA,IACC,KAAAnM;AAAA,IACA,WAAWb,EAAGmN,GAAoB,EAAE,SAAA9L,EAAA,CAAS,GAAGX,CAAS;AAAA,IACxD,GAAGE;AAAA,EAAA;AACN,CACD;AACDwM,GAAY,cAAc;AAI1B,MAAMC,KAAc5M,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACkM,GAAc;AAAA,EAAd;AAAA,IACC,KAAAnM;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDyM,GAAY,cAAc;ACnG1B,MAAMC,KAAUC,EAAiB;AACjCD,GAAQ,cAAc;AAEtB,MAAME,KAAiBD,EAAiB;AACxCC,GAAe,cAAc;AAE7B,MAAMC,KAAgBF,EAAiB;AACvCE,GAAc,cAAc;AAI5B,MAAMC,KAAiBjN,EAAM,WAG3B,CAAC,EAAE,WAAAC,GAAW,OAAAiN,IAAQ,UAAU,YAAAhN,IAAa,GAAG,GAAGC,EAAA,GAASC,MAC5D,gBAAAC,EAACyM,EAAiB,QAAjB,EACC,UAAA,gBAAAzM;AAAA,EAACyM,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAA1M;AAAA,IACA,OAAA8M;AAAA,IACA,YAAAhN;AAAA,IACA,WAAWX;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,GACF,CACD;AACD8M,GAAe,cAAc;AChC7B,MAAME,KAASC,EAAgB;AAC/BD,GAAO,cAAc;AAErB,MAAME,KAAgBD,EAAgB;AACtCC,GAAc,cAAc;AAE5B,MAAMC,KAAeF,EAAgB;AACrCE,GAAa,cAAc;AAE3B,MAAMC,KAAcH,EAAgB;AACpCG,GAAY,cAAc;AAI1B,MAAMC,KAAgBxN,EAAM,WAG1B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC+M,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAhN;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACA;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDqN,GAAc,cAAc;AAI5B,MAAMC,KAAwB/M;AAAA,EAC5B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,YAAY;AAAA,MAAA;AAAA,IACd;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAMMgN,KAAgB1N,EAAM,WAG1B,CAAC,EAAE,WAAAC,GAAW,MAAAqD,GAAM,UAAAI,GAAU,GAAGvD,EAAA,GAASC,wBACzCkN,IAAA,EACC,UAAA;AAAA,EAAA,gBAAAjN,EAACmN,IAAA,EAAc;AAAA,EACf,gBAAA1K;AAAA,IAACsK,EAAgB;AAAA,IAAhB;AAAA,MACC,KAAAhN;AAAA,MACA,WAAWb,EAAGkO,GAAsB,EAAE,MAAAnK,EAAA,CAAM,GAAGrD,CAAS;AAAA,MACvD,GAAGE;AAAA,MAEH,UAAA;AAAA,QAAAuD;AAAA,QACD,gBAAAZ,EAACsK,EAAgB,OAAhB,EAAsB,WAAU,2GAC/B,UAAA;AAAA,UAAA,gBAAA/M,EAAC,QAAA,EAAK,WAAU,qBAAoB,eAAY,QAAO,UAAA,KAEvD;AAAA,UACA,gBAAAA,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA,QAAA,CAAK;AAAA,QAAA,EAAA,CACjC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AACF,GACF,CACD;AACDqN,GAAc,cAAc;AAI5B,SAASC,GAAa;AAAA,EACpB,WAAA1N;AAAA,EACA,GAAGE;AACL,GAAyC;AACvC,SACE,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWd;AAAA,QACT;AAAA,QACAU;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACAwN,GAAa,cAAc;AAI3B,SAASC,GAAa;AAAA,EACpB,WAAA3N;AAAA,EACA,GAAGE;AACL,GAAyC;AACvC,SACE,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWd;AAAA,QACT;AAAA,QACAU;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACAyN,GAAa,cAAc;AAI3B,MAAMC,KAAc7N,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC+M,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAhN;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACD0N,GAAY,cAAc;AAI1B,MAAMC,KAAoB9N,EAAM,WAG9B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC+M,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAhN;AAAA,IACA,WAAWb,EAAG,kEAAkEU,CAAS;AAAA,IACxF,GAAGE;AAAA,EAAA;AACN,CACD;AACD2N,GAAkB,cAAc;AClJhC,MAAMC,KAAoBrN,EAAI,YAAY;AAAA,EACxC,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,IAAA;AAAA,IAEV,aAAa;AAAA,MACX,YAAY;AAAA,MACZ,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EAAA;AAEjB,CAAC,GAaKsN,KAAYhO,EAAM,WAGtB,CAAC,EAAE,WAAAC,GAAW,aAAAgO,IAAc,cAAc,SAAArN,GAAS,YAAAsN,IAAa,IAAM,GAAG/N,EAAA,GAASC,MAAQ;AAC1F,QAAM+N,IAAsBF,KAAe;AAC3C,SACE,gBAAA5N;AAAA,IAAC+N,GAAmB;AAAA,IAAnB;AAAA,MACC,KAAAhO;AAAA,MACA,YAAA8N;AAAA,MACA,aAAaC;AAAA,MACb,WAAW5O;AAAA,QACTwO,GAAkB,EAAE,SAAAnN,GAAS,aAAauN,GAAqB;AAAA,QAC/DlO;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AACD6N,GAAU,cAAc;AClDxB,MAAMK,KAAuB3N,EAAI,iCAAiC;AAAA,EAChE,UAAU;AAAA,IACR,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,IAET,QAAQ;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,iBAAiB,EAAE,OAAO,QAAQ,QAAQ,KAAA;AAC5C,CAAC,GAOK4N,IAAetO,EAAM;AAAA,EACzB,CAAC,EAAE,WAAAC,GAAW,OAAAsO,GAAO,QAAAC,GAAQ,GAAGrO,EAAA,GAASC,MACvC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb,EAAG8O,GAAqB,EAAE,OAAAE,GAAO,QAAAC,EAAA,CAAQ,GAAGvO,CAAS;AAAA,MAChE,eAAY;AAAA,MACX,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACAmO,EAAa,cAAc;AAQ3B,MAAMG,KAAezO,EAAM;AAAA,EACzB,CAAC,EAAE,OAAA0O,IAAQ,GAAG,WAAAzO,GAAW,GAAGE,EAAA,GAASC,MAAQ;AAC3C,UAAMuO,IAEF,CAAC,QAAQ,OAAO,QAAQ,OAAO,KAAK;AAExC,WACE,gBAAAtO;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,WAAWb,EAAG,aAAaU,CAAS;AAAA,QACpC,eAAY;AAAA,QACX,GAAGE;AAAA,QAEH,UAAA,MAAM,KAAK,EAAE,QAAQuO,GAAO,EAAE,IAAI,CAACjH,GAAGC,MACrC,gBAAArH;AAAA,UAACiO;AAAA,UAAA;AAAA,YAEC,OAAOK,EAAWjH,IAAIiH,EAAW,MAAM;AAAA,YACvC,QAAO;AAAA,UAAA;AAAA,UAFFjH;AAAA,QAAA,CAIR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AACA+G,GAAa,cAAc;AAI3B,MAAMG,KAAsB;AAAA,EAC1B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAMMC,KAAiB7O,EAAM;AAAA,EAC3B,CAAC,EAAE,MAAAsD,IAAO,MAAM,WAAArD,GAAW,GAAGE,EAAA,GAASC,MACrC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACAqP,GAAoBtL,CAAI;AAAA,QACxBrD;AAAA,MAAA;AAAA,MAEF,eAAY;AAAA,MACX,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACA0O,GAAe,cAAc;AAS7B,MAAMC,KAAe9O,EAAM;AAAA,EACzB,CAAC,EAAE,YAAA+O,IAAa,IAAO,OAAAL,IAAQ,GAAG,WAAAzO,GAAW,GAAGE,KAASC,MACvD,gBAAA0C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACAU;AAAA,MAAA;AAAA,MAEF,eAAY;AAAA,MACX,GAAGE;AAAA,MAGJ,UAAA;AAAA,QAAA,gBAAA2C,EAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,UAAAiM,KAAc,gBAAA1O,EAACwO,IAAA,EAAe,MAAK,KAAA,CAAK;AAAA,UACzC,gBAAA/L,EAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,YAAA,gBAAAzC,EAACiO,GAAA,EAAa,OAAM,OAAM,QAAO,MAAK;AAAA,YACtC,gBAAAjO,EAACiO,GAAA,EAAa,OAAM,OAAM,QAAO,KAAA,CAAK;AAAA,UAAA,EAAA,CACxC;AAAA,QAAA,GACF;AAAA,QAGA,gBAAAjO,EAACoO,MAAa,OAAAC,GAAc;AAAA,QAG5B,gBAAArO,EAACiO,GAAA,EAAa,OAAM,OAAM,QAAO,KAAA,CAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG5C;AACAQ,GAAa,cAAc;AAQ3B,MAAME,KAAgB;AAAA,EACpB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AACZ,GAEMC,KAAgBjP,EAAM;AAAA,EAC1B,CAAC,EAAE,aAAAkP,IAAc,SAAS,WAAAjP,GAAW,GAAGE,EAAA,GAASC,MAC/C,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACAyP,GAAcE,CAAW;AAAA,QACzBjP;AAAA,MAAA;AAAA,MAEF,eAAY;AAAA,MACX,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACA8O,GAAc,cAAc;AAS5B,MAAME,KAAmBnP,EAAM;AAAA,EAC7B,CAAC,EAAE,SAAAoP,IAAU,GAAG,WAAAnP,GAAW,GAAGE,EAAA,GAASC,MACrC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb,EAAG,gCAAgCU,CAAS;AAAA,MACvD,eAAY;AAAA,MACX,GAAGE;AAAA,MAEH,UAAA,MAAM,KAAK,EAAE,QAAQiP,GAAS,EAAE,IAAI,CAAC3H,GAAG,MACvC,gBAAApH;AAAA,QAACiO;AAAA,QAAA;AAAA,UAEC,OAAO,MAAM,IAAI,QAAQ;AAAA,UACzB,QAAO;AAAA,UACP,WAAU;AAAA,QAAA;AAAA,QAHL;AAAA,MAAA,CAKR;AAAA,IAAA;AAAA,EAAA;AAGP;AACAa,GAAiB,cAAc;AC7L/B,MAAME,KAAsE;AAAA,EAC1E,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,oBAAoB;AAAA,IAClB,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,iBAAiB;AAAA,IACf,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,iBAAiB;AAAA,IACf,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,iBAAiB;AAAA,IACf,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA;AAAA,EAGf,OAAO;AAAA,IACL,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,YAAY;AAAA,IACV,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,OAAO;AAAA,IACL,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,SAAS,EAAE,OAAO,IAAI,aAAa,GAAA;AACrC,GAIMC,KAAqB5O;AAAA,EACzB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GA8BM6O,KAAavP,EAAM;AAAA,EACvB,CACE;AAAA,IACE,MAAAoF;AAAA,IACA,OAAAxC;AAAA,IACA,aAAAC;AAAA,IACA,QAAAhB;AAAA,IACA,SAAAjB,IAAU;AAAA,IACV,MAAA0C;AAAA,IACA,WAAArD;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAMoP,IAASH,GAAYzO,CAAO,KAAKyO,GAAY,SAC7CI,IAAgB7M,KAAS4M,EAAO,OAChCE,IAAe7M,KAAe2M,EAAO;AAE3C,WACE,gBAAA1M;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb,EAAG+P,GAAmB,EAAE,MAAAhM,EAAA,CAAM,GAAGrD,CAAS;AAAA,QACpD,GAAGE;AAAA,QAEH,UAAA;AAAA,UAAAiF,KACC,gBAAA/E,EAAC,OAAA,EAAI,WAAU,2DACZ,UAAA+E,GACH;AAAA,UAGDqK,KACC,gBAAApP,EAAC,MAAA,EAAG,WAAU,oFACX,UAAAoP,GACH;AAAA,UAGDC,KACC,gBAAArP,EAAC,KAAA,EAAE,WAAU,mEACV,UAAAqP,GACH;AAAA,UAGD7N,KAAU,gBAAAxB,EAAC,OAAA,EAAI,WAAU,QAAQ,UAAAwB,EAAA,CAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAG/C;AACF;AACA0N,GAAW,cAAc;AC5IzB,MAAMI,KAAgBjP;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,MAAM;AAAA,QACN,SACE;AAAA,QACF,SACE;AAAA,QACF,OACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB,EAAE,SAAS,OAAA;AAAA,EAAO;AAEvC,GAIMkP,KAAiB;AAAA,EACrB,MAAM,EAAE,MAAM,KAAK,OAAO,eAAA;AAAA,EAC1B,SAAS,EAAE,MAAM,KAAK,OAAO,gBAAA;AAAA,EAC7B,SAAS,EAAE,MAAM,KAAK,OAAO,iBAAA;AAAA,EAC7B,OAAO,EAAE,MAAM,KAAK,OAAO,mBAAA;AAC7B,GAiBMC,KAAQ7P,EAAM;AAAA,EAClB,CACE;AAAA,IACE,SAAAY,IAAU;AAAA,IACV,OAAAgC;AAAA,IACA,aAAAkN,IAAc;AAAA,IACd,WAAAC;AAAA,IACA,MAAA3K;AAAA,IACA,UAAA1B;AAAA,IACA,WAAAzD;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAM4P,IAAMJ,GAAehP,CAAO,GAC5BqP,IAAW7K,MAAS,MACpB8K,IACJ9K,KAGE,gBAAA/E;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAWd;AAAA,UACT;AAAA,UACAyQ,EAAI;AAAA,QAAA;AAAA,QAGL,UAAAA,EAAI;AAAA,MAAA;AAAA,IAAA;AAIX,WACE,gBAAAlN;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,MAAK;AAAA,QACL,aAAWQ,MAAY,UAAU,cAAc;AAAA,QAC/C,WAAWrB,EAAGoQ,GAAc,EAAE,SAAA/O,EAAA,CAAS,GAAGX,CAAS;AAAA,QAClD,GAAGE;AAAA,QAGH,UAAA;AAAA,UAAA8P,KAAY,gBAAA5P,EAAC,OAAA,EAAI,WAAU,mBAAmB,UAAA6P,GAAS;AAAA,UAGxD,gBAAApN,EAAC,OAAA,EAAI,WAAU,kBACZ,UAAA;AAAA,YAAAF,KACC,gBAAAvC,EAAC,KAAA,EAAE,WAAU,oFACV,UAAAuC,GACH;AAAA,YAEDc,KACC,gBAAArD,EAAC,OAAA,EAAI,WAAU,+CACZ,UAAAqD,EAAA,CACH;AAAA,UAAA,GAEJ;AAAA,UAGCoM,KACC,gBAAAzP;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAW;AAAA,cACX,SAAS0P;AAAA,cACT,WAAU;AAAA,cACX,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACAF,GAAM,cAAc;AASpB,MAAMM,KAAYnQ,EAAM;AAAA,EACtB,CAAC,EAAE,aAAA8P,IAAc,IAAM,WAAAC,GAAW,UAAArM,GAAU,WAAAzD,GAAW,GAAGE,KAASC,MACjE,gBAAA0C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,MAAK;AAAA,MACL,WAAWb;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACAU;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,sBAAsB,UAAAqD,EAAA,CAAS;AAAA,QAC9CoM,KACC,gBAAAzP;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAAS0P;AAAA,YACT,WAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAAA;AAAA,EAAA;AAIR;AACAI,GAAU,cAAc;ACrJxB,MAAMC,KAAuB1P,EAAI,IAAI;AAAA,EACnC,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,iBAAiB,EAAE,QAAQ,WAAA;AAC7B,CAAC,GAiBK2P,KAAerQ,EAAM;AAAA,EACzB,CAAC,EAAE,MAAAsQ,GAAM,OAAA1N,GAAO,aAAAC,GAAa,QAAAwI,IAAS,YAAY,UAAA3H,GAAU,WAAAzD,GAAW,GAAGE,EAAA,GAASC,MAAQ;AAEzF,UAAMmQ,IADWlF,MAAW,cAAcA,MAAW,YAC3B,MAAM;AAEhC,WACE,gBAAAvI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,MAAK;AAAA,QACL,gBAAciL,MAAW,YAAY,SAAS;AAAA,QAC9C,WAAW9L,EAAG,2BAA2BU,CAAS;AAAA,QACjD,GAAGE;AAAA,QAGJ,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWd;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA6Q,GAAqB,EAAE,QAAA/E,GAAQ;AAAA,gBAC/BA,MAAW,aAAa;AAAA,iBACvBA,MAAW,aAAaA,MAAW,eAAe;AAAA,cAAA;AAAA,cAErD,eAAY;AAAA,cAEX,UAAAkF;AAAA,YAAA;AAAA,UAAA;AAAA,UAIFD,KACC,gBAAAjQ,EAAC,KAAA,EAAE,WAAU,0DAA0D,UAAAiQ,GAAK;AAAA,UAI9E,gBAAAjQ,EAAC,KAAA,EAAE,WAAU,oEACV,UAAAuC,GACH;AAAA,UAGCC,KACC,gBAAAxC,EAAC,KAAA,EAAE,WAAU,0CAA0C,UAAAwC,GAAY;AAAA,UAIpEa;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AACA2M,GAAa,cAAc;AAI3B,MAAMG,KAAWxQ,EAAM;AAAA,EACrB,CAAC,EAAE,OAAAyQ,GAAO,UAAA/M,GAAU,WAAAzD,GAAW,GAAGE,EAAA,GAASC,MAEvC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,MAAK;AAAA,MACL,WAAWb;AAAA,QACT;AAAA,QACA;AAAA,QACAU;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAEH,UAAAsQ,IACGA,EAAM,IAAI,CAACC,GAAMhJ,MAAM;AACrB,cAAM,EAAE,MAAA4I,GAAM,OAAA1N,GAAO,aAAAC,GAAa,QAAAwI,GAAQ,UAAUsF,GAAc,WAAWC,GAAQ,GAAGpI,EAAA,IAASkI;AACjG,eACE,gBAAArQ;AAAA,UAACgQ;AAAA,UAAA;AAAA,YAEC,MAAAC;AAAA,YACA,OAAA1N;AAAA,YACA,aAAAC;AAAA,YACA,QAAAwI;AAAA,YACA,WAAWuF;AAAA,YACV,GAAGpI;AAAA,YAEH,UAAAmI;AAAA,UAAA;AAAA,UARIjJ;AAAA,QAAA;AAAA,MAWX,CAAC,IACDhE;AAAA,IAAA;AAAA,EAAA;AAIZ;AACA8M,GAAS,cAAc;ACrGvB,SAASK,GACPpO,GACAqO,GACqC;AACrC,SAAIrO,IAAQqO,IAAoB,aAC5BrO,MAAUqO,IAAoB,YAC3B;AACT;AAIA,MAAMC,KAAU/Q,EAAM;AAAA,EACpB,CACE,EAAE,OAAAgR,GAAO,aAAAF,GAAa,aAAA7C,IAAc,cAAc,WAAAhO,GAAW,GAAGE,EAAA,GAChEC,MAEI6N,MAAgB,aAEhB,gBAAA5N;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAWb,EAAG,uBAAuBU,CAAS;AAAA,MAC7C,GAAGE;AAAA,MAEH,UAAA6Q,EAAM,IAAI,CAACC,GAAMvJ,MAAM;AACtB,cAAM9F,IAAQiP,GAAanJ,GAAGoJ,CAAW,GACnCI,IAAatP,MAAU,YACvBuP,IAAYvP,MAAU,WACtBwP,IAAS1J,MAAMsJ,EAAM,SAAS,GAC9BT,IAASW,KAAcC,IAAY,MAAM,KACzCE,IAAaH,IACf,cACAC,IACE,YACA;AAEN,eACE,gBAAArO;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,MAAK;AAAA,YACL,cAAY,QAAQ4E,IAAI,CAAC,OAAOsJ,EAAM,MAAM,KAAKC,EAAK,KAAK,KAAKI,CAAU;AAAA,YAC1E,gBAAcF,IAAY,SAAS;AAAA,YACnC,WAAU;AAAA,YAGV,UAAA;AAAA,cAAA,gBAAArO,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,gBAAA,gBAAAzC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWd;AAAA,sBACT;AAAA,sBACA2R,KAAc;AAAA,sBACdC,KACE;AAAA,sBACF,CAACD,KAAc,CAACC,KAAa;AAAA,oBAAA;AAAA,oBAE/B,eAAY;AAAA,oBAEX,UAAAZ;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEF,CAACa,KACA,gBAAA/Q;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWd;AAAA,sBACT;AAAA,sBACA2R,IAAa,eAAe;AAAA,oBAAA;AAAA,kBAC9B;AAAA,gBAAA;AAAA,cACF,GAEJ;AAAA,cAGA,gBAAApO,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,gBAAA,gBAAAzC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWd;AAAA,sBACT;AAAA,sBACA4R,KAAa;AAAA,sBACbD,KAAc;AAAA,sBACd,CAACA,KAAc,CAACC,KAAa;AAAA,oBAAA;AAAA,oBAG9B,UAAAF,EAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEPA,EAAK,eACJ,gBAAA5Q,EAAC,OAAE,WAAU,+CACV,YAAK,YAAA,CACR;AAAA,cAAA,EAAA,CAEJ;AAAA,YAAA;AAAA,UAAA;AAAA,UA/CKqH;AAAA,QAAA;AAAA,MAkDX,CAAC;AAAA,IAAA;AAAA,EAAA,IAML,gBAAArH,EAAC,OAAA,EAAI,WAAU,mBACb,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,MAAK;AAAA,MACL,cAAW;AAAA,MACX,WAAWb,EAAG,+BAA+BU,CAAS;AAAA,MACrD,GAAGE;AAAA,MAEH,UAAA6Q,EAAM,IAAI,CAACC,GAAMvJ,MAAM;AACtB,cAAM9F,IAAQiP,GAAanJ,GAAGoJ,CAAW,GACnCI,IAAatP,MAAU,YACvBuP,IAAYvP,MAAU,WACtBwP,IAAS1J,MAAMsJ,EAAM,SAAS,GAC9BT,IAASW,KAAcC,IAAY,MAAM,KACzCE,IAAaH,IACf,cACAC,IACE,YACA;AAEN,eACE,gBAAArO,EAAC9C,EAAM,UAAN,EACC,UAAA;AAAA,UAAA,gBAAA8C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAY,QAAQ4E,IAAI,CAAC,OAAOsJ,EAAM,MAAM,KAAKC,EAAK,KAAK,KAAKI,CAAU;AAAA,cAC1E,gBAAcF,IAAY,SAAS;AAAA,cACnC,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAA9Q;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWd;AAAA,sBACT;AAAA,sBACA2R,KAAc;AAAA,sBACdC,KACE;AAAA,sBACF,CAACD,KAAc,CAACC,KAAa;AAAA,oBAAA;AAAA,oBAE/B,eAAY;AAAA,oBAEX,UAAAZ;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEH,gBAAAlQ;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAWd;AAAA,sBACT;AAAA,sBACA4R,KAAa;AAAA,sBACbD,KAAc;AAAA,sBACd,CAACA,KAAc,CAACC,KAAa;AAAA,oBAAA;AAAA,oBAG9B,UAAAF,EAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEPA,EAAK,eACJ,gBAAA5Q,EAAC,OAAE,WAAU,6EACV,YAAK,YAAA,CACR;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAKH,CAAC+Q,KACA,gBAAA/Q;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWd;AAAA,gBACT;AAAA,gBACA2R,IAAa,eAAe;AAAA,cAAA;AAAA,YAC9B;AAAA,UAAA;AAAA,QACF,EAAA,GA3CiBxJ,CA6CrB;AAAA,MAEJ,CAAC;AAAA,IAAA;AAAA,EAAA,GAEL;AAGN;AACAqJ,GAAQ,cAAc;ACrLtB,MAAMO,KAAyB5Q;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OACE;AAAA,MAAA;AAAA,MAEJ,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB,EAAE,QAAQ,IAAO,UAAU,GAAA;AAAA,EAAM;AAEtD;AAIA,SAAS6Q,GACPC,GACAC,GACAC,GACoB;AACpB,MAAID,KAAS,EAAG,QAAO,MAAM,KAAK,EAAE,QAAQA,EAAA,GAAS,CAAChK,GAAGC,MAAMA,IAAI,CAAC;AACpE,QAAMiK,IAAO,KAAK,IAAI,GAAGH,IAAUE,CAAQ,GACrCE,IAAQ,KAAK,IAAIH,IAAQ,GAAGD,IAAUE,CAAQ,GAC9CG,IAA4B,CAAC,CAAC;AACpC,EAAIF,IAAO,KAAGE,EAAM,KAAK,KAAK;AAC9B,WAASnK,IAAIiK,GAAMjK,KAAKkK,GAAOlK,IAAK,CAAAmK,EAAM,KAAKnK,CAAC;AAChD,SAAIkK,IAAQH,IAAQ,KAAGI,EAAM,KAAK,KAAK,GACvCA,EAAM,KAAKJ,CAAK,GACTI;AACT;AAaA,MAAMC,KAAa9R,EAAM;AAAA,EACvB,CACE;AAAA,IACE,YAAA+R;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,WAAAjS;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAMyR,IAAQN,GAAaS,GAAaD,GAAYG,CAAY,GAC1DC,IAAiBH,KAAe,GAChCI,IAAiBJ,KAAeD;AAEtC,WACE,gBAAA1R;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,cAAW;AAAA,QACX,WAAWb,EAAGU,CAAS;AAAA,QACtB,GAAGE;AAAA,QAEJ,UAAA,gBAAA2C,EAAC,OAAA,EAAI,WAAU,2BAEb,UAAA;AAAA,UAAA,gBAAAzC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAM,CAAC8R,KAAkBF,EAAaD,IAAc,CAAC;AAAA,cAC9D,UAAUG;AAAA,cACV,cAAW;AAAA,cACX,WAAW5S;AAAA,gBACT+R,GAAuB;AAAA,kBACrB,QAAQ;AAAA,kBACR,UAAUa;AAAA,gBAAA,CACX;AAAA,gBACD;AAAA,cAAA;AAAA,cAEH,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAKAN,EAAM;AAAA,YAAI,CAACQ,GAAM3K,MAChB2K,MAAS,QACP,gBAAAhS;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBACV,eAAY;AAAA,gBACb,UAAA;AAAA,cAAA;AAAA,cAHM,YAAYqH,CAAC;AAAA,YAAA,IAOpB,gBAAArH;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,SAAS,MAAM4R,EAAaI,CAAI;AAAA,gBAChC,cAAY,QAAQA,CAAI;AAAA,gBACxB,gBAAcA,MAASL,IAAc,SAAS;AAAA,gBAC9C,WAAWzS;AAAA,kBACT+R,GAAuB,EAAE,QAAQe,MAASL,GAAa;AAAA,gBAAA;AAAA,gBAGxD,UAAAK;AAAA,cAAA;AAAA,cATIA;AAAA,YAAA;AAAA,UAUP;AAAA,UAKJ,gBAAAhS;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAM,CAAC+R,KAAkBH,EAAaD,IAAc,CAAC;AAAA,cAC9D,UAAUI;AAAA,cACV,cAAW;AAAA,cACX,WAAW7S;AAAA,gBACT+R,GAAuB;AAAA,kBACrB,QAAQ;AAAA,kBACR,UAAUc;AAAA,gBAAA,CACX;AAAA,gBACD;AAAA,cAAA;AAAA,cAEH,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACAN,GAAW,cAAc;AC5HzB,MAAMQ,KAAatS,EAAM;AAAA,EACvB,CAAC,EAAE,OAAAyQ,GAAO,WAAA8B,GAAW,WAAAtS,GAAW,GAAGE,EAAA,GAASC,MAExC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,cAAW;AAAA,MACX,WAAWb,EAAGU,CAAS;AAAA,MACtB,GAAGE;AAAA,MAEJ,UAAA,gBAAAE,EAAC,QAAG,WAAU,uFACX,YAAM,IAAI,CAACqQ,GAAMhJ,MAAM;AACtB,cAAMyJ,IAAYzJ,MAAM+I,EAAM,SAAS;AACvC,eACE,gBAAA3N,EAAC9C,EAAM,UAAN,EACC,UAAA;AAAA,UAAA,gBAAAK,EAAC,MAAA,EACE,UAAA8Q,KAAa,CAACT,EAAK,OAClB,gBAAArQ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,gBAAc8Q,IAAY,SAAS;AAAA,cACnC,WACEA,IACI,kCACA;AAAA,cAGL,UAAAT,EAAK;AAAA,YAAA;AAAA,UAAA,IAGR,gBAAArQ;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAMqQ,EAAK;AAAA,cACX,WAAU;AAAA,cAET,UAAAA,EAAK;AAAA,YAAA;AAAA,UAAA,GAGZ;AAAA,UACC,CAACS,KACA,gBAAA9Q;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAY;AAAA,cACZ,MAAK;AAAA,cACL,WAAU;AAAA,cAET,UAAAkS,KAAa;AAAA,YAAA;AAAA,UAAA;AAAA,QAChB,EAAA,GA7BiB7K,CA+BrB;AAAA,MAEJ,CAAC,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAIR;AACA4K,GAAW,cAAc;AC/DzB,MAAME,KAAsB9R;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAqBM+R,KAAczS,EAAM;AAAA,EACxB,CACE;AAAA,IACE,OAAA4L;AAAA,IACA,cAAA8G;AAAA,IACA,UAAAnK;AAAA,IACA,KAAAoK;AAAA,IACA,KAAAC;AAAA,IACA,MAAA3B,IAAO;AAAA,IACP,MAAA3N,IAAO;AAAA,IACP,WAAArD;AAAA,IACA,UAAAwD;AAAA,IACA,GAAGtD;AAAA,EAAA,GAELC,MACG;AACH,UAAMyS,IAAejH,MAAU,QACzB,CAACkH,GAAeC,CAAgB,IAAI/S,EAAM;AAAA,MAC9C0S,KAAgB;AAAA,IAAA,GAEZlB,IAAUqB,IAAejH,IAASkH,GAElCE,IAAQ,CAACC,MACb,KAAK,IAAIL,KAAO,OAAU,KAAK,IAAID,KAAO,QAAWM,CAAC,CAAC,GAEnD7Q,IAAS,CAAC8Q,MAAiB;AAC/B,YAAMC,IAAUH,EAAME,CAAI;AAC1B,MAAKL,KAAcE,EAAiBI,CAAO,GAC3C5K,KAAA,QAAAA,EAAW4K;AAAA,IACb,GAEMC,IAAY,MAAMhR,EAAOoP,IAAUP,CAAI,GACvCoC,IAAY,MAAMjR,EAAOoP,IAAUP,CAAI,GAEvCqC,IAAQX,MAAQ,UAAanB,KAAWmB,GACxCY,IAAQX,MAAQ,UAAapB,KAAWoB,GAExCY,IACJ;AAEF,WACE,gBAAA1Q,EAAC,OAAA,EAAI,WAAWvD,EAAGiT,GAAoB,EAAE,MAAAlP,EAAA,CAAM,GAAGrD,CAAS,GAEzD,UAAA;AAAA,MAAA,gBAAAI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS+S;AAAA,UACT,UAAU3P,KAAY6P;AAAA,UACtB,cAAW;AAAA,UACX,WAAW/T;AAAA,YACTiU;AAAA,YACA;AAAA,aACC/P,KAAY6P,MAAU;AAAA,YACvB,EAAE7P,KAAY6P,MAAU;AAAA,UAAA;AAAA,UAE3B,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKD,gBAAAjT;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAD;AAAA,UACA,MAAK;AAAA,UACL,OAAOoR;AAAA,UACP,UAAA/N;AAAA,UACA,UAAU,CAACQ,MAAM;AACf,kBAAMwP,IAAS,WAAWxP,EAAE,OAAO,KAAK;AACxC,YAAK,MAAMwP,CAAM,OAAUA,CAAM;AAAA,UACnC;AAAA,UACA,WAAW,CAACxP,MAAM;AAChB,YAAIA,EAAE,QAAQ,aACZA,EAAE,eAAA,GACFoP,EAAA,KACSpP,EAAE,QAAQ,gBACnBA,EAAE,eAAA,GACFmP,EAAA;AAAA,UAEJ;AAAA,UACA,WAAW7T;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACAkE,KAAY;AAAA,UAAA;AAAA,UAEb,GAAGtD;AAAA,QAAA;AAAA,MAAA;AAAA,MAIN,gBAAAE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAASgT;AAAA,UACT,UAAU5P,KAAY8P;AAAA,UACtB,cAAW;AAAA,UACX,WAAWhU;AAAA,YACTiU;AAAA,YACA;AAAA,aACC/P,KAAY8P,MAAU;AAAA,YACvB,EAAE9P,KAAY8P,MAAU;AAAA,UAAA;AAAA,UAE3B,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,GACF;AAAA,EAEJ;AACF;AACAd,GAAY,cAAc;ACrI1B,MAAMiB,KAAa1T,EAAM;AAAA,EACvB,CACE;AAAA,IACE,OAAO2T;AAAA,IACP,cAAAjB,IAAe;AAAA,IACf,UAAAnK;AAAA,IACA,YAAAqL;AAAA,IACA,WAAA3T;AAAA,EAAA,GAEFG,MACG;AACH,UAAM,CAAC0S,GAAeC,CAAgB,IAAI/S,EAAM;AAAA,MAC9C,MAAM;AACJ,YAAI4T,KAAc,OAAO,SAAW,KAAa;AAC/C,gBAAMC,IAAS,aAAa,QAAQD,CAAU;AAC9C,cAAIC,MAAW,UAAUA,MAAW,OAAQ,QAAOA;AAAA,QACrD;AACA,eAAOnB;AAAA,MACT;AAAA,IAAA,GAGI9G,IAAQ+H,KAAmBb,GAE3B7I,IAAe,CAACiJ,MAA0B;AAC9C,MAAKS,KAAiBZ,EAAiBG,CAAI,GACvCU,KAAc,OAAO,SAAW,OAAa,aAAa,QAAQA,GAAYV,CAAI,GACtF3K,KAAA,QAAAA,EAAW2K;AAAA,IACb;AAEA,WACE,gBAAApQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb,EAAG,oCAAoCU,CAAS;AAAA,QAC3D,MAAK;AAAA,QACL,cAAW;AAAA,QAEX,UAAA;AAAA,UAAA,gBAAAI;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAM4J,EAAa,MAAM;AAAA,cAClC,gBAAc2B,MAAU;AAAA,cACxB,cAAW;AAAA,cACX,WAAWrM;AAAA,gBACT;AAAA,gBACAqM,MAAU,SACN,mCACA;AAAA,cAAA;AAAA,cAGN,UAAA,gBAAA9I,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,WAAU,YACpE,UAAA;AAAA,gBAAA,gBAAAzC,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,KAAI,QAAO,KAAI,MAAK,eAAA,CAAc;AAAA,gBAC1D,gBAAAA,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,KAAI,QAAO,KAAI,MAAK,eAAA,CAAc;AAAA,gBAC1D,gBAAAA,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,KAAI,QAAO,KAAI,MAAK,eAAA,CAAc;AAAA,gBAC1D,gBAAAA,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,KAAI,QAAO,KAAI,MAAK,eAAA,CAAc;AAAA,cAAA,EAAA,CAC5D;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAM4J,EAAa,MAAM;AAAA,cAClC,gBAAc2B,MAAU;AAAA,cACxB,cAAW;AAAA,cACX,WAAWrM;AAAA,gBACT;AAAA,gBACA;AAAA,gBACAqM,MAAU,SACN,mCACA;AAAA,cAAA;AAAA,cAGN,UAAA,gBAAA9I,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,WAAU,YACpE,UAAA;AAAA,gBAAA,gBAAAzC,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,KAAI,MAAK,eAAA,CAAc;AAAA,gBAC3D,gBAAAA,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,KAAI,MAAK,eAAA,CAAc;AAAA,gBAC3D,gBAAAA,EAAC,QAAA,EAAK,GAAE,KAAI,GAAE,MAAK,OAAM,MAAK,QAAO,KAAI,MAAK,eAAA,CAAc;AAAA,cAAA,EAAA,CAC9D;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAqT,GAAW,cAAc;AC3EzB,MAAMI,KAAa,CAAC,EAAE,OAAAjL,GAAO,UAAA7E,GAAU,WAAA/D,QACrC,gBAAA6C;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWvD;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAGD,UAAA;AAAA,MAAA4I;AAAA,MACA7E,KACC,gBAAA3D;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS2D;AAAA,UACT,cAAY,UAAU6E,CAAK;AAAA,UAC3B,WAAU;AAAA,UACX,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED;AAAA,EAAA;AAEJ,GAqBIkL,KAAY/T,EAAM;AAAA,EACtB,CACE;AAAA,IACE,SAAAgU;AAAA,IACA,eAAAC,IAAgB,CAAA;AAAA,IAChB,gBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,OAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,WAAAtU;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAM,CAACoU,GAAYC,CAAa,IAAIzU,EAAM,SAAwB,IAAI,GAChE,CAAC0U,GAAaC,CAAc,IAAI3U,EAAM,SAIlC,IAAI,GACR4U,IAAc5U,EAAM,OAAuB,IAAI,GAE/C6U,IACJT,KAASA,EAAM,SAAS,IACpB,KACA,OAAO,OAAOH,CAAa,EAAE,KAAK,CAAC/J,MAAMA,EAAE,SAAS,CAAC;AAE3D,IAAAlK,EAAM,UAAU,MAAM;AACpB,UAAI,CAACwU,EAAY;AACjB,YAAMM,IAAc,CAAC7Q,MAA0B;;AAC7C,QACEA,aAAa,gBACb8Q,IAAAH,EAAY,YAAZ,QAAAG,EAAqB,SAAS9Q,EAAE,aAGlCwQ,EAAc,IAAI,GAClBE,EAAe,IAAI;AAAA,MACrB,GACMK,IAAe,MAAM;AACzB,QAAAP,EAAc,IAAI,GAClBE,EAAe,IAAI;AAAA,MACrB;AACA,sBAAS,iBAAiB,aAAaG,CAAW,GAClD,SAAS,iBAAiB,UAAUE,GAAc,EAAI,GACtD,OAAO,iBAAiB,UAAUA,CAAY,GACvC,MAAM;AACX,iBAAS,oBAAoB,aAAaF,CAAW,GACrD,SAAS,oBAAoB,UAAUE,GAAc,EAAI,GACzD,OAAO,oBAAoB,UAAUA,CAAY;AAAA,MACnD;AAAA,IACF,GAAG,CAACR,CAAU,CAAC;AAEf,UAAMS,IAAqB,CACzBC,GACAjR,MACG;AACH,UAAIuQ,MAAeU,GAAU;AAC3B,QAAAT,EAAc,IAAI,GAClBE,EAAe,IAAI;AACnB;AAAA,MACF;AACA,YAAMQ,IAAOlR,EAAE,cAAc,sBAAA,GACvBmR,IAAa,KAAK;AAAA,QACtBpB,EAAQ,KAAK,CAACqB,MAAMA,EAAE,OAAOH,CAAQ,EAAG,QAAQ,SAAS,KAAK;AAAA,QAC9D;AAAA,MAAA,GAGII,IADa,OAAO,cAAcH,EAAK,SAAS,IAEvCC,KAAcD,EAAK,MAAMC,IAClCD,EAAK,MAAMC,IAAa,IACxBD,EAAK,SAAS;AACpB,MAAAR,EAAe,EAAE,GAAGQ,EAAK,MAAM,GAAAG,GAAG,OAAO,KAAK,IAAIH,EAAK,OAAO,GAAG,EAAA,CAAG,GACpEV,EAAcS,CAAQ;AAAA,IACxB,GAEMK,IAAsBf,IACxBR,EAAQ,KAAK,CAACqB,MAAMA,EAAE,OAAOb,CAAU,IACvC;AAEJ,WACE,gBAAA1R;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb;AAAA,UACT;AAAA,UACAU;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAEF,UAAA;AAAA,WAAAoU,MAAmB,UAAaD,MAAgB,WAChD,gBAAAxR,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,YAAA,gBAAAzC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,eAAY;AAAA,gBACb,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,OAAOiU,KAAe;AAAA,gBACtB,UAAU,CAACrQ,MAAMsQ,KAAA,gBAAAA,EAAiBtQ,EAAE,OAAO;AAAA,gBAC3C,aAAaoQ,KAAqB;AAAA,gBAClC,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ,GACF;AAAA,UAGDL,EAAQ,IAAI,CAACwB,MAAW;AACvB,kBAAMC,IACJxB,EAAcuB,EAAO,EAAE,KAAKvB,EAAcuB,EAAO,EAAE,EAAE,SAAS;AAChE,mBACE,gBAAAnV,EAAC,OAAA,EAAoB,WAAU,YAC7B,UAAA,gBAAAyC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,CAACmB,MAAMgR,EAAmBO,EAAO,IAAIvR,CAAC;AAAA,gBAC/C,iBAAc;AAAA,gBACd,iBAAeuQ,MAAegB,EAAO;AAAA,gBACrC,WAAWjW;AAAA,kBACT;AAAA,kBACAkW,IACI,kDACA;AAAA,kBACJjB,MAAegB,EAAO,MAAM;AAAA,gBAAA;AAAA,gBAG7B,UAAA;AAAA,kBAAAA,EAAO;AAAA,kBACPC,KAAY,KAAKxB,EAAcuB,EAAO,EAAE,EAAE,MAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,EACnD,GAhBQA,EAAO,EAiBjB;AAAA,UAEJ,CAAC;AAAA,UAEApB,KAASA,EAAM,SAAS,KACvB,gBAAAtR,EAAA4S,GAAA,EACE,UAAA;AAAA,YAAA,gBAAArV,EAAC,OAAA,EAAI,WAAU,qBAAA,CAAqB;AAAA,YACnC+T,EAAM,IAAI,CAACuB,MACV,gBAAAtV;AAAA,cAACyT;AAAA,cAAA;AAAA,gBAEC,OAAO6B,EAAK;AAAA,gBACZ,UAAU,MAAM;AACd,wBAAMnE,IAAUyC,EAAc0B,EAAK,QAAQ,KAAK,CAAA;AAChD,kBAAAzB,KAAA,QAAAA;AAAA,oBACEyB,EAAK;AAAA,oBACLnE,EAAQ,OAAO,CAACtH,MAAMA,MAAMyL,EAAK,KAAK;AAAA;AAAA,gBAE1C;AAAA,cAAA;AAAA,cARK,GAAGA,EAAK,QAAQ,IAAIA,EAAK,KAAK;AAAA,YAAA,CAUtC;AAAA,UAAA,GACH;AAAA,UAGDd,KAAaV,KACZ,gBAAA9T;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS8T;AAAA,cACT,WAAU;AAAA,cACX,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAMFK,KAAcE,KAAea,KAC5BK,GAAS;AAAA,YACP,gBAAAvV;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKuU;AAAA,gBACL,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,MAAMF,EAAY;AAAA,kBAClB,KAAKA,EAAY;AAAA,kBACjB,QAAQ;AAAA,kBACR,UAAUA,EAAY;AAAA,gBAAA;AAAA,gBAGvB,UAAAa,EAAoB,QAAQ,IAAI,CAACM,MAAQ;;AACxC,wBAAMvR,KAAWyQ,IAAAd,EAAcO,CAAU,MAAxB,gBAAAO,EAA2B,SAASc,EAAI;AACzD,yBACE,gBAAA/S;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBAEC,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,iBAAewB;AAAA,sBACf,SAAS,MAAM;AACb,8BAAMkN,IAAUyC,EAAcO,CAAU,KAAK,CAAA,GACvCtB,IAAO5O,IACTkN,EAAQ,OAAO,CAACtH,MAAMA,MAAM2L,EAAI,KAAK,IACrC,CAAC,GAAGrE,GAASqE,EAAI,KAAK;AAC1B,wBAAA3B,KAAA,QAAAA,EAAiBM,GAAYtB;AAAA,sBAC/B;AAAA,sBACA,WAAW3T;AAAA,wBACT;AAAA,wBACA+E,IAAW,iBAAiB;AAAA,sBAAA;AAAA,sBAG7B,UAAA;AAAA,wBAAAA,IAAW,MAAM;AAAA,wBAAI;AAAA,wBAAEuR,EAAI;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAhBvBA,EAAI;AAAA,kBAAA;AAAA,gBAmBf,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,YAEH,SAAS;AAAA,UAAA;AAAA,QACX;AAAA,MAAA;AAAA,IAAA;AAAA,EAGR;AACF;AACA9B,GAAU,cAAc;ACjPxB,MAAM+B,KAAW,CAAC;AAAA,EAChB,QAAAC,IAAS;AAAA,EACT,OAAAnK,IAAQ;AAAA,EACR,UAAArD;AAAA,EACA,YAAAyN;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAzS;AAAA,EACA,gBAAA0S;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,WAAApW;AACF,MAAqB;AACnB,QAAM,CAACqW,GAASC,CAAU,IAAIvW,EAAM,SAAS,EAAK,GAC5C,CAACwW,GAAWC,CAAY,IAAIzW,EAAM,SAASmW,KAAkB,CAAC,GAC9DO,IAAY1W,EAAM,OAAoC,EAAE;AAE9D,EAAAA,EAAM,UAAU,MAAM;AACpB,QAAIkW,GAAO;AACT,MAAAK,EAAW,EAAI;AACf,YAAMzU,IAAI,WAAW,MAAMyU,EAAW,EAAK,GAAG,GAAG;AACjD,aAAO,MAAM,aAAazU,CAAC;AAAA,IAC7B;AAAA,EACF,GAAG,CAACoU,CAAK,CAAC,GAEVlW,EAAM,UAAU,MAAM;AACpB,IAAKmW,KACLM,EAAaN,CAAc;AAAA,EAC7B,GAAG,CAACA,CAAc,CAAC,GAEnBnW,EAAM,UAAU,MAAM;AACpB,QAAIwW,KAAa,EAAG;AACpB,UAAMrU,IAAK,YAAY,MAAM;AAC3B,MAAAsU,EAAa,CAACE,MACRA,KAAK,KAAK,cAAcxU,CAAE,GAAU,KACjCwU,IAAI,CACZ;AAAA,IACH,GAAG,GAAI;AACP,WAAO,MAAM,cAAcxU,CAAE;AAAA,EAC/B,GAAG,CAACqU,CAAS,CAAC;AAEd,QAAMI,IAAS,MAAM,KAAK,EAAE,QAAAb,EAAA,GAAU,CAACtO,GAAGC,MAAMkE,EAAMlE,CAAC,KAAK,EAAE,GACxDmP,IAAW,KAAK,KAAKd,IAAS,CAAC,GAE/B9L,IAAe,CAACxH,GAAeqU,MAAiB;;AACpD,UAAMC,IAAQD,EAAK,QAAQ,OAAO,EAAE,EAAE,MAAM,EAAE,GACxC5D,IAAO0D,EAAO,IAAI,CAACI,GAAGtP,MAAOA,MAAMjF,IAAQsU,IAAQC,CAAE,EAAE,KAAK,EAAE;AACpE,IAAAzO,KAAA,QAAAA,EAAW2K,IACP6D,KAAStU,IAAQsT,IAAS,OAC5BhB,IAAA2B,EAAU,QAAQjU,IAAQ,CAAC,MAA3B,QAAAsS,EAA8B,UAE5B7B,EAAK,QAAQ,OAAO,EAAE,EAAE,WAAW6C,KAAU,CAAC7C,EAAK,SAAS,EAAE,MAChE8C,KAAA,QAAAA,EAAa9C;AAAA,EAEjB,GAEMlN,IAAgB,CAACvD,GAAewB,MAA6C;;AACjF,QAAIA,EAAE,QAAQ;AACZ,UAAI,CAAC2S,EAAOnU,CAAK,KAAKA,IAAQ,GAAG;AAC/B,SAAAsS,IAAA2B,EAAU,QAAQjU,IAAQ,CAAC,MAA3B,QAAAsS,EAA8B;AAC9B,cAAM7B,IAAO0D,EAAO,IAAI,CAACI,GAAGtP,MAAOA,MAAMjF,IAAQ,IAAI,KAAKuU,CAAE,EAAE,KAAK,EAAE;AACrE,QAAAzO,KAAA,QAAAA,EAAW2K;AAAA,MACb,OAAO;AACL,cAAMA,IAAO0D,EAAO,IAAI,CAACI,GAAGtP,MAAOA,MAAMjF,IAAQ,KAAKuU,CAAE,EAAE,KAAK,EAAE;AACjE,QAAAzO,KAAA,QAAAA,EAAW2K;AAAA,MACb;AAAA,QACF,CAAWjP,EAAE,QAAQ,eAAexB,IAAQ,KAC1CwU,IAAAP,EAAU,QAAQjU,IAAQ,CAAC,MAA3B,QAAAwU,EAA8B,UACrBhT,EAAE,QAAQ,gBAAgBxB,IAAQsT,IAAS,OACpDmB,IAAAR,EAAU,QAAQjU,IAAQ,CAAC,MAA3B,QAAAyU,EAA8B;AAAA,EAElC,GAEMC,IAAc,CAAClT,MAA8C;;AACjE,IAAAA,EAAE,eAAA;AACF,UAAMmT,IAASnT,EAAE,cAAc,QAAQ,MAAM,EAAE,QAAQ,OAAO,EAAE,EAAE,MAAM,GAAG8R,CAAM,GAC3E7C,IAAO,MAAM,KAAK,EAAE,QAAA6C,KAAU,CAAC,GAAGrO,MAAM0P,EAAO1P,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;AACtE,IAAAa,KAAA,QAAAA,EAAW2K;AACX,UAAMmE,IAAa,KAAK,IAAID,EAAO,QAAQrB,IAAS,CAAC;AACrD,KAAAhB,IAAA2B,EAAU,QAAQW,CAAU,MAA5B,QAAAtC,EAA+B,SAC3BqC,EAAO,WAAWrB,MAAQC,KAAA,QAAAA,EAAa9C;AAAA,EAC7C,GAEMoE,IAAe,MAAM;AACzB,IAAId,IAAY,KAAK,CAACJ,MACtBA,EAAA,GACID,OAA6BA,CAAc;AAAA,EACjD,GAEMoB,IAAc,CAACR,GAAetU,MAClC,gBAAApC;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,KAAK,CAAC+G,MAAO;AAAE,QAAAsP,EAAU,QAAQjU,CAAK,IAAI2E;AAAA,MAAI;AAAA,MAC9C,MAAK;AAAA,MACL,WAAU;AAAA,MACV,WAAW;AAAA,MACX,OAAO2P;AAAA,MACP,UAAAtT;AAAA,MACA,cAAY,SAAShB,IAAQ,CAAC,OAAOsT,CAAM;AAAA,MAC3C,UAAU,CAAC9R,MAAMgG,EAAaxH,GAAOwB,EAAE,OAAO,KAAK;AAAA,MACnD,WAAW,CAACA,MAAM+B,EAAcvD,GAAOwB,CAAC;AAAA,MACxC,SAASkT;AAAA,MACT,SAAS,CAAClT,MAAMA,EAAE,OAAO,OAAA;AAAA,MACzB,WAAW1E;AAAA;AAAA,QAET;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEAwX,KAAS,CAACd,KAAW,CAACC,KAAS;AAAA;AAAA,QAE/BA,KAAS;AAAA;AAAA,QAETD,KAAW;AAAA;AAAA,QAEXxS,KAAY;AAAA,MAAA;AAAA,IACd;AAAA,IA1BKhB;AAAA,EAAA;AA8BT,2BACG,OAAA,EAAI,WAAWlD,EAAG,oCAAoCU,CAAS,GAE9D,UAAA;AAAA,IAAA,gBAAA6C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWvD,EAAG,qBAAqB+W,KAAW,eAAe;AAAA,QAC7D,cAAW;AAAA,QACX,MAAK;AAAA,QAGL,UAAA;AAAA,UAAA,gBAAAjW,EAAC,SAAI,WAAU,2BACZ,UAAAuW,EAAO,MAAM,GAAGC,CAAQ,EAAE,IAAI,CAACE,GAAOtU,MAAU8U,EAAYR,GAAOtU,CAAK,CAAC,GAC5E;AAAA,UAGCsT,KAAU,KACT,gBAAA1V,EAAC,OAAA,EAAI,WAAU,2BAA0B,eAAY,QACnD,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qBAAA,CAAqB,GACtC;AAAA,4BAID,OAAA,EAAI,WAAU,2BACZ,UAAAuW,EAAO,MAAMC,CAAQ,EAAE,IAAI,CAACE,GAAOtU,MAAU8U,EAAYR,GAAOtU,IAAQoU,CAAQ,CAAC,EAAA,CACpF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIDT,MAAa,UACZ,gBAAA/V,EAAC,OAAA,EAAI,WAAU,iDACZ,UAAAmW,IAAY,IACX,gBAAA1T,EAAC,QAAA,EACE,UAAA;AAAA,MAAAuT;AAAA,MAAY;AAAA,MAAc;AAAA,MAC3B,gBAAAvT,EAAC,QAAA,EAAK,WAAU,6DACb,UAAA;AAAA,QAAA0T;AAAA,QAAU;AAAA,MAAA,EAAA,CACb;AAAA,IAAA,EAAA,CACF,sBAEC,QAAA,EAAK,UAAA;AAAA,MAAA;AAAA,MACiB;AAAA,MACrB,gBAAA1T;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAASwU;AAAA,UACT,WAAU;AAAA,UACX,UAAA;AAAA,YAAA;AAAA,YACGjB;AAAA,YAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAChB,EAAA,CACF,EAAA,CAEJ;AAAA,EAAA,GAEJ;AAEJ;AAEAP,GAAS,cAAc;AC9LvB,MAAM0B,KAAc,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GACvDC,KAAS;AAAA,EACb;AAAA,EAAW;AAAA,EAAY;AAAA,EAAS;AAAA,EAAS;AAAA,EAAO;AAAA,EAChD;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAa;AAAA,EAAW;AAAA,EAAY;AACxD;AAGA,SAASC,GAASC,GAA0B;AAC1C,MAAI,CAACA,KAAO,CAAC,sBAAsB,KAAKA,CAAG,EAAG,QAAO;AACrD,QAAM,CAACrC,GAAGsC,GAAGZ,CAAC,IAAIW,EAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GACrCE,IAAK,IAAI,KAAKvC,GAAGsC,IAAI,GAAGZ,CAAC;AAC/B,SAAO,MAAMa,EAAG,QAAA,CAAS,IAAI,OAAOA;AACtC;AAEA,SAASC,GAAMd,GAAiB;AAC9B,QAAM1B,IAAI0B,EAAE,YAAA,GACNY,IAAI,OAAOZ,EAAE,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG,GAC5Ce,IAAM,OAAOf,EAAE,QAAA,CAAS,EAAE,SAAS,GAAG,GAAG;AAC/C,SAAO,GAAG1B,CAAC,IAAIsC,CAAC,IAAIG,CAAG;AACzB;AAEA,SAASC,GAAcC,GAAqB;AAC1C,QAAMjB,IAAIU,GAASO,CAAG;AACtB,MAAI,CAACjB,EAAG,QAAO;AACf,QAAM1B,IAAI0B,EAAE,YAAA,GACNY,IAAI,OAAOZ,EAAE,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG,GAC5Ce,IAAM,OAAOf,EAAE,QAAA,CAAS,EAAE,SAAS,GAAG,GAAG;AAC/C,SAAO,GAAG1B,CAAC,IAAIsC,CAAC,IAAIG,CAAG;AACzB;AAEA,SAASG,GAAUC,GAASC,GAAkB;AAC5C,SAAOD,EAAE,YAAA,MAAkBC,EAAE,YAAA,KAC3BD,EAAE,SAAA,MAAeC,EAAE,cACnBD,EAAE,QAAA,MAAcC,EAAE,QAAA;AACtB;AAEA,SAASC,GAAQrB,GAAkB;AACjC,SAAOkB,GAAUlB,GAAG,oBAAI,MAAM;AAChC;AAGA,SAASsB,GAAUC,GAAcC,GAAuB;AAGtD,QAAMC,KAFQ,IAAI,KAAKF,GAAMC,GAAO,CAAC,EAEV,OAAA,IAAW,KAAK,GACrCE,IAAgB,CAAA;AACtB,WAAS,IAAI,CAACD,GAAa,IAAI,KAAKA,GAAa;AAC/C,IAAAC,EAAM,KAAK,IAAI,KAAKH,GAAMC,GAAO,IAAI,CAAC,CAAC;AAEzC,SAAOE;AACT;AAmBA,MAAMC,KAAU;AAAA,EACd,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAGMC,KAAa5Y,EAAM;AAAA,EACvB,CACE;AAAA,IACE,OAAA4L;AAAA,IACA,UAAArD;AAAA,IACA,aAAAsQ,IAAc;AAAA,IACd,MAAAvV,IAAO;AAAA,IACP,OAAA4S;AAAA,IACA,OAAArN;AAAA,IACA,SAAAiQ;AAAA,IACA,SAAAC;AAAA,IACA,UAAAtV;AAAA,IACA,WAAAxD;AAAA,IACA,IAAAkC;AAAA,EAAA,GAEF/B,MACG;AACH,UAAM2I,IAAc/I,EAAM,MAAA,GACpBgZ,IAAY7W,KAAM4G,GAElBkQ,wBAAY,KAAA,GACZC,IAAetN,IAAQ8L,GAAS9L,CAAK,IAAI,MAGzC,CAACuN,GAAUC,CAAW,IAAIpZ,EAAM;AAAA,OACpCkZ,KAAA,gBAAAA,EAAc,kBAAiBD,EAAM,YAAA;AAAA,IAAY,GAE7C,CAACI,GAAWC,CAAY,IAAItZ,EAAM;AAAA,OACtCkZ,KAAA,gBAAAA,EAAc,eAAcD,EAAM,SAAA;AAAA,IAAS,GAEvC,CAAC3W,GAAMiX,CAAO,IAAIvZ,EAAM,SAAS,EAAK;AAE5C,IAAAA,EAAM,UAAU,MAAM;AACpB,YAAMyT,IAAS7H,IAAQ8L,GAAS9L,CAAK,IAAI;AACzC,MAAI6H,MACF2F,EAAY3F,EAAO,aAAa,GAChC6F,EAAa7F,EAAO,UAAU;AAAA,IAElC,GAAG,CAAC7H,CAAK,CAAC;AAEV,UAAM4N,IAAOlB,GAAUa,GAAUE,CAAS,GAEpCI,IAAgB,MAAM;AAC1B,MAAIJ,MAAc,KAAKC,EAAa,EAAE,GAAGF,EAAY,CAAC9D,MAAMA,IAAI,CAAC,KAC5DgE,EAAa,CAAC1B,MAAMA,IAAI,CAAC;AAAA,IAChC,GAEM8B,IAAgB,MAAM;AAC1B,MAAIL,MAAc,MAAMC,EAAa,CAAC,GAAGF,EAAY,CAAC9D,MAAMA,IAAI,CAAC,KAC5DgE,EAAa,CAAC1B,MAAMA,IAAI,CAAC;AAAA,IAChC,GAEM+B,IAAe,MAAMP,EAAY,CAAC9D,MAAMA,IAAI,CAAC,GAC7CsE,IAAe,MAAMR,EAAY,CAAC9D,MAAMA,IAAI,CAAC,GAE7CuE,IAAiB,CAAC7C,MAAqB;AAC3C,YAAMiB,IAAMH,GAAMd,CAAC;AAEnB,aADI,GAAA8B,KAAWb,IAAMa,KACjBC,KAAWd,IAAMc;AAAA,IAEvB,GAEMe,IAAkB,CAAC9C,MAAY;AACnC,MAAI6C,EAAe7C,CAAC,MACpBzO,KAAA,QAAAA,EAAWuP,GAAMd,CAAC,IAClBuC,EAAQ,EAAK;AAAA,IACf,GAEMQ,IAAc,MAAM;AACxB,MAAIF,EAAeZ,CAAK,MACxB1Q,KAAA,QAAAA,EAAWuP,GAAMmB,CAAK,IACtBM,EAAQ,EAAK;AAAA,IACf,GAEMS,IAAc,MAAM;AACxB,MAAAzR,KAAA,QAAAA,EAAW;AAAA,IACb,GAEM0R,IAAerO,IAAQoM,GAAcpM,CAAK,IAAI;AAEpD,6BACG,OAAA,EAAI,WAAWrM,EAAG,yBAAyBU,CAAS,GAClD,UAAA;AAAA,MAAA4I,KACC,gBAAAxI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS2Y;AAAA,UACT,WAAU;AAAA,UAET,UAAAnQ;AAAA,QAAA;AAAA,MAAA;AAAA,MAIL,gBAAA/F,EAACgK,EAAiB,MAAjB,EAAsB,MAAAxK,GAAY,cAAcmB,IAAW,SAAY8V,GACtE,UAAA;AAAA,QAAA,gBAAAlZ,EAACyM,EAAiB,SAAjB,EAAyB,SAAO,IAC/B,UAAA,gBAAAhK;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAA1C;AAAA,YACA,IAAI4Y;AAAA,YACJ,MAAK;AAAA,YACL,UAAAvV;AAAA,YACA,iBAAc;AAAA,YACd,iBAAenB;AAAA,YACf,WAAW/C;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACAoZ,GAAQrV,CAAI;AAAA,cACZ4S,IAAQ,0EAA0E;AAAA,cAClFzS,IAAW,kCAAkC;AAAA,YAAA;AAAA,YAG/C,UAAA;AAAA,cAAA,gBAAApD,EAAC,UAAK,WAAWd;AAAA,gBACf;AAAA,gBACA0a,IAAe,oBAAoB;AAAA,cAAA,GAElC,eAAgBpB,GACnB;AAAA,gCAEC,QAAA,EAAK,WAAU,gCAA+B,eAAY,QAAO,UAAA,IAAA,CAAC;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAEvE;AAAA,QAEA,gBAAAxY,EAACyM,EAAiB,QAAjB,EACC,UAAA,gBAAAhK;AAAA,UAACgK,EAAiB;AAAA,UAAjB;AAAA,YACC,OAAM;AAAA,YACN,YAAY;AAAA,YACZ,WAAWvN;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,YAEF,iBAAiB,CAAC0E,MAAMA,EAAE,eAAA;AAAA,YAG1B,UAAA;AAAA,cAAA,gBAAAnB,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAzC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAASsZ;AAAA,sBACT,WAAU;AAAA,sBACV,cAAW;AAAA,sBACZ,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAAtZ;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAASoZ;AAAA,sBACT,WAAU;AAAA,sBACV,cAAW;AAAA,sBACZ,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED,GACF;AAAA,gBACA,gBAAA3W,EAAC,QAAA,EAAK,WAAU,8EACb,UAAA;AAAA,kBAAA2U,GAAO4B,CAAS;AAAA,kBAAE;AAAA,kBAAEF;AAAA,gBAAA,GACvB;AAAA,gBACA,gBAAArW,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,kBAAA,gBAAAzC;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAASqZ;AAAA,sBACT,WAAU;AAAA,sBACV,cAAW;AAAA,sBACZ,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAArZ;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,SAASuZ;AAAA,sBACT,WAAU;AAAA,sBACV,cAAW;AAAA,sBACZ,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED,EAAA,CACF;AAAA,cAAA,GACF;AAAA,gCAGC,OAAA,EAAI,WAAU,yBACZ,UAAApC,GAAY,IAAI,CAAC0C,MAChB,gBAAA7Z;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBAET,UAAA6Z;AAAA,gBAAA;AAAA,gBAHIA;AAAA,cAAA,CAKR,GACH;AAAA,cAGA,gBAAA7Z,EAAC,SAAI,WAAU,oBACZ,YAAK,IAAI,CAAC2W,GAAGtP,MAAM;AAClB,sBAAMyS,KAAUnD,EAAE,SAAA,MAAeqC,GAC3Be,IAAalB,IAAehB,GAAUlB,GAAGkC,CAAY,IAAI,IACzDmB,KAAYhC,GAAQrB,CAAC,GACrBsD,KAAeT,EAAe7C,CAAC;AAErC,uBACE,gBAAA3W;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,MAAK;AAAA,oBACL,UAAUia;AAAA,oBACV,SAAS,MAAMR,EAAgB9C,CAAC;AAAA,oBAChC,cAAYA,EAAE,aAAA;AAAA,oBACd,gBAAcoD;AAAA,oBACd,WAAW7a;AAAA,sBACT;AAAA,sBACA;AAAA,sBACA;AAAA;AAAA,sBAEA4a,KAAU,uBAAuB;AAAA;AAAA,sBAEjC,CAACC,KAAc,CAACE,MAAgB;AAAA;AAAA,sBAEhCD,MAAa,CAACD,KAAc;AAAA;AAAA,sBAE5BA,KAAc;AAAA,wBACZ;AAAA,wBACA;AAAA,sBAAA;AAAA;AAAA,sBAGFE,MAAgB;AAAA,oBAAA;AAAA,oBAGjB,YAAE,QAAA;AAAA,kBAAQ;AAAA,kBAzBN5S;AAAA,gBAAA;AAAA,cA4BX,CAAC,EAAA,CACH;AAAA,cAGA,gBAAA5E,EAAC,OAAA,EAAI,WAAU,sEACb,UAAA;AAAA,gBAAA,gBAAAzC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS0Z;AAAA,oBACT,UAAUF,EAAeZ,CAAK;AAAA,oBAC9B,WAAU;AAAA,oBACX,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAA5Y;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS2Z;AAAA,oBACT,WAAU;AAAA,oBACX,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,EACF,CACF;AAAA,MAAA,GACF;AAAA,MAEC9D,KAAS,OAAOA,KAAU,8BACxB,KAAA,EAAE,WAAU,0CAA0C,UAAAA,EAAA,CAAM;AAAA,IAAA,GAEjE;AAAA,EAEJ;AACF;AACA0C,GAAW,cAAc;ACrUzB,MAAM2B,KAAc;AAAA,EAClB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,KAASxa,EAAM;AAAA,EACnB,CACE;AAAA,IACE,OAAO2T;AAAA,IACP,cAAAjB,IAAe;AAAA,IACf,KAAAE,IAAM;AAAA,IACN,UAAArK;AAAA,IACA,UAAAkS;AAAA,IACA,MAAAnX,IAAO;AAAA,IACP,WAAArD;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAM,CAAC0S,GAAeC,CAAgB,IAAI/S,EAAM,SAAS0S,CAAY,GAC/D,CAACgI,GAASC,CAAU,IAAI3a,EAAM,SAAwB,IAAI,GAE1D4L,IAAQ+H,KAAmBb,GAC3B8H,IAAUF,KAAW9O,GAErBiP,IAAe,CAAC3Q,MAAc;AAClC,MAAIuQ,MACC9G,KAAiBZ,EAAiB7I,CAAC,GACxC3B,KAAA,QAAAA,EAAW2B;AAAA,IACb,GAEMlE,IAAgB,CAAC/B,MAA2C;AAChE,UAAI,CAAAwW;AACJ,YAAIxW,EAAE,QAAQ,gBAAgBA,EAAE,QAAQ,WAAW;AACjD,UAAAA,EAAE,eAAA;AACF,gBAAMiP,IAAO,KAAK,IAAItH,IAAQ,GAAGgH,CAAG;AACpC,UAAKe,KAAiBZ,EAAiBG,CAAI,GAC3C3K,KAAA,QAAAA,EAAW2K;AAAA,QACb,WAAWjP,EAAE,QAAQ,eAAeA,EAAE,QAAQ,aAAa;AACzD,UAAAA,EAAE,eAAA;AACF,gBAAMiP,IAAO,KAAK,IAAItH,IAAQ,GAAG,CAAC;AAClC,UAAK+H,KAAiBZ,EAAiBG,CAAI,GAC3C3K,KAAA,QAAAA,EAAW2K;AAAA,QACb,MAAA,CAAWjP,EAAE,QAAQ,UACnBA,EAAE,eAAA,GACG0P,KAAiBZ,EAAiB,CAAC,GACxCxK,KAAA,QAAAA,EAAW,MACFtE,EAAE,QAAQ,UACnBA,EAAE,eAAA,GACG0P,KAAiBZ,EAAiBH,CAAG,GAC1CrK,KAAA,QAAAA,EAAWqK;AAAA,IAEf;AAEA,WACE,gBAAAvS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,MAAMqa,IAAW,QAAQ;AAAA,QACzB,cAAY,WAAW7O,CAAK,WAAWgH,CAAG;AAAA,QAC1C,iBAAehH;AAAA,QACf,iBAAe;AAAA,QACf,iBAAegH;AAAA,QACf,UAAU6H,IAAW,SAAY;AAAA,QACjC,WAAWzU;AAAA,QACX,cAAc,MAAM2U,EAAW,IAAI;AAAA,QACnC,WAAWpb;AAAA,UACT;AAAA,UACA,CAACkb,KAAY;AAAA,UACbF,GAAYjX,CAAI;AAAA,UAChBrD;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAEH,UAAA,MAAM,KAAK,EAAE,QAAQyS,KAAO,CAACnL,GAAGC,MAAM;AACrC,gBAAMoT,IAAYpT,IAAI,GAChBqT,IAASD,KAAaF;AAC5B,iBACE,gBAAAva;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,SAAS,MAAMwa,EAAaC,CAAS;AAAA,cACrC,cAAc,MAAM,CAACL,KAAYE,EAAWG,CAAS;AAAA,cACrD,WAAWvb;AAAA,gBACT;AAAA,gBACAwb,IAAS,iBAAiB;AAAA,gBAC1B,CAACN,KAAY;AAAA,cAAA;AAAA,cAEf,eAAY;AAAA,cAEX,cAAS,MAAM;AAAA,YAAA;AAAA,YAVX/S;AAAA,UAAA;AAAA,QAaX,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AACA8S,GAAO,cAAc;ACzFrB,SAASQ,GAAgBC,GAAyB;AAChD,QAAMrD,IAAI,KAAK,MAAM,KAAK,IAAI,GAAGqD,CAAO,IAAI,EAAE,GACxCC,IAAI,KAAK,IAAI,GAAGD,CAAO,IAAI;AACjC,SAAO,GAAG,OAAOrD,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAOsD,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AACpE;AAEA,MAAMC,KAAsB,CAAC;AAAA,EAC3B,MAAA7Y;AAAA,EACA,kBAAA8Y;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC,IAAY;AACd,MAAgC;AAC9B,QAAMC,IAAaL,KAAoBI,GACjCE,IAAWN,KAAoB;AAErC,EAAApb,EAAM,UAAU,MAAM;AACpB,IAAIsC,KAAQ8Y,KAAoB,KAAKG,KACnCA,EAAA;AAAA,EAEJ,GAAG,CAACjZ,GAAM8Y,GAAkBG,CAAY,CAAC;AAEzC,QAAMI,IAAiBD,IACnB,8CACAD,IACE,kBACA,IAEAG,IAAW,KAAK,IAAI,KAAMR,KAAoBI,IAAY,KAAM,GAAG;AAEzE,SACE,gBAAAnb,EAAC8M,MAAO,MAAA7K,GACN,UAAA,gBAAAQ,EAAC4K,MAAc,MAAK,MAAK,WAAU,2BAEjC,UAAA;AAAA,IAAA,gBAAArN,EAAC,SAAI,WAAU,8EACb,UAAA,gBAAAyC,EAAC+K,IAAA,EAAY,WAAU,eACrB,UAAA;AAAA,MAAA,gBAAAxN,EAAC,QAAA,EAAK,eAAY,QAAO,UAAA,MAAE;AAAA,MAAO;AAAA,IAAA,EAAA,CACpC,EAAA,CACF;AAAA,IAGA,gBAAAA,EAACyN,IAAA,EAAkB,WAAU,sFAAqF,UAAA,2EAGlH;AAAA,IAGA,gBAAAhL,EAAC,OAAA,EAAI,WAAU,8CAEb,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,QAAA,gBAAAzC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,OAAOob,IAAa,uBAAuB,yBAAyB,SAAS,KAAA;AAAA,YACtF,eAAY;AAAA,YACb,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD,gBAAApb;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,OAAOob,IAAa,uBAAuB,yBAAyB,SAAS,KAAA;AAAA,YACtF,eAAY;AAAA,YACb,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD,gBAAApb;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWd;AAAA,cACT;AAAA,cACAkc,IAAa,gBAAgB;AAAA,cAC7BE;AAAA,YAAA;AAAA,YAEF,aAAU;AAAA,YACV,eAAY;AAAA,YACZ,cAAYF,IAAa,aAAa;AAAA,YAErC,aAAgBL,CAAgB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEnC,gBAAA/a;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,OAAOob,IAAa,uBAAuB,yBAAyB,SAAS,KAAA;AAAA,YACtF,eAAY;AAAA,YACb,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD,gBAAApb;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,OAAOob,IAAa,uBAAuB,yBAAyB,SAAS,KAAA;AAAA,YACtF,eAAY;AAAA,YACb,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,GACF;AAAA,MAGA,gBAAApb,EAAC,KAAA,EAAE,WAAU,2EAA0E,UAAA,aAEvF;AAAA,MAGA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWd;AAAA,YACT;AAAA,YACAkc,IAAa,cAAc;AAAA,UAAA;AAAA,UAE7B,OAAO,EAAE,OAAO,GAAG,KAAK,IAAI,GAAGG,CAAQ,CAAC,IAAA;AAAA,UACxC,eAAY;AAAA,QAAA;AAAA,MAAA,EACd,CACF;AAAA,IAAA,GACF;AAAA,IAGA,gBAAA9Y,EAAC8K,IAAA,EAAa,WAAU,oCACtB,UAAA;AAAA,MAAA,gBAAAvN,EAACgD,IAAA,EAAO,SAAQ,SAAQ,SAASiY,GAAU,UAAA,WAE3C;AAAA,wBACCjY,IAAA,EAAO,SAAQ,WAAU,SAASgY,GAAU,UAAA,iBAAA,CAE7C;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;AAEAF,GAAoB,cAAc;AC/GlC,MAAMU,KAGF;AAAA,EACF,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,WAAW;AAAA,EAAA;AAAA,EAEb,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,WAAW;AAAA,EAAA;AAAA,EAEb,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,WAAW;AAAA,EAAA;AAAA,EAEb,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,WAAW;AAAA,EAAA;AAAA,EAEb,WAAW;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,WAAW;AAAA,EAAA;AAAA,EAEb,SAAS;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,WAAW;AAAA,EAAA;AAAA,EAEb,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,WAAW;AAAA,EAAA;AAAA,EAEb,UAAU;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,WAAW;AAAA,EAAA;AAEf,GAEMC,KAAa9b,EAAM;AAAA,EACvB,CACE;AAAA,IACE,QAAA+b;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,cAAAC;AAAA,IACA,OAAOC;AAAA,IACP,UAAAP,IAAW;AAAA,IACX,OAAA1F;AAAA,IACA,WAAAjW;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAM,CAACgc,GAAeC,CAAgB,IAAIrc,EAAM,SAA0B,MAAM,GAC1E,CAACsc,GAAOC,CAAQ,IAAIvc,EAAM,SAAqB,CAAA,CAAE,GACjDwc,IAAWxc,EAAM,OAAyB,IAAI,GAC9Cyc,IAAiBzc,EAAM,MAAA,GAEvB4B,IAAQua,KAAmBC,GAC3BM,IAASb,GAAYja,CAAK,GAC1B+a,IAAa/a,MAAU,YAEvBgb,IAAc,CAACC,MACdd,IACYA,EAAO,MAAM,GAAG,EAAE,IAAI,CAAC5D,MAAMA,EAAE,MAAM,EACtC,KAAK,CAACA,MAChBA,EAAE,WAAW,GAAG,IAAU0E,EAAK,KAAK,cAAc,SAAS1E,EAAE,YAAA,CAAa,IAC1EA,EAAE,SAAS,IAAI,IAAU0E,EAAK,KAAK,WAAW1E,EAAE,QAAQ,MAAM,GAAG,CAAC,IAC/D0E,EAAK,SAAS1E,CACtB,IANmB,IAShB2E,IAAe,CAACC,MAAqB;AACzC,UAAI,CAACA,EAAS,OAAQ;AAEtB,YAAMC,IAAgB,CAAA,GAChBvM,IAAoBsM,EAAS,IAAI,CAACF,MAAS;AAC/C,cAAMI,IAAS,CAAChB,KAAWY,EAAK,QAAQZ,GAClCiB,IAASN,EAAYC,CAAI,GACzBM,IAAYF,IAEbC,IAEC,SADA,4BAFF,gBAAgBjB,KAAWA,IAAU,OAAO,MAAM,QAAQ,CAAC,IAAI,GAAG;AAItE,eAAKkB,KAAUH,EAAM,KAAKH,CAAI,GACvB;AAAA,UACL,MAAAA;AAAA,UACA,YAAYA,EAAK,KAAK,WAAW,QAAQ,IAAI,IAAI,gBAAgBA,CAAI,IAAI;AAAA,UACzE,UAAU;AAAA,UACV,QAAQM,IAAW,UAAU;AAAA,UAC7B,OAAOA;AAAA,QAAA;AAAA,MAEX,CAAC;AAED,MAAAZ,EAAS9L,CAAK,GACVuM,EAAM,WAAQd,KAAA,QAAAA,EAAec,KAC5Bb,KAAiBE,EAAiBW,EAAM,SAAS,cAAc,OAAO;AAAA,IAC7E,GAEMI,IAAoBd,EAAM,KAAK,CAACjH,MAAMA,EAAE,WAAW,WAAW;AACpE,IAAArV,EAAM,UAAU,MAAM;AACpB,UAAI,CAACod,EAAmB;AACxB,YAAMC,IAAW,YAAY,MAAM;AACjC,QAAAd,EAAS,CAACe,MAAS;AACjB,gBAAMC,IAAUD,EAAK,IAAI,CAAC5M,MAAS;AACjC,gBAAIA,EAAK,WAAW,YAAa,QAAOA;AACxC,kBAAM8M,IAAc,KAAK,IAAI9M,EAAK,WAAW,IAAI,GAAG;AACpD,mBAAO;AAAA,cACL,GAAGA;AAAA,cACH,UAAU8M;AAAA,cACV,QAAQA,KAAe,MAAO,SAAoB;AAAA,YAAA;AAAA,UAEtD,CAAC;AAED,cADgBD,EAAQ,MAAM,CAAC7V,MAAMA,EAAE,WAAW,WAAW,KAC9C,CAACyU,GAAiB;AAC/B,kBAAMsB,IAAYF,EAAQ,KAAK,CAAC7V,MAAMA,EAAE,WAAW,OAAO;AAC1D,YAAA2U,EAAiBoB,IAAY,UAAU,SAAS;AAAA,UAClD;AACA,iBAAOF;AAAA,QACT,CAAC;AAAA,MACH,GAAG,GAAG;AACN,aAAO,MAAM,cAAcF,CAAQ;AAAA,IACrC,GAAG,CAACD,GAAmBjB,CAAe,CAAC,GAEvCnc,EAAM,UAAU,MAAM;AACpB,MAAImc,MAAoB,YACtBI;AAAA,QAAS,CAACe,MACRA,EAAK;AAAA,UAAI,CAAC5M,MACRA,EAAK,WAAW,cAAc,EAAE,GAAGA,GAAM,UAAU,KAAK,QAAQ,OAAA,IAAWA;AAAA,QAAA;AAAA,MAC7E,IAEOyL,MAAoB,WAC7BI;AAAA,QAAS,CAACe,MACRA,EAAK;AAAA,UAAI,CAAC5M,MACRA,EAAK,WAAW,cAAc,EAAE,GAAGA,GAAM,QAAQ,YAAYA;AAAA,QAAA;AAAA,MAC/D;AAAA,IAGN,GAAG,CAACyL,CAAe,CAAC;AAEpB,UAAMuB,IAAiB,CAACzZ,MAAuB;AAE7C,UADAA,EAAE,eAAA,GACE0Y,KAAcR,EAAiB;AACnC,YAAMwB,IAAa5B,KAAU,MAAM,KAAK9X,EAAE,aAAa,KAAK,EAAE;AAAA,QAC5D,CAACyM,MAAS,CAACqL,EAAO,MAAM,GAAG,EAAE,KAAK,CAAC5D,MAAM;AACvC,gBAAMrW,IAAIqW,EAAE,KAAA;AACZ,iBAAIrW,EAAE,SAAS,IAAI,IAAU4O,EAAK,KAAK,WAAW5O,EAAE,QAAQ,MAAM,GAAG,CAAC,IAC/D4O,EAAK,SAAS5O;AAAA,QACvB,CAAC;AAAA,MAAA;AAEH,MAAAua,EAAiBsB,IAAa,iBAAiB,UAAU;AAAA,IAC3D,GAEMC,IAAkB,MAAM;AAC5B,MAAKzB,KAAiBE,EAAiB,MAAM;AAAA,IAC/C,GAEMwB,IAAa,CAAC5Z,MAAuB;AAEzC,MADAA,EAAE,eAAA,GACE,CAAA0Y,KACJG,EAAa,MAAM,KAAK7Y,EAAE,aAAa,KAAK,CAAC;AAAA,IAC/C,GAEMgG,IAAe,CAAChG,MAA2C;AAC/D,MAAA6Y,EAAa,MAAM,KAAK7Y,EAAE,OAAO,SAAS,CAAA,CAAE,CAAC,GAC7CA,EAAE,OAAO,QAAQ;AAAA,IACnB,GAEM6Z,IAAa,CAACrb,MAAkB;AACpC,MAAA8Z,EAAS,CAACe,MAAS;AACjB,cAAMpK,IAAOoK,EAAK,OAAO,CAAC7V,GAAGC,MAAMA,MAAMjF,CAAK;AAC9C,eAAIyQ,EAAK,WAAW,KAAK,CAACiJ,OAAkC,MAAM,GAC3DjJ;AAAA,MACT,CAAC;AAAA,IACH;AAEA,WACE,gBAAApQ,EAAC,SAAI,WAAWvD,EAAG,uBAAuBU,CAAS,GAAG,KAAAG,GAAW,GAAGD,GAElE,UAAA;AAAA,MAAA,gBAAA2C;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWvD;AAAA,YACT;AAAA,YACA;AAAA,YACAmd,EAAO;AAAA,YACPA,EAAO;AAAA,YACPC,KAAc;AAAA,UAAA;AAAA,UAEhB,YAAYe;AAAA,UACZ,aAAaE;AAAA,UACb,QAAQC;AAAA,UACR,SAAS,MAAA;;AAAM,oBAAClB,OAAc5H,IAAAyH,EAAS,YAAT,gBAAAzH,EAAkB;AAAA;AAAA,UAChD,MAAK;AAAA,UACL,UAAU4H,IAAa,KAAK;AAAA,UAC5B,cAAW;AAAA,UACX,oBAAkB/a,MAAU,SAAS6a,IAAiB;AAAA,UAEtD,UAAA;AAAA,YAAA,gBAAApc;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKmc;AAAA,gBACL,MAAK;AAAA,gBACL,QAAAT;AAAA,gBACA,UAAAC;AAAA,gBACA,UAAUW;AAAA,gBACV,UAAU1S;AAAA,gBACV,WAAU;AAAA,gBACV,cAAW;AAAA,cAAA;AAAA,YAAA;AAAA,YAIb,gBAAA5J;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWd,EAAG,mCAAmCmd,EAAO,SAAS;AAAA,gBACjE,eAAY;AAAA,gBAEX,UAAAA,EAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAGV,gBAAArc,EAAC,KAAA,EAAE,WAAWd,EAAG,kCAAkCmd,EAAO,cAAc,6BAA6B,uBAAuBA,EAAO,SAAS,GACzI,YAAO,OACV;AAAA,YAEC9a,MAAU,UACT,gBAAAkB,EAAC,OAAE,IAAI2Z,GAAgB,WAAU,yCAC9B,UAAA;AAAA,cAAAV,IAAS,GAAGA,EAAO,MAAM,GAAG,EAAE,IAAI,CAAA5D,MAAKA,EAAE,KAAA,CAAM,EAAE,KAAK,IAAI,CAAC,MAAM;AAAA,cACjE8D,IAAU,UAAUA,IAAU,OAAO,MAAM,QAAQ,CAAC,CAAC,QAAQ;AAAA,YAAA,GAChE;AAAA,YAGDra,MAAU,UACT,gBAAAvB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAU;AAAA,gBACV,WAAU;AAAA,gBACX,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAKFuB,MAAU,eAAe0a,EAAM,WAAW;AAAA,YAEzC,gBAAAxZ,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,cAAA,gBAAAzC,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,OAAO,GAAGub,CAAQ,IAAA;AAAA,gBAAI;AAAA,cAAA,GAEnC;AAAA,cACA,gBAAA9Y,EAAC,KAAA,EAAE,WAAU,kFACV,UAAA;AAAA,gBAAA8Y;AAAA,gBAAS;AAAA,cAAA,EAAA,CACZ;AAAA,YAAA,GACF;AAAA,YAGD1F,KACC,gBAAA7V,EAAC,KAAA,EAAE,WAAU,+CAA+C,UAAA6V,EAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKrEoG,EAAM,SAAS,KACd,gBAAAjc,EAAC,OAAA,EAAI,WAAU,uBACZ,UAAAic,EAAM,IAAI,CAAC5L,GAAMjO,MAChB,gBAAAK;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UAGT,UAAA;AAAA,YAAA4N,EAAK,aACJ,gBAAArQ;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKqQ,EAAK;AAAA,gBACV,KAAKA,EAAK,KAAK;AAAA,gBACf,WAAU;AAAA,cAAA;AAAA,YAAA,IAGZ,gBAAArQ,EAAC,OAAA,EAAI,WAAU,kGAAiG,UAAA,KAEhH;AAAA,YAIF,gBAAAyC,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,cAAA,gBAAAzC,EAAC,KAAA,EAAE,WAAU,oCAAoC,UAAAqQ,EAAK,KAAK,MAAK;AAAA,cAChE,gBAAA5N,EAAC,KAAA,EAAE,WAAU,oEACT,UAAA;AAAA,iBAAA4N,EAAK,KAAK,OAAO,OAAO,MAAM,QAAQ,CAAC;AAAA,gBAAE;AAAA,cAAA,GAC7C;AAAA,cAGCA,EAAK,WAAW,eACf,gBAAArQ,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,OAAO,GAAGqQ,EAAK,QAAQ,IAAA;AAAA,gBAAI;AAAA,cAAA,GAExC;AAAA,cAEDA,EAAK,WAAW,UACf,gBAAArQ,EAAC,OAAA,EAAI,WAAU,mCAAkC;AAAA,cAElDqQ,EAAK,WAAW,WACf,gBAAA5N,EAAA4S,GAAA,EACE,UAAA;AAAA,gBAAA,gBAAArV,EAAC,OAAA,EAAI,WAAU,qCAAA,CAAqC;AAAA,gBACnDqQ,EAAK,SACJ,gBAAArQ,EAAC,OAAE,WAAU,+CAA+C,YAAK,MAAA,CAAM;AAAA,cAAA,EAAA,CAE3E;AAAA,YAAA,GAEJ;AAAA,YAGA,gBAAAyC,EAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,cAAA4N,EAAK,WAAW,eACf,gBAAA5N,EAAC,QAAA,EAAK,WAAU,+FACb,UAAA;AAAA,gBAAA4N,EAAK;AAAA,gBAAS;AAAA,cAAA,GACjB;AAAA,cAEDA,EAAK,WAAW,4BACd,QAAA,EAAK,WAAU,yBAAwB,UAAA,KAAC;AAAA,cAE1CA,EAAK,WAAW,6BACd,QAAA,EAAK,WAAU,4BAA2B,UAAA,IAAA,CAAC;AAAA,YAAA,GAEhD;AAAA,YAGA,gBAAArQ;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAMyd,EAAWrb,CAAK;AAAA,gBAC/B,WAAU;AAAA,gBACV,cAAY,UAAUiO,EAAK,KAAK,IAAI;AAAA,gBACrC,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED;AAAA,QAAA;AAAA,QApEKjO;AAAA,MAAA,CAsER,EAAA,CACH;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AACAqZ,GAAW,cAAc;ACvXzB,MAAMiC,KAAoB;AAM1B,SAASC,GACPC,GACAC,GACQ;AACR,MAAIC,IAAUD,EAAc,CAAC,GACzBE,IAAU,KAAK,IAAIH,IAAkBE,CAAO;AAChD,WAASzW,IAAI,GAAGA,IAAIwW,EAAc,QAAQxW,KAAK;AAC7C,UAAM2W,IAAO,KAAK,IAAIJ,IAAkBC,EAAcxW,CAAC,CAAC;AACxD,IAAI2W,IAAOD,MACTA,IAAUC,GACVF,IAAUD,EAAcxW,CAAC;AAAA,EAE7B;AACA,SAAOyW;AACT;AAEA,MAAMG,KAAc,CAAC;AAAA,EACnB,MAAAhc;AAAA,EACA,SAAAic;AAAA,EACA,OAAA3b;AAAA,EACA,UAAAc;AAAA,EACA,WAAA8a,IAAY;AAAA,EACZ,YAAAC,IAAa,CAAC,GAAG;AAAA,EACjB,aAAAC,IAAc;AAAA,EACd,WAAAze;AACF,MAAwB;AACtB,QAAM,CAAC0e,GAASC,CAAU,IAAI5e,EAAM,SAAS,EAAK,GAC5C,CAAC6e,GAASC,CAAU,IAAI9e,EAAM,SAAS,EAAK,GAE5C,CAAC+e,GAAYC,CAAa,IAAIhf,EAAM,SAAS,CAAC,GAC9C,CAACif,GAAYC,CAAa,IAAIlf,EAAM,SAAS,EAAK,GAClDmf,IAAYnf,EAAM,OAAO,CAAC,GAC1Bof,IAAWpf,EAAM,OAAuB,IAAI,GAE5Cqf,IAAmBZ,EAAW,SAAS,GACvCa,IAAiB,KAAK,IAAIZ,GAAaD,EAAW,SAAS,CAAC,GAC5D,CAACc,GAAiBC,CAAkB,IAAIxf,EAAM,SAASsf,CAAc;AAE3E,EAAAtf,EAAM,UAAU,MAAM;AACpB,IAAIsC,MACFkd,EAAmB,KAAK,IAAId,GAAaD,EAAW,SAAS,CAAC,CAAC,GAC/DO,EAAc,CAAC;AAAA,EAEnB,GAAG,CAAC1c,GAAMoc,GAAaD,EAAW,MAAM,CAAC,GAEzCze,EAAM,UAAU,MAAM;AACpB,QAAIsC,GAAM;AACR,MAAAsc,EAAW,EAAI;AACf,YAAMa,IAAM,sBAAsB,MAAMX,EAAW,EAAI,CAAC;AACxD,aAAO,MAAM,qBAAqBW,CAAG;AAAA,IACvC,OAAO;AACL,MAAAX,EAAW,EAAK;AAChB,YAAMhd,IAAI,WAAW,MAAM8c,EAAW,EAAK,GAAG,GAAG;AACjD,aAAO,MAAM,aAAa9c,CAAC;AAAA,IAC7B;AAAA,EACF,GAAG,CAACQ,CAAI,CAAC,GAETtC,EAAM,UAAU,MAAM;AACpB,UAAM0f,IAAY,CAACzb,MAAqB;AACtC,MAAIA,EAAE,QAAQ,YAAUsa,EAAA;AAAA,IAC1B;AACA,WAAIjc,KAAM,SAAS,iBAAiB,WAAWod,CAAS,GACjD,MAAM,SAAS,oBAAoB,WAAWA,CAAS;AAAA,EAChE,GAAG,CAACpd,GAAMic,CAAO,CAAC;AAGlB,QAAMoB,IAAoB3f,EAAM;AAAA,IAC9B,CAACiE,MAA0B;AACzB,MAAAA,EAAE,cAAc,kBAAkBA,EAAE,SAAS,GAC7Ckb,EAAU,UAAUlb,EAAE,SACtBib,EAAc,EAAI;AAAA,IACpB;AAAA,IACA,CAAA;AAAA,EAAC,GAGGU,IAAoB5f,EAAM;AAAA,IAC9B,CAACiE,MAA0B;AACzB,UAAI,CAACgb,EAAY;AACjB,YAAMY,IAAQ,KAAK,IAAI,GAAG5b,EAAE,UAAUkb,EAAU,OAAO;AACvD,MAAAH,EAAca,CAAK;AAAA,IACrB;AAAA,IACA,CAACZ,CAAU;AAAA,EAAA,GAGPa,IAAkB9f,EAAM,YAAY,MAAM;AAC9C,QAAKif;AAGL,UAFAC,EAAc,EAAK,GAEfH,IAAahB;AACf,QAAAiB,EAAc,CAAC,GACfT,EAAA;AAAA,eACSc,KAAoBN,IAAa,GAAG;AAC7C,cAAMgB,IAAK,OAAO,aACZ7B,IAAgBO,EAAW,IAAI,CAACuB,MAAOA,IAAKD,CAAE,GAE9CE,IADoB/B,EAAcqB,CAAe,IACXR,GACtCmB,IAAYlC,GAAkBiC,GAAiB/B,CAAa,GAC5DiC,IAAWjC,EAAc,QAAQgC,CAAS;AAChD,QAAIC,MAAa,MACfX,EAAmBW,CAAQ,GAE7BnB,EAAc,CAAC;AAAA,MACjB;AACE,QAAAA,EAAc,CAAC;AAAA,EAEnB,GAAG,CAACC,GAAYF,GAAYR,GAASc,GAAkBZ,GAAYc,CAAe,CAAC,GAE7Ea,IAAsBpgB,EAAM,YAAY,MAAM;AAClD,IAAAkf,EAAc,EAAK,GACnBF,EAAc,CAAC;AAAA,EACjB,GAAG,CAAA,CAAE;AAEL,MAAI,CAACL,EAAS,QAAO;AAErB,QAAM0B,IAAkChB,IACpC,EAAE,QAAQ,GAAGZ,EAAWc,CAAe,IAAI,GAAG,MAAM,WAAAf,EAAA,IACpD,EAAE,WAAAA,EAAA;AAEN,SAAO5I,GAAS;AAAA,IACd,gBAAA9S,EAAC,OAAA,EAAI,WAAU,qDAEb,UAAA;AAAA,MAAA,gBAAAzC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWd;AAAA,YACT;AAAA,YACAsf,IAAU,gBAAgB;AAAA,UAAA;AAAA,UAE5B,SAASN;AAAA,UACT,eAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAId,gBAAAzb;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKsc;AAAA,UACL,MAAK;AAAA,UACL,cAAW;AAAA,UACX,cAAYxc,KAAS;AAAA,UACrB,OAAO;AAAA,YACL,GAAGyd;AAAA,YACH,WAAWxB,IACP,cAAcE,CAAU,QACxB;AAAA,UAAA;AAAA,UAEN,WAAWxf;AAAA,YACT;AAAA,YACA0f,IACI,oBACA;AAAA,YACJhf;AAAA,UAAA;AAAA,UAIF,UAAA;AAAA,YAAA,gBAAAI;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,eAAesf;AAAA,gBACf,eAAeC;AAAA,gBACf,aAAaE;AAAA,gBACb,iBAAiBM;AAAA,gBACjB,cAAW;AAAA,gBACX,MAAK;AAAA,gBAEL,UAAA,gBAAA/f,EAAC,OAAA,EAAI,WAAU,qCAAA,CAAqC;AAAA,cAAA;AAAA,YAAA;AAAA,YAGrDuC,KACC,gBAAAvC,EAAC,OAAA,EAAI,WAAU,6CACb,4BAAC,MAAA,EAAG,WAAU,+EACX,UAAAuC,EAAA,CACH,EAAA,CACF;AAAA,YAGF,gBAAAvC,EAAC,OAAA,EAAI,WAAU,8BAA8B,UAAAqD,EAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACxD,GACF;AAAA,IACA,SAAS;AAAA,EAAA;AAEb;AAEA4a,GAAY,cAAc;AC7L1B,MAAMgC,KAAetgB,EAAM;AAAA,EACzB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MACxB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,MAAK;AAAA,MACL,wBAAqB;AAAA,MACrB,WAAWb,EAAG,mBAAmBU,CAAS;AAAA,MAC1C,OAAO,EAAE,iBAAiB,QAAA;AAAA,MACzB,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACAmgB,GAAa,cAAc;AAE3B,MAAMC,KAAWvgB,EAAM;AAAA,EACrB,CACE;AAAA,IACE,UAAAwgB;AAAA,IACA,kBAAAC,IAAmB;AAAA,IACnB,UAAAC,IAAW;AAAA,IACX,YAAAC,IAAa;AAAA,IACb,MAAAC;AAAA,IACA,UAAAld;AAAA,IACA,WAAAzD;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAMygB,IAAW7gB,EAAM,OAAuB,IAAI,GAC5C,CAACwR,GAASsP,CAAU,IAAI9gB,EAAM,SAAS,CAAC,GAGxCoB,IADQpB,EAAM,SAAS,QAAQ0D,CAAQ,EACzB,QAEdqd,IAAW/gB,EAAM;AAAA,MACrB,CAACyC,MAAkB;AACjB,YAAIyQ,IAAOzQ;AACX,QAAIme,IACF1N,KAASzQ,IAAQrB,IAASA,KAASA,IAEnC8R,IAAO,KAAK,IAAI,GAAG,KAAK,IAAIzQ,GAAOrB,IAAQ,CAAC,CAAC,GAE/C0f,EAAW5N,CAAI;AACf,cAAM8N,IAAQH,EAAS;AACvB,YAAI,CAACG,EAAO;AACZ,cAAMC,IAAQD,EAAM,SAAS9N,CAAI;AACjC,QAAI+N,KACFD,EAAM,SAAS,EAAE,MAAMC,EAAM,YAAY,UAAU,UAAU;AAAA,MAEjE;AAAA,MACA,CAAC7f,GAAOwf,CAAI;AAAA,IAAA;AAGd,IAAA5gB,EAAM,UAAU,MAAM;AACpB,UAAI,CAACwgB,KAAYpf,KAAS,EAAG;AAC7B,YAAM8f,IAAQ,YAAY,MAAMH,EAASvP,IAAU,CAAC,GAAGiP,CAAgB;AACvE,aAAO,MAAM,cAAcS,CAAK;AAAA,IAClC,GAAG,CAACV,GAAUC,GAAkBjP,GAASpQ,GAAO2f,CAAQ,CAAC;AAEzD,UAAM/L,IAAehV,EAAM,YAAY,MAAM;AAC3C,YAAMghB,IAAQH,EAAS;AACvB,UAAI,CAACG,EAAO;AACZ,YAAMve,IAAQ,KAAK,MAAMue,EAAM,aAAaA,EAAM,WAAW;AAC7D,MAAAF,EAAWre,CAAK;AAAA,IAClB,GAAG,CAAA,CAAE,GAECuD,IAAgBhG,EAAM;AAAA,MAC1B,CAACiE,MAA2B;AAC1B,QAAIA,EAAE,QAAQ,eACZA,EAAE,eAAA,GACF8c,EAASvP,IAAU,CAAC,KACXvN,EAAE,QAAQ,iBACnBA,EAAE,eAAA,GACF8c,EAASvP,IAAU,CAAC;AAAA,MAExB;AAAA,MACA,CAACA,GAASuP,CAAQ;AAAA,IAAA;AAGpB,WACE,gBAAAje;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,MAAK;AAAA,QACL,wBAAqB;AAAA,QACrB,cAAY,mBAAmBoR,IAAU,CAAC,OAAOpQ,CAAK;AAAA,QACtD,UAAU;AAAA,QACV,WAAW4E;AAAA,QACX,WAAWzG,EAAG,kFAAkFU,CAAS;AAAA,QACxG,GAAGE;AAAA,QAGJ,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKwgB;AAAA,cACL,UAAU7L;AAAA,cACV,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,gBAAgB;AAAA,gBAChB,gBAAgB;AAAA,gBAChB,iBAAiB;AAAA,cAAA;AAAA,cAGlB,YAAM,SAAS;AAAA,gBAAItR;AAAA,gBAAU,CAACud,GAAOvZ,MACpC1H,EAAM,eAAeihB,CAAK,IACtBjhB,EAAM,aAAaihB,GAA6B;AAAA,kBAC9C,cAAc,SAASvZ,IAAI,CAAC,OAAOtG,CAAK;AAAA,gBAAA,CACd,IAC5B6f;AAAA,cAAA;AAAA,YACN;AAAA,UAAA;AAAA,UAIDN,KAAcvf,IAAQ,KACrB,gBAAA0B,EAAA4S,GAAA,EACE,UAAA;AAAA,YAAA,gBAAArV;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM0gB,EAASvP,IAAU,CAAC;AAAA,gBACnC,UAAU,CAACoP,KAAQpP,MAAY;AAAA,gBAC/B,cAAW;AAAA,gBACX,WAAWjS;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBAAA;AAAA,gBAEH,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAAc;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM0gB,EAASvP,IAAU,CAAC;AAAA,gBACnC,UAAU,CAACoP,KAAQpP,MAAYpQ,IAAQ;AAAA,gBACvC,cAAW;AAAA,gBACX,WAAW7B;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBAAA;AAAA,gBAEH,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,GACF;AAAA,UAIDmhB,KAAYtf,IAAQ,KACnB,gBAAAf;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAW;AAAA,cACX,WAAU;AAAA,cAET,UAAA,MAAM,KAAK,EAAE,QAAQe,KAAS,CAACqG,GAAGC,MACjC,gBAAArH;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,SAAS,MAAM0gB,EAASrZ,CAAC;AAAA,kBACzB,cAAY,eAAeA,IAAI,CAAC;AAAA,kBAChC,iBAAeA,MAAM8J;AAAA,kBACrB,WAAWjS;AAAA,oBACT;AAAA,oBACA;AAAA,oBACAmI,MAAM8J,IACF,yBACA;AAAA,kBAAA;AAAA,gBACN;AAAA,gBAZK9J;AAAA,cAAA,CAcR;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACA6Y,GAAS,cAAc;ACnLvB,MAAMY,KAAe,CAAC,EAAE,WAAAC,IAAY,cAAc,WAAAnhB,GAAW,GAAGE,QAC9D,gBAAAE;AAAA,EAACghB;AAAAA,EAAA;AAAA,IACC,WAAW9hB;AAAA,MACT;AAAA,MACA;AAAA,MACA6hB,MAAc,eAAe,0BAA0B;AAAA,MACvDnhB;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,IAEJ,UAAA,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAWd;AAAA,UACT;AAAA,UACA6hB,MAAc,eAAe,aAAa;AAAA,QAAA;AAAA,QAE7C,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAED;AACF;AAGFD,GAAa,cAAc;ACZpB,MAAMG,KAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,KAAqB;AAAA,EAChC,iBAAiB;AAAA,EACjB,OAAO,EAAE,YAAY,6BAA6B,UAAU,GAAA;AAAA,EAC5D,MAAM,EAAE,MAAM,+BAAA;AAAA,EACd,MAAM,EAAE,QAAQ,qBAAA;AAClB;ACnBA,SAASC,GAAeC,GAAoB;AAC1C,SAAOA,EACJ,QAAQ,gBAAgB,aAAa,EACrC,QAAQ,eAAe,aAAa,EACpC,QAAQ,cAAc,aAAa,EACnC,QAAQ,WAAW,QAAQ,EAC3B,QAAQ,cAAc,6BAA6B,EACnD,QAAQ,kBAAkB,aAAa,EACvC,QAAQ,iBAAiB,wBAA0B,EACnD,QAAQ,sBAAsB,8BAA8B,EAC5D,QAAQ,kBAAkB,qBAAqB,EAC/C,QAAQ,cAAc,aAAa,EACnC,QAAQ,cAAc,WAAW,EACjC,QAAQ,cAAc,WAAW,EACjC,QAAQ,YAAY,iBAAiB,EACrC,QAAQ,uBAAuB,+DAA+D,EAC9F,QAAQ,UAAU,SAAS,EAC3B,QAAQ,0BAA0B,CAACC,MAC9BA,EAAK,WAAW,KAAW,KAC3BA,EAAK,WAAW,GAAG,IAAUA,IAC1B,MAAMA,CAAI,MAClB;AACL;AAGA,SAASC,GACPC,GACAC,GACAC,IAAgBD,GAChBhJ,IAAc,IACd;AACA,QAAM,EAAE,gBAAgBkJ,GAAO,cAAcC,GAAK,OAAApW,MAAUgW,GACtDtd,IAAWsH,EAAM,MAAMmW,GAAOC,CAAG,KAAKnJ,GACtCoJ,IAASrW,EAAM,MAAM,GAAGmW,CAAK,IAAIF,IAASvd,IAAWwd,IAAQlW,EAAM,MAAMoW,CAAG,GAC5EE,IAAYH,IAAQF,EAAO,SAASvd,EAAS;AACnD,SAAO,EAAE,QAAA2d,GAAQ,WAAAC,EAAA;AACnB;AAGA,SAASC,GACPP,GACAQ,GACA;AACA,QAAM,EAAE,gBAAgBL,GAAO,OAAAnW,EAAA,IAAUgW,GAEnCS,KADeN,IAAQ,KAAKnW,EAAMmW,IAAQ,CAAC,MAAM;AAAA,IACrB;AAAA,IAAO,MAAMK,IAAQ;AAAA,GACjDH,IAASrW,EAAM,MAAM,GAAGmW,CAAK,IAAIM,IAAYzW,EAAM,MAAMmW,CAAK,GAC9DG,IAAYH,IAAQM,EAAU;AACpC,SAAO,EAAE,QAAAJ,GAAQ,WAAAC,EAAA;AACnB;AASA,MAAMI,IAAa,CAAC,EAAE,OAAAzZ,GAAO,OAAAjG,GAAO,QAAAgD,GAAQ,SAAAL,QAC1C,gBAAAlF;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,OAAOuC,KAASiG;AAAA,IAChB,SAAAtD;AAAA,IACA,WAAWhG;AAAA,MACT;AAAA,MACA;AAAA,MACAqG,KAAU;AAAA,IAAA;AAAA,IAEZ,gBAAcA;AAAA,IAEb,UAAAiD;AAAA,EAAA;AACH,GAGI0Z,KAAa,MACjB,gBAAAliB,EAAC,SAAI,WAAU,sCAAqC,eAAY,QAAO,GAInEmiB,KAAiBxiB,EAAM;AAAA,EAC3B,CACE;AAAA,IACE,OAAO2T;AAAA,IACP,UAAApL;AAAA,IACA,aAAAsQ,IAAc;AAAA,IACd,WAAAvQ;AAAA,IACA,WAAAma,IAAY;AAAA,IACZ,MAAMC;AAAA,IACN,cAAAC;AAAA,IACA,UAAAlf;AAAA,IACA,WAAAxD;AAAA,IACA,IAAAkC;AAAA,EAAA,GAEF/B,MACG;AACH,UAAM,CAAC0S,GAAeC,CAAgB,IAAI/S,EAAM,SAAS2T,KAAmB,EAAE,GACxE,CAACiP,GAAcC,CAAe,IAAI7iB,EAAM;AAAA,MAC5C0iB,KAAkB;AAAA,IAAA,GAEdI,IAAc9iB,EAAM,OAA4B,IAAI,GAEpD4L,IAAQ+H,KAAmBb,GAC3BiQ,IAAOL,KAAkBE;AAE/B,IAAA5iB,EAAM,UAAU,MAAM;AACpB,MAAI2T,MAAoB,UAAWZ,EAAiBY,CAAe;AAAA,IACrE,GAAG,CAACA,CAAe,CAAC;AAEpB,UAAM1J,IAAe,CAAChG,MAA8C;AAClE,YAAMiP,IAAOjP,EAAE,OAAO;AACtB,MAAIqE,KAAa4K,EAAK,SAAS5K,MAC3BqL,MAAoB,UAAWZ,EAAiBG,CAAI,GACxD3K,KAAA,QAAAA,EAAW2K;AAAA,IACb,GAEM8P,IAAa,CAACpL,MAA8B;AAChD,MAAI8K,MAAmB,UAAWG,EAAgBjL,CAAC,GACnD+K,KAAA,QAAAA,EAAe/K;AAAA,IACjB,GAEMqL,IAAc,CAACpB,GAAgBC,IAAgBD,GAAQqB,IAAK,WAAW;AAC3E,YAAMC,IAAKL,EAAY;AACvB,UAAI,CAACK,KAAM1f,EAAU;AACrB,YAAM,EAAE,QAAAwe,GAAQ,WAAAC,MAAcP,GAAcwB,GAAItB,GAAQC,GAAOoB,CAAE,GAC3DhQ,IAAO5K,IAAY2Z,EAAO,MAAM,GAAG3Z,CAAS,IAAI2Z;AACtD,MAAItO,MAAoB,UAAWZ,EAAiBG,CAAI,GACxD3K,KAAA,QAAAA,EAAW2K,IACX,sBAAsB,MAAM;AAC1B,QAAAiQ,EAAG,MAAA,GACHA,EAAG,kBAAkBjB,GAAWA,CAAS;AAAA,MAC3C,CAAC;AAAA,IACH,GAEMkB,IAAa,CAAChB,MAAkB;AACpC,YAAMe,IAAKL,EAAY;AACvB,UAAI,CAACK,KAAM1f,EAAU;AACrB,YAAM,EAAE,QAAAwe,GAAQ,WAAAC,EAAA,IAAcC,GAAYgB,GAAIf,CAAK,GAC7ClP,IAAO5K,IAAY2Z,EAAO,MAAM,GAAG3Z,CAAS,IAAI2Z;AACtD,MAAItO,MAAoB,UAAWZ,EAAiBG,CAAI,GACxD3K,KAAA,QAAAA,EAAW2K,IACX,sBAAsB,MAAM;AAC1B,QAAAiQ,EAAG,MAAA,GACHA,EAAG,kBAAkBjB,GAAWA,CAAS;AAAA,MAC3C,CAAC;AAAA,IACH,GAEMmB,IAAYzX,EAAM;AAExB,WACE,gBAAA9I;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,IAAA+B;AAAA,QACA,WAAW5C;AAAA,UACT;AAAA,UACAkE,KAAY;AAAA,UACZxD;AAAA,QAAA;AAAA,QAIF,UAAA;AAAA,UAAA,gBAAA6C,EAAC,OAAA,EAAI,WAAU,8FAEb,UAAA;AAAA,YAAA,gBAAAzC,EAACiiB,GAAA,EAAW,OAAM,KAAI,OAAM,mBAAkB,SAAS,MAAMW,EAAY,MAAM,MAAM,MAAM,EAAA,CAAG;AAAA,YAC9F,gBAAA5iB,EAACiiB,GAAA,EAAW,OAAM,KAAI,OAAM,mBAAkB,SAAS,MAAMW,EAAY,KAAK,KAAK,QAAQ,EAAA,CAAG;AAAA,YAC9F,gBAAA5iB,EAACiiB,GAAA,EAAW,OAAM,KAAI,OAAM,wBAAuB,SAAS,MAAMW,EAAY,MAAM,MAAM,MAAM,EAAA,CAAG;AAAA,YACnG,gBAAA5iB,EAACiiB,GAAA,EAAW,OAAM,KAAI,OAAM,4BAA2B,SAAS,MAAMW,EAAY,MAAM,MAAM,MAAM,EAAA,CAAG;AAAA,8BAEtGV,IAAA,EAAW;AAAA,YAGZ,gBAAAliB,EAACiiB,GAAA,EAAW,OAAM,MAAK,OAAM,aAAY,SAAS,MAAMc,EAAW,aAAa,EAAA,CAAG;AAAA,YACnF,gBAAA/iB,EAACiiB,GAAA,EAAW,OAAM,MAAK,OAAM,aAAY,SAAS,MAAMc,EAAW,cAAc,EAAA,CAAG;AAAA,YACpF,gBAAA/iB,EAACiiB,GAAA,EAAW,OAAM,MAAK,OAAM,aAAY,SAAS,MAAMc,EAAW,eAAe,EAAA,CAAG;AAAA,8BAEpFb,IAAA,EAAW;AAAA,YAGZ,gBAAAliB,EAACiiB,GAAA,EAAW,OAAM,KAAI,OAAM,cAAa,SAAS,MAAMc,EAAW,SAAS,EAAA,CAAG;AAAA,YAC/E,gBAAA/iB,EAACiiB,GAAA,EAAW,OAAM,KAAI,OAAM,kBAAiB,SAAS,MAAMc,EAAW,QAAQ,EAAA,CAAG;AAAA,YAClF,gBAAA/iB,EAACiiB,GAAA,EAAW,OAAM,MAAK,OAAM,gBAAe,SAAS,MAAMc,EAAW,SAAS,EAAA,CAAG;AAAA,8BAEjFb,IAAA,EAAW;AAAA,YAGZ,gBAAAliB,EAACiiB,GAAA,EAAW,OAAM,OAAM,OAAM,QAAO,SAAS,MAAMW,EAAY,KAAK,eAAe,WAAW,EAAA,CAAG;AAAA,YAClG,gBAAA5iB,EAACiiB,GAAA,EAAW,OAAM,OAAM,OAAM,SAAQ,SAAS,MAAMW,EAAY,MAAM,eAAe,UAAU,EAAA,CAAG;AAAA,YACnG,gBAAA5iB,EAACiiB,GAAA,EAAW,OAAM,KAAI,OAAM,4BAA2B,SAAS,MAAMc,EAAW,KAAK,EAAA,CAAG;AAAA,YACzF,gBAAA/iB,EAACiiB,GAAA,EAAW,OAAM,KAAI,OAAM,eAAc,SAAS,MAAMW,EAAY,KAAK,KAAK,MAAM,EAAA,CAAG;AAAA,UAAA,GAC1F;AAAA,UAGCF,MAAS,aACR,gBAAA1iB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKyiB;AAAA,cACL,OAAAlX;AAAA,cACA,UAAU3B;AAAA,cACV,aAAA4O;AAAA,cACA,UAAApV;AAAA,cACA,YAAU;AAAA,cACV,WAAWlE;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,cAEF,OAAO,EAAE,WAAW,GAAGkjB,CAAS,KAAA;AAAA,cAChC,kBAAe;AAAA,cACf,cAAW;AAAA,YAAA;AAAA,UAAA;AAAA;AAAA,YAIb,gBAAApiB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWd;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBAAA;AAAA,gBAEF,OAAO,EAAE,WAAW,GAAGkjB,CAAS,KAAA;AAAA,gBAChC,yBAAyB;AAAA,kBACvB,QAAQ7W,IAAQ4V,GAAe5V,CAAK,IAAI,uCAAuCiN,CAAW;AAAA,gBAAA;AAAA,gBAE5F,cAAW;AAAA,gBACX,aAAU;AAAA,cAAA;AAAA,YAAA;AAAA;AAAA,UAKd,gBAAA/V,EAAC,OAAA,EAAI,WAAU,iIACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,QAAA,EACE,UAAA;AAAA,cAAAugB,EAAU,eAAA;AAAA,cACV/a,IAAY,MAAMA,EAAU,eAAA,CAAgB,KAAK;AAAA,cAAI;AAAA,cACtD,gBAAAjI,EAAC,QAAA,EAAK,WAAU,cAAa,UAAA,aAAA,CAAU;AAAA,YAAA,GACzC;AAAA,YAGA,gBAAAyC,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAzC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS,MAAM2iB,EAAW,UAAU;AAAA,kBACpC,WAAWzjB;AAAA,oBACT;AAAA,oBACAwjB,MAAS,aACL,yCACA;AAAA,kBAAA;AAAA,kBAEP,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGD,gBAAA1iB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAS,MAAM2iB,EAAW,SAAS;AAAA,kBACnC,WAAWzjB;AAAA,oBACT;AAAA,oBACAwjB,MAAS,YACL,yCACA;AAAA,kBAAA;AAAA,kBAEP,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAED,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACAP,GAAe,cAAc;ACnS7B,MAAMc,KAAetjB,EAAM;AAAA,EACzB,CAAC,EAAE,OAAA4C,GAAO,WAAA3C,GAAW,UAAAyD,GAAU,GAAGvD,KAASC,MACzC,gBAAA0C,EAAC,OAAA,EAAI,KAAA1C,GAAU,WAAWb,EAAG,aAAaU,CAAS,GAAI,GAAGE,GACxD,UAAA;AAAA,IAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,wFACX,UAAAuC,GACH;AAAA,IACA,gBAAAvC,EAAC,MAAA,EAAG,WAAU,aAAa,UAAAqD,EAAA,CAAS;AAAA,EAAA,EAAA,CACtC;AAEJ;AACA4f,GAAa,cAAc;AAS3B,MAAMC,KAAavjB,EAAM;AAAA,EACvB,CAAC,EAAE,UAAAsF,GAAU,WAAArF,GAAW,UAAAyD,GAAU,GAAGvD,KAASC,MAC5C,gBAAAC,EAAC,MAAA,EACC,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,QAAQkF,IAAW,WAAW;AAAA,MAC9B,KAAKA,IAAW,wBAAwB;AAAA,MACxC,WAAW/F;AAAA,QACT;AAAA,QACAU;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAEH,UAAAuD;AAAA,IAAA;AAAA,EAAA,EACH,CACF;AAEJ;AACA6f,GAAW,cAAc;AAWzB,MAAMC,KAASxjB,EAAM;AAAA,EACnB,CAAC,EAAE,OAAAyjB,GAAO,SAAAC,GAAS,WAAAC,GAAW,MAAAC,GAAM,WAAA3jB,GAAW,UAAAyD,GAAU,GAAGvD,KAASC,MACnE,gBAAA0C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACAU;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAGH,UAAA;AAAA,QAAAuD,KACC,gBAAArD,EAAC,SAAI,WAAU,gCACb,4BAAC,OAAA,EAAI,WAAU,0CACZ,UAAAqD,EAAA,CACH,EAAA,CACF;AAAA,SAIA+f,KAASE,KAAaC,MACtB,gBAAA9gB,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4FACZ,UAAA;AAAA,YAAA2gB,uBACE,OAAA,EACC,UAAA;AAAA,cAAA,gBAAApjB,EAAC,KAAA,EAAE,WAAU,6EACV,UAAAojB,GACH;AAAA,cACCC,KACC,gBAAArjB,EAAC,KAAA,EAAE,WAAU,sDACV,UAAAqjB,EAAA,CACH;AAAA,YAAA,GAEJ;AAAA,YAEDC,KACC,gBAAAtjB,EAAC,KAAA,EAAE,WAAU,sCAAsC,UAAAsjB,EAAA,CAAU;AAAA,UAAA,GAEjE;AAAA,UACCC,KACC,gBAAAvjB,EAAC,OAAA,EAAI,WAAU,+BACb,4BAAC,KAAA,EAAE,WAAU,6EACV,UAAAujB,EAAA,CACH,EAAA,CACF;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AACAJ,GAAO,cAAc;ACvGrB,MAAMK,KAAQ7jB,EAAM,WAGlB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC,EAAC,OAAA,EAAI,WAAU,mCACb,UAAA,gBAAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb,EAAG,iCAAiCU,CAAS;AAAA,IACvD,GAAGE;AAAA,EAAA;AACN,GACF,CACD;AACD0jB,GAAM,cAAc;AAIpB,MAAMC,KAAc9jB,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGE,KAASC,wBACzB,SAAA,EAAM,KAAAA,GAAU,WAAWb,EAAG,mBAAmBU,CAAS,GAAI,GAAGE,GAAO,CAC1E;AACD2jB,GAAY,cAAc;AAI1B,MAAMC,KAAY/jB,EAAM,WAGtB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb,EAAG,8BAA8BU,CAAS;AAAA,IACpD,GAAGE;AAAA,EAAA;AACN,CACD;AACD4jB,GAAU,cAAc;AAIxB,MAAMC,KAAchkB,EAAM,WAGxB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACD6jB,GAAY,cAAc;AAQ1B,MAAMC,KAAWjkB,EAAM;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,UAAAqE,GAAU,GAAGnE,EAAA,GAASC,MAClC,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,iBAAekE,KAAY;AAAA,MAC3B,WAAW/E;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA+E,KAAY;AAAA,QACZ;AAAA,QACArE;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACA8jB,GAAS,cAAc;AAavB,MAAMC,KAAYlkB,EAAM;AAAA,EACtB,CAAC,EAAE,WAAAC,GAAW,UAAAkkB,GAAU,eAAAC,GAAe,QAAAC,GAAQ,UAAA3gB,GAAU,GAAGvD,KAASC,MACnE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACA;AAAA,QACA4kB,KACE;AAAA,QACFlkB;AAAA,MAAA;AAAA,MAEF,SAASkkB,IAAWE,IAAS;AAAA,MAC7B,aACED,MAAkB,QACd,cACAA,MAAkB,SAChB,eACA;AAAA,MAEP,GAAGjkB;AAAA,MAEJ,UAAA,gBAAA2C,EAAC,QAAA,EAAK,WAAU,kCACb,UAAA;AAAA,QAAAY;AAAA,QACAygB,KACC,gBAAA9jB,EAAC,QAAA,EAAK,WAAU,2BAA0B,eAAY,QACnD,UAAA+jB,MAAkB,QACjB,gBAAA/jB,EAAC,QAAA,EAAK,WAAU,gBAAe,UAAA,IAAA,CAAO,IACpC+jB,MAAkB,SACpB,gBAAA/jB,EAAC,QAAA,EAAK,WAAU,gBAAe,UAAA,IAAA,CAAO,IAEtC,gBAAAA,EAAC,QAAA,EAAK,WAAU,4BAA2B,UAAA,KAAA,CAAc,EAAA,CAE7D;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;AACA6jB,GAAU,cAAc;AAIxB,MAAMI,KAAYtkB,EAAM,WAGtB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDmkB,GAAU,cAAc;AAIxB,MAAMC,KAAevkB,EAAM,WAGzB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACDokB,GAAa,cAAc;AAQ3B,MAAMC,KAAaxkB,EAAM;AAAA,EACvB,CAAC,EAAE,SAAAykB,GAAS,WAAAxkB,GAAW,UAAAyD,GAAU,GAAGvD,EAAA,GAASC,MAC3C,gBAAAC,EAAC,MAAA,EAAG,KAAAD,GAAW,GAAGD,GAChB,UAAA,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAAokB;AAAA,MACA,WAAWllB;AAAA,QACT;AAAA,QACAU;AAAA,MAAA;AAAA,MAGD,UAAAyD,KACC,gBAAAZ,EAAC,QAAA,EAAK,WAAU,oCACd,UAAA;AAAA,QAAA,gBAAAzC,EAAC,QAAA,EAAK,WAAU,qCAAoC,UAAA,KAAO;AAAA,QAC3D,gBAAAA,EAAC,UAAK,UAAA,oBAAA,CAAiB;AAAA,MAAA,EAAA,CACzB;AAAA,IAAA;AAAA,EAAA,EAEJ,CACF;AAEJ;AACAmkB,GAAW,cAAc;AC7LzB,MAAME,KAAO1kB,EAAM;AAAA,EACjB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MACxB,gBAAAC,EAAC,MAAA,EAAG,KAAAD,GAAU,WAAWb,EAAG,aAAaU,CAAS,GAAI,GAAGE,EAAA,CAAO;AAEpE;AACAukB,GAAK,cAAc;AAMnB,MAAMC,KAAW3kB,EAAM;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,UAAAyD,GAAU,GAAGvD,EAAA,GAASC,MAClC,gBAAA0C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACAU;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAY;AAAA,YACb,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGAqD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AACAihB,GAAS,cAAc;AAMvB,MAAMC,KAAe5kB,EAAM;AAAA,EACzB,CAAC,EAAE,WAAAC,GAAW,UAAAyD,GAAU,GAAGvD,EAAA,GAASC,MAAQ;AAC1C,UAAMqQ,IAAQzQ,EAAM,SAAS,IAAI0D,GAAU,CAACud,GAAOxe,MAC5CzC,EAAM,eAAeihB,CAAK,IACxBjhB,EAAM;AAAA,MACXihB;AAAA,MACA;AAAA,QACE,QAAQxe;AAAA,MAAA;AAAA,IACV,IALuCwe,CAO1C;AAED,WACE,gBAAA5gB,EAAC,MAAA,EAAG,KAAAD,GAAU,WAAWb,EAAG,aAAaU,CAAS,GAAI,GAAGE,GACtD,UAAAsQ,EAAA,CACH;AAAA,EAEJ;AACF;AACAmU,GAAa,cAAc;AAS3B,MAAMC,KAAmB7kB,EAAM;AAAA,EAC7B,CAAC,EAAE,WAAAC,GAAW,UAAAyD,GAAU,QAAAohB,IAAS,GAAG,GAAG3kB,EAAA,GAASC,MAC9C,gBAAA0C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAWb,EAAG,kCAAkCU,CAAS;AAAA,MACxD,GAAGE;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,sFACb,UAAA,OAAOykB,IAAS,CAAC,EAAE,SAAS,GAAG,GAAG,EAAA,CACrC;AAAA,QACA,gBAAAzkB,EAAC,QAAA,EAAK,WAAU,mBAAmB,UAAAqD,EAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGlD;AACAmhB,GAAiB,cAAc;AAM/B,MAAME,KAAkB/kB,EAAM,WAG5B,CAAC,EAAE,WAAAC,GAAW,GAAGE,KAASC,wBACzB,MAAA,EAAG,KAAAA,GAAU,WAAWb,EAAG,aAAaU,CAAS,GAAI,GAAGE,GAAO,CACjE;AACD4kB,GAAgB,cAAc;AAI9B,MAAMC,KAAkBhlB,EAAM,WAG5B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb;AAAA,MACT;AAAA,MACAU;AAAA,IAAA;AAAA,IAED,GAAGE;AAAA,EAAA;AACN,CACD;AACD6kB,GAAgB,cAAc;AAI9B,MAAMC,KAAoBjlB,EAAM,WAG9B,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWb,EAAG,2BAA2BU,CAAS;AAAA,IACjD,GAAGE;AAAA,EAAA;AACN,CACD;AACD8kB,GAAkB,cAAc;AAMhC,MAAMC,KAAWllB,EAAM;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MACxB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb,EAAG,0BAA0BU,CAAS;AAAA,MAChD,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACA+kB,GAAS,cAAc;AAQvB,MAAMC,KAAenlB,EAAM;AAAA,EACzB,CAAC,EAAE,WAAAC,GAAW,UAAAyD,GAAU,aAAAb,GAAa,GAAG1C,KAASC,MAC/C,gBAAAC,EAAC,MAAA,EACC,UAAA,gBAAAyC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAU;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAA2C,EAAC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAAzC,EAAC,UAAM,UAAAqD,GAAS;AAAA,UACfb,KACC,gBAAAxC,EAAC,KAAA,EAAE,WAAU,4CACV,UAAAwC,EAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QACA,gBAAAxC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAY;AAAA,YACb,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAAA;AAAA,EAAA,EACF,CACF;AAEJ;AACA8kB,GAAa,cAAc;ACzK3B,MAAMC,KAAOplB,EAAM;AAAA,EACjB,CACE,EAAE,OAAA4L,GAAO,OAAA/C,GAAO,OAAAwc,GAAO,YAAAC,GAAY,aAAAziB,GAAa,WAAA5C,GAAW,GAAGE,EAAA,GAC9DC,MACG;AACH,UAAMmlB,IACJF,MAAU,OACN,kBACAA,MAAU,SACR,qBACA,yBAEFG,IACJH,MAAU,OAAO,MAAWA,MAAU,SAAS,MAAW;AAE5D,WACE,gBAAAviB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb;AAAA,UACT;AAAA,UACAU;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAE,EAAC,KAAA,EAAE,WAAU,6FACV,UAAAwI,GACH;AAAA,UAEA,gBAAAxI,EAAC,KAAA,EAAE,WAAU,0JACV,UAAAuL,GACH;AAAA,UAEC0Z,KACC,gBAAAxiB,EAAC,KAAA,EAAE,WAAWvD,EAAG,gBAAgBgmB,CAAU,GACxC,UAAA;AAAA,YAAAC,KACC,gBAAA1iB,EAAC,QAAA,EAAK,eAAY,QAAQ,UAAA;AAAA,cAAA0iB;AAAA,cAAe;AAAA,YAAA,GAAC;AAAA,YAE5C,gBAAAnlB,EAAC,UAAM,UAAAilB,EAAA,CAAW;AAAA,UAAA,GACpB;AAAA,UAGDziB,KACC,gBAAAxC,EAAC,KAAA,EAAE,WAAU,0CACV,UAAAwC,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACAuiB,GAAK,cAAc;AAMnB,MAAMK,KAAWzlB,EAAM;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,GAAGE,EAAA,GAASC,MACxB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACA;AAAA,QACAU;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,IAAA;AAAA,EAAA;AAGV;AACAslB,GAAS,cAAc;AClEvB,MAAMC,KAAc1lB,EAAM;AAAA,EACxB,CAAC,EAAE,SAAAuG,GAAS,UAAAof,GAAU,WAAAvE,IAAY,QAAQ,cAAAwE,GAAc,WAAA3lB,EAAA,GAAaG,MAAQ;AAC3E,UAAMylB,IAAc,CAAC1jB,MAAe;AAClC,MAAKyjB,MACDzjB,MAAOwjB,IAELvE,MAAc,QAAOwE,EAAazjB,GAAI,MAAM,IACvCif,MAAc,SAAQwE,EAAazjB,GAAI,MAAM,IACjDyjB,EAAazjB,GAAI,KAAK,IAE3ByjB,EAAazjB,GAAI,KAAK;AAAA,IAE1B;AAEA,WACE,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb,EAAG,qCAAqCU,CAAS;AAAA,QAE5D,UAAA;AAAA,UAAA,gBAAAI,EAAC,QAAA,EAAK,WAAU,oFAAmF,UAAA,QAEnG;AAAA,UACCkG,EAAQ,IAAI,CAACsP,MAAQ;AACpB,kBAAMJ,IAAWI,EAAI,OAAO8P,KAAYvE,MAAc;AACtD,mBACE,gBAAAte;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,SAAS,MAAM+iB,EAAYhQ,EAAI,EAAE;AAAA,gBACjC,gBAAcJ;AAAA,gBACd,WAAWlW;AAAA,kBACT;AAAA,kBACAkW,IACI,4DACA;AAAA,gBAAA;AAAA,gBAGL,UAAA;AAAA,kBAAAI,EAAI;AAAA,kBACJJ,KACC,gBAAApV;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,eAAY;AAAA,sBAEX,UAAA+gB,MAAc,QAAQ,MAAW;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACpC;AAAA,cAAA;AAAA,cAlBGvL,EAAI;AAAA,YAAA;AAAA,UAsBf,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AACA6P,GAAY,cAAc;ACrD1B,MAAMI,KAAW,KAEXC,KAAgB/lB,EAAM;AAAA,EAC1B,CACE;AAAA,IACE,WAAAgmB;AAAA,IACA,WAAAnf,IAAY;AAAA,IACZ,iBAAAof,IAAkB;AAAA,IAClB,eAAAC,IAAgB;AAAA,IAChB,UAAAziB,IAAW;AAAA,IACX,WAAAxD;AAAA,IACA,UAAAyD;AAAA,EAAA,GAEFtD,MACG;AACH,UAAMuF,IAAe3F,EAAM,OAA8B,IAAI,GACvDmf,IAAYnf,EAAM,OAAsB,IAAI,GAC5CmmB,IAAuBnmB,EAAM,OAAO,EAAK,GAEzC,CAAComB,GAAOC,CAAQ,IAAIrmB,EAAM,SAAmB,MAAM,GACnD,CAACsmB,GAAUC,CAAW,IAAIvmB,EAAM,SAAS,CAAC,GAE1CwmB,IAAYxmB,EAAM;AAAA,MACtB,CAACymB,MAAgC;AAC/B,QAAA9gB,EAAa,UAAU8gB,GACnB,OAAOrmB,KAAQ,aACjBA,EAAIqmB,CAAI,IACCrmB,MACRA,EAAsD,UAAUqmB;AAAA,MAErE;AAAA,MACA,CAACrmB,CAAG;AAAA,IAAA,GAGAsmB,IAAa1mB,EAAM,YAAY,CAAC2mB,MAAqB;;AACzD,UAAI;AACF,SAAA5R,IAAA,UAAU,YAAV,QAAAA,EAAA,gBAAoB4R;AAAA,MACtB,QAAQ;AAAA,MAER;AAAA,IACF,GAAG,CAAA,CAAE,GAECC,IAAmB5mB,EAAM;AAAA,MAC7B,CAACiE,MAAwC;AACvC,YAAIR,KAAY2iB,MAAU,gBAAgBA,MAAU,WAAY;AAEhE,cAAMtgB,IAAYH,EAAa;AAC/B,QAAI,CAACG,KAAaA,EAAU,cAAc,MAE1CqZ,EAAU,UAAUlb,EAAE,QAAQ,CAAC,EAAE,SACjCkiB,EAAqB,UAAU;AAAA,MACjC;AAAA,MACA,CAAC1iB,GAAU2iB,CAAK;AAAA,IAAA,GAGZS,IAAkB7mB,EAAM;AAAA,MAC5B,CAACiE,MAAwC;AACvC,YACER,KACA0b,EAAU,YAAY,QACtBiH,MAAU,gBACVA,MAAU;AAEV;AAGF,cAAMU,IADW7iB,EAAE,QAAQ,CAAC,EAAE,UACNkb,EAAU;AAElC,YAAI2H,KAAQ,GAAG;AACb,UAAAP,EAAY,CAAC,GACbF,EAAS,MAAM;AACf;AAAA,QACF;AAEA,cAAMlT,IAAU,KAAK,IAAI2T,GAAMhB,EAAQ;AACvC,QAAAS,EAAYpT,CAAO,GAEfA,KAAWtM,KACRsf,EAAqB,YACxBO,EAAW,EAAE,GACbP,EAAqB,UAAU,KAEjCE,EAAS,WAAW,KAEpBA,EAAS,SAAS;AAAA,MAEtB;AAAA,MACA,CAAC5iB,GAAU2iB,GAAOvf,GAAW6f,CAAU;AAAA,IAAA,GAGnCK,IAAiB/mB,EAAM,YAAY,MAAM;AAC7C,MAAIyD,KAAY0b,EAAU,YAAY,SAEtCA,EAAU,UAAU,MAEhBiH,MAAU,eACZM,EAAW,EAAE,GACbL,EAAS,YAAY,GACrBE,EAAY1f,CAAS,GAErBmf,EAAA,EACG,KAAK,MAAM;AACV,QAAAK,EAAS,UAAU,GACnB,WAAW,MAAM;AACf,UAAAA,EAAS,MAAM,GACfE,EAAY,CAAC;AAAA,QACf,GAAG,GAAI;AAAA,MACT,CAAC,EACA,MAAM,MAAM;AACX,QAAAF,EAAS,MAAM,GACfE,EAAY,CAAC;AAAA,MACf,CAAC,MAEHF,EAAS,MAAM,GACfE,EAAY,CAAC;AAAA,IAEjB,GAAG,CAAC9iB,GAAU2iB,GAAOvf,GAAWmf,GAAWU,CAAU,CAAC,GAEhDM,IACJZ,MAAU,gBAAgBA,MAAU,aAChC,IACA,KAAK,IAAIE,IAAWzf,GAAW,CAAC,GAChCogB,IACJb,MAAU,gBAAgBA,MAAU,aAChC,IACAE,IAAWzf;AAEjB,WACE,gBAAA/D;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK0jB;AAAA,QACL,WAAWjnB,EAAG,4BAA4BU,CAAS;AAAA,QACnD,OAAO,EAAE,aAAa,QAAA;AAAA,QACtB,cAAc2mB;AAAA,QACd,aAAaC;AAAA,QACb,YAAYE;AAAA,QACZ,kBAAgBX;AAAA,QAGhB,UAAA;AAAA,UAAA,gBAAAtjB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,WAAW,cAAcmkB,CAAU;AAAA,gBACnC,SAASD;AAAA,gBACT,YACEZ,MAAU,SACN,2CACA;AAAA,cAAA;AAAA,cAER,WAAU;AAAA,cACV,eAAY;AAAA,cACZ,eAAY;AAAA,cAEX,UAAA;AAAA,gBAAAA,MAAU,eACT,gBAAA/lB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,eAAY;AAAA,oBACZ,MAAK;AAAA,oBACL,cAAW;AAAA,kBAAA;AAAA,gBAAA,IAEX+lB,MAAU,aACZ,gBAAA/lB,EAAC,QAAA,EAAK,WAAU,0BAAyB,eAAY,aAAY,UAAA,IAAA,CAEjE,IAEA,gBAAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO;AAAA,sBACL,WAAW,UAAU,KAAK,IAAKimB,IAAWzf,IAAa,IAAI,EAAE,CAAC;AAAA,oBAAA;AAAA,oBAEhE,eAAY;AAAA,kBAAA;AAAA,gBAAA;AAAA,iBAGduf,MAAU,gBAAgBA,MAAU,eACpC,gBAAA/lB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,eAAY;AAAA,oBAEX,UAAA+lB,MAAU,eAAeH,IAAkBC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC9C;AAAA,YAAA;AAAA,UAAA;AAAA,UAKHxiB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAqiB,GAAc,cAAc;ACpL5B,SAASmB,GAAYrlB,GAA6B;AAChD,UAAQA,EAAO,SAAA;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAOA,EAAO,WAAW;AAAA,IAC3B,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EAAA;AAEb;AAEA,SAASslB,GAAmBtlB,GAA6B;AACvD,UAAQA,EAAO,SAAA;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EAAA;AAEb;AAEA,MAAMulB,KAAgBpnB,EAAM;AAAA,EAC1B,CACE;AAAA,IACE,iBAAAqnB;AAAA,IACA,kBAAAC;AAAA,IACA,iBAAAC,IAAkB;AAAA,IAClB,kBAAAC,IAAmB;AAAA,IACnB,UAAA/jB,IAAW;AAAA,IACX,WAAAxD;AAAA,IACA,UAAAyD;AAAA,EAAA,GAEFtD,MACG;AACH,UAAM,CAACqnB,GAAYC,CAAa,IAAI1nB,EAAM,SAAS,CAAC,GAC9C,CAACif,GAAYC,CAAa,IAAIlf,EAAM,SAAS,EAAK,GAElD2nB,IAAY3nB,EAAM,OAAO,CAAC,GAC1B4nB,IAAkB5nB,EAAM,OAAO,CAAC,GAChC6nB,IAAgB7nB,EAAM,OAAO,EAAK,GAClC8nB,IAA0B9nB,EAAM,OAAO,EAAK,GAC5C+nB,IAAwB/nB,EAAM,OAAO,EAAK,GAE1C0mB,IAAa1mB,EAAM,YAAY,CAAC2mB,MAAqB;;AACzD,UAAI;AACF,SAAA5R,IAAA,UAAU,YAAV,QAAAA,EAAA,gBAAoB4R;AAAA,MACtB,QAAQ;AAAA,MAER;AAAA,IACF,GAAG,CAAA,CAAE,GAEChH,IAAoB3f,EAAM;AAAA,MAC9B,CAACiE,MAA0C;AACzC,QAAIR,MAEJQ,EAAE,cAAc,kBAAkBA,EAAE,SAAS,GAC7C0jB,EAAU,UAAU1jB,EAAE,SACtB2jB,EAAgB,UAAU,GAC1BC,EAAc,UAAU,IACxB3I,EAAc,EAAI,GAElB4I,EAAwB,UAAU,IAClCC,EAAsB,UAAU;AAAA,MAClC;AAAA,MACA,CAACtkB,CAAQ;AAAA,IAAA,GAGLmc,IAAoB5f,EAAM;AAAA,MAC9B,CAACiE,MAA0C;AACzC,YAAI,CAAC4jB,EAAc,WAAWpkB,EAAU;AAExC,YAAIukB,IAAS/jB,EAAE,UAAU0jB,EAAU;AAEnC,QAAIK,IAAS,KAAK,CAACX,MACjBW,IAAS,IAEPA,IAAS,KAAK,CAACV,MACjBU,IAAS;AAGX,cAAMC,IAAWT,IAAmB;AACpC,QAAAQ,IAAS,KAAK,IAAI,CAACC,GAAU,KAAK,IAAIA,GAAUD,CAAM,CAAC;AAEvD,cAAME,IAAW,KAAK,IAAIF,CAAM;AAEhC,QAAIE,KAAYX,KAAmB,CAACO,EAAwB,YAC1DA,EAAwB,UAAU,IAClCpB,EAAW,EAAE,IAGXwB,KAAYV,KAAoB,CAACO,EAAsB,YACzDA,EAAsB,UAAU,IAChCrB,EAAW,EAAE,IAGfkB,EAAgB,UAAUI,GAC1BN,EAAcM,CAAM;AAAA,MACtB;AAAA,MACA,CAACvkB,GAAU4jB,GAAiBC,GAAkBC,GAAiBC,GAAkBd,CAAU;AAAA,IAAA,GAGvF5G,IAAkB9f,EAAM,YAAY,MAAM;AAC9C,UAAI,CAAC6nB,EAAc,QAAS;AAE5B,MAAAA,EAAc,UAAU,IACxB3I,EAAc,EAAK;AAEnB,YAAMW,IAAQ+H,EAAgB;AAG9B,MAFiB,KAAK,IAAI/H,CAAK,KAEf2H,MACV3H,IAAQ,KAAKwH,IACfA,EAAgB,UAAA,IACPxH,IAAQ,KAAKyH,KACtBA,EAAiB,UAAA,IAIrBM,EAAgB,UAAU,GAC1BF,EAAc,CAAC;AAAA,IACjB,GAAG,CAACF,GAAkBH,GAAiBC,CAAgB,CAAC;AAExD,6BACG,OAAA,EAAI,KAAAlnB,GAAU,WAAWb,EAAG,4BAA4BU,CAAS,GAE/D,UAAA;AAAA,MAAAonB,KACC,gBAAAhnB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWd;AAAA,YACT;AAAA,YACA2nB,GAAYG,CAAe;AAAA,UAAA;AAAA,UAE7B,eAAY;AAAA,UAEZ,UAAA,gBAAAhnB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWd;AAAA,gBACT;AAAA,gBACA4nB,GAAmBE,CAAe;AAAA,cAAA;AAAA,cAGnC,UAAAA,EAAgB;AAAA,YAAA;AAAA,UAAA;AAAA,QACnB;AAAA,MAAA;AAAA,MAKHC,KACC,gBAAAjnB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWd;AAAA,YACT;AAAA,YACA2nB,GAAYI,CAAgB;AAAA,UAAA;AAAA,UAE9B,eAAY;AAAA,UAEZ,UAAA,gBAAAjnB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWd;AAAA,gBACT;AAAA,gBACA4nB,GAAmBG,CAAgB;AAAA,cAAA;AAAA,cAGpC,UAAAA,EAAiB;AAAA,YAAA;AAAA,UAAA;AAAA,QACpB;AAAA,MAAA;AAAA,MAKJ,gBAAAjnB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO,EAAE,WAAW,cAAconB,CAAU,MAAA;AAAA,UAC5C,WAAWloB;AAAA,YACT;AAAA,YACA0f,IAAa,oBAAoB;AAAA,UAAA;AAAA,UAEnC,eAAeU;AAAA,UACf,eAAeC;AAAA,UACf,aAAaE;AAAA,UACb,iBAAiBA;AAAA,UACjB,eAAY;AAAA,UAEX,UAAApc;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GACF;AAAA,EAEJ;AACF;AACA0jB,GAAc,cAAc;AC1M5B,MAAMe,KAAgBnoB,EAAM;AAAA,EAC1B,CAAC,EAAE,MAAAooB,GAAM,YAAAC,IAAa,KAAM,QAAAC,GAAQ,WAAAroB,GAAW,GAAGE,EAAA,GAASC,MAAQ;AACjE,UAAM,CAACmoB,GAAQC,CAAS,IAAIxoB,EAAM,SAAS,EAAK,GAC1CyoB,IAAWzoB,EAAM,OAAA;AAEvB,WAAAA,EAAM,UAAU,MAAM,MAAM,aAAayoB,EAAS,OAAO,GAAG,EAAE,GAe5D,gBAAApoB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,MAAK;AAAA,QACL,SAhBgB,YAAY;AAC9B,cAAI;AACF,kBAAM,UAAU,UAAU,UAAUgoB,CAAI,GACxCI,EAAU,EAAI,GACdF,KAAA,QAAAA,KACA,aAAaG,EAAS,OAAO,GAC7BA,EAAS,UAAU,WAAW,MAAMD,EAAU,EAAK,GAAGH,CAAU;AAAA,UAClE,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,QAOI,WAAW9oB;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACAU;AAAA,QAAA;AAAA,QAEF,cAAYsoB,IAAS,YAAY;AAAA,QAChC,GAAGpoB;AAAA,QAEH,cACC,gBAAA2C,EAAA4S,GAAA,EACE,UAAA;AAAA,UAAA,gBAAArV,EAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA,KAAC;AAAA,UAC7C,gBAAAA,EAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,UAAA,CAAO;AAAA,QAAA,EAAA,CACzC,IAEA,gBAAAyC,EAAA4S,GAAA,EACE,UAAA;AAAA,UAAA,gBAAArV,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,KAAC;AAAA,UAC/B,gBAAAA,EAAC,UAAK,UAAA,OAAA,CAAI;AAAA,QAAA,EAAA,CACZ;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACA8nB,GAAc,cAAc;ACjD5B,MAAMO,KAAY1oB,EAAM;AAAA,EACtB,CAAC,EAAE,WAAA6G,IAAY,KAAK,QAAA8hB,IAAS,IAAM,WAAA1oB,GAAW,GAAGE,EAAA,GAASC,MAAQ;AAChE,UAAM,CAACye,GAASC,CAAU,IAAI9e,EAAM,SAAS,EAAK;AAElD,IAAAA,EAAM,UAAU,MAAM;AACpB,YAAM4oB,IAAW,MAAM9J,EAAW,OAAO,UAAUjY,CAAS;AAC5D,aAAA+hB,EAAA,GACA,OAAO,iBAAiB,UAAUA,GAAU,EAAE,SAAS,IAAM,GACtD,MAAM,OAAO,oBAAoB,UAAUA,CAAQ;AAAA,IAC5D,GAAG,CAAC/hB,CAAS,CAAC;AAEd,UAAMgf,IAAc,MAClB,OAAO,SAAS,EAAE,KAAK,GAAG,UAAU8C,IAAS,WAAW,UAAA,CAAW;AAErE,WAAK9J,IAGH,gBAAAxe;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,MAAK;AAAA,QACL,SAASylB;AAAA,QACT,WAAWtmB;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACAU;AAAA,QAAA;AAAA,QAEF,cAAW;AAAA,QACV,GAAGE;AAAA,QACL,UAAA;AAAA,MAAA;AAAA,IAAA,IAjBkB;AAAA,EAqBvB;AACF;AACAuoB,GAAU,cAAc;ACrCxB,MAAMG,KAAiB7oB,EAAM;AAAA,EAC3B,CAAC,EAAE,OAAA8oB,GAAO,QAAAta,IAAS,GAAG,WAAAvO,GAAW,OAAA8oB,GAAO,GAAG5oB,EAAA,GAASC,MAAQ;AAC1D,UAAM,CAACwb,GAAUoN,CAAW,IAAIhpB,EAAM,SAAS,CAAC;AAEhD,WAAAA,EAAM,UAAU,MAAM;AACpB,YAAM4oB,IAAW,MAAM;AACrB,cAAMK,IAAW,OAAO,SAClBxX,IACJ,SAAS,gBAAgB,eAAe,OAAO;AACjD,QAAAuX,EAAYvX,IAAQ,IAAKwX,IAAWxX,IAAS,MAAM,CAAC;AAAA,MACtD;AACA,oBAAO,iBAAiB,UAAUmX,GAAU,EAAE,SAAS,IAAM,GACtD,MAAM,OAAO,oBAAoB,UAAUA,CAAQ;AAAA,IAC5D,GAAG,CAAA,CAAE,GAGH,gBAAAvoB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,WAAWb,EAAG,mDAAmDU,CAAS;AAAA,QAC1E,OAAO,EAAE,QAAAuO,GAAQ,GAAGua,EAAA;AAAA,QACpB,MAAK;AAAA,QACL,iBAAe,KAAK,MAAMnN,CAAQ;AAAA,QAClC,iBAAe;AAAA,QACf,iBAAe;AAAA,QACd,GAAGzb;AAAA,QAEJ,UAAA,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO,GAAGub,CAAQ;AAAA,cAClB,iBAAiBkN,KAAS;AAAA,YAAA;AAAA,UAC5B;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAGN;AACF;AACAD,GAAe,cAAc;ACnC7B,MAAMK,KAAgBlpB,EAAM;AAAA,EAC1B,CACE;AAAA,IACE,SAAAmpB;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,gBAAAC,IAAiB;AAAA,IACjB,WAAAtpB;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MAEA,gBAAA0C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAWb;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACAU;AAAA,MAAA;AAAA,MAEF,MAAK;AAAA,MACL,cAAW;AAAA,MACV,GAAGE;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAE,EAAC,KAAA,EAAE,WAAU,wCACV,UAAA8oB,KACC,+GACJ;AAAA,QACA,gBAAArmB,EAAC,OAAA,EAAI,WAAU,uBACZ,UAAA;AAAA,UAAAumB,KACC,gBAAAhpB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAASgpB;AAAA,cACT,WAAU;AAAA,cAET,UAAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAGL,gBAAAlpB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS+oB;AAAA,cACT,WAAU;AAAA,cAET,UAAAE;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AACAJ,GAAc,cAAc;AClCrB,SAASM,KAAoB;AAClC,QAAM,CAAClnB,GAAMiX,CAAO,IAAIvZ,EAAM,SAAS,EAAK;AAE5C,SAAAA,EAAM,UAAU,MAAM;AACpB,UAAMsG,IAAU,CAACrC,MAAqB;AACpC,OAAKA,EAAE,WAAWA,EAAE,YAAYA,EAAE,QAAQ,QACxCA,EAAE,eAAA,GACFsV,EAAQ,CAAC+D,MAAS,CAACA,CAAI;AAAA,IAE3B;AACA,oBAAS,iBAAiB,WAAWhX,CAAO,GACrC,MAAM,SAAS,oBAAoB,WAAWA,CAAO;AAAA,EAC9D,GAAG,CAAA,CAAE,GAEE;AAAA,IACL,MAAAhE;AAAA,IACA,QAAQ,MAAMiX,EAAQ,CAACkQ,MAAM,CAACA,CAAC;AAAA,IAC/B,OAAO,MAAMlQ,EAAQ,EAAK;AAAA,EAAA;AAE9B;AAIA,SAASmQ,GAAaC,GAAwBC,GAA+B;AAC3E,MAAI,CAACA,EAAM,KAAA,EAAQ,QAAOD;AAC1B,QAAME,IAAID,EAAM,YAAA;AAChB,SAAOD,EACJ,IAAI,CAACG,OAAO;AAAA,IACX,GAAGA;AAAA,IACH,OAAOA,EAAE,MAAM,OAAO,CAACpiB,MAAMA,EAAE,MAAM,cAAc,SAASmiB,CAAC,CAAC;AAAA,EAAA,EAC9D,EACD,OAAO,CAACC,MAAMA,EAAE,MAAM,SAAS,CAAC;AACrC;AAIA,MAAMC,KAAiB,CAAC;AAAA,EACtB,MAAAznB;AAAA,EACA,cAAA0nB;AAAA,EACA,QAAAL;AAAA,EACA,UAAAM;AAAA,EACA,aAAApR,IAAc;AAChB,MAA2B;AACzB,QAAM,CAAC+Q,GAAOM,CAAQ,IAAIlqB,EAAM,SAAS,EAAE,GACrC,CAACmqB,GAAWC,CAAY,IAAIpqB,EAAM,SAAS,CAAC,GAC5Cwc,IAAWxc,EAAM,OAAyB,IAAI,GAE9CqqB,IAAWX,GAAaC,GAAQC,CAAK,GACrCU,IAAWD,EAAS,QAAQ,CAAC,MAAM,EAAE,KAAK;AAEhD,EAAArqB,EAAM,UAAU,MAAM;AACpB,QAAIsC,GAAM;AACR,MAAA4nB,EAAS,EAAE,GACXE,EAAa,CAAC;AACd,YAAMtoB,IAAI,WAAW,MAAA;;AAAM,gBAAAiT,IAAAyH,EAAS,YAAT,gBAAAzH,EAAkB;AAAA,SAAS,EAAE;AACxD,aAAO,MAAM,aAAajT,CAAC;AAAA,IAC7B;AAAA,EACF,GAAG,CAACQ,CAAI,CAAC;AAET,QAAM0D,IAAgB,CAAC/B,MAA2B;;AAChD,QAAIA,EAAE,QAAQ;AACZ,MAAAA,EAAE,eAAA,GACFmmB,EAAa,CAAC1iB,MAAM,KAAK,IAAIA,IAAI,GAAG4iB,EAAS,SAAS,CAAC,CAAC;AAAA,aAC/CrmB,EAAE,QAAQ;AACnB,MAAAA,EAAE,eAAA,GACFmmB,EAAa,CAAC1iB,MAAM,KAAK,IAAIA,IAAI,GAAG,CAAC,CAAC;AAAA,aAC7BzD,EAAE,QAAQ,SAAS;AAC5B,MAAAA,EAAE,eAAA;AACF,YAAMyM,IAAO4Z,EAASH,CAAS;AAC/B,MAAIzZ,OACFqE,IAAArE,EAAK,aAAL,QAAAqE,EAAA,KAAArE,IACAuZ,KAAA,QAAAA,EAAWvZ,IACXsZ,EAAa,EAAK;AAAA,IAEtB,MAAA,CAAW/lB,EAAE,QAAQ,YACnB+lB,EAAa,EAAK;AAAA,EAEtB;AAEA,MAAI,CAAC1nB,EAAM,QAAO;AAElB,MAAIioB,IAAc;AAElB,SACE,gBAAAznB,EAAC,OAAA,EAAI,WAAU,mEAEb,UAAA;AAAA,IAAA,gBAAAzC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS,MAAM2pB,EAAa,EAAK;AAAA,QACjC,eAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAGd,gBAAAlnB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAW;AAAA,QACX,cAAW;AAAA,QACX,WAAU;AAAA,QACV,WAAWkD;AAAA,QAGX,UAAA;AAAA,UAAA,gBAAAlD,EAAC,OAAA,EAAI,WAAU,4DACb,UAAA;AAAA,YAAA,gBAAAzC,EAAC,QAAA,EAAK,WAAU,qCAAoC,eAAY,QAAO,UAAA,KAEvE;AAAA,YACA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKmc;AAAA,gBACL,WAAU;AAAA,gBACV,aAAA3D;AAAA,gBACA,OAAO+Q;AAAA,gBACP,UAAU,CAAC3lB,MAAM;AACf,kBAAAimB,EAASjmB,EAAE,OAAO,KAAK,GACvBmmB,EAAa,CAAC;AAAA,gBAChB;AAAA,gBACA,cAAW;AAAA,gBACX,qBAAkB;AAAA,cAAA;AAAA,YAAA;AAAA,YAEpB,gBAAA/pB,EAAC,OAAA,EAAI,WAAU,+FAA8F,UAAA,MAAA,CAE7G;AAAA,UAAA,GACF;AAAA,UAGA,gBAAAA,EAAC,SAAI,WAAU,sCAAqC,MAAK,WACtD,UAAAgqB,EAAS,WAAW,IACnB,gBAAAhqB,EAAC,OAAE,WAAU,uDAAsD,+BAEnE,IAEAgqB,EAAS,IAAI,CAACG,wBACX,OAAA,EACC,UAAA;AAAA,YAAA,gBAAAnqB,EAAC,KAAA,EAAE,WAAU,wFACV,UAAAmqB,EAAM,OACT;AAAA,YACCA,EAAM,MAAM,IAAI,CAAC9Z,MAAS;AACzB,oBAAM+Z,IAAMF,KACN9U,IAAWgV,MAAQN;AACzB,qBACE,gBAAArnB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,iBAAe2S;AAAA,kBACf,WAAWlW;AAAA,oBACT;AAAA,oBACAkW,IACI,mCACA;AAAA,kBAAA;AAAA,kBAEN,SAAS,MAAM;;AACb,qBAAAV,IAAArE,EAAK,aAAL,QAAAqE,EAAA,KAAArE,IACAuZ,KAAA,QAAAA,EAAWvZ,IACXsZ,EAAa,EAAK;AAAA,kBACpB;AAAA,kBACA,cAAc,MAAMI,EAAaK,CAAG;AAAA,kBAEpC,UAAA;AAAA,oBAAA,gBAAApqB,EAAC,QAAA,EAAK,WAAU,2BAA0B,eAAY,QACnD,UAAAqQ,EAAK,SAAS,MAAM,IAAA,CACvB;AAAA,oBACCA,EAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAnBDA,EAAK;AAAA,cAAA;AAAA,YAsBhB,CAAC;AAAA,UAAA,KA/BO8Z,EAAM,KAgChB,CACD,EAAA,CAEL;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AACAT,GAAe,cAAc;ACxK7B,MAAMW,KAAW,CAAC;AAAA,EAChB,SAAAC;AAAA,EACA,QAAAhB;AAAA,EACA,OAAAlZ;AAAA,EACA,OAAAvD,IAAQ;AAAA,EACR,YAAAhN,IAAa;AACf,MAAqB;AACnB,QAAM0qB,IACJjB,MAAWlZ,IAAQ,CAAC,EAAE,OAAAA,EAAA,CAAO,IAAI;AAEnC,SACE,gBAAA3N,EAACgK,EAAiB,MAAjB,EACC,UAAA;AAAA,IAAA,gBAAAzM,EAACyM,EAAiB,SAAjB,EAAyB,SAAO,IAC9B,UAAA9M,EAAM,eAAe2qB,CAAO,IAC3BA,IAEA,gBAAAtqB,EAAC,UAAA,EAAO,MAAK,UAAU,aAA2B,GAEtD;AAAA,IACA,gBAAAA,EAACyM,EAAiB,QAAjB,EACC,UAAA,gBAAAzM;AAAA,MAACyM,EAAiB;AAAA,MAAjB;AAAA,QACC,OAAAI;AAAA,QACA,YAAAhN;AAAA,QACA,WAAWX;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAGD,UAAAqrB,EAAiB,IAAI,CAACJ,GAAOK,MAC5B,gBAAA/nB,EAAC9C,EAAM,UAAN,EACE,UAAA;AAAA,UAAA6qB,IAAK,KAAK,gBAAAxqB,EAAC,OAAA,EAAI,WAAU,+BAA8B;AAAA,UACvDmqB,EAAM,SACL,gBAAAnqB,EAAC,OAAE,WAAU,wFACV,YAAM,OACT;AAAA,UAEDmqB,EAAM,MAAM,IAAI,CAAC9Z,GAAMoa,MACtB,gBAAAzqB,EAACyM,EAAiB,OAAjB,EAAuB,SAAO,IAC7B,UAAA,gBAAAzM;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,UAAUqQ,EAAK;AAAA,cACf,SAASA,EAAK;AAAA,cACd,WAAWnR;AAAA,gBACT;AAAA,gBACAmR,EAAK,YAAY,WACb,mEACA;AAAA,gBACJA,EAAK,YAAY;AAAA,cAAA;AAAA,cAGlB,UAAAA,EAAK;AAAA,YAAA;AAAA,UAAA,EACR,GAdmCoa,CAerC,CACD;AAAA,QAAA,EAAA,GAxBkBD,CAyBrB,CACD;AAAA,MAAA;AAAA,IAAA,EACH,CACF;AAAA,EAAA,GACF;AAEJ;AACAH,GAAS,cAAc;AChEvB,MAAMK,KAAc,CAAC;AAAA,EACnB,UAAArnB;AAAA,EACA,QAAAimB;AAAA,EACA,OAAAlZ;AAAA,EACA,WAAAxQ;AACF,MAAwB;AACtB,QAAM,CAAC+qB,GAAKC,CAAM,IAAIjrB,EAAM,SAA0C,IAAI,GACpEkrB,IAAUlrB,EAAM,OAAuB,IAAI,GAE3C4qB,IACJjB,MAAWlZ,IAAQ,CAAC,EAAE,OAAAA,EAAA,CAAO,IAAI;AAEnC,SAAAzQ,EAAM,UAAU,MAAM;AACpB,QAAI,CAACgrB,EAAK;AAEV,UAAMG,IAAc,CAAClnB,MAAkB;;AACrC,OAAK8Q,IAAAmW,EAAQ,YAAR,QAAAnW,EAAiB,SAAS9Q,EAAE,aAAwB,IAAI;AAAA,IAC/D,GACMmnB,IAAY,CAACnnB,MAAqB;AACtC,MAAIA,EAAE,QAAQ,YAAUgnB,EAAO,IAAI;AAAA,IACrC;AAEA,oBAAS,iBAAiB,aAAaE,CAAW,GAClD,SAAS,iBAAiB,WAAWC,CAAS,GACvC,MAAM;AACX,eAAS,oBAAoB,aAAaD,CAAW,GACrD,SAAS,oBAAoB,WAAWC,CAAS;AAAA,IACnD;AAAA,EACF,GAAG,CAACJ,CAAG,CAAC,GAeN,gBAAAloB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAdsB,CAACmB,MAAwB;AACjD,QAAAA,EAAE,eAAA;AACF,cAAMonB,IAAQ,KACRC,IAAQV,EAAiB;AAAA,UAC7B,CAACW,GAAKzB,MAAMyB,IAAMzB,EAAE,MAAM,SAAS,MAAMA,EAAE,QAAQ,KAAK,KAAK;AAAA,UAC7D;AAAA,QAAA,GAEI0B,IAAI,KAAK,IAAIvnB,EAAE,SAAS,OAAO,aAAaonB,IAAQ,CAAC,GACrD/V,IAAI,KAAK,IAAIrR,EAAE,SAAS,OAAO,cAAcqnB,IAAQ,CAAC;AAC5D,QAAAL,EAAO,EAAE,GAAAO,GAAG,GAAAlW,GAAG;AAAA,MACjB;AAAA,MAKI,WAAW/V,EAAG,eAAeU,CAAS;AAAA,MAErC,UAAA;AAAA,QAAAyD;AAAA,QACAsnB,KACCpV,GAAS;AAAA,UACP,gBAAAvV;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK6qB;AAAA,cACL,MAAK;AAAA,cACL,WAAU;AAAA,cACV,OAAO,EAAE,MAAMF,EAAI,GAAG,KAAKA,EAAI,EAAA;AAAA,cAE9B,UAAAJ,EAAiB,IAAI,CAACJ,GAAOK,MAC5B,gBAAA/nB,EAAC9C,EAAM,UAAN,EACE,UAAA;AAAA,gBAAA6qB,IAAK,KAAK,gBAAAxqB,EAAC,OAAA,EAAI,WAAU,+BAA8B;AAAA,gBACvDmqB,EAAM,SACL,gBAAAnqB,EAAC,OAAE,WAAU,wFACV,YAAM,OACT;AAAA,gBAEDmqB,EAAM,MAAM,IAAI,CAAC9Z,GAAMoa,MACtB,gBAAAhoB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,UAAU4N,EAAK;AAAA,oBACf,SAAS,MAAM;;AACb,uBAAAqE,IAAArE,EAAK,YAAL,QAAAqE,EAAA,KAAArE,IACAua,EAAO,IAAI;AAAA,oBACb;AAAA,oBACA,WAAW1rB;AAAA,sBACT;AAAA,sBACAmR,EAAK,YAAY,WACb,mEACA;AAAA,sBACJA,EAAK,YAAY;AAAA,oBAAA;AAAA,oBAGnB,UAAA;AAAA,sBAAA,gBAAArQ,EAAC,QAAA,EAAM,YAAK,MAAA,CAAM;AAAA,sBACjBqQ,EAAK,YACJ,gBAAArQ,EAAC,UAAK,WAAU,mDACb,YAAK,SAAA,CACR;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBApBGyqB;AAAA,gBAAA,CAuBR;AAAA,cAAA,EAAA,GAhCkBD,CAiCrB,CACD;AAAA,YAAA;AAAA,UAAA;AAAA,UAEH,SAAS;AAAA,QAAA;AAAA,MACX;AAAA,IAAA;AAAA,EAAA;AAGR;AACAE,GAAY,cAAc;ACnH1B,MAAMU,KAAezrB,EAAM;AAAA,EACzB,CACE;AAAA,IACE,UAAA0D;AAAA,IACA,OAAAd;AAAA,IACA,aAAA8oB,IAAc;AAAA,IACd,WAAAC,IAAY;AAAA,IACZ,iBAAAC,IAAkB;AAAA,IAClB,WAAA3rB;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAM,CAACyrB,GAAUC,CAAW,IAAI9rB,EAAM,SAAS4rB,CAAe;AAE9D,WACE,gBAAA9oB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,iBAAeyrB;AAAA,QACf,WAAWtsB,EAAG,uCAAuCU,CAAS;AAAA,QAC9D,OAAO;AAAA,UACL,aAAa;AAAA,UACb,YAAY;AAAA,QAAA;AAAA,QAEb,GAAGE;AAAA,QAGJ,UAAA;AAAA,UAAA,gBAAA2C,EAAC,OAAA,EAAI,WAAU,0GACb,UAAA;AAAA,YAAA,gBAAAzC,EAAC,UAAK,UAAA,IAAA,CAAC;AAAA,8BACN,QAAA,EAAK,UAAA;AAAA,cAAA;AAAA,cAAQuC,IAAQ,MAAMA,CAAK,KAAK;AAAA,YAAA,EAAA,CAAG;AAAA,UAAA,GAC3C;AAAA,UAGA,gBAAAvC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWd;AAAA,gBACT;AAAA,gBACAssB,IAAW,KAAK;AAAA,cAAA;AAAA,cAElB,OAAO,EAAE,QAAQA,IAAW,cAAc,YAAA;AAAA,cAEzC,UAAAnoB;AAAA,YAAA;AAAA,UAAA;AAAA,UAIF,CAACmoB,KACA,gBAAAxrB,EAAC,OAAA,EAAI,WAAU,wGACb,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAMyrB,EAAY,EAAI;AAAA,cAC/B,WAAU;AAAA,cAET,UAAAJ;AAAA,YAAA;AAAA,UAAA,GAEL;AAAA,UAIDG,KACC,gBAAAxrB,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAMyrB,EAAY,EAAK;AAAA,cAChC,WAAU;AAAA,cAET,UAAAH;AAAA,YAAA;AAAA,UAAA,EACH,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACAF,GAAa,cAAc;AAO3B,MAAMM,KAAgB/rB,EAAM;AAAA,EAC1B,CAAC,EAAE,UAAA0D,GAAU,WAAAzD,GAAW,GAAGE,EAAA,GAASC,MAAQ;AAC1C,UAAM,CAACyrB,GAAUC,CAAW,IAAI9rB,EAAM,SAAS,EAAK;AAEpD,WACE,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,MAAK;AAAA,QACL,UAAU;AAAA,QACV,iBAAeyrB,IAAW,SAAS;AAAA,QACnC,SAAS,MAAMC,EAAY,EAAI;AAAA,QAC/B,WAAW,CAAC7nB,MAAM;AAChB,WAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,UAAiB,EAAI;AAAA,QAC1D;AAAA,QACA,WAAW1E,EAAG,WAAWU,CAAS;AAAA,QAClC,cACE4rB,IAAW,SAAY;AAAA,QAExB,GAAG1rB;AAAA,QAEH,UAAAuD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AACAqoB,GAAc,cAAc;AC1G5B,MAAMC,KAAgBhsB,EAAM;AAAA,EAC1B,CAAC,EAAE,YAAA4T,IAAa,YAAY,WAAA3T,GAAW,GAAGE,EAAA,GAASC,MAAQ;AACzD,UAAM,CAAC6rB,GAASC,CAAU,IAAIlsB,EAAM,SAAS,EAAK,GAC5C,CAACmsB,GAAaC,CAAc,IAAIpsB,EAAM,SAAS,EAAK,GACpDyoB,IAAWzoB,EAAM,OAAA;AAEvB,WAAAA,EAAM,UAAU,MAAM;AACpB,YAAMqsB,IAAQ,aAAa,QAAQzY,CAAU;AAC7C,MAAIyY,MAAU,WACZH,EAAW,EAAI,GACf,SAAS,gBAAgB,UAAU,IAAI,OAAO,KACrCG,MAAU,UACnBH,EAAW,EAAK,GAChB,SAAS,gBAAgB,UAAU,OAAO,OAAO,KAEjDA,EAAW,SAAS,gBAAgB,UAAU,SAAS,OAAO,CAAC;AAAA,IAEnE,GAAG,CAACtY,CAAU,CAAC,GAEf5T,EAAM,UAAU,MAAM,MAAM,aAAayoB,EAAS,OAAO,GAAG,EAAE,GAE9DzoB,EAAM,UAAU,MAAM;AACpB,YAAMssB,IAAiB,CAACroB,MAAa;AACnC,cAAMsoB,IAAYtoB,EAAqC,OAAO;AAC9D,QAAAioB,EAAW,CAAC5O,MAAS;AACnB,gBAAMpK,IAAOqZ,MAAa;AAC1B,iBAAOjP,MAASpK,IAAOA,IAAOoK;AAAA,QAChC,CAAC;AAAA,MACH;AACA,oBAAO,iBAAiB,mBAAmBgP,CAAc,GAClD,MAAM,OAAO,oBAAoB,mBAAmBA,CAAc;AAAA,IAC3E,GAAG,CAAA,CAAE,GAoBH,gBAAAjsB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,MAAK;AAAA,QACL,SArBW,MAAM;AACnB,UAAAgsB,EAAe,EAAI,GACnB3D,EAAS,UAAU,WAAW,MAAM2D,EAAe,EAAK,GAAG,GAAG;AAC9D,gBAAMlZ,IAAO,CAAC+Y;AACd,UAAAC,EAAWhZ,CAAI,GACXA,KACF,SAAS,gBAAgB,UAAU,IAAI,OAAO,GAC9C,aAAa,QAAQU,GAAY,OAAO,MAExC,SAAS,gBAAgB,UAAU,OAAO,OAAO,GACjD,aAAa,QAAQA,GAAY,MAAM,IAEzC,OAAO;AAAA,YACL,IAAI,YAAY,mBAAmB,EAAE,QAAQ,EAAE,OAAOV,IAAO,UAAU,SAAO,CAAG;AAAA,UAAA;AAAA,QAErF;AAAA,QAOI,cAAY+Y,IAAU,wBAAwB;AAAA,QAC9C,WAAW1sB;AAAA,UACT;AAAA,UACAU;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAEJ,UAAA,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWd;AAAA,cACT;AAAA,cACA4sB,IACI,sCACA;AAAA,YAAA;AAAA,YAEN,OAAO,EAAE,0BAA0B,mCAAA;AAAA,YAElC,UAAAF,sBACEO,IAAA,EAAK,WAAU,WAAU,IAE1B,gBAAAnsB,EAACosB,IAAA,EAAI,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAE7B;AAAA,IAAA;AAAA,EAGN;AACF;AACAT,GAAc,cAAc;ACjF5B,MAAMU,KASF;AAAA,EACF,KAAK;AAAA,IACH,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,iBAAiB;AAAA,EAAA;AAAA,EAEnB,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,iBAAiB;AAAA,EAAA;AAAA,EAEnB,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,iBAAiB;AAAA,EAAA;AAErB,GAgBMC,KAAa3sB,EAAM;AAAA,EACvB,CACE;AAAA,IACE,UAAA0D;AAAA,IACA,WAAAzD;AAAA,IACA,WAAA2sB,IAAY;AAAA,IACZ,YAAAC,IAAa;AAAA,IACb,oBAAAC;AAAA,IACA,GAAG3sB;AAAA,EAAA,GAELC,MACG;AACH,UAAM4P,IAAM0c,GAAiBE,CAAS,GAChCvP,IAAWyP,KAAsB9c,EAAI,iBAErC,CAAC+c,GAAWC,CAAY,IAAIhtB,EAAM,SAAS,EAAK;AAEtD,IAAAA,EAAM,UAAU,MAAM;AACpB,UAAI,CAAC6sB,EAAY;AACjB,YAAM1qB,IAAK,YAAY,MAAM;AAC3B,QAAA6qB,EAAa,EAAI;AACjB,cAAMC,IAAM;AAAA,UACV,MAAMD,EAAa,EAAK;AAAA,UACxB,WAAWhd,EAAI,QAAQ,IAAI;AAAA,QAAA;AAE7B,eAAO,MAAM,aAAaid,CAAG;AAAA,MAC/B,GAAG5P,CAAQ;AACX,aAAO,MAAM,cAAclb,CAAE;AAAA,IAC/B,GAAG,CAAC0qB,GAAYxP,GAAUrN,EAAI,QAAQ,CAAC;AAEvC,UAAMkd,IAAYH,KAAa,CAACF,IAAa,mBAAmB;AAEhE,WACE,gBAAA/pB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb,EAAG,yBAAyBU,CAAS;AAAA,QAC/C,GAAGE;AAAA,QAGJ,UAAA;AAAA,UAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,iBAAiB,UAAAqD,EAAA,CAAS;AAAA,UAG1C,gBAAArD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAW;AAAA,cACX,WAAWd,EAAG,4CAA4C2tB,CAAS;AAAA,cACnE,OAAO;AAAA,gBACL,UAAU,SAASld,EAAI,OAAO;AAAA,gBAC9B,WAAW,cAAcA,EAAI,MAAM;AAAA,gBACnC,mBAAmBA,EAAI;AAAA,cAAA;AAAA,cAGxB,UAAAtM;AAAA,YAAA;AAAA,UAAA;AAAA,UAIH,gBAAArD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAW;AAAA,cACX,WAAWd,EAAG,2CAA2C2tB,CAAS;AAAA,cAClE,OAAO;AAAA,gBACL,UAAU,SAASld,EAAI,OAAO;AAAA,gBAC9B,WAAW,aAAaA,EAAI,MAAM;AAAA,gBAClC,mBAAmBA,EAAI;AAAA,gBACvB,gBAAgB;AAAA,cAAA;AAAA,cAGjB,UAAAtM;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACAipB,GAAW,cAAc;ACvHzB,MAAMQ,KAAW,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAA,GAE1BC,KAAgBptB,EAAM,WAGjC,CAAC,EAAE,MAAAsD,IAAO,MAAM,OAAAuF,GAAO,WAAA5I,EAAA,GAAaG,MAAQ;AAC5C,QAAM8a,IAAIiS,GAAS7pB,CAAI;AACvB,SACE,gBAAAR;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAW,mCAAmCH,IAAY,IAAIA,CAAS,KAAK,EAAE;AAAA,MAE9E,UAAA;AAAA,QAAA,gBAAAI,EAAC,SAAI,WAAU,YAAW,OAAO,EAAE,OAAO6a,IAAI,GAAG,QAAQA,IAAI,EAAA,GAC1D,WAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MACd,gBAAA7a;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YACV,OAAO;AAAA,cACL,WAAW,uBAAuB,IAAI,IAAI,IAAI;AAAA,cAC9C,WAAW,eAAe,MAAM,IAAI,GAAG,oBAAoB,MAAM,IAAI,aAAa,EAAE;AAAA,cACpF,SAAS,IAAI,IAAI;AAAA,YAAA;AAAA,UACnB;AAAA,UANK;AAAA,QAAA,CAQR,GACH;AAAA,QACCwI,KACC,gBAAAxI,EAAC,QAAA,EAAK,WAAU,uEACb,UAAAwI,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AACDukB,GAAc,cAAc;ACnC5B,MAAMC,KAAwC;AAAA,EAC5C,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AACZ,GAEMC,KAAwC;AAAA,EAC5C,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AACZ,GAgBMC,KAAgBvtB,EAAM;AAAA,EAC1B,CACE;AAAA,IACE,OAAA4C;AAAA,IACA,QAAAyI,IAAS;AAAA,IACT,UAAA3H;AAAA,IACA,WAAAzD;AAAA,IACA,cAAAutB;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,kBAAAC,IAAmB;AAAA,IACnB,WAAWC;AAAA,IACX,kBAAAC;AAAA,IACA,GAAGztB;AAAA,EAAA,GAELC,MACG;AACH,UAAM,CAACytB,GAAmBC,CAAoB,IAC5C9tB,EAAM,SAAS0tB,CAAgB,GAE3B7a,IAAe8a,MAAwB,QACvCI,IAAclb,IAAe8a,IAAsBE,GAEnDG,IAAoB,MAAM;AAC9B,UAAI,CAACP,EAAa;AAClB,YAAMva,IAAO,CAAC6a;AACd,MAAKlb,KAAcib,EAAqB5a,CAAI,GAC5C0a,KAAA,QAAAA,EAAmB1a;AAAA,IACrB;AAEA,WACE,gBAAApQ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb;AAAA,UACT;AAAA,UACAU;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAGJ,UAAA;AAAA,UAAA,gBAAA2C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWvD;AAAA,gBACT;AAAA,gBACAkuB,KAAe;AAAA,cAAA;AAAA,cAEjB,SAASO;AAAA,cAET,UAAA;AAAA,gBAAA,gBAAAlrB,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,kBAAA,gBAAAzC,EAAC4tB,IAAA,EAAU,WAAU,2BAAA,CAA2B;AAAA,kBAChD,gBAAA5tB,EAAC,QAAA,EAAK,WAAU,kFACb,UAAAuC,GACH;AAAA,kBACC6qB,KACC,gBAAAptB,EAAC,QAAA,EAAK,WAAU,2DACb,UAAA0tB,IAAc,MAAM,IAAA,CACvB;AAAA,gBAAA,GAEJ;AAAA,gBAEA,gBAAAjrB,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,kBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,oBAAA,gBAAAzC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWd,EAAG,WAAW+tB,GAAcjiB,CAAM,CAAC;AAAA,wBAC9C,OAAO;AAAA,0BACL,UAAU;AAAA,wBAAA;AAAA,sBACZ;AAAA,oBAAA;AAAA,sCAED,QAAA,EAAK,WAAU,gEACb,UAAAgiB,GAAchiB,CAAM,EAAA,CACvB;AAAA,kBAAA,GACF;AAAA,kBACCmiB,KACC,gBAAAntB;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS,CAAC4D,MAAMA,EAAE,gBAAA;AAAA,sBAEjB,UAAAupB;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACH,EAAA,CAEJ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAIF,gBAAAntB,EAAC,OAAA,EAAI,WAAU,4FAAA,CAA4F;AAAA,UAC3G,gBAAAA,EAAC,OAAA,EAAI,WAAU,6FAAA,CAA6F;AAAA,UAC5G,gBAAAA,EAAC,OAAA,EAAI,WAAU,+FAAA,CAA+F;AAAA,UAC9G,gBAAAA,EAAC,OAAA,EAAI,WAAU,gGAAA,CAAgG;AAAA,UAE/G,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWd;AAAA,gBACT;AAAA,gBACAwuB,IAAc,YAAY;AAAA,cAAA;AAAA,cAG5B,UAAA,gBAAA1tB,EAAC,OAAA,EAAI,WAAU,OAAO,UAAAqD,EAAA,CAAS;AAAA,YAAA;AAAA,UAAA;AAAA,QACjC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACA6pB,GAAc,cAAc;AC3HrB,MAAMW,KAAWluB,EAAM;AAAA,EAC5B,CAAC,EAAE,OAAA4C,GAAO,UAAAurB,GAAU,MAAMC,GAAM,OAAAxiB,GAAO,WAAA3L,EAAA,GAAaG,MAAQ;AAC1D,UAAM,CAACiuB,GAAUC,CAAW,IAAItuB,EAAM,SAAS,EAAK;AACpD,WACE,gBAAA8C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAW,sJAAsJH,IAAY,IAAIA,CAAS,KAAK,EAAE;AAAA,QACjM,cAAc,MAAMquB,EAAY,EAAI;AAAA,QACpC,cAAc,MAAMA,EAAY,EAAK;AAAA,QAGrC,UAAA;AAAA,UAAA,gBAAAjuB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,KAAKguB,IAAW,SAAS;AAAA,gBACzB,SAASA,IAAW,IAAI;AAAA,gBACxB,oBAAoB;AAAA,cAAA;AAAA,YACtB;AAAA,UAAA;AAAA,UAGF,gBAAAhuB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,YACE;AAAA,gBACF,SAASguB,IAAW,IAAI;AAAA,cAAA;AAAA,YAC1B;AAAA,UAAA;AAAA,UAEF,gBAAAvrB,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,YAAA,gBAAAzC,EAAC+tB,GAAA,EAAK,WAAU,qGAAA,CAAqG;AAAA,YACpHxiB,KACC,gBAAAvL,EAAC,KAAA,EAAE,WAAU,qDACV,UAAAuL,GACH;AAAA,YAEF,gBAAAvL,EAAC,MAAA,EAAG,WAAU,mFACX,UAAAuC,GACH;AAAA,YACA,gBAAAvC,EAAC,KAAA,EAAE,WAAU,iCAAiC,UAAA8tB,EAAA,CAAS;AAAA,UAAA,GACzD;AAAA,UAEA,gBAAA9tB,EAAC,OAAA,EAAI,WAAU,mGAAkG,UAAA,IAAA,CAEjH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACA6tB,GAAS,cAAc;ACnDvB,MAAMK,KAA0C;AAAA,EAC9C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL,GAMMC,KAA2D;AAAA,EAC/D,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,cAAc;AAChB,GAEMC,KAA0C;AAAA,EAC9C,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,YAAY;AACd,GAUMC,KAAwC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAeA,SAASC,GAAQ/W,GAA8B;AAC7C,SAAO,OAAOA,KAAM,WAAWA,IAAIA,EAAE;AACvC;AAEA,SAASgX,GAAShX,GAAsBiX,GAAqC;AAC3E,MAAIA,EAAU,QAAOL,GAAuBK,CAAQ;AAEpD,MAAI,OAAOjX,KAAM,YAAYA,EAAE;AAC7B,WAAO6W,GAAgB7W,EAAE,IAAI,KAAK;AAGpC,QAAMkX,IAAM,OAAOlX,KAAM,WAAWA,IAAIA,EAAE;AAC1C,SAAIkX,EAAI,SAAS,OAAO,IAAU,kBAC9BA,EAAI,SAAS,OAAO,IAAU,iBAC9BA,EAAI,SAAS,OAAO,IAAU,iBAC9BA,EAAI,SAAS,OAAO,IAAU,mBAC3B;AACT;AAIA,MAAMC,KAAa/uB,EAAM;AAAA,EACvB,CACE;AAAA,IACE,UAAAgvB,IAAWN;AAAA,IACX,OAAAO,IAAQ;AAAA,IACR,aAAAC;AAAA,IACA,WAAAjvB;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAM+uB,IAAaZ,GAAgBU,CAAK,KAAKV,GAAgB,CAAC,GAExD,CAAC7f,GAAO0gB,CAAQ,IAAIpvB,EAAM,SAA8B,CAAA,CAAE,GAC1D2F,IAAe3F,EAAM,OAAuB,IAAI;AAEtD,WAAAA,EAAM,UAAU,MAAM;AACpB,UAAI0H,IAAI;AACR,YAAMvF,IAAK,YAAY,MAAM;AAC3B,QAAAitB,EAAS,CAAC9R,MAAS;AACjB,gBAAMpK,IAAO,CAAC,GAAGoK,GAAM0R,EAAStnB,IAAIsnB,EAAS,MAAM,CAAC;AACpD,iBAAO9b,EAAK,SAAS,IAAIA,EAAK,MAAM,EAAE,IAAIA;AAAA,QAC5C,CAAC,GACDxL;AAAA,MACF,GAAGynB,CAAU;AACb,aAAO,MAAM,cAAchtB,CAAE;AAAA,IAC/B,GAAG,CAAC6sB,GAAUG,CAAU,CAAC,GAEzBnvB,EAAM,UAAU,MAAM;AACpB,MAAI2F,EAAa,YACfA,EAAa,QAAQ,YAAYA,EAAa,QAAQ;AAAA,IAE1D,GAAG,CAAC+I,CAAK,CAAC,GAGR,gBAAA5L;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb;AAAA,UACT;AAAA,UACAU;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAGJ,UAAA;AAAA,UAAA,gBAAA2C,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA;AAAA,YAAA,gBAAAzC,EAACgvB,IAAA,EAAS,WAAU,2BAAA,CAA2B;AAAA,YAC/C,gBAAAhvB,EAAC,QAAA,EAAK,WAAU,0EAAyE,UAAA,aAEzF;AAAA,YACA,gBAAAyC,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,cAAA,gBAAAzC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO;AAAA,oBACL,UAAU;AAAA,kBAAA;AAAA,gBACZ;AAAA,cAAA;AAAA,cAEF,gBAAAA,EAAC,QAAA,EAAK,WAAU,uCAAsC,UAAA,SAAA,CAAM;AAAA,YAAA,EAAA,CAC9D;AAAA,UAAA,GACF;AAAA,UAGA,gBAAAyC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK6C;AAAA,cACL,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAAtF,EAACivB,IAAA,EACE,UAAA5gB,EAAM,IAAI,CAACgT,GAAMha,MAChB,gBAAArH;AAAA,kBAACkvB,GAAO;AAAA,kBAAP;AAAA,oBAEC,SAAS,EAAE,SAAS,GAAG,GAAG,IAAA;AAAA,oBAC1B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAA;AAAA,oBAC1B,WAAWX,GAASlN,GAAMwN,CAAW;AAAA,oBAEpC,aAAQxN,CAAI;AAAA,kBAAA;AAAA,kBALR,GAAGiN,GAAQjN,CAAI,CAAC,IAAIha,CAAC;AAAA,gBAAA,CAO7B,GACH;AAAA,gBACA,gBAAArH,EAAC,QAAA,EAAK,WAAU,uDAAA,CAAuD;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACzE;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACA0uB,GAAW,cAAc;ACtKlB,MAAMS,KAAwB9uB;AAAA,EACnC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAMa+uB,KAAgBzvB,EAAM,WAGjC,CAAC,EAAE,SAAAY,GAAS,WAAAX,GAAW,UAAAyD,GAAU,GAAGvD,KAASC,MAC7C,gBAAA0C;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAA1C;AAAA,IACA,WAAWb,EAAGiwB,GAAsB,EAAE,SAAA5uB,EAAA,CAAS,GAAGX,CAAS;AAAA,IAC1D,GAAGE;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAE,EAAC,UAAK,OAAO,EAAE,UAAU,MAAA,GAAS,UAAA,KAAC;AAAA,MAClCqD;AAAA,IAAA;AAAA,EAAA;AACH,CACD;AACD+rB,GAAc,cAAc;AC9B5B,MAAMC,KAAiB;AAAA,EACrB,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX,GAEaC,KAAgB3vB,EAAM,WAGjC,CAAC,EAAE,OAAA4vB,IAAQ,WAAW,UAAAlsB,GAAU,WAAAzD,EAAA,GAAaG,MAAQ;AACrD,QAAM8a,IAAIwU,GAAeE,CAAK;AAC9B,SACE,gBAAA9sB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAW,sBAAsB8a,EAAE,MAAM,IAAIA,EAAE,EAAE,8BAA8Bjb,IAAY,IAAIA,CAAS,KAAK,EAAE;AAAA,MAE/G,UAAA;AAAA,QAAA,gBAAAI,EAACwvB,IAAA,EAAc,WAAW,WAAW3U,EAAE,IAAI,oBAAoB;AAAA,0BAC9D,OAAA,EACC,UAAA;AAAA,UAAA,gBAAA7a;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW,wDAAwD6a,EAAE,IAAI;AAAA,cAExE,UAAAA,EAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAEL,gBAAA7a,EAAC,KAAA,EAAE,WAAU,sCAAsC,UAAAqD,EAAA,CAAS;AAAA,QAAA,EAAA,CAC9D;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AACDisB,GAAc,cAAc;AC7CrB,MAAMG,KAAc9vB,EAAM;AAAA,EAC/B,CAAC,EAAE,OAAA6I,GAAO,WAAA5I,EAAA,GAAaG,MACrB,gBAAA0C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAA1C;AAAA,MACA,WAAW,wCAAwCH,IAAY,IAAIA,CAAS,KAAK,EAAE;AAAA,MAEnF,UAAA;AAAA,QAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,8EAAA,CAA8E;AAAA,QAC5FwI,KACC,gBAAA/F,EAAC,QAAA,EAAK,WAAU,yGACd,UAAA;AAAA,UAAA,gBAAAzC,EAAC,UAAK,OAAO,EAAE,UAAU,MAAA,GAAS,UAAA,KAAC;AAAA,UAAO;AAAA,UAAEwI;AAAA,UAAO;AAAA,4BAClD,QAAA,EAAK,OAAO,EAAE,UAAU,MAAA,GAAS,UAAA,IAAA,CAAC;AAAA,QAAA,GACrC;AAAA,QAEF,gBAAAxI,EAAC,OAAA,EAAI,WAAU,8EAAA,CAA8E;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnG;AACAyvB,GAAY,cAAc;ACfnB,MAAMC,KAAgB/vB,EAAM,WAGjC,CAAC,EAAE,OAAA6I,GAAO,OAAA+C,GAAO,MAAAokB,GAAM,WAAA/vB,KAAaG,MACpC,gBAAA0C;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAA1C;AAAA,IACA,WAAW,6EAA6EH,IAAY,IAAIA,CAAS,KAAK,EAAE;AAAA,IAExH,UAAA;AAAA,MAAA,gBAAAI,EAAC,QAAA,EAAK,WAAU,4HACb,UAAAwI,GACH;AAAA,MACA,gBAAAxI,EAAC,QAAA,EAAK,WAAU,0DACb,UAAAuL,GACH;AAAA,MACCokB,KACC,gBAAA3vB,EAAC,QAAA,EAAK,WAAU,sDACb,UAAA2vB,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAEJ,CACD;AACDD,GAAc,cAAc;ACY5B,SAASE,EACPC,GACAC,GACAC,GACAC,GACA3oB,GACA;AACA,SAAO;AAAA,IACL,GAAGwoB,IAAKE,IAAI,KAAK,IAAI1oB,IAAI2oB,CAAS;AAAA,IAClC,GAAGF,IAAKC,IAAI,KAAK,IAAI1oB,IAAI2oB,CAAS;AAAA,EAAA;AAEtC;AAEA,SAASC,GAASC,GAAiC;AACjD,SAAOA,EAAI,IAAI,CAAC9G,MAAM,GAAGA,EAAE,CAAC,IAAIA,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG;AACjD;AAIA,MAAM+G,KAAaxwB,EAAM;AAAA,EACvB,CACE;AAAA,IACE,MAAAywB;AAAA,IACA,OAAA3H,IAAQ;AAAA,IACR,MAAA4H;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,MAAAttB,IAAO;AAAA,IACP,WAAArD;AAAA,IACA,GAAGE;AAAA,EAAA,GAEL0wB,MACG;AACH,UAAMC,IAAW9wB,EAAM,OAAuB,IAAI,GAC5C+wB,IAAWnqB,GAAUkqB,GAAU,EAAE,MAAM,IAAM,GAE7CE,IAAWhxB,EAAM;AAAA,MACrB,CAACoH,MAA8B;AAC5B,QAAA0pB,EAA2D,UAC1D1pB,GACE,OAAOypB,KAAiB,aAC1BA,EAAazpB,CAAE,IACNypB,MAEPA,EACA,UAAUzpB;AAAA,MAEhB;AAAA,MACA,CAACypB,CAAY;AAAA,IAAA,GAITI,IACJP,MAAQD,KAAA,gBAAAA,EAAM,IAAI,CAACzZ,OAAO,EAAE,OAAOA,EAAE,OAAO,KAAK,GAAG,KAAK,IAAA,QAAW,CAAA,GAEhEka,IACJP,MACCF,IACG;AAAA,MACE;AAAA,QACE,OAAO;AAAA,QACP,QAAQA,EAAK,IAAI,CAACzZ,MAAMA,EAAE,KAAK;AAAA,QAC/B,OACE8R,MAAU,SACN,wBACA;AAAA,MAAA;AAAA,IACR,IAEF,KAEA7V,IAAIge,EAAa;AACvB,QAAIhe,IAAI,EAAG,QAAO;AAElB,UAAMid,IAAK5sB,IAAO,GACZ6sB,IAAK7sB,IAAO,GACZ8sB,IAAI9sB,IAAO,MACX6tB,IAAS,GACTd,IAAa,KAAK,KAAK,IAAKpd,GAG5Bme,IAAe,MAAM,KAAK,EAAE,QAAQD,EAAA,GAAU,CAAC1pB,GAAG4pB,MAAQ;AAC9D,YAAMC,IAAKlB,MAAMiB,IAAM,KAAKF;AAC5B,aAAOb;AAAA,QACLW,EAAa,IAAI,CAACxpB,GAAGC,MAAMuoB,EAASC,GAAIC,GAAImB,GAAIjB,GAAW3oB,CAAC,CAAC;AAAA,MAAA;AAAA,IAEjE,CAAC,GAGK6pB,IAAYN,EAAa;AAAA,MAAI,CAACxpB,GAAGC,MACrCuoB,EAASC,GAAIC,GAAIC,GAAGC,GAAW3oB,CAAC;AAAA,IAAA,GAI5B8pB,IAAeN,EAAiB,IAAI,CAACO,MAAO;AAChD,YAAMC,IAAaT,EAAa,IAAI,CAACU,GAAMjqB,MAAM;AAC/C,cAAMiL,IAAMgf,EAAK,OAAO,GAClB/e,IAAM+e,EAAK,OAAO,KAClBC,IAAOhf,IAAMD,KAAO8e,EAAG,OAAO/pB,CAAC,IAAIiL,MAAQC,IAAMD,KAAO;AAC9D,eAAOsd;AAAA,UACLC;AAAA,UACAC;AAAA,UACA,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGyB,CAAI,CAAC,IAAIxB;AAAA,UACjCC;AAAA,UACA3oB;AAAA,QAAA;AAAA,MAEJ,CAAC;AACD,aAAO;AAAA,QACL,IAAA+pB;AAAA,QACA,MAAMnB,GAASoB,CAAU;AAAA,QACzB,QAAQpB,GAASW,EAAa,IAAI,OAAO,EAAE,GAAGf,GAAI,GAAGC,EAAA,EAAK,CAAC;AAAA,MAAA;AAAA,IAE/D,CAAC,GAGK0B,IAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAGF,WACE,gBAAA/uB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKkuB;AAAA,QACL,WAAWzxB,EAAG,qCAAqCU,CAAS;AAAA,QAC3D,GAAGE;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAA2C;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,OAAOQ,CAAI,IAAIA,CAAI;AAAA,cAC5B,WAAU;AAAA,cAGT,UAAA;AAAA,gBAAA8tB,EAAa,IAAI,CAACb,GAAK7oB,MACtB,gBAAArH;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,QAAQkwB;AAAA,oBACR,MAAK;AAAA,oBACL,QAAO;AAAA,oBACP,aAAa;AAAA,oBACb,SAAS;AAAA,kBAAA;AAAA,kBALJ7oB;AAAA,gBAAA,CAOR;AAAA,gBAGA6pB,EAAU,IAAI,CAAC9H,GAAG/hB,MACjB,gBAAArH;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,IAAI6vB;AAAA,oBACJ,IAAIC;AAAA,oBACJ,IAAI1G,EAAE;AAAA,oBACN,IAAIA,EAAE;AAAA,oBACN,QAAO;AAAA,oBACP,aAAa;AAAA,oBACb,SAAS;AAAA,kBAAA;AAAA,kBAPJ/hB;AAAA,gBAAA,CASR;AAAA,gBAGA8pB,EAAa,IAAI,CAAC,EAAE,IAAAC,GAAI,MAAAK,GAAM,QAAAC,EAAA,GAAUC,MAAO;AAC9C,wBAAMC,IACJR,EAAG,SAASI,EAAcG,IAAKH,EAAc,MAAM,GAC/CK,IAAcT,EAAG,eAAe;AACtC,yBACE,gBAAApxB;AAAA,oBAACkvB,GAAO;AAAA,oBAAP;AAAA,sBAEC,QAAQwB,IAAWe,IAAOC;AAAA,sBAC1B,MAAME;AAAA,sBACN,aAAAC;AAAA,sBACA,QAAQD;AAAA,sBACR,aAAa;AAAA,sBACb,SAAS;AAAA,sBACT,SAAS,EAAE,QAAQlB,IAAWe,IAAOC,EAAA;AAAA,sBACrC,YAAY;AAAA,wBACV,UAAU;AAAA,wBACV,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;AAAA,wBACzB,OAAOC,IAAK;AAAA,sBAAA;AAAA,sBAEd,OAAO;AAAA,wBACL,QAAQ,uBAAuBC,EAAU,QAAQ,KAAK,SAAS,CAAC;AAAA,sBAAA;AAAA,oBAClE;AAAA,oBAfKD;AAAA,kBAAA;AAAA,gBAkBX,CAAC;AAAA,gBAGAR,EAAa,CAAC,MACZ,MAAM;AACL,wBAAM,EAAE,IAAAC,GAAI,MAAMhqB,EAAA,IAAM+pB,EAAa,CAAC,GAChCS,IAAYR,EAAG,SAASI,EAAc,CAAC;AAC7C,yBAAOZ,EAAa,IAAI,CAACU,GAAMjqB,MAAM;AACnC,0BAAMiL,IAAMgf,EAAK,OAAO,GAClB/e,IAAM+e,EAAK,OAAO,KAClBC,IAAOhf,IAAMD,KAAO8e,EAAG,OAAO/pB,CAAC,IAAIiL,MAAQC,IAAMD,KAAO,GACxD8W,IAAIwG;AAAA,sBACRC;AAAA,sBACAC;AAAA,sBACA,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGyB,CAAI,CAAC,IAAIxB;AAAA,sBACjCC;AAAA,sBACA3oB;AAAA,oBAAA;AAEF,2BACE,gBAAArH;AAAA,sBAACkvB,GAAO;AAAA,sBAAP;AAAA,wBAEC,IAAAW;AAAA,wBACA,IAAAC;AAAA,wBACA,GAAG;AAAA,wBACH,MAAM8B;AAAA,wBACN,QAAO;AAAA,wBACP,aAAa;AAAA,wBACb,SAAS;AAAA,wBACT,SAAS;AAAA,0BACP,IAAIlB,IAAWtH,EAAE,IAAIyG;AAAA,0BACrB,IAAIa,IAAWtH,EAAE,IAAI0G;AAAA,wBAAA;AAAA,wBAEvB,YAAY,EAAE,UAAU,KAAK,OAAOzoB,IAAI,KAAA;AAAA,wBACxC,OAAO;AAAA,0BACL,QAAQ,uBAAuBuqB,EAAU,QAAQ,KAAK,SAAS,CAAC;AAAA,wBAAA;AAAA,sBAClE;AAAA,sBAfKvqB;AAAA,oBAAA;AAAA,kBAkBX,CAAC;AAAA,gBACH,GAAA;AAAA,gBAGDupB,EAAa,IAAI,CAACU,GAAMjqB,MAAM;AAC7B,wBAAM+hB,IAAIwG,EAASC,GAAIC,GAAIC,IAAI,IAAIC,GAAW3oB,CAAC;AAC/C,yBACE,gBAAArH;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBAEC,GAAGopB,EAAE;AAAA,sBACL,GAAGA,EAAE;AAAA,sBACL,YAAW;AAAA,sBACX,kBAAiB;AAAA,sBACjB,WAAU;AAAA,sBACV,MAAK;AAAA,sBAEJ,UAAAkI,EAAK;AAAA,oBAAA;AAAA,oBARDjqB;AAAA,kBAAA;AAAA,gBAWX,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAIFkpB,KAAcM,EAAiB,KAAK,CAACO,MAAOA,EAAG,KAAK,KACnD,gBAAApxB,EAAC,OAAA,EAAI,WAAU,gCACZ,UAAA6wB,EAAiB,IAAI,CAACO,GAAIO,MAAO;AAChC,gBAAI,CAACP,EAAG,MAAO,QAAO;AACtB,kBAAM9a,IAAI8a,EAAG,SAASI,EAAcG,IAAKH,EAAc,MAAM;AAC7D,mBACE,gBAAA/uB,EAAC,OAAA,EAAa,WAAU,6BACtB,UAAA;AAAA,cAAA,gBAAAzC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,iBAAiBsW,EAAA;AAAA,gBAAE;AAAA,cAAA;AAAA,cAE9B,gBAAAtW,EAAC,QAAA,EAAK,WAAU,wEACb,YAAG,MAAA,CACN;AAAA,YAAA,EAAA,GAPQ2xB,CAQV;AAAA,UAEJ,CAAC,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACAxB,GAAW,cAAc;AC9SzB,MAAM2B,KAAuC;AAAA,EAC3C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAkBMC,KAAapyB,EAAM;AAAA,EACvB,CACE;AAAA,IACE,UAAA0D;AAAA,IACA,aAAA2uB,IAAc;AAAA,IACd,KAAAC,IAAM;AAAA,IACN,KAAAC,IAAM;AAAA,IACN,YAAAC,IAAa;AAAA,IACb,eAAAC,IAAgB;AAAA,IAChB,eAAAC,IAAgB;AAAA,IAChB,WAAAC,IAAY;AAAA,IACZ,aAAAC,IAAc;AAAA,IACd,WAAA3yB;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAM,CAACyyB,GAAMC,CAAO,IAAI9yB,EAAM,SAAS,EAAE;AAEzC,IAAAA,EAAM,UAAU,MAAM;AACpB,YAAM+yB,IAAO,MAAMD,GAAQ,oBAAI,QAAO,mBAAmB,OAAO,CAAC;AACjE,MAAAC,EAAA;AACA,YAAM5wB,IAAK,YAAY4wB,GAAM,GAAI;AACjC,aAAO,MAAM,cAAc5wB,CAAE;AAAA,IAC/B,GAAG,CAAA,CAAE;AAEL,UAAM6wB,IAASb,GAAaS,CAAW,KAAKT,GAAa;AAEzD,WACE,gBAAArvB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb;AAAA,UACT;AAAA,UACAU;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAEH,UAAA;AAAA,UAAAuyB,KACC,gBAAAryB,EAAC,OAAA,EAAI,WAAU,wDAAA,CAAwD;AAAA,UAGxEsyB,KACC,gBAAAtyB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,iBACE;AAAA,gBACF,kBAAkB;AAAA,gBAClB,gBAAgB;AAAA,gBAChB,SAAS;AAAA,cAAA;AAAA,YACX;AAAA,UAAA;AAAA,UAMF;AAAA,YACE,CAAC,gBAAgB,uBAAuB;AAAA,YACxC,CAAC,iBAAiB,uBAAuB;AAAA,YACzC,CAAC,mBAAmB,uBAAuB;AAAA,YAC3C,CAAC,oBAAoB,uBAAuB;AAAA,UAAA,EAE9C,IAAI,CAAC,CAAC2qB,GAAKiI,CAAO,GAAGvrB,MACrB,gBAAArH;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAWd;AAAA,gBACT;AAAA,gBACAyzB;AAAA,gBACAhI;AAAA,gBACAiI;AAAA,cAAA;AAAA,YACF;AAAA,YANKvrB;AAAA,UAAA,CAQR;AAAA,UAGA+qB,KACC,gBAAA3vB,EAAC,OAAA,EAAI,WAAU,mFACb,UAAA;AAAA,YAAA,gBAAAzC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,UAAU,YAAY,KAAK,OAAO,MAAM,QAAA;AAAA,cAAQ;AAAA,YAAA;AAAA,YAE3D,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,UAAU,YAAY,MAAM,OAAO,KAAK,QAAA;AAAA,cAAQ;AAAA,YAAA;AAAA,UAC3D,GACF;AAAA,UAIDmyB,KACC,gBAAA1vB,EAAC,OAAA,EAAI,WAAU,oFACb,UAAA;AAAA,YAAA,gBAAAzC,EAAC,SAAK,UAAAgyB,EAAA,CAAY;AAAA,YAClB,gBAAAhyB,EAAC,OAAA,EAAI,WAAU,mBAAmB,UAAAwyB,EAAA,CAAK;AAAA,UAAA,GACzC;AAAA,UAIDL,KACC,gBAAA1vB,EAAC,OAAA,EAAI,WAAU,gGACb,UAAA;AAAA,YAAA,gBAAAzC,EAAC,SAAK,UAAAiyB,EAAA,CAAI;AAAA,YACV,gBAAAjyB,EAAC,SAAK,UAAAkyB,EAAA,CAAI;AAAA,UAAA,GACZ;AAAA,UAIF,gBAAAzvB,EAAC,OAAA,EAAI,WAAU,wEACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAzC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO;AAAA,oBACL,UAAU;AAAA,kBAAA;AAAA,gBACZ;AAAA,cAAA;AAAA,cAEF,gBAAAA,EAAC,QAAA,EAAK,WAAU,yCAAwC,UAAA,cAAA,CAExD;AAAA,YAAA,GACF;AAAA,YACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACZ,UAAA,CAAC,UAAU,WAAW,UAAU,EAAE,IAAI,CAAC6a,MACtC,gBAAA7a;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBAET,UAAA6a;AAAA,cAAA;AAAA,cAHIA;AAAA,YAAA,CAKR,EAAA,CACH;AAAA,UAAA,GACF;AAAA,UAGA,gBAAA7a,EAAC,OAAA,EAAI,WAAU,iBAAiB,UAAAqD,EAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAG/C;AACF;AACA0uB,GAAW,cAAc;AC5JzB,MAAMc,KAAsBxyB;AAAA,EAC1B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,UAAU;AAAA,QACR,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,MAAA;AAAA,MAEZ,QAAQ;AAAA,QACN,QAAY;AAAA,QACZ,WAAY;AAAA,QACZ,QAAY;AAAA,QACZ,SAAY;AAAA,QACZ,YAAY;AAAA,MAAA;AAAA,MAEd,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB,EAAE,UAAU,UAAU,QAAQ,UAAU,WAAW,GAAA;AAAA,EAAM;AAE9E,GAIMyyB,KAAgB;AAAA,EACpB,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,EAAA;AAAA,EAEP,WAAW;AAAA,IACT,OAAO;AAAA,IACP,KAAK;AAAA,EAAA;AAAA,EAEP,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,EAAA;AAAA,EAEP,SAAS;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,EAAA;AAAA,EAEP,YAAY;AAAA,IACV,OAAO;AAAA,IACP,KAAK;AAAA,EAAA;AAET,GAEMC,KAAkB;AAAA,EACtB,KAAK,EAAE,OAAO,OAAO,KAAK,wBAAA;AAAA,EAC1B,QAAQ,EAAE,OAAO,UAAU,KAAK,eAAA;AAAA,EAChC,MAAM,EAAE,OAAO,QAAQ,KAAK,iBAAA;AAAA,EAC5B,UAAU,EAAE,OAAO,YAAY,KAAK,mBAAA;AACtC,GAuBMC,KAAcrzB,EAAM;AAAA,EACxB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,OAAA2C;AAAA,IACA,WAAA0wB;AAAA,IACA,aAAAzwB;AAAA,IACA,QAAAwI,IAAS;AAAA,IACT,UAAAkoB,IAAW;AAAA,IACX,MAAAjjB;AAAA,IACA,UAAAsL;AAAA,IACA,MAAA4X;AAAA,IACA,SAAAjuB;AAAA,IACA,GAAGpF;AAAA,EAAA,GAELC,MACG;AACH,UAAMqzB,IAAYN,GAAc9nB,CAAM,GAChCqoB,IAAcN,GAAgBG,CAAQ,GACtCI,IAAc,CAAC,CAACpuB,GAEhBS,IAAgB,CAAC/B,MAA2C;AAChE,MAAI0vB,MAAgB1vB,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjDA,EAAE,eAAA,GACFsB,KAAA,QAAAA,EAAUtB;AAAA,IAEd,GAEM2vB,IACJhY,MAAa,SAAY,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGA,CAAQ,CAAC,IAAI;AAElE,WACE,gBAAA9Y;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,MAAMuzB,IAAc,WAAW;AAAA,QAC/B,cAAY,YAAY/wB,CAAK;AAAA,QAC7B,UAAU+wB,IAAc,IAAI;AAAA,QAC5B,SAAApuB;AAAA,QACA,WAAWS;AAAA,QACX,WAAWzG;AAAA,UACT2zB,GAAoB,EAAE,UAAAK,GAAU,QAAAloB,GAAQ,WAAWsoB,GAAa;AAAA,UAChE1zB;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAGJ,UAAA;AAAA,UAAA,gBAAA2C,EAAC,OAAA,EAAI,WAAU,qFACb,UAAA;AAAA,YAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWvD;AAAA,kBACT;AAAA,kBACAm0B,EAAY;AAAA,gBAAA;AAAA,gBAEf,UAAA;AAAA,kBAAA;AAAA,kBACcA,EAAY;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAE3B,gBAAArzB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWd;AAAA,kBACT;AAAA,kBACAk0B,EAAU;AAAA,gBAAA;AAAA,gBAGX,UAAAA,EAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACb,GACF;AAAA,UAGA,gBAAA3wB,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,YAAA,gBAAAzC,EAAC,MAAA,EAAG,WAAU,6FACX,UAAAuC,GACH;AAAA,YACC0wB,KACC,gBAAAxwB,EAAC,KAAA,EAAE,WAAU,yDAAwD,UAAA;AAAA,cAAA;AAAA,cAC9DwwB;AAAA,YAAA,GACP;AAAA,YAEDzwB,KACC,gBAAAxC,EAAC,KAAA,EAAE,WAAU,0DACV,UAAAwC,EAAA,CACH;AAAA,UAAA,GAEJ;AAAA,WAGEyN,MAAS,UACTsjB,MAAoB,UACnBJ,KAAQA,EAAK,SAAS,MACvB,gBAAA1wB,EAAC,OAAA,EAAI,WAAU,4BACZ,UAAA;AAAA,YAAA8wB,MAAoB,UACnB,gBAAA9wB,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAzC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,iBAAeuzB;AAAA,kBACf,iBAAe;AAAA,kBACf,iBAAe;AAAA,kBACf,cAAW;AAAA,kBACX,WAAU;AAAA,kBAEV,UAAA,gBAAAvzB;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,GAAGuzB,CAAe,IAAA;AAAA,oBAAI;AAAA,kBAAA;AAAA,gBACxC;AAAA,cAAA;AAAA,cAEF,gBAAA9wB,EAAC,QAAA,EAAK,WAAU,uEAAsE,eAAY,QAC/F,UAAA;AAAA,gBAAA8wB;AAAA,gBAAgB;AAAA,cAAA,EAAA,CACnB;AAAA,YAAA,GACF;AAAA,YAEF,gBAAA9wB,EAAC,OAAA,EAAI,WAAU,qDACZ,UAAA;AAAA,cAAAwN,KACC,gBAAAjQ,EAAC,QAAA,EAAK,WAAU,kDACb,UAAAiQ,GACH;AAAA,cAEDkjB,KAAQA,EAAK,SAAS,KACrB,gBAAAnzB,EAAC,OAAA,EAAI,WAAU,gCACZ,UAAAmzB,EAAK,IAAI,CAACK,MACT,gBAAAxzB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBAET,UAAAwzB;AAAA,gBAAA;AAAA,gBAHIA;AAAA,cAAA,CAKR,EAAA,CACH;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACAR,GAAY,cAAc;ACzN1B,MAAMS,KAA6C;AAAA,EACjD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL,GAIMC,KAAoC;AAAA,EACxC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AACR,GAIMC,KAAuBtzB;AAAA,EAC3B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB,EAAE,MAAM,UAAA;AAAA,EAAU;AAEvC;AA2BA,SAASuzB,GAAe;AAAA,EACtB,KAAAC;AAAA,EACA,MAAApvB;AAAA,EACA,UAAAqvB;AAAA,EACA,WAAAC;AACF,GAKG;AACD,SACE,gBAAA/zB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWd;AAAA,QACT;AAAA,QACA;AAAA,QACA60B;AAAA,MAAA;AAAA,MAEF,OAAO;AAAA,QACL,UACE;AAAA,MAAA;AAAA,MAGH,cACC,gBAAA/zB,EAAC,OAAA,EAAI,KAAA6zB,GAAU,KAAKpvB,GAAM,WAAU,6BAAA,CAA6B,IAEjE,gBAAAzE,EAAC,UAAM,UAAA8zB,KAAYrvB,EAAK,MAAM,GAAG,CAAC,EAAA,CAAE;AAAA,IAAA;AAAA,EAAA;AAI5C;AAIA,SAASuvB,GAAY,EAAE,QAAArvB,KAA8B;AACnD,QAAMsvB,IAAYR,GAAmB9uB,CAAM,KAAK8uB,GAAmB,CAAC;AACpE,SACE,gBAAAhxB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,cAAY,GAAGkC,CAAM,QAAQA,MAAW,IAAI,MAAM,EAAE;AAAA,MAEnD,UAAA;AAAA,QAAA,MAAM,KAAK,EAAE,QAAQA,GAAQ,EAAE,IAAI,CAACyC,GAAGC,MACtC,gBAAArH,EAAC,UAAoB,WAAWi0B,GAAW,iBAAhC,KAAK5sB,CAAC,EAEjB,CACD;AAAA,QACA,MAAM,KAAK,EAAE,QAAQ,IAAI1C,EAAA,CAAQ,EAAE,IAAI,CAACyC,GAAGC,MAC1C,gBAAArH,EAAC,UAAoB,WAAU,4BAA2B,iBAA/C,KAAKqH,CAAC,EAEjB,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAIA,SAAS6sB,GAAW,EAAE,OAAA1rB,KAA4B;AAChD,SACE,gBAAA/F;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MAAA,EACA,KAAK,GAAG;AAAA,MAEV,UAAA;AAAA,QAAA,gBAAAzC,EAAC,UAAK,OAAO,EAAE,UAAU,MAAA,GAAS,UAAA,KAAC;AAAA,QAClCwI;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAIA,MAAMhE,KAAe7E,EAAM;AAAA,EACzB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,MAAA6E;AAAA,IACA,eAAA0vB;AAAA,IACA,QAAAxvB,IAAS;AAAA,IACT,WAAAyvB;AAAA,IACA,UAAAN;AAAA,IACA,OAAAO;AAAA,IACA,SAAA3vB;AAAA,IACA,MAAAyuB;AAAA,IACA,MAAAlwB;AAAA,IACA,GAAGnD;AAAA,EAAA,GAELC,MACG;AACH,UAAMu0B,IAAgB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG3vB,CAAM,CAAC;AASrD,WAAI1B,MAAS,YAET,gBAAAR;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb,EAAGy0B,GAAqB,EAAE,MAAA1wB,EAAA,CAAM,GAAGrD,CAAS;AAAA,QACtD,GAAGE;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAAC4zB;AAAA,YAAA;AAAA,cACC,KAAKQ;AAAA,cACL,MAAA3vB;AAAA,cACA,UAAAqvB;AAAA,cACA,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAEZ,gBAAArxB,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,YAAA,gBAAAzC,EAAC,KAAA,EAAE,WAAU,wFACV,UAAAyE,GACH;AAAA,YACC0vB,KACC,gBAAA1xB,EAAC,KAAA,EAAE,WAAU,sDAAqD,UAAA;AAAA,cAAA;AAAA,cAC7D0xB,EAAc,YAAA;AAAA,YAAY,GAC/B;AAAA,YAEF,gBAAAn0B,EAAC,SAAI,WAAU,QACb,4BAACg0B,IAAA,EAAY,QAAQM,GAAe,EAAA,CACtC;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,IAOJ,gBAAA7xB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb,EAAGy0B,GAAqB,EAAE,MAAA1wB,EAAA,CAAM,GAAGrD,CAAS;AAAA,QACtD,GAAGE;AAAA,QAGJ,UAAA;AAAA,UAAA,gBAAA2C,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,YAAA,gBAAAzC;AAAA,cAAC4zB;AAAA,cAAA;AAAA,gBACC,KAAKQ;AAAA,gBACL,MAAA3vB;AAAA,gBACA,UAAAqvB;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAEZ,gBAAArxB,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,cAAA,gBAAAzC,EAAC,MAAA,EAAG,WAAU,6FACX,UAAAyE,GACH;AAAA,cACCC,KACC,gBAAA1E,EAAC,KAAA,EAAE,WAAU,kFACV,UAAA0E,GACH;AAAA,cAEDyvB,uBACE,OAAA,EAAI,WAAU,UACb,UAAA,gBAAAn0B,EAACk0B,IAAA,EAAW,OAAOC,EAAA,CAAe,EAAA,CACpC;AAAA,cAEF,gBAAAn0B,EAAC,SAAI,WAAU,QACb,4BAACg0B,IAAA,EAAY,QAAQM,GAAe,EAAA,CACtC;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,GACF;AAAA,UAGCnB,KAAQA,EAAK,SAAS,KACrB,gBAAAnzB,EAAC,OAAA,EAAI,WAAU,6BACZ,UAAAmzB,EAAK,IAAI,CAACK,MACT,gBAAAxzB;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAU;AAAA,cAET,UAAAwzB;AAAA,YAAA;AAAA,YAHIA;AAAA,UAAA,CAKR,GACH;AAAA,UAIDa,KAASA,EAAM,SAAS,KACvB,gBAAAr0B,EAAC,OAAA,EAAI,WAAU,yCACZ,UAAAq0B,EAAM,IAAI,CAACE,MAAS;AACnB,kBAAMC,IAASD,EAAK,OAAOA,EAAK,OAC1BE,IACJD,IAAS,IAAI,KAAK,IAAI,KAAMD,EAAK,QAAQC,IAAU,GAAG,IAAI,GACtDE,IACJhB,GAAUa,EAAK,SAAS,SAAS,KAAKb,GAAU;AAClD,mBACE,gBAAAjxB,EAAC,OAAA,EAAqB,WAAU,2BAC9B,UAAA;AAAA,cAAA,gBAAAzC,EAAC,QAAA,EAAK,WAAU,qFACb,UAAAu0B,EAAK,OACR;AAAA,cACA,gBAAAv0B,EAAC,OAAA,EAAI,WAAU,2CACb,UAAA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWd,EAAG,sCAAsCw1B,CAAI;AAAA,kBACxD,OAAO,EAAE,OAAO,GAAGD,CAAG,IAAA;AAAA,gBAAI;AAAA,cAAA,GAE9B;AAAA,gCACC,QAAA,EAAK,WAAU,2EACb,UAAAF,EAAK,MAAM,iBAAe,CAC7B;AAAA,YAAA,EAAA,GAZQA,EAAK,KAaf;AAAA,UAEJ,CAAC,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACA/vB,GAAa,cAAc;ACjR3B,MAAMmwB,KAA6Bt0B,EAAI,6BAA6B;AAAA,EAClE,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,iBAAiB,EAAE,MAAM,KAAA;AAC3B,CAAC,GAEKu0B,KAA2Bv0B,EAAI,mCAAmC;AAAA,EACtE,UAAU;AAAA,IACR,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,IAAA;AAAA,EACd;AAAA,EAEF,iBAAiB,EAAE,SAAS,SAAA;AAC9B,CAAC,GAIKw0B,KAAsC;AAAA,EAC1C,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,YAAY;AACd,GAkBMC,KAAYn1B,EAAM;AAAA,EACtB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,OAAA2L;AAAA,IACA,KAAAgH,IAAM;AAAA,IACN,UAAAwiB,IAAW;AAAA,IACX,OAAAvsB;AAAA,IACA,WAAAwsB,IAAY;AAAA,IACZ,MAAA/xB;AAAA,IACA,SAAA1C,IAAU;AAAA,IACV,GAAGT;AAAA,EAAA,GAELC,MACG;AACH,UAAM2L,IAAe,KAAK,IAAI6G,GAAK,KAAK,IAAI,GAAGhH,CAAK,CAAC,GAC/C0pB,IAAQ1iB,IAAM,IAAI7G,IAAe6G,IAAM,GACvC2iB,IAAc,KAAK,MAAMD,IAAQF,CAAQ,GAEzCI,IAAc,CAACC,MAA2B;AAC9C,UAAIA,KAAUF,EAAa,QAAO;AAClC,UAAI30B,MAAY,UAAU;AACxB,YAAI00B,KAAS,KAAM,QAAO;AAC1B,YAAIA,KAAS,IAAK,QAAO;AAAA,MAC3B;AACA,aAAOJ,GAAYt0B,KAAW,QAAQ,KAAKs0B,GAAY;AAAA,IACzD;AAEA,WACE,gBAAApyB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb,EAAG,2BAA2BU,CAAS;AAAA,QAClD,MAAK;AAAA,QACL,iBAAe8L;AAAA,QACf,iBAAe;AAAA,QACf,iBAAe6G;AAAA,QACf,cAAY/J,KAAS,GAAGjI,CAAO;AAAA,QAC9B,GAAGT;AAAA,QAEH,UAAA;AAAA,UAAA0I,KACC,gBAAAxI,EAAC,QAAA,EAAK,WAAU,iFACb,UAAAwI,GACH;AAAA,UAGF,gBAAAxI,EAAC,SAAI,WAAWd,EAAGy1B,GAA2B,EAAE,MAAA1xB,EAAA,CAAM,CAAC,GACpD,gBAAM,KAAK,EAAE,QAAQ8xB,EAAA,CAAU,EAAE,IAAI,CAAC3tB,GAAGC,MACxC,gBAAArH;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAWd;AAAA,gBACT01B,GAAyB,EAAE,SAAAr0B,GAAS;AAAA,gBACpC40B,EAAY9tB,CAAC;AAAA,cAAA;AAAA,YACf;AAAA,YAJKA;AAAA,UAAA,CAMR,GACH;AAAA,UAEC2tB,KACC,gBAAAvyB,EAAC,QAAA,EAAK,WAAU,6DACb,UAAA;AAAA,YAAAiJ;AAAA,YAAa;AAAA,YAAE6G;AAAA,UAAA,EAAA,CAClB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACAuiB,GAAU,cAAc;ACjHxB,MAAMO,KAGF;AAAA,EACF,QAAQ,EAAE,QAAQ,UAAU,OAAO,yBAAyB,UAAU,MAAA;AAAA,EACtE,MAAM,EAAE,QAAQ,UAAU,OAAO,gBAAgB,UAAU,MAAA;AAAA,EAC3D,SAAS,EAAE,QAAQ,UAAU,OAAO,iBAAiB,UAAU,SAAA;AAAA,EAC/D,SAAS,EAAE,QAAQ,UAAU,OAAO,kBAAkB,UAAU,SAAA;AAAA,EAChE,OAAO,EAAE,QAAQ,UAAU,OAAO,oBAAoB,UAAU,YAAA;AAClE,GAuBMC,KAAgB31B,EAAM;AAAA,EAC1B,CACE;AAAA,IACE,WAAAC;AAAA,IACA,SAAA21B;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,YAAAC,IAAa;AAAA,IACb,YAAAC,IAAa;AAAA,IACb,YAAAC,IAAa;AAAA,IACb,WAAAxX,IAAY;AAAA,IACZ,eAAAyX,IAAgB;AAAA,IAChB,GAAG91B;AAAA,EAAA,GAELC,MACG;AACH,UAAM81B,IAAYl2B,EAAM,OAAuB,IAAI;AAEnD,WAAAA,EAAM,UAAU,MAAM;AACpB,MAAIg2B,KAAcE,EAAU,YAC1BA,EAAU,QAAQ,YAAYA,EAAU,QAAQ;AAAA,IAEpD,GAAG,CAACN,GAASI,CAAU,CAAC,GAGtB,gBAAAlzB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb;AAAA,UACT;AAAA,UACAU;AAAA,QAAA;AAAA,QAED,GAAGE;AAAA,QAGH,UAAA;AAAA,UAAA01B,KACC,gBAAA/yB,EAAC,OAAA,EAAI,WAAU,4DACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,cAAA,gBAAAzC,EAAC,QAAA,EAAK,WAAU,2BAAA,CAA2B;AAAA,cAC3C,gBAAAA,EAAC,QAAA,EAAK,WAAU,2BAAA,CAA2B;AAAA,cAC3C,gBAAAA,EAAC,QAAA,EAAK,WAAU,2BAAA,CAA2B;AAAA,YAAA,GAC7C;AAAA,YACA,gBAAAA,EAAC,QAAA,EAAK,WAAU,sFACb,UAAAy1B,EAAA,CACH;AAAA,UAAA,GACF;AAAA,UAIF,gBAAAhzB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKozB;AAAA,cACL,OAAO,EAAE,WAAA1X,EAAA;AAAA,cACT,WAAU;AAAA,cACV,MAAK;AAAA,cACL,aAAU;AAAA,cACV,cAAYsX;AAAA,cAEX,UAAA;AAAA,gBAAAF,EAAQ,WAAW,KAClB,gBAAAv1B,EAAC,OAAA,EAAI,WAAU,kDAAiD,UAAA,cAEhE;AAAA,gBAEDu1B,EAAQ,IAAI,CAACtuB,GAAOI,MAAM;AACzB,wBAAMsI,IAAM0lB,GAAWpuB,EAAM,KAAK,GAC5BjB,IAAMiB,EAAM,MAAMI;AACxB,yBACE,gBAAA5E;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBAEC,WAAU;AAAA,sBAGV,UAAA;AAAA,wBAAA,gBAAAzC;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,WAAWd;AAAA,8BACT;AAAA,8BACA;AAAA,8BACAyQ,EAAI;AAAA,4BAAA;AAAA,4BAGL,UAAAA,EAAI;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAINimB,KACC,gBAAA51B,EAAC,QAAA,EAAK,WAAU,iDACb,UAAAiH,EAAM,cACL,oBAAI,KAAA,GAAO,YAAA,EAAc,MAAM,GAAG,EAAE,EAAE,QAAQ,KAAK,GAAG,GAC1D;AAAA,wBAIF,gBAAAjH,EAAC,QAAA,EAAK,WAAU,4BACb,YAAM,QAAA,CACT;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAzBKgG;AAAA,kBAAA;AAAA,gBA4BX,CAAC;AAAA,gBAGA0vB,KACC,gBAAAjzB,EAAC,OAAA,EAAI,WAAU,8CACb,UAAA;AAAA,kBAAA,gBAAAzC,EAAC,QAAA,EAAK,WAAU,oBAAA,CAAoB;AAAA,kBACpC,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,eAAW;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACb,EAAA,CACF;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACAs1B,GAAc,cAAc;AC/I5B,MAAMQ,KAAyBz1B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAEM01B,KAAwB11B;AAAA,EAC5B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC;AAYA,SAAS21B,GAAgBC,GAA4B;AACnD,QAAM7kB,IAAQ,KAAK,IAAI,GAAG6kB,IAAW,KAAK,KAAK,GACzCrb,IAAU,KAAK,MAAOxJ,IAAQ,MAAQ,EAAE,GACxC8kB,IAAU,KAAK,MAAO9kB,IAAQ,MAAO,KAAM,EAAE,GAC7C+kB,IAAQ,KAAK,MAAO/kB,KAAS,MAAO,KAAK,MAAO,EAAE;AAExD,SAAO,EAAE,MADI,KAAK,MAAMA,KAAS,MAAO,KAAK,KAAK,GAAG,GACtC,OAAA+kB,GAAO,SAAAD,GAAS,SAAAtb,GAAS,OAAAxJ,EAAA;AAC1C;AAEA,SAASglB,GAAKxjB,GAAW;AACvB,SAAO,OAAOA,CAAC,EAAE,SAAS,GAAG,GAAG;AAClC;AAkBA,SAASyjB,EAAS;AAAA,EAChB,OAAA9qB;AAAA,EACA,MAAAokB;AAAA,EACA,MAAA1sB;AACF,GAIG;AACD,SACE,gBAAAR,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,IAAA,gBAAAzC,EAAC,UAAK,WAAW81B,GAAuB,EAAE,MAAA7yB,GAAM,GAAI,UAAAsI,GAAM;AAAA,IAC1D,gBAAAvL,EAAC,UAAK,WAAW+1B,GAAsB,EAAE,MAAA9yB,EAAA,CAAM,GAAI,UAAA0sB,EAAA,CAAK;AAAA,EAAA,GAC1D;AAEJ;AAIA,SAAS2G,GAAM,EAAE,MAAArzB,KAAyD;AAGxE,SACE,gBAAAjD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWd;AAAA,QACT;AAAA,QAJJ+D,MAAS,OAAO,YAAYA,MAAS,OAAO,aAAa;AAAA,MAKrD;AAAA,MAEH,UAAA;AAAA,IAAA;AAAA,EAAA;AAIL;AAIA,MAAMszB,KAAiB52B,EAAM;AAAA,EAC3B,CACE;AAAA,IACE,WAAAC;AAAA,IACA,YAAA42B;AAAA,IACA,SAASC;AAAA,IACT,YAAA9gB;AAAA,IACA,OAAAnN;AAAA,IACA,cAAAkuB,IAAe;AAAA,IACf,UAAAC,IAAW;AAAA,IACX,MAAA1zB;AAAA,IACA,GAAGnD;AAAA,EAAA,GAELC,MACG;AACH,UAAMk2B,IAAWt2B,EAAM,QAAQ,MACzB62B,IAAmB,IAAI,KAAKA,CAAU,EAAE,QAAA,IACxCC,MAAoB,SACf,KAAK,QAAQA,IAAkB,MACjC,KAAK,IAAA,GACX,CAACD,GAAYC,CAAe,CAAC,GAE1B,CAACG,GAAUC,CAAW,IAAIl3B,EAAM;AAAA,MAAmB,MACvDq2B,GAAgBC,CAAQ;AAAA,IAAA,GAGpBa,IAAen3B,EAAM,OAAO,EAAK;AAEvC,IAAAA,EAAM,UAAU,MAAM;AACpB,MAAAm3B,EAAa,UAAU;AAEvB,YAAMpE,IAAO,MAAM;AACjB,cAAMqE,IAAKf,GAAgBC,CAAQ;AACnC,QAAAY,EAAYE,CAAE,GACVA,EAAG,UAAU,KAAK,CAACD,EAAa,YAClCA,EAAa,UAAU,IACvBnhB,KAAA,QAAAA;AAAA,MAEJ;AAEA,MAAA+c,EAAA;AACA,YAAM5wB,IAAK,YAAY4wB,GAAM,GAAI;AACjC,aAAO,MAAM,cAAc5wB,CAAE;AAAA,IAC/B,GAAG,CAACm0B,GAAUtgB,CAAU,CAAC;AAEzB,UAAMqhB,IAAYr3B,EAAM;AAAA,MACtB,MACE,cAAci3B,EAAS,IAAI,SAASA,EAAS,KAAK,UAAUA,EAAS,OAAO,YAAYA,EAAS,OAAO;AAAA,MAC1G,CAACA,EAAS,MAAMA,EAAS,OAAOA,EAAS,OAAO;AAAA,IAAA,GAG5CK,IAAcN,KAAY,EAAED,KAAgBE,EAAS,SAAS;AAEpE,WACE,gBAAAn0B;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1C;AAAA,QACA,WAAWb,EAAG,oCAAoCU,CAAS;AAAA,QAC3D,MAAK;AAAA,QACL,cAAYo3B;AAAA,QACZ,aAAU;AAAA,QACT,GAAGl3B;AAAA,QAEH,UAAA;AAAA,UAAA0I,KACC,gBAAAxI,EAAC,KAAA,EAAE,WAAU,yEACV,UAAAwI,GACH;AAAA,UAGF,gBAAA/F,EAAC,OAAA,EAAI,WAAU,wBACZ,UAAA;AAAA,YAAAw0B,KACC,gBAAAx0B,EAAA4S,GAAA,EACE,UAAA;AAAA,cAAA,gBAAArV,EAACq2B,GAAA,EAAS,OAAO,OAAOO,EAAS,IAAI,GAAG,MAAK,QAAO,MAAA3zB,GAAY;AAAA,cAChE,gBAAAjD,EAACs2B,MAAM,MAAArzB,EAAA,CAAY;AAAA,YAAA,GACrB;AAAA,YAEF,gBAAAjD,EAACq2B,KAAS,OAAOD,GAAKQ,EAAS,KAAK,GAAG,MAAK,OAAM,MAAA3zB,GAAY;AAAA,YAC9D,gBAAAjD,EAACs2B,MAAM,MAAArzB,GAAY;AAAA,YACnB,gBAAAjD,EAACq2B,KAAS,OAAOD,GAAKQ,EAAS,OAAO,GAAG,MAAK,OAAM,MAAA3zB,GAAY;AAAA,YAChE,gBAAAjD,EAACs2B,MAAM,MAAArzB,GAAY;AAAA,YACnB,gBAAAjD,EAACq2B,KAAS,OAAOD,GAAKQ,EAAS,OAAO,GAAG,MAAK,OAAM,MAAA3zB,EAAA,CAAY;AAAA,UAAA,EAAA,CAClE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACAszB,GAAe,cAAc;ACjK7B,SAASW,GAAc;AAAA,EACrB,QAAA3xB;AAAA,EACA,WAAAwb;AACF,GAGG;AACD,SAAKxb,sBAGF,QAAA,EAAK,WAAU,iCACb,UAAAwb,MAAc,QAAQ,MAAM,KAC/B,IAJO,gBAAA/gB,EAAC,QAAA,EAAK,WAAU,6CAA4C,UAAA,KAAC;AAMxE;AAIA,SAASm3B,GAAY,EAAE,UAAAC,KAAkC;AACvD,2BACG,MAAA,EACE,UAAA,MAAM,KAAK,EAAE,QAAQA,EAAA,CAAU,EAAE,IAAI,CAAChwB,GAAGC,MACxC,gBAAArH,EAAC,MAAA,EAAW,WAAU,oCACpB,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWd;AAAA,QACT;AAAA,QACAmI,MAAM,IAAI,UAAUA,IAAI,MAAM,IAAI,UAAU;AAAA,MAAA;AAAA,IAC9C;AAAA,EAAA,KALKA,CAOT,CACD,GACH;AAEJ;AAIA,MAAMgwB,KAAc;AAAA,EAClB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AACT;AAIA,SAASC,GACP;AAAA,EACE,WAAA13B;AAAA,EACA,SAAAmP;AAAA,EACA,MAAAqhB;AAAA,EACA,SAAAmH;AAAA,EACA,eAAAxT;AAAA,EACA,QAAAC;AAAA,EACA,YAAAwT,IAAa;AAAA,EACb,iBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAv0B,IAAU;AAAA,EACV,cAAAw0B,IAAe;AAAA,EACf,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,GAAG/3B;AACL,GACAC,GACA;AACA,QAAM+3B,IAAc,IAAI,IAAIL,KAAmB,CAAA,CAAE;AAEjD,SACE,gBAAAz3B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWb,EAAG,0BAA0BU,CAAS;AAAA,MAChD,GAAGE;AAAA,MAEJ,UAAA,gBAAA2C,EAAC,SAAA,EAAM,WAAU,0BAAyB,MAAK,QAC5C,UAAA;AAAA,QAAAo1B,KAAW,gBAAA73B,EAAC,WAAA,EAAQ,WAAU,WAAW,UAAA63B,GAAQ;AAAA,0BAGjD,SAAA,EACC,UAAA,gBAAA73B,EAAC,QACE,UAAA+O,EAAQ,IAAI,CAACgpB,MAAQ;AACpB,gBAAMC,IAAeT,MAAYQ,EAAI;AACrC,iBACE,gBAAAt1B;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,OAAM;AAAA,cACN,WAAWvD;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA64B,EAAI,SAAS;AAAA,gBACbV,GAAYU,EAAI,SAAS,MAAM;AAAA,gBAC/BA,EAAI,YACF;AAAA,cAAA;AAAA,cAEJ,aACEA,EAAI,YAAYC,IACZjU,MAAkB,QAChB,cACA,eACF;AAAA,cAEN,SAASgU,EAAI,WAAW,MAAM/T,KAAA,gBAAAA,EAAS+T,EAAI,OAAO;AAAA,cAEjD,UAAA;AAAA,gBAAAA,EAAI;AAAA,gBACJA,EAAI,YACH,gBAAA/3B;AAAA,kBAACk3B;AAAA,kBAAA;AAAA,oBACC,QAAQc;AAAA,oBACR,WAAWjU;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACb;AAAA,YAAA;AAAA,YAxBGgU,EAAI;AAAA,UAAA;AAAA,QA4Bf,CAAC,GACH,GACF;AAAA,QAGA,gBAAA/3B,EAAC,WACE,UAAAmD,IACC,MAAM,KAAK,EAAE,QAAQw0B,GAAc,EAAE,IAAI,CAACvwB,GAAGC,MAC3C,gBAAArH,EAACm3B,IAAA,EAAoB,UAAUpoB,EAAQ,UAArB1H,CAA6B,CAChD,IACC+oB,EAAK,WAAW,IAClB,gBAAApwB,EAAC,QACC,UAAA,gBAAAA,EAAC,MAAA,EAAG,SAAS+O,EAAQ,QAAQ,WAAU,0BACpC,UAAA6oB,KACC,gBAAA53B,EAAC,UAAK,WAAU,2EAA0E,qBAE1F,EAAA,CAEJ,EAAA,CACF,IAEAowB,EAAK,IAAI,CAAC6H,GAAKC,MAAW;AACxB,gBAAMne,IAAayd,KAAcM,EAAY,IAAII,CAAM,GACjDC,IAASD,IAAS,MAAM;AAC9B,iBACE,gBAAAl4B;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,iBAAew3B,IAAazd,IAAa;AAAA,cACzC,UAAUyd,IAAa,IAAI;AAAA,cAC3B,SACEA,IAAa,MAAME,KAAA,gBAAAA,EAAaO,GAAKC,KAAU;AAAA,cAEjD,WACEV,IACI,CAAC5zB,MAAM;AACL,iBAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SACjCA,EAAE,eAAA,GACF8zB,KAAA,QAAAA,EAAaO,GAAKC;AAAA,cAEtB,IACA;AAAA,cAEN,WAAWh5B;AAAA,gBACT;AAAA,gBACA6a,IACI,sBACAoe,IACE,yCACA;AAAA,gBACNX,KAAc;AAAA,cAAA;AAAA,cAGf,UAAAzoB,EAAQ,IAAI,CAACgpB,MACZ,gBAAA/3B;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAWd;AAAA,oBACT;AAAA,oBACAm4B,GAAYU,EAAI,SAAS,MAAM;AAAA,kBAAA;AAAA,kBAGhC,UAAAA,EAAI,OACDA,EAAI,KAAKE,GAAKC,CAAM,IACnBD,EAAIF,EAAI,GAAG;AAAA,gBAAA;AAAA,gBARXA,EAAI;AAAA,cAAA,CAUZ;AAAA,YAAA;AAAA,YAtCIG;AAAA,UAAA;AAAA,QAyCX,CAAC,EAAA,CAEL;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAME,KAAgBz4B,EAAM,WAAW23B,EAAkB;AAMxDc,GAA2C,cAAc;AC9M1D,MAAMC,KAAa14B,EAAM;AAAA,EACvB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,MAAA04B,IAAO;AAAA,IACP,MAAAC,IAAO;AAAA,IACP,SAAAC,IAAU;AAAA,IACV,KAAAC,IAAM;AAAA,IACN,aAAAC,IAAc;AAAA,IACd,mBAAAC,IAAoB;AAAA,IACpB,YAAA7J,IAAa;AAAA,IACb,QAAQ8J,IAAW;AAAA,IACnB,GAAG94B;AAAA,EAAA,GAELC,MACG;AACH,UAAMqR,IAAQknB,IAAOC,GACf,CAACM,GAAYC,CAAa,IAAIn5B,EAAM;AAAA,MACxC,0BAAU,IAAA;AAAA,IAAY,GAGlBo5B,IAAiBp5B,EAAM,QAAQ,MAC/B,OAAO,SAAW,MAAoB,KACnC,OAAO,WAAW,kCAAkC,EAAE,SAC5D,CAAA,CAAE;AAEL,WAAAA,EAAM,UAAU,MAAM;AACpB,UAAIi5B,KAAYG,EAAgB;AAEhC,YAAMj3B,IAAK,YAAY,MAAM;AAC3B,QAAAg3B,EAAc,CAAC7b,MAAS;AACtB,gBAAMpK,IAAO,IAAI,IAAIoK,CAAI;AACzB,mBAAS5V,IAAI,GAAGA,IAAI+J,GAAO/J;AACzB,YAAI,KAAK,OAAA,IAAWsxB,KAClB9lB,EAAK,IAAIxL,CAAC;AAGd,qBAAW2xB,KAAOnmB;AAChB,YAAI,KAAK,OAAA,IAAW,OAAKA,EAAK,OAAOmmB,CAAG;AAE1C,iBAAOnmB;AAAA,QACT,CAAC;AAAA,MACH,GAAGic,CAAU;AAEb,aAAO,MAAM,cAAchtB,CAAE;AAAA,IAC/B,GAAG,CAAC82B,GAAUG,GAAgB3nB,GAAOunB,GAAmB7J,CAAU,CAAC,GAGjE,gBAAA9uB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,WAAWb,EAAG,mBAAmBU,CAAS;AAAA,QAC1C,eAAY;AAAA,QACX,GAAGE;AAAA,QAEJ,UAAA,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,qBAAqB,UAAUs4B,CAAI,KAAKE,CAAO;AAAA,cAC/C,KAAK,GAAGC,CAAG;AAAA,YAAA;AAAA,YAGZ,UAAA,MAAM,KAAK,EAAE,QAAQrnB,GAAO,EAAE,IAAI,CAAChK,GAAGC,MACrC,gBAAArH;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,OAAO,EAAE,OAAOw4B,GAAS,QAAQA,EAAA;AAAA,gBACjC,WAAWt5B;AAAA,kBACT;AAAA,kBACA05B,KAAYG,IAAiB,eAAe;AAAA,kBAC5CF,EAAW,IAAIxxB,CAAC,IACZnI,EAAG,eAAew5B,CAAW,IAC7B;AAAA,gBAAA;AAAA,cACN;AAAA,cARKrxB;AAAA,YAAA,CAUR;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAGN;AACF;AACAgxB,GAAW,cAAc;AC3FzB,MAAMY,KAAwB54B,EAAI,yBAAyB;AAAA,EACzD,UAAU;AAAA,IACR,OAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,iBAAiB,EAAE,OAAO,UAAA;AAC5B,CAAC,GAiBK64B,KAAyC;AAAA,EAC7C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AACR,GAEMC,KAAgBx5B,EAAM;AAAA,EAC1B,CACE;AAAA,IACE,WAAAC;AAAA,IACA,UAAAw5B,IAAW;AAAA,IACX,UAAAC,IAAW;AAAA,IACX,QAAAlrB,IAAS;AAAA,IACT,OAAAygB,IAAQ;AAAA,IACR,QAAA0K,IAAS;AAAA,IACT,OAAA7Q;AAAA,IACA,OAAAC;AAAA,IACA,GAAG5oB;AAAA,EAAA,GAELC,MACG;AACH,UAAMumB,IAAW4S,GAAetK,CAAK,KAAKsK,GAAe,QAEnDK,IAAO55B,EAAM;AAAA,MACjB,MACE,MAAM,KAAK,EAAE,QAAQy5B,KAAY,CAAChyB,GAAGC,OAAO;AAAA,QAC1C,OAAO,IAAKA,IAAI,OAAQ,KAAK,QAAQ,CAAC,CAAC;AAAA,MAAA,EACvC;AAAA,MACJ,CAAC+xB,CAAQ;AAAA,IAAA;AAGX,WACE,gBAAAp5B;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAD;AAAA,QACA,WAAWb,EAAG+5B,GAAsB,EAAE,OAAAxQ,EAAA,CAAO,GAAG7oB,CAAS;AAAA,QACzD,OAAO,EAAE,QAAAuO,GAAQ,GAAGua,EAAA;AAAA,QACpB,eAAY;AAAA,QACX,GAAG5oB;AAAA,QAEH,UAAAy5B,EAAK,IAAI,CAACC,GAAKnyB,MACd,gBAAArH;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,OAAOq5B;AAAA,cACP,QAAQ;AAAA,cACR,iBAAiB;AAAA,cACjB,WAAW,iBAAiB/S,CAAQ;AAAA,cACpC,gBAAgBkT,EAAI;AAAA,cACpB,oBAAoBF,IAAS,WAAW;AAAA,YAAA;AAAA,UAC1C;AAAA,UATKjyB;AAAA,QAAA,CAWR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AACA8xB,GAAc,cAAc;"}
|