@nationaldesignstudio/react 0.5.6 → 0.6.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/index.d.ts +290 -7
- package/dist/index.js +95 -17
- package/dist/index.js.map +1 -1
- package/package.json +7 -5
- package/src/components/organisms/card/card.tsx +87 -12
- package/src/components/sections/hero/hero.tsx +35 -0
- package/src/theme/index.ts +4 -0
- package/src/theme/theme-provider.tsx +48 -8
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/components/atoms/accordion/accordion.tsx","../src/components/atoms/background/background.tsx","../src/components/atoms/blurred-video-backdrop/blurred-video-backdrop.tsx","../src/lib/theme.ts","../src/components/atoms/button/button.tsx","../src/components/atoms/button/icon-button.tsx","../src/lib/form-control.ts","../src/components/atoms/input/input.tsx","../src/components/atoms/input/input-group.tsx","../src/components/atoms/ndstudio-footer/ndstudio-footer.tsx","../src/components/atoms/pager-control/pager-control.tsx","../src/components/shared/floating-arrow.tsx","../src/components/atoms/popover/popover.tsx","../src/components/atoms/select/select.tsx","../src/components/atoms/tooltip/tooltip.tsx","../src/components/atoms/video-player/caption-overlay.tsx","../src/hooks/use-captions.ts","../src/hooks/use-video-keyboard.ts","../src/components/atoms/video-player/video-player.tsx","../src/components/dev-tools/grid-overlay/grid-overlay.tsx","../src/components/dev-tools/dev-toolbar/dev-toolbar.tsx","../src/components/molecules/dialog/dialog.tsx","../src/components/molecules/video-dialog/video-dialog.tsx","../src/components/molecules/video-with-backdrop/video-with-backdrop.tsx","../src/components/organisms/card/card.tsx","../src/components/organisms/navbar/navbar.tsx","../src/components/organisms/us-gov-banner/us-gov-banner.tsx","../src/components/sections/banner/banner.tsx","../src/components/sections/card-grid/card-grid.tsx","../src/components/sections/two-column-section/two-column-section.tsx","../src/components/sections/faq-section/faq-section.tsx","../src/components/sections/hero/hero.tsx","../src/components/sections/prose/prose.tsx","../src/components/sections/quote-block/quote-block.tsx","../src/components/sections/river/river.tsx","../src/components/sections/tout/tout.tsx","../src/hooks/use-breakpoint.ts","../src/hooks/use-event-listener.ts","../../tokens/src/collections/types.ts","../../tokens/src/merge.ts","../../tokens/src/semantic/color/base.ts","../../design-tokens-format/src/definitions/tokenTypes.ts","../../design-tokens-format/src/utils/colorConversions.ts","../../tokens/src/utils.ts","../../tokens/src/semantic/color/bop.ts","../../tokens/src/semantic/color/civic.ts","../../tokens/src/semantic/color/dark.ts","../../tokens/src/semantic/color/darktech.ts","../../tokens/src/semantic/color/institution.ts","../../tokens/src/semantic/color/oceana.ts","../../tokens/src/semantic/color/recreation.ts","../../tokens/src/semantic/surface/base.ts","../../tokens/src/semantic/surface/framed.ts","../../tokens/src/semantic/surface/sharp.ts","../../tokens/src/semantic/surface/soft.ts","../../tokens/src/semantic/typography/base.ts","../../tokens/src/semantic/spatial/base.ts","../../tokens/src/theme-registry.ts","../../tokens/src/themes/resolver.ts","../../tokens/src/primitives/animation.ts","../../tokens/src/primitives/breakpoints.ts","../../tokens/src/primitives/colors.ts","../../tokens/src/primitives/opacity.ts","../../tokens/src/primitives/radii.ts","../../tokens/src/primitives/shadow.ts","../../tokens/src/primitives/spacing.ts","../../tokens/src/primitives/typography.ts","../../tokens/src/types.ts","../../tokens/src/tokens.ts","../src/theme/theme-provider.tsx","../src/theme/hooks.ts","../src/theme/utils.ts"],"names":["twMerge","React","BaseAccordion","tv","React2","jsx","React3","jsxs","React4","BaseButton","useRender","React5","React6","React7","duration","BasePopover","React8","BaseSelect","React9","BaseTooltip","React10","React11","React12","React13","useState","useRef","useCallback","useEffect","Fragment","BaseDialog","React15","React16","React17","React18","React19","Dialog","React20","React21","React22","React23","React24","React25","React26","React27","React28","React29","React30","React31","createContext","deepMerge","tokens","useMemo","useContext"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { cnBase as twMerge } from \"tailwind-variants\";\n\nexport { twMerge };\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { Accordion as BaseAccordion } from \"@base-ui-components/react/accordion\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n// =============================================================================\n// Accordion Variants\n// =============================================================================\n\nconst accordionVariants = tv({\n\tbase: \"flex flex-col\",\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"\",\n\t\t\tlight: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\nconst accordionItemVariants = tv({\n\tbase: \"border-b overflow-hidden\",\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"border-gray-300\",\n\t\t\tlight: \"border-gray-500\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\nconst accordionTriggerVariants = tv({\n\tbase: [\n\t\t// Uses primitive spacing tokens\n\t\t\"flex w-full items-center justify-between py-24 text-left\",\n\t\t\"typography-body-large transition-colors cursor-pointer\",\n\t],\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"text-gray-100 data-[open]:text-white\",\n\t\t\tlight: \"text-gray-800 data-[open]:text-gray-900\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\nconst accordionPanelVariants = tv({\n\t// Uses primitive spacing tokens\n\tbase: \"typography-body-large pb-24\",\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"text-gray-100\",\n\t\t\tlight: \"text-gray-800\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\n// =============================================================================\n// Accordion Context\n// =============================================================================\n\nconst AccordionContext = React.createContext<{\n\tcolorScheme: \"dark\" | \"light\";\n}>({\n\tcolorScheme: \"light\",\n});\n\n// =============================================================================\n// Accordion\n// =============================================================================\n\nexport interface AccordionProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof accordionVariants> {\n\t/**\n\t * Allow multiple items to be expanded at once\n\t * @default false\n\t */\n\tallowMultiple?: boolean;\n\t/**\n\t * The ID(s) of items that should be expanded by default\n\t */\n\tdefaultExpanded?: string | string[];\n\tchildren: React.ReactNode;\n}\n\n/**\n * Accordion component for expandable/collapsible content sections.\n * Built on Base UI's Accordion primitive.\n *\n * Variants:\n * - light: Light theme styling (default)\n * - dark: Dark theme styling\n *\n * @example\n * ```tsx\n * <Accordion defaultExpanded=\"item-1\" variant=\"dark\">\n * <AccordionItem id=\"item-1\" title=\"Question 1\">\n * Answer to question 1\n * </AccordionItem>\n * <AccordionItem id=\"item-2\" title=\"Question 2\">\n * Answer to question 2\n * </AccordionItem>\n * </Accordion>\n * ```\n */\nconst Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tallowMultiple = false,\n\t\t\tdefaultExpanded,\n\t\t\tcolorScheme = \"light\",\n\t\t\tchildren,\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Normalize defaultExpanded to array format for Base UI\n\t\tconst defaultValue = React.useMemo((): string[] | undefined => {\n\t\t\tif (!defaultExpanded) return undefined;\n\t\t\tif (Array.isArray(defaultExpanded)) return defaultExpanded;\n\t\t\treturn [defaultExpanded];\n\t\t}, [defaultExpanded]);\n\n\t\treturn (\n\t\t\t<AccordionContext.Provider value={{ colorScheme }}>\n\t\t\t\t<BaseAccordion.Root\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={accordionVariants({ colorScheme, class: className })}\n\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\tmultiple={allowMultiple}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</BaseAccordion.Root>\n\t\t\t</AccordionContext.Provider>\n\t\t);\n\t},\n);\nAccordion.displayName = \"Accordion\";\n\n// =============================================================================\n// AccordionItem\n// =============================================================================\n\nexport interface AccordionItemProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n\t/**\n\t * Unique identifier for this item\n\t */\n\tid: string;\n\t/**\n\t * The question/title displayed in the header\n\t */\n\ttitle: string;\n\t/**\n\t * The answer/content revealed when expanded\n\t */\n\tchildren: React.ReactNode;\n}\n\n/**\n * Individual accordion item with collapsible content.\n * Must be used within an Accordion component.\n */\nconst AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n\t({ className, id, title, children }, ref) => {\n\t\tconst { colorScheme } = React.useContext(AccordionContext);\n\n\t\treturn (\n\t\t\t<BaseAccordion.Item\n\t\t\t\tref={ref}\n\t\t\t\tvalue={id}\n\t\t\t\tclassName={accordionItemVariants({ colorScheme, class: className })}\n\t\t\t>\n\t\t\t\t{/* Header - always visible */}\n\t\t\t\t<BaseAccordion.Header>\n\t\t\t\t\t<BaseAccordion.Trigger\n\t\t\t\t\t\tclassName={accordionTriggerVariants({ colorScheme })}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>{title}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-base transition-transform duration-200\",\n\t\t\t\t\t\t\t\t\"[[data-open]_&]:rotate-45\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t+\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</BaseAccordion.Trigger>\n\t\t\t\t</BaseAccordion.Header>\n\n\t\t\t\t{/* Content - collapsible */}\n\t\t\t\t<BaseAccordion.Panel\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"h-[var(--accordion-panel-height)] overflow-hidden\",\n\t\t\t\t\t\t\"transition-[height] duration-300 ease-out\",\n\t\t\t\t\t\t\"[&[data-starting-style]]:h-0 [&[data-ending-style]]:h-0\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className={accordionPanelVariants({ colorScheme })}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</BaseAccordion.Panel>\n\t\t\t</BaseAccordion.Item>\n\t\t);\n\t},\n);\nAccordionItem.displayName = \"AccordionItem\";\n\nexport { Accordion, AccordionItem, accordionVariants };\n","\"use client\";\n\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\n// =============================================================================\n// Background Atomic Component\n// =============================================================================\n\nconst backgroundVariants = tv({\n\tbase: \"absolute inset-0\",\n});\n\n/**\n * Base container for background composition.\n * Use as a wrapper to compose multiple background layers (image, video, overlay, gradient).\n *\n * @example\n * ```tsx\n * <Background>\n * <Background.Image src=\"/hero.jpg\" />\n * <Background.Overlay opacity={0.4} />\n * <Background.Gradient direction=\"to-t\" from=\"black\" to=\"transparent\" />\n * </Background>\n * ```\n */\nexport interface BackgroundProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst Background = React.forwardRef<HTMLDivElement, BackgroundProps>(\n\t({ className, children, ...props }, ref) => (\n\t\t<div\n\t\t\tref={ref}\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={backgroundVariants({ class: className })}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t),\n);\nBackground.displayName = \"Background\";\n\n// =============================================================================\n// Background.Image\n// =============================================================================\n\nconst backgroundImageVariants = tv({\n\tbase: \"absolute inset-0 size-full object-cover\",\n});\n\nexport interface BackgroundImageProps\n\textends useRender.ComponentProps<\"img\">,\n\t\tOmit<React.ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"render\"> {\n\t/**\n\t * URL for the background image\n\t */\n\tsrc: string;\n\t/**\n\t * Object position (default: \"center\")\n\t */\n\tposition?: string;\n}\n\n/**\n * Background image layer using an actual img element with object-cover.\n * Supports native lazy loading, srcset, and better accessibility.\n * Supports render prop for element composition.\n */\nfunction BackgroundImage(props: BackgroundImageProps) {\n\tconst {\n\t\tclassName,\n\t\tsrc,\n\t\tposition = \"center\",\n\t\talt = \"\",\n\t\tstyle,\n\t\trender,\n\t\t...otherProps\n\t} = props;\n\n\tconst imgClassName = backgroundImageVariants({ class: className });\n\tconst imgStyle = { objectPosition: position, ...style };\n\n\treturn useRender({\n\t\trender,\n\t\tprops: {\n\t\t\tsrc,\n\t\t\talt,\n\t\t\tclassName: imgClassName,\n\t\t\tstyle: imgStyle,\n\t\t\t...otherProps,\n\t\t},\n\t\tdefaultTagName: \"img\",\n\t});\n}\nBackgroundImage.displayName = \"Background.Image\";\n\n// =============================================================================\n// Background.Video\n// =============================================================================\n\nconst backgroundVideoVariants = tv({\n\tbase: \"absolute inset-0 size-full object-cover\",\n});\n\nexport interface BackgroundVideoProps\n\textends useRender.ComponentProps<\"video\">,\n\t\tOmit<\n\t\t\tReact.VideoHTMLAttributes<HTMLVideoElement>,\n\t\t\t\"children\" | \"render\" | \"src\"\n\t\t> {\n\t/**\n\t * URL for the video source\n\t */\n\tsrc: string;\n\t/**\n\t * Video MIME type (default: auto-detected from src)\n\t */\n\ttype?: string;\n\t/**\n\t * Poster image URL shown before video loads\n\t */\n\tposter?: string;\n}\n\n/**\n * Background video layer using HTML5 video element.\n * Supports render prop for element composition.\n */\nfunction BackgroundVideo(props: BackgroundVideoProps) {\n\tconst {\n\t\tclassName,\n\t\tsrc,\n\t\ttype,\n\t\tposter,\n\t\tautoPlay = true,\n\t\tloop = true,\n\t\tmuted = true,\n\t\tplaysInline = true,\n\t\trender,\n\t\tchildren,\n\t\t...otherProps\n\t} = props;\n\n\tconst videoClassName = backgroundVideoVariants({ class: className });\n\n\t// useRender must be called unconditionally\n\tconst rendered = useRender({\n\t\trender,\n\t\tprops: {\n\t\t\tautoPlay,\n\t\t\tloop,\n\t\t\tmuted,\n\t\t\tplaysInline,\n\t\t\tposter,\n\t\t\tclassName: videoClassName,\n\t\t\t...otherProps,\n\t\t},\n\t\tdefaultTagName: \"video\",\n\t});\n\n\t// If no render prop, return video with source child\n\tif (!render) {\n\t\treturn (\n\t\t\t<video\n\t\t\t\tautoPlay={autoPlay}\n\t\t\t\tloop={loop}\n\t\t\t\tmuted={muted}\n\t\t\t\tplaysInline={playsInline}\n\t\t\t\tposter={poster}\n\t\t\t\tclassName={videoClassName}\n\t\t\t\t{...otherProps}\n\t\t\t>\n\t\t\t\t<source src={src} type={type} />\n\t\t\t</video>\n\t\t);\n\t}\n\n\treturn rendered;\n}\nBackgroundVideo.displayName = \"Background.Video\";\n\n// =============================================================================\n// Background.Stream\n// =============================================================================\n\nconst backgroundStreamVariants = tv({\n\tbase: \"absolute inset-0 size-full border-0 scale-[1.5] object-cover\",\n});\n\nexport interface BackgroundStreamProps\n\textends React.IframeHTMLAttributes<HTMLIFrameElement> {\n\t/**\n\t * Cloudflare Stream video ID\n\t */\n\tvideoId: string;\n\t/**\n\t * Poster image URL (Cloudflare Stream thumbnail or custom)\n\t */\n\tposter?: string;\n\t/**\n\t * Whether the video should autoplay (default: true)\n\t */\n\tautoplay?: boolean;\n\t/**\n\t * Whether the video should loop (default: true)\n\t */\n\tloop?: boolean;\n\t/**\n\t * Whether the video should be muted (default: true)\n\t */\n\tmuted?: boolean;\n\t/**\n\t * Whether to show playback controls (default: false)\n\t */\n\tcontrols?: boolean;\n\t/**\n\t * Custom Cloudflare customer subdomain (if using custom domains)\n\t */\n\tcustomerSubdomain?: string;\n}\n\n/**\n * Background video layer using Cloudflare Stream.\n */\nconst BackgroundStream = React.forwardRef<\n\tHTMLIFrameElement,\n\tBackgroundStreamProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvideoId,\n\t\t\tposter,\n\t\t\tautoplay = true,\n\t\t\tloop = true,\n\t\t\tmuted = true,\n\t\t\tcontrols = false,\n\t\t\tcustomerSubdomain,\n\t\t\ttitle = \"Background video\",\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst baseUrl = customerSubdomain\n\t\t\t? `https://${customerSubdomain}.cloudflarestream.com`\n\t\t\t: \"https://iframe.videodelivery.net\";\n\n\t\tconst params = new URLSearchParams();\n\t\tif (autoplay) params.set(\"autoplay\", \"true\");\n\t\tif (loop) params.set(\"loop\", \"true\");\n\t\tif (muted) params.set(\"muted\", \"true\");\n\t\tif (!controls) params.set(\"controls\", \"false\");\n\t\tif (poster) params.set(\"poster\", poster);\n\t\tparams.set(\"preload\", \"auto\");\n\n\t\tconst streamUrl = `${baseUrl}/${videoId}?${params.toString()}`;\n\n\t\treturn (\n\t\t\t<iframe\n\t\t\t\tref={ref}\n\t\t\t\tsrc={streamUrl}\n\t\t\t\ttitle={title}\n\t\t\t\tallow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n\t\t\t\tallowFullScreen\n\t\t\t\tclassName={backgroundStreamVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nBackgroundStream.displayName = \"Background.Stream\";\n\n// =============================================================================\n// Background.Overlay\n// =============================================================================\n\nconst backgroundOverlayVariants = tv({\n\tbase: \"absolute inset-0 bg-bg-overlay\",\n});\n\nexport interface BackgroundOverlayProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * Overlay opacity (0-1)\n\t */\n\topacity?: number;\n}\n\n/**\n * Solid color overlay layer. Uses semantic bg-overlay token by default.\n * Override with className for different colors.\n */\nconst BackgroundOverlay = React.forwardRef<\n\tHTMLDivElement,\n\tBackgroundOverlayProps\n>(({ className, opacity = 0.4, style, ...props }, ref) => (\n\t<div\n\t\tref={ref}\n\t\taria-hidden=\"true\"\n\t\tclassName={backgroundOverlayVariants({ class: className })}\n\t\tstyle={{\n\t\t\topacity,\n\t\t\t...style,\n\t\t}}\n\t\t{...props}\n\t/>\n));\nBackgroundOverlay.displayName = \"Background.Overlay\";\n\n// =============================================================================\n// Background.Gradient\n// =============================================================================\n\nconst backgroundGradientVariants = tv({\n\tbase: \"absolute inset-0\",\n});\n\nexport interface BackgroundGradientProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * Gradient direction (Tailwind convention: to-t, to-b, to-l, to-r, etc.)\n\t * Or CSS gradient direction (to top, to bottom, 45deg, etc.)\n\t */\n\tdirection?: string;\n\t/**\n\t * Starting color (from)\n\t */\n\tfrom?: string;\n\t/**\n\t * Optional middle color (via)\n\t */\n\tvia?: string;\n\t/**\n\t * Ending color (to)\n\t */\n\tto?: string;\n\t/**\n\t * Full custom gradient string (overrides from/via/to)\n\t */\n\tgradient?: string;\n}\n\n/**\n * Gradient overlay layer. Use for fading backgrounds or creating depth.\n */\nconst BackgroundGradient = React.forwardRef<\n\tHTMLDivElement,\n\tBackgroundGradientProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tdirection = \"to-b\",\n\t\t\tfrom = \"transparent\",\n\t\t\tvia,\n\t\t\tto = \"black\",\n\t\t\tgradient,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Convert Tailwind-style direction to CSS\n\t\tconst cssDirection = direction.startsWith(\"to-\")\n\t\t\t? direction.replace(\"to-\", \"to \")\n\t\t\t: direction;\n\n\t\tconst gradientValue =\n\t\t\tgradient ||\n\t\t\t(via\n\t\t\t\t? `linear-gradient(${cssDirection}, ${from}, ${via}, ${to})`\n\t\t\t\t: `linear-gradient(${cssDirection}, ${from}, ${to})`);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName={backgroundGradientVariants({ class: className })}\n\t\t\t\tstyle={{\n\t\t\t\t\tbackgroundImage: gradientValue,\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nBackgroundGradient.displayName = \"Background.Gradient\";\n\n// =============================================================================\n// Compound Export\n// =============================================================================\n\nconst BackgroundCompound = Object.assign(Background, {\n\tImage: BackgroundImage,\n\tVideo: BackgroundVideo,\n\tStream: BackgroundStream,\n\tOverlay: BackgroundOverlay,\n\tGradient: BackgroundGradient,\n});\n\nexport {\n\tBackgroundCompound as Background,\n\tBackgroundImage,\n\tBackgroundVideo,\n\tBackgroundStream,\n\tBackgroundOverlay,\n\tBackgroundGradient,\n\tbackgroundVariants,\n\tbackgroundImageVariants,\n\tbackgroundVideoVariants,\n\tbackgroundStreamVariants,\n\tbackgroundOverlayVariants,\n\tbackgroundGradientVariants,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype BlurIntensity = \"low\" | \"medium\" | \"high\" | \"extreme\";\ntype OverlayType = \"none\" | \"vignette\" | \"top-bottom\";\n\n// ============================================================================\n// Variant Definitions\n// ============================================================================\n\n/**\n * Blurred video backdrop wrapper variants.\n *\n * The wrapper extends beyond its bounds (inset: -120px) to cover\n * blur artifacts at the edges.\n */\nconst blurredVideoBackdropVariants = tv({\n\tbase: [\n\t\t\"absolute\",\n\t\t\"pointer-events-none\",\n\t\t\"select-none\",\n\t\t\"will-change-contents\",\n\t\t\"transform-gpu\",\n\t],\n\tvariants: {\n\t\t/**\n\t\t * Blur intensity level.\n\t\t * Higher values provide more diffused backgrounds.\n\t\t */\n\t\tblur: {\n\t\t\tlow: \"\",\n\t\t\tmedium: \"\",\n\t\t\thigh: \"\",\n\t\t\textreme: \"\",\n\t\t},\n\t\t/**\n\t\t * Gradient overlay for visual depth.\n\t\t */\n\t\toverlay: {\n\t\t\tnone: \"\",\n\t\t\tvignette: \"\",\n\t\t\t\"top-bottom\": \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tblur: \"high\",\n\t\toverlay: \"none\",\n\t},\n});\n\n/**\n * Canvas element styles.\n */\nconst canvasVariants = tv({\n\tbase: [\"w-full\", \"h-full\", \"object-cover\"],\n});\n\n/**\n * Gradient overlay base styles.\n * Gradient backgrounds are applied via inline styles to avoid arbitrary values.\n */\nconst gradientOverlayVariants = tv({\n\tbase: [\"absolute\", \"inset-0\", \"pointer-events-none\"],\n});\n\n/**\n * Gradient overlay background styles.\n * Using inline styles to maintain token compliance (no arbitrary values in Tailwind).\n */\nconst OVERLAY_GRADIENTS: Record<Exclude<OverlayType, \"none\">, string> = {\n\tvignette:\n\t\t\"radial-gradient(ellipse at center, transparent 40%, rgba(0, 0, 0, 0.4) 100%)\",\n\t\"top-bottom\":\n\t\t\"linear-gradient(180deg, rgba(0, 0, 0, 0.4) 0%, transparent 30%, transparent 70%, rgba(0, 0, 0, 0.4) 100%)\",\n};\n\n// ============================================================================\n// Blur amount mapping\n// ============================================================================\n\nconst BLUR_AMOUNTS: Record<BlurIntensity, number> = {\n\tlow: 40,\n\tmedium: 80,\n\thigh: 100,\n\textreme: 120,\n};\n\n// ============================================================================\n// useCanvasBlur Hook\n// ============================================================================\n\ninterface UseCanvasBlurOptions {\n\t/** Ref to the source video element */\n\tvideoRef: React.RefObject<HTMLVideoElement | null>;\n\t/** Blur amount in pixels */\n\tblurAmount: number;\n\t/** Whether rendering is enabled */\n\tenabled?: boolean;\n\t/** Target FPS (lower = better performance, default: 30) */\n\ttargetFps?: number;\n\t/** Canvas scale factor (lower = better performance, default: 0.5) */\n\tscale?: number;\n}\n\ninterface UseCanvasBlurReturn {\n\t/** Ref to attach to the canvas element */\n\tcanvasRef: React.RefObject<HTMLCanvasElement | null>;\n\t/** Whether the canvas is currently rendering */\n\tisRendering: boolean;\n\t/** Performance metrics */\n\tmetrics: {\n\t\tfps: number;\n\t\tframeTime: number;\n\t};\n}\n\n/**\n * Hook for rendering a blurred video to canvas.\n *\n * Performance optimizations:\n * - Renders at reduced resolution (scale factor)\n * - Throttled to target FPS\n * - Uses CSS scale to fill container\n * - Single video decoder (no sync needed)\n */\nfunction useCanvasBlur({\n\tvideoRef,\n\tblurAmount,\n\tenabled = true,\n\ttargetFps = 30,\n\tscale = 0.5,\n}: UseCanvasBlurOptions): UseCanvasBlurReturn {\n\tconst canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n\tconst ctxRef = React.useRef<CanvasRenderingContext2D | null>(null);\n\tconst [isRendering, setIsRendering] = React.useState(false);\n\tconst [metrics, setMetrics] = React.useState({ fps: 0, frameTime: 0 });\n\n\t// Track when video ref is ready (it populates after mount)\n\tconst [videoReady, setVideoReady] = React.useState(false);\n\n\t// Performance tracking refs\n\tconst lastFrameTimeRef = React.useRef(0);\n\tconst frameCountRef = React.useRef(0);\n\tconst fpsIntervalRef = React.useRef(0);\n\n\t// Frame interval based on target FPS\n\tconst frameInterval = 1000 / targetFps;\n\n\t// Poll for video ref to be ready (refs populate after initial render)\n\tReact.useEffect(() => {\n\t\tif (!enabled) return;\n\n\t\tconst checkRef = () => {\n\t\t\tif (videoRef.current && canvasRef.current) {\n\t\t\t\tsetVideoReady(true);\n\t\t\t}\n\t\t};\n\n\t\t// Check immediately\n\t\tcheckRef();\n\n\t\t// Also check on next frames in case elements mount after this effect\n\t\tconst frameId = requestAnimationFrame(checkRef);\n\t\tconst timeoutId = setTimeout(checkRef, 100);\n\t\tconst timeoutId2 = setTimeout(checkRef, 500);\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frameId);\n\t\t\tclearTimeout(timeoutId);\n\t\t\tclearTimeout(timeoutId2);\n\t\t};\n\t}, [enabled, videoRef]);\n\n\t// Main rendering effect\n\tReact.useEffect(() => {\n\t\tif (!enabled || !videoReady) return;\n\n\t\tconst video = videoRef.current;\n\t\tconst canvas = canvasRef.current;\n\n\t\tif (!video || !canvas) return;\n\n\t\t// Initialize canvas context\n\t\tconst ctx = canvas.getContext(\"2d\", {\n\t\t\talpha: false,\n\t\t\tdesynchronized: true, // Reduces latency\n\t\t});\n\n\t\tif (!ctx) return;\n\t\tctxRef.current = ctx;\n\n\t\tlet animationFrameId: number;\n\t\tlet isActive = true;\n\n\t\t// Set canvas size based on video dimensions with scale factor\n\t\tconst updateCanvasSize = () => {\n\t\t\tif (video.videoWidth && video.videoHeight) {\n\t\t\t\tcanvas.width = Math.floor(video.videoWidth * scale);\n\t\t\t\tcanvas.height = Math.floor(video.videoHeight * scale);\n\t\t\t}\n\t\t};\n\n\t\tconst render = (timestamp: number) => {\n\t\t\tif (!isActive || !video || !ctx) return;\n\n\t\t\t// Throttle to target FPS\n\t\t\tconst elapsed = timestamp - lastFrameTimeRef.current;\n\n\t\t\tif (elapsed >= frameInterval) {\n\t\t\t\tconst frameStart = performance.now();\n\n\t\t\t\t// Update canvas size if needed\n\t\t\t\tif (canvas.width === 0 || canvas.height === 0) {\n\t\t\t\t\tupdateCanvasSize();\n\t\t\t\t}\n\n\t\t\t\t// Only draw if video has data and is playing\n\t\t\t\tif (video.readyState >= 2 && !video.paused) {\n\t\t\t\t\t// Apply blur filter and draw\n\t\t\t\t\tctx.filter = `blur(${blurAmount * scale}px)`;\n\t\t\t\t\tctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n\n\t\t\t\t\tsetIsRendering(true);\n\t\t\t\t}\n\n\t\t\t\t// Track frame time\n\t\t\t\tconst frameTime = performance.now() - frameStart;\n\t\t\t\tframeCountRef.current++;\n\n\t\t\t\t// Update FPS every second\n\t\t\t\tif (timestamp - fpsIntervalRef.current >= 1000) {\n\t\t\t\t\tsetMetrics({\n\t\t\t\t\t\tfps: frameCountRef.current,\n\t\t\t\t\t\tframeTime: Math.round(frameTime * 100) / 100,\n\t\t\t\t\t});\n\t\t\t\t\tframeCountRef.current = 0;\n\t\t\t\t\tfpsIntervalRef.current = timestamp;\n\t\t\t\t}\n\n\t\t\t\tlastFrameTimeRef.current = timestamp - (elapsed % frameInterval);\n\t\t\t}\n\n\t\t\tanimationFrameId = requestAnimationFrame(render);\n\t\t};\n\n\t\t// Handle video events\n\t\tconst handleLoadedMetadata = () => {\n\t\t\tupdateCanvasSize();\n\t\t};\n\n\t\tconst handlePlay = () => {\n\t\t\tif (isActive) {\n\t\t\t\tanimationFrameId = requestAnimationFrame(render);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePause = () => {\n\t\t\tsetIsRendering(false);\n\t\t};\n\n\t\t// Add event listeners\n\t\tvideo.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n\t\tvideo.addEventListener(\"play\", handlePlay);\n\t\tvideo.addEventListener(\"pause\", handlePause);\n\n\t\t// Initialize size if video is already loaded\n\t\tif (video.readyState >= 1) {\n\t\t\tupdateCanvasSize();\n\t\t}\n\n\t\t// Start render loop if video is playing\n\t\tif (!video.paused) {\n\t\t\tanimationFrameId = requestAnimationFrame(render);\n\t\t}\n\n\t\treturn () => {\n\t\t\tisActive = false;\n\t\t\tcancelAnimationFrame(animationFrameId);\n\t\t\tvideo.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n\t\t\tvideo.removeEventListener(\"play\", handlePlay);\n\t\t\tvideo.removeEventListener(\"pause\", handlePause);\n\t\t\tsetIsRendering(false);\n\t\t};\n\t}, [enabled, videoReady, videoRef, blurAmount, frameInterval, scale]);\n\n\treturn {\n\t\tcanvasRef,\n\t\tisRendering,\n\t\tmetrics,\n\t};\n}\n\n// ============================================================================\n// BlurredVideoBackdrop Component\n// ============================================================================\n\nexport interface BlurredVideoBackdropProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n\t\tVariantProps<typeof blurredVideoBackdropVariants> {\n\t/** Ref to the primary video element to create backdrop from (required) */\n\tvideoRef: React.RefObject<HTMLVideoElement | null>;\n\t/** Opacity of the backdrop (0-1, default: 0.6) */\n\topacity?: number;\n\t/** Extension amount in pixels to cover blur artifacts (default: 120) */\n\textension?: number;\n\t/** Target FPS for canvas rendering (default: 30) */\n\ttargetFps?: number;\n\t/** Canvas scale factor - lower = better performance (default: 0.5) */\n\tscale?: number;\n\t/** Whether to show debug metrics */\n\tshowMetrics?: boolean;\n}\n\n/**\n * BlurredVideoBackdrop - A high-performance blurred video backdrop using canvas.\n *\n * Renders a blurred copy of a video element to create an ambient backdrop effect.\n * Uses canvas rendering for optimal performance - no video sync needed.\n *\n * Performance features:\n * - Single video decoder (draws from existing video element)\n * - Reduced resolution rendering (configurable scale)\n * - Throttled frame rate (configurable FPS)\n * - GPU-accelerated canvas scaling\n *\n * @example\n * ```tsx\n * const videoRef = useRef<HTMLVideoElement>(null);\n *\n * <div className=\"relative\">\n * <BlurredVideoBackdrop\n * videoRef={videoRef}\n * blur=\"high\"\n * overlay=\"vignette\"\n * />\n * <VideoPlayer videoRef={videoRef} src=\"/video.mp4\" />\n * </div>\n * ```\n */\nconst BlurredVideoBackdrop = React.forwardRef<\n\tHTMLDivElement,\n\tBlurredVideoBackdropProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvideoRef,\n\t\t\tblur = \"high\",\n\t\t\toverlay = \"none\",\n\t\t\topacity = 0.6,\n\t\t\textension = 120,\n\t\t\ttargetFps = 30,\n\t\t\tscale = 0.5,\n\t\t\tshowMetrics = false,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst blurAmount = BLUR_AMOUNTS[blur ?? \"high\"];\n\n\t\tconst { canvasRef, isRendering, metrics } = useCanvasBlur({\n\t\t\tvideoRef,\n\t\t\tblurAmount,\n\t\t\tenabled: true,\n\t\t\ttargetFps,\n\t\t\tscale,\n\t\t});\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tblurredVideoBackdropVariants({ blur, overlay }),\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\tinset: `-${extension}px`,\n\t\t\t\t\topacity,\n\t\t\t\t\tcontain: \"layout style paint\",\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t\tdata-blur={blur ?? \"high\"}\n\t\t\t\tdata-overlay={overlay ?? \"none\"}\n\t\t\t\tdata-rendering={isRendering}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<canvas\n\t\t\t\t\tref={canvasRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tcanvasVariants(),\n\t\t\t\t\t\t// Scale up the low-res canvas to fill container\n\t\t\t\t\t\t\"scale-[2]\", // Inverse of 0.5 scale factor\n\t\t\t\t\t\t\"origin-center\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t// Additional CSS blur for smoother appearance\n\t\t\t\t\t\tfilter: `blur(${blurAmount * 0.3}px)`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{overlay && overlay !== \"none\" && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={gradientOverlayVariants()}\n\t\t\t\t\t\tstyle={{ background: OVERLAY_GRADIENTS[overlay] }}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{showMetrics && (\n\t\t\t\t\t<div className=\"absolute bottom-8 left-8 z-10 bg-black/80 text-white typography-caption px-8 py-4 rounded-4 font-mono\">\n\t\t\t\t\t\t<div>FPS: {metrics.fps}</div>\n\t\t\t\t\t\t<div>Frame: {metrics.frameTime}ms</div>\n\t\t\t\t\t\t<div>Scale: {scale}x</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nBlurredVideoBackdrop.displayName = \"BlurredVideoBackdrop\";\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n\tBlurredVideoBackdrop,\n\tblurredVideoBackdropVariants,\n\tcanvasVariants,\n\tgradientOverlayVariants,\n\tuseCanvasBlur,\n\tBLUR_AMOUNTS,\n};\n\nexport type {\n\tUseCanvasBlurOptions,\n\tUseCanvasBlurReturn,\n\tBlurIntensity,\n\tOverlayType,\n};\n","/**\n * Component-level theming interface\n *\n * This interface defines all the customizable design tokens that can be\n * overridden at the component level. Components accepting a `theme` prop\n * will apply these values as CSS custom properties, allowing fine-grained\n * control over appearance without creating new variants.\n *\n * All values use primitive token names (e.g., \"gray-100\", \"spacing-40\")\n * which are converted to CSS variable references internally.\n */\n\n// =============================================================================\n// Token Name Types\n// =============================================================================\n\n/**\n * Color token names - maps to `--color-{name}` CSS variables\n * @example \"gray-100\", \"ember-v300\", \"alpha-black-10\"\n */\nexport type ColorToken =\n\t// Grayscale\n\t| \"gray-50\"\n\t| \"gray-100\"\n\t| \"gray-200\"\n\t| \"gray-300\"\n\t| \"gray-400\"\n\t| \"gray-500\"\n\t| \"gray-600\"\n\t| \"gray-700\"\n\t| \"gray-800\"\n\t| \"gray-900\"\n\t| \"gray-1000\"\n\t| \"gray-1100\"\n\t| \"gray-1200\"\n\t// Steel\n\t| \"steel-50\"\n\t| \"steel-100\"\n\t| \"steel-200\"\n\t| \"steel-300\"\n\t| \"steel-400\"\n\t| \"steel-500\"\n\t| \"steel-600\"\n\t| \"steel-700\"\n\t| \"steel-800\"\n\t| \"steel-900\"\n\t| \"steel-1000\"\n\t| \"steel-1100\"\n\t| \"steel-1200\"\n\t// Brown\n\t| \"brown-50\"\n\t| \"brown-100\"\n\t| \"brown-200\"\n\t| \"brown-300\"\n\t| \"brown-400\"\n\t| \"brown-500\"\n\t| \"brown-600\"\n\t| \"brown-700\"\n\t| \"brown-800\"\n\t| \"brown-900\"\n\t| \"brown-1000\"\n\t| \"brown-1100\"\n\t| \"brown-1200\"\n\t// Ember\n\t| \"ember-50\"\n\t| \"ember-100\"\n\t| \"ember-200\"\n\t| \"ember-300\"\n\t| \"ember-400\"\n\t| \"ember-500\"\n\t| \"ember-600\"\n\t| \"ember-700\"\n\t| \"ember-800\"\n\t| \"ember-900\"\n\t| \"ember-v100\"\n\t| \"ember-v200\"\n\t| \"ember-v300\"\n\t| \"ember-v400\"\n\t// Orange\n\t| \"orange-50\"\n\t| \"orange-100\"\n\t| \"orange-200\"\n\t| \"orange-300\"\n\t| \"orange-400\"\n\t| \"orange-500\"\n\t| \"orange-600\"\n\t| \"orange-700\"\n\t| \"orange-800\"\n\t| \"orange-900\"\n\t| \"orange-v100\"\n\t| \"orange-v200\"\n\t| \"orange-v300\"\n\t| \"orange-v400\"\n\t// Amber\n\t| \"amber-50\"\n\t| \"amber-100\"\n\t| \"amber-200\"\n\t| \"amber-300\"\n\t| \"amber-400\"\n\t| \"amber-500\"\n\t| \"amber-600\"\n\t| \"amber-700\"\n\t| \"amber-800\"\n\t| \"amber-900\"\n\t| \"amber-v100\"\n\t| \"amber-v200\"\n\t| \"amber-v300\"\n\t| \"amber-v400\"\n\t// Yellow\n\t| \"yellow-50\"\n\t| \"yellow-100\"\n\t| \"yellow-200\"\n\t| \"yellow-300\"\n\t| \"yellow-400\"\n\t| \"yellow-500\"\n\t| \"yellow-600\"\n\t| \"yellow-700\"\n\t| \"yellow-800\"\n\t| \"yellow-900\"\n\t| \"yellow-v100\"\n\t| \"yellow-v200\"\n\t| \"yellow-v300\"\n\t| \"yellow-v400\"\n\t// Lime\n\t| \"lime-50\"\n\t| \"lime-100\"\n\t| \"lime-200\"\n\t| \"lime-300\"\n\t| \"lime-400\"\n\t| \"lime-500\"\n\t| \"lime-600\"\n\t| \"lime-700\"\n\t| \"lime-800\"\n\t| \"lime-900\"\n\t| \"lime-v100\"\n\t| \"lime-v200\"\n\t| \"lime-v300\"\n\t| \"lime-v400\"\n\t// Green\n\t| \"green-50\"\n\t| \"green-100\"\n\t| \"green-200\"\n\t| \"green-300\"\n\t| \"green-400\"\n\t| \"green-500\"\n\t| \"green-600\"\n\t| \"green-700\"\n\t| \"green-800\"\n\t| \"green-900\"\n\t| \"green-v100\"\n\t| \"green-v200\"\n\t| \"green-v300\"\n\t| \"green-v400\"\n\t// Sage\n\t| \"sage-50\"\n\t| \"sage-100\"\n\t| \"sage-200\"\n\t| \"sage-300\"\n\t| \"sage-400\"\n\t| \"sage-500\"\n\t| \"sage-600\"\n\t| \"sage-700\"\n\t| \"sage-800\"\n\t| \"sage-900\"\n\t| \"sage-v100\"\n\t| \"sage-v200\"\n\t| \"sage-v300\"\n\t| \"sage-v400\"\n\t// Teal\n\t| \"teal-50\"\n\t| \"teal-100\"\n\t| \"teal-200\"\n\t| \"teal-300\"\n\t| \"teal-400\"\n\t| \"teal-500\"\n\t| \"teal-600\"\n\t| \"teal-700\"\n\t| \"teal-800\"\n\t| \"teal-900\"\n\t| \"teal-v100\"\n\t| \"teal-v200\"\n\t| \"teal-v300\"\n\t| \"teal-v400\"\n\t// Cyan\n\t| \"cyan-50\"\n\t| \"cyan-100\"\n\t| \"cyan-200\"\n\t| \"cyan-300\"\n\t| \"cyan-400\"\n\t| \"cyan-500\"\n\t| \"cyan-600\"\n\t| \"cyan-700\"\n\t| \"cyan-800\"\n\t| \"cyan-900\"\n\t| \"cyan-v100\"\n\t| \"cyan-v200\"\n\t| \"cyan-v300\"\n\t| \"cyan-v400\"\n\t// Ice\n\t| \"ice-50\"\n\t| \"ice-100\"\n\t| \"ice-200\"\n\t| \"ice-300\"\n\t| \"ice-400\"\n\t| \"ice-500\"\n\t| \"ice-600\"\n\t| \"ice-700\"\n\t| \"ice-800\"\n\t| \"ice-900\"\n\t| \"ice-v100\"\n\t| \"ice-v200\"\n\t| \"ice-v300\"\n\t| \"ice-v400\"\n\t// Blue\n\t| \"blue-50\"\n\t| \"blue-100\"\n\t| \"blue-200\"\n\t| \"blue-300\"\n\t| \"blue-400\"\n\t| \"blue-500\"\n\t| \"blue-600\"\n\t| \"blue-700\"\n\t| \"blue-800\"\n\t| \"blue-900\"\n\t| \"blue-v100\"\n\t| \"blue-v200\"\n\t| \"blue-v300\"\n\t| \"blue-v400\"\n\t// Indigo\n\t| \"indigo-50\"\n\t| \"indigo-100\"\n\t| \"indigo-200\"\n\t| \"indigo-300\"\n\t| \"indigo-400\"\n\t| \"indigo-500\"\n\t| \"indigo-600\"\n\t| \"indigo-700\"\n\t| \"indigo-800\"\n\t| \"indigo-900\"\n\t| \"indigo-v100\"\n\t| \"indigo-v200\"\n\t| \"indigo-v300\"\n\t| \"indigo-v400\"\n\t// Iris\n\t| \"iris-50\"\n\t| \"iris-100\"\n\t| \"iris-200\"\n\t| \"iris-300\"\n\t| \"iris-400\"\n\t| \"iris-500\"\n\t| \"iris-600\"\n\t| \"iris-700\"\n\t| \"iris-800\"\n\t| \"iris-900\"\n\t| \"iris-v100\"\n\t| \"iris-v200\"\n\t| \"iris-v300\"\n\t| \"iris-v400\"\n\t// Purple\n\t| \"purple-50\"\n\t| \"purple-100\"\n\t| \"purple-200\"\n\t| \"purple-300\"\n\t| \"purple-400\"\n\t| \"purple-500\"\n\t| \"purple-600\"\n\t| \"purple-700\"\n\t| \"purple-800\"\n\t| \"purple-900\"\n\t| \"purple-v100\"\n\t| \"purple-v200\"\n\t| \"purple-v300\"\n\t| \"purple-v400\"\n\t// Pink\n\t| \"pink-50\"\n\t| \"pink-100\"\n\t| \"pink-200\"\n\t| \"pink-300\"\n\t| \"pink-400\"\n\t| \"pink-500\"\n\t| \"pink-600\"\n\t| \"pink-700\"\n\t| \"pink-800\"\n\t| \"pink-900\"\n\t| \"pink-v100\"\n\t| \"pink-v200\"\n\t| \"pink-v300\"\n\t| \"pink-v400\"\n\t// Red\n\t| \"red-50\"\n\t| \"red-100\"\n\t| \"red-200\"\n\t| \"red-300\"\n\t| \"red-400\"\n\t| \"red-500\"\n\t| \"red-600\"\n\t| \"red-700\"\n\t| \"red-800\"\n\t| \"red-900\"\n\t| \"red-v100\"\n\t| \"red-v200\"\n\t| \"red-v300\"\n\t| \"red-v400\"\n\t// Alpha\n\t| \"alpha-black-5\"\n\t| \"alpha-black-10\"\n\t| \"alpha-black-20\"\n\t| \"alpha-black-30\"\n\t| \"alpha-black-40\"\n\t| \"alpha-black-50\"\n\t| \"alpha-black-60\"\n\t| \"alpha-black-70\"\n\t| \"alpha-black-80\"\n\t| \"alpha-black-90\"\n\t| \"alpha-black-95\"\n\t| \"alpha-white-5\"\n\t| \"alpha-white-10\"\n\t| \"alpha-white-20\"\n\t| \"alpha-white-30\"\n\t| \"alpha-white-40\"\n\t| \"alpha-white-50\"\n\t| \"alpha-white-60\"\n\t| \"alpha-white-70\"\n\t| \"alpha-white-80\"\n\t| \"alpha-white-90\"\n\t| \"alpha-white-95\"\n\t// Special\n\t| \"white\"\n\t| \"black\";\n\n/**\n * Spacing token names - maps to `--spacing-{name}` CSS variables\n * @example \"spacing-40\", \"spacing-72\"\n */\nexport type SpacingToken =\n\t| \"spacing-0\"\n\t| \"spacing-2\"\n\t| \"spacing-4\"\n\t| \"spacing-6\"\n\t| \"spacing-8\"\n\t| \"spacing-10\"\n\t| \"spacing-11\"\n\t| \"spacing-12\"\n\t| \"spacing-16\"\n\t| \"spacing-20\"\n\t| \"spacing-24\"\n\t| \"spacing-28\"\n\t| \"spacing-32\"\n\t| \"spacing-36\"\n\t| \"spacing-40\"\n\t| \"spacing-48\"\n\t| \"spacing-56\"\n\t| \"spacing-64\"\n\t| \"spacing-72\"\n\t| \"spacing-80\"\n\t| \"spacing-96\"\n\t| \"spacing-112\"\n\t| \"spacing-128\"\n\t| \"spacing-144\"\n\t| \"spacing-160\"\n\t| \"spacing-176\"\n\t| \"spacing-192\"\n\t| \"spacing-208\"\n\t| \"spacing-224\"\n\t| \"spacing-240\"\n\t| \"spacing-256\"\n\t| \"spacing-288\"\n\t| \"spacing-320\"\n\t| \"spacing-352\"\n\t| \"spacing-384\"\n\t| \"spacing-400\";\n\n/**\n * Radius token names - maps to `--radii-{name}` CSS variables\n * @example \"radii-4\", \"radii-6\"\n */\nexport type RadiusToken =\n\t| \"radii-0\"\n\t| \"radii-2\"\n\t| \"radii-4\"\n\t| \"radii-6\"\n\t| \"radii-8\"\n\t| \"radii-10\"\n\t| \"radii-11\"\n\t| \"radii-12\"\n\t| \"radii-16\"\n\t| \"radii-20\"\n\t| \"radii-24\"\n\t| \"radii-28\"\n\t| \"radii-32\"\n\t| \"radii-36\"\n\t| \"radii-40\"\n\t| \"radii-48\"\n\t| \"radii-56\"\n\t| \"radii-64\"\n\t| \"radii-72\"\n\t| \"radii-80\"\n\t| \"radii-96\"\n\t| \"radii-112\"\n\t| \"radii-128\"\n\t| \"radii-144\"\n\t| \"radii-160\"\n\t| \"radii-176\"\n\t| \"radii-192\"\n\t| \"radii-208\"\n\t| \"radii-224\"\n\t| \"radii-240\"\n\t| \"radii-256\"\n\t| \"radii-288\"\n\t| \"radii-320\"\n\t| \"radii-352\"\n\t| \"radii-384\"\n\t| \"radii-400\";\n\n/**\n * Font size token values - primitive font sizes available in the design system\n * These correspond to Tailwind classes like `text-64`, `text-128`, etc.\n * @example 64, 128, 192\n */\nexport type FontSizeToken =\n\t| 9\n\t| 11\n\t| 12\n\t| 14\n\t| 16\n\t| 18\n\t| 21\n\t| 24\n\t| 28\n\t| 32\n\t| 36\n\t| 42\n\t| 48\n\t| 56\n\t| 64\n\t| 72\n\t| 84\n\t| 88\n\t| 96\n\t| 112\n\t| 128\n\t| 148\n\t| 168\n\t| 192\n\t| 224\n\t| 256\n\t| 280;\n\n/**\n * Array of all available font sizes for use in UI selectors/dropdowns\n */\nexport const FONT_SIZES: FontSizeToken[] = [\n\t9, 11, 12, 14, 16, 18, 21, 24, 28, 32, 36, 42, 48, 56, 64, 72, 84, 88, 96,\n\t112, 128, 148, 168, 192, 224, 256, 280,\n];\n\n/**\n * Helper to generate typography class string from font size\n * @example fontSizeToClass(128) => \"text-128 leading-128 tracking-128\"\n */\nexport function fontSizeToClass(size: FontSizeToken): string {\n\treturn `text-${size} leading-${size} tracking-${size}`;\n}\n\n/**\n * Helper to generate responsive typography class string\n * @example responsiveTypographyClass(64, 128, 192) => \"text-64 leading-64 tracking-64 md:text-128 md:leading-128 md:tracking-128 xl:text-192 xl:leading-192 xl:tracking-192\"\n */\nexport function responsiveTypographyClass(\n\tmobile: FontSizeToken,\n\ttablet: FontSizeToken,\n\tdesktop: FontSizeToken,\n): string {\n\treturn [\n\t\tfontSizeToClass(mobile),\n\t\t`md:${fontSizeToClass(tablet).split(\" \").join(\" md:\")}`,\n\t\t`xl:${fontSizeToClass(desktop).split(\" \").join(\" xl:\")}`,\n\t].join(\" \");\n}\n\n// =============================================================================\n// Color Tokens\n// =============================================================================\n\nexport interface ComponentThemeColors {\n\t/**\n\t * Background color for sections\n\t * @example \"gray-100\"\n\t */\n\tbgSection?: ColorToken;\n\n\t/**\n\t * Background color for cards\n\t * @example \"white\"\n\t */\n\tcardBackground?: ColorToken;\n\n\t/**\n\t * Muted background color\n\t * @example \"gray-50\"\n\t */\n\tbgMuted?: ColorToken;\n\n\t/**\n\t * Primary text color\n\t * @example \"gray-1100\"\n\t */\n\ttextPrimary?: ColorToken;\n\n\t/**\n\t * Secondary text color\n\t * @example \"gray-800\"\n\t */\n\ttextSecondary?: ColorToken;\n\n\t/**\n\t * Muted text color\n\t * @example \"gray-600\"\n\t */\n\ttextMuted?: ColorToken;\n\n\t/**\n\t * Inverted text color (for dark backgrounds)\n\t * @example \"gray-100\"\n\t */\n\ttextInverted?: ColorToken;\n\n\t/**\n\t * Link text color\n\t * @example \"gray-1100\"\n\t */\n\ttextLink?: ColorToken;\n\n\t/**\n\t * Link hover text color\n\t * @example \"gray-700\"\n\t */\n\ttextLinkHover?: ColorToken;\n\n\t/**\n\t * Brand accent color\n\t * @example \"ember-v300\"\n\t */\n\taccentBrand?: ColorToken;\n\n\t/**\n\t * Soft brand accent color\n\t * @example \"ember-100\"\n\t */\n\taccentBrandSoft?: ColorToken;\n\n\t/**\n\t * Subtle border color\n\t * @example \"alpha-black-10\"\n\t */\n\tborderSubtle?: ColorToken;\n\n\t/**\n\t * Strong border color\n\t * @example \"alpha-black-20\"\n\t */\n\tborderStrong?: ColorToken;\n\n\t/**\n\t * Focus border color (uses accentBrand by default)\n\t * @example \"ember-v300\"\n\t */\n\tborderFocus?: ColorToken;\n\n\t/**\n\t * Divider border color\n\t * @example \"alpha-black-10\"\n\t */\n\tborderDivider?: ColorToken;\n\n\t/**\n\t * Primary button background color\n\t * @example \"gray-1100\"\n\t */\n\tbuttonPrimaryBg?: ColorToken;\n\n\t/**\n\t * Primary button hover background color\n\t * @example \"gray-600\"\n\t */\n\tbuttonPrimaryBgHover?: ColorToken;\n\n\t/**\n\t * Secondary button background color\n\t * @example \"white\"\n\t */\n\tbuttonSecondaryBg?: ColorToken;\n\n\t/**\n\t * Secondary button hover background color\n\t * @example \"gray-100\"\n\t */\n\tbuttonSecondaryBgHover?: ColorToken;\n}\n\n// =============================================================================\n// Spatial Tokens\n// =============================================================================\n\nexport interface ComponentThemeSpatial {\n\t/**\n\t * Grid margin for large breakpoint\n\t * @example \"spacing-72\"\n\t */\n\tgridLargeMargin?: SpacingToken;\n\n\t/**\n\t * Grid gutter for large breakpoint\n\t * @example \"spacing-24\"\n\t */\n\tgridLargeGutter?: SpacingToken;\n\n\t/**\n\t * Number of grid columns for large breakpoint\n\t */\n\tgridLargeColumns?: number;\n\n\t/**\n\t * Grid margin for medium breakpoint\n\t * @example \"spacing-56\"\n\t */\n\tgridMediumMargin?: SpacingToken;\n\n\t/**\n\t * Grid gutter for medium breakpoint\n\t * @example \"spacing-20\"\n\t */\n\tgridMediumGutter?: SpacingToken;\n\n\t/**\n\t * Number of grid columns for medium breakpoint\n\t */\n\tgridMediumColumns?: number;\n\n\t/**\n\t * Grid margin for small breakpoint\n\t * @example \"spacing-24\"\n\t */\n\tgridSmallMargin?: SpacingToken;\n\n\t/**\n\t * Grid gutter for small breakpoint\n\t * @example \"spacing-12\"\n\t */\n\tgridSmallGutter?: SpacingToken;\n\n\t/**\n\t * Number of grid columns for small breakpoint\n\t */\n\tgridSmallColumns?: number;\n\n\t/**\n\t * Section gap for large breakpoint\n\t * @example \"spacing-64\"\n\t */\n\tsectionLargeGap?: SpacingToken;\n\n\t/**\n\t * Section padding for large breakpoint\n\t * @example \"spacing-128\"\n\t */\n\tsectionLargePadding?: SpacingToken;\n\n\t/**\n\t * Section gap for medium breakpoint\n\t * @example \"spacing-56\"\n\t */\n\tsectionMediumGap?: SpacingToken;\n\n\t/**\n\t * Section padding for medium breakpoint\n\t * @example \"spacing-96\"\n\t */\n\tsectionMediumPadding?: SpacingToken;\n\n\t/**\n\t * Section gap for small breakpoint\n\t * @example \"spacing-32\"\n\t */\n\tsectionSmallGap?: SpacingToken;\n\n\t/**\n\t * Section padding for small breakpoint\n\t * @example \"spacing-64\"\n\t */\n\tsectionSmallPadding?: SpacingToken;\n\n\t/**\n\t * Card gap for large size\n\t * @example \"spacing-10\"\n\t */\n\tcardLargeGap?: SpacingToken;\n\n\t/**\n\t * Card padding for large size\n\t * @example \"spacing-24\"\n\t */\n\tcardLargePadding?: SpacingToken;\n\n\t/**\n\t * Card gap for small size\n\t * @example \"spacing-12\"\n\t */\n\tcardSmallGap?: SpacingToken;\n\n\t/**\n\t * Card padding for small size\n\t * @example \"spacing-16\"\n\t */\n\tcardSmallPadding?: SpacingToken;\n}\n\n// =============================================================================\n// Surface Tokens\n// =============================================================================\n\nexport interface ComponentThemeSurface {\n\t/**\n\t * Card border radius\n\t * @example \"radii-4\"\n\t */\n\tcardRadius?: RadiusToken;\n\n\t/**\n\t * Card stroke/border width in pixels\n\t * @example 1\n\t */\n\tcardStroke?: number;\n\n\t/**\n\t * Button border radius\n\t * @example \"radii-6\"\n\t */\n\tbuttonRadius?: RadiusToken;\n\n\t/**\n\t * Button stroke/border weight in pixels\n\t * @example 1\n\t */\n\tbuttonStrokeWeight?: number;\n}\n\n// =============================================================================\n// Combined Theme Interface\n// =============================================================================\n\n/**\n * Complete component theme interface combining colors, spatial, and surface tokens.\n *\n * @example\n * ```tsx\n * const customTheme: ComponentTheme = {\n * colors: {\n * textPrimary: \"gray-100\",\n * accentBrand: \"ember-500\",\n * },\n * spatial: {\n * sectionLargePadding: \"spacing-96\",\n * },\n * surface: {\n * cardRadius: \"radii-8\",\n * },\n * };\n *\n * <Tout theme={customTheme} ... />\n * ```\n */\nexport interface ComponentTheme {\n\tcolors?: ComponentThemeColors;\n\tspatial?: ComponentThemeSpatial;\n\tsurface?: ComponentThemeSurface;\n}\n\n// =============================================================================\n// Button Theme Interface\n// =============================================================================\n\n/**\n * Button-specific theme interface for customizing individual button appearance.\n *\n * @example\n * ```tsx\n * const buttonTheme: ButtonTheme = {\n * bg: \"ember-500\",\n * bgHover: \"ember-600\",\n * text: \"white\",\n * radius: \"radii-8\",\n * };\n *\n * <Button theme={buttonTheme}>Themed Button</Button>\n * ```\n */\nexport interface ButtonTheme {\n\t/** Background color */\n\tbg?: ColorToken;\n\t/** Background color on hover */\n\tbgHover?: ColorToken;\n\t/** Background color on active/press */\n\tbgActive?: ColorToken;\n\t/** Text color */\n\ttext?: ColorToken;\n\t/** Border color (if using border) */\n\tborderColor?: ColorToken;\n\t/** Border width in pixels (0 for no border) */\n\tborderWidth?: number;\n\t/** Border radius */\n\tradius?: RadiusToken;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Converts a color token name to a CSS variable reference\n */\nfunction colorToVar(token: ColorToken): string {\n\treturn `var(--color-${token})`;\n}\n\n/**\n * Converts a spacing token name to a CSS variable reference\n */\nfunction spacingToVar(token: SpacingToken): string {\n\treturn `var(--${token})`;\n}\n\n/**\n * Converts a radius token name to a CSS variable reference\n */\nfunction radiusToVar(token: RadiusToken): string {\n\treturn `var(--${token})`;\n}\n\n/**\n * Converts a ComponentTheme object to CSS custom properties (inline style object)\n *\n * @param theme - The theme object to convert\n * @returns An object suitable for use as React inline styles\n */\nexport function themeToStyleVars(\n\ttheme: ComponentTheme | undefined,\n): React.CSSProperties {\n\tif (!theme) return {};\n\n\tconst vars: Record<string, string> = {};\n\n\t// Colors\n\tif (theme.colors) {\n\t\tconst { colors } = theme;\n\t\tif (colors.bgSection)\n\t\t\tvars[\"--theme-bg-section\"] = colorToVar(colors.bgSection);\n\t\tif (colors.cardBackground)\n\t\t\tvars[\"--theme-card-background\"] = colorToVar(colors.cardBackground);\n\t\tif (colors.bgMuted) vars[\"--theme-bg-muted\"] = colorToVar(colors.bgMuted);\n\t\tif (colors.textPrimary)\n\t\t\tvars[\"--theme-text-primary\"] = colorToVar(colors.textPrimary);\n\t\tif (colors.textSecondary)\n\t\t\tvars[\"--theme-text-secondary\"] = colorToVar(colors.textSecondary);\n\t\tif (colors.textMuted)\n\t\t\tvars[\"--theme-text-muted\"] = colorToVar(colors.textMuted);\n\t\tif (colors.textInverted)\n\t\t\tvars[\"--theme-text-inverted\"] = colorToVar(colors.textInverted);\n\t\tif (colors.textLink)\n\t\t\tvars[\"--theme-text-link\"] = colorToVar(colors.textLink);\n\t\tif (colors.textLinkHover)\n\t\t\tvars[\"--theme-text-link-hover\"] = colorToVar(colors.textLinkHover);\n\t\tif (colors.accentBrand)\n\t\t\tvars[\"--theme-accent-brand\"] = colorToVar(colors.accentBrand);\n\t\tif (colors.accentBrandSoft)\n\t\t\tvars[\"--theme-accent-brand-soft\"] = colorToVar(colors.accentBrandSoft);\n\t\tif (colors.borderSubtle)\n\t\t\tvars[\"--theme-border-subtle\"] = colorToVar(colors.borderSubtle);\n\t\tif (colors.borderStrong)\n\t\t\tvars[\"--theme-border-strong\"] = colorToVar(colors.borderStrong);\n\t\tif (colors.borderFocus)\n\t\t\tvars[\"--theme-border-focus\"] = colorToVar(colors.borderFocus);\n\t\tif (colors.borderDivider)\n\t\t\tvars[\"--theme-border-divider\"] = colorToVar(colors.borderDivider);\n\t\tif (colors.buttonPrimaryBg)\n\t\t\tvars[\"--theme-button-primary-bg\"] = colorToVar(colors.buttonPrimaryBg);\n\t\tif (colors.buttonPrimaryBgHover)\n\t\t\tvars[\"--theme-button-primary-bg-hover\"] = colorToVar(\n\t\t\t\tcolors.buttonPrimaryBgHover,\n\t\t\t);\n\t\tif (colors.buttonSecondaryBg)\n\t\t\tvars[\"--theme-button-secondary-bg\"] = colorToVar(\n\t\t\t\tcolors.buttonSecondaryBg,\n\t\t\t);\n\t\tif (colors.buttonSecondaryBgHover)\n\t\t\tvars[\"--theme-button-secondary-bg-hover\"] = colorToVar(\n\t\t\t\tcolors.buttonSecondaryBgHover,\n\t\t\t);\n\t}\n\n\t// Spatial\n\tif (theme.spatial) {\n\t\tconst { spatial } = theme;\n\t\tif (spatial.gridLargeMargin)\n\t\t\tvars[\"--theme-grid-large-margin\"] = spacingToVar(spatial.gridLargeMargin);\n\t\tif (spatial.gridLargeGutter)\n\t\t\tvars[\"--theme-grid-large-gutter\"] = spacingToVar(spatial.gridLargeGutter);\n\t\tif (spatial.gridLargeColumns)\n\t\t\tvars[\"--theme-grid-large-columns\"] = String(spatial.gridLargeColumns);\n\t\tif (spatial.gridMediumMargin)\n\t\t\tvars[\"--theme-grid-medium-margin\"] = spacingToVar(\n\t\t\t\tspatial.gridMediumMargin,\n\t\t\t);\n\t\tif (spatial.gridMediumGutter)\n\t\t\tvars[\"--theme-grid-medium-gutter\"] = spacingToVar(\n\t\t\t\tspatial.gridMediumGutter,\n\t\t\t);\n\t\tif (spatial.gridMediumColumns)\n\t\t\tvars[\"--theme-grid-medium-columns\"] = String(spatial.gridMediumColumns);\n\t\tif (spatial.gridSmallMargin)\n\t\t\tvars[\"--theme-grid-small-margin\"] = spacingToVar(spatial.gridSmallMargin);\n\t\tif (spatial.gridSmallGutter)\n\t\t\tvars[\"--theme-grid-small-gutter\"] = spacingToVar(spatial.gridSmallGutter);\n\t\tif (spatial.gridSmallColumns)\n\t\t\tvars[\"--theme-grid-small-columns\"] = String(spatial.gridSmallColumns);\n\t\tif (spatial.sectionLargeGap)\n\t\t\tvars[\"--theme-section-large-gap\"] = spacingToVar(spatial.sectionLargeGap);\n\t\tif (spatial.sectionLargePadding)\n\t\t\tvars[\"--theme-section-large-padding\"] = spacingToVar(\n\t\t\t\tspatial.sectionLargePadding,\n\t\t\t);\n\t\tif (spatial.sectionMediumGap)\n\t\t\tvars[\"--theme-section-medium-gap\"] = spacingToVar(\n\t\t\t\tspatial.sectionMediumGap,\n\t\t\t);\n\t\tif (spatial.sectionMediumPadding)\n\t\t\tvars[\"--theme-section-medium-padding\"] = spacingToVar(\n\t\t\t\tspatial.sectionMediumPadding,\n\t\t\t);\n\t\tif (spatial.sectionSmallGap)\n\t\t\tvars[\"--theme-section-small-gap\"] = spacingToVar(spatial.sectionSmallGap);\n\t\tif (spatial.sectionSmallPadding)\n\t\t\tvars[\"--theme-section-small-padding\"] = spacingToVar(\n\t\t\t\tspatial.sectionSmallPadding,\n\t\t\t);\n\t\tif (spatial.cardLargeGap)\n\t\t\tvars[\"--theme-card-large-gap\"] = spacingToVar(spatial.cardLargeGap);\n\t\tif (spatial.cardLargePadding)\n\t\t\tvars[\"--theme-card-large-padding\"] = spacingToVar(\n\t\t\t\tspatial.cardLargePadding,\n\t\t\t);\n\t\tif (spatial.cardSmallGap)\n\t\t\tvars[\"--theme-card-small-gap\"] = spacingToVar(spatial.cardSmallGap);\n\t\tif (spatial.cardSmallPadding)\n\t\t\tvars[\"--theme-card-small-padding\"] = spacingToVar(\n\t\t\t\tspatial.cardSmallPadding,\n\t\t\t);\n\t}\n\n\t// Surface\n\tif (theme.surface) {\n\t\tconst { surface } = theme;\n\t\tif (surface.cardRadius)\n\t\t\tvars[\"--theme-card-radius\"] = radiusToVar(surface.cardRadius);\n\t\tif (surface.cardStroke)\n\t\t\tvars[\"--theme-card-stroke\"] = `${surface.cardStroke}px`;\n\t\tif (surface.buttonRadius)\n\t\t\tvars[\"--theme-button-radius\"] = radiusToVar(surface.buttonRadius);\n\t\tif (surface.buttonStrokeWeight)\n\t\t\tvars[\"--theme-button-stroke-weight\"] = `${surface.buttonStrokeWeight}px`;\n\t}\n\n\treturn vars as React.CSSProperties;\n}\n\n/**\n * Converts a ButtonTheme object to CSS custom properties (inline style object)\n *\n * @param theme - The button theme object to convert\n * @returns An object suitable for use as React inline styles\n */\nexport function buttonThemeToStyleVars(\n\ttheme: ButtonTheme | undefined,\n): React.CSSProperties {\n\tif (!theme) return {};\n\n\tconst vars: Record<string, string> = {};\n\n\tif (theme.bg) vars[\"--btn-bg\"] = colorToVar(theme.bg);\n\tif (theme.bgHover) vars[\"--btn-bg-hover\"] = colorToVar(theme.bgHover);\n\tif (theme.bgActive) vars[\"--btn-bg-active\"] = colorToVar(theme.bgActive);\n\tif (theme.text) vars[\"--btn-text\"] = colorToVar(theme.text);\n\tif (theme.borderColor)\n\t\tvars[\"--btn-border-color\"] = colorToVar(theme.borderColor);\n\tif (theme.borderWidth !== undefined)\n\t\tvars[\"--btn-border-width\"] = `${theme.borderWidth}px`;\n\tif (theme.radius) vars[\"--btn-radius\"] = radiusToVar(theme.radius);\n\n\treturn vars as React.CSSProperties;\n}\n","\"use client\";\n\nimport {\n\tButton as BaseButton,\n\ttype ButtonProps as BaseButtonProps,\n} from \"@base-ui-components/react/button\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { type ButtonTheme, buttonThemeToStyleVars } from \"../../../lib/theme\";\n\n/**\n * Button component based on Figma Button component\n *\n * Variants (matches Figma):\n * - primary: Blue filled button for primary actions\n * - default: Dark filled button for secondary prominence\n * - secondary: Light gray filled button with subtle border\n * - destructive: Red filled button for destructive actions\n * - outline: Bordered button with transparent background\n * - ghost: Transparent button with subtle hover\n * - link: Text-only button with underline on hover\n *\n * Sizes (matches Figma):\n * - sm: Small buttons (32px height)\n * - default: Default buttons (36px height)\n * - lg: Large buttons (40px height)\n *\n * For icon-only buttons, use the IconButton component instead.\n *\n * Theme Support:\n * Pass a `theme` prop to override default colors via CSS custom properties.\n */\nconst buttonVariants = tv({\n\tbase: \"inline-flex items-center justify-center gap-spatial-ui-button-gap-icon-text whitespace-nowrap transition-colors duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-1 disabled:pointer-events-none disabled:opacity-50\",\n\tvariants: {\n\t\tvariant: {\n\t\t\t// Primary - blue filled button\n\t\t\tprimary:\n\t\t\t\t\"bg-button-primary-bg text-button-primary-text hover:bg-button-primary-bg-hover active:bg-button-primary-bg-active border-transparent\",\n\t\t\t// Default - dark filled button\n\t\t\tdefault:\n\t\t\t\t\"bg-button-default-bg text-button-default-text hover:bg-button-default-bg-hover active:bg-button-default-bg-active border-transparent\",\n\t\t\t// Secondary - light gray filled with subtle border\n\t\t\tsecondary:\n\t\t\t\t\"bg-button-secondary-bg text-button-secondary-text hover:bg-button-secondary-bg-hover active:bg-button-secondary-bg-active border border-button-secondary-border\",\n\t\t\t// Destructive - red filled button\n\t\t\tdestructive:\n\t\t\t\t\"bg-button-destructive-bg text-button-destructive-text hover:bg-button-destructive-bg-hover active:bg-button-destructive-bg-active border-transparent\",\n\t\t\t// Outline - bordered with transparent background\n\t\t\toutline:\n\t\t\t\t\"bg-button-outline-bg text-button-outline-text hover:bg-button-outline-bg-hover active:bg-button-outline-bg-active border border-button-outline-border hover:border-button-outline-border-hover\",\n\t\t\t// Ghost - transparent with subtle hover\n\t\t\tghost:\n\t\t\t\t\"bg-button-ghost-bg text-button-ghost-text hover:bg-button-ghost-bg-hover active:bg-button-ghost-bg-active border-transparent\",\n\t\t\t// Link - text only with underline on hover\n\t\t\tlink: \"bg-transparent text-button-link-text hover:text-button-link-text-hover hover:underline active:text-button-link-text-hover border-transparent underline-offset-4\",\n\t\t\t// Themed - uses CSS custom properties for styling\n\t\t\tthemed:\n\t\t\t\t\"[background:var(--btn-bg)] [color:var(--btn-text)] [border-color:var(--btn-border-color,transparent)] hover:[background:var(--btn-bg-hover,var(--btn-bg))] active:[background:var(--btn-bg-active,var(--btn-bg-hover,var(--btn-bg)))]\",\n\t\t},\n\t\tsize: {\n\t\t\tsm: \"typography-ui-text-xs h-spatial-ui-button-height-small px-spatial-ui-button-padding-x-small py-spatial-ui-button-padding-y-small rounded-surface-button-small\",\n\t\t\tdefault:\n\t\t\t\t\"typography-ui-text-sm h-spatial-ui-button-height-medium px-spatial-ui-button-padding-x-medium py-spatial-ui-button-padding-y-medium rounded-surface-button-medium\",\n\t\t\tlg: \"typography-ui-text-md h-spatial-ui-button-height-large px-spatial-ui-button-padding-x-large py-spatial-ui-button-padding-y-large rounded-surface-button-large\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t\tsize: \"default\",\n\t},\n});\n\nexport type HTMLButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\nexport type ButtonProps = BaseButtonProps &\n\tVariantProps<typeof buttonVariants> &\n\tHTMLButtonProps & {\n\t\t/**\n\t\t * Theme overrides for button styling via CSS custom properties\n\t\t */\n\t\ttheme?: ButtonTheme;\n\t};\n\n/**\n * Check if a ButtonTheme has any actual values set\n */\nfunction hasThemeValues(theme: ButtonTheme | undefined): boolean {\n\tif (!theme) return false;\n\treturn Object.values(theme).some((v) => v !== undefined && v !== null);\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n\t(\n\t\t{ className, variant, size, render, nativeButton, theme, style, ...props },\n\t\tref,\n\t) => {\n\t\t// When render prop is provided, default nativeButton to false to suppress warnings\n\t\tconst isNativeButton = nativeButton ?? render === undefined;\n\n\t\t// If theme has actual values, use \"themed\" variant to enable CSS custom property styling\n\t\tconst hasTheme = hasThemeValues(theme);\n\t\tconst effectiveVariant = hasTheme ? \"themed\" : variant;\n\t\tconst themeStyles = buttonThemeToStyleVars(theme);\n\t\tconst combinedStyles = hasTheme ? { ...themeStyles, ...style } : style;\n\n\t\t// Resolve actual values for data attributes\n\t\tconst resolvedVariant = effectiveVariant ?? \"default\";\n\t\tconst resolvedSize = size ?? \"default\";\n\n\t\treturn (\n\t\t\t<BaseButton\n\t\t\t\tclassName={buttonVariants({\n\t\t\t\t\tvariant: effectiveVariant,\n\t\t\t\t\tsize,\n\t\t\t\t\tclass: className,\n\t\t\t\t})}\n\t\t\t\tref={ref}\n\t\t\t\trender={render}\n\t\t\t\tnativeButton={isNativeButton}\n\t\t\t\tstyle={combinedStyles}\n\t\t\t\tdata-variant={resolvedVariant}\n\t\t\t\tdata-size={resolvedSize}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","\"use client\";\n\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\n/**\n * IconButton component based on Figma Button component (icon-only variant)\n *\n * **IMPORTANT: Accessibility Requirement**\n * Icon-only buttons MUST have an accessible label. Provide one of:\n * - `aria-label`: A text description of the button's action (recommended)\n * - `aria-labelledby`: Reference to an element containing the label\n * - `title`: Tooltip text (less preferred, but provides a label)\n *\n * @example\n * ```tsx\n * // Correct usage with aria-label\n * <IconButton aria-label=\"Close menu\">\n * <CloseIcon />\n * </IconButton>\n * ```\n *\n * Variants (matches Figma):\n * - primary: Filled brand button (indigo background)\n * - primary-outline: Outlined brand button (indigo border/text)\n * - secondary: Filled neutral button (white background, for dark backgrounds)\n * - secondary-outline: Outlined neutral button (white border/text, for dark backgrounds)\n * - ghost: Transparent button with subtle hover (for light backgrounds)\n * - ghost-inverse: Transparent button with subtle hover (for dark backgrounds)\n *\n * Sizes:\n * - sm: Small (28x28)\n * - md: Medium (40x40) - default\n * - lg: Large (56x56)\n *\n * Rounded:\n * - default: Standard border radius (matches size)\n * - full: Fully circular\n */\nconst iconButtonVariants = tv({\n\tbase: \"inline-flex items-center justify-center whitespace-nowrap transition-colors duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&>svg]:shrink-0\",\n\tvariants: {\n\t\tvariant: {\n\t\t\t// Primary - filled brand button\n\t\t\tprimary:\n\t\t\t\t\"bg-button-primary-bg text-button-primary-text hover:bg-button-primary-bg-hover hover:text-button-primary-text-hover border-transparent focus-visible:ring-button-primary-bg\",\n\t\t\t// Primary Outline - outlined brand button\n\t\t\t\"primary-outline\":\n\t\t\t\t\"bg-button-primary-outline-bg text-button-primary-outline-text border border-button-primary-outline-border hover:bg-button-primary-outline-bg-hover hover:text-button-primary-outline-text-hover hover:border-button-primary-outline-border-hover focus-visible:ring-button-primary-outline-border\",\n\t\t\t// Secondary - filled neutral button (for dark backgrounds)\n\t\t\tsecondary:\n\t\t\t\t\"bg-button-secondary-bg text-button-secondary-text hover:bg-button-secondary-bg-hover hover:text-button-secondary-text-hover border-transparent focus-visible:ring-button-secondary-bg focus-visible:ring-offset-gray-1000\",\n\t\t\t// Secondary Outline - outlined neutral button (for dark backgrounds)\n\t\t\t\"secondary-outline\":\n\t\t\t\t\"bg-button-secondary-outline-bg text-button-secondary-outline-text border border-button-secondary-outline-border hover:bg-button-secondary-outline-bg-hover hover:text-button-secondary-outline-text-hover hover:border-button-secondary-outline-border-hover focus-visible:ring-button-secondary-outline-border focus-visible:ring-offset-gray-1000\",\n\t\t\t// Ghost - transparent button (for light backgrounds)\n\t\t\tghost:\n\t\t\t\t\"bg-button-ghost-bg text-button-ghost-text hover:bg-button-ghost-bg-hover hover:text-button-ghost-text-hover border-transparent focus-visible:ring-gray-1000\",\n\t\t\t// Ghost Inverse - transparent button (for dark backgrounds)\n\t\t\t\"ghost-inverse\":\n\t\t\t\t\"bg-button-ghost-inverse-bg text-button-ghost-inverse-text hover:bg-button-ghost-inverse-bg-hover hover:text-button-ghost-inverse-text-hover border-transparent focus-visible:ring-gray-50 focus-visible:ring-offset-gray-1000\",\n\t\t},\n\t\tsize: {\n\t\t\tsm: \"size-28\",\n\t\t\tmd: \"size-40\",\n\t\t\tlg: \"size-56\",\n\t\t},\n\t\trounded: {\n\t\t\tdefault: \"\",\n\t\t\tfull: \"rounded-full\",\n\t\t},\n\t},\n\tcompoundVariants: [\n\t\t// Apply size-specific rounded only when rounded is \"default\"\n\t\t{ size: \"sm\", rounded: \"default\", class: \"rounded-surface-button-small\" },\n\t\t{ size: \"md\", rounded: \"default\", class: \"rounded-surface-button-medium\" },\n\t\t{ size: \"lg\", rounded: \"default\", class: \"rounded-surface-button-large\" },\n\t],\n\tdefaultVariants: {\n\t\tvariant: \"primary\",\n\t\tsize: \"md\",\n\t\trounded: \"default\",\n\t},\n});\n\ninterface IconButtonState extends Record<string, unknown> {\n\tvariant:\n\t\t| \"primary\"\n\t\t| \"primary-outline\"\n\t\t| \"secondary\"\n\t\t| \"secondary-outline\"\n\t\t| \"ghost\"\n\t\t| \"ghost-inverse\";\n\tsize: \"sm\" | \"md\" | \"lg\";\n\trounded: \"default\" | \"full\";\n}\n\nexport interface IconButtonProps\n\textends useRender.ComponentProps<\"button\", IconButtonState>,\n\t\tVariantProps<typeof iconButtonVariants> {}\n\nfunction IconButton(props: IconButtonProps) {\n\tconst {\n\t\tclassName,\n\t\tvariant = \"primary\",\n\t\tsize = \"md\",\n\t\trounded = \"default\",\n\t\trender,\n\t\t...otherProps\n\t} = props;\n\n\tconst state: IconButtonState = {\n\t\tvariant,\n\t\tsize,\n\t\trounded,\n\t};\n\n\tconst buttonClassName = iconButtonVariants({\n\t\tvariant,\n\t\tsize,\n\t\trounded,\n\t\tclass: className,\n\t});\n\n\treturn useRender<IconButtonState, HTMLButtonElement>({\n\t\trender,\n\t\tstate,\n\t\tprops: {\n\t\t\ttype: \"button\",\n\t\t\tclassName: buttonClassName,\n\t\t\t...otherProps,\n\t\t},\n\t\tdefaultTagName: \"button\",\n\t});\n}\n\nexport { IconButton, iconButtonVariants };\n","import { tv } from \"tailwind-variants\";\n\n/**\n * Shared form control styles for Input, Select, and similar components.\n *\n * These base styles ensure consistent appearance across all form controls:\n * - Consistent height and padding\n * - Unified focus ring and border treatment\n * - Shared hover/disabled states\n *\n * Based on Figma BaseKit / Interface / Input & Dropdown designs.\n */\n\n/**\n * Base styles shared by all form controls (input, select, etc.)\n */\nexport const formControlBase = [\n\t// Layout\n\t\"flex w-full items-center\",\n\t// Typography\n\t\"text-16 font-medium leading-14\",\n\t// Border and radius - uses surface ui radius for theming support\n\t\"border border-solid border-ui-color-border rounded-surface-ui-medium\",\n\t// Background\n\t\"bg-ui-control-background\",\n\t// Transitions\n\t\"transition-[background-color,border-color,box-shadow] duration-150\",\n\t// Focus state\n\t\"outline-none focus-visible:border-border-focus focus-visible:ring-4 focus-visible:ring-ui-color-focus\",\n\t// Hover state (when not focused or disabled)\n\t\"hover:bg-ui-control-background-hover hover:focus-visible:bg-ui-control-background\",\n\t// Disabled state\n\t\"disabled:bg-ui-control-background-disabled disabled:cursor-not-allowed disabled:opacity-50\",\n];\n\n/**\n * Size variants shared by form controls\n * Uses spatial tokens for consistent sizing across form controls\n */\nexport const formControlSizes = {\n\tsm: \"h-spatial-ui-control-height-small px-spatial-ui-control-padding-x-small py-spatial-ui-control-padding-y-small text-14\",\n\tdefault:\n\t\t\"h-spatial-ui-control-height-medium px-spatial-ui-control-padding-x-medium py-spatial-ui-control-padding-y-medium\",\n\tlg: \"h-spatial-ui-control-height-large px-spatial-ui-control-padding-x-large py-spatial-ui-control-padding-y-large text-18\",\n} as const;\n\n/**\n * Error state styles shared by form controls\n */\nexport const formControlError = {\n\ttrue: \"border-ui-error-color focus-visible:border-ui-error-color focus-visible:ring-ui-error-color/20 text-ui-error-color\",\n\tfalse: \"\",\n} as const;\n\n/**\n * Form control variants using tailwind-variants\n * Can be composed with other variants for specific components\n */\nexport const formControlVariants = tv({\n\tbase: formControlBase,\n\tvariants: {\n\t\tsize: formControlSizes,\n\t\terror: formControlError,\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t\terror: false,\n\t},\n});\n\nexport type FormControlSize = keyof typeof formControlSizes;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { formControlBase, formControlError } from \"@/lib/form-control\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Input-specific size variants using semantic input tokens.\n * These tokens allow input sizing to be customized independently from other controls.\n */\nconst inputSizes = {\n\tsm: \"h-spatial-ui-input-height-small px-spatial-ui-input-padding-x-small py-spatial-ui-input-padding-y-small typography-body-sm-md\",\n\tdefault:\n\t\t\"h-spatial-ui-input-height-medium px-spatial-ui-input-padding-x-medium py-spatial-ui-input-padding-y-medium typography-body-md-md\",\n\tlg: \"h-spatial-ui-input-height-large px-spatial-ui-input-padding-x-large py-spatial-ui-input-padding-y-large typography-body-md-lg\",\n} as const;\n\n/**\n * Input variants for styling based on Figma BaseKit / Interface / Input\n *\n * States (handled via CSS pseudo-classes and props):\n * - Default: White background, subtle border\n * - Hover: Light gray background (via :hover)\n * - Focus: Accent border with focus ring (via :focus-visible)\n * - Error: Error border color (via error prop)\n * - Disabled: Disabled background (via :disabled)\n *\n * Sizes:\n * - sm: Smaller height and padding (36px)\n * - default: Standard height (48px)\n * - lg: Larger height and padding (56px)\n */\nconst inputVariants = tv({\n\tbase: [\n\t\t...formControlBase,\n\t\t// Input-specific: Placeholder styling\n\t\t\"placeholder:text-text-muted\",\n\t],\n\tvariants: {\n\t\tsize: inputSizes,\n\t\terror: {\n\t\t\t...formControlError,\n\t\t\ttrue: `${formControlError.true} placeholder:text-ui-error-color/60`,\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t\terror: false,\n\t},\n});\n\nexport interface InputProps\n\textends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n\t\tVariantProps<typeof inputVariants> {\n\t/**\n\t * Whether the input is in an error state\n\t */\n\terror?: boolean;\n}\n\n/**\n * Input component based on Figma BaseKit / Interface / Input\n *\n * A styled text input with support for various states:\n * - Default, hover, focus, error, and disabled states\n * - Three size variants: sm, default, lg\n *\n * Uses semantic UI tokens for theming support.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Input placeholder=\"Enter your email\" />\n *\n * // With error state\n * <Input error placeholder=\"Invalid input\" />\n *\n * // Different sizes\n * <Input size=\"sm\" placeholder=\"Small\" />\n * <Input size=\"lg\" placeholder=\"Large\" />\n *\n * // Disabled\n * <Input disabled placeholder=\"Disabled input\" />\n * ```\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n\t({ className, size, error, type = \"text\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<input\n\t\t\t\tref={ref}\n\t\t\t\ttype={type}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\tclassName={cn(inputVariants({ size, error, class: className }))}\n\t\t\t\tdata-size={size ?? \"default\"}\n\t\t\t\tdata-error={error ?? false}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nInput.displayName = \"Input\";\n\nexport { Input, inputVariants };\n","\"use client\";\n\nimport type * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { formControlBase } from \"@/lib/form-control\";\nimport { cn } from \"@/lib/utils\";\nimport { Button, type ButtonProps } from \"../button\";\n\n// =============================================================================\n// InputGroup Variants\n// =============================================================================\n\nconst inputGroupVariants = tv({\n\tbase: [\n\t\t...formControlBase,\n\t\t// InputGroup-specific: Container layout and styling\n\t\t\"group/input-group relative flex w-full items-center justify-start\",\n\t\t\"shadow-xs\",\n\t\t// Override focus state to work with child focus detection\n\t\t\"focus-visible:border-ui-color-border focus-visible:ring-0\",\n\t\t// Override hover to work with InputGroup structure\n\t\t\"hover:bg-ui-control-background\",\n\t\t// Height and layout (overridden by size variants)\n\t\t\"min-w-0\",\n\t\t\"has-[>textarea]:h-auto\",\n\t\t\"has-[>[data-align=inline-start]]:[&>input]:pl-6\",\n\t\t\"has-[>[data-align=inline-end]]:[&>input]:pr-6\",\n\t\t\"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pt-spatial-ui-input-group-gap-block has-[>[data-align=block-start]]:[&>input]:pb-spatial-ui-input-group-padding-y-medium\",\n\t\t\"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pb-spatial-ui-input-group-gap-block\",\n\t\t// Focus state detection on child input (overrides formControlBase focus)\n\t\t\"has-[[data-slot=input-group-control]:focus-visible]:border-ui-accent-base has-[[data-slot=input-group-control]:focus-visible]:ring-4 has-[[data-slot=input-group-control]:focus-visible]:ring-ui-color-focus\",\n\t\t// Error state detection on child elements\n\t\t\"has-[[data-slot][aria-invalid=true]]:border-ui-error-color has-[[data-slot][aria-invalid=true]]:ring-ui-error-color/20\",\n\t\t// Disabled state (overrides formControlBase disabled)\n\t\t\"data-[disabled=true]:bg-ui-control-background-disabled data-[disabled=true]:opacity-50 data-[disabled=true]:cursor-not-allowed\",\n\t],\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"h-spatial-ui-input-group-height-small\",\n\t\t\tdefault: \"h-spatial-ui-input-group-height-medium\",\n\t\t\tlg: \"h-spatial-ui-input-group-height-large\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t},\n});\n\n// =============================================================================\n// InputGroupAddon Variants\n// =============================================================================\n\nconst inputGroupAddonVariants = tv({\n\tbase: [\n\t\t\"flex items-center justify-center gap-6\",\n\t\t\"typography-ui-text-sm text-text-muted\",\n\t\t\"select-none cursor-text\",\n\t\t\"[&>svg:not([class*='size-'])]:size-16\",\n\t\t\"[&_button]:text-[unset] [&_button]:cursor-pointer\",\n\t\t\"group-data-[disabled=true]/input-group:opacity-50\",\n\t],\n\tvariants: {\n\t\talign: {\n\t\t\t\"inline-start\": [\n\t\t\t\t\"order-first h-full\",\n\t\t\t\t\"pl-spatial-ui-input-group-padding-x-medium\",\n\t\t\t\t\"has-[>button]:ml-[-6px]\",\n\t\t\t],\n\t\t\t\"inline-end\": [\n\t\t\t\t\"order-last h-full\",\n\t\t\t\t\"pr-spatial-ui-input-group-padding-x-medium\",\n\t\t\t\t\"has-[>button]:mr-[-6px]\",\n\t\t\t],\n\t\t\t\"block-start\": [\n\t\t\t\t\"order-first h-auto w-full justify-start\",\n\t\t\t\t\"px-spatial-ui-input-group-padding-x-medium pt-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t\"[.border-b]:pb-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t// Use shared text style for block addons (12px, Regular weight per Figma)\n\t\t\t\t\"typography-ui-text-xs\",\n\t\t\t],\n\t\t\t\"block-end\": [\n\t\t\t\t\"order-last h-auto w-full justify-start\",\n\t\t\t\t\"px-spatial-ui-input-group-padding-x-medium pb-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t\"[.border-t]:pt-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t// Use shared text style for block addons (12px, Regular weight per Figma)\n\t\t\t\t\"typography-ui-text-xs\",\n\t\t\t],\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\talign: \"inline-start\",\n\t},\n});\n\n// =============================================================================\n// InputGroup Component\n// =============================================================================\n\nexport interface InputGroupProps\n\textends React.FieldsetHTMLAttributes<HTMLFieldSetElement>,\n\t\tVariantProps<typeof inputGroupVariants> {}\n\n/**\n * InputGroup component for combining inputs with addons, buttons, and text.\n *\n * A container that groups an input with prefix/suffix addons, icons, or buttons.\n * Supports inline (left/right) and block (top/bottom) addon positioning.\n *\n * Uses semantic UI tokens for theming support.\n *\n * @example\n * ```tsx\n * // With prefix icon\n * <InputGroup>\n * <InputGroupAddon>\n * <SearchIcon />\n * </InputGroupAddon>\n * <InputGroupInput placeholder=\"Search...\" />\n * </InputGroup>\n *\n * // With suffix button\n * <InputGroup>\n * <InputGroupInput placeholder=\"Enter email\" />\n * <InputGroupAddon align=\"inline-end\">\n * <InputGroupButton>Subscribe</InputGroupButton>\n * </InputGroupAddon>\n * </InputGroup>\n *\n * // With text prefix\n * <InputGroup>\n * <InputGroupAddon>\n * <InputGroupText>https://</InputGroupText>\n * </InputGroupAddon>\n * <InputGroupInput placeholder=\"example.com\" />\n * </InputGroup>\n * ```\n */\nfunction InputGroup({ className, size, disabled, ...props }: InputGroupProps) {\n\treturn (\n\t\t<fieldset\n\t\t\tdata-slot=\"input-group\"\n\t\t\tdata-disabled={disabled || undefined}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={cn(\n\t\t\t\t\"p-0 m-0 min-w-0\",\n\t\t\t\tinputGroupVariants({ size, class: className }),\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupAddon Component\n// =============================================================================\n\nexport interface InputGroupAddonProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof inputGroupAddonVariants> {}\n\n/**\n * InputGroupAddon component for positioning addons within an InputGroup.\n *\n * Can contain icons, text, or buttons. Clicking the addon focuses the input.\n *\n * @example\n * ```tsx\n * // Inline start (default - left side)\n * <InputGroupAddon>\n * <SearchIcon />\n * </InputGroupAddon>\n *\n * // Inline end (right side)\n * <InputGroupAddon align=\"inline-end\">\n * <InputGroupButton>Submit</InputGroupButton>\n * </InputGroupAddon>\n *\n * // Block positions (top/bottom)\n * <InputGroupAddon align=\"block-start\">\n * <label>Email Address</label>\n * </InputGroupAddon>\n * ```\n */\nfunction InputGroupAddon({\n\tclassName,\n\talign = \"inline-start\",\n\tonClick,\n\tonKeyDown,\n\t...props\n}: InputGroupAddonProps) {\n\tconst focusInput = (element: HTMLElement) => {\n\t\telement.parentElement?.querySelector(\"input\")?.focus();\n\t};\n\n\tconst handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\t// Don't focus input if clicking a button inside the addon\n\t\tif ((e.target as HTMLElement).closest(\"button\")) {\n\t\t\tonClick?.(e);\n\t\t\treturn;\n\t\t}\n\t\t// Focus the input when clicking the addon\n\t\tfocusInput(e.currentTarget);\n\t\tonClick?.(e);\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t// Focus input on Enter or Space (unless inside a button)\n\t\tif (\n\t\t\t(e.key === \"Enter\" || e.key === \" \") &&\n\t\t\t!(e.target as HTMLElement).closest(\"button\")\n\t\t) {\n\t\t\tfocusInput(e.currentTarget);\n\t\t}\n\t\tonKeyDown?.(e);\n\t};\n\n\treturn (\n\t\t// biome-ignore lint/a11y/noStaticElementInteractions: Click-to-focus is a convenience UX pattern; primary interaction is via the input itself\n\t\t<div\n\t\t\tdata-slot=\"input-group-addon\"\n\t\t\tdata-align={align}\n\t\t\tclassName={cn(inputGroupAddonVariants({ align, class: className }))}\n\t\t\tonClick={handleClick}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupButton Component\n// =============================================================================\n\nconst inputGroupButtonVariants = tv({\n\tbase: [\n\t\t\"typography-ui-button-small shadow-none flex gap-6 items-center\",\n\t\t\"focus-visible:ring-1 focus-visible:ring-offset-0 focus-visible:ring-ui-color-border\",\n\t\t\"transition-opacity duration-150\",\n\t],\n\tvariants: {\n\t\tsize: {\n\t\t\txs: \"!h-24 gap-4 px-8 rounded-surface-ui-small [&>svg:not([class*='size-'])]:size-16 has-[>svg]:px-6\",\n\t\t\tsm: \"!h-28 px-10 gap-6 rounded-surface-ui-medium has-[>svg]:px-8\",\n\t\t\t\"icon-xs\":\n\t\t\t\t\"!size-24 rounded-surface-ui-small p-0 [&>svg:not([class*='size-'])]:size-16 has-[>svg]:p-0\",\n\t\t\t\"icon-sm\":\n\t\t\t\t\"!size-28 rounded-surface-ui-medium p-0 [&>svg:not([class*='size-'])]:size-16 has-[>svg]:p-0\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"xs\",\n\t},\n});\n\nexport interface InputGroupButtonProps\n\textends Omit<ButtonProps, \"size\">,\n\t\tVariantProps<typeof inputGroupButtonVariants> {}\n\n/**\n * InputGroupButton component for inline buttons within an InputGroup.\n *\n * A small button variant designed to fit inside input groups.\n *\n * @example\n * ```tsx\n * <InputGroupAddon align=\"inline-end\">\n * <InputGroupButton>Submit</InputGroupButton>\n * </InputGroupAddon>\n *\n * // Icon button\n * <InputGroupAddon align=\"inline-end\">\n * <InputGroupButton size=\"icon-xs\">\n * <ClearIcon />\n * </InputGroupButton>\n * </InputGroupAddon>\n * ```\n */\nfunction InputGroupButton({\n\tclassName,\n\ttype = \"button\",\n\tvariant = \"ghost\",\n\tsize = \"xs\",\n\t...props\n}: InputGroupButtonProps) {\n\treturn (\n\t\t<Button\n\t\t\ttype={type}\n\t\t\tdata-size={size}\n\t\t\tvariant={variant}\n\t\t\tclassName={cn(inputGroupButtonVariants({ size, class: className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupText Component\n// =============================================================================\n\nexport interface InputGroupTextProps\n\textends React.HTMLAttributes<HTMLSpanElement> {}\n\n/**\n * InputGroupText component for static text within an InputGroup.\n *\n * Use for prefixes like \"https://\" or suffixes like \".com\"\n *\n * @example\n * ```tsx\n * <InputGroupAddon>\n * <InputGroupText>https://</InputGroupText>\n * </InputGroupAddon>\n * ```\n */\nfunction InputGroupText({ className, ...props }: InputGroupTextProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-6 typography-ui-text-sm text-text-muted\",\n\t\t\t\t\"[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-16\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupInput Component\n// =============================================================================\n\nexport interface InputGroupInputProps\n\textends React.InputHTMLAttributes<HTMLInputElement> {}\n\n/**\n * InputGroupInput component - the input element within an InputGroup.\n *\n * Styled to integrate seamlessly with the InputGroup container.\n *\n * @example\n * ```tsx\n * <InputGroup>\n * <InputGroupInput placeholder=\"Enter text...\" />\n * </InputGroup>\n * ```\n */\nfunction InputGroupInput({ className, ...props }: InputGroupInputProps) {\n\treturn (\n\t\t<input\n\t\t\tdata-slot=\"input-group-control\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex-1 min-w-0 h-full w-full\",\n\t\t\t\t\"border-0 bg-transparent shadow-none outline-none\",\n\t\t\t\t\"typography-ui-text-sm text-left placeholder:text-text-muted\",\n\t\t\t\t\"px-spatial-ui-input-group-padding-x-medium\",\n\t\t\t\t\"focus-visible:ring-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupTextarea Component\n// =============================================================================\n\nexport interface InputGroupTextareaProps\n\textends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\n/**\n * InputGroupTextarea component - a textarea element within an InputGroup.\n *\n * Styled to integrate seamlessly with the InputGroup container.\n *\n * @example\n * ```tsx\n * <InputGroup>\n * <InputGroupTextarea placeholder=\"Enter long text...\" rows={4} />\n * </InputGroup>\n * ```\n */\nfunction InputGroupTextarea({ className, ...props }: InputGroupTextareaProps) {\n\treturn (\n\t\t<textarea\n\t\t\tdata-slot=\"input-group-control\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex-1 min-w-0 w-full resize-none\",\n\t\t\t\t\"border-0 bg-transparent shadow-none outline-none\",\n\t\t\t\t\"typography-ui-text-sm text-left placeholder:text-text-muted\",\n\t\t\t\t\"px-spatial-ui-input-group-padding-x-medium py-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t\"focus-visible:ring-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tInputGroup,\n\tInputGroupAddon,\n\tInputGroupButton,\n\tInputGroupText,\n\tInputGroupInput,\n\tInputGroupTextarea,\n\tinputGroupVariants,\n\tinputGroupAddonVariants,\n};\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface NdstudioFooterProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * The URL to link to\n\t * @default \"https://ndstudio.gov\"\n\t */\n\thref?: string;\n}\n\n/**\n * NdstudioFooter component displays a \"Designed and Engineered in DC by National Design Studio\" footer link.\n *\n * This component is designed to be used as a footer within other components like Tout,\n * but can also be used standalone.\n *\n * @example\n * ```tsx\n * // Used within a Tout component via footer slot\n * <Tout\n * headline=\"Feature Headline\"\n * primaryAction={<Button>Primary</Button>}\n * backgroundMedia={<img src=\"/bg.jpg\" alt=\"\" />}\n * footer={<NdstudioFooter />}\n * />\n *\n * // Standalone usage\n * <NdstudioFooter className=\"my-custom-class\" />\n * ```\n */\nconst NdstudioFooter = React.forwardRef<HTMLDivElement, NdstudioFooterProps>(\n\t({ className, href = \"https://ndstudio.gov\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={cn(\"text-center\", className)} {...props}>\n\t\t\t\t<p className=\"typography-label-large uppercase text-ivory-alpha-75\">\n\t\t\t\t\tDesigned and Engineered in DC by{\" \"}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={href}\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tNational Design Studio\n\t\t\t\t\t\t<span className=\"sr-only\"> (opens in new tab)</span>\n\t\t\t\t\t</a>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t},\n);\nNdstudioFooter.displayName = \"NdstudioFooter\";\n\nexport { NdstudioFooter };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\nconst pagerControlVariants = tv({\n\tbase: \"flex items-center\",\n\tvariants: {\n\t\tsize: {\n\t\t\t// Uses primitive spacing tokens\n\t\t\tsm: \"gap-2\",\n\t\t\tdefault: \"gap-2\",\n\t\t\tlg: \"gap-4\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t},\n});\n\nconst dotBaseVariants = tv({\n\tbase: \"cursor-pointer rounded-full transition-all duration-500 ease-[cubic-bezier(0.23,1,0.32,1)]\",\n\tvariants: {\n\t\tsize: {\n\t\t\t// Uses primitive spacing tokens\n\t\t\tsm: \"h-6\",\n\t\t\tdefault: \"h-10\",\n\t\t\tlg: \"h-16\",\n\t\t},\n\t\tvariant: {\n\t\t\tcharcoal: \"\",\n\t\t\tivory: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t\tvariant: \"charcoal\",\n\t},\n});\n\nexport interface PagerControlProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">,\n\t\tVariantProps<typeof pagerControlVariants>,\n\t\tVariantProps<typeof dotBaseVariants> {\n\t/**\n\t * Total number of pages/items\n\t */\n\tcount: number;\n\t/**\n\t * Current active page index (0-based)\n\t */\n\tactiveIndex?: number;\n\t/**\n\t * Duration in milliseconds for each page before auto-advancing\n\t * Set to 0 to disable auto-advance\n\t * @default 5000\n\t */\n\tduration?: number;\n\t/**\n\t * Whether the pager should auto-advance\n\t * @default true\n\t */\n\tautoPlay?: boolean;\n\t/**\n\t * Callback when the active page changes\n\t */\n\tonChange?: (index: number) => void;\n\t/**\n\t * Whether to pause auto-advance on hover\n\t * @default true\n\t */\n\tpauseOnHover?: boolean;\n\t/**\n\t * Whether to loop back to the first page after the last\n\t * @default true\n\t */\n\tloop?: boolean;\n}\n\n/**\n * PagerControl component for indicating progress through a series of pages/slides.\n *\n * Features smooth width transitions when switching between dots and an animated\n * progress fill on the active dot that shows time remaining before auto-advancing\n * (similar to Apple's carousel indicators).\n *\n * Variants:\n * - charcoal: Dark dots (for light backgrounds)\n * - ivory: Light dots (for dark backgrounds)\n *\n * Sizes:\n * - sm: Small dots (6px height)\n * - default: Medium dots (10px height)\n * - lg: Large dots (16px height)\n */\nconst PagerControl = React.forwardRef<HTMLDivElement, PagerControlProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tsize,\n\t\t\tvariant,\n\t\t\tcount,\n\t\t\tactiveIndex: controlledIndex,\n\t\t\tduration = 5000,\n\t\t\tautoPlay = true,\n\t\t\tonChange,\n\t\t\tpauseOnHover = true,\n\t\t\tloop = true,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [internalIndex, setInternalIndex] = React.useState(0);\n\t\tconst [isPaused, setIsPaused] = React.useState(false);\n\t\tconst [progress, setProgress] = React.useState(0);\n\n\t\t// Use controlled index if provided, otherwise use internal state\n\t\tconst activeIndex =\n\t\t\tcontrolledIndex !== undefined ? controlledIndex : internalIndex;\n\t\tconst isControlled = controlledIndex !== undefined;\n\n\t\t// Development warnings for common issues\n\t\tReact.useEffect(() => {\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tif (count < 1) {\n\t\t\t\t\tconsole.warn(\"PagerControl: count must be at least 1\");\n\t\t\t\t}\n\t\t\t\tif (controlledIndex !== undefined && controlledIndex >= count) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`PagerControl: activeIndex (${controlledIndex}) is out of bounds. Must be less than count (${count}).`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (controlledIndex !== undefined && controlledIndex < 0) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`PagerControl: activeIndex (${controlledIndex}) cannot be negative.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (isControlled && onChange === undefined) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\"PagerControl: controlled mode (activeIndex provided) requires an onChange handler.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}, [count, controlledIndex, isControlled, onChange]);\n\n\t\t// Clamp activeIndex to valid bounds\n\t\tconst safeActiveIndex = Math.max(0, Math.min(activeIndex, count - 1));\n\n\t\tconst animationFrameRef = React.useRef<number | null>(null);\n\t\tconst startTimeRef = React.useRef<number | null>(null);\n\t\tconst pausedProgressRef = React.useRef<number>(0);\n\n\t\tconst goToNext = React.useCallback(() => {\n\t\t\tconst nextIndex = safeActiveIndex + 1;\n\t\t\tif (nextIndex >= count) {\n\t\t\t\tif (loop) {\n\t\t\t\t\tif (!isControlled) setInternalIndex(0);\n\t\t\t\t\tonChange?.(0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isControlled) setInternalIndex(nextIndex);\n\t\t\t\tonChange?.(nextIndex);\n\t\t\t}\n\t\t}, [safeActiveIndex, count, loop, isControlled, onChange]);\n\n\t\tconst goToIndex = React.useCallback(\n\t\t\t(index: number) => {\n\t\t\t\tif (!isControlled) setInternalIndex(index);\n\t\t\t\tonChange?.(index);\n\t\t\t\t// Reset progress when manually changing\n\t\t\t\tsetProgress(0);\n\t\t\t\tpausedProgressRef.current = 0;\n\t\t\t\tstartTimeRef.current = null;\n\t\t\t},\n\t\t\t[isControlled, onChange],\n\t\t);\n\n\t\t// Animation loop for smooth progress fill\n\t\tReact.useEffect(() => {\n\t\t\tif (!autoPlay || duration <= 0 || isPaused) {\n\t\t\t\tif (animationFrameRef.current) {\n\t\t\t\t\tcancelAnimationFrame(animationFrameRef.current);\n\t\t\t\t\tanimationFrameRef.current = null;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst animate = (timestamp: number) => {\n\t\t\t\tif (startTimeRef.current === null) {\n\t\t\t\t\tstartTimeRef.current =\n\t\t\t\t\t\ttimestamp - (pausedProgressRef.current / 100) * duration;\n\t\t\t\t}\n\n\t\t\t\tconst elapsed = timestamp - startTimeRef.current;\n\t\t\t\tconst newProgress = Math.min((elapsed / duration) * 100, 100);\n\t\t\t\tsetProgress(newProgress);\n\n\t\t\t\tif (newProgress >= 100) {\n\t\t\t\t\tgoToNext();\n\t\t\t\t\t// Reset for next cycle\n\t\t\t\t\tsetProgress(0);\n\t\t\t\t\tpausedProgressRef.current = 0;\n\t\t\t\t\tstartTimeRef.current = null;\n\t\t\t\t} else {\n\t\t\t\t\tanimationFrameRef.current = requestAnimationFrame(animate);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tanimationFrameRef.current = requestAnimationFrame(animate);\n\n\t\t\treturn () => {\n\t\t\t\tif (animationFrameRef.current) {\n\t\t\t\t\tcancelAnimationFrame(animationFrameRef.current);\n\t\t\t\t}\n\t\t\t};\n\t\t}, [autoPlay, duration, isPaused, goToNext]);\n\n\t\t// Handle pause/resume\n\t\tconst handleMouseEnter = React.useCallback(() => {\n\t\t\tif (pauseOnHover) {\n\t\t\t\tpausedProgressRef.current = progress;\n\t\t\t\tstartTimeRef.current = null;\n\t\t\t\tsetIsPaused(true);\n\t\t\t}\n\t\t}, [pauseOnHover, progress]);\n\n\t\tconst handleMouseLeave = React.useCallback(() => {\n\t\t\tif (pauseOnHover) {\n\t\t\t\tsetIsPaused(false);\n\t\t\t}\n\t\t}, [pauseOnHover]);\n\n\t\t// Reset progress when activeIndex changes externally (controlled mode)\n\t\tReact.useEffect(() => {\n\t\t\tif (isControlled) {\n\t\t\t\tsetProgress(0);\n\t\t\t\tpausedProgressRef.current = 0;\n\t\t\t\tstartTimeRef.current = null;\n\t\t\t}\n\t\t}, [isControlled]);\n\n\t\t// Get dot dimensions based on size - uses primitive spacing tokens\n\t\tconst getDotWidth = (isActive: boolean) => {\n\t\t\tif (isActive) {\n\t\t\t\tswitch (size) {\n\t\t\t\t\tcase \"sm\":\n\t\t\t\t\t\treturn \"w-16\";\n\t\t\t\t\tcase \"lg\":\n\t\t\t\t\t\treturn \"w-36\";\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn \"w-28\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (size) {\n\t\t\t\tcase \"sm\":\n\t\t\t\t\treturn \"w-6\";\n\t\t\t\tcase \"lg\":\n\t\t\t\t\treturn \"w-16\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"w-10\";\n\t\t\t}\n\t\t};\n\n\t\t// Get background classes for inactive dots\n\t\tconst getInactiveClasses = () => {\n\t\t\tif (variant === \"ivory\") {\n\t\t\t\treturn \"bg-alpha-white-30 hover:bg-alpha-white-60\";\n\t\t\t}\n\t\t\treturn \"bg-alpha-black-30 hover:bg-alpha-black-60\";\n\t\t};\n\n\t\t// Get background class for active dot (the track/background)\n\t\tconst getActiveTrackClass = () => {\n\t\t\tif (variant === \"ivory\") {\n\t\t\t\treturn \"bg-alpha-white-30\";\n\t\t\t}\n\t\t\treturn \"bg-alpha-black-30\";\n\t\t};\n\n\t\t// Get fill color for the progress indicator\n\t\tconst getProgressFillClass = () => {\n\t\t\tif (variant === \"ivory\") {\n\t\t\t\treturn \"bg-gray-50\";\n\t\t\t}\n\t\t\treturn \"bg-gray-1200\";\n\t\t};\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"tablist\"\n\t\t\t\taria-label=\"Page indicators\"\n\t\t\t\tclassName={pagerControlVariants({ size, class: className })}\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{Array.from({ length: count }, (_, index) => {\n\t\t\t\t\tconst isActive = index === safeActiveIndex;\n\n\t\t\t\t\tif (isActive) {\n\t\t\t\t\t\t// Active dot with progress fill\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: Pagination dots have fixed order based on count\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\taria-selected={true}\n\t\t\t\t\t\t\t\taria-label={`Page ${index + 1} of ${count}, current`}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"relative cursor-pointer overflow-hidden rounded-full transition-all duration-500 ease-[cubic-bezier(0.23,1,0.32,1)]\",\n\t\t\t\t\t\t\t\t\tdotBaseVariants({ size, variant }),\n\t\t\t\t\t\t\t\t\tgetDotWidth(true),\n\t\t\t\t\t\t\t\t\tgetActiveTrackClass(),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tonClick={() => goToIndex(index)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Progress fill */}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"absolute top-0 bottom-0 left-0 h-full rounded-full\",\n\t\t\t\t\t\t\t\t\t\tgetProgressFillClass(),\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: autoPlay && duration > 0 ? `${progress}%` : \"100%\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Inactive dot\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: Pagination dots have fixed order based on count\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\taria-selected={false}\n\t\t\t\t\t\t\taria-label={`Go to page ${index + 1} of ${count}`}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tdotBaseVariants({ size, variant }),\n\t\t\t\t\t\t\t\tgetDotWidth(false),\n\t\t\t\t\t\t\t\tgetInactiveClasses(),\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={() => goToIndex(index)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t},\n);\nPagerControl.displayName = \"PagerControl\";\n\nexport { PagerControl, pagerControlVariants };\n","import { tv } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Shared arrow variants for floating UI components\n *\n * Used by Tooltip, Popover, and other floating components.\n * Handles positioning based on the side attribute.\n */\nexport const floatingArrowVariants = tv({\n\tbase: [\n\t\t// Display flex to properly size the arrow container\n\t\t\"flex\",\n\t\t// Positioning based on floating side (uses spacing tokens since --spacing: 1px)\n\t\t\"data-[side=bottom]:-top-7\",\n\t\t\"data-[side=left]:-right-12 data-[side=left]:rotate-90\",\n\t\t\"data-[side=right]:-left-12 data-[side=right]:-rotate-90\",\n\t\t\"data-[side=top]:-bottom-7 data-[side=top]:rotate-180\",\n\t\t// Animation - follows popup\n\t\t\"data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:opacity-0\",\n\t],\n});\n\nexport interface FloatingArrowSvgProps {\n\t/** CSS class for the main fill color (e.g., \"fill-tooltip-bg\" or \"fill-overlay-background\") */\n\tfillClassName: string;\n\t/** CSS class for the border color using fill-* (e.g., \"fill-overlay-border\") - renders as outline behind main fill */\n\tborderClassName?: string;\n\t/** Additional className for the SVG element */\n\tclassName?: string;\n}\n\n/**\n * FloatingArrowSvg\n *\n * A shared arrow SVG component for floating UI elements.\n * Use with Tooltip, Popover, Dropdown, and other floating components.\n *\n * @example\n * ```tsx\n * // For dark tooltip (no border)\n * <FloatingArrowSvg fillClassName=\"fill-tooltip-bg\" />\n *\n * // For light popover with border\n * <FloatingArrowSvg\n * fillClassName=\"fill-overlay-background\"\n * borderClassName=\"fill-overlay-border\"\n * />\n * ```\n */\nexport const FloatingArrowSvg = ({\n\tfillClassName,\n\tborderClassName,\n\tclassName,\n}: FloatingArrowSvgProps) => (\n\t<svg\n\t\twidth=\"20\"\n\t\theight=\"10\"\n\t\tviewBox=\"0 0 20 10\"\n\t\tfill=\"none\"\n\t\tclassName={cn(\"block\", className)}\n\t\taria-hidden=\"true\"\n\t>\n\t\t{/* Main fill shape */}\n\t\t<path\n\t\t\td=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n\t\t\tclassName={fillClassName}\n\t\t/>\n\t\t{/* Border stroke (rendered on top for outline effect) */}\n\t\t{borderClassName && (\n\t\t\t<path\n\t\t\t\td=\"M8.99542 1.85876C9.75604 1.17425 10.9106 1.17422 11.6713 1.85878L16.5281 6.22989C17.0789 6.72568 17.7938 7.00001 18.5349 7.00001L15.89 7L11.0023 2.60207C10.622 2.2598 10.0447 2.2598 9.66436 2.60207L4.77734 7L2.13171 7.00001C2.87284 7.00001 3.58774 6.72568 4.13861 6.22989L8.99542 1.85876Z\"\n\t\t\t\tclassName={borderClassName}\n\t\t\t/>\n\t\t)}\n\t</svg>\n);\n","\"use client\";\n\nimport { Popover as BasePopover } from \"@base-ui-components/react/popover\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\nimport {\n\tFloatingArrowSvg,\n\tfloatingArrowVariants,\n} from \"../../shared/floating-arrow\";\n\n/**\n * Popover popup variants\n *\n * Uses semantic overlay tokens for themeable styling:\n * - color.overlay.background - Light background\n * - color.overlay.border - Subtle border\n * - color.overlay.text - Primary text\n * - surface.overlay.radius - Rounded corners\n * - spatial.component.overlay.padding/gap - Consistent spacing\n */\nconst popoverPopupVariants = tv({\n\tbase: [\n\t\t// Layout - uses component overlay tokens\n\t\t\"p-spatial-component-overlay-padding\",\n\t\t// Background - uses overlay background token\n\t\t\"bg-overlay-background\",\n\t\t// Border - uses overlay border token\n\t\t\"border border-overlay-border\",\n\t\t// Text - uses overlay text token\n\t\t\"text-overlay-text\",\n\t\t// Border radius - uses surface overlay token\n\t\t\"rounded-surface-overlay\",\n\t\t// Shadow for elevation\n\t\t\"shadow-lg\",\n\t\t// Allow arrow to extend outside popup bounds\n\t\t\"overflow-visible\",\n\t\t// Animation\n\t\t\"origin-[var(--transform-origin)]\",\n\t\t\"transition-[transform,scale,opacity] duration-150\",\n\t\t\"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n\t\t// Ensure it's above other content (higher than backdrop z-40)\n\t\t\"z-50\",\n\t\t// Max width for reasonable content display\n\t\t\"max-w-[320px]\",\n\t],\n\tvariants: {\n\t\tvariant: {\n\t\t\tdefault: \"\",\n\t\t\t// Future variants can be added here\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t},\n});\n\n/**\n * Popover arrow variants - uses shared floating arrow variants\n */\nconst popoverArrowVariants = floatingArrowVariants;\n\n// ============================================================================\n// Popover Root\n// ============================================================================\n\nexport interface PopoverRootProps extends BasePopover.Root.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Popover Root\n *\n * Groups all popover parts. Does not render an element.\n */\nconst PopoverRoot = ({ children, ...props }: PopoverRootProps) => {\n\treturn <BasePopover.Root {...props}>{children}</BasePopover.Root>;\n};\n\n// ============================================================================\n// Popover Trigger\n// ============================================================================\n\nexport interface PopoverTriggerProps\n\textends React.ComponentProps<typeof BasePopover.Trigger> {\n\tclassName?: string;\n}\n\n/**\n * Popover Trigger\n *\n * The element that triggers the popover on click.\n * Renders as the child element with popover behavior attached.\n * When children is a single React element, uses `render` prop to avoid wrapper element.\n */\nconst PopoverTrigger = React.forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n\t({ className, children, ...props }, ref) => {\n\t\t// If children is a single React element, use render prop to avoid wrapper\n\t\tconst isSingleElement = React.isValidElement(children);\n\n\t\tif (isSingleElement) {\n\t\t\treturn (\n\t\t\t\t<BasePopover.Trigger\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\trender={children as React.ReactElement<Record<string, unknown>>}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<BasePopover.Trigger ref={ref} className={className} {...props}>\n\t\t\t\t{children}\n\t\t\t</BasePopover.Trigger>\n\t\t);\n\t},\n);\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\n// ============================================================================\n// Popover Portal\n// ============================================================================\n\nexport interface PopoverPortalProps extends BasePopover.Portal.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Popover Portal\n *\n * Renders the popover popup in a portal outside the DOM hierarchy.\n */\nconst PopoverPortal = ({ children, ...props }: PopoverPortalProps) => {\n\treturn <BasePopover.Portal {...props}>{children}</BasePopover.Portal>;\n};\n\n// ============================================================================\n// Popover Backdrop\n// ============================================================================\n\nexport interface PopoverBackdropProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Backdrop>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Popover Backdrop\n *\n * Optional backdrop element that can be used to close the popover on click.\n */\nconst PopoverBackdrop = React.forwardRef<HTMLDivElement, PopoverBackdropProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Backdrop\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\"fixed inset-0 z-40\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nPopoverBackdrop.displayName = \"PopoverBackdrop\";\n\n// ============================================================================\n// Popover Positioner\n// ============================================================================\n\nexport interface PopoverPositionerProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BasePopover.Positioner>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\n/**\n * Popover Positioner\n *\n * Positions the popover popup relative to the trigger.\n */\nconst PopoverPositioner = React.forwardRef<\n\tHTMLDivElement,\n\tPopoverPositionerProps\n>(({ className, side = \"bottom\", sideOffset = 8, ...props }, ref) => {\n\treturn (\n\t\t<BasePopover.Positioner\n\t\t\tref={ref}\n\t\t\tside={side}\n\t\t\tsideOffset={sideOffset}\n\t\t\tclassName={cn(\"z-50\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nPopoverPositioner.displayName = \"PopoverPositioner\";\n\n// ============================================================================\n// Popover Popup\n// ============================================================================\n\nexport interface PopoverPopupProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Popup>, \"className\">,\n\t\tVariantProps<typeof popoverPopupVariants> {\n\tclassName?: string;\n}\n\n/**\n * Popover Popup\n *\n * The popover content container with styled appearance.\n */\nconst PopoverPopup = React.forwardRef<HTMLDivElement, PopoverPopupProps>(\n\t({ className, variant, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Popup\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(popoverPopupVariants({ variant }), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nPopoverPopup.displayName = \"PopoverPopup\";\n\n// ============================================================================\n// Popover Arrow\n// ============================================================================\n\nexport interface PopoverArrowProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Arrow>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Popover Arrow\n *\n * Visual pointer element for the popover.\n * Uses shared FloatingArrowSvg with overlay color tokens for fill and border.\n */\nconst PopoverArrow = React.forwardRef<HTMLDivElement, PopoverArrowProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Arrow\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(popoverArrowVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<FloatingArrowSvg\n\t\t\t\t\tfillClassName=\"fill-overlay-background\"\n\t\t\t\t\tborderClassName=\"fill-overlay-border\"\n\t\t\t\t/>\n\t\t\t</BasePopover.Arrow>\n\t\t);\n\t},\n);\nPopoverArrow.displayName = \"PopoverArrow\";\n\n// ============================================================================\n// Popover Title\n// ============================================================================\n\nexport interface PopoverTitleProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Title>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Popover Title\n *\n * Title element for the popover content.\n */\nconst PopoverTitle = React.forwardRef<HTMLHeadingElement, PopoverTitleProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Title\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\"typography-body-md-md font-semibold\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nPopoverTitle.displayName = \"PopoverTitle\";\n\n// ============================================================================\n// Popover Description\n// ============================================================================\n\nexport interface PopoverDescriptionProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BasePopover.Description>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\n/**\n * Popover Description\n *\n * Description element for the popover content.\n */\nconst PopoverDescription = React.forwardRef<\n\tHTMLParagraphElement,\n\tPopoverDescriptionProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<BasePopover.Description\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t\"typography-body-sm-md text-overlay-text-muted mt-8\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nPopoverDescription.displayName = \"PopoverDescription\";\n\n// ============================================================================\n// Popover Close\n// ============================================================================\n\nexport interface PopoverCloseProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Close>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Popover Close\n *\n * Close button for the popover.\n */\nconst PopoverClose = React.forwardRef<HTMLButtonElement, PopoverCloseProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Close\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute right-8 top-8 rounded-surface-ui-small p-4\",\n\t\t\t\t\t\"text-overlay-text-muted hover:text-overlay-text\",\n\t\t\t\t\t\"hover:bg-bg-section focus:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nPopoverClose.displayName = \"PopoverClose\";\n\n// ============================================================================\n// Simple Popover Component\n// ============================================================================\n\nexport interface PopoverProps {\n\t/** The content to show in the popover */\n\tchildren: React.ReactNode;\n\t/** The element that triggers the popover */\n\ttrigger: React.ReactNode;\n\t/** Title for the popover (optional) */\n\ttitle?: React.ReactNode;\n\t/** Side of the trigger to show the popover */\n\tside?: \"top\" | \"bottom\" | \"left\" | \"right\";\n\t/** Offset from the trigger */\n\tsideOffset?: number;\n\t/** Alignment along the side */\n\talign?: \"start\" | \"center\" | \"end\";\n\t/** Whether to show an arrow */\n\tshowArrow?: boolean;\n\t/** Whether to show a close button */\n\tshowClose?: boolean;\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Default open state */\n\tdefaultOpen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Additional className for the popup */\n\tclassName?: string;\n}\n\n/**\n * Popover\n *\n * A simple, pre-composed popover component for common use cases.\n * For more complex needs, use the compound components directly.\n *\n * @example\n * ```tsx\n * <Popover\n * trigger={<Button>Click me</Button>}\n * title=\"Popover Title\"\n * >\n * <p>This is the popover content.</p>\n * </Popover>\n * ```\n */\nconst Popover = ({\n\tchildren,\n\ttrigger,\n\ttitle,\n\tside = \"bottom\",\n\tsideOffset = 8,\n\talign = \"center\",\n\tshowArrow = true,\n\tshowClose = false,\n\topen,\n\tdefaultOpen,\n\tonOpenChange,\n\tclassName,\n}: PopoverProps) => {\n\treturn (\n\t\t<PopoverRoot\n\t\t\topen={open}\n\t\t\tdefaultOpen={defaultOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t>\n\t\t\t<PopoverTrigger>{trigger}</PopoverTrigger>\n\t\t\t<PopoverPortal>\n\t\t\t\t<PopoverPositioner side={side} sideOffset={sideOffset} align={align}>\n\t\t\t\t\t<PopoverPopup className={className}>\n\t\t\t\t\t\t{showArrow && <PopoverArrow />}\n\t\t\t\t\t\t{showClose && (\n\t\t\t\t\t\t\t<PopoverClose>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\t\t\t\theight=\"12\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 12 12\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M1.5 1.5L10.5 10.5M1.5 10.5L10.5 1.5\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t\t\t\t</PopoverClose>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{title && <PopoverTitle>{title}</PopoverTitle>}\n\t\t\t\t\t\t{title ? (\n\t\t\t\t\t\t\t<PopoverDescription>{children}</PopoverDescription>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tchildren\n\t\t\t\t\t\t)}\n\t\t\t\t\t</PopoverPopup>\n\t\t\t\t</PopoverPositioner>\n\t\t\t</PopoverPortal>\n\t\t</PopoverRoot>\n\t);\n};\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const PopoverParts = Object.assign(PopoverRoot, {\n\tRoot: PopoverRoot,\n\tTrigger: PopoverTrigger,\n\tPortal: PopoverPortal,\n\tBackdrop: PopoverBackdrop,\n\tPositioner: PopoverPositioner,\n\tPopup: PopoverPopup,\n\tArrow: PopoverArrow,\n\tTitle: PopoverTitle,\n\tDescription: PopoverDescription,\n\tClose: PopoverClose,\n});\n\nexport {\n\tPopover,\n\tPopoverRoot,\n\tPopoverTrigger,\n\tPopoverPortal,\n\tPopoverBackdrop,\n\tPopoverPositioner,\n\tPopoverPopup,\n\tPopoverArrow,\n\tPopoverTitle,\n\tPopoverDescription,\n\tPopoverClose,\n\tpopoverPopupVariants,\n\tpopoverArrowVariants,\n};\n","\"use client\";\n\nimport { Select as BaseSelect } from \"@base-ui-components/react/select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport {\n\tformControlBase,\n\tformControlError,\n\tformControlSizes,\n} from \"@/lib/form-control\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Select trigger variants based on Figma BaseKit / Interface / Dropdown\n *\n * States:\n * - Default: White background, subtle border\n * - Hover: Light gray background\n * - Focus/Open: Accent border with focus ring\n * - Selected: Has a value selected (darker text)\n * - Disabled: Reduced opacity, not interactive\n * - Invalid: Error border and styling\n */\nconst selectTriggerVariants = tv({\n\tbase: [\n\t\t...formControlBase,\n\t\t// Select-specific styles\n\t\t\"justify-between cursor-pointer\",\n\t\t// Override disabled to use data attribute (Base UI pattern)\n\t\t\"data-[disabled]:bg-ui-control-background-disabled data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n\t\t// Open state styling\n\t\t\"data-[popup-open]:border-ui-accent-base data-[popup-open]:ring-4 data-[popup-open]:ring-ui-color-focus data-[popup-open]:bg-ui-control-background\",\n\t\t// Invalid state (aria-invalid)\n\t\t\"aria-[invalid=true]:border-ui-error-color aria-[invalid=true]:ring-ui-error-color/20\",\n\t],\n\tvariants: {\n\t\tsize: formControlSizes,\n\t\terror: formControlError,\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t\terror: false,\n\t},\n});\n\n/**\n * Select popup/menu variants\n *\n * Uses overlay tokens for consistent floating panel styling:\n * - color.overlay.background - Light background\n * - color.overlay.border - Subtle border\n * - surface.overlay.radius - Rounded corners\n */\nconst selectPopupVariants = tv({\n\tbase: [\n\t\t// Layout - match trigger width using CSS custom property from Base UI\n\t\t\"flex flex-col gap-2 p-8\",\n\t\t\"w-[var(--anchor-width)]\",\n\t\t// Background - uses overlay token\n\t\t\"bg-overlay-background\",\n\t\t// Border - uses overlay token for subtle border\n\t\t\"border border-overlay-border\",\n\t\t// Border radius - uses overlay token for consistency with other overlays\n\t\t\"rounded-surface-overlay\",\n\t\t// Shadow for elevation\n\t\t\"shadow-lg\",\n\t\t// Animation\n\t\t\"origin-[var(--transform-origin)]\",\n\t\t\"transition-[transform,scale,opacity] duration-150\",\n\t\t\"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n\t\t// Ensure it's above other content\n\t\t\"z-50\",\n\t\t// Scrollable support\n\t\t\"overflow-y-auto max-h-[var(--available-height,300px)]\",\n\t],\n});\n\n/**\n * Select option/item variants based on Figma Menu Items\n *\n * States:\n * - Default: White background\n * - Hover/Highlighted: Light indigo tint background\n * - Selected: Stronger indigo tint with blue text and checkmark\n * - Disabled: Reduced opacity\n */\nconst selectOptionVariants = tv({\n\tbase: [\n\t\t// Layout\n\t\t\"flex items-center justify-between px-12 py-8 h-36\",\n\t\t// Typography - use semantic tokens\n\t\t\"typography-body-md-md font-medium text-ui-menu-item-text\",\n\t\t// Background - default\n\t\t\"bg-ui-menu-item-bg\",\n\t\t// Border radius - uses surface ui radius for theming support\n\t\t\"rounded-surface-ui-medium\",\n\t\t// Cursor\n\t\t\"cursor-pointer outline-none\",\n\t\t// Transitions\n\t\t\"transition-colors duration-150\",\n\t\t// Hover/highlighted state - use semantic token\n\t\t\"data-[highlighted]:bg-ui-menu-item-bg-hover\",\n\t\t// Selected state - use semantic tokens\n\t\t\"data-[selected]:bg-ui-menu-item-bg-selected data-[selected]:text-ui-menu-item-text-selected\",\n\t\t// Disabled state\n\t\t\"data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed\",\n\t],\n});\n\n/**\n * Select separator variants\n */\nconst selectSeparatorVariants = tv({\n\tbase: [\"h-px my-6 -mx-8\", \"bg-overlay-border\"],\n});\n\n/**\n * Select scroll arrow variants (shared by up and down)\n */\nconst selectScrollArrowVariants = tv({\n\tbase: [\n\t\t\"flex items-center justify-center\",\n\t\t\"py-4\",\n\t\t\"text-text-muted\",\n\t\t\"cursor-default\",\n\t\t// Sticky positioning for scroll indicators\n\t\t\"data-[direction=up]:sticky data-[direction=up]:top-0\",\n\t\t\"data-[direction=down]:sticky data-[direction=down]:bottom-0\",\n\t\t\"bg-overlay-background\",\n\t],\n});\n\n// ============================================================================\n// Select Root\n// ============================================================================\n\nexport interface SelectProps<Value = string>\n\textends BaseSelect.Root.Props<Value> {\n\tchildren: React.ReactNode;\n}\n\nconst SelectRoot = <Value = string>({\n\tchildren,\n\t...props\n}: SelectProps<Value>) => {\n\treturn <BaseSelect.Root {...props}>{children}</BaseSelect.Root>;\n};\n\n// ============================================================================\n// Select Trigger\n// ============================================================================\n\nexport interface SelectTriggerProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Trigger>, \"className\">,\n\t\tVariantProps<typeof selectTriggerVariants> {\n\tclassName?: string;\n\tplaceholder?: string;\n\t/**\n\t * Accessible label for the select trigger.\n\t * Required for accessibility when no visible label is present.\n\t */\n\t\"aria-label\"?: string;\n}\n\nconst SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tsize,\n\t\t\terror,\n\t\t\tplaceholder = \"Select option...\",\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\treturn (\n\t\t\t<BaseSelect.Trigger\n\t\t\t\tref={ref}\n\t\t\t\taria-label={ariaLabel ?? placeholder}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\tclassName={cn(selectTriggerVariants({ size, error }), className)}\n\t\t\t\tdata-size={size ?? \"default\"}\n\t\t\t\tdata-error={error ?? false}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<BaseSelect.Value>\n\t\t\t\t\t{(value) =>\n\t\t\t\t\t\tvalue ? (\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-text-muted\">{placeholder}</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t</BaseSelect.Value>\n\t\t\t\t<BaseSelect.Icon aria-hidden=\"true\">\n\t\t\t\t\t<ChevronDown className=\"size-16 text-gray-500 shrink-0\" />\n\t\t\t\t</BaseSelect.Icon>\n\t\t\t</BaseSelect.Trigger>\n\t\t);\n\t},\n);\nSelectTrigger.displayName = \"SelectTrigger\";\n\n// ============================================================================\n// Select Value (for custom trigger compositions)\n// ============================================================================\n\nexport interface SelectValueProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Value>, \"className\"> {\n\tclassName?: string;\n\tplaceholder?: string;\n}\n\nconst SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(\n\t({ className, placeholder = \"Select option...\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Value ref={ref} className={className} {...props}>\n\t\t\t\t{(value) =>\n\t\t\t\t\tvalue ? value : <span className=\"text-text-muted\">{placeholder}</span>\n\t\t\t\t}\n\t\t\t</BaseSelect.Value>\n\t\t);\n\t},\n);\nSelectValue.displayName = \"SelectValue\";\n\n// ============================================================================\n// Select Portal & Popup (Content)\n// ============================================================================\n\nexport interface SelectPopupProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Popup>, \"className\"> {\n\tclassName?: string;\n\t/**\n\t * Whether the selected item should align with the trigger.\n\t * When true (default), the popup positions so the selected item appears over the trigger.\n\t * When false, the popup aligns to the trigger edge.\n\t */\n\talignItemWithTrigger?: boolean;\n}\n\nconst SelectPopup = React.forwardRef<HTMLDivElement, SelectPopupProps>(\n\t({ className, children, alignItemWithTrigger = true, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Portal>\n\t\t\t\t<BaseSelect.Positioner\n\t\t\t\t\tside=\"bottom\"\n\t\t\t\t\tsideOffset={4}\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\talignItemWithTrigger={alignItemWithTrigger}\n\t\t\t\t>\n\t\t\t\t\t<BaseSelect.Popup\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(selectPopupVariants(), className)}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</BaseSelect.Popup>\n\t\t\t\t</BaseSelect.Positioner>\n\t\t\t</BaseSelect.Portal>\n\t\t);\n\t},\n);\nSelectPopup.displayName = \"SelectPopup\";\n\n// Alias for shadcn compatibility\nconst SelectContent = SelectPopup;\n\n// ============================================================================\n// Select Option (wraps Base UI's Select.Item)\n// ============================================================================\n\nexport interface SelectOptionProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Item>, \"className\"> {\n\tclassName?: string;\n}\n\nconst SelectOption = React.forwardRef<HTMLDivElement, SelectOptionProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Item\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(selectOptionVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n\t\t\t\t<BaseSelect.ItemIndicator aria-hidden=\"true\">\n\t\t\t\t\t<Check className=\"size-14 shrink-0\" />\n\t\t\t\t</BaseSelect.ItemIndicator>\n\t\t\t</BaseSelect.Item>\n\t\t);\n\t},\n);\nSelectOption.displayName = \"SelectOption\";\n\n// Alias for shadcn compatibility\nconst SelectItem = SelectOption;\n\n// ============================================================================\n// Select Group\n// ============================================================================\n\nexport interface SelectGroupProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Group>, \"className\"> {\n\tclassName?: string;\n}\n\nconst SelectGroup = React.forwardRef<HTMLDivElement, SelectGroupProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Group ref={ref} className={className} {...props}>\n\t\t\t\t{children}\n\t\t\t</BaseSelect.Group>\n\t\t);\n\t},\n);\nSelectGroup.displayName = \"SelectGroup\";\n\n// ============================================================================\n// Select Group Label\n// ============================================================================\n\nexport interface SelectGroupLabelProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseSelect.GroupLabel>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\nconst SelectGroupLabel = React.forwardRef<\n\tHTMLDivElement,\n\tSelectGroupLabelProps\n>(({ className, children, ...props }, ref) => {\n\treturn (\n\t\t<BaseSelect.GroupLabel\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t\"px-12 py-6 typography-body-sm-sm font-medium text-text-muted uppercase tracking-wide\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</BaseSelect.GroupLabel>\n\t);\n});\nSelectGroupLabel.displayName = \"SelectGroupLabel\";\n\n// Alias for shadcn compatibility\nconst SelectLabel = SelectGroupLabel;\n\n// ============================================================================\n// Select Separator\n// ============================================================================\n\nexport interface SelectSeparatorProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Separator>, \"className\"> {\n\tclassName?: string;\n}\n\nconst SelectSeparator = React.forwardRef<HTMLDivElement, SelectSeparatorProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Separator\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(selectSeparatorVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nSelectSeparator.displayName = \"SelectSeparator\";\n\n// ============================================================================\n// Select Scroll Up Arrow\n// ============================================================================\n\nexport interface SelectScrollUpArrowProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseSelect.ScrollUpArrow>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\nconst SelectScrollUpArrow = React.forwardRef<\n\tHTMLDivElement,\n\tSelectScrollUpArrowProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<BaseSelect.ScrollUpArrow\n\t\t\tref={ref}\n\t\t\tdata-direction=\"up\"\n\t\t\taria-label=\"Scroll up\"\n\t\t\tclassName={cn(selectScrollArrowVariants(), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ChevronUp className=\"size-12\" aria-hidden=\"true\" />\n\t\t</BaseSelect.ScrollUpArrow>\n\t);\n});\nSelectScrollUpArrow.displayName = \"SelectScrollUpArrow\";\n\n// ============================================================================\n// Select Scroll Down Arrow\n// ============================================================================\n\nexport interface SelectScrollDownArrowProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseSelect.ScrollDownArrow>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\nconst SelectScrollDownArrow = React.forwardRef<\n\tHTMLDivElement,\n\tSelectScrollDownArrowProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<BaseSelect.ScrollDownArrow\n\t\t\tref={ref}\n\t\t\tdata-direction=\"down\"\n\t\t\taria-label=\"Scroll down\"\n\t\t\tclassName={cn(selectScrollArrowVariants(), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ChevronDown className=\"size-12\" aria-hidden=\"true\" />\n\t\t</BaseSelect.ScrollDownArrow>\n\t);\n});\nSelectScrollDownArrow.displayName = \"SelectScrollDownArrow\";\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const Select = Object.assign(SelectRoot, {\n\tTrigger: SelectTrigger,\n\tValue: SelectValue,\n\tPopup: SelectPopup,\n\tContent: SelectContent,\n\tOption: SelectOption,\n\tItem: SelectItem,\n\tGroup: SelectGroup,\n\tGroupLabel: SelectGroupLabel,\n\tLabel: SelectLabel,\n\tSeparator: SelectSeparator,\n\tScrollUpArrow: SelectScrollUpArrow,\n\tScrollDownArrow: SelectScrollDownArrow,\n});\n\n// Also export individual components for flexibility\nexport {\n\tSelectRoot,\n\tSelectTrigger,\n\tSelectValue,\n\tSelectPopup,\n\tSelectContent,\n\tSelectOption,\n\tSelectItem,\n\tSelectGroup,\n\tSelectGroupLabel,\n\tSelectLabel,\n\tSelectSeparator,\n\tSelectScrollUpArrow,\n\tSelectScrollDownArrow,\n\tselectTriggerVariants,\n\tselectPopupVariants,\n\tselectOptionVariants,\n\tselectSeparatorVariants,\n\tselectScrollArrowVariants,\n};\n","\"use client\";\n\nimport { Tooltip as BaseTooltip } from \"@base-ui-components/react/tooltip\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\nimport {\n\tFloatingArrowSvg,\n\tfloatingArrowVariants,\n} from \"../../shared/floating-arrow\";\n\n/**\n * Tooltip popup variants\n *\n * Uses semantic tokens for themeable styling:\n * - color.tooltip.bg - Dark background\n * - color.tooltip.text - Light text\n * - surface.tooltip.radius - Small border radius\n * - spatial.component.tooltip.padding-x/y - Consistent padding\n */\nconst tooltipPopupVariants = tv({\n\tbase: [\n\t\t// Layout - uses component tooltip tokens\n\t\t\"px-spatial-component-tooltip-padding-x py-spatial-component-tooltip-padding-y\",\n\t\t// Background and text - uses tooltip color tokens\n\t\t\"bg-tooltip-bg text-tooltip-text\",\n\t\t// Border radius - uses surface tooltip token\n\t\t\"rounded-surface-tooltip\",\n\t\t// Typography - uses semantic body text composite\n\t\t\"typography-body-sm-md font-medium\",\n\t\t// Shadow for elevation\n\t\t\"shadow-md\",\n\t\t// Allow arrow to extend outside popup bounds\n\t\t\"overflow-visible\",\n\t\t// Animation\n\t\t\"origin-[var(--transform-origin)]\",\n\t\t\"transition-[transform,scale,opacity] duration-150\",\n\t\t\"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n\t\t// Ensure it's above other content\n\t\t\"z-50\",\n\t],\n\tvariants: {\n\t\tvariant: {\n\t\t\tdefault: \"\",\n\t\t\t// Future variants can be added here (e.g., light, primary)\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t},\n});\n\n/**\n * Tooltip arrow variants - uses shared floating arrow variants\n */\nconst tooltipArrowVariants = floatingArrowVariants;\n\n// ============================================================================\n// Tooltip Provider\n// ============================================================================\n\nexport interface TooltipProviderProps extends BaseTooltip.Provider.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Tooltip Provider\n *\n * Manages shared delays across multiple tooltips.\n * Wrap your app or a section with this to enable tooltip delay grouping.\n */\nconst TooltipProvider = ({ children, ...props }: TooltipProviderProps) => {\n\treturn <BaseTooltip.Provider {...props}>{children}</BaseTooltip.Provider>;\n};\n\n// ============================================================================\n// Tooltip Root\n// ============================================================================\n\nexport interface TooltipRootProps extends BaseTooltip.Root.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Tooltip Root\n *\n * Groups all tooltip parts. Does not render an element.\n */\nconst TooltipRoot = ({ children, ...props }: TooltipRootProps) => {\n\treturn <BaseTooltip.Root {...props}>{children}</BaseTooltip.Root>;\n};\n\n// ============================================================================\n// Tooltip Trigger\n// ============================================================================\n\nexport interface TooltipTriggerProps\n\textends React.ComponentProps<typeof BaseTooltip.Trigger> {\n\tclassName?: string;\n}\n\n/**\n * Tooltip Trigger\n *\n * The element that triggers the tooltip on hover/focus.\n * Renders as the child element with tooltip behavior attached.\n * When children is a single React element, uses `render` prop to avoid wrapper element.\n */\nconst TooltipTrigger = React.forwardRef<HTMLButtonElement, TooltipTriggerProps>(\n\t({ className, children, ...props }, ref) => {\n\t\t// If children is a single React element, use render prop to avoid wrapper\n\t\tconst isSingleElement = React.isValidElement(children);\n\n\t\tif (isSingleElement) {\n\t\t\treturn (\n\t\t\t\t<BaseTooltip.Trigger\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\trender={children as React.ReactElement<Record<string, unknown>>}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseTooltip.Trigger ref={ref} className={className} {...props}>\n\t\t\t\t{children}\n\t\t\t</BaseTooltip.Trigger>\n\t\t);\n\t},\n);\nTooltipTrigger.displayName = \"TooltipTrigger\";\n\n// ============================================================================\n// Tooltip Portal\n// ============================================================================\n\nexport interface TooltipPortalProps extends BaseTooltip.Portal.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Tooltip Portal\n *\n * Renders the tooltip popup in a portal outside the DOM hierarchy.\n */\nconst TooltipPortal = ({ children, ...props }: TooltipPortalProps) => {\n\treturn <BaseTooltip.Portal {...props}>{children}</BaseTooltip.Portal>;\n};\n\n// ============================================================================\n// Tooltip Positioner\n// ============================================================================\n\nexport interface TooltipPositionerProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseTooltip.Positioner>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\n/**\n * Tooltip Positioner\n *\n * Positions the tooltip popup relative to the trigger.\n */\nconst TooltipPositioner = React.forwardRef<\n\tHTMLDivElement,\n\tTooltipPositionerProps\n>(({ className, side = \"top\", sideOffset = 8, ...props }, ref) => {\n\treturn (\n\t\t<BaseTooltip.Positioner\n\t\t\tref={ref}\n\t\t\tside={side}\n\t\t\tsideOffset={sideOffset}\n\t\t\tclassName={className}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nTooltipPositioner.displayName = \"TooltipPositioner\";\n\n// ============================================================================\n// Tooltip Popup\n// ============================================================================\n\nexport interface TooltipPopupProps\n\textends Omit<React.ComponentProps<typeof BaseTooltip.Popup>, \"className\">,\n\t\tVariantProps<typeof tooltipPopupVariants> {\n\tclassName?: string;\n}\n\n/**\n * Tooltip Popup\n *\n * The tooltip content container with styled appearance.\n */\nconst TooltipPopup = React.forwardRef<HTMLDivElement, TooltipPopupProps>(\n\t({ className, variant, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseTooltip.Popup\n\t\t\t\tref={ref}\n\t\t\t\trole=\"tooltip\"\n\t\t\t\tclassName={cn(tooltipPopupVariants({ variant }), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nTooltipPopup.displayName = \"TooltipPopup\";\n\n// ============================================================================\n// Tooltip Arrow\n// ============================================================================\n\nexport interface TooltipArrowProps\n\textends Omit<React.ComponentProps<typeof BaseTooltip.Arrow>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Tooltip Arrow\n *\n * Visual pointer element for the tooltip.\n * Uses shared FloatingArrowSvg with tooltip-bg color token.\n */\nconst TooltipArrow = React.forwardRef<HTMLDivElement, TooltipArrowProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseTooltip.Arrow\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(tooltipArrowVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<FloatingArrowSvg fillClassName=\"fill-tooltip-bg\" />\n\t\t\t</BaseTooltip.Arrow>\n\t\t);\n\t},\n);\nTooltipArrow.displayName = \"TooltipArrow\";\n\n// ============================================================================\n// Simple Tooltip Component\n// ============================================================================\n\nexport interface TooltipProps {\n\t/** The content to show in the tooltip */\n\tcontent: React.ReactNode;\n\t/** The element that triggers the tooltip */\n\tchildren: React.ReactNode;\n\t/** Side of the trigger to show the tooltip */\n\tside?: \"top\" | \"bottom\" | \"left\" | \"right\";\n\t/** Offset from the trigger */\n\tsideOffset?: number;\n\t/** Alignment along the side */\n\talign?: \"start\" | \"center\" | \"end\";\n\t/** Delay before showing the tooltip (ms) */\n\tdelay?: number;\n\t/** Delay before hiding the tooltip (ms) */\n\tcloseDelay?: number;\n\t/** Whether to show an arrow */\n\tshowArrow?: boolean;\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Default open state */\n\tdefaultOpen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Additional className for the popup */\n\tclassName?: string;\n}\n\n/**\n * Tooltip\n *\n * A simple, pre-composed tooltip component for common use cases.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"Save your changes\">\n * <Button>Save</Button>\n * </Tooltip>\n * ```\n */\nconst Tooltip = ({\n\tcontent,\n\tchildren,\n\tside = \"top\",\n\tsideOffset = 8,\n\talign = \"center\",\n\tdelay,\n\tcloseDelay,\n\tshowArrow = true,\n\topen,\n\tdefaultOpen,\n\tonOpenChange,\n\tclassName,\n}: TooltipProps) => {\n\treturn (\n\t\t<TooltipRoot\n\t\t\topen={open}\n\t\t\tdefaultOpen={defaultOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t>\n\t\t\t<TooltipTrigger delay={delay} closeDelay={closeDelay}>\n\t\t\t\t{children}\n\t\t\t</TooltipTrigger>\n\t\t\t<TooltipPortal>\n\t\t\t\t<TooltipPositioner side={side} sideOffset={sideOffset} align={align}>\n\t\t\t\t\t<TooltipPopup className={className}>\n\t\t\t\t\t\t{showArrow && <TooltipArrow />}\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</TooltipPopup>\n\t\t\t\t</TooltipPositioner>\n\t\t\t</TooltipPortal>\n\t\t</TooltipRoot>\n\t);\n};\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const TooltipParts = Object.assign(TooltipRoot, {\n\tProvider: TooltipProvider,\n\tRoot: TooltipRoot,\n\tTrigger: TooltipTrigger,\n\tPortal: TooltipPortal,\n\tPositioner: TooltipPositioner,\n\tPopup: TooltipPopup,\n\tArrow: TooltipArrow,\n});\n\nexport {\n\tTooltip,\n\tTooltipProvider,\n\tTooltipRoot,\n\tTooltipTrigger,\n\tTooltipPortal,\n\tTooltipPositioner,\n\tTooltipPopup,\n\tTooltipArrow,\n\ttooltipPopupVariants,\n\ttooltipArrowVariants,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport type { CaptionCue } from \"@/hooks/use-captions\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Caption overlay variants using semantic tokens.\n */\nconst captionOverlayVariants = tv({\n\tbase: [\n\t\t// Positioning - absolute at bottom of video container\n\t\t\"pointer-events-none\",\n\t\t\"absolute right-0 left-0\",\n\t\t\"z-10\",\n\t\t\"flex justify-center\",\n\t\t\"px-4\",\n\t],\n\tvariants: {\n\t\tposition: {\n\t\t\tbottom: \"bottom-64\",\n\t\t\t\"bottom-sm\": \"bottom-24\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tposition: \"bottom-sm\",\n\t},\n});\n\n/**\n * Caption text box variants.\n */\nconst captionTextVariants = tv({\n\tbase: [\n\t\t\"flex items-center justify-center\",\n\t\t\"w-fit max-w-[80%]\",\n\t\t\"gap-10\",\n\t\t\"px-12 py-6\",\n\t\t\"text-center\",\n\t\t\"font-normal leading-[1.4]\",\n\t\t\"rounded-6\",\n\t\t\"bg-video-player-caption-bg text-video-player-caption-text\",\n\t],\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"text-14\",\n\t\t\tmd: \"[font-size:clamp(16px,2vw,24px)]\",\n\t\t\tlg: \"text-24\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"md\",\n\t},\n});\n\nexport interface CaptionOverlayProps\n\textends React.HTMLAttributes<HTMLOutputElement>,\n\t\tVariantProps<typeof captionOverlayVariants>,\n\t\tVariantProps<typeof captionTextVariants> {\n\t/** Caption cue to display */\n\tcue?: CaptionCue | null;\n\t/** Caption text to display (alternative to cue) */\n\ttext?: string;\n}\n\n/**\n * CaptionOverlay component.\n *\n * Displays caption text overlaid on video content.\n * Styled to match the DGA video player implementation.\n *\n * @example\n * ```tsx\n * <CaptionOverlay cue={activeCue} />\n *\n * // Or with plain text\n * <CaptionOverlay text=\"Hello, world!\" />\n * ```\n */\nconst CaptionOverlay = React.forwardRef<HTMLOutputElement, CaptionOverlayProps>(\n\t({ className, cue, text, position, size, ...props }, ref) => {\n\t\t// Use cue text or fallback to text prop\n\t\tconst displayText = cue?.text ?? text;\n\n\t\t// Don't render anything if no caption text\n\t\tif (!displayText) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<output\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(captionOverlayVariants({ position }), className)}\n\t\t\t\taria-live=\"polite\"\n\t\t\t\taria-label=\"Video caption\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<span className={captionTextVariants({ size })}>{displayText}</span>\n\t\t\t</output>\n\t\t);\n\t},\n);\n\nCaptionOverlay.displayName = \"CaptionOverlay\";\n\nexport { CaptionOverlay, captionOverlayVariants, captionTextVariants };\n","\"use client\";\n\nimport * as React from \"react\";\n\n/**\n * Represents a single caption cue parsed from VTT.\n */\nexport interface CaptionCue {\n\t/** Unique identifier for the cue */\n\tid: string;\n\t/** Start time in seconds */\n\tstartTime: number;\n\t/** End time in seconds */\n\tendTime: number;\n\t/** Caption text content */\n\ttext: string;\n}\n\n/**\n * Parse VTT timestamp to seconds.\n * Handles formats: HH:MM:SS.mmm or MM:SS.mmm\n */\nfunction parseVttTimestamp(timestamp: string): number {\n\tconst parts = timestamp.trim().split(\":\");\n\tlet hours = 0;\n\tlet minutes = 0;\n\tlet seconds = 0;\n\n\tif (parts.length === 3) {\n\t\thours = Number.parseInt(parts[0], 10);\n\t\tminutes = Number.parseInt(parts[1], 10);\n\t\tseconds = Number.parseFloat(parts[2]);\n\t} else if (parts.length === 2) {\n\t\tminutes = Number.parseInt(parts[0], 10);\n\t\tseconds = Number.parseFloat(parts[1]);\n\t}\n\n\treturn hours * 3600 + minutes * 60 + seconds;\n}\n\n/**\n * Parse VTT content string into an array of caption cues.\n */\nfunction parseVtt(vttContent: string): CaptionCue[] {\n\tconst cues: CaptionCue[] = [];\n\tconst lines = vttContent.trim().split(\"\\n\");\n\n\tlet i = 0;\n\n\t// Skip WEBVTT header and any metadata\n\twhile (i < lines.length && !lines[i].includes(\"-->\")) {\n\t\ti++;\n\t}\n\n\twhile (i < lines.length) {\n\t\tconst line = lines[i].trim();\n\n\t\t// Look for timestamp line (contains -->)\n\t\tif (line.includes(\"-->\")) {\n\t\t\tconst [startStr, endStr] = line.split(\"-->\").map((s) => s.trim());\n\n\t\t\t// Handle optional cue settings after timestamp\n\t\t\tconst endParts = endStr.split(\" \");\n\t\t\tconst endTime = parseVttTimestamp(endParts[0]);\n\t\t\tconst startTime = parseVttTimestamp(startStr);\n\n\t\t\t// Collect text lines until empty line or next timestamp\n\t\t\tconst textLines: string[] = [];\n\t\t\ti++;\n\t\t\twhile (\n\t\t\t\ti < lines.length &&\n\t\t\t\tlines[i].trim() !== \"\" &&\n\t\t\t\t!lines[i].includes(\"-->\")\n\t\t\t) {\n\t\t\t\t// Skip cue identifier lines (numbers only)\n\t\t\t\tif (!/^\\d+$/.test(lines[i].trim())) {\n\t\t\t\t\ttextLines.push(lines[i].trim());\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif (textLines.length > 0) {\n\t\t\t\tcues.push({\n\t\t\t\t\tid: `cue-${cues.length}`,\n\t\t\t\t\tstartTime,\n\t\t\t\t\tendTime,\n\t\t\t\t\ttext: textLines.join(\"\\n\"),\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\ti++;\n\t\t}\n\t}\n\n\treturn cues;\n}\n\n/**\n * Strip VTT formatting tags from text.\n * Removes <v>, <c>, <i>, <b>, <u>, etc.\n */\nfunction stripVttTags(text: string): string {\n\treturn text\n\t\t.replace(/<\\/?[^>]+(>|$)/g, \"\") // Remove HTML-like tags\n\t\t.replace(/ /g, \" \")\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.trim();\n}\n\ninterface UseCaptionsOptions {\n\t/** VTT file URL to fetch */\n\tsrc?: string;\n\t/** Pre-loaded VTT content string */\n\tcontent?: string;\n\t/** Strip VTT formatting tags from caption text */\n\tstripTags?: boolean;\n\t/** Current playback time in seconds (alternative to setCurrentTime) */\n\tcurrentTime?: number;\n}\n\ninterface UseCaptionsReturn {\n\t/** All parsed caption cues */\n\tcues: CaptionCue[];\n\t/** Currently active cue based on current time */\n\tactiveCue: CaptionCue | null;\n\t/** Update the current playback time to get active cue */\n\tsetCurrentTime: (time: number) => void;\n\t/** Loading state */\n\tisLoading: boolean;\n\t/** Error state */\n\terror: Error | null;\n}\n\n/**\n * Hook for parsing VTT captions and tracking the active cue.\n *\n * @param options - Caption source options\n * @returns Parsed cues, active cue, and state\n *\n * @example\n * ```tsx\n * function VideoPlayer() {\n * const videoRef = React.useRef<HTMLVideoElement>(null);\n * const { activeCue, setCurrentTime } = useCaptions({\n * src: '/captions.vtt',\n * });\n *\n * // Sync with video time\n * React.useEffect(() => {\n * const video = videoRef.current;\n * if (!video) return;\n *\n * const handleTimeUpdate = () => setCurrentTime(video.currentTime);\n * video.addEventListener('timeupdate', handleTimeUpdate);\n * return () => video.removeEventListener('timeupdate', handleTimeUpdate);\n * }, [setCurrentTime]);\n *\n * return (\n * <div>\n * <video ref={videoRef} src=\"/video.mp4\" />\n * {activeCue && <div className=\"caption\">{activeCue.text}</div>}\n * </div>\n * );\n * }\n * ```\n */\nexport function useCaptions(\n\toptions: UseCaptionsOptions = {},\n): UseCaptionsReturn {\n\tconst { src, content, stripTags = true, currentTime: externalTime } = options;\n\n\tconst [cues, setCues] = React.useState<CaptionCue[]>([]);\n\tconst [internalTime, setInternalTime] = React.useState(0);\n\tconst [isLoading, setIsLoading] = React.useState(false);\n\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t// Use external time if provided, otherwise use internal state\n\tconst currentTime = externalTime ?? internalTime;\n\n\t// Parse content or fetch from URL\n\tReact.useEffect(() => {\n\t\tif (content) {\n\t\t\t// Use provided content directly\n\t\t\tconst parsed = parseVtt(content);\n\t\t\tsetCues(\n\t\t\t\tstripTags\n\t\t\t\t\t? parsed.map((cue) => ({ ...cue, text: stripVttTags(cue.text) }))\n\t\t\t\t\t: parsed,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!src) {\n\t\t\tsetCues([]);\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsLoading(true);\n\t\tsetError(null);\n\n\t\tfetch(src)\n\t\t\t.then((response) => {\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`Failed to fetch captions: ${response.status}`);\n\t\t\t\t}\n\t\t\t\treturn response.text();\n\t\t\t})\n\t\t\t.then((vttContent) => {\n\t\t\t\tconst parsed = parseVtt(vttContent);\n\t\t\t\tsetCues(\n\t\t\t\t\tstripTags\n\t\t\t\t\t\t? parsed.map((cue) => ({ ...cue, text: stripVttTags(cue.text) }))\n\t\t\t\t\t\t: parsed,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tsetIsLoading(false);\n\t\t\t});\n\t}, [src, content, stripTags]);\n\n\t// Find active cue for current time\n\tconst activeCue = React.useMemo(() => {\n\t\treturn (\n\t\t\tcues.find(\n\t\t\t\t(cue) => currentTime >= cue.startTime && currentTime <= cue.endTime,\n\t\t\t) ?? null\n\t\t);\n\t}, [cues, currentTime]);\n\n\t// Memoize setCurrentTime to avoid unnecessary re-renders\n\tconst handleSetCurrentTime = React.useCallback((time: number) => {\n\t\tsetInternalTime(time);\n\t}, []);\n\n\treturn {\n\t\tcues,\n\t\tactiveCue,\n\t\tsetCurrentTime: handleSetCurrentTime,\n\t\tisLoading,\n\t\terror,\n\t};\n}\n","import * as React from \"react\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseVideoKeyboardOptions {\n\t/** Ref to the video element */\n\tvideoRef: React.RefObject<HTMLVideoElement | null>;\n\t/** Whether keyboard handling is enabled (default: true) */\n\tenabled?: boolean;\n\t/** Seek amount in seconds for arrow keys (default: 5) */\n\tseekAmount?: number;\n\t/** Volume change amount for arrow keys (default: 0.1) */\n\tvolumeStep?: number;\n\t/** Callback when play/pause is toggled */\n\tonTogglePlay?: () => void;\n\t/** Callback when fullscreen is toggled */\n\tonToggleFullscreen?: () => void;\n\t/** Callback when captions are toggled */\n\tonToggleCaptions?: () => void;\n\t/** Callback when controls should be shown */\n\tonShowControls?: () => void;\n}\n\nexport interface UseVideoKeyboardReturn {\n\t/** Key down handler to attach to container element */\n\thandleKeyDown: (e: React.KeyboardEvent) => void;\n\t/** Props to spread on the container element */\n\tcontainerProps: {\n\t\tonKeyDown: (e: React.KeyboardEvent) => void;\n\t\ttabIndex: number;\n\t\trole: string;\n\t\t\"aria-label\": string;\n\t};\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook for handling keyboard shortcuts in a video player.\n *\n * Supported shortcuts:\n * - Space: Play/pause\n * - Left Arrow: Seek backward\n * - Right Arrow: Seek forward\n * - Up Arrow: Volume up\n * - Down Arrow: Volume down\n * - M: Toggle mute\n * - F: Toggle fullscreen\n * - C: Toggle captions\n *\n * @example\n * ```tsx\n * const { containerProps } = useVideoKeyboard({\n * videoRef,\n * onTogglePlay: () => video.paused ? video.play() : video.pause(),\n * onToggleFullscreen: () => toggleFullscreen(),\n * onShowControls: () => setControlsVisible(true),\n * });\n *\n * return <div {...containerProps}>...</div>;\n * ```\n */\nexport function useVideoKeyboard({\n\tvideoRef,\n\tenabled = true,\n\tseekAmount = 5,\n\tvolumeStep = 0.1,\n\tonTogglePlay,\n\tonToggleFullscreen,\n\tonToggleCaptions,\n\tonShowControls,\n}: UseVideoKeyboardOptions): UseVideoKeyboardReturn {\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent) => {\n\t\t\tif (!enabled) return;\n\n\t\t\tconst video = videoRef.current;\n\t\t\tif (!video) return;\n\n\t\t\t// Don't handle if focus is on interactive elements\n\t\t\tconst target = e.target as HTMLElement;\n\t\t\tif (\n\t\t\t\ttarget.tagName === \"BUTTON\" ||\n\t\t\t\ttarget.tagName === \"INPUT\" ||\n\t\t\t\ttarget.tagName === \"TEXTAREA\" ||\n\t\t\t\ttarget.closest(\"button\") ||\n\t\t\t\ttarget.closest(\"input\") ||\n\t\t\t\ttarget.closest(\"[role='slider']\")\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet handled = false;\n\n\t\t\tswitch (e.key) {\n\t\t\t\t// Play/Pause\n\t\t\t\tcase \" \":\n\t\t\t\tcase \"Spacebar\":\n\t\t\t\tcase \"k\": // YouTube-style shortcut\n\t\t\t\t\tif (onTogglePlay) {\n\t\t\t\t\t\tonTogglePlay();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (video.paused) {\n\t\t\t\t\t\t\tvideo.play().catch(() => {});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvideo.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Seek backward\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\tcase \"j\": // YouTube-style shortcut\n\t\t\t\t\tvideo.currentTime = Math.max(0, video.currentTime - seekAmount);\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Seek forward\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\tcase \"l\": // YouTube-style shortcut\n\t\t\t\t\tvideo.currentTime = Math.min(\n\t\t\t\t\t\tvideo.duration || 0,\n\t\t\t\t\t\tvideo.currentTime + seekAmount,\n\t\t\t\t\t);\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Volume up\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\tvideo.volume = Math.min(1, video.volume + volumeStep);\n\t\t\t\t\tvideo.muted = false;\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Volume down\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\tvideo.volume = Math.max(0, video.volume - volumeStep);\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Toggle mute\n\t\t\t\tcase \"m\":\n\t\t\t\tcase \"M\":\n\t\t\t\t\tvideo.muted = !video.muted;\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Toggle fullscreen\n\t\t\t\tcase \"f\":\n\t\t\t\tcase \"F\":\n\t\t\t\t\tonToggleFullscreen?.();\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Toggle captions\n\t\t\t\tcase \"c\":\n\t\t\t\tcase \"C\":\n\t\t\t\t\tonToggleCaptions?.();\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Jump to start\n\t\t\t\tcase \"Home\":\n\t\t\t\t\tvideo.currentTime = 0;\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Jump to end\n\t\t\t\tcase \"End\":\n\t\t\t\t\tvideo.currentTime = video.duration || 0;\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Number keys for percentage seeking (0-9)\n\t\t\t\tcase \"0\":\n\t\t\t\tcase \"1\":\n\t\t\t\tcase \"2\":\n\t\t\t\tcase \"3\":\n\t\t\t\tcase \"4\":\n\t\t\t\tcase \"5\":\n\t\t\t\tcase \"6\":\n\t\t\t\tcase \"7\":\n\t\t\t\tcase \"8\":\n\t\t\t\tcase \"9\":\n\t\t\t\t\tif (video.duration) {\n\t\t\t\t\t\tconst percent = parseInt(e.key, 10) / 10;\n\t\t\t\t\t\tvideo.currentTime = video.duration * percent;\n\t\t\t\t\t\thandled = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (handled) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\tonShowControls?.();\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tenabled,\n\t\t\tvideoRef,\n\t\t\tseekAmount,\n\t\t\tvolumeStep,\n\t\t\tonTogglePlay,\n\t\t\tonToggleFullscreen,\n\t\t\tonToggleCaptions,\n\t\t\tonShowControls,\n\t\t],\n\t);\n\n\tconst containerProps = React.useMemo(\n\t\t() => ({\n\t\t\tonKeyDown: handleKeyDown,\n\t\t\ttabIndex: 0,\n\t\t\trole: \"application\" as const,\n\t\t\t\"aria-label\": \"Video player, press space to play or pause\",\n\t\t}),\n\t\t[handleKeyDown],\n\t);\n\n\treturn {\n\t\thandleKeyDown,\n\t\tcontainerProps,\n\t};\n}\n","\"use client\";\n\nimport {\n\tMediaControlBar,\n\tMediaController,\n\tMediaLoadingIndicator,\n\tMediaMuteButton,\n\tMediaPlayButton,\n\tMediaTimeDisplay,\n\tMediaTimeRange,\n\tMediaVolumeRange,\n} from \"media-chrome/react\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { useCaptions } from \"@/hooks/use-captions\";\nimport { useVideoKeyboard } from \"@/hooks/use-video-keyboard\";\nimport { cn } from \"@/lib/utils\";\nimport { CaptionOverlay } from \"./caption-overlay\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Cloudflare Stream configuration */\ninterface CloudflareConfig {\n\t/** Cloudflare Stream video ID */\n\tvideoId: string;\n\t/** Cloudflare customer code/subdomain */\n\tcustomerCode: string;\n}\n\n// ============================================================================\n// Variant Definitions\n// ============================================================================\n\n/**\n * Video player container variants.\n */\nconst videoPlayerVariants = tv({\n\tbase: [\n\t\t\"relative\",\n\t\t\"bg-black\",\n\t\t\"overflow-hidden\",\n\t\t// Focus styling for keyboard navigation\n\t\t\"focus:outline-none\",\n\t\t\"focus-visible:ring-2\",\n\t\t\"focus-visible:ring-white/50\",\n\t],\n\tvariants: {\n\t\taspectRatio: {\n\t\t\t\"16/9\": \"aspect-video\",\n\t\t\t\"4/3\": \"aspect-[4/3]\",\n\t\t\t\"1/1\": \"aspect-square\",\n\t\t\t\"9/16\": \"aspect-[9/16]\",\n\t\t\tauto: \"\",\n\t\t},\n\t\trounded: {\n\t\t\tnone: \"\",\n\t\t\tsm: \"rounded-4\",\n\t\t\tmd: \"rounded-8\",\n\t\t\tlg: \"rounded-12\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\taspectRatio: \"16/9\",\n\t\trounded: \"none\",\n\t},\n});\n\n/**\n * Media controller container styles.\n * Uses CSS custom properties to configure media-chrome components.\n * Styled to match DGA video player design with ghost-style buttons.\n */\nconst mediaControllerVariants = tv({\n\tbase: [\n\t\t\"absolute inset-0\",\n\t\t\"w-full h-full\",\n\t\t// Button styling - transparent base, hover shows background\n\t\t\"[--media-control-background:transparent]\",\n\t\t\"[--media-control-hover-background:var(--color-video-player-button-bg-hover)]\",\n\t\t\"[--media-control-padding:8px]\",\n\t\t\"[--media-control-height:36px]\",\n\t\t\"[--media-button-icon-width:20px]\",\n\t\t\"[--media-button-icon-height:20px]\",\n\t\t// Progress bar / range styling\n\t\t\"[--media-range-track-background:var(--color-video-player-progress-bg)]\",\n\t\t\"[--media-range-bar-color:var(--color-video-player-progress-fill)]\",\n\t\t\"[--media-range-track-height:4px]\",\n\t\t\"[--media-range-track-border-radius:2px]\",\n\t\t\"[--media-range-thumb-background:var(--color-video-player-progress-fill)]\",\n\t\t\"[--media-range-thumb-height:12px]\",\n\t\t\"[--media-range-thumb-width:12px]\",\n\t\t\"[--media-range-thumb-border-radius:50%]\",\n\t\t// Text/icon colors\n\t\t\"[--media-icon-color:var(--color-video-player-controls-text)]\",\n\t\t\"[--media-primary-color:var(--color-video-player-controls-text)]\",\n\t\t\"[--media-secondary-color:transparent]\",\n\t\t\"[--media-text-color:var(--color-video-player-controls-text)]\",\n\t\t\"[--media-font-size:14px]\",\n\t\t// Time display styling\n\t\t\"[--media-time-display-background:transparent]\",\n\t],\n});\n\n/**\n * Media-chrome control button styles.\n * Applied to media-play-button, media-mute-button, etc.\n * Transparent by default, shows background on hover (ghost style).\n */\nconst mediaButtonStyles: React.CSSProperties = {\n\tpadding: \"8px\",\n\tborderRadius: \"50%\",\n\t// Tooltip styling - consistent across all buttons\n\t\"--media-tooltip-background\": \"var(--color-video-player-tooltip-bg)\",\n\t\"--media-tooltip-arrow-display\": \"none\",\n\t\"--media-tooltip-distance\": \"8px\",\n} as React.CSSProperties;\n\n/**\n * Time range styles matching DGA.\n */\nconst timeRangeStyles: React.CSSProperties = {\n\tflex: 1,\n\tbackground: \"transparent\",\n\t// Preview tooltip styling - consistent with button tooltips\n\t\"--media-box-arrow-display\": \"none\",\n\t\"--media-preview-box-margin\": \"0 0 8px 0\",\n\t\"--media-preview-time-margin\": \"0 0 8px 0\",\n\t\"--media-preview-time-background\": \"var(--color-video-player-tooltip-bg)\",\n} as React.CSSProperties;\n\n/**\n * Volume range styles.\n */\nconst volumeRangeStyles: React.CSSProperties = {\n\twidth: \"80px\",\n\tbackground: \"transparent\",\n\t// Tooltip styling - consistent with button tooltips\n\t\"--media-tooltip-background\": \"var(--color-video-player-tooltip-bg)\",\n\t\"--media-tooltip-arrow-display\": \"none\",\n\t\"--media-tooltip-distance\": \"8px\",\n} as React.CSSProperties;\n\n/**\n * Time display styles.\n */\nconst timeDisplayStyles: React.CSSProperties = {\n\tbackground: \"transparent\",\n\tfontFamily: \"monospace\",\n\tfontSize: \"14px\",\n\tcolor: \"white\",\n\twhiteSpace: \"nowrap\",\n};\n\n/**\n * Control bar variants.\n * Note: Positioning is handled via inline styles to override web component defaults.\n * Tailwind classes handle background color and visibility transitions.\n */\nconst controlBarVariants = tv({\n\tbase: [\n\t\t// Layout handled in inline styles, but we need flex\n\t\t\"flex items-center\",\n\t\t// Background using semantic token\n\t\t\"bg-video-player-controls-bg\",\n\t\t// Animation\n\t\t\"transition-all duration-300\",\n\t],\n\tvariants: {\n\t\tvisible: {\n\t\t\ttrue: \"opacity-100 translate-y-0\",\n\t\t\tfalse: \"opacity-0 translate-y-16 pointer-events-none\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvisible: true,\n\t},\n});\n\n/**\n * Control button styles for custom buttons.\n * Transparent by default, shows background on hover (ghost style).\n */\nconst controlButtonVariants = tv({\n\tbase: [\n\t\t\"flex items-center justify-center\",\n\t\t\"p-8 rounded-full\",\n\t\t// Transparent by default, background on hover\n\t\t\"bg-transparent\",\n\t\t\"text-video-player-controls-text\",\n\t\t\"hover:bg-video-player-button-bg-hover\",\n\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-video-player-progress-bg\",\n\t\t\"transition-colors duration-150\",\n\t\t\"cursor-pointer\",\n\t],\n});\n\n/**\n * Loading overlay variants.\n */\nconst loadingOverlayVariants = tv({\n\tbase: [\n\t\t\"absolute inset-0\",\n\t\t\"flex items-center justify-center\",\n\t\t\"bg-black/50\",\n\t\t\"pointer-events-none\",\n\t\t\"z-10\",\n\t],\n});\n\n// ============================================================================\n// HLS Hook (internal)\n// ============================================================================\n\n/**\n * Internal hook for HLS.js initialization.\n * Handles both native HLS (Safari) and HLS.js (Chrome/Firefox).\n */\nfunction useHlsInternal(\n\tvideoRef: React.RefObject<HTMLVideoElement | null>,\n\tsrc: string | undefined,\n\tenabled: boolean,\n) {\n\tconst [isLoading, setIsLoading] = React.useState(true);\n\tconst [error, setError] = React.useState<Error | null>(null);\n\tconst hlsRef = React.useRef<unknown>(null);\n\n\tReact.useEffect(() => {\n\t\tif (!enabled || !src || !videoRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst video = videoRef.current;\n\t\tconst isHlsSource = src.includes(\".m3u8\");\n\n\t\t// For non-HLS sources, just set the src directly\n\t\tif (!isHlsSource) {\n\t\t\tvideo.src = src;\n\t\t\tsetIsLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if native HLS is supported (Safari)\n\t\tif (video.canPlayType(\"application/vnd.apple.mpegurl\")) {\n\t\t\tvideo.src = src;\n\t\t\tsetIsLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\t// Try to use HLS.js for other browsers\n\t\tconst loadHls = async () => {\n\t\t\ttry {\n\t\t\t\t// Dynamic import of HLS.js (peer dependency)\n\t\t\t\tconst HlsModule = await import(\"hls.js\");\n\t\t\t\tconst Hls = HlsModule.default;\n\n\t\t\t\tif (!Hls.isSupported()) {\n\t\t\t\t\t// Fallback: try setting src directly\n\t\t\t\t\tvideo.src = src;\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst hls = new Hls({\n\t\t\t\t\tenableWorker: true,\n\t\t\t\t\tlowLatencyMode: false,\n\t\t\t\t});\n\n\t\t\t\thls.loadSource(src);\n\t\t\t\thls.attachMedia(video);\n\n\t\t\t\thls.on(Hls.Events.MANIFEST_PARSED, () => {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t});\n\n\t\t\t\thls.on(\n\t\t\t\t\tHls.Events.ERROR,\n\t\t\t\t\t(_event: unknown, data: { fatal?: boolean; details?: string }) => {\n\t\t\t\t\t\tif (data.fatal) {\n\t\t\t\t\t\t\tsetError(new Error(`HLS error: ${data.details}`));\n\t\t\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\thlsRef.current = hls;\n\t\t\t} catch {\n\t\t\t\t// HLS.js not available, try direct source\n\t\t\t\tvideo.src = src;\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t};\n\n\t\tloadHls();\n\n\t\treturn () => {\n\t\t\tif (hlsRef.current) {\n\t\t\t\t(hlsRef.current as { destroy: () => void }).destroy();\n\t\t\t\thlsRef.current = null;\n\t\t\t}\n\t\t};\n\t}, [enabled, src, videoRef]);\n\n\treturn { isLoading, error };\n}\n\n// ============================================================================\n// VideoPlayer Component\n// ============================================================================\n\nexport interface VideoPlayerProps\n\textends Omit<\n\t\t\tReact.HTMLAttributes<HTMLDivElement>,\n\t\t\t\"children\" | \"onError\" | \"onPlay\" | \"onPause\" | \"onEnded\" | \"onTimeUpdate\"\n\t\t>,\n\t\tVariantProps<typeof videoPlayerVariants> {\n\t/** Video source URL (HLS .m3u8 or regular video file) */\n\tsrc?: string;\n\t/** Cloudflare Stream configuration (takes precedence over src) */\n\tcloudflare?: CloudflareConfig;\n\t/** Poster image URL */\n\tposter?: string;\n\t/** VTT captions URL */\n\tcaptionsSrc?: string;\n\t/** Whether to autoplay (default: false) */\n\tautoPlay?: boolean;\n\t/** Whether to loop the video (default: false) */\n\tloop?: boolean;\n\t/** Whether to mute initially (default: false) */\n\tmuted?: boolean;\n\t/** Whether to show controls (default: true) */\n\tcontrols?: boolean;\n\t/** Whether to auto-hide controls when not interacting (default: true) */\n\tautoHideControls?: boolean;\n\t/** Control auto-hide delay in ms (default: 3000) */\n\tautoHideDelay?: number;\n\t/** Whether captions are enabled by default (default: false) */\n\tcaptionsEnabled?: boolean;\n\t/** Callback when video starts playing */\n\tonPlay?: () => void;\n\t/** Callback when video pauses */\n\tonPause?: () => void;\n\t/** Callback when video ends */\n\tonEnded?: () => void;\n\t/** Callback on time update */\n\tonTimeUpdate?: (time: number) => void;\n\t/** Callback on error */\n\tonError?: (error: Error) => void;\n\t/** Ref to the video element */\n\tvideoRef?: React.RefObject<HTMLVideoElement | null>;\n}\n\n/**\n * VideoPlayer - Standalone video player component with media-chrome controls.\n *\n * Supports Cloudflare Stream (recommended) or direct video URLs with HLS support.\n * Works standalone or can be composed with Modal for fullscreen playback.\n *\n * @example\n * ```tsx\n * // With Cloudflare Stream (recommended)\n * <VideoPlayer\n * cloudflare={{ videoId: \"abc123\", customerCode: \"xyz789\" }}\n * poster=\"/thumbnail.jpg\"\n * captionsSrc=\"/captions.vtt\"\n * />\n *\n * // With direct URL\n * <VideoPlayer\n * src=\"https://example.com/video.mp4\"\n * poster=\"/thumbnail.jpg\"\n * />\n *\n * // With Modal for fullscreen\n * <Modal trigger={<Button>Watch Video</Button>}>\n * <VideoPlayer cloudflare={{ videoId: \"...\", customerCode: \"...\" }} />\n * </Modal>\n * ```\n */\nconst VideoPlayer = React.forwardRef<HTMLDivElement, VideoPlayerProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tsrc,\n\t\t\tcloudflare,\n\t\t\tposter,\n\t\t\tcaptionsSrc,\n\t\t\tautoPlay = false,\n\t\t\tloop = false,\n\t\t\tmuted = false,\n\t\t\tcontrols = true,\n\t\t\tautoHideControls = true,\n\t\t\tautoHideDelay = 3000,\n\t\t\tcaptionsEnabled: initialCaptionsEnabled = false,\n\t\t\taspectRatio,\n\t\t\trounded,\n\t\t\tonPlay,\n\t\t\tonPause,\n\t\t\tonEnded,\n\t\t\tonTimeUpdate,\n\t\t\tonError,\n\t\t\tvideoRef: externalVideoRef,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Internal refs\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\t\tconst internalVideoRef = React.useRef<HTMLVideoElement | null>(null);\n\t\tconst controlsTimeoutRef = React.useRef<ReturnType<\n\t\t\ttypeof setTimeout\n\t\t> | null>(null);\n\n\t\t// State\n\t\tconst [isPlaying, setIsPlaying] = React.useState(false);\n\t\tconst [currentTime, setCurrentTime] = React.useState(0);\n\t\tconst [controlsVisible, setControlsVisible] = React.useState(true);\n\t\tconst [captionsEnabled, setCaptionsEnabled] = React.useState(\n\t\t\tinitialCaptionsEnabled,\n\t\t);\n\t\tconst [isFullscreen, setIsFullscreen] = React.useState(false);\n\n\t\t// Compute video source URL\n\t\tconst videoSrc = React.useMemo(() => {\n\t\t\tif (cloudflare) {\n\t\t\t\treturn `https://customer-${cloudflare.customerCode}.cloudflarestream.com/${cloudflare.videoId}/manifest/video.m3u8`;\n\t\t\t}\n\t\t\treturn src;\n\t\t}, [cloudflare, src]);\n\n\t\t// HLS support\n\t\tconst { isLoading, error: hlsError } = useHlsInternal(\n\t\t\tinternalVideoRef,\n\t\t\tvideoSrc,\n\t\t\ttrue,\n\t\t);\n\n\t\t// Caption parsing\n\t\tconst { activeCue } = useCaptions({\n\t\t\tsrc: captionsSrc,\n\t\t\tcurrentTime,\n\t\t});\n\n\t\t// Merge refs\n\t\tReact.useEffect(() => {\n\t\t\tif (externalVideoRef) {\n\t\t\t\t(\n\t\t\t\t\texternalVideoRef as React.MutableRefObject<HTMLVideoElement | null>\n\t\t\t\t).current = internalVideoRef.current;\n\t\t\t}\n\t\t}, [externalVideoRef]);\n\n\t\t// Merge container ref\n\t\tReact.useImperativeHandle(\n\t\t\tref,\n\t\t\t() => containerRef.current as HTMLDivElement,\n\t\t);\n\n\t\t// Report errors\n\t\tReact.useEffect(() => {\n\t\t\tif (hlsError && onError) {\n\t\t\t\tonError(hlsError);\n\t\t\t}\n\t\t}, [hlsError, onError]);\n\n\t\t// Video event handlers\n\t\tReact.useEffect(() => {\n\t\t\tconst video = internalVideoRef.current;\n\t\t\tif (!video) return;\n\n\t\t\tconst handlePlay = () => {\n\t\t\t\tsetIsPlaying(true);\n\t\t\t\tonPlay?.();\n\t\t\t};\n\n\t\t\tconst handlePause = () => {\n\t\t\t\tsetIsPlaying(false);\n\t\t\t\tonPause?.();\n\t\t\t};\n\n\t\t\tconst handleEnded = () => {\n\t\t\t\tsetIsPlaying(false);\n\t\t\t\tonEnded?.();\n\t\t\t};\n\n\t\t\tconst handleTimeUpdate = () => {\n\t\t\t\tsetCurrentTime(video.currentTime);\n\t\t\t\tonTimeUpdate?.(video.currentTime);\n\t\t\t};\n\n\t\t\tconst handleCanPlay = () => {\n\t\t\t\tif (autoPlay) {\n\t\t\t\t\tvideo.play().catch(() => {\n\t\t\t\t\t\t// Autoplay may be blocked\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvideo.addEventListener(\"play\", handlePlay);\n\t\t\tvideo.addEventListener(\"pause\", handlePause);\n\t\t\tvideo.addEventListener(\"ended\", handleEnded);\n\t\t\tvideo.addEventListener(\"timeupdate\", handleTimeUpdate);\n\t\t\tvideo.addEventListener(\"canplay\", handleCanPlay);\n\n\t\t\treturn () => {\n\t\t\t\tvideo.removeEventListener(\"play\", handlePlay);\n\t\t\t\tvideo.removeEventListener(\"pause\", handlePause);\n\t\t\t\tvideo.removeEventListener(\"ended\", handleEnded);\n\t\t\t\tvideo.removeEventListener(\"timeupdate\", handleTimeUpdate);\n\t\t\t\tvideo.removeEventListener(\"canplay\", handleCanPlay);\n\t\t\t};\n\t\t}, [autoPlay, onPlay, onPause, onEnded, onTimeUpdate]);\n\n\t\t// Auto-hide controls\n\t\tReact.useEffect(() => {\n\t\t\tif (!autoHideControls || !isPlaying || !controlsVisible) return;\n\n\t\t\tcontrolsTimeoutRef.current = setTimeout(() => {\n\t\t\t\tsetControlsVisible(false);\n\t\t\t}, autoHideDelay);\n\n\t\t\treturn () => {\n\t\t\t\tif (controlsTimeoutRef.current) {\n\t\t\t\t\tclearTimeout(controlsTimeoutRef.current);\n\t\t\t\t}\n\t\t\t};\n\t\t}, [autoHideControls, isPlaying, controlsVisible, autoHideDelay]);\n\n\t\t// Track fullscreen state\n\t\tReact.useEffect(() => {\n\t\t\tconst handleFullscreenChange = () => {\n\t\t\t\tsetIsFullscreen(!!document.fullscreenElement);\n\t\t\t};\n\n\t\t\tdocument.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n\t\t\tdocument.addEventListener(\n\t\t\t\t\"webkitfullscreenchange\",\n\t\t\t\thandleFullscreenChange,\n\t\t\t);\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener(\n\t\t\t\t\t\"fullscreenchange\",\n\t\t\t\t\thandleFullscreenChange,\n\t\t\t\t);\n\t\t\t\tdocument.removeEventListener(\n\t\t\t\t\t\"webkitfullscreenchange\",\n\t\t\t\t\thandleFullscreenChange,\n\t\t\t\t);\n\t\t\t};\n\t\t}, []);\n\n\t\t// Actions\n\t\tconst togglePlay = React.useCallback(() => {\n\t\t\tconst video = internalVideoRef.current;\n\t\t\tif (!video) return;\n\n\t\t\tif (video.paused) {\n\t\t\t\tvideo.play().catch(() => {});\n\t\t\t} else {\n\t\t\t\tvideo.pause();\n\t\t\t}\n\t\t}, []);\n\n\t\tconst toggleCaptions = React.useCallback(() => {\n\t\t\tsetCaptionsEnabled((prev) => !prev);\n\t\t}, []);\n\n\t\tconst toggleFullscreen = React.useCallback(() => {\n\t\t\tif (!document.fullscreenElement) {\n\t\t\t\tcontainerRef.current?.requestFullscreen();\n\t\t\t} else {\n\t\t\t\tdocument.exitFullscreen();\n\t\t\t}\n\t\t}, []);\n\n\t\tconst showControls = React.useCallback(() => {\n\t\t\tsetControlsVisible(true);\n\t\t\tif (controlsTimeoutRef.current) {\n\t\t\t\tclearTimeout(controlsTimeoutRef.current);\n\t\t\t}\n\t\t}, []);\n\n\t\tconst handleMouseLeave = React.useCallback(() => {\n\t\t\tif (autoHideControls && isPlaying) {\n\t\t\t\tsetControlsVisible(false);\n\t\t\t}\n\t\t}, [autoHideControls, isPlaying]);\n\n\t\t// Keyboard shortcuts for video player\n\t\tconst { containerProps: keyboardProps } = useVideoKeyboard({\n\t\t\tvideoRef: internalVideoRef,\n\t\t\tonTogglePlay: togglePlay,\n\t\t\tonToggleFullscreen: toggleFullscreen,\n\t\t\tonToggleCaptions: captionsSrc ? toggleCaptions : undefined,\n\t\t\tonShowControls: showControls,\n\t\t});\n\n\t\treturn (\n\t\t\t// biome-ignore lint/a11y/noStaticElementInteractions: role is applied via keyboardProps spread\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName={cn(videoPlayerVariants({ aspectRatio, rounded }), className)}\n\t\t\t\tonMouseMove={showControls}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\t{...keyboardProps}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{controls ? (\n\t\t\t\t\t<MediaController\n\t\t\t\t\t\tnoAutohide={true}\n\t\t\t\t\t\tclassName={mediaControllerVariants()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Video Element */}\n\t\t\t\t\t\t<video\n\t\t\t\t\t\t\tref={internalVideoRef}\n\t\t\t\t\t\t\tslot=\"media\"\n\t\t\t\t\t\t\tposter={poster}\n\t\t\t\t\t\t\tloop={loop}\n\t\t\t\t\t\t\tmuted={muted}\n\t\t\t\t\t\t\tplaysInline\n\t\t\t\t\t\t\tcrossOrigin=\"anonymous\"\n\t\t\t\t\t\t\tclassName=\"w-full h-full object-contain\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Loading Indicator */}\n\t\t\t\t\t\t<MediaLoadingIndicator slot=\"centered-chrome\" noAutohide />\n\n\t\t\t\t\t\t{/* Click to play/pause overlay */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tonClick={togglePlay}\n\t\t\t\t\t\t\tclassName=\"absolute inset-0 cursor-pointer z-[1]\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Control Bar */}\n\t\t\t\t\t\t<MediaControlBar\n\t\t\t\t\t\t\tclassName={controlBarVariants({ visible: controlsVisible })}\n\t\t\t\t\t\t\tonClick={(e: React.MouseEvent) => e.stopPropagation()}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tleft: \"24px\",\n\t\t\t\t\t\t\t\tright: \"24px\",\n\t\t\t\t\t\t\t\tbottom: \"24px\",\n\t\t\t\t\t\t\t\tgap: \"12px\",\n\t\t\t\t\t\t\t\tpadding: \"8px 16px\",\n\t\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\t\tbackdropFilter: \"blur(10px)\",\n\t\t\t\t\t\t\t\tWebkitBackdropFilter: \"blur(10px)\",\n\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MediaPlayButton style={mediaButtonStyles} />\n\t\t\t\t\t\t\t<MediaMuteButton style={mediaButtonStyles} />\n\t\t\t\t\t\t\t<MediaVolumeRange style={volumeRangeStyles} />\n\t\t\t\t\t\t\t<MediaTimeDisplay\n\t\t\t\t\t\t\t\tstyle={timeDisplayStyles}\n\t\t\t\t\t\t\t\tshowDuration\n\t\t\t\t\t\t\t\tnoToggle\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<MediaTimeRange style={timeRangeStyles} />\n\n\t\t\t\t\t\t\t{/* Captions Button */}\n\t\t\t\t\t\t\t{captionsSrc && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName={controlButtonVariants()}\n\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\ttoggleCaptions();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\tcaptionsEnabled ? \"Disable captions\" : \"Enable captions\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-pressed={captionsEnabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CaptionsIcon enabled={captionsEnabled} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Fullscreen Button */}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName={controlButtonVariants()}\n\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\ttoggleFullscreen();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\tisFullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FullscreenIcon isFullscreen={isFullscreen} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</MediaControlBar>\n\t\t\t\t\t</MediaController>\n\t\t\t\t) : (\n\t\t\t\t\t/* Video without controls */\n\t\t\t\t\t<video\n\t\t\t\t\t\tref={internalVideoRef}\n\t\t\t\t\t\tposter={poster}\n\t\t\t\t\t\tloop={loop}\n\t\t\t\t\t\tmuted={muted}\n\t\t\t\t\t\tplaysInline\n\t\t\t\t\t\tcrossOrigin=\"anonymous\"\n\t\t\t\t\t\tclassName=\"w-full h-full object-contain\"\n\t\t\t\t\t\tonClick={togglePlay}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Loading Overlay (when HLS is loading) */}\n\t\t\t\t{isLoading && (\n\t\t\t\t\t<div className={loadingOverlayVariants()}>\n\t\t\t\t\t\t<div className=\"w-40 h-40 border-3 border-white/30 border-t-white rounded-full animate-spin\" />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Error Display */}\n\t\t\t\t{hlsError && (\n\t\t\t\t\t<div className={loadingOverlayVariants()}>\n\t\t\t\t\t\t<div className=\"text-white text-center px-16\">\n\t\t\t\t\t\t\t<p className=\"typography-body-sm-sm\">Failed to load video</p>\n\t\t\t\t\t\t\t<p className=\"typography-caption text-white/60 mt-4\">\n\t\t\t\t\t\t\t\t{hlsError.message}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Caption Overlay */}\n\t\t\t\t{captionsEnabled && activeCue && <CaptionOverlay cue={activeCue} />}\n\t\t\t</div>\n\t\t);\n\t},\n);\nVideoPlayer.displayName = \"VideoPlayer\";\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst CaptionsIcon = ({ enabled }: { enabled: boolean }) => (\n\t<svg\n\t\tclassName=\"w-20 h-20\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t>\n\t\t{enabled ? (\n\t\t\t// Captions On\n\t\t\t<path d=\"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z\" />\n\t\t) : (\n\t\t\t// Captions Off (with strike-through)\n\t\t\t<>\n\t\t\t\t<path d=\"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z\" />\n\t\t\t\t<line\n\t\t\t\t\tx1=\"4\"\n\t\t\t\t\ty1=\"20\"\n\t\t\t\t\tx2=\"20\"\n\t\t\t\t\ty2=\"4\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t/>\n\t\t\t</>\n\t\t)}\n\t</svg>\n);\n\nconst FullscreenIcon = ({ isFullscreen }: { isFullscreen: boolean }) => (\n\t<svg\n\t\tclassName=\"w-20 h-20\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"2\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t>\n\t\t{isFullscreen ? (\n\t\t\t// Minimize (exit fullscreen)\n\t\t\t<>\n\t\t\t\t<polyline points=\"4 14 10 14 10 20\" />\n\t\t\t\t<polyline points=\"20 10 14 10 14 4\" />\n\t\t\t\t<line x1=\"14\" y1=\"10\" x2=\"21\" y2=\"3\" />\n\t\t\t\t<line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\" />\n\t\t\t</>\n\t\t) : (\n\t\t\t// Maximize (enter fullscreen)\n\t\t\t<>\n\t\t\t\t<polyline points=\"15 3 21 3 21 9\" />\n\t\t\t\t<polyline points=\"9 21 3 21 3 15\" />\n\t\t\t\t<line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\" />\n\t\t\t\t<line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\" />\n\t\t\t</>\n\t\t)}\n\t</svg>\n);\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n\tVideoPlayer,\n\tvideoPlayerVariants,\n\tmediaControllerVariants,\n\tcontrolBarVariants,\n\tcontrolButtonVariants,\n\tloadingOverlayVariants,\n};\n","export interface GridOverlayProps {\n\tcolumnOpacity?: number;\n\tborderOpacity?: number;\n\tvisible?: boolean;\n}\n\nexport function GridOverlay({\n\tcolumnOpacity = 0.15,\n\tborderOpacity = 0.3,\n\tvisible = true,\n}: GridOverlayProps) {\n\tconst columns = Array.from({ length: 24 }, (_, i) => i);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`\n\t\t\t\tfixed inset-0 z-[9998] pointer-events-none overflow-hidden\n\t\t\t\ttransition-opacity duration-300 ease-out\n\t\t\t\t${visible ? \"opacity-100\" : \"opacity-0\"}\n\t\t\t`}\n\t\t\taria-hidden=\"true\"\n\t\t\tdata-testid=\"grid-overlay\"\n\t\t>\n\t\t\t<div className=\"h-full w-full max-w-[90rem] mx-auto px-[var(--spatial-grid-small-margin)] md:px-[var(--spatial-grid-medium-margin)] lg:px-[var(--spatial-grid-large-margin)]\">\n\t\t\t\t<div className=\"h-full grid grid-cols-4 md:grid-cols-12 lg:grid-cols-24 gap-[var(--spatial-grid-small-gutter)] md:gap-[var(--spatial-grid-medium-gutter)] lg:gap-[var(--spatial-grid-large-gutter)]\">\n\t\t\t\t\t{columns.map((index) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tclassName=\"h-full border border-red-500\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackgroundColor: `rgb(239 68 68 / ${columnOpacity})`,\n\t\t\t\t\t\t\t\tborderColor: `rgb(239 68 68 / ${borderOpacity})`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdata-column={index + 1}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { GridOverlay } from \"../grid-overlay\";\n\nfunction GridIcon({ active }: { active?: boolean }) {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"20\"\n\t\t\theight=\"20\"\n\t\t\tviewBox=\"0 0 20 20\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={active ? \"2\" : \"1.5\"}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" />\n\t\t\t<line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"18\" />\n\t\t\t<line x1=\"13\" y1=\"2\" x2=\"13\" y2=\"18\" />\n\t\t</svg>\n\t);\n}\n\nexport interface DevToolbarProps {\n\tdefaultExpanded?: boolean;\n}\n\nconst DRAG_THRESHOLD = 3;\n\nexport function DevToolbar({ defaultExpanded = false }: DevToolbarProps) {\n\tconst [isExpanded, setIsExpanded] = useState(defaultExpanded);\n\tconst [showGrid, setShowGrid] = useState(false);\n\tconst [position, setPosition] = useState({ x: 0, y: 0 });\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst hasDraggedRef = useRef(false);\n\tconst dragRef = useRef<{\n\t\tstartX: number;\n\t\tstartY: number;\n\t\tstartPosX: number;\n\t\tstartPosY: number;\n\t} | null>(null);\n\tconst toolbarRef = useRef<HTMLDivElement>(null);\n\n\tconst toggleGrid = useCallback(() => setShowGrid((prev) => !prev), []);\n\tconst toggleExpanded = useCallback(() => setIsExpanded((prev) => !prev), []);\n\n\tuseEffect(() => {\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif ((e.ctrlKey || e.metaKey) && e.key === \"g\") {\n\t\t\t\te.preventDefault();\n\t\t\t\ttoggleGrid();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => window.removeEventListener(\"keydown\", handleKeyDown);\n\t}, [toggleGrid]);\n\n\tconst handleDragStart = useCallback(\n\t\t(clientX: number, clientY: number) => {\n\t\t\tsetIsDragging(true);\n\t\t\thasDraggedRef.current = false;\n\t\t\tdragRef.current = {\n\t\t\t\tstartX: clientX,\n\t\t\t\tstartY: clientY,\n\t\t\t\tstartPosX: position.x,\n\t\t\t\tstartPosY: position.y,\n\t\t\t};\n\t\t},\n\t\t[position],\n\t);\n\n\tconst handleDragMove = useCallback(\n\t\t(clientX: number, clientY: number) => {\n\t\t\tif (!isDragging || !dragRef.current) return;\n\n\t\t\tconst deltaX = clientX - dragRef.current.startX;\n\t\t\tconst deltaY = clientY - dragRef.current.startY;\n\n\t\t\tif (\n\t\t\t\tMath.abs(deltaX) > DRAG_THRESHOLD ||\n\t\t\t\tMath.abs(deltaY) > DRAG_THRESHOLD\n\t\t\t) {\n\t\t\t\thasDraggedRef.current = true;\n\t\t\t}\n\n\t\t\tsetPosition({\n\t\t\t\tx: dragRef.current.startPosX + deltaX,\n\t\t\t\ty: dragRef.current.startPosY - deltaY,\n\t\t\t});\n\t\t},\n\t\t[isDragging],\n\t);\n\n\tconst handleDragEnd = useCallback(() => {\n\t\tsetIsDragging(false);\n\t\tdragRef.current = null;\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isDragging) return;\n\n\t\tconst handleMouseMove = (e: MouseEvent) =>\n\t\t\thandleDragMove(e.clientX, e.clientY);\n\t\tconst handleTouchMove = (e: TouchEvent) => {\n\t\t\tif (e.touches[0])\n\t\t\t\thandleDragMove(e.touches[0].clientX, e.touches[0].clientY);\n\t\t};\n\t\tconst handleEnd = () => handleDragEnd();\n\n\t\twindow.addEventListener(\"mousemove\", handleMouseMove);\n\t\twindow.addEventListener(\"mouseup\", handleEnd);\n\t\twindow.addEventListener(\"touchmove\", handleTouchMove);\n\t\twindow.addEventListener(\"touchend\", handleEnd);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"mousemove\", handleMouseMove);\n\t\t\twindow.removeEventListener(\"mouseup\", handleEnd);\n\t\t\twindow.removeEventListener(\"touchmove\", handleTouchMove);\n\t\t\twindow.removeEventListener(\"touchend\", handleEnd);\n\t\t};\n\t}, [isDragging, handleDragMove, handleDragEnd]);\n\n\tconst handleBarMouseDown = (e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\thandleDragStart(e.clientX, e.clientY);\n\t};\n\n\tconst handleBarTouchStart = (e: React.TouchEvent) => {\n\t\tif (e.touches[0]) {\n\t\t\thandleDragStart(e.touches[0].clientX, e.touches[0].clientY);\n\t\t}\n\t};\n\n\tconst handleBarClick = () => {\n\t\tif (!hasDraggedRef.current) {\n\t\t\ttoggleExpanded();\n\t\t}\n\t\thasDraggedRef.current = false;\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{showGrid && <GridOverlay />}\n\n\t\t\t<div\n\t\t\t\tref={toolbarRef}\n\t\t\t\tclassName=\"fixed bottom-4 left-1/2 z-[9999]\"\n\t\t\t\tstyle={{\n\t\t\t\t\ttransform: `translate(calc(-50% + ${position.x}px), ${-position.y}px)`,\n\t\t\t\t}}\n\t\t\t\tdata-testid=\"dev-toolbar\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={`bg-gray-1100 rounded-radius-16 shadow-lg flex flex-col items-center overflow-hidden px-12 py-8 ${isExpanded ? \"gap-4\" : \"\"}`}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`\n\t\t\t\t\t\t\tgrid transition-all duration-300 ease-out\n\t\t\t\t\t\t\t${isExpanded ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\"}\n\t\t\t\t\t\t`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"overflow-hidden\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={toggleGrid}\n\t\t\t\t\t\t\t\tclassName={`\n\t\t\t\t\t\t\t\t\tsize-40 rounded-full flex items-center justify-center transition-colors\n\t\t\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\t\t\tshowGrid\n\t\t\t\t\t\t\t\t\t\t\t? \"text-gray-50\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-gray-400 hover:text-gray-50 hover:bg-alpha-white-10\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t`}\n\t\t\t\t\t\t\t\ttitle=\"Toggle Grid (⌘G)\"\n\t\t\t\t\t\t\t\taria-label=\"Toggle grid overlay\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GridIcon active={showGrid} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonMouseDown={handleBarMouseDown}\n\t\t\t\t\t\tonTouchStart={handleBarTouchStart}\n\t\t\t\t\t\tonClick={handleBarClick}\n\t\t\t\t\t\tclassName={`\n\t\t\t\t\t\t\tw-32 h-4 bg-gray-50 rounded-full transition-opacity\n\t\t\t\t\t\t\t${isDragging ? \"opacity-100 cursor-grabbing\" : \"opacity-60 hover:opacity-100 cursor-grab\"}\n\t\t\t\t\t\t`}\n\t\t\t\t\t\taria-label={isExpanded ? \"Close dev tools\" : \"Open dev tools\"}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui-components/react/dialog\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Dialog backdrop variants\n *\n * Semi-transparent overlay behind the dialog content.\n */\nconst dialogBackdropVariants = tv({\n\tbase: [\n\t\t// Fixed positioning to cover viewport\n\t\t\"fixed inset-0\",\n\t\t// Semi-transparent black background using alpha token\n\t\t\"bg-alpha-black-50\",\n\t\t// Smooth opacity transition\n\t\t\"transition-opacity duration-200\",\n\t\t// Animation states\n\t\t\"data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:opacity-0\",\n\t\t// Ensure backdrop covers full viewport on iOS\n\t\t\"min-h-dvh\",\n\t],\n});\n\n/**\n * Dialog popup variants\n *\n * Uses semantic overlay tokens for themeable styling:\n * - color.overlay.background - Light background\n * - color.overlay.border - Subtle border\n * - color.overlay.text - Primary text\n * - surface.overlay.radius - Rounded corners\n */\nconst dialogPopupVariants = tv({\n\tbase: [\n\t\t// Fixed positioning, centered\n\t\t\"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n\t\t// Layout\n\t\t\"flex flex-col\",\n\t\t// Max dimensions with viewport margin (24px on each side = 48px total)\n\t\t\"max-h-[calc(100vh-48px)] max-w-[calc(100vw-48px)]\",\n\t\t// Ensure above backdrop\n\t\t\"z-50\",\n\t\t// Animation\n\t\t\"transition-all duration-200\",\n\t\t\"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n\t\t// Focus outline\n\t\t\"outline-none\",\n\t],\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"w-full sm:max-w-[400px]\",\n\t\t\tmd: \"w-full sm:max-w-[560px]\",\n\t\t\tlg: \"w-full sm:max-w-[720px]\",\n\t\t\txl: \"w-full sm:max-w-[960px]\",\n\t\t\tfull: \"w-[calc(100vw-48px)] h-[calc(100vh-48px)]\",\n\t\t},\n\t\tvariant: {\n\t\t\tdefault: [\n\t\t\t\t// Background - uses overlay background token\n\t\t\t\t\"bg-overlay-background\",\n\t\t\t\t// Border - uses overlay border token\n\t\t\t\t\"border border-overlay-border\",\n\t\t\t\t// Text - uses overlay text token\n\t\t\t\t\"text-overlay-text\",\n\t\t\t\t// Border radius - uses surface overlay token\n\t\t\t\t\"rounded-surface-overlay\",\n\t\t\t\t// Shadow for elevation\n\t\t\t\t\"shadow-xl\",\n\t\t\t],\n\t\t\tminimal: [\n\t\t\t\t// Transparent background, no border/shadow\n\t\t\t\t\"bg-black\",\n\t\t\t\t\"border-0\",\n\t\t\t\t\"text-white\",\n\t\t\t\t\"rounded-8\",\n\t\t\t\t\"shadow-none\",\n\t\t\t\t\"overflow-hidden\",\n\t\t\t],\n\t\t},\n\t},\n\tcompoundVariants: [\n\t\t// Default variant padding by size\n\t\t{ variant: \"default\", size: \"sm\", class: \"p-24\" },\n\t\t{ variant: \"default\", size: \"md\", class: \"p-32\" },\n\t\t{ variant: \"default\", size: \"lg\", class: \"p-32\" },\n\t\t{ variant: \"default\", size: \"xl\", class: \"p-40\" },\n\t\t{ variant: \"default\", size: \"full\", class: \"p-40\" },\n\t\t// Minimal variant has no padding\n\t\t{ variant: \"minimal\", size: \"sm\", class: \"p-0\" },\n\t\t{ variant: \"minimal\", size: \"md\", class: \"p-0\" },\n\t\t{ variant: \"minimal\", size: \"lg\", class: \"p-0\" },\n\t\t{ variant: \"minimal\", size: \"xl\", class: \"p-0\" },\n\t\t{ variant: \"minimal\", size: \"full\", class: \"p-0\" },\n\t],\n\tdefaultVariants: {\n\t\tsize: \"md\",\n\t\tvariant: \"default\",\n\t},\n});\n\n// ============================================================================\n// Dialog Root\n// ============================================================================\n\nexport interface DialogRootProps extends BaseDialog.Root.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Dialog Root\n *\n * Groups all dialog parts and manages open/close state.\n * Provides focus trap, scroll lock, and escape key handling automatically.\n */\nconst DialogRoot = ({ children, ...props }: DialogRootProps) => {\n\treturn <BaseDialog.Root {...props}>{children}</BaseDialog.Root>;\n};\n\n// ============================================================================\n// Dialog Trigger\n// ============================================================================\n\nexport interface DialogTriggerProps\n\textends React.ComponentProps<typeof BaseDialog.Trigger> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Trigger\n *\n * The element that triggers the dialog to open on click.\n * When children is a single React element, uses `render` prop to avoid wrapper element.\n */\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n\t({ className, children, ...props }, ref) => {\n\t\t// If children is a single React element, use render prop to avoid wrapper\n\t\tconst isSingleElement = React.isValidElement(children);\n\n\t\tif (isSingleElement) {\n\t\t\treturn (\n\t\t\t\t<BaseDialog.Trigger\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\trender={children as React.ReactElement<Record<string, unknown>>}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseDialog.Trigger ref={ref} className={className} {...props}>\n\t\t\t\t{children}\n\t\t\t</BaseDialog.Trigger>\n\t\t);\n\t},\n);\nDialogTrigger.displayName = \"DialogTrigger\";\n\n// ============================================================================\n// Dialog Portal\n// ============================================================================\n\nexport interface DialogPortalProps extends BaseDialog.Portal.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Dialog Portal\n *\n * Renders the dialog in a portal outside the DOM hierarchy.\n * This ensures proper stacking context and avoids z-index issues.\n */\nconst DialogPortal = ({ children, ...props }: DialogPortalProps) => {\n\treturn <BaseDialog.Portal {...props}>{children}</BaseDialog.Portal>;\n};\n\n// ============================================================================\n// Dialog Backdrop\n// ============================================================================\n\nexport interface DialogBackdropProps\n\textends Omit<React.ComponentProps<typeof BaseDialog.Backdrop>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Backdrop\n *\n * Semi-transparent overlay that covers the page behind the dialog.\n * Clicking the backdrop closes the dialog by default.\n */\nconst DialogBackdrop = React.forwardRef<HTMLDivElement, DialogBackdropProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseDialog.Backdrop\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(dialogBackdropVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogBackdrop.displayName = \"DialogBackdrop\";\n\n// ============================================================================\n// Dialog Popup\n// ============================================================================\n\nexport interface DialogPopupProps\n\textends Omit<React.ComponentProps<typeof BaseDialog.Popup>, \"className\">,\n\t\tVariantProps<typeof dialogPopupVariants> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Popup\n *\n * The dialog content container. Centered on screen with configurable size.\n * Use `variant=\"minimal\"` for borderless dialogs (video modals, etc.)\n */\nconst DialogPopup = React.forwardRef<HTMLDivElement, DialogPopupProps>(\n\t({ className, size, variant, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseDialog.Popup\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(dialogPopupVariants({ size, variant }), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogPopup.displayName = \"DialogPopup\";\n\n// ============================================================================\n// Dialog Title\n// ============================================================================\n\nexport interface DialogTitleProps\n\textends Omit<React.ComponentProps<typeof BaseDialog.Title>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Title\n *\n * Accessible title for the dialog. Should be used for screen reader support.\n */\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseDialog.Title\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\"typography-h4-md font-semibold mb-8\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogTitle.displayName = \"DialogTitle\";\n\n// ============================================================================\n// Dialog Description\n// ============================================================================\n\nexport interface DialogDescriptionProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseDialog.Description>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Description\n *\n * Accessible description for the dialog content.\n */\nconst DialogDescription = React.forwardRef<\n\tHTMLParagraphElement,\n\tDialogDescriptionProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<BaseDialog.Description\n\t\t\tref={ref}\n\t\t\tclassName={cn(\"typography-body-md-md text-overlay-text-muted\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nDialogDescription.displayName = \"DialogDescription\";\n\n// ============================================================================\n// Dialog Close\n// ============================================================================\n\nexport interface DialogCloseProps\n\textends Omit<React.ComponentProps<typeof BaseDialog.Close>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Close\n *\n * Close button for the dialog. Can be placed anywhere within the dialog.\n */\nconst DialogClose = React.forwardRef<HTMLButtonElement, DialogCloseProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseDialog.Close\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute right-16 top-16 rounded-surface-ui-small p-8\",\n\t\t\t\t\t\"text-overlay-text-muted hover:text-overlay-text\",\n\t\t\t\t\t\"hover:bg-bg-section\",\n\t\t\t\t\t\"focus:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\",\n\t\t\t\t\t\"transition-colors duration-150\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogClose.displayName = \"DialogClose\";\n\n// ============================================================================\n// Dialog Body\n// ============================================================================\n\nexport interface DialogBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Body\n *\n * Container for the main dialog content. Handles overflow scrolling.\n */\nconst DialogBody = React.forwardRef<HTMLDivElement, DialogBodyProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\"flex-1 overflow-y-auto\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogBody.displayName = \"DialogBody\";\n\n// ============================================================================\n// Dialog Footer\n// ============================================================================\n\nexport interface DialogFooterProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Footer\n *\n * Container for dialog actions (buttons, etc.). Typically placed at the bottom.\n */\nconst DialogFooter = React.forwardRef<HTMLDivElement, DialogFooterProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center justify-end gap-12 pt-24 mt-auto\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogFooter.displayName = \"DialogFooter\";\n\n// ============================================================================\n// Simple Dialog Component\n// ============================================================================\n\nexport interface DialogProps {\n\t/** The content to show in the dialog */\n\tchildren: React.ReactNode;\n\t/** The element that triggers the dialog (optional for controlled mode) */\n\ttrigger?: React.ReactNode;\n\t/** Title for the dialog */\n\ttitle?: React.ReactNode;\n\t/** Description for the dialog */\n\tdescription?: React.ReactNode;\n\t/** Size of the dialog */\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\t/** Visual variant: \"default\" for card style, \"minimal\" for borderless (video modals) */\n\tvariant?: \"default\" | \"minimal\";\n\t/** Whether to show a close button */\n\tshowClose?: boolean;\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Default open state */\n\tdefaultOpen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Additional className for the popup */\n\tclassName?: string;\n}\n\n/**\n * Dialog\n *\n * A simple, pre-composed dialog component for common use cases.\n * For more complex needs, use the compound components directly.\n *\n * @example\n * ```tsx\n * // With trigger\n * <Dialog\n * trigger={<Button>Open Dialog</Button>}\n * title=\"Dialog Title\"\n * description=\"This is the dialog description.\"\n * >\n * <p>Dialog content goes here.</p>\n * </Dialog>\n *\n * // Controlled mode\n * <Dialog\n * open={isOpen}\n * onOpenChange={setIsOpen}\n * title=\"Controlled Dialog\"\n * >\n * <p>Content here</p>\n * </Dialog>\n * ```\n */\nconst Dialog = ({\n\tchildren,\n\ttrigger,\n\ttitle,\n\tdescription,\n\tsize = \"md\",\n\tvariant = \"default\",\n\tshowClose = true,\n\topen,\n\tdefaultOpen,\n\tonOpenChange,\n\tclassName,\n}: DialogProps) => {\n\treturn (\n\t\t<DialogRoot\n\t\t\topen={open}\n\t\t\tdefaultOpen={defaultOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t>\n\t\t\t{trigger && <DialogTrigger>{trigger}</DialogTrigger>}\n\t\t\t<DialogPortal>\n\t\t\t\t<DialogBackdrop />\n\t\t\t\t<DialogPopup size={size} variant={variant} className={className}>\n\t\t\t\t\t{showClose && (\n\t\t\t\t\t\t<DialogClose>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M2 2L14 14M2 14L14 2\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t\t\t</DialogClose>\n\t\t\t\t\t)}\n\t\t\t\t\t{title && <DialogTitle>{title}</DialogTitle>}\n\t\t\t\t\t{description && <DialogDescription>{description}</DialogDescription>}\n\t\t\t\t\t<DialogBody>{children}</DialogBody>\n\t\t\t\t</DialogPopup>\n\t\t\t</DialogPortal>\n\t\t</DialogRoot>\n\t);\n};\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const DialogParts = Object.assign(DialogRoot, {\n\tRoot: DialogRoot,\n\tTrigger: DialogTrigger,\n\tPortal: DialogPortal,\n\tBackdrop: DialogBackdrop,\n\tPopup: DialogPopup,\n\tTitle: DialogTitle,\n\tDescription: DialogDescription,\n\tClose: DialogClose,\n\tBody: DialogBody,\n\tFooter: DialogFooter,\n});\n\nexport {\n\tDialog,\n\tDialogRoot,\n\tDialogTrigger,\n\tDialogPortal,\n\tDialogBackdrop,\n\tDialogPopup,\n\tDialogTitle,\n\tDialogDescription,\n\tDialogClose,\n\tDialogBody,\n\tDialogFooter,\n\tdialogBackdropVariants,\n\tdialogPopupVariants,\n};\n","\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui-components/react/dialog\";\nimport * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport {\n\tBlurredVideoBackdrop,\n\ttype BlurredVideoBackdropProps,\n} from \"@/components/atoms/blurred-video-backdrop\";\nimport {\n\tVideoPlayer,\n\ttype VideoPlayerProps,\n} from \"@/components/atoms/video-player\";\nimport { cn } from \"@/lib/utils\";\n\n// ============================================================================\n// Variant Definitions\n// ============================================================================\n\n/**\n * Video dialog container variants.\n * Uses fixed positioning to cover the viewport.\n */\nconst videoDialogVariants = tv({\n\tbase: [\n\t\t// Fixed positioning covering viewport\n\t\t\"fixed inset-0\",\n\t\t// Dark background base\n\t\t\"bg-black\",\n\t\t// Flex centering for the video\n\t\t\"flex items-center justify-center\",\n\t\t// Animation\n\t\t\"transition-opacity duration-300\",\n\t\t\"data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:opacity-0\",\n\t\t// Focus outline\n\t\t\"outline-none\",\n\t],\n});\n\n/**\n * Close button variants.\n */\nconst closeButtonVariants = tv({\n\tbase: [\n\t\t// Positioning\n\t\t\"absolute z-50\",\n\t\t// Size and shape\n\t\t\"w-48 h-48 rounded-full\",\n\t\t// Colors\n\t\t\"bg-black/60 text-white\",\n\t\t\"hover:bg-black/80\",\n\t\t// Transition\n\t\t\"transition-all duration-150\",\n\t\t// Focus\n\t\t\"focus:outline-none focus-visible:ring-2 focus-visible:ring-white/50\",\n\t\t// Flex centering for icon\n\t\t\"flex items-center justify-center\",\n\t\t// Cursor\n\t\t\"cursor-pointer\",\n\t],\n\tvariants: {\n\t\tposition: {\n\t\t\t\"top-right\": \"top-24 right-24\",\n\t\t\t\"top-left\": \"top-24 left-24\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tposition: \"top-right\",\n\t},\n});\n\n/**\n * Video container variants.\n * Expands to fill viewport, constrained by height (maintains aspect ratio).\n */\nconst videoContainerVariants = tv({\n\tbase: [\n\t\t// Relative for z-index\n\t\t\"relative z-10\",\n\t\t// Fill available space\n\t\t\"w-full h-full\",\n\t\t// Flex to center the video\n\t\t\"flex items-center justify-center\",\n\t\t// Padding from viewport edges\n\t\t\"p-16 sm:p-24 lg:p-32\",\n\t],\n});\n\n// ============================================================================\n// VideoDialog Component\n// ============================================================================\n\nexport interface VideoDialogProps\n\textends Omit<VideoPlayerProps, \"videoRef\" | \"className\"> {\n\t/** Trigger element that opens the dialog */\n\ttrigger: React.ReactNode;\n\t/** Blur intensity for backdrop (default: high) */\n\tblur?: BlurredVideoBackdropProps[\"blur\"];\n\t/** Gradient overlay for backdrop (default: vignette) */\n\toverlay?: BlurredVideoBackdropProps[\"overlay\"];\n\t/** Backdrop opacity (default: 0.6) */\n\tbackdropOpacity?: number;\n\t/** Whether to show close button (default: true) */\n\tshowClose?: boolean;\n\t/** Close button position (default: top-right) */\n\tclosePosition?: \"top-right\" | \"top-left\";\n\t/** Video player rounded corners (default: lg) */\n\trounded?: VideoPlayerProps[\"rounded\"];\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Default open state */\n\tdefaultOpen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Additional className for the dialog container */\n\tclassName?: string;\n}\n\n/**\n * VideoDialog - Fullscreen video modal with blurred video backdrop.\n *\n * Creates an immersive video viewing experience where the blurred video\n * serves as the modal backdrop, with the main video centered on top.\n * Based on the DGA modal pattern.\n *\n * Features:\n * - Blurred video backdrop that syncs with main video\n * - Configurable blur intensity and gradient overlays\n * - Automatic play/pause when dialog opens/closes\n * - HLS streaming support via Cloudflare Stream\n * - Accessible dialog with focus trap and escape key handling\n *\n * @example\n * ```tsx\n * <VideoDialog\n * trigger={<Button>Watch Video</Button>}\n * cloudflare={{ videoId: \"abc123\", customerCode: \"xyz789\" }}\n * blur=\"high\"\n * overlay=\"vignette\"\n * />\n * ```\n */\nconst VideoDialog = React.forwardRef<HTMLDivElement, VideoDialogProps>(\n\t(\n\t\t{\n\t\t\ttrigger,\n\t\t\tsrc,\n\t\t\tcloudflare,\n\t\t\tblur = \"high\",\n\t\t\toverlay = \"vignette\",\n\t\t\tbackdropOpacity = 0.6,\n\t\t\tshowClose = true,\n\t\t\tclosePosition = \"top-right\",\n\t\t\trounded = \"lg\",\n\t\t\topen: controlledOpen,\n\t\t\tdefaultOpen,\n\t\t\tonOpenChange,\n\t\t\tclassName,\n\t\t\tautoPlay,\n\t\t\t...videoProps\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Internal open state for autoplay control\n\t\tconst [internalOpen, setInternalOpen] = React.useState(\n\t\t\tdefaultOpen ?? false,\n\t\t);\n\t\tconst isControlled = controlledOpen !== undefined;\n\t\tconst open = isControlled ? controlledOpen : internalOpen;\n\n\t\tconst handleOpenChange = React.useCallback(\n\t\t\t(newOpen: boolean) => {\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalOpen(newOpen);\n\t\t\t\t}\n\t\t\t\tonOpenChange?.(newOpen);\n\t\t\t},\n\t\t\t[isControlled, onOpenChange],\n\t\t);\n\n\t\t// Primary video ref for sync\n\t\tconst primaryVideoRef = React.useRef<HTMLVideoElement | null>(null);\n\n\t\treturn (\n\t\t\t<BaseDialog.Root\n\t\t\t\topen={open}\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t>\n\t\t\t\t<BaseDialog.Trigger\n\t\t\t\t\trender={\n\t\t\t\t\t\tReact.isValidElement(trigger)\n\t\t\t\t\t\t\t? (trigger as React.ReactElement<Record<string, unknown>>)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{!React.isValidElement(trigger) ? trigger : undefined}\n\t\t\t\t</BaseDialog.Trigger>\n\t\t\t\t<BaseDialog.Portal>\n\t\t\t\t\t<BaseDialog.Popup\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(videoDialogVariants(), className)}\n\t\t\t\t\t\tdata-component=\"video-dialog\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Blur Video Backdrop - covers entire viewport */}\n\t\t\t\t\t\t<BlurredVideoBackdrop\n\t\t\t\t\t\t\tvideoRef={primaryVideoRef}\n\t\t\t\t\t\t\tblur={blur}\n\t\t\t\t\t\t\toverlay={overlay}\n\t\t\t\t\t\t\topacity={backdropOpacity}\n\t\t\t\t\t\t\textension={120}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Close Button */}\n\t\t\t\t\t\t{showClose && (\n\t\t\t\t\t\t\t<BaseDialog.Close\n\t\t\t\t\t\t\t\tclassName={closeButtonVariants({ position: closePosition })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 20 20\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M4 4L16 16M4 16L16 4\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t\t\t\t</BaseDialog.Close>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Video Container - fills viewport, video centered within */}\n\t\t\t\t\t\t<div className={videoContainerVariants()}>\n\t\t\t\t\t\t\t<VideoPlayer\n\t\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t\tcloudflare={cloudflare}\n\t\t\t\t\t\t\t\tvideoRef={primaryVideoRef}\n\t\t\t\t\t\t\t\trounded={rounded}\n\t\t\t\t\t\t\t\tautoPlay={autoPlay ?? open}\n\t\t\t\t\t\t\t\taspectRatio=\"16/9\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\twidth: \"min(100%, calc((100vh - 64px) * 16 / 9))\",\n\t\t\t\t\t\t\t\t\tmaxHeight: \"calc(100vh - 64px)\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t{...videoProps}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</BaseDialog.Popup>\n\t\t\t\t</BaseDialog.Portal>\n\t\t\t</BaseDialog.Root>\n\t\t);\n\t},\n);\n\nVideoDialog.displayName = \"VideoDialog\";\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n\tVideoDialog,\n\tvideoDialogVariants,\n\tcloseButtonVariants,\n\tvideoContainerVariants,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport {\n\tBlurredVideoBackdrop,\n\ttype BlurredVideoBackdropProps,\n} from \"@/components/atoms/blurred-video-backdrop\";\nimport {\n\tVideoPlayer,\n\ttype VideoPlayerProps,\n} from \"@/components/atoms/video-player\";\nimport { cn } from \"@/lib/utils\";\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface VideoWithBackdropContextValue {\n\t/** Ref to primary video element */\n\tvideoRef: React.RefObject<HTMLVideoElement | null>;\n\t/** Video source URL */\n\tsrc?: string;\n\t/** Cloudflare config */\n\tcloudflare?: CloudflareConfig;\n}\n\nconst VideoWithBackdropContext =\n\tReact.createContext<VideoWithBackdropContextValue | null>(null);\n\nfunction useVideoWithBackdropContext() {\n\tconst context = React.useContext(VideoWithBackdropContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"VideoWithBackdrop compound components must be used within VideoWithBackdrop.Root\",\n\t\t);\n\t}\n\treturn context;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Cloudflare Stream configuration */\ninterface CloudflareConfig {\n\t/** Cloudflare Stream video ID */\n\tvideoId: string;\n\t/** Cloudflare customer code/subdomain */\n\tcustomerCode: string;\n}\n\n// ============================================================================\n// Variant Definitions\n// ============================================================================\n\n/**\n * Root container variants.\n */\nconst videoWithBackdropVariants = tv({\n\tbase: [\"relative\", \"overflow-hidden\", \"bg-black\"],\n\tvariants: {\n\t\t/**\n\t\t * Full-height mode for dialogs.\n\t\t */\n\t\tfullHeight: {\n\t\t\ttrue: \"h-full w-full\",\n\t\t\tfalse: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tfullHeight: false,\n\t},\n});\n\n/**\n * Content container variants.\n */\nconst contentVariants = tv({\n\tbase: [\"relative\", \"z-10\", \"flex\", \"items-center\", \"justify-center\"],\n\tvariants: {\n\t\tfullHeight: {\n\t\t\ttrue: \"h-full w-full\",\n\t\t\tfalse: \"\",\n\t\t},\n\t\tpadding: {\n\t\t\tnone: \"\",\n\t\t\tsm: \"p-16\",\n\t\t\tmd: \"p-24\",\n\t\t\tlg: \"p-48\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tfullHeight: false,\n\t\tpadding: \"md\",\n\t},\n});\n\n// ============================================================================\n// Root Component\n// ============================================================================\n\nexport interface VideoWithBackdropRootProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof videoWithBackdropVariants> {\n\t/** Video source URL (HLS .m3u8 or regular video file) */\n\tsrc?: string;\n\t/** Cloudflare Stream configuration (takes precedence over src) */\n\tcloudflare?: CloudflareConfig;\n\t/** Children to render */\n\tchildren: React.ReactNode;\n}\n\n/**\n * VideoWithBackdrop Root\n *\n * Container that provides video context to child components.\n * Use with VideoWithBackdrop.Backdrop and VideoWithBackdrop.Content.\n *\n * @example\n * ```tsx\n * <VideoWithBackdrop.Root cloudflare={config}>\n * <VideoWithBackdrop.Backdrop blur=\"high\" overlay=\"vignette\" />\n * <VideoWithBackdrop.Content>\n * <VideoWithBackdrop.Video />\n * </VideoWithBackdrop.Content>\n * </VideoWithBackdrop.Root>\n * ```\n */\nconst VideoWithBackdropRoot = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropRootProps\n>(({ className, src, cloudflare, fullHeight, children, ...props }, ref) => {\n\tconst videoRef = React.useRef<HTMLVideoElement | null>(null);\n\n\tconst contextValue = React.useMemo(\n\t\t() => ({ videoRef, src, cloudflare }),\n\t\t[src, cloudflare],\n\t);\n\n\treturn (\n\t\t<VideoWithBackdropContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(videoWithBackdropVariants({ fullHeight }), className)}\n\t\t\t\tdata-full-height={fullHeight ?? false}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</VideoWithBackdropContext.Provider>\n\t);\n});\nVideoWithBackdropRoot.displayName = \"VideoWithBackdropRoot\";\n\n// ============================================================================\n// Backdrop Component\n// ============================================================================\n\nexport interface VideoWithBackdropBackdropProps\n\textends Omit<BlurredVideoBackdropProps, \"videoRef\"> {}\n\n/**\n * VideoWithBackdrop Backdrop\n *\n * Renders the blurred video backdrop layer using canvas.\n * Automatically draws from the video element in context.\n */\nconst VideoWithBackdropBackdrop = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropBackdropProps\n>(({ ...props }, ref) => {\n\tconst { videoRef } = useVideoWithBackdropContext();\n\n\treturn <BlurredVideoBackdrop ref={ref} videoRef={videoRef} {...props} />;\n});\nVideoWithBackdropBackdrop.displayName = \"VideoWithBackdropBackdrop\";\n\n// ============================================================================\n// Content Component\n// ============================================================================\n\nexport interface VideoWithBackdropContentProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof contentVariants> {}\n\n/**\n * VideoWithBackdrop Content\n *\n * Container for the main video player and any additional content.\n * Positioned above the backdrop with z-index.\n */\nconst VideoWithBackdropContent = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropContentProps\n>(({ className, fullHeight, padding, children, ...props }, ref) => {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={cn(contentVariants({ fullHeight, padding }), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\nVideoWithBackdropContent.displayName = \"VideoWithBackdropContent\";\n\n// ============================================================================\n// Video Component (convenience wrapper)\n// ============================================================================\n\nexport interface VideoWithBackdropVideoProps\n\textends Omit<VideoPlayerProps, \"videoRef\"> {\n\t/** Max width of the video player container */\n\tmaxWidth?: string;\n}\n\n/**\n * VideoWithBackdrop Video\n *\n * Convenience wrapper for VideoPlayer that automatically connects\n * to the backdrop via context.\n */\nconst VideoWithBackdropVideo = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropVideoProps\n>(({ className, maxWidth = \"960px\", cloudflare, src, ...props }, ref) => {\n\tconst context = useVideoWithBackdropContext();\n\n\t// Use context values if not explicitly provided\n\tconst videoCloudflare = cloudflare ?? context.cloudflare;\n\tconst videoSrc = src ?? context.src;\n\n\treturn (\n\t\t<div ref={ref} className={cn(\"w-full\", className)} style={{ maxWidth }}>\n\t\t\t<VideoPlayer\n\t\t\t\tcloudflare={videoCloudflare}\n\t\t\t\tsrc={videoSrc}\n\t\t\t\tvideoRef={context.videoRef}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n});\nVideoWithBackdropVideo.displayName = \"VideoWithBackdropVideo\";\n\n// ============================================================================\n// Simple Pre-composed Component\n// ============================================================================\n\nexport interface VideoWithBackdropProps\n\textends Omit<VideoPlayerProps, \"videoRef\" | \"className\" | \"aspectRatio\"> {\n\t/** Blur intensity (default: high) */\n\tblur?: BlurredVideoBackdropProps[\"blur\"];\n\t/** Gradient overlay (default: vignette) */\n\toverlay?: BlurredVideoBackdropProps[\"overlay\"];\n\t/** Backdrop opacity (default: 0.6) */\n\tbackdropOpacity?: number;\n\t/** Max width of video player (default: 960px) */\n\tmaxWidth?: string;\n\t/** Content padding (default: md) */\n\tpadding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n\t/** Video player rounded corners */\n\trounded?: VideoPlayerProps[\"rounded\"];\n\t/** Additional className for root container */\n\tclassName?: string;\n\t/** Target FPS for backdrop canvas (default: 30) */\n\ttargetFps?: number;\n\t/** Canvas scale factor for backdrop (default: 0.5) */\n\tscale?: number;\n}\n\n/**\n * VideoWithBackdrop - Pre-composed video player with blurred backdrop.\n *\n * A simple, ready-to-use component that combines VideoPlayer with\n * BlurredVideoBackdrop for modal video experiences. Uses canvas rendering\n * for optimal performance.\n *\n * For custom layouts, use the compound components:\n * - VideoWithBackdrop.Root\n * - VideoWithBackdrop.Backdrop\n * - VideoWithBackdrop.Content\n * - VideoWithBackdrop.Video\n *\n * @example\n * ```tsx\n * // Simple usage (in a full-height container like Dialog)\n * <VideoWithBackdrop\n * cloudflare={{ videoId: \"...\", customerCode: \"...\" }}\n * autoPlay\n * blur=\"high\"\n * overlay=\"vignette\"\n * />\n *\n * // With Dialog\n * <Dialog size=\"full\" variant=\"minimal\">\n * <VideoWithBackdrop cloudflare={config} autoPlay />\n * </Dialog>\n * ```\n */\nconst VideoWithBackdrop = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropProps\n>(\n\t(\n\t\t{\n\t\t\tsrc,\n\t\t\tcloudflare,\n\t\t\tblur = \"high\",\n\t\t\toverlay = \"vignette\",\n\t\t\tbackdropOpacity = 0.6,\n\t\t\tmaxWidth = \"960px\",\n\t\t\tpadding = \"md\",\n\t\t\trounded = \"lg\",\n\t\t\tclassName,\n\t\t\ttargetFps = 30,\n\t\t\tscale = 0.5,\n\t\t\t...videoProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst videoRef = React.useRef<HTMLVideoElement | null>(null);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tvideoWithBackdropVariants({ fullHeight: true }),\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tdata-component=\"video-with-backdrop\"\n\t\t\t>\n\t\t\t\t<BlurredVideoBackdrop\n\t\t\t\t\tvideoRef={videoRef}\n\t\t\t\t\tblur={blur}\n\t\t\t\t\toverlay={overlay}\n\t\t\t\t\topacity={backdropOpacity}\n\t\t\t\t\ttargetFps={targetFps}\n\t\t\t\t\tscale={scale}\n\t\t\t\t/>\n\t\t\t\t<div className={cn(contentVariants({ fullHeight: true, padding }))}>\n\t\t\t\t\t<div className=\"w-full\" style={{ maxWidth }}>\n\t\t\t\t\t\t<VideoPlayer\n\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\tcloudflare={cloudflare}\n\t\t\t\t\t\t\tvideoRef={videoRef}\n\t\t\t\t\t\t\trounded={rounded}\n\t\t\t\t\t\t\t{...videoProps}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\nVideoWithBackdrop.displayName = \"VideoWithBackdrop\";\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const VideoWithBackdropParts = Object.assign(VideoWithBackdropRoot, {\n\tRoot: VideoWithBackdropRoot,\n\tBackdrop: VideoWithBackdropBackdrop,\n\tContent: VideoWithBackdropContent,\n\tVideo: VideoWithBackdropVideo,\n});\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n\tVideoWithBackdrop,\n\tVideoWithBackdropRoot,\n\tVideoWithBackdropBackdrop,\n\tVideoWithBackdropContent,\n\tVideoWithBackdropVideo,\n\tvideoWithBackdropVariants,\n\tcontentVariants,\n};\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nconst cardVariants = tv({\n\tbase: \"relative flex overflow-hidden rounded-surface-card bg-card-background stroke-surface-card border-border-subtle border-solid\",\n\tvariants: {\n\t\tlayout: {\n\t\t\tvertical: \"w-full flex-col\",\n\t\t\thorizontal: \"w-full flex-row\",\n\t\t\t/**\n\t\t\t * Overlay layout - content sits on top of full-bleed background.\n\t\t\t * Use with Background components for images/gradients.\n\t\t\t */\n\t\t\toverlay: \"w-full flex-col\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tlayout: \"vertical\",\n\t},\n});\n\nexport interface CardProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof cardVariants> {}\n\n/**\n * Card component for displaying content in a contained, scannable format.\n *\n * Layouts:\n * - vertical: Image on top, content below (default)\n * - horizontal: Image on left, content on right\n * - overlay: Full-bleed background with content on top\n *\n * Use with CardImage, CardContent, CardEyebrow, CardTitle, CardDescription, and CardActions.\n * For overlay layout, use Background components for full-bleed backgrounds.\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n\t({ className, layout, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardVariants({ layout, class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCard.displayName = \"Card\";\n\nconst cardImageVariants = tv({\n\tbase: [\n\t\t\"relative shrink-0 bg-bg-muted\",\n\t\t// Vertical: full width with aspect ratio\n\t\t\"aspect-video w-full\",\n\t\t// When in horizontal card (parent has flex-row), override\n\t\t\"[.flex-row>&]:aspect-auto [.flex-row>&]:w-2/5 [.flex-row>&]:self-stretch\",\n\t],\n});\n\nexport interface CardImageProps extends React.HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * The image source URL\n\t */\n\tsrc?: string;\n\t/**\n\t * Alt text for the image\n\t */\n\talt?: string;\n}\n\n/**\n * Card image area. For vertical layout, displays with 16:9 aspect ratio.\n * For horizontal layout, takes up ~40% width and stretches to content height.\n */\nconst CardImage = React.forwardRef<HTMLDivElement, CardImageProps>(\n\t({ className, src, alt = \"\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardImageVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{src && (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\tclassName=\"absolute inset-0 size-full object-cover\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\nCardImage.displayName = \"CardImage\";\n\nconst cardContentVariants = tv({\n\tbase: \"flex w-full flex-1 flex-col gap-spatial-card-large-gap p-spatial-card-large-padding\",\n\tvariants: {\n\t\t/**\n\t\t * Vertical alignment of content within the card.\n\t\t * Useful for overlay layouts to position content at top/center/bottom.\n\t\t */\n\t\tjustify: {\n\t\t\tstart: \"justify-start\",\n\t\t\tcenter: \"justify-center\",\n\t\t\tend: \"justify-end\",\n\t\t},\n\t},\n});\n\nexport interface CardContentProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof cardContentVariants> {}\n\n/**\n * Card content container with proper padding and spacing.\n * Uses spatial card tokens for consistent sizing.\n * For overlay layout, add `relative z-10` to ensure content sits above background.\n *\n * @example\n * ```tsx\n * // Content at bottom of overlay card\n * <Card layout=\"overlay\">\n * <Background.Image src=\"/hero.jpg\" />\n * <CardContent justify=\"end\" className=\"relative z-10\">\n * <CardTitle>Title</CardTitle>\n * </CardContent>\n * </Card>\n * ```\n */\nconst CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n\t({ className, justify, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardContentVariants({ justify, class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardContent.displayName = \"CardContent\";\n\nconst cardEyebrowVariants = tv({\n\tbase: \"typography-overline text-text-muted uppercase tracking-wider\",\n});\n\nexport interface CardEyebrowProps\n\textends React.HTMLAttributes<HTMLParagraphElement> {}\n\n/**\n * Optional eyebrow text above the card title.\n */\nconst CardEyebrow = React.forwardRef<HTMLParagraphElement, CardEyebrowProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<p\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardEyebrowVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardEyebrow.displayName = \"CardEyebrow\";\n\nconst cardTitleVariants = tv({\n\tbase: \"typography-h5 text-text-primary\",\n});\n\nexport interface CardTitleProps\n\textends React.HTMLAttributes<HTMLHeadingElement> {\n\t/**\n\t * The heading level to render (h1-h6). Defaults to h3.\n\t */\n\tas?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n}\n\n/**\n * Card title/heading. Use the `as` prop to change the heading level.\n */\nconst CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n\t({ className, as: Component = \"h3\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<Component\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardTitleVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst cardDescriptionVariants = tv({\n\tbase: \"typography-body-small text-text-secondary\",\n});\n\nexport interface CardDescriptionProps\n\textends React.HTMLAttributes<HTMLParagraphElement> {}\n\n/**\n * Card body/description text.\n */\nconst CardDescription = React.forwardRef<\n\tHTMLParagraphElement,\n\tCardDescriptionProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<p\n\t\t\tref={ref}\n\t\t\tclassName={cardDescriptionVariants({ class: className })}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nCardDescription.displayName = \"CardDescription\";\n\nconst cardBodyVariants = tv({\n\tbase: \"flex w-full flex-col gap-spatial-card-small-gap\",\n});\n\nexport interface CardBodyProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for card text content (eyebrow, title, description).\n * Uses spatial card tokens for consistent sizing.\n */\nconst CardBody = React.forwardRef<HTMLDivElement, CardBodyProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardBodyVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardBody.displayName = \"CardBody\";\n\nconst cardActionsVariants = tv({\n\tbase: \"flex gap-12\",\n});\n\nexport interface CardActionsProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for card action buttons.\n * Uses primitive spacing tokens.\n */\nconst CardActions = React.forwardRef<HTMLDivElement, CardActionsProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardActionsVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardActions.displayName = \"CardActions\";\n\nexport {\n\tCard,\n\tcardVariants,\n\tCardImage,\n\tcardImageVariants,\n\tCardContent,\n\tcardContentVariants,\n\tCardEyebrow,\n\tcardEyebrowVariants,\n\tCardTitle,\n\tcardTitleVariants,\n\tCardDescription,\n\tcardDescriptionVariants,\n\tCardBody,\n\tcardBodyVariants,\n\tCardActions,\n\tcardActionsVariants,\n};\n","\"use client\";\n\nimport { Dialog } from \"@base-ui-components/react/dialog\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n// Context for mobile menu state\nconst NavbarContext = React.createContext<{\n\tisMobileMenuOpen: boolean;\n\tsetIsMobileMenuOpen: (open: boolean) => void;\n}>({\n\tisMobileMenuOpen: false,\n\tsetIsMobileMenuOpen: () => {},\n});\n\nexport interface NavbarProps extends React.HTMLAttributes<HTMLElement> {}\n\n/**\n * Main navigation bar container.\n * Provides responsive layout for brand, links, and actions.\n */\nconst Navbar = React.forwardRef<HTMLElement, NavbarProps>(\n\t({ className, children, ...props }, ref) => {\n\t\tconst [isMobileMenuOpen, setIsMobileMenuOpen] = React.useState(false);\n\t\tconst navRef = React.useRef<HTMLElement>(null);\n\n\t\t// Set navbar height CSS variable for mobile menu positioning\n\t\tReact.useEffect(() => {\n\t\t\tconst updateHeight = () => {\n\t\t\t\tif (navRef.current) {\n\t\t\t\t\tconst height = navRef.current.offsetHeight;\n\t\t\t\t\tdocument.documentElement.style.setProperty(\n\t\t\t\t\t\t\"--navbar-height\",\n\t\t\t\t\t\t`${height}px`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tupdateHeight();\n\t\t\twindow.addEventListener(\"resize\", updateHeight);\n\t\t\treturn () => window.removeEventListener(\"resize\", updateHeight);\n\t\t}, []);\n\n\t\t// Merge refs\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLElement | null) => {\n\t\t\t\t(navRef as React.MutableRefObject<HTMLElement | null>).current = node;\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref) {\n\t\t\t\t\tref.current = node;\n\t\t\t\t}\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\n\t\treturn (\n\t\t\t<NavbarContext.Provider value={{ isMobileMenuOpen, setIsMobileMenuOpen }}>\n\t\t\t\t<nav\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\tclassName={cn(\"relative z-50 w-full bg-gray-50\", className)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex w-full items-center justify-between\",\n\t\t\t\t\t\t\t// Mobile\n\t\t\t\t\t\t\t\"px-spatial-component-navbar-padding-x-mobile py-spatial-component-navbar-padding-y-mobile\",\n\t\t\t\t\t\t\t// Tablet\n\t\t\t\t\t\t\t\"md:px-spatial-component-navbar-padding-x-tablet md:py-spatial-component-navbar-padding-y-tablet\",\n\t\t\t\t\t\t\t// Desktop\n\t\t\t\t\t\t\t\"xl:px-spatial-component-navbar-padding-x-desktop xl:py-spatial-component-navbar-padding-y-desktop\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</nav>\n\t\t\t</NavbarContext.Provider>\n\t\t);\n\t},\n);\nNavbar.displayName = \"Navbar\";\n\nexport interface NavbarBrandProps extends React.HTMLAttributes<HTMLDivElement> {\n\tasChild?: boolean;\n}\n\n/**\n * Brand/logo area of the navbar.\n * Use asChild to render as a link.\n */\nconst NavbarBrand = React.forwardRef<HTMLDivElement, NavbarBrandProps>(\n\t({ className, asChild = false, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"div\";\n\t\treturn <Comp ref={ref} className={cn(\"shrink-0\", className)} {...props} />;\n\t},\n);\nNavbarBrand.displayName = \"NavbarBrand\";\n\nexport interface NavbarLinksProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for navigation links.\n * Centers links on desktop, hidden on mobile (use NavbarMobileMenu instead).\n */\nconst NavbarLinks = React.forwardRef<HTMLDivElement, NavbarLinksProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"hidden items-center gap-spatial-component-navbar-gap-links md:flex\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nNavbarLinks.displayName = \"NavbarLinks\";\n\nexport interface NavbarLinkProps\n\textends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n\tasChild?: boolean;\n\tactive?: boolean;\n}\n\n/**\n * Individual navigation link.\n * Use asChild to render with a router Link component.\n */\nconst NavbarLink = React.forwardRef<HTMLAnchorElement, NavbarLinkProps>(\n\t({ className, asChild = false, active, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"a\";\n\t\treturn (\n\t\t\t<Comp\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"typography-body-small font-medium text-gray-900 transition-colors hover:text-gray-700\",\n\t\t\t\t\tactive && \"text-gray-1100\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nNavbarLink.displayName = \"NavbarLink\";\n\nexport interface NavbarActionsProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for navbar action items (search, menu button, etc).\n */\nconst NavbarActions = React.forwardRef<HTMLDivElement, NavbarActionsProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-spatial-component-navbar-gap-actions\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nNavbarActions.displayName = \"NavbarActions\";\n\nexport interface NavbarMobileMenuProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Mobile menu container that displays navigation links on mobile devices.\n * Hidden on desktop (md and above). Should be used with NavbarMobileMenuButton.\n * Built on Base UI Dialog for accessibility (focus trap, escape key, click-outside).\n */\nconst NavbarMobileMenu = React.forwardRef<\n\tHTMLDivElement,\n\tNavbarMobileMenuProps\n>(({ className, children, ...props }, ref) => {\n\tconst { isMobileMenuOpen, setIsMobileMenuOpen } =\n\t\tReact.useContext(NavbarContext);\n\n\treturn (\n\t\t<Dialog.Root open={isMobileMenuOpen} onOpenChange={setIsMobileMenuOpen}>\n\t\t\t<Dialog.Portal>\n\t\t\t\t<Dialog.Popup\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"fixed inset-0 z-50 bg-gray-50 md:hidden\",\n\t\t\t\t\t\t// Position below navbar\n\t\t\t\t\t\t\"pt-[calc(var(--navbar-height,60px)+1px)]\",\n\t\t\t\t\t\t// Smooth transition\n\t\t\t\t\t\t\"transition-opacity duration-200\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<Dialog.Title className=\"sr-only\">Navigation menu</Dialog.Title>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\t\t\t// Padding matching navbar\n\t\t\t\t\t\t\t\"px-spatial-component-navbar-padding-x-mobile py-spatial-component-navbar-padding-y-tablet\",\n\t\t\t\t\t\t\t// Gap between links\n\t\t\t\t\t\t\t\"gap-spatial-component-navbar-gap-mobile-menu\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</Dialog.Popup>\n\t\t\t</Dialog.Portal>\n\t\t</Dialog.Root>\n\t);\n});\nNavbarMobileMenu.displayName = \"NavbarMobileMenu\";\n\nexport interface NavbarMobileMenuButtonProps\n\textends React.ButtonHTMLAttributes<HTMLButtonElement> {\n\tasChild?: boolean;\n}\n\n/**\n * Button to toggle the mobile menu.\n * Should be placed in NavbarActions on mobile.\n * Use asChild to render as a custom button component (e.g., IconButton).\n */\nconst NavbarMobileMenuButton = React.forwardRef<\n\tHTMLButtonElement,\n\tNavbarMobileMenuButtonProps\n>(({ className, asChild = false, children, ...props }, ref) => {\n\tconst { isMobileMenuOpen, setIsMobileMenuOpen } =\n\t\tReact.useContext(NavbarContext);\n\n\tconst handleClick = () => {\n\t\tsetIsMobileMenuOpen(!isMobileMenuOpen);\n\t};\n\n\tif (asChild) {\n\t\treturn (\n\t\t\t<Slot\n\t\t\t\tref={ref}\n\t\t\t\taria-label=\"Toggle navigation menu\"\n\t\t\t\taria-expanded={isMobileMenuOpen}\n\t\t\t\taria-controls=\"navbar-mobile-menu\"\n\t\t\t\tonClick={handleClick}\n\t\t\t\tclassName={className}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Slot>\n\t\t);\n\t}\n\n\treturn (\n\t\t<button\n\t\t\tref={ref}\n\t\t\ttype=\"button\"\n\t\t\taria-label=\"Toggle navigation menu\"\n\t\t\taria-expanded={isMobileMenuOpen}\n\t\t\taria-controls=\"navbar-mobile-menu\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\"transition-colors\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n});\nNavbarMobileMenuButton.displayName = \"NavbarMobileMenuButton\";\n\nexport interface NavbarMobileMenuLinkProps\n\textends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n\tasChild?: boolean;\n\tactive?: boolean;\n}\n\n/**\n * Navigation link for the mobile menu.\n * Automatically closes the mobile menu when clicked.\n * Use asChild to render with a router Link component.\n */\nconst NavbarMobileMenuLink = React.forwardRef<\n\tHTMLAnchorElement,\n\tNavbarMobileMenuLinkProps\n>(({ className, asChild = false, active, onClick, ...props }, ref) => {\n\tconst { setIsMobileMenuOpen } = React.useContext(NavbarContext);\n\tconst Comp = asChild ? Slot : \"a\";\n\n\tconst handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n\t\tsetIsMobileMenuOpen(false);\n\t\tonClick?.(event);\n\t};\n\n\treturn (\n\t\t<Comp\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t\"typography-body-medium font-medium text-gray-900 transition-colors hover:text-gray-700\",\n\t\t\t\t\"py-spatial-component-navbar-padding-y-mobile\",\n\t\t\t\tactive && \"text-gray-1100\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonClick={handleClick}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nNavbarMobileMenuLink.displayName = \"NavbarMobileMenuLink\";\n\nexport {\n\tNavbar,\n\tNavbarBrand,\n\tNavbarLinks,\n\tNavbarLink,\n\tNavbarActions,\n\tNavbarMobileMenu,\n\tNavbarMobileMenuButton,\n\tNavbarMobileMenuLink,\n};\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nconst usGovBannerVariants = tv({\n\tslots: {\n\t\troot: \"flex w-full items-center justify-center py-12\",\n\t\tcontent: \"flex items-center gap-8\",\n\t\ttext: \"text-[11px] leading-[13px] tracking-[0.17px]\",\n\t},\n\tvariants: {\n\t\tvariant: {\n\t\t\tdefault: {\n\t\t\t\troot: \"bg-gray-50\",\n\t\t\t\tcontent: \"opacity-70\",\n\t\t\t\ttext: \"text-gray-900\",\n\t\t\t},\n\t\t\tinverted: {\n\t\t\t\troot: \"bg-transparent\",\n\t\t\t\tcontent: \"opacity-70\",\n\t\t\t\ttext: \"text-text-inverted\",\n\t\t\t},\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t},\n});\n\nexport interface USGovBannerProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof usGovBannerVariants> {\n\t/**\n\t * Custom flag icon element. Defaults to a US flag SVG.\n\t */\n\tflagIcon?: React.ReactNode;\n\t/**\n\t * Banner text content\n\t * @default \"An official website of the United States government\"\n\t */\n\ttext?: string;\n}\n\n/**\n * US Government official website banner.\n * Displays the official government website notice with flag icon.\n * Commonly placed at the very top of government websites.\n *\n * Variants:\n * - default: Light background with dark text (for light pages)\n * - inverted: Transparent background with white text/flag (for dark backgrounds/heroes)\n *\n * @example\n * ```tsx\n * // Default (light)\n * <USGovBanner />\n *\n * // Inverted (for dark backgrounds)\n * <USGovBanner variant=\"inverted\" />\n * ```\n */\nconst USGovBanner = React.forwardRef<HTMLDivElement, USGovBannerProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant,\n\t\t\tflagIcon,\n\t\t\ttext = \"An official website of the United States government\",\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst styles = usGovBannerVariants({ variant });\n\t\tconst isInverted = variant === \"inverted\";\n\n\t\treturn (\n\t\t\t<div ref={ref} className={styles.root({ class: className })} {...props}>\n\t\t\t\t<div className={styles.content()}>\n\t\t\t\t\t{flagIcon ?? (isInverted ? <WhiteUSFlag /> : <DefaultUSFlag />)}\n\t\t\t\t\t<p className={styles.text()}>{text}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\nUSGovBanner.displayName = \"USGovBanner\";\n\nfunction DefaultUSFlag() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"16\"\n\t\t\theight=\"12\"\n\t\t\tviewBox=\"0 0 16 12\"\n\t\t\tfill=\"none\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M0 0H16V12H0V0Z\" fill=\"#212121\" fillOpacity=\"0.1\" />\n\t\t\t<path\n\t\t\t\td=\"M0 0H16V0.923077H0V0ZM0 1.84615H16V2.76923H0V1.84615ZM0 3.69231H16V4.61538H0V3.69231ZM0 5.53846H16V6.46154H0V5.53846ZM0 7.38462H16V8.30769H0V7.38462ZM0 9.23077H16V10.1538H0V9.23077ZM0 11.0769H16V12H0V11.0769Z\"\n\t\t\t\tfill=\"#BF0A30\"\n\t\t\t\tfillOpacity=\"0.8\"\n\t\t\t/>\n\t\t\t<path d=\"M0 0H8V6.46154H0V0Z\" fill=\"#002868\" fillOpacity=\"0.8\" />\n\t\t</svg>\n\t);\n}\n\nfunction WhiteUSFlag() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"16\"\n\t\t\theight=\"12\"\n\t\t\tviewBox=\"0 0 16 12\"\n\t\t\tfill=\"none\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M0 0H16V12H0V0Z\" fill=\"white\" fillOpacity=\"0.1\" />\n\t\t\t<path\n\t\t\t\td=\"M0 0H16V0.923077H0V0ZM0 1.84615H16V2.76923H0V1.84615ZM0 3.69231H16V4.61538H0V3.69231ZM0 5.53846H16V6.46154H0V5.53846ZM0 7.38462H16V8.30769H0V7.38462ZM0 9.23077H16V10.1538H0V9.23077ZM0 11.0769H16V12H0V11.0769Z\"\n\t\t\t\tfill=\"white\"\n\t\t\t\tfillOpacity=\"0.8\"\n\t\t\t/>\n\t\t\t<path d=\"M0 0H8V6.46154H0V0Z\" fill=\"white\" fillOpacity=\"0.6\" />\n\t\t</svg>\n\t);\n}\n\nexport { USGovBanner, usGovBannerVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Banner component based on Figma BaseKit / Banners\n *\n * Used to surface short, important updates or a single key action\n * without disrupting the main page content.\n *\n * Responsive behavior using 24-column grid:\n * - Mobile (sm): Stacked layout, 20px horizontal / 32px vertical padding\n * - Tablet (md): Horizontal layout, 56px padding\n * - Desktop (lg): Horizontal layout, 72px padding\n *\n * Must be placed inside a `grid-container`. Uses `col-full` to span all columns.\n */\nconst bannerVariants = tv({\n\tbase: [\n\t\t// Grid alignment - full width\n\t\t\"col-full\",\n\t\t// Responsive padding: mobile -> tablet -> desktop\n\t\t// Uses primitive spacing tokens\n\t\t\"px-20 py-32\",\n\t\t\"md:p-56\",\n\t\t\"lg:px-72 lg:pb-72 lg:pt-0\",\n\t],\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tlight: \"bg-gray-50\",\n\t\t\tdark: \"bg-gray-1200\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\nexport interface BannerProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof bannerVariants> {\n\t/**\n\t * The heading text displayed in the banner\n\t */\n\theading: string;\n\t/**\n\t * The description text displayed below the heading\n\t */\n\tdescription: string;\n\t/**\n\t * Optional action element (typically a Button component)\n\t */\n\taction?: React.ReactNode;\n}\n\n/**\n * Banner component for surfacing important updates or CTAs.\n *\n * Uses the 24-column grid system - must be placed inside a `grid-container`.\n * Spans full width with `col-full`.\n *\n * Responsive across breakpoints:\n * - Mobile: Stacked layout with smaller padding\n * - Tablet: Horizontal layout with medium padding\n * - Desktop: Horizontal layout with larger padding\n *\n * @example\n * ```tsx\n * <div className=\"grid-container\">\n * <Banner\n * heading=\"Important Update\"\n * description=\"Check out our new features.\"\n * action={<Button>Learn More</Button>}\n * />\n * </div>\n *\n * // Dark colorScheme\n * <Banner\n * colorScheme=\"dark\"\n * heading=\"Still Have Questions?\"\n * description=\"Contact us at support@example.com\"\n * action={<Button variant=\"secondary\">Email Us</Button>}\n * />\n * ```\n */\nconst Banner = React.forwardRef<HTMLElement, BannerProps>(\n\t({ className, colorScheme, heading, description, action, ...props }, ref) => {\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={bannerVariants({ colorScheme, class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Inner container with border-top for dark colorScheme */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t// Uses primitive spacing tokens\n\t\t\t\t\t\t\"flex flex-col md:flex-row gap-20 items-start md:items-center md:justify-between\",\n\t\t\t\t\t\tcolorScheme === \"dark\" && \"border-t border-gray-700 py-36\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Copy section */}\n\t\t\t\t\t<div className=\"flex flex-col gap-6 items-start\">\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"typography-subheading-small\",\n\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{heading}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"typography-body-small\",\n\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-500\" : \"text-gray-800\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t{/* Action slot */}\n\t\t\t\t\t{action}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nBanner.displayName = \"Banner\";\n\nexport { Banner, bannerVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * CardGrid component for displaying cards in a responsive grid layout\n *\n * Variants:\n * - A: 3 columns on desktop, 2 on tablet, 1 on mobile\n * - B: 2 columns on desktop/tablet, 1 on mobile\n *\n * Uses the 24-column grid system with grid-container as root.\n */\nconst cardGridVariants = tv({\n\t// Base styles - grid-container for proper grid context - uses primitive spacing tokens\n\tbase: [\n\t\t\"grid-container\",\n\t\t// Small (mobile): 72px y padding\n\t\t\"py-72\",\n\t\t// Large (desktop): 128px y padding\n\t\t\"lg:py-128\",\n\t],\n\tvariants: {\n\t\tvariant: {\n\t\t\tA: \"\",\n\t\t\tB: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"A\",\n\t},\n});\n\nexport interface CardGridProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof cardGridVariants> {\n\t/**\n\t * The title text displayed above the cards\n\t */\n\ttitle: string;\n\t/**\n\t * The card elements to display in the grid\n\t */\n\tcards: React.ReactNode[];\n}\n\n/**\n * CardGrid component for displaying cards in a responsive grid layout.\n *\n * Uses the 24-column grid system with grid-container as root.\n *\n * Layout (Variant A):\n * - Mobile (sm): Single column, py-72\n * - Tablet (md): 2 columns, gap-56 between title and cards, gap-y-20 between cards\n * - Desktop (lg+): 3 columns, py-128, gap-64 between title and cards, gap-y-20 between cards\n *\n * Layout (Variant B):\n * - Mobile (sm): Single column, py-72\n * - Tablet (md): 2 columns, gap-56 between title and cards, gap-y-20 between cards\n * - Desktop (lg+): 2 columns, py-128, gap-64 between title and cards, gap-y-20 between cards\n *\n * @example\n * ```tsx\n * <CardGrid\n * variant=\"A\"\n * title=\"Featured Cards\"\n * cards={[\n * <Card key=\"1\">...</Card>,\n * <Card key=\"2\">...</Card>,\n * ]}\n * />\n * ```\n */\nconst CardGrid = React.forwardRef<HTMLElement, CardGridProps>(\n\t({ className, variant, title, cards, ...props }, ref) => {\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardGridVariants({ variant, class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Title - col-full within grid - uses primitive spacing tokens */}\n\t\t\t\t<h2\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"col-full\",\n\t\t\t\t\t\t\"typography-h4 text-gray-900\",\n\t\t\t\t\t\t// Gap after title: mobile default, md: 56px, lg: 64px\n\t\t\t\t\t\t\"mb-36 md:mb-56 lg:mb-64\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</h2>\n\n\t\t\t\t{/* Inner grid for cards - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"col-full\",\n\t\t\t\t\t\t// Mobile: single column\n\t\t\t\t\t\t\"grid grid-cols-1 gap-20\",\n\t\t\t\t\t\t// Tablet: 2 columns\n\t\t\t\t\t\t\"md:grid-cols-2\",\n\t\t\t\t\t\t// Desktop: 3 columns for variant A, 2 columns for variant B\n\t\t\t\t\t\tvariant === \"A\" && \"lg:grid-cols-3\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{React.Children.toArray(cards).map((card) => (\n\t\t\t\t\t\t<div key={(card as React.ReactElement).key}>{card}</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nCardGrid.displayName = \"CardGrid\";\n\nexport { CardGrid, cardGridVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * TwoColumnSection component for text-heavy content sections\n *\n * Layout:\n * - Desktop (lg+): Title left, content right with border-top divider\n * - Mobile/Tablet: Stacked vertically\n *\n * Uses the 24-column grid system.\n */\nconst twoColumnSectionVariants = tv({\n\t// Base styles - responsive padding using primitive spacing tokens\n\tbase: [\n\t\t\"w-full\",\n\t\t// Small (mobile): 20px x, 56px top, 20px bottom\n\t\t\"px-20 pt-56 pb-20\",\n\t\t// Medium (tablet): 56px x, 56px y\n\t\t\"md:px-56 md:py-56\",\n\t\t// Large (desktop): 72px x, 72px top, 112px bottom\n\t\t\"lg:px-72 lg:pt-72 lg:pb-112\",\n\t],\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"bg-gray-1200\",\n\t\t\tlight: \"bg-white\",\n\t\t},\n\t\tlayout: {\n\t\t\tasymmetric: \"\",\n\t\t\tequal: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"dark\",\n\t\tlayout: \"asymmetric\",\n\t},\n});\n\nexport interface TwoColumnSectionProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof twoColumnSectionVariants> {\n\t/**\n\t * The title text displayed in the left column\n\t */\n\ttitle: string;\n\t/**\n\t * Lead content - prominently styled (brighter text)\n\t * Can be a string or ReactNode for rich content\n\t */\n\tlead?: React.ReactNode;\n\t/**\n\t * Body content - secondary styled (muted text)\n\t * Can be a string or ReactNode for rich content\n\t */\n\tchildren: React.ReactNode;\n\t/**\n\t * Layout style for the columns\n\t * - \"asymmetric\" (default): Uses 24-column grid with ~40/60 split (title: 9, content: 15)\n\t * - \"equal\": Simple 2-column equal-width layout at md+ breakpoints\n\t */\n\tlayout?: \"asymmetric\" | \"equal\";\n}\n\n/**\n * TwoColumnSection component for text-heavy content with title/content split.\n *\n * Layout:\n * - Mobile/Tablet: Stacked (title above content)\n * - Desktop (lg+): Title left (~40%), Content right (~60%)\n *\n * @example\n * ```tsx\n * <TwoColumnSection\n * title=\"US Tech Force\"\n * lead=\"The US Tech Force is recruiting an elite corps of engineers...\"\n * variant=\"dark\"\n * >\n * <p>Through a two-year program, participants will work...</p>\n * <p>Upon completing the program, engineers can seek...</p>\n * </TwoColumnSection>\n * ```\n */\nconst TwoColumnSection = React.forwardRef<HTMLElement, TwoColumnSectionProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tcolorScheme = \"dark\",\n\t\t\tlayout,\n\t\t\ttitle,\n\t\t\tlead,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={twoColumnSectionVariants({\n\t\t\t\t\tcolorScheme,\n\t\t\t\t\tlayout,\n\t\t\t\t\tclass: className,\n\t\t\t\t})}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Inner container with border-top - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"border-t pt-36\",\n\t\t\t\t\t\tcolorScheme === \"dark\" ? \"border-gray-700\" : \"border-gray-300\",\n\t\t\t\t\t\t// Grid layout - uses primitive spacing tokens\n\t\t\t\t\t\t\"grid grid-cols-1 gap-56\",\n\t\t\t\t\t\tlayout === \"equal\" ? \"md:grid-cols-2\" : \"lg:grid-cols-24 lg:gap-56\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Title column */}\n\t\t\t\t\t<h2\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"typography-subheading-medium\",\n\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t// Column span based on layout\n\t\t\t\t\t\t\tlayout !== \"equal\" && \"lg:col-span-9\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\n\t\t\t\t\t{/* Content column - uses primitive spacing tokens */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex flex-col gap-56\",\n\t\t\t\t\t\t\tlayout !== \"equal\" && \"lg:col-span-15\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Lead content - brighter/prominent */}\n\t\t\t\t\t\t{lead && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"typography-body-large\",\n\t\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{typeof lead === \"string\" ? <p>{lead}</p> : lead}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Body content - muted */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"typography-body-medium flex flex-col gap-[1em]\",\n\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-400\" : \"text-gray-600\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nTwoColumnSection.displayName = \"TwoColumnSection\";\n\nexport { TwoColumnSection, twoColumnSectionVariants };\n","import * as React from \"react\";\nimport type { VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\nimport { TwoColumnSection } from \"../two-column-section\";\nimport type { twoColumnSectionVariants } from \"../two-column-section/two-column-section\";\n\nexport interface FaqSectionProps\n\textends Omit<React.HTMLAttributes<HTMLElement>, \"title\">,\n\t\tVariantProps<typeof twoColumnSectionVariants> {\n\t/**\n\t * The title text displayed in the left column\n\t * @default \"Frequently Asked Questions\"\n\t */\n\ttitle?: string;\n\t/**\n\t * The FAQ content - typically an Accordion with AccordionItems\n\t */\n\tchildren: React.ReactNode;\n}\n\n/**\n * FaqSection component for displaying FAQ content in a two-column layout.\n *\n * Wraps TwoColumnSection with FAQ-specific defaults and typography.\n *\n * Layout:\n * - Mobile/Tablet: Stacked (title above content)\n * - Desktop (lg+): Title left (~40%), FAQ content right (~60%)\n *\n * @example\n * ```tsx\n * <FaqSection>\n * <Accordion defaultExpanded=\"faq-1\">\n * <AccordionItem id=\"faq-1\" title=\"What is the US Tech Force?\">\n * Tech Force will be an elite group of technology specialists...\n * </AccordionItem>\n * <AccordionItem id=\"faq-2\" title=\"What skills are required?\">\n * We're looking for expertise in software engineering...\n * </AccordionItem>\n * </Accordion>\n * </FaqSection>\n *\n * // With custom title\n * <FaqSection title=\"Common Questions\" colorScheme=\"light\">\n * ...\n * </FaqSection>\n * ```\n */\nconst FaqSection = React.forwardRef<HTMLElement, FaqSectionProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tcolorScheme = \"light\",\n\t\t\ttitle = \"Frequently Asked Questions\",\n\t\t\tchildren,\n\t\t\tlayout,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\treturn (\n\t\t\t<TwoColumnSection\n\t\t\t\tref={ref}\n\t\t\t\tcolorScheme={colorScheme}\n\t\t\t\tlayout={layout ?? undefined}\n\t\t\t\ttitle={title}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Override title typography to be larger\n\t\t\t\t\t\"[&_h2]:typography-h4\",\n\t\t\t\t\t// Accordion typography overrides\n\t\t\t\t\t\"[&_button]:typography-body-large [&_button]:md:typography-h5\",\n\t\t\t\t\t\"[&_[data-accordion-panel]]:typography-body-medium [&_[data-accordion-panel]]:md:typography-body-large\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</TwoColumnSection>\n\t\t);\n\t},\n);\nFaqSection.displayName = \"FaqSection\";\n\nexport { FaqSection };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { BackgroundOverlay } from \"@/components/atoms/background\";\nimport { type ComponentTheme, themeToStyleVars } from \"@/lib/theme\";\n\n// Re-export Background components for convenience as HeroBackground\nexport {\n\tBackground as HeroBackground,\n\tBackgroundGradient as HeroGradient,\n\ttype BackgroundGradientProps as HeroGradientProps,\n\tBackgroundImage as HeroBackgroundImage,\n\ttype BackgroundImageProps as HeroBackgroundImageProps,\n\tBackgroundOverlay as HeroOverlay,\n\ttype BackgroundOverlayProps as HeroOverlayProps,\n\tBackgroundStream as HeroBackgroundStream,\n\ttype BackgroundStreamProps as HeroBackgroundStreamProps,\n\tBackgroundVideo as HeroBackgroundVideo,\n\ttype BackgroundVideoProps as HeroBackgroundVideoProps,\n} from \"@/components/atoms/background\";\n\nconst DEFAULT_TITLE_TYPOGRAPHY = \"typography-h1-display\";\n\nconst heroVariants = tv({\n\tslots: {\n\t\troot: \"relative flex w-full flex-col overflow-hidden\",\n\t\ttop: \"relative z-10 w-full\",\n\t\tcontent: [\n\t\t\t\"relative z-10 mx-auto flex w-full max-w-screen-xl flex-1 flex-col\",\n\t\t\t\"p-20\",\n\t\t\t\"md:p-56\",\n\t\t],\n\t\ttitle: DEFAULT_TITLE_TYPOGRAPHY,\n\t},\n\tvariants: {\n\t\tvariant: {\n\t\t\tA1: {\n\t\t\t\troot: \"min-h-[80vh]\",\n\t\t\t\tcontent: [\"justify-end\", \"lg:p-72\"],\n\t\t\t},\n\t\t\tA2: {\n\t\t\t\troot: \"min-h-[80vh]\",\n\t\t\t\tcontent: [\"justify-start\", \"lg:p-64\"],\n\t\t\t},\n\t\t\tA3: {\n\t\t\t\troot: \"min-h-[80vh]\",\n\t\t\t\tcontent: [\"items-center justify-center\", \"lg:p-64\"],\n\t\t\t},\n\t\t},\n\t\tcolorScheme: {\n\t\t\tdark: {\n\t\t\t\troot: \"bg-bg-page\",\n\t\t\t\ttitle: \"text-text-primary\",\n\t\t\t},\n\t\t\tlight: {\n\t\t\t\troot: \"bg-gray-900\",\n\t\t\t\ttitle: \"text-text-inverted\",\n\t\t\t},\n\t\t},\n\t\thasBackground: {\n\t\t\ttrue: {\n\t\t\t\troot: \"bg-transparent\",\n\t\t\t},\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"A1\",\n\t\tcolorScheme: \"dark\",\n\t},\n});\n\n// =============================================================================\n// Standalone variants for sub-components (for external use)\n// =============================================================================\n\nconst heroHeaderVariants = tv({\n\tbase: \"relative z-10 w-full\",\n});\n\nconst heroContentVariants = tv({\n\tbase: [\n\t\t\"relative z-10 mx-auto flex w-full max-w-screen-xl flex-1 flex-col\",\n\t\t\"p-20\",\n\t\t\"md:p-56\",\n\t\t\"lg:p-72\",\n\t],\n});\n\nexport interface HeroHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Header slot for Hero - used for navigation, gov banners, etc.\n * Full-width with no padding, sits at the top of the hero.\n */\nconst HeroHeader = React.forwardRef<HTMLDivElement, HeroHeaderProps>(\n\t({ className, ...props }, ref) => (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={heroHeaderVariants({ class: className })}\n\t\t\t{...props}\n\t\t/>\n\t),\n);\nHeroHeader.displayName = \"Hero.Header\";\n\nexport interface HeroContentProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Content container for Hero - use for main content.\n * Has padding and sits above backgrounds with z-10.\n */\nconst HeroContent = React.forwardRef<HTMLDivElement, HeroContentProps>(\n\t({ className, ...props }, ref) => (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={heroContentVariants({ class: className })}\n\t\t\t{...props}\n\t\t/>\n\t),\n);\nHeroContent.displayName = \"Hero.Content\";\n\n// =============================================================================\n// Hero Component\n// =============================================================================\n\nexport interface HeroProps\n\textends Omit<React.HTMLAttributes<HTMLElement>, \"title\">,\n\t\tVariantProps<typeof heroVariants> {\n\t/**\n\t * The title text displayed in the hero.\n\t * If provided, renders an h1 with default typography.\n\t * Omit to use children for custom content composition.\n\t */\n\ttitle?: string;\n\t/**\n\t * Custom typography class for the title using primitive tokens.\n\t * Default: \"typography-h1-display\"\n\t */\n\ttitleClassName?: string;\n\t/**\n\t * Color scheme for text content.\n\t * - dark: Dark text for use on light backgrounds (default)\n\t * - light: Light text for use on dark backgrounds\n\t */\n\tcolorScheme?: \"dark\" | \"light\";\n\t/**\n\t * Content for the top slot (full-width, no padding).\n\t * Use for USGovBanner, Navigation, etc.\n\t */\n\ttop?: React.ReactNode;\n\t/**\n\t * Background for the hero. Can be:\n\t * - A color string (hex, rgb, etc.) for solid backgrounds\n\t * - A ReactNode (use HeroBackground.Image, HeroBackground.Video, or HeroBackground.Stream)\n\t */\n\tbackground?: React.ReactNode | string;\n\t/**\n\t * Opacity of the overlay (0-1, default: 0)\n\t * Only applies when using a background slot\n\t */\n\toverlayOpacity?: number;\n\t/**\n\t * Color of the overlay (default: \"black\")\n\t */\n\toverlayColor?: string;\n\t/**\n\t * Border radius for the hero container\n\t * Useful for designs with rounded bottom corners\n\t */\n\tborderRadius?: string;\n\t/**\n\t * Theme overrides for component styling via CSS custom properties\n\t */\n\ttheme?: ComponentTheme;\n}\n\n/**\n * Checks if the background prop is a color string\n */\nfunction isColorString(\n\tbackground: React.ReactNode | string | undefined,\n): background is string {\n\treturn (\n\t\ttypeof background === \"string\" &&\n\t\t(background.startsWith(\"#\") ||\n\t\t\tbackground.startsWith(\"rgb\") ||\n\t\t\tbackground.startsWith(\"hsl\") ||\n\t\t\t/^(var\\(|[a-z]+$)/i.test(background))\n\t);\n}\n\n/**\n * Hero component for page headers with large display typography.\n *\n * Slots:\n * - `top`: Full-width slot at top for USGovBanner, Navigation (no padding)\n * - `children`: Main content slot with padding and alignment\n *\n * The `title` prop is a convenience for simple heroes - it renders an h1 with\n * responsive typography. Children are always rendered, so you can use both\n * or just children for full control.\n *\n * Variants:\n * - A1: Content at bottom (default)\n * - A2: Content at top\n * - A3: Content centered\n *\n * @example\n * ```tsx\n * // Simple - just title and background\n * <Hero title=\"Welcome\" background=\"#1a1a1a\" />\n *\n * // With top slot for banner/nav\n * <Hero\n * variant=\"A1\"\n * background={<HeroBackground.Image src=\"/hero.jpg\" />}\n * top={\n * <>\n * <USGovBanner variant=\"inverted\" />\n * <Navigation />\n * </>\n * }\n * >\n * <h1>Board of Peace</h1>\n * <p>Subtitle goes here</p>\n * </Hero>\n * ```\n */\nconst Hero = React.forwardRef<HTMLElement, HeroProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tchildren,\n\t\t\ttitle,\n\t\t\ttitleClassName,\n\t\t\tcolorScheme = \"dark\",\n\t\t\ttop,\n\t\t\tvariant,\n\t\t\tbackground,\n\t\t\toverlayOpacity = 0,\n\t\t\toverlayColor = \"black\",\n\t\t\tborderRadius,\n\t\t\ttheme,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isColor = isColorString(background);\n\t\tconst hasMediaBackground = background && !isColor;\n\t\tconst styles = heroVariants({\n\t\t\tvariant,\n\t\t\tcolorScheme,\n\t\t\thasBackground: !!background,\n\t\t});\n\t\tconst themeStyles = themeToStyleVars(theme);\n\t\tconst combinedStyles = {\n\t\t\t...themeStyles,\n\t\t\t...(isColor ? { backgroundColor: background } : {}),\n\t\t\t...(borderRadius ? { borderRadius } : {}),\n\t\t\t...style,\n\t\t};\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={styles.root({ class: className })}\n\t\t\t\tstyle={\n\t\t\t\t\tObject.keys(combinedStyles).length > 0 ? combinedStyles : undefined\n\t\t\t\t}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{hasMediaBackground && background}\n\n\t\t\t\t{hasMediaBackground && overlayOpacity > 0 && (\n\t\t\t\t\t<BackgroundOverlay\n\t\t\t\t\t\topacity={overlayOpacity}\n\t\t\t\t\t\tclassName={overlayColor !== \"black\" ? undefined : \"bg-black\"}\n\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\toverlayColor !== \"black\"\n\t\t\t\t\t\t\t\t? { backgroundColor: overlayColor }\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{top && <div className={styles.top()}>{top}</div>}\n\n\t\t\t\t<div className={styles.content()}>\n\t\t\t\t\t{title && (\n\t\t\t\t\t\t<h1 className={styles.title({ class: titleClassName })}>{title}</h1>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Children - always render if provided */}\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n) as React.ForwardRefExoticComponent<\n\tHeroProps & React.RefAttributes<HTMLElement>\n> & {\n\tHeader: typeof HeroHeader;\n\tContent: typeof HeroContent;\n};\nHero.displayName = \"Hero\";\n\n// Attach sub-components\nHero.Header = HeroHeader;\nHero.Content = HeroContent;\n\nexport {\n\tHero,\n\theroVariants,\n\theroContentVariants,\n\theroHeaderVariants,\n\tDEFAULT_TITLE_TYPOGRAPHY,\n\tHeroHeader,\n\tHeroContent,\n};\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface ProseProps extends React.HTMLAttributes<HTMLDivElement> {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Prose container for long-form content with proper typography and spacing.\n *\n * Provides responsive spacing between content blocks:\n * - Desktop (1440px+): 96px gap\n * - Tablet (768px+): 72px gap\n * - Mobile: 56px gap\n *\n * Use with ProseSection components for proper content structure.\n */\nconst Prose = React.forwardRef<HTMLDivElement, ProseProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full max-w-[700px] flex-col overflow-hidden\",\n\t\t\t\t\t// Responsive gap between sections\n\t\t\t\t\t\"gap-56 md:gap-72 xl:gap-96\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t},\n);\nProse.displayName = \"Prose\";\n\nexport interface ProseSectionProps extends React.HTMLAttributes<HTMLElement> {\n\t/**\n\t * The heading text for this section\n\t */\n\theading: string;\n\t/**\n\t * The heading level to render (h2 or h3)\n\t * @default \"h2\"\n\t */\n\tas?: \"h2\" | \"h3\";\n\tchildren: React.ReactNode;\n}\n\n/**\n * A section within Prose content, containing a heading and body text.\n *\n * Responsive typography:\n * - h2: Uses typography-h3\n * - h3: Uses typography-h4\n * - Body: Uses typography-body-medium\n */\nconst ProseSection = React.forwardRef<HTMLElement, ProseSectionProps>(\n\t({ className, heading, as = \"h2\", children, ...props }, ref) => {\n\t\tconst Heading = as;\n\t\tconst headingClass = as === \"h2\" ? \"typography-h3\" : \"typography-h4\";\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full flex-col\",\n\t\t\t\t\t// Responsive gap between heading and body\n\t\t\t\t\t\"gap-24 md:gap-40\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Heading className={cn(headingClass, \"text-gray-900\")}>\n\t\t\t\t\t{heading}\n\t\t\t\t</Heading>\n\t\t\t\t<div className=\"typography-body-medium flex flex-col gap-[1em] text-gray-800 break-words\">\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nProseSection.displayName = \"ProseSection\";\n\nexport { Prose, ProseSection };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { BackgroundOverlay } from \"@/components/atoms/background\";\n\n// =============================================================================\n// QuoteBlock Variants\n// =============================================================================\n\nconst quoteBlockVariants = tv({\n\tslots: {\n\t\troot: \"relative flex min-h-[500px] w-full flex-col overflow-hidden rounded-radius-8\",\n\t\tcontent: [\n\t\t\t\"relative z-10 flex max-w-[1440px] flex-1 flex-col items-start justify-end\",\n\t\t\t\"p-40\",\n\t\t\t\"md:p-80\",\n\t\t\t\"lg:p-112\",\n\t\t],\n\t\tquoteWrapper: \"relative flex flex-col gap-40 md:gap-48\",\n\t\tquote: [\n\t\t\t\"relative text-text-inverted\",\n\t\t\t\"typography-small-headline-small\",\n\t\t\t\"md:typography-medium-headline-small\",\n\t\t\t\"lg:typography-large-headline-small\",\n\t\t\t\"font-serif md:font-serif lg:font-serif\",\n\t\t],\n\t\topenQuote: [\n\t\t\t\"absolute text-text-inverted\",\n\t\t\t\"typography-small-headline-small\",\n\t\t\t\"md:typography-medium-headline-small\",\n\t\t\t\"lg:typography-large-headline-small\",\n\t\t\t\"font-serif md:font-serif lg:font-serif\",\n\t\t\t\"-left-[0.5em] -top-[0.1em]\",\n\t\t],\n\t\tattribution: \"flex flex-col items-start gap-4\",\n\t\tsignature: \"h-auto w-[120px] md:w-[153px]\",\n\t\tbyline: \"flex flex-col text-text-inverted\",\n\t\tbylineName: \"typography-body-medium text-text-inverted\",\n\t\tbylineTitle: \"typography-body-medium text-text-inverted opacity-80\",\n\t},\n\tvariants: {\n\t\tsize: {\n\t\t\tdefault: {\n\t\t\t\troot: \"\",\n\t\t\t},\n\t\t\tcompact: {\n\t\t\t\troot: \"min-h-[400px] lg:min-h-[600px]\",\n\t\t\t},\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t},\n});\n\n// =============================================================================\n// QuoteBlock Component\n// =============================================================================\n\nexport interface QuoteBlockProps\n\textends Omit<React.HTMLAttributes<HTMLElement>, \"children\">,\n\t\tVariantProps<typeof quoteBlockVariants> {\n\t/**\n\t * The quote text to display\n\t */\n\tquote: string;\n\t/**\n\t * Whether to show decorative quote marks\n\t * @default true\n\t */\n\tshowQuoteMarks?: boolean;\n\t/**\n\t * Signature image URL (optional)\n\t */\n\tsignatureImage?: string;\n\t/**\n\t * Alt text for signature image\n\t */\n\tsignatureAlt?: string;\n\t/**\n\t * Attribution name (e.g., \"Donald J. Trump\")\n\t */\n\tattributionName?: string;\n\t/**\n\t * Attribution title (e.g., \"45 & 47 President of the United States\")\n\t */\n\tattributionTitle?: string;\n\t/**\n\t * Background element - use BackgroundImage or similar\n\t */\n\tbackground?: React.ReactNode;\n\t/**\n\t * Overlay opacity (0-1)\n\t */\n\toverlayOpacity?: number;\n\t/**\n\t * Overlay color\n\t */\n\toverlayColor?: string;\n\t/**\n\t * Custom class for the quote text\n\t */\n\tquoteClassName?: string;\n\t/**\n\t * Custom class for the byline name\n\t */\n\tbylineNameClassName?: string;\n\t/**\n\t * Custom class for the byline title\n\t */\n\tbylineTitleClassName?: string;\n}\n\nconst QuoteBlock = React.forwardRef<HTMLElement, QuoteBlockProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tquote,\n\t\t\tshowQuoteMarks = true,\n\t\t\tsignatureImage,\n\t\t\tsignatureAlt = \"Signature\",\n\t\t\tattributionName,\n\t\t\tattributionTitle,\n\t\t\tbackground,\n\t\t\toverlayOpacity = 0,\n\t\t\toverlayColor = \"black\",\n\t\t\tquoteClassName,\n\t\t\tbylineNameClassName,\n\t\t\tbylineTitleClassName,\n\t\t\tsize,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst styles = quoteBlockVariants({ size });\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={styles.root({ class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Background */}\n\t\t\t\t{background}\n\n\t\t\t\t{/* Overlay */}\n\t\t\t\t{overlayOpacity > 0 && (\n\t\t\t\t\t<BackgroundOverlay\n\t\t\t\t\t\topacity={overlayOpacity}\n\t\t\t\t\t\tclassName={overlayColor !== \"black\" ? undefined : \"bg-black\"}\n\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\toverlayColor !== \"black\"\n\t\t\t\t\t\t\t\t? { backgroundColor: overlayColor }\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Content */}\n\t\t\t\t<div className={styles.content()}>\n\t\t\t\t\t<div className={styles.quoteWrapper()}>\n\t\t\t\t\t\t{/* Quote */}\n\t\t\t\t\t\t<blockquote className={styles.quote({ class: quoteClassName })}>\n\t\t\t\t\t\t\t{showQuoteMarks && (\n\t\t\t\t\t\t\t\t<span className={styles.openQuote()} aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span className=\"relative\">\n\t\t\t\t\t\t\t\t{showQuoteMarks ? `${quote}\"` : quote}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</blockquote>\n\n\t\t\t\t\t\t{/* Attribution */}\n\t\t\t\t\t\t{(signatureImage || attributionName || attributionTitle) && (\n\t\t\t\t\t\t\t<div className={styles.attribution()}>\n\t\t\t\t\t\t\t\t{signatureImage && (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={signatureImage}\n\t\t\t\t\t\t\t\t\t\talt={signatureAlt}\n\t\t\t\t\t\t\t\t\t\tclassName={styles.signature()}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{(attributionName || attributionTitle) && (\n\t\t\t\t\t\t\t\t\t<div className={styles.byline()}>\n\t\t\t\t\t\t\t\t\t\t{attributionName && (\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={styles.bylineName({\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass: bylineNameClassName,\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{attributionName}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{attributionTitle && (\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={styles.bylineTitle({\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass: bylineTitleClassName,\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{attributionTitle}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\n\nQuoteBlock.displayName = \"QuoteBlock\";\n\nexport { QuoteBlock, quoteBlockVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * River component for content sections with text and media\n *\n * Variants:\n * - A: Text on left (9 cols), media on right (15 cols) on desktop\n * - B: Media on left (15 cols), text on right (9 cols) on desktop\n *\n * Uses the 24-column grid system. Must be placed inside a `grid-container`.\n */\nconst riverVariants = tv({\n\t// Base styles - col-full within parent grid, responsive padding using primitive spacing tokens\n\tbase: [\n\t\t\"col-full\",\n\t\t// Small (mobile): 20px x, 72px top, 20px bottom\n\t\t\"px-20 pt-72 pb-20\",\n\t\t// Medium (tablet): 56px x, 96px y\n\t\t\"md:px-56 md:py-96\",\n\t\t// Large (desktop): 72px x, 128px y\n\t\t\"lg:px-72 lg:py-128\",\n\t],\n\tvariants: {\n\t\tvariant: {\n\t\t\tA: \"\",\n\t\t\tB: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"A\",\n\t},\n});\n\nexport interface RiverProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof riverVariants> {\n\t/**\n\t * The headline text\n\t */\n\theadline: string;\n\t/**\n\t * The body text\n\t */\n\tbody: string;\n\t/**\n\t * Primary action button (required)\n\t */\n\tprimaryAction: React.ReactNode;\n\t/**\n\t * Secondary action button (optional)\n\t */\n\tsecondaryAction?: React.ReactNode;\n\t/**\n\t * Media content (image, video, etc.)\n\t */\n\tmedia: React.ReactNode;\n}\n\n/**\n * River component for content sections with text and media.\n *\n * Uses the 24-column grid system - must be placed inside a `grid-container`.\n *\n * Layout:\n * - Mobile/Tablet: Stacked (text above media)\n * - Desktop (lg+):\n * - Variant A: Text (9 cols) | Media (15 cols)\n * - Variant B: Media (15 cols) | Text (9 cols)\n *\n * @example\n * ```tsx\n * <div className=\"grid-container\">\n * <River\n * variant=\"A\"\n * headline=\"Feature Headline\"\n * body=\"Description of the feature...\"\n * primaryAction={<Button>Primary</Button>}\n * secondaryAction={<Button variant=\"outline\">Secondary</Button>}\n * media={<img src=\"...\" alt=\"Feature\" />}\n * />\n * </div>\n * ```\n */\nconst River = React.forwardRef<HTMLElement, RiverProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant,\n\t\t\theadline,\n\t\t\tbody,\n\t\t\tprimaryAction,\n\t\t\tsecondaryAction,\n\t\t\tmedia,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst contentColumn = (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\t// Full width on mobile/tablet, 9 cols on desktop\n\t\t\t\t\t\"lg:col-span-9\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Text content with 16px gap - uses primitive spacing tokens */}\n\t\t\t\t<div className=\"flex flex-col gap-16\">\n\t\t\t\t\t<h2 className=\"typography-h4 text-gray-900\">{headline}</h2>\n\t\t\t\t\t<p className=\"typography-body-small text-gray-800\">{body}</p>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Buttons with 36px gap from text, responsive sizes - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"flex flex-row gap-16 mt-36\", \"[&>*]:flex-shrink-0\")}\n\t\t\t\t>\n\t\t\t\t\t{primaryAction}\n\t\t\t\t\t{secondaryAction}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\n\t\tconst mediaColumn = (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Full width on mobile/tablet, 15 cols on desktop\n\t\t\t\t\t\"lg:col-span-15\",\n\t\t\t\t\t// Ensure media fills the container\n\t\t\t\t\t\"[&>*]:w-full [&>*]:h-auto\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{media}\n\t\t\t</div>\n\t\t);\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={riverVariants({ variant, class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Inner grid container for 24-col layout - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"grid grid-cols-1 gap-36\", \"lg:grid-cols-24 lg:gap-36\")}\n\t\t\t\t>\n\t\t\t\t\t{variant === \"B\" ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{mediaColumn}\n\t\t\t\t\t\t\t{contentColumn}\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{contentColumn}\n\t\t\t\t\t\t\t{mediaColumn}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nRiver.displayName = \"River\";\n\nexport { River, riverVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { type ComponentTheme, themeToStyleVars } from \"@/lib/theme\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Tout variants for background and content styling\n */\nconst toutVariants = tv({\n\tbase: [\n\t\t// Full width\n\t\t\"w-full\",\n\t\t// Positioning context for background\n\t\t\"relative overflow-hidden\",\n\t\t// Responsive height: 600px mobile, 750px tablet, 900px desktop\n\t\t\"h-[600px] md:h-[750px] lg:h-[900px]\",\n\t],\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tlight: \"\",\n\t\t\tdark: \"\",\n\t\t},\n\t\talign: {\n\t\t\tleft: \"\",\n\t\t\tcenter: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t\talign: \"left\",\n\t},\n});\n\n/**\n * Tout component based on Figma BaseKit / Touts\n *\n * A full-bleed section with a background image and overlaid content.\n * Content can be positioned on the left side or centered.\n *\n * Color schemes:\n * - light: Light text styling (default)\n * - dark: Dark text styling\n *\n * Alignment:\n * - left: Content aligned to the left (default)\n * - center: Content centered\n *\n * Responsive behavior:\n * - Mobile (sm): 600px height, 4 columns with gap-20, content spans all 4 cols\n * - Tablet (md): 750px height, 12 columns with gap-20, content spans 9 cols (left) or centered\n * - Desktop (lg): 900px height, 24 columns with gap-20, content spans 9 cols (left) or centered\n *\n * This component is self-contained - do NOT wrap in a grid-container.\n */\nexport interface ToutProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof toutVariants> {\n\t/**\n\t * The headline displayed in the tout\n\t */\n\theadline: React.ReactNode;\n\t/**\n\t * The body text displayed below the headline (optional)\n\t */\n\tbody?: string;\n\t/**\n\t * Primary action button (required)\n\t */\n\tprimaryAction: React.ReactNode;\n\t/**\n\t * Secondary action button (optional)\n\t */\n\tsecondaryAction?: React.ReactNode;\n\t/**\n\t * Background media (image or video element)\n\t * Should be a full-bleed element that covers the entire section\n\t */\n\tbackgroundMedia: React.ReactNode;\n\t/**\n\t * Optional footer content to display at the bottom of the section.\n\t * Use with NdstudioFooter component for the branded footer.\n\t */\n\tfooter?: React.ReactNode;\n\t/**\n\t * Component-level theme overrides.\n\t * Allows customization of colors, spacing, and surface properties.\n\t */\n\ttheme?: ComponentTheme;\n}\n\n/**\n * Tout component for hero-like sections with background media and overlaid content.\n *\n * This component is self-contained with its own grid.\n * Grid setup:\n * - Desktop (lg): 24 columns, gap-20, content spans 9 cols\n * - Tablet (md): 12 columns, gap-20, content spans 9 cols\n * - Mobile: 4 columns, gap-20, content spans all 4 cols\n *\n * @example\n * ```tsx\n * <Tout\n * headline=\"Feature Headline\"\n * body=\"Description of the feature...\"\n * primaryAction={<Button>Primary</Button>}\n * secondaryAction={<Button variant=\"outline\" colorScheme=\"light\">Secondary</Button>}\n * backgroundMedia={\n * <img\n * src=\"/background.jpg\"\n * alt=\"\"\n * className=\"absolute inset-0 w-full h-full object-cover\"\n * />\n * }\n * footer={<NdstudioFooter />}\n * />\n * ```\n */\nconst Tout = React.forwardRef<HTMLElement, ToutProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tcolorScheme = \"light\",\n\t\t\talign = \"left\",\n\t\t\theadline,\n\t\t\tbody,\n\t\t\tprimaryAction,\n\t\t\tsecondaryAction,\n\t\t\tbackgroundMedia,\n\t\t\tfooter,\n\t\t\ttheme,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isCentered = align === \"center\";\n\t\tconst isDark = colorScheme === \"dark\";\n\t\tconst themeStyles = themeToStyleVars(theme);\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={toutVariants({ colorScheme, align, class: className })}\n\t\t\t\tstyle={{ ...themeStyles, ...style }}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Background layer - full bleed */}\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"absolute inset-0 pointer-events-none\"\n\t\t\t\t>\n\t\t\t\t\t{/* Fallback background color */}\n\t\t\t\t\t<div className=\"absolute inset-0 bg-gray-500\" />\n\t\t\t\t\t{/* Background media */}\n\t\t\t\t\t{backgroundMedia}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Inner grid for content alignment - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t// Position above background\n\t\t\t\t\t\t\"relative z-10\",\n\t\t\t\t\t\t// Grid setup with responsive columns\n\t\t\t\t\t\t\"grid w-full h-full\",\n\t\t\t\t\t\t// Mobile: 4 columns with gap-20\n\t\t\t\t\t\t\"grid-cols-4 gap-20\",\n\t\t\t\t\t\t// Tablet (md): 12 columns\n\t\t\t\t\t\t\"md:grid-cols-12\",\n\t\t\t\t\t\t// Desktop (lg): 24 columns\n\t\t\t\t\t\t\"lg:grid-cols-24\",\n\t\t\t\t\t\t// Max width and centering like grid-container\n\t\t\t\t\t\t\"max-w-[var(--breakpoint-lg)] mx-auto\",\n\t\t\t\t\t\t// Responsive margins matching grid-container - uses primitive spacing tokens\n\t\t\t\t\t\t\"px-20 md:px-56 lg:px-72\",\n\t\t\t\t\t\t// Vertical padding to position content at bottom - uses primitive spacing tokens\n\t\t\t\t\t\t\"py-36 md:py-56 lg:py-72\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t// Grid spacing theme overrides\n\t\t\t\t\t\t...(theme?.spatial?.gridSmallMargin && {\n\t\t\t\t\t\t\tpaddingLeft: \"var(--theme-grid-small-margin)\",\n\t\t\t\t\t\t\tpaddingRight: \"var(--theme-grid-small-margin)\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t...(theme?.spatial?.gridSmallGutter && {\n\t\t\t\t\t\t\tgap: \"var(--theme-grid-small-gutter)\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Content column - aligned to grid */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t// Flex container for content\n\t\t\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\t\t\tisCentered ? \"justify-start items-center\" : \"justify-end\",\n\t\t\t\t\t\t\t// Responsive gap between text and buttons - uses primitive spacing tokens\n\t\t\t\t\t\t\t\"gap-28 md:gap-36\",\n\t\t\t\t\t\t\t// Mobile: all 4 cols\n\t\t\t\t\t\t\t\"col-span-4\",\n\t\t\t\t\t\t\t// Tablet & Desktop: 9 cols left-aligned, full width centered\n\t\t\t\t\t\t\tisCentered ? \"md:col-span-12 lg:col-span-24\" : \"md:col-span-9\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Text content stack - uses primitive spacing tokens */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex flex-col gap-16\",\n\t\t\t\t\t\t\t\tisCentered && \"items-center text-center\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"typography-h4\",\n\t\t\t\t\t\t\t\t\tisDark ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tcolor: theme?.colors?.textPrimary\n\t\t\t\t\t\t\t\t\t\t? \"var(--theme-text-primary)\"\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{headline}\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t{body && (\n\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"typography-body-small\",\n\t\t\t\t\t\t\t\t\t\tisDark ? \"text-gray-400\" : \"text-gray-800\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: theme?.colors?.textSecondary\n\t\t\t\t\t\t\t\t\t\t\t? \"var(--theme-text-secondary)\"\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{body}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* CTA buttons - uses primitive spacing tokens */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex flex-row\",\n\t\t\t\t\t\t\t\tisCentered ? \"justify-center\" : \"items-start\",\n\t\t\t\t\t\t\t\t// Responsive gap between buttons\n\t\t\t\t\t\t\t\t\"gap-8 md:gap-12\",\n\t\t\t\t\t\t\t\t\"[&>*]:flex-shrink-0\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{primaryAction}\n\t\t\t\t\t\t\t{secondaryAction}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Footer slot */}\n\t\t\t\t{footer && (\n\t\t\t\t\t<div className=\"absolute bottom-6 md:bottom-8 left-0 right-0 z-10\">\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</section>\n\t\t);\n\t},\n);\nTout.displayName = \"Tout\";\n\nexport { Tout, toutVariants };\n","\"use client\";\n\nimport * as React from \"react\";\n\n/**\n * Design system breakpoint values in pixels.\n * These match the primitive breakpoint tokens from packages/tokens.\n */\nexport const BREAKPOINTS = {\n\tsm: 320,\n\tmd: 768,\n\tlg: 1440,\n} as const;\n\nexport type Breakpoint = keyof typeof BREAKPOINTS;\n\n/**\n * Get the current breakpoint based on viewport width.\n */\nfunction getCurrentBreakpoint(width: number): Breakpoint {\n\tif (width >= BREAKPOINTS.lg) return \"lg\";\n\tif (width >= BREAKPOINTS.md) return \"md\";\n\treturn \"sm\";\n}\n\n/**\n * Hook to get the current responsive breakpoint.\n * Returns the active breakpoint name based on viewport width.\n *\n * @returns The current breakpoint: 'sm' | 'md' | 'lg'\n *\n * @example\n * ```tsx\n * function Component() {\n * const breakpoint = useBreakpoint();\n *\n * return (\n * <div>\n * {breakpoint === 'sm' && <MobileLayout />}\n * {breakpoint === 'md' && <TabletLayout />}\n * {breakpoint === 'lg' && <DesktopLayout />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useBreakpoint(): Breakpoint {\n\tconst [breakpoint, setBreakpoint] = React.useState<Breakpoint>(() => {\n\t\tif (typeof window === \"undefined\") return \"sm\";\n\t\treturn getCurrentBreakpoint(window.innerWidth);\n\t});\n\n\tReact.useEffect(() => {\n\t\tconst handleResize = () => {\n\t\t\tsetBreakpoint(getCurrentBreakpoint(window.innerWidth));\n\t\t};\n\n\t\t// Set initial value\n\t\thandleResize();\n\n\t\twindow.addEventListener(\"resize\", handleResize);\n\t\treturn () => window.removeEventListener(\"resize\", handleResize);\n\t}, []);\n\n\treturn breakpoint;\n}\n\n/**\n * Hook to check if viewport is at or above a specific breakpoint.\n *\n * @param breakpoint - The minimum breakpoint to check against\n * @returns boolean indicating if viewport is at or above the breakpoint\n *\n * @example\n * ```tsx\n * function Component() {\n * const isDesktop = useMinBreakpoint('lg');\n * const isTabletUp = useMinBreakpoint('md');\n *\n * return isDesktop ? <DesktopView /> : <MobileView />;\n * }\n * ```\n */\nexport function useMinBreakpoint(breakpoint: Breakpoint): boolean {\n\tconst [matches, setMatches] = React.useState<boolean>(() => {\n\t\tif (typeof window === \"undefined\") return false;\n\t\treturn window.innerWidth >= BREAKPOINTS[breakpoint];\n\t});\n\n\tReact.useEffect(() => {\n\t\tconst mediaQuery = window.matchMedia(\n\t\t\t`(min-width: ${BREAKPOINTS[breakpoint]}px)`,\n\t\t);\n\n\t\tsetMatches(mediaQuery.matches);\n\n\t\tconst handleChange = (event: MediaQueryListEvent) => {\n\t\t\tsetMatches(event.matches);\n\t\t};\n\n\t\tmediaQuery.addEventListener(\"change\", handleChange);\n\t\treturn () => mediaQuery.removeEventListener(\"change\", handleChange);\n\t}, [breakpoint]);\n\n\treturn matches;\n}\n\n/**\n * Hook to check if viewport is below a specific breakpoint.\n *\n * @param breakpoint - The breakpoint to check against\n * @returns boolean indicating if viewport is below the breakpoint\n *\n * @example\n * ```tsx\n * function Component() {\n * const isMobile = useMaxBreakpoint('md'); // Below tablet\n *\n * return isMobile ? <MobileNav /> : <DesktopNav />;\n * }\n * ```\n */\nexport function useMaxBreakpoint(breakpoint: Breakpoint): boolean {\n\tconst [matches, setMatches] = React.useState<boolean>(() => {\n\t\tif (typeof window === \"undefined\") return false;\n\t\treturn window.innerWidth < BREAKPOINTS[breakpoint];\n\t});\n\n\tReact.useEffect(() => {\n\t\tconst mediaQuery = window.matchMedia(\n\t\t\t`(max-width: ${BREAKPOINTS[breakpoint] - 1}px)`,\n\t\t);\n\n\t\tsetMatches(mediaQuery.matches);\n\n\t\tconst handleChange = (event: MediaQueryListEvent) => {\n\t\t\tsetMatches(event.matches);\n\t\t};\n\n\t\tmediaQuery.addEventListener(\"change\", handleChange);\n\t\treturn () => mediaQuery.removeEventListener(\"change\", handleChange);\n\t}, [breakpoint]);\n\n\treturn matches;\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\ntype EventMap<T> = T extends Window\n\t? WindowEventMap\n\t: T extends Document\n\t\t? DocumentEventMap\n\t\t: T extends HTMLElement\n\t\t\t? HTMLElementEventMap\n\t\t\t: never;\n\n/**\n * Custom hook that attaches an event listener to a specified element.\n * Automatically handles cleanup on unmount and when dependencies change.\n *\n * @param eventName - The name of the event to listen for\n * @param handler - The callback function to execute when the event fires\n * @param element - The element to attach the listener to (defaults to window)\n * @param options - Optional event listener options\n *\n * @example\n * ```tsx\n * // Listen to window resize\n * useEventListener('resize', handleResize);\n *\n * // Listen to element scroll\n * useEventListener('scroll', handleScroll, containerRef.current);\n *\n * // With options\n * useEventListener('scroll', handleScroll, window, { passive: true });\n * ```\n */\nexport function useEventListener<\n\tT extends Window | Document | HTMLElement,\n\tK extends keyof EventMap<T>,\n>(\n\teventName: K,\n\thandler: (event: EventMap<T>[K]) => void,\n\telement?: T | null,\n\toptions?: boolean | AddEventListenerOptions,\n): void {\n\t// Store the handler in a ref to avoid re-subscribing on every render\n\tconst savedHandler = React.useRef(handler);\n\n\t// Update ref when handler changes\n\tReact.useLayoutEffect(() => {\n\t\tsavedHandler.current = handler;\n\t}, [handler]);\n\n\tReact.useEffect(() => {\n\t\t// Default to window if no element is provided\n\t\tconst targetElement = element ?? window;\n\n\t\tif (!targetElement?.addEventListener) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst eventListener = (event: Event) => {\n\t\t\tsavedHandler.current(event as EventMap<T>[K]);\n\t\t};\n\n\t\ttargetElement.addEventListener(eventName as string, eventListener, options);\n\n\t\treturn () => {\n\t\t\ttargetElement.removeEventListener(\n\t\t\t\teventName as string,\n\t\t\t\teventListener,\n\t\t\t\toptions,\n\t\t\t);\n\t\t};\n\t}, [eventName, element, options]);\n}\n","/**\n * Collection Types\n *\n * Types for representing Figma variable collections in TypeScript.\n * Collections are the organizational units for design tokens in Figma.\n * Aligned with the token-server API schema.\n */\n\nimport type { TokenTypeName } from \"../types\";\n\n/**\n * Token category - determines which axis of theming this collection affects\n */\nexport type TokenCategory = \"color\" | \"spacing\" | \"typography\" | \"brand\";\n\n/**\n * Collection type - whether this is a base collection or extends another\n */\nexport type CollectionType = \"base\" | \"extended\";\n\n/**\n * A reference to another token using the {token-name} syntax\n */\nexport type TokenReference = `{${string}}`;\n\n/**\n * Color value in DTCG format (from Figma)\n */\nexport interface ColorValue {\n\tcolorSpace: \"srgb\" | \"display-p3\" | \"rec2020\";\n\tcomponents: [number, number, number];\n\talpha: number;\n\thex: string;\n}\n\n/**\n * Dimension value in DTCG format\n */\nexport interface DimensionValue {\n\tvalue: number;\n\tunit: \"px\" | \"rem\" | \"em\" | \"%\";\n}\n\n/**\n * Typography composite value\n */\nexport interface TypographyValue {\n\tfontFamily: string | string[];\n\tfontSize: DimensionValue | string;\n\tfontWeight: number | string;\n\tlineHeight: number | string;\n\tletterSpacing?: DimensionValue | string;\n}\n\n/**\n * Resolved token value - can be any of the supported value types\n */\nexport type ResolvedTokenValue =\n\t| string\n\t| number\n\t| boolean\n\t| ColorValue\n\t| DimensionValue\n\t| TypographyValue\n\t| Record<string, unknown>;\n\n/**\n * A token value can either be a resolved value or a reference to another token\n */\nexport interface CollectionTokenValue {\n\t$type: TokenTypeName | string;\n\t$value: ResolvedTokenValue | TokenReference;\n\t$description?: string;\n}\n\n/**\n * Token set within a collection - wrapper around flat tokens\n * Collections store tokens as: { tokens: { \"token-name\": { $type, $value } } }\n */\nexport type TokenSet = Record<string, CollectionTokenValue>;\n\n/**\n * Collection from the token-server API\n * Matches the database schema in apps/token-server/src/db/schema.ts\n */\nexport interface APICollection {\n\tid: string;\n\tname: string;\n\tdescription: string | null;\n\ttype: CollectionType | null;\n\tbaseCollectionId: string | null;\n\tfigmaCollectionId: string | null;\n\tusesBreakpoints: boolean;\n\ttokens: Record<string, TokenSet | CollectionTokenValue>;\n\tpublishedVersionId: string | null;\n\tcreatedBy: string | null;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\n/**\n * Collection definition - internal representation for theme composition\n *\n * A collection can be either:\n * - A \"base\" collection that defines the foundational tokens\n * - An \"extended\" collection that overrides specific tokens from a base\n */\nexport interface CollectionDefinition {\n\t/** Collection ID (UUID from API) */\n\tid: string;\n\t/** Collection name (e.g., \"Color\", \"Color - Dark\", \"Test Theme\") */\n\tname: string;\n\t/** Whether this is a base collection or extends another */\n\ttype: CollectionType;\n\t/** For extended collections, the ID of the base collection this extends */\n\tbaseCollectionId?: string;\n\t/** Optional description */\n\tdescription?: string;\n\t/** The tokens in this collection - can be nested or flat */\n\ttokens: Record<string, TokenSet | CollectionTokenValue>;\n}\n\n/**\n * Collection metadata without tokens - useful for listings and selection UI\n */\nexport interface CollectionMetadata {\n\tid: string;\n\tname: string;\n\ttype: CollectionType;\n\tbaseCollectionId?: string;\n\tdescription?: string;\n}\n\n/**\n * Convert API collection to internal definition\n */\nexport function apiCollectionToDefinition(\n\tapi: APICollection,\n): CollectionDefinition {\n\treturn {\n\t\tid: api.id,\n\t\tname: api.name,\n\t\ttype: api.baseCollectionId ? \"extended\" : (api.type ?? \"base\"),\n\t\tbaseCollectionId: api.baseCollectionId ?? undefined,\n\t\tdescription: api.description ?? undefined,\n\t\ttokens: api.tokens,\n\t};\n}\n\n/**\n * A registry of all available collections, organized by category\n */\nexport interface CollectionRegistry {\n\tcolor: {\n\t\tbase: CollectionDefinition | null;\n\t\textensions: CollectionDefinition[];\n\t};\n\tspacing: {\n\t\tbase: CollectionDefinition | null;\n\t\textensions: CollectionDefinition[];\n\t};\n\ttypography: {\n\t\tbase: CollectionDefinition | null;\n\t\textensions: CollectionDefinition[];\n\t};\n\tbrand: {\n\t\tbase: CollectionDefinition | null;\n\t\textensions: CollectionDefinition[];\n\t};\n}\n\n/**\n * Type guard to check if a value is a token reference\n */\nexport function isTokenReference(value: unknown): value is TokenReference {\n\treturn (\n\t\ttypeof value === \"string\" && value.startsWith(\"{\") && value.endsWith(\"}\")\n\t);\n}\n\n/**\n * Extract the token name from a reference\n */\nexport function parseTokenReference(ref: TokenReference): string {\n\treturn ref.slice(1, -1);\n}\n\n/**\n * Create a token reference from a token name\n */\nexport function createTokenReference(tokenName: string): TokenReference {\n\treturn `{${tokenName}}` as TokenReference;\n}\n\n/**\n * Type guard to check if a value is a color value object\n */\nexport function isColorValue(value: unknown): value is ColorValue {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst obj = value as Record<string, unknown>;\n\treturn (\n\t\t\"colorSpace\" in obj &&\n\t\t\"components\" in obj &&\n\t\tArray.isArray(obj.components) &&\n\t\tobj.components.length === 3\n\t);\n}\n\n/**\n * Type guard to check if a value is a dimension value object\n */\nexport function isDimensionValue(value: unknown): value is DimensionValue {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst obj = value as Record<string, unknown>;\n\treturn \"value\" in obj && \"unit\" in obj && typeof obj.value === \"number\";\n}\n","import type { JSONTokenTree } from \"@nds-design-system/design-tokens-format\";\n\n/**\n * Deep merge multiple token trees into a single tree\n */\nexport function mergeTokenTrees(...trees: JSONTokenTree[]): JSONTokenTree {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (const tree of trees) {\n\t\tdeepMerge(result, tree as Record<string, unknown>);\n\t}\n\n\treturn result as JSONTokenTree;\n}\n\n/**\n * Deep merge two objects, with source overwriting target\n */\nfunction deepMerge(\n\ttarget: Record<string, unknown>,\n\tsource: Record<string, unknown>,\n): void {\n\tfor (const [key, value] of Object.entries(source)) {\n\t\tif (key in target) {\n\t\t\tconst targetValue = target[key];\n\n\t\t\t// If both are objects (and not null), merge recursively\n\t\t\tif (isPlainObject(targetValue) && isPlainObject(value)) {\n\t\t\t\tdeepMerge(\n\t\t\t\t\ttargetValue as Record<string, unknown>,\n\t\t\t\t\tvalue as Record<string, unknown>,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Otherwise, source overwrites target\n\t\t\t\ttarget[key] = value;\n\t\t\t}\n\t\t} else {\n\t\t\t// Key doesn't exist in target, add it\n\t\t\ttarget[key] = value;\n\t\t}\n\t}\n}\n\n/**\n * Check if value is a plain object (not array, null, etc.)\n */\nfunction isPlainObject(value: unknown): boolean {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t!Array.isArray(value) &&\n\t\tObject.prototype.toString.call(value) === \"[object Object]\"\n\t);\n}\n\n/**\n * Flatten a nested token tree into a flat map of paths to tokens\n */\nexport function flattenTokenTree(\n\ttree: JSONTokenTree,\n\tprefix: string[] = [],\n): Map<string, unknown> {\n\tconst result = new Map<string, unknown>();\n\n\tfunction traverse(obj: unknown, path: string[]): void {\n\t\tif (typeof obj !== \"object\" || obj === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst record = obj as Record<string, unknown>;\n\n\t\t// Check if this is a token (has $value)\n\t\tif (\"$value\" in record) {\n\t\t\tresult.set(path.join(\".\"), obj);\n\t\t\treturn;\n\t\t}\n\n\t\t// Otherwise, traverse children\n\t\tfor (const [key, value] of Object.entries(record)) {\n\t\t\tif (!key.startsWith(\"$\")) {\n\t\t\t\ttraverse(value, [...path, key]);\n\t\t\t}\n\t\t}\n\t}\n\n\ttraverse(tree, prefix);\n\treturn result;\n}\n\n/**\n * Sort token tree keys alphabetically for consistent output\n */\nexport function sortTokenTree(tree: JSONTokenTree): JSONTokenTree {\n\tfunction sortObject(obj: unknown): unknown {\n\t\tif (typeof obj !== \"object\" || obj === null) {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\treturn obj.map(sortObject);\n\t\t}\n\n\t\tconst record = obj as Record<string, unknown>;\n\t\tconst sorted: Record<string, unknown> = {};\n\n\t\t// Sort keys, but keep $ prefixed keys first\n\t\tconst keys = Object.keys(record).sort((a, b) => {\n\t\t\tconst aHasPrefix = a.startsWith(\"$\");\n\t\t\tconst bHasPrefix = b.startsWith(\"$\");\n\n\t\t\tif (aHasPrefix && !bHasPrefix) return -1;\n\t\t\tif (!aHasPrefix && bHasPrefix) return 1;\n\n\t\t\treturn a.localeCompare(b);\n\t\t});\n\n\t\tfor (const key of keys) {\n\t\t\tsorted[key] = sortObject(record[key]);\n\t\t}\n\n\t\treturn sorted;\n\t}\n\n\treturn sortObject(tree) as JSONTokenTree;\n}\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Base Semantic Color Tokens\n *\n * Matches Figma \"Color\" collection - Default mode.\n * Theme variants (dark, civic, institution, etc.) extend these with partial overrides.\n */\nexport const baseColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tcollectionName: \"Color\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t// Background tokens (color-bg-*)\n\t\t\tbg: {\n\t\t\t\tpage: { $type: \"color\", $value: \"{primitive.color.gray.50}\" },\n\t\t\t\tsection: { $type: \"color\", $value: \"{primitive.color.gray.100}\" },\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.200}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\tmuted: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t},\n\t\t\t// Card token (color-card-*)\n\t\t\tcard: {\n\t\t\t\tbackground: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t},\n\t\t\t// Text tokens (color-text-*)\n\t\t\ttext: {\n\t\t\t\tprimary: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\tsecondary: { $type: \"color\", $value: \"{primitive.color.gray.800}\" },\n\t\t\t\tmuted: { $type: \"color\", $value: \"{primitive.color.gray.600}\" },\n\t\t\t\tinverted: { $type: \"color\", $value: \"{primitive.color.gray.100}\" },\n\t\t\t\tlink: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\t\"link-hover\": { $type: \"color\", $value: \"{primitive.color.gray.700}\" },\n\t\t\t},\n\t\t\t// Accent tokens (color-accent-*)\n\t\t\taccent: {\n\t\t\t\tbrand: { $type: \"color\", $value: \"{primitive.color.indigo.v400}\" },\n\t\t\t\t\"brand-soft\": { $type: \"color\", $value: \"{primitive.color.ember.100}\" },\n\t\t\t},\n\t\t\t// Border tokens (color-border-*)\n\t\t\tborder: {\n\t\t\t\tsubtle: { $type: \"color\", $value: \"{primitive.color.alpha-black.10}\" },\n\t\t\t\tstrong: { $type: \"color\", $value: \"{primitive.color.alpha-black.20}\" },\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.40}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t// Button tokens (color-button-*)\n\t\t\t// Matches Figma Button component variants\n\t\t\tbutton: {\n\t\t\t\t// Primary button (blue filled) - Figma: #4186de\n\t\t\t\tprimary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.blue.500}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.blue.600}\" },\n\t\t\t\t\t\"bg-active\": { $type: \"color\", $value: \"{primitive.color.blue.700}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t\t// Default button (dark filled) - Figma: #141414\n\t\t\t\tdefault: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\t\t\"bg-active\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.50}\" },\n\t\t\t\t},\n\t\t\t\t// Secondary button (light gray filled) - Figma: #f5f5f5\n\t\t\t\tsecondary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.100}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"bg-active\": { $type: \"color\", $value: \"{primitive.color.gray.300}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t\tborder: {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Destructive button (red filled) - Figma: #e53935\n\t\t\t\tdestructive: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.red.500}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.red.600}\" },\n\t\t\t\t\t\"bg-active\": { $type: \"color\", $value: \"{primitive.color.red.700}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t\t// Outline button (bordered, transparent)\n\t\t\t\toutline: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.5}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"bg-active\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t\tborder: { $type: \"color\", $value: \"{primitive.color.gray.300}\" },\n\t\t\t\t\t\"border-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.400}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Ghost button (transparent, subtle hover)\n\t\t\t\tghost: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.5}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"bg-active\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t},\n\t\t\t\t// Link button (text only, underline on hover)\n\t\t\t\tlink: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\t\"bg-active\": { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t\t\"text-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.700}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t// Tooltip tokens (color-tooltip-*)\n\t\t\t// Inverted color scheme for tooltip overlays\n\t\t\ttooltip: {\n\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.1000}\" },\n\t\t\t\ttext: { $type: \"color\", $value: \"{semantic.color.text.inverted}\" },\n\t\t\t},\n\t\t\t// Overlay tokens (color-overlay-*)\n\t\t\t// Shared by popover, modal, dropdown, menu (light background, spacious)\n\t\t\toverlay: {\n\t\t\t\tbackground: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.card.background}\",\n\t\t\t\t\t$description: \"Overlay background color (light)\",\n\t\t\t\t},\n\t\t\t\tborder: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.border.subtle}\",\n\t\t\t\t\t$description: \"Overlay border color\",\n\t\t\t\t},\n\t\t\t\ttext: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.text.primary}\",\n\t\t\t\t\t$description: \"Overlay primary text color\",\n\t\t\t\t},\n\t\t\t\t\"text-muted\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.text.muted}\",\n\t\t\t\t\t$description: \"Overlay muted text color\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t// UI tokens (color-ui-*)\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.v400}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.100}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.200}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.1000}\",\n\t\t\t\t},\n\t\t\t\t\"error-color\": { $type: \"color\", $value: \"{primitive.color.red.300}\" },\n\t\t\t\t\"accent-base\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.v300}\",\n\t\t\t\t},\n\t\t\t\t\"accent-base-2\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.v200}\",\n\t\t\t\t},\n\t\t\t\t\"accent-base-3\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.v300}\",\n\t\t\t\t},\n\t\t\t\t// Menu/dropdown item tokens\n\t\t\t\t\"menu-item-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"menu-item-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.25}\",\n\t\t\t\t},\n\t\t\t\t\"menu-item-bg-selected\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.35}\",\n\t\t\t\t},\n\t\t\t\t\"menu-item-text\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\t\"menu-item-text-selected\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.v250}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t// Video Player tokens (color-video-player-*)\n\t\t\t// Used for fullscreen video modal, controls, and captions\n\t\t\t\"video-player\": {\n\t\t\t\t\"controls-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.40}\",\n\t\t\t\t\t$description: \"Video controls bar background (glassmorphic)\",\n\t\t\t\t},\n\t\t\t\t\"controls-text\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t\t$description: \"Video controls text and icons\",\n\t\t\t\t},\n\t\t\t\t\"controls-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t\t$description: \"Video controls hover state\",\n\t\t\t\t},\n\t\t\t\t\"button-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t\t$description: \"Control button background (visible on dark video)\",\n\t\t\t\t},\n\t\t\t\t\"button-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t\t$description: \"Control button hover background\",\n\t\t\t\t},\n\t\t\t\t\"button-bg-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.30}\",\n\t\t\t\t\t$description: \"Control button active/pressed background\",\n\t\t\t\t},\n\t\t\t\t\"caption-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.70}\",\n\t\t\t\t\t$description: \"Caption background overlay\",\n\t\t\t\t},\n\t\t\t\t\"caption-text\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t\t$description: \"Caption text color\",\n\t\t\t\t},\n\t\t\t\t\"backdrop-overlay\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.90}\",\n\t\t\t\t\t$description: \"Modal backdrop overlay\",\n\t\t\t\t},\n\t\t\t\t\"progress-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.30}\",\n\t\t\t\t\t$description: \"Progress bar track background\",\n\t\t\t\t},\n\t\t\t\t\"progress-fill\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t\t$description: \"Progress bar fill color\",\n\t\t\t\t},\n\t\t\t\t\"tooltip-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.90}\",\n\t\t\t\t\t$description: \"Video tooltip background\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { WithAliasValue } from \"./Alias\";\nimport type { TokenSignature } from \"./TokenSignature\";\n\n// Type declaration following the https://tr.designtokens.org/format specification\n\n// 8.1 Color, following the https://tr.designtokens.org/color specification\nconst colorTypeName = \"color\";\nexport const colorSpaceValues = [\n\t\"srgb\",\n\t\"srgb-linear\",\n\t\"hsl\",\n\t\"hwb\",\n\t\"lab\",\n\t\"lch\",\n\t\"oklab\",\n\t\"oklch\",\n\t\"display-p3\",\n\t\"a98-rgb\",\n\t\"prophoto-rgb\",\n\t\"rec2020\",\n\t\"xyz-d65\",\n\t\"xyz-d50\",\n] as const;\nexport namespace Color {\n\texport type TypeName = typeof colorTypeName;\n\n\texport type RawValue = {\n\t\tcolorSpace: (typeof colorSpaceValues)[number];\n\t\tcomponents: [number | \"none\", number | \"none\", number | \"none\"];\n\t\talpha?: number;\n\t\thex?: `#${string}`;\n\t};\n\texport type Value = WithAliasValue<Color.RawValue>;\n\texport type Token = TokenSignature<Color.TypeName, Color.Value>;\n}\n\n// 8.2 Dimension\nconst dimensionTypeName = \"dimension\";\nexport namespace Dimension {\n\texport type TypeName = typeof dimensionTypeName;\n\texport type RawValue = { value: number; unit: \"px\" | \"rem\" };\n\texport type Value = WithAliasValue<Dimension.RawValue>;\n\texport type Token = TokenSignature<Dimension.TypeName, Dimension.Value>;\n}\n\n// 8.3 Font Family\nconst fontFamilyTypeName = \"fontFamily\";\nexport namespace FontFamily {\n\texport type TypeName = typeof fontFamilyTypeName;\n\texport type RawValue = string | Array<string>;\n\texport type Value = WithAliasValue<FontFamily.RawValue>;\n\texport type Token = TokenSignature<FontFamily.TypeName, FontFamily.Value>;\n}\n\n// 8.4 Font Weight\nconst fontWeightTypeName = \"fontWeight\";\nexport const fontWeightValues = [\n\t\"thin\",\n\t\"hairline\",\n\t\"extra-light\",\n\t\"ultra-light\",\n\t\"light\",\n\t\"normal\",\n\t\"regular\",\n\t\"book\",\n\t\"medium\",\n\t\"semi-bold\",\n\t\"demi-bold\",\n\t\"bold\",\n\t\"extra-bold\",\n\t\"ultra-bold\",\n\t\"black\",\n\t\"heavy\",\n\t\"extra-black\",\n\t\"ultra-black\",\n] as const;\nexport namespace FontWeight {\n\texport type TypeName = typeof fontWeightTypeName;\n\texport type RawValue = (typeof fontWeightValues)[number] | number;\n\texport type Value = WithAliasValue<FontWeight.RawValue>;\n\texport type Token = TokenSignature<FontWeight.TypeName, FontWeight.Value>;\n}\n\n// 8.5 Duration\nconst durationTypeName = \"duration\";\nexport namespace Duration {\n\texport type TypeName = typeof durationTypeName;\n\texport type RawValue = { value: number; unit: \"ms\" | \"s\" };\n\texport type Value = WithAliasValue<Duration.RawValue>;\n\texport type Token = TokenSignature<Duration.TypeName, Duration.Value>;\n}\n\n// 8.6 Cubic Bezier\nconst cubicBezierTypeName = \"cubicBezier\";\nexport namespace CubicBezier {\n\texport type TypeName = typeof cubicBezierTypeName;\n\texport type RawValue = [number, number, number, number];\n\texport type Value = WithAliasValue<CubicBezier.RawValue>;\n\texport type Token = TokenSignature<CubicBezier.TypeName, CubicBezier.Value>;\n}\n\n// 8.7 Number\nconst numberTypeName = \"number\";\nexport namespace NumberNs {\n\texport type TypeName = typeof numberTypeName;\n\texport type RawValue = number;\n\texport type Value = WithAliasValue<NumberNs.RawValue>;\n\texport type Token = TokenSignature<NumberNs.TypeName, NumberNs.Value>;\n}\n\n/*\n 9. Composite Types\n https://tr.designtokens.org/format/#composite-types\n*/\n// 9.2 Stroke Style\nconst strokeStyleTypeName = \"strokeStyle\";\nexport const strokeStyleStringValues = [\n\t\"solid\",\n\t\"dashed\",\n\t\"dotted\",\n\t\"double\",\n\t\"groove\",\n\t\"ridge\",\n\t\"outset\",\n\t\"inset\",\n] as const;\nexport const strokeStyleLineCapValues = [\"round\", \"butt\", \"square\"] as const;\nexport namespace StrokeStyle {\n\texport type TypeName = typeof strokeStyleTypeName;\n\texport type RawValue =\n\t\t| (typeof strokeStyleStringValues)[number]\n\t\t| {\n\t\t\t\tdashArray: Dimension.Value[];\n\t\t\t\tlineCap: (typeof strokeStyleLineCapValues)[number];\n\t\t };\n\texport type Value = WithAliasValue<StrokeStyle.RawValue>;\n\texport type Token = TokenSignature<StrokeStyle.TypeName, StrokeStyle.Value>;\n}\n\n// 9.3 Border\nconst borderTypeName = \"border\";\nexport namespace Border {\n\texport type TypeName = typeof borderTypeName;\n\texport type RawValue = {\n\t\tcolor: Color.Value;\n\t\twidth: Dimension.Value;\n\t\tstyle: StrokeStyle.Value;\n\t};\n\texport type Value = WithAliasValue<Border.RawValue>;\n\texport type Token = TokenSignature<Border.TypeName, Border.Value>;\n}\n\n// 9.4 Transition\nconst transitionTypeName = \"transition\";\nexport namespace Transition {\n\texport type TypeName = typeof transitionTypeName;\n\texport type RawValue = {\n\t\tduration: Duration.Value;\n\t\tdelay: Duration.Value;\n\t\ttimingFunction: CubicBezier.Value;\n\t};\n\texport type Value = WithAliasValue<Transition.RawValue>;\n\texport type Token = TokenSignature<Transition.TypeName, Transition.Value>;\n}\n\n// 9.5 Shadow\nconst shadowTypeName = \"shadow\";\nexport namespace Shadow {\n\texport type TypeName = typeof shadowTypeName;\n\texport type RawValue =\n\t\t| Array<{\n\t\t\t\tcolor: Color.Value;\n\t\t\t\toffsetX: Dimension.Value;\n\t\t\t\toffsetY: Dimension.Value;\n\t\t\t\tblur: Dimension.Value;\n\t\t\t\tspread: Dimension.Value;\n\t\t\t\tinset?: boolean;\n\t\t }>\n\t\t| {\n\t\t\t\tcolor: Color.Value;\n\t\t\t\toffsetX: Dimension.Value;\n\t\t\t\toffsetY: Dimension.Value;\n\t\t\t\tblur: Dimension.Value;\n\t\t\t\tspread: Dimension.Value;\n\t\t\t\tinset?: boolean;\n\t\t };\n\texport type Value = WithAliasValue<Shadow.RawValue>;\n\texport type Token = TokenSignature<Shadow.TypeName, Shadow.Value>;\n}\n\n// 9.6 Gradient\nconst gradientTypeName = \"gradient\";\nexport namespace Gradient {\n\texport type TypeName = typeof gradientTypeName;\n\texport type RawValue = Array<{\n\t\tcolor: Color.Value;\n\t\tposition: NumberNs.Value;\n\t}>;\n\texport type Value = WithAliasValue<Gradient.RawValue>;\n\texport type Token = TokenSignature<Gradient.TypeName, Gradient.Value>;\n}\n\n// 9.7 Typography\nconst typographyTypeName = \"typography\";\nexport namespace Typography {\n\texport type TypeName = typeof typographyTypeName;\n\texport type RawValue = {\n\t\tfontFamily: FontFamily.Value;\n\t\tfontSize: Dimension.Value;\n\t\tfontWeight: FontWeight.Value;\n\t\tletterSpacing: Dimension.Value;\n\t\tlineHeight: NumberNs.Value;\n\t};\n\texport type Value = WithAliasValue<Typography.RawValue>;\n\texport type Token = TokenSignature<Typography.TypeName, Typography.Value>;\n}\n\n/* ------------------------------------------\n Mapping Exports\n--------------------------------------------- */\nexport const tokenTypeNames = [\n\tcolorTypeName,\n\tdimensionTypeName,\n\tfontFamilyTypeName,\n\tfontWeightTypeName,\n\tdurationTypeName,\n\tcubicBezierTypeName,\n\tnumberTypeName,\n\tstrokeStyleTypeName,\n\tborderTypeName,\n\ttransitionTypeName,\n\tshadowTypeName,\n\tgradientTypeName,\n\ttypographyTypeName,\n] as const;\n\ntype TokenTypeNamesArray = typeof tokenTypeNames;\ntype TokenTypeNameFromArray = TokenTypeNamesArray[number];\n\nexport const tokenTypeNamesMapping = tokenTypeNames.reduce<\n\tRecord<TokenTypeNameFromArray, TokenTypeNameFromArray>\n>(\n\t(acc, t) => {\n\t\tacc[t] = t;\n\t\treturn acc;\n\t},\n\t{} as Record<TokenTypeNameFromArray, TokenTypeNameFromArray>,\n);\n\nexport type TokenTypeName =\n\t| Color.TypeName\n\t| Dimension.TypeName\n\t| FontFamily.TypeName\n\t| FontWeight.TypeName\n\t| Duration.TypeName\n\t| CubicBezier.TypeName\n\t| NumberNs.TypeName\n\t| StrokeStyle.TypeName\n\t| Border.TypeName\n\t| Transition.TypeName\n\t| Shadow.TypeName\n\t| Gradient.TypeName\n\t| Typography.TypeName;\n\nexport type DesignToken =\n\t| Color.Token\n\t| Dimension.Token\n\t| FontFamily.Token\n\t| FontWeight.Token\n\t| Duration.Token\n\t| CubicBezier.Token\n\t| NumberNs.Token\n\t| StrokeStyle.Token\n\t| Border.Token\n\t| Transition.Token\n\t| Shadow.Token\n\t| Gradient.Token\n\t| Typography.Token;\n\nexport type PickTokenByType<T extends TokenTypeName> = {\n\tcolor: Color.Token;\n\tdimension: Dimension.Token;\n\tfontFamily: FontFamily.Token;\n\tfontWeight: FontWeight.Token;\n\tduration: Duration.Token;\n\tcubicBezier: CubicBezier.Token;\n\tnumber: NumberNs.Token;\n\tstrokeStyle: StrokeStyle.Token;\n\tborder: Border.Token;\n\ttransition: Transition.Token;\n\tshadow: Shadow.Token;\n\tgradient: Gradient.Token;\n\ttypography: Typography.Token;\n}[T];\n","/**\n * Color conversion utilities for design tokens\n */\n\n/**\n * RGB color components normalized to 0-1 range\n */\nexport interface RGBComponents {\n\tr: number;\n\tg: number;\n\tb: number;\n}\n\n/**\n * RGBA color with optional alpha\n */\nexport interface RGBAColor extends RGBComponents {\n\ta?: number;\n}\n\n/**\n * Converts a hex color string to RGB components normalized to 0-1 range\n * Supports: #RGB, #RRGGBB, #RRGGBBAA\n *\n * @example\n * hexToRgb(\"#FF0000\") // { r: 1, g: 0, b: 0 }\n * hexToRgb(\"#F00\") // { r: 1, g: 0, b: 0 }\n */\nexport function hexToRgb(hex: string): RGBComponents {\n\tconst cleanHex = hex.replace(/^#/, \"\");\n\n\tlet r: number;\n\tlet g: number;\n\tlet b: number;\n\n\tif (cleanHex.length === 3) {\n\t\t// Short format: #RGB\n\t\tconst c0 = cleanHex[0] ?? \"0\";\n\t\tconst c1 = cleanHex[1] ?? \"0\";\n\t\tconst c2 = cleanHex[2] ?? \"0\";\n\t\tr = Number.parseInt(c0 + c0, 16);\n\t\tg = Number.parseInt(c1 + c1, 16);\n\t\tb = Number.parseInt(c2 + c2, 16);\n\t} else if (cleanHex.length === 6 || cleanHex.length === 8) {\n\t\t// Standard format: #RRGGBB or #RRGGBBAA\n\t\tr = Number.parseInt(cleanHex.slice(0, 2), 16);\n\t\tg = Number.parseInt(cleanHex.slice(2, 4), 16);\n\t\tb = Number.parseInt(cleanHex.slice(4, 6), 16);\n\t} else {\n\t\tthrow new Error(`Invalid hex color format: ${hex}`);\n\t}\n\n\treturn {\n\t\tr: r / 255,\n\t\tg: g / 255,\n\t\tb: b / 255,\n\t};\n}\n\n/**\n * Converts a hex color string to RGBA\n * Supports: #RGB, #RRGGBB, #RRGGBBAA\n *\n * @example\n * hexToRgba(\"#FF0000\") // { r: 1, g: 0, b: 0, a: 1 }\n * hexToRgba(\"#FF000080\") // { r: 1, g: 0, b: 0, a: 0.502 }\n */\nexport function hexToRgba(hex: string): RGBAColor {\n\tconst cleanHex = hex.replace(/^#/, \"\");\n\tconst rgb = hexToRgb(hex);\n\n\tlet a = 1;\n\tif (cleanHex.length === 8) {\n\t\ta = Number.parseInt(cleanHex.slice(6, 8), 16) / 255;\n\t}\n\n\treturn { ...rgb, a };\n}\n\n/**\n * Converts a hex color to an array of RGB components [r, g, b]\n * Components are normalized to 0-1 range with 4 decimal precision\n *\n * @example\n * hexToComponents(\"#FF0000\") // [1, 0, 0]\n */\nexport function hexToComponents(hex: string): [number, number, number] {\n\tconst { r, g, b } = hexToRgb(hex);\n\treturn [\n\t\tMath.round(r * 10000) / 10000,\n\t\tMath.round(g * 10000) / 10000,\n\t\tMath.round(b * 10000) / 10000,\n\t];\n}\n","import type {\n\tColor,\n\tCubicBezier,\n\tDimension,\n\tDuration,\n\tFontFamily,\n\tFontWeight,\n\tShadow,\n} from \"@nds-design-system/design-tokens-format\";\nimport { hexToComponents } from \"@nds-design-system/design-tokens-format\";\n\n/**\n * Creates a DTCG-compliant dimension token\n *\n * @example\n * dimension(16) // 16px\n * dimension(1.5, \"rem\") // 1.5rem\n */\nexport function dimension(\n\tvalue: number,\n\tunit: \"px\" | \"rem\" = \"px\",\n): Dimension.Token {\n\treturn {\n\t\t$type: \"dimension\",\n\t\t$value: { value, unit },\n\t};\n}\n\n/**\n * Creates a DTCG-compliant font family token\n *\n * @example\n * fontFamily(\"PP Neue Montreal\") // Single font\n * fontFamily([\"PP Neue Montreal\", \"sans-serif\"]) // Font stack\n */\nexport function fontFamily(value: string | string[]): FontFamily.Token {\n\treturn {\n\t\t$type: \"fontFamily\",\n\t\t$value: Array.isArray(value) ? value : [value],\n\t};\n}\n\n/**\n * Creates a DTCG-compliant font weight token\n *\n * @example\n * fontWeight(400) // Regular\n * fontWeight(600) // Semi-bold\n * fontWeight(\"bold\") // Named weight\n */\nexport function fontWeight(\n\tvalue: number | FontWeight.RawValue,\n): FontWeight.Token {\n\treturn {\n\t\t$type: \"fontWeight\",\n\t\t$value: value,\n\t};\n}\n\n/**\n * Creates a DTCG-compliant sRGB color token from a hex value\n *\n * @example\n * srgb(\"#FF0000\") // Red color token\n * srgb(\"#FF0000\", 0.5) // Red with 50% alpha\n */\nexport function srgb(hex: `#${string}`, alpha = 1): Color.Token {\n\treturn {\n\t\t$type: \"color\",\n\t\t$value: {\n\t\t\tcolorSpace: \"srgb\",\n\t\t\tcomponents: hexToComponents(hex),\n\t\t\talpha,\n\t\t\thex,\n\t\t},\n\t};\n}\n\n/**\n * Creates a DTCG-compliant duration token\n *\n * @example\n * duration(150) // 150ms\n * duration(0.3, \"s\") // 0.3s\n */\nexport function duration(\n\tvalue: number,\n\tunit: \"ms\" | \"s\" = \"ms\",\n): Duration.Token {\n\treturn {\n\t\t$type: \"duration\",\n\t\t$value: { value, unit },\n\t};\n}\n\n/**\n * Creates a DTCG-compliant cubic-bezier easing token\n *\n * @example\n * cubicBezier(0.4, 0, 0.2, 1) // ease-out\n * cubicBezier(0.23, 1, 0.32, 1) // custom easing\n */\nexport function cubicBezier(\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): CubicBezier.Token {\n\treturn {\n\t\t$type: \"cubicBezier\",\n\t\t$value: [x1, y1, x2, y2],\n\t};\n}\n\n/**\n * Shadow layer configuration\n */\nexport interface ShadowLayer {\n\toffsetX: number;\n\toffsetY: number;\n\tblur: number;\n\tspread: number;\n\t/** Color as hex string or alias reference */\n\tcolor: `#${string}` | `{${string}}`;\n\t/** Alpha/opacity for the color (0-1, default: 1) */\n\talpha?: number;\n\tinset?: boolean;\n}\n\n/**\n * Creates a DTCG-compliant shadow token\n *\n * @example\n * shadow([{ offsetX: 0, offsetY: 1, blur: 3, spread: 0, color: \"#000000\", alpha: 0.1 }])\n * shadow([{ offsetX: 0, offsetY: 4, blur: 6, spread: -1, color: \"{primitive.color.black}\", alpha: 0.1 }])\n */\nexport function shadow(layers: ShadowLayer[]): Shadow.Token {\n\treturn {\n\t\t$type: \"shadow\",\n\t\t$value: layers.map((l) => ({\n\t\t\tcolor: l.color.startsWith(\"{\")\n\t\t\t\t? (l.color as `{${string}}`)\n\t\t\t\t: {\n\t\t\t\t\t\tcolorSpace: \"srgb\" as const,\n\t\t\t\t\t\tcomponents: hexToComponents(l.color as `#${string}`),\n\t\t\t\t\t\talpha: l.alpha ?? 1,\n\t\t\t\t\t},\n\t\t\toffsetX: { value: l.offsetX, unit: \"px\" as const },\n\t\t\toffsetY: { value: l.offsetY, unit: \"px\" as const },\n\t\t\tblur: { value: l.blur, unit: \"px\" as const },\n\t\t\tspread: { value: l.spread, unit: \"px\" as const },\n\t\t\t...(l.inset ? { inset: true } : {}),\n\t\t})),\n\t};\n}\n","import type { ThemeExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\nimport { srgb } from \"../../utils\";\n\n/**\n * Board of Peace (BoP) Theme Color Tokens\n *\n * A refined, institutional theme with warm ivory backgrounds,\n * deep navy text, and polished gold accents.\n *\n * NOTE: This theme uses inline hex values intentionally. These are brand-specific\n * colors from the BoP design system that don't map to our standard primitive palette.\n * The unique ivory, gold, and navy tones are central to the BoP brand identity.\n *\n * Design colors from Figma:\n * - Ivory: #FEFDF9 (page background)\n * - Sand: #F5F4EF (section background)\n * - Port: #111326 (primary text)\n * - Polished Gold: #A68B5E (accent/muted text)\n */\nexport const bopColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"bop\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t} satisfies ThemeExtension,\n\t\t\tbg: {\n\t\t\t\tpage: srgb(\"#FEFDF9\"),\n\t\t\t\tsection: srgb(\"#F5F4EF\"),\n\t\t\t\tmuted: srgb(\"#FEFDF9\"),\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: srgb(\"#8A6F42\"),\n\t\t\t},\n\t\t\ttext: {\n\t\t\t\tprimary: srgb(\"#111326\"),\n\t\t\t\tsecondary: srgb(\"#111326\"),\n\t\t\t\tmuted: srgb(\"#A68B5E\"),\n\t\t\t\tinverted: srgb(\"#FEFDF9\"),\n\t\t\t},\n\t\t\taccent: {\n\t\t\t\tbrand: srgb(\"#A68B5E\"),\n\t\t\t\t\"brand-soft\": srgb(\"#C4A870\"),\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\tsubtle: srgb(\"#26284B\", 0.1),\n\t\t\t\tstrong: srgb(\"#26284B\", 0.2),\n\t\t\t\tdivider: srgb(\"#26284B\", 0.1),\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\t\"primary-bg-hover\": srgb(\"#26284B\"),\n\t\t\t},\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": srgb(\"#111326\"),\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Civic Theme Color Overrides\n *\n * Matches Figma \"Civic\" collection - extends Color.\n * Civic theme with red accents for government/public sector applications.\n * Only tokens that differ from base are defined.\n */\nexport const civicColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"civic\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"29f4d62156d027717b2f2a80e95002ed749bdd38\",\n\t\t\t\t\tcollectionName: \"Civic\",\n\t\t\t\t\textendsCollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\tbg: {\n\t\t\t\tpage: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t},\n\t\t\taccent: {\n\t\t\t\tbrand: { $type: \"color\", $value: \"{primitive.color.red.900}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tprimary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.red.900}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.red.800}\" },\n\t\t\t\t},\n\t\t\t\t\"primary-outline\": {\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.red.900}\" },\n\t\t\t\t\t\"text-hover\": { $type: \"color\", $value: \"{primitive.color.red.800}\" },\n\t\t\t\t\tborder: { $type: \"color\", $value: \"{primitive.color.red.900}\" },\n\t\t\t\t\t\"border-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.red.800}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.red.900}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Dark Theme Color Overrides\n *\n * Matches Figma \"Color\" collection - Dark Mode.\n * Partial overrides for dark mode. Only tokens that differ from base are defined.\n * These get deep-merged with base tokens at runtime.\n */\nexport const darkColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"dark\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tcollectionName: \"Color\",\n\t\t\t\t\tmodeMapping: { modeName: \"Dark Mode\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t// Background tokens\n\t\t\tbg: {\n\t\t\t\tpage: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\tsection: { $type: \"color\", $value: \"{primitive.color.gray.1000}\" },\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.100}\",\n\t\t\t\t},\n\t\t\t\tmuted: { $type: \"color\", $value: \"{primitive.color.gray.900}\" },\n\t\t\t},\n\t\t\t// Card token\n\t\t\tcard: {\n\t\t\t\tbackground: { $type: \"color\", $value: \"{primitive.color.gray.800}\" },\n\t\t\t},\n\t\t\t// Text tokens\n\t\t\ttext: {\n\t\t\t\tprimary: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\tsecondary: { $type: \"color\", $value: \"{primitive.color.gray.400}\" },\n\t\t\t\tmuted: { $type: \"color\", $value: \"{primitive.color.gray.500}\" },\n\t\t\t\tinverted: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\tlink: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\"link-hover\": { $type: \"color\", $value: \"{primitive.color.gray.400}\" },\n\t\t\t},\n\t\t\t// Border tokens\n\t\t\tborder: {\n\t\t\t\tsubtle: { $type: \"color\", $value: \"{primitive.color.alpha-white.20}\" },\n\t\t\t\tstrong: { $type: \"color\", $value: \"{primitive.color.alpha-white.30}\" },\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.accent.brand}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tprimary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.gray.400}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\t\t\"text-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.1100}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"primary-outline\": {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.alpha-white.5}\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"text-hover\": { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t\tborder: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"border-hover\": { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.800}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.gray.700}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"text-hover\": { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t\tghost: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.alpha-white.5}\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.300}\" },\n\t\t\t\t\t\"text-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.100}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t// UI tokens\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.200}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.800}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.30}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"error-color\": { $type: \"color\", $value: \"{primitive.color.red.200}\" },\n\t\t\t\t\"accent-base\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.300}\",\n\t\t\t\t},\n\t\t\t\t\"accent-base-2\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.300}\",\n\t\t\t\t},\n\t\t\t\t\"accent-base-3\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.300}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Darktech Theme Color Overrides\n *\n * Dark backgrounds with cyan/tech accents.\n * Optimized for technical and dark-mode interfaces.\n *\n * References primitive color tokens for consistency.\n */\nexport const darktechColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"darktech\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t} satisfies ThemeExtension,\n\n\t\t\t// Dark backgrounds\n\t\t\tbg: {\n\t\t\t\tpage: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1100}\",\n\t\t\t\t},\n\t\t\t\tsection: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1200}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Light text for dark backgrounds\n\t\t\ttext: {\n\t\t\t\tprimary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.200}\",\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.400}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.500}\",\n\t\t\t\t},\n\t\t\t\tinverted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1100}\",\n\t\t\t\t},\n\t\t\t\tlink: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v300}\",\n\t\t\t\t},\n\t\t\t\t\"link-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v200}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Cyan/tech accent colors\n\t\t\taccent: {\n\t\t\t\tbrand: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v300}\",\n\t\t\t\t},\n\t\t\t\t\"brand-soft\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.teal.900}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Borders for dark mode\n\t\t\tborder: {\n\t\t\t\tsubtle: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t},\n\t\t\t\tstrong: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t},\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.accent.brand}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Button colors for dark mode\n\t\t\tbutton: {\n\t\t\t\t\"primary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.600}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.800}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// UI colors for dark mode\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v300}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.800}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v300}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Institution Theme Color Overrides\n *\n * Matches Figma \"Institution\" collection - extends Color.\n * Warm institutional theme with brown and green accents.\n * Only tokens that differ from base are defined.\n */\nexport const institutionColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"institution\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"307b920325965d277d6cbfe0c1573b413f86baf4\",\n\t\t\t\t\tcollectionName: \"Institution\",\n\t\t\t\t\textendsCollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\tbg: {\n\t\t\t\tpage: { $type: \"color\", $value: \"{primitive.color.brown.50}\" },\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t},\n\t\t\ttext: {\n\t\t\t\tprimary: { $type: \"color\", $value: \"{primitive.color.gray.1000}\" },\n\t\t\t\tsecondary: { $type: \"color\", $value: \"{primitive.color.brown.600}\" },\n\t\t\t},\n\t\t\taccent: {\n\t\t\t\tbrand: { $type: \"color\", $value: \"{primitive.color.green.v400}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tprimary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.green.v400}\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.green.v300}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"primary-outline\": {\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.green.v400}\" },\n\t\t\t\t\t\"text-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.green.v300}\",\n\t\t\t\t\t},\n\t\t\t\t\tborder: { $type: \"color\", $value: \"{primitive.color.green.v400}\" },\n\t\t\t\t\t\"border-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.green.v300}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.brown.50}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t},\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Oceana Theme Color Overrides\n *\n * Ocean-inspired cool blue palette.\n * Fresh, clean aesthetic for water/coastal content.\n *\n * References primitive color tokens for consistency.\n */\nexport const oceanaColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"oceana\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"79e46a4d616f3e2d07556a58f4253ed909bca3b7\",\n\t\t\t\t\tcollectionName: \"Oceana\",\n\t\t\t\t\textendsCollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\n\t\t\t// Cool blue-tinted backgrounds\n\t\t\tbg: {\n\t\t\t\tpage: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.50}\",\n\t\t\t\t},\n\t\t\t\tsection: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.100}\",\n\t\t\t\t},\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.200}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.900}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Text colors with cool tint\n\t\t\ttext: {\n\t\t\t\tprimary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.steel.1100}\",\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.steel.700}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.steel.500}\",\n\t\t\t\t},\n\t\t\t\tinverted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.50}\",\n\t\t\t\t},\n\t\t\t\tlink: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.600}\",\n\t\t\t\t},\n\t\t\t\t\"link-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.800}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Ocean blue accents\n\t\t\taccent: {\n\t\t\t\tbrand: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.600}\",\n\t\t\t\t},\n\t\t\t\t\"brand-soft\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.50}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Borders\n\t\t\tborder: {\n\t\t\t\tsubtle: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\tstrong: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.20}\",\n\t\t\t\t},\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.accent.brand}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Button colors\n\t\t\tbutton: {\n\t\t\t\t\"primary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.800}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.100}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// UI colors\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.600}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.100}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.200}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.20}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.600}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Recreation Theme Color Overrides\n *\n * Warm brown/beige palette with earthy tones.\n * Inviting aesthetic for recreational and lifestyle content.\n *\n * References primitive color tokens for consistency.\n */\nexport const recreationColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"recreation\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"cf9e75990b12bf4551bf2b165ec51e5ce594fecf\",\n\t\t\t\t\tcollectionName: \"Recreation\",\n\t\t\t\t\textendsCollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\n\t\t\t// Warm beige backgrounds\n\t\t\tbg: {\n\t\t\t\tpage: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.50}\",\n\t\t\t\t},\n\t\t\t\tsection: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.100}\",\n\t\t\t\t},\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.200}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.900}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Text colors with warm tint\n\t\t\ttext: {\n\t\t\t\tprimary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.1100}\",\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.700}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.500}\",\n\t\t\t\t},\n\t\t\t\tinverted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.50}\",\n\t\t\t\t},\n\t\t\t\tlink: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t\t\"link-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.800}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Earthy brown accents\n\t\t\taccent: {\n\t\t\t\tbrand: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t\t\"brand-soft\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.100}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Borders\n\t\t\tborder: {\n\t\t\t\tsubtle: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\tstrong: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.20}\",\n\t\t\t\t},\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.accent.brand}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Button colors\n\t\t\tbutton: {\n\t\t\t\t\"primary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.700}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.100}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// UI colors\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.100}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.200}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.20}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Base Surface Tokens\n *\n * Defines surface styling properties like border radius and stroke width.\n */\nexport const baseSurfaceTokens = {\n\tsemantic: {\n\t\tsurface: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"surface\",\n\t\t\t\t\tname: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"4f6dd00a848af32a4163fde4d543eb933824813e\",\n\t\t\t\t\tcollectionName: \"Surface\",\n\t\t\t\t\tmodeMapping: { modeName: \"Mode 1\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t/**\n\t\t\t * UI Radius Tokens\n\t\t\t *\n\t\t\t * Base radius values for UI components. Individual components (button, card, input)\n\t\t\t * extend from these values, allowing theme variants to override once and affect all.\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.radii.4}\",\n\t\t\t\t\t\t$description: \"Small UI radius (4px) - tight corners\",\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.radii.6}\",\n\t\t\t\t\t\t$description: \"Medium UI radius (6px) - default corners\",\n\t\t\t\t\t},\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.radii.8}\",\n\t\t\t\t\t\t$description: \"Large UI radius (8px) - rounded corners\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tradius: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{semantic.surface.ui.radius.medium}\",\n\t\t\t\t\t$description: \"Card border radius - extends from ui.radius.medium\",\n\t\t\t\t},\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{semantic.surface.ui.radius.small}\",\n\t\t\t\t\t\t$description: \"Button radius for small size\",\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{semantic.surface.ui.radius.medium}\",\n\t\t\t\t\t\t$description: \"Button radius for medium size\",\n\t\t\t\t\t},\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{semantic.surface.ui.radius.large}\",\n\t\t\t\t\t\t$description: \"Button radius for large size\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t\ttooltip: {\n\t\t\t\tradius: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{semantic.surface.ui.radius.small}\",\n\t\t\t\t\t$description:\n\t\t\t\t\t\t\"Tooltip border radius - uses small UI radius for tight corners\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * Overlay Surface Tokens\n\t\t\t *\n\t\t\t * Surface properties for floating UI components (popover, modal, dropdown, menu).\n\t\t\t */\n\t\t\toverlay: {\n\t\t\t\tradius: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{semantic.surface.ui.radius.large}\",\n\t\t\t\t\t$description: \"Overlay border radius - uses large UI radius (8px)\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Framed Surface Tokens\n *\n * A framed surface theme with heavier card borders and no button radius.\n */\nexport const framedSurfaceTokens = {\n\tsemantic: {\n\t\tsurface: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"surface\",\n\t\t\t\t\tname: \"framed\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"8d2f720d2f15a79f6caf1c9e1332295eae600152\",\n\t\t\t\t\tcollectionName: \"Framed\",\n\t\t\t\t\textendsCollectionKey: \"4f6dd00a848af32a4163fde4d543eb933824813e\",\n\t\t\t\t\tmodeMapping: { modeName: \"Mode 1\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t/**\n\t\t\t * Framed UI Radius - no radius (0px) for crisp, framed appearance\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: { $type: \"dimension\", $value: \"{primitive.radii.0}\" },\n\t\t\t\t\tmedium: { $type: \"dimension\", $value: \"{primitive.radii.0}\" },\n\t\t\t\t\tlarge: { $type: \"dimension\", $value: \"{primitive.radii.0}\" },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.2}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Sharp Surface Tokens\n *\n * A sharper surface theme with minimal border radius.\n */\nexport const sharpSurfaceTokens = {\n\tsemantic: {\n\t\tsurface: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"surface\",\n\t\t\t\t\tname: \"sharp\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"89b2727e714b609da1a6da3fb39a02fece2c5c87\",\n\t\t\t\t\tcollectionName: \"Sharp\",\n\t\t\t\t\textendsCollectionKey: \"4f6dd00a848af32a4163fde4d543eb933824813e\",\n\t\t\t\t\tmodeMapping: { modeName: \"Mode 1\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t/**\n\t\t\t * Sharp UI Radius - minimal corners (2px)\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: { $type: \"dimension\", $value: \"{primitive.radii.2}\" },\n\t\t\t\t\tmedium: { $type: \"dimension\", $value: \"{primitive.radii.2}\" },\n\t\t\t\t\tlarge: { $type: \"dimension\", $value: \"{primitive.radii.2}\" },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Soft Surface Tokens\n *\n * A soft surface theme with large rounded corners and minimal strokes.\n */\nexport const softSurfaceTokens = {\n\tsemantic: {\n\t\tsurface: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"surface\",\n\t\t\t\t\tname: \"soft\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"e8c7bcd55a82a80373e500114ab1c648eaee98e0\",\n\t\t\t\t\tcollectionName: \"Soft\",\n\t\t\t\t\textendsCollectionKey: \"4f6dd00a848af32a4163fde4d543eb933824813e\",\n\t\t\t\t\tmodeMapping: { modeName: \"Mode 1\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t/**\n\t\t\t * Soft UI Radius - all corners are heavily rounded (20px)\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: { $type: \"dimension\", $value: \"{primitive.radii.20}\" },\n\t\t\t\t\tmedium: { $type: \"dimension\", $value: \"{primitive.radii.20}\" },\n\t\t\t\t\tlarge: { $type: \"dimension\", $value: \"{primitive.radii.20}\" },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.0}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type {\n\tFigmaSyncExtension,\n\tThemeExtension,\n\tUtilityExtension,\n} from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Base Typography Tokens\n *\n * Property-based typography tokens organized into Heading, Text, and UI groups.\n * Theme variants (nds-brand, darktech, recreation) extend these with overrides.\n *\n * Each group uses $extensions[\"nds.utility\"] to mark it for CSS utility generation.\n * The generator composes inherited properties (font, weight) with local properties\n * (size, line-height, tracking) to create complete typography utilities.\n *\n * Responsive utilities are enabled via `responsive: true` which uses nested groups\n * (lg, md, sm) to generate breakpoint-specific variants.\n *\n * Structure based on Figma \"Typography\" collection with nested breakpoint groups.\n */\nexport const baseTypographyTokens = {\n\tsemantic: {\n\t\ttypography: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"typography\",\n\t\t\t\t\tname: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"96f5387fdb03cd6bbd3a7de7ead150f46afac330\",\n\t\t\t\t\tcollectionName: \"Typography\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeExtension & FigmaSyncExtension,\n\n\t\t\t// =====================================================================\n\t\t\t// HEADING GROUP\n\t\t\t// Shared font properties for all headings\n\t\t\t// =====================================================================\n\t\t\theading: {\n\t\t\t\tfont: {\n\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t$value: \"{primitive.font-family.inter-tight}\",\n\t\t\t\t\t$description: \"Headline font family - shared across all headings\",\n\t\t\t\t},\n\t\t\t\tweight: {\n\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t$value: \"{primitive.font-weight.semibold}\",\n\t\t\t\t\t$description: \"Headline weight (600) - shared across all headings\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H1 Display (XL) - Large hero typography\n\t\t\th1: {\n\t\t\t\tdisplay: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-h1-display\",\n\t\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tlg: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.128}\",\n\t\t\t\t\t\t\t$description: \"H1 display font size (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.128}\",\n\t\t\t\t\t\t\t$description: \"H1 display line height (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.128}\",\n\t\t\t\t\t\t\t$description: \"H1 display letter spacing (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.96}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.96}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.96}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.64}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.64}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.64}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Regular H1 - flattened breakpoint structure\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h1\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.96}\",\n\t\t\t\t\t\t$description: \"H1 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.96}\",\n\t\t\t\t\t\t$description: \"H1 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.96}\",\n\t\t\t\t\t\t$description: \"H1 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.72}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.72}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.72}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.48}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.48}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.48}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H2\n\t\t\th2: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h2\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.72}\",\n\t\t\t\t\t\t$description: \"H2 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.72}\",\n\t\t\t\t\t\t$description: \"H2 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.72}\",\n\t\t\t\t\t\t$description: \"H2 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.64}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.64}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.64}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.48}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.48}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.48}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H3\n\t\t\th3: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h3\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.64}\",\n\t\t\t\t\t\t$description: \"H3 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.64}\",\n\t\t\t\t\t\t$description: \"H3 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.64}\",\n\t\t\t\t\t\t$description: \"H3 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.48}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.48}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.48}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.32}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.32}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.32}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H4\n\t\t\th4: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h4\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.48}\",\n\t\t\t\t\t\t$description: \"H4 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.48}\",\n\t\t\t\t\t\t$description: \"H4 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.48}\",\n\t\t\t\t\t\t$description: \"H4 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.32}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.32}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.32}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.24}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.24}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.24}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H5\n\t\t\th5: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h5\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.32}\",\n\t\t\t\t\t\t$description: \"H5 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.32}\",\n\t\t\t\t\t\t$description: \"H5 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.32}\",\n\t\t\t\t\t\t$description: \"H5 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.24}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.24}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.24}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.21}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.21}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.21}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// =====================================================================\n\t\t\t// TEXT GROUP\n\t\t\t// Body text, overline, and caption\n\t\t\t// =====================================================================\n\t\t\tbody: {\n\t\t\t\tfont: {\n\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t$value: \"{primitive.font-family.inter}\",\n\t\t\t\t\t$description: \"Body font family\",\n\t\t\t\t},\n\t\t\t\tweight: {\n\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t$value: \"{primitive.font-weight.regular}\",\n\t\t\t\t\t$description: \"Body font weight\",\n\t\t\t\t},\n\t\t\t\t// Body Large - responsive typography\n\t\t\t\tlg: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-body-lg\",\n\t\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"body.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tlg: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.21}\",\n\t\t\t\t\t\t\t$description: \"Body lg font size (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.21}\",\n\t\t\t\t\t\t\t$description: \"Body lg line height (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.21}\",\n\t\t\t\t\t\t\t$description: \"Body lg letter spacing (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.18}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.18}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.18}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Body Medium - responsive typography\n\t\t\t\tmd: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-body-md\",\n\t\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"body.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tlg: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.18}\",\n\t\t\t\t\t\t\t$description: \"Body md font size (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.18}\",\n\t\t\t\t\t\t\t$description: \"Body md line height (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.18}\",\n\t\t\t\t\t\t\t$description: \"Body md letter spacing (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Body Small - responsive typography\n\t\t\t\tsm: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-body-sm\",\n\t\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"body.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tlg: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t\t$description: \"Body sm font size (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t\t$description: \"Body sm line height (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.14}\",\n\t\t\t\t\t\t\t$description: \"Body sm letter spacing (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.12}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.12}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.12}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Overline - Small caps/label text\n\t\t\toverline: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-overline\",\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tsize: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t$description: \"Overline font size\",\n\t\t\t\t},\n\t\t\t\t\"line-height\": {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.line-height.24}\",\n\t\t\t\t\t$description: \"Overline line height\",\n\t\t\t\t},\n\t\t\t\ttracking: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.letter-spacing.14}\",\n\t\t\t\t\t$description: \"Overline letter spacing\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Caption - Small supplementary text\n\t\t\tcaption: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-caption\",\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tsize: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.font-size.11}\",\n\t\t\t\t\t$description: \"Caption font size\",\n\t\t\t\t},\n\t\t\t\t\"line-height\": {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.line-height.11}\",\n\t\t\t\t\t$description: \"Caption line height\",\n\t\t\t\t},\n\t\t\t\ttracking: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.letter-spacing.11}\",\n\t\t\t\t\t$description: \"Caption letter spacing\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// =====================================================================\n\t\t\t// UI GROUP\n\t\t\t// Button, link, and interactive element typography\n\t\t\t// =====================================================================\n\t\t\tui: {\n\t\t\t\tbutton: {\n\t\t\t\t\tfont: {\n\t\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t\t$value: \"{primitive.font-family.inter}\",\n\t\t\t\t\t\t$description: \"Button font family\",\n\t\t\t\t\t},\n\t\t\t\t\tweight: {\n\t\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t\t$value: \"{primitive.font-weight.medium}\",\n\t\t\t\t\t\t$description: \"Button font weight\",\n\t\t\t\t\t},\n\t\t\t\t\tlg: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-button-lg\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.button.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.button.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.18}\",\n\t\t\t\t\t\t\t$description: \"lg button font size\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.18}\",\n\t\t\t\t\t\t\t$description: \"lg button line height\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.button}\",\n\t\t\t\t\t\t\t$description: \"lg button letter spacing\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-button-md\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.button.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.button.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.16}\",\n\t\t\t\t\t\t\t$description: \"md button font size\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.16}\",\n\t\t\t\t\t\t\t$description: \"md button line height\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.button}\",\n\t\t\t\t\t\t\t$description: \"md button letter spacing\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-button-sm\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.button.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.button.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t\t$description: \"sm button font size\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t\t$description: \"sm button line height\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.button}\",\n\t\t\t\t\t\t\t$description: \"sm button letter spacing\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlink: {\n\t\t\t\t\tweight: {\n\t\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t\t$value: \"{primitive.font-weight.medium}\",\n\t\t\t\t\t\t$description: \"Link font weight\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlabel: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-ui-label\",\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"ui.label.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"ui.label.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tfont: {\n\t\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t\t$value: \"{primitive.font-family.inter}\",\n\t\t\t\t\t\t$description: \"Label font family\",\n\t\t\t\t\t},\n\t\t\t\t\tweight: {\n\t\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t\t$value: \"{primitive.font-weight.medium}\",\n\t\t\t\t\t\t$description: \"Label font weight\",\n\t\t\t\t\t},\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t$description: \"Label font size\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t$description: \"Label line height\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Text - General UI text ramp for buttons, captions, and other UI elements\n\t\t\t\ttext: {\n\t\t\t\t\tfont: {\n\t\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t\t$value: \"{primitive.font-family.inter}\",\n\t\t\t\t\t\t$description: \"UI text font family\",\n\t\t\t\t\t},\n\t\t\t\t\tweight: {\n\t\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t\t$value: \"{primitive.font-weight.medium}\",\n\t\t\t\t\t\t$description: \"UI text font weight\",\n\t\t\t\t\t},\n\t\t\t\t\txs: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-text-xs\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.text.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.text.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.12}\",\n\t\t\t\t\t\t\t$description:\n\t\t\t\t\t\t\t\t\"Extra small UI text font size (12px) - for small buttons, captions\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.12}\",\n\t\t\t\t\t\t\t$description: \"Extra small UI text line height (16px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-text-sm\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.text.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.text.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t\t$description:\n\t\t\t\t\t\t\t\t\"Small UI text font size (14px) - for default buttons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t\t$description: \"Small UI text line height (20px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-text-md\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.text.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.text.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.16}\",\n\t\t\t\t\t\t\t$description:\n\t\t\t\t\t\t\t\t\"Medium UI text font size (16px) - for large buttons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.16}\",\n\t\t\t\t\t\t\t$description: \"Medium UI text line height (24px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tlg: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-text-lg\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.text.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.text.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.18}\",\n\t\t\t\t\t\t\t$description:\n\t\t\t\t\t\t\t\t\"Large UI text font size (18px) - optional larger size\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.28}\",\n\t\t\t\t\t\t\t$description: \"Large UI text line height (28px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type {\n\tBreakpointExtension,\n\tFigmaSyncExtension,\n\tGridExtension,\n\tThemeExtension,\n} from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Base Spatial Tokens\n *\n * Layout and spacing tokens for grid systems, sections, and cards.\n * These provide the foundational spatial structure for responsive layouts.\n * Other spatial themes (airy, balanced, compact, etc.) extend from this base.\n *\n * Breakpoint sizes:\n * - large: Desktop (1440px+)\n * - medium: Tablet (768px - 1439px)\n * - small: Mobile (< 768px)\n */\nexport const baseSpatialTokens = {\n\tsemantic: {\n\t\tspatial: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"spatial\",\n\t\t\t\t\tname: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"145a1dde6a2edbd03b4e1fe9bbc9269e90bfe5f1\",\n\t\t\t\t\tcollectionName: \"Spatial\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeExtension & FigmaSyncExtension,\n\t\t\tgrid: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.grid\": {\n\t\t\t\t\t\tgenerateUtilities: true,\n\t\t\t\t\t},\n\t\t\t\t} satisfies GridExtension,\n\t\t\t\tlarge: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.breakpoint\": {\n\t\t\t\t\t\t\tname: \"lg\",\n\t\t\t\t\t\t\tminWidth: \"{primitive.breakpoint.lg}\",\n\t\t\t\t\t\t\tdescription: \"Desktop (1440px+)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies BreakpointExtension,\n\t\t\t\t\tmargin: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.72}\",\n\t\t\t\t\t\t$description: \"Outer margin for large breakpoint grid\",\n\t\t\t\t\t},\n\t\t\t\t\tgutter: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Gap between columns for large breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t\tcolumns: {\n\t\t\t\t\t\t$type: \"number\",\n\t\t\t\t\t\t$value: 24,\n\t\t\t\t\t\t$description: \"Number of columns for large breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.breakpoint\": {\n\t\t\t\t\t\t\tname: \"md\",\n\t\t\t\t\t\t\tminWidth: \"{primitive.breakpoint.md}\",\n\t\t\t\t\t\t\tdescription: \"Tablet (768px - 1439px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies BreakpointExtension,\n\t\t\t\t\tmargin: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.56}\",\n\t\t\t\t\t\t$description: \"Outer margin for medium breakpoint grid\",\n\t\t\t\t\t},\n\t\t\t\t\tgutter: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.20}\",\n\t\t\t\t\t\t$description: \"Gap between columns for medium breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t\tcolumns: {\n\t\t\t\t\t\t$type: \"number\",\n\t\t\t\t\t\t$value: 12,\n\t\t\t\t\t\t$description: \"Number of columns for medium breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsmall: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.breakpoint\": {\n\t\t\t\t\t\t\tname: \"sm\",\n\t\t\t\t\t\t\tminWidth: \"{primitive.breakpoint.sm}\",\n\t\t\t\t\t\t\tdescription: \"Mobile (< 768px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies BreakpointExtension,\n\t\t\t\t\tmargin: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Outer margin for small breakpoint grid\",\n\t\t\t\t\t},\n\t\t\t\t\tgutter: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t$description: \"Gap between columns for small breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t\tcolumns: {\n\t\t\t\t\t\t$type: \"number\",\n\t\t\t\t\t\t$value: 4,\n\t\t\t\t\t\t$description: \"Number of columns for small breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tsection: {\n\t\t\t\tlarge: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.64}\",\n\t\t\t\t\t\t$description: \"Gap between elements in large sections\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.128}\",\n\t\t\t\t\t\t$description: \"Vertical padding for large sections\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.56}\",\n\t\t\t\t\t\t$description: \"Gap between elements in medium sections\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.96}\",\n\t\t\t\t\t\t$description: \"Vertical padding for medium sections\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsmall: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t$description: \"Gap between elements in small sections\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.64}\",\n\t\t\t\t\t\t$description: \"Vertical padding for small sections\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tlarge: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t$description: \"Internal gap for large cards\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Internal padding for large cards\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsmall: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t$description: \"Internal gap for small cards\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t$description: \"Internal padding for small cards\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * UI Control Tokens\n\t\t\t *\n\t\t\t * Spacing for form controls and UI elements.\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tcontrol: {\n\t\t\t\t\t\"vertical-padding\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t$description: \"Vertical padding for form controls\",\n\t\t\t\t\t},\n\t\t\t\t\t\"horizontal-padding\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t$description: \"Horizontal padding for form controls\",\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t$description: \"Gap between control elements\",\n\t\t\t\t\t},\n\t\t\t\t\theight: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.36}\",\n\t\t\t\t\t\t\t$description: \"Height for small form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.48}\",\n\t\t\t\t\t\t\t$description: \"Height for medium form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.56}\",\n\t\t\t\t\t\t\t$description: \"Height for large form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for small form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for medium form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.20}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for large form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for small form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for medium form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for large form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tbutton: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t\"icon-text\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.6}\",\n\t\t\t\t\t\t\t$description: \"Gap between button icon and text\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"button-group\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Gap between buttons in a group\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t// Figma Button sizes: sm=32px, default=36px, lg=40px\n\t\t\t\t\theight: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Height for small buttons (32px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.36}\",\n\t\t\t\t\t\t\t$description: \"Height for medium/default buttons (36px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Height for large buttons (40px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for small buttons (12px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for medium buttons (16px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for large buttons (24px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for small buttons (8px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for medium buttons (8px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for large buttons (10px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tinput: {\n\t\t\t\t\theight: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.height.small}\",\n\t\t\t\t\t\t\t$description: \"Height for small input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.height.medium}\",\n\t\t\t\t\t\t\t$description: \"Height for medium input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.height.large}\",\n\t\t\t\t\t\t\t$description: \"Height for large input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-x.small}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for small input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-x.medium}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for medium input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-x.large}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for large input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-y.small}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for small input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-y.medium}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for medium input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-y.large}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for large input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"input-group\": {\n\t\t\t\t\theight: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.height.small}\",\n\t\t\t\t\t\t\t$description: \"Height for small input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.height.medium}\",\n\t\t\t\t\t\t\t$description: \"Height for medium input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.height.large}\",\n\t\t\t\t\t\t\t$description: \"Height for large input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-x.small}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for small input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-x.medium}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for medium input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-x.large}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for large input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-y.small}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for small input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-y.medium}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for medium input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-y.large}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for large input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\tblock: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.gap}\",\n\t\t\t\t\t\t\t$description: \"Gap between block addon and input in input group\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * Component Spacing Tokens\n\t\t\t *\n\t\t\t * Spacing for specific components (padding, gap).\n\t\t\t */\n\t\t\tcomponent: {\n\t\t\t\tcard: {\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t\t$description: \"Padding for small cards\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Padding for medium cards\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Padding for large cards\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Internal gap for cards\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfeature: {\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Padding for small features\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Padding for medium features\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.48}\",\n\t\t\t\t\t\t\t$description: \"Padding for large features\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Gap between icon and content in features\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttestimonial: {\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t$description: \"Padding for testimonials\",\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Gap between quote and attribution\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tform: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t\"field-field\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.20}\",\n\t\t\t\t\t\t\t$description: \"Gap between form fields\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"label-field\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Gap between label and field\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"field-button\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t\t$description: \"Gap between field and submit button\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taccordion: {\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.28}\",\n\t\t\t\t\t\t$description: \"Vertical padding for accordion items\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttooltip: {\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t$description: \"Horizontal padding for tooltip content\",\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.6}\",\n\t\t\t\t\t\t$description: \"Vertical padding for tooltip content\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Overlay Spacing Tokens\n\t\t\t\t *\n\t\t\t\t * Spacing for floating UI components (popover, modal, dropdown, menu).\n\t\t\t\t */\n\t\t\t\toverlay: {\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t$description: \"Padding for overlay containers (16px)\",\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t$description: \"Gap between overlay content elements (16px)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tnavbar: {\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tmobile: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.20}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for mobile navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttablet: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for tablet navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdesktop: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for desktop navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tmobile: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for mobile navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttablet: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for tablet navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdesktop: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for desktop navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\tlinks: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Gap between navbar links\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tactions: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Gap between navbar actions\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"mobile-menu\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Gap in mobile menu items\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Video Player Spacing Tokens\n\t\t\t\t *\n\t\t\t\t * Spacing for video player controls, captions, and overlays.\n\t\t\t\t */\n\t\t\t\t\"video-player\": {\n\t\t\t\t\tcontrols: {\n\t\t\t\t\t\theight: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.48}\",\n\t\t\t\t\t\t\t$description: \"Height of video player controls bar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpadding: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Padding inside controls bar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgap: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Gap between control buttons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcaption: {\n\t\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for caption text\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for caption text\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"offset-bottom\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.64}\",\n\t\t\t\t\t\t\t$description: \"Distance from bottom of video to caption\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"close-button\": {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Size of close button\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\toffset: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Offset from top-right corner\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * Prose Tokens\n\t\t\t *\n\t\t\t * Spacing for prose/content blocks.\n\t\t\t */\n\t\t\tprose: {\n\t\t\t\t\"heading-gap\": {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.spacing.36}\",\n\t\t\t\t\t$description: \"Gap before headings in prose\",\n\t\t\t\t},\n\t\t\t\t\"block-gap\": {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.spacing.96}\",\n\t\t\t\t\t$description: \"Gap between prose blocks\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * Content Layout Tokens\n\t\t\t *\n\t\t\t * Responsive content width patterns for the 12-column grid.\n\t\t\t * Generates utilities: grid-content-narrow, grid-content-medium, grid-content-wide\n\t\t\t */\n\t\t\tlayout: {\n\t\t\t\tnarrow: {\n\t\t\t\t\t$description: \"Narrow centered content (reading/mission statements)\",\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 8 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 3 },\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 8 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 3 },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\t$description: \"Medium centered content (forms/general)\",\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 8 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 3 },\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 10 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 2 },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twide: {\n\t\t\t\t\t$description: \"Wide content (dashboards/tables)\",\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 10 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 2 },\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 12 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 1 },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","/**\n * Theme Registry\n *\n * Maps theme names to token modules for type-safe theme selection.\n */\n\n// Import color themes\nimport { baseColorTokens } from \"./semantic/color/base\";\nimport { bopColorTokens } from \"./semantic/color/bop\";\nimport { civicColorTokens } from \"./semantic/color/civic\";\nimport { darkColorTokens } from \"./semantic/color/dark\";\nimport { darktechColorTokens } from \"./semantic/color/darktech\";\nimport { institutionColorTokens } from \"./semantic/color/institution\";\nimport { oceanaColorTokens } from \"./semantic/color/oceana\";\nimport { recreationColorTokens } from \"./semantic/color/recreation\";\nimport { airySpatialTokens } from \"./semantic/spatial/airy\";\nimport { balancedSpatialTokens } from \"./semantic/spatial/balanced\";\n// Import spatial themes\nimport { baseSpatialTokens } from \"./semantic/spatial/base\";\nimport { bopSpatialTokens } from \"./semantic/spatial/bop\";\nimport { compactSpatialTokens } from \"./semantic/spatial/compact\";\nimport { customSpatialTokens } from \"./semantic/spatial/custom\";\n// Import surface themes\nimport { baseSurfaceTokens } from \"./semantic/surface/base\";\nimport { framedSurfaceTokens } from \"./semantic/surface/framed\";\nimport { sharpSurfaceTokens } from \"./semantic/surface/sharp\";\nimport { softSurfaceTokens } from \"./semantic/surface/soft\";\n// Import typography themes\nimport {\n\tbaseTypographyTokens,\n\tdarktechTypographyTokens,\n\tndsBrandTypographyTokens,\n\trecreationTypographyTokens,\n} from \"./semantic/typography\";\nimport type { TokenModule } from \"./types\";\n\n/**\n * Color theme registry - maps names to token modules\n */\nexport const colorThemes = {\n\tbase: baseColorTokens,\n\tbop: bopColorTokens,\n\tcivic: civicColorTokens,\n\tdark: darkColorTokens,\n\tdarktech: darktechColorTokens,\n\tinstitution: institutionColorTokens,\n\toceana: oceanaColorTokens,\n\trecreation: recreationColorTokens,\n} as const satisfies Record<string, TokenModule>;\n\n/**\n * Surface theme registry - maps names to token modules\n */\nexport const surfaceThemes = {\n\tbase: baseSurfaceTokens,\n\tsharp: sharpSurfaceTokens,\n\tframed: framedSurfaceTokens,\n\tsoft: softSurfaceTokens,\n} as const satisfies Record<string, TokenModule>;\n\n/**\n * Typography theme registry - maps names to token modules\n * Property-based typography tokens with theme overrides\n */\nexport const typographyThemes = {\n\tbase: baseTypographyTokens,\n\t\"nds-brand\": ndsBrandTypographyTokens,\n\tdarktech: darktechTypographyTokens,\n\trecreation: recreationTypographyTokens,\n} as const satisfies Record<string, TokenModule>;\n\n/**\n * Spatial theme registry - maps names to token modules\n */\nexport const spatialThemes = {\n\tbase: baseSpatialTokens,\n\tairy: airySpatialTokens,\n\tbalanced: balancedSpatialTokens,\n\tbop: bopSpatialTokens,\n\tcompact: compactSpatialTokens,\n\tcustom: customSpatialTokens,\n} as const satisfies Record<string, TokenModule>;\n\n/**\n * Valid color theme names\n */\nexport type ColorThemeName = keyof typeof colorThemes;\n\n/**\n * Valid surface theme names\n */\nexport type SurfaceThemeName = keyof typeof surfaceThemes;\n\n/**\n * Valid typography theme names\n */\nexport type TypographyThemeName = keyof typeof typographyThemes;\n\n/**\n * Valid spatial theme names\n */\nexport type SpatialThemeName = keyof typeof spatialThemes;\n\n/**\n * All available color theme names\n */\nexport const colorThemeNames = Object.keys(colorThemes) as ColorThemeName[];\n\n/**\n * All available surface theme names\n */\nexport const surfaceThemeNames = Object.keys(\n\tsurfaceThemes,\n) as SurfaceThemeName[];\n\n/**\n * All available typography theme names\n */\nexport const typographyThemeNames = Object.keys(\n\ttypographyThemes,\n) as TypographyThemeName[];\n\n/**\n * All available spatial theme names\n */\nexport const spatialThemeNames = Object.keys(\n\tspatialThemes,\n) as SpatialThemeName[];\n\n/**\n * Get color token module by name\n */\nexport function getColorTheme(name: ColorThemeName): TokenModule {\n\treturn colorThemes[name];\n}\n\n/**\n * Get surface token module by name\n */\nexport function getSurfaceTheme(name: SurfaceThemeName): TokenModule {\n\treturn surfaceThemes[name];\n}\n\n/**\n * Get spatial token module by name\n */\nexport function getSpatialTheme(name: SpatialThemeName): TokenModule {\n\treturn spatialThemes[name];\n}\n\n/**\n * Get typography token module by name\n */\nexport function getTypographyTheme(name: TypographyThemeName): TokenModule {\n\treturn typographyThemes[name];\n}\n","/**\n * Theme Resolver\n *\n * Resolves token references and merges extended collections with their bases.\n * Works with the token-server API collection format.\n */\n\nimport type {\n\tAPICollection,\n\tCollectionDefinition,\n\tCollectionTokenValue,\n\tColorValue,\n\tResolvedTokenValue,\n\tTokenReference,\n\tTokenSet,\n} from \"../collections/types\";\nimport {\n\tapiCollectionToDefinition,\n\tisColorValue,\n\tisDimensionValue,\n\tisTokenReference,\n\tparseTokenReference,\n} from \"../collections/types\";\nimport type { NestedStringRecord } from \"./types\";\n\n/**\n * Resolved collection - all references resolved to CSS values\n */\nexport interface ResolvedCollection {\n\tid: string;\n\tname: string;\n\t/** Flat token map: \"color-bg-page\" -> \"color(srgb ...)\" */\n\tflatTokens: Record<string, string>;\n\t/** Nested token structure: { color: { bg: { page: \"color(srgb ...)\" } } } */\n\tnestedTokens: NestedStringRecord;\n}\n\n/**\n * Check if a value is a token value object (has $type and $value)\n */\nfunction isTokenValue(value: unknown): value is CollectionTokenValue {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst obj = value as Record<string, unknown>;\n\treturn \"$type\" in obj && \"$value\" in obj;\n}\n\n/**\n * Flatten nested token structure to flat key-value pairs\n * e.g., { tokens: { \"color-bg-page\": { $type, $value } } } -> { \"color-bg-page\": { $type, $value } }\n */\nexport function flattenCollectionTokens(\n\ttokens: Record<string, TokenSet | CollectionTokenValue>,\n): Record<string, CollectionTokenValue> {\n\tconst flat: Record<string, CollectionTokenValue> = {};\n\n\tfunction traverse(obj: Record<string, unknown>, prefix = \"\"): void {\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\t// Skip $type at group level\n\t\t\tif (key === \"$type\" && typeof value === \"string\") continue;\n\n\t\t\tconst fullKey = prefix ? `${prefix}-${key}` : key;\n\n\t\t\tif (isTokenValue(value)) {\n\t\t\t\tflat[fullKey] = value;\n\t\t\t} else if (typeof value === \"object\" && value !== null) {\n\t\t\t\ttraverse(value as Record<string, unknown>, fullKey);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Handle wrapper like { tokens: { ... } }\n\tif (\"tokens\" in tokens && typeof tokens.tokens === \"object\") {\n\t\ttraverse(tokens.tokens as Record<string, unknown>);\n\t} else {\n\t\ttraverse(tokens);\n\t}\n\n\treturn flat;\n}\n\n/**\n * Resolve all token references in a collection\n */\nexport function resolveCollectionReferences(\n\tcollection: CollectionDefinition,\n\tallTokens: Map<string, CollectionTokenValue>,\n): ResolvedCollection {\n\tconst flatTokens: Record<string, string> = {};\n\tconst collectionTokens = flattenCollectionTokens(collection.tokens);\n\n\tfor (const [name, token] of Object.entries(collectionTokens)) {\n\t\tconst resolvedValue = resolveTokenValue(token.$value, allTokens, new Set());\n\t\tflatTokens[name] = formatValueToCSS(resolvedValue, token.$type);\n\t}\n\n\treturn {\n\t\tid: collection.id,\n\t\tname: collection.name,\n\t\tflatTokens,\n\t\tnestedTokens: flatToNested(flatTokens),\n\t};\n}\n\n/**\n * Convert a token reference name to a CSS variable reference\n * e.g., \"primitive.color.gray.50\" -> \"var(--color-gray-50)\"\n * Strips the \"primitive.\" prefix since CSS vars don't include it\n */\nfunction tokenRefToCSSVar(refName: string): string {\n\t// Strip \"primitive.\" prefix if present - CSS vars don't include it\n\tconst cleanName = refName.replace(/^primitive\\./, \"\");\n\tconst cssVarName = cleanName.replace(/\\./g, \"-\");\n\treturn `var(--${cssVarName})`;\n}\n\n/**\n * Resolve a token value, following references as needed\n * When a reference can't be found in the token map, it's converted to a CSS variable reference\n */\nfunction resolveTokenValue(\n\tvalue: ResolvedTokenValue | TokenReference,\n\tallTokens: Map<string, CollectionTokenValue>,\n\tvisited: Set<string>,\n): ResolvedTokenValue {\n\t// If it's a reference, resolve it\n\tif (isTokenReference(value)) {\n\t\tconst refName = parseTokenReference(value);\n\n\t\t// Circular reference check\n\t\tif (visited.has(refName)) {\n\t\t\tconsole.warn(`Circular reference detected: ${refName}`);\n\t\t\treturn tokenRefToCSSVar(refName);\n\t\t}\n\n\t\tconst referencedToken = allTokens.get(refName);\n\t\tif (!referencedToken) {\n\t\t\t// Reference not found in token map - assume it's a primitive that exists as a CSS variable\n\t\t\treturn tokenRefToCSSVar(refName);\n\t\t}\n\n\t\tvisited.add(refName);\n\t\treturn resolveTokenValue(referencedToken.$value, allTokens, visited);\n\t}\n\n\treturn value;\n}\n\n/**\n * Format a resolved value to a CSS-compatible string\n */\nfunction formatValueToCSS(value: ResolvedTokenValue, type: string): string {\n\t// Handle color values\n\tif (type === \"color\" && isColorValue(value)) {\n\t\treturn colorValueToCSS(value);\n\t}\n\n\t// Handle dimension values\n\tif (type === \"dimension\" && isDimensionValue(value)) {\n\t\treturn `${value.value}${value.unit}`;\n\t}\n\n\t// Handle string/number directly\n\tif (typeof value === \"string\") {\n\t\t// Check if it's a hex color\n\t\tif (value.startsWith(\"#\")) {\n\t\t\treturn hexToSRGB(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (typeof value === \"number\") {\n\t\treturn String(value);\n\t}\n\n\t// Handle objects - try to stringify meaningfully\n\tif (typeof value === \"object\" && value !== null) {\n\t\t// Check for color-like objects\n\t\tif (\"hex\" in value && typeof (value as ColorValue).hex === \"string\") {\n\t\t\treturn colorValueToCSS(value as ColorValue);\n\t\t}\n\t}\n\n\treturn String(value);\n}\n\n/**\n * Convert a hex color to sRGB CSS format\n */\nfunction hexToSRGB(hex: string): string {\n\tconst cleanHex = hex.replace(\"#\", \"\");\n\tconst r = Number.parseInt(cleanHex.slice(0, 2), 16) / 255;\n\tconst g = Number.parseInt(cleanHex.slice(2, 4), 16) / 255;\n\tconst b = Number.parseInt(cleanHex.slice(4, 6), 16) / 255;\n\treturn `color(srgb ${r} ${g} ${b})`;\n}\n\n/**\n * Convert a color value object to CSS string\n */\nfunction colorValueToCSS(color: ColorValue): string {\n\tconst [r, g, b] = color.components;\n\tconst alpha = color.alpha ?? 1;\n\n\tif (alpha < 1) {\n\t\treturn `color(srgb ${r} ${g} ${b} / ${alpha})`;\n\t}\n\treturn `color(srgb ${r} ${g} ${b})`;\n}\n\n/**\n * Merge an extended collection with its base collection\n * Extended tokens override base tokens with the same name\n */\nexport function mergeCollections(\n\tbase: CollectionDefinition,\n\textension: CollectionDefinition,\n): CollectionDefinition {\n\tconst baseFlat = flattenCollectionTokens(base.tokens);\n\tconst extFlat = flattenCollectionTokens(extension.tokens);\n\n\t// Merge flat tokens back into nested structure\n\tconst mergedFlat = { ...baseFlat, ...extFlat };\n\n\treturn {\n\t\tid: extension.id,\n\t\tname: extension.name,\n\t\ttype: \"extended\",\n\t\tbaseCollectionId: base.id,\n\t\tdescription: extension.description,\n\t\ttokens: { tokens: mergedFlat },\n\t};\n}\n\n/**\n * Build a map of all tokens from multiple collections\n * Later collections override earlier ones\n */\nexport function buildTokenMap(\n\tcollections: CollectionDefinition[],\n): Map<string, CollectionTokenValue> {\n\tconst tokenMap = new Map<string, CollectionTokenValue>();\n\n\tfor (const collection of collections) {\n\t\tconst flat = flattenCollectionTokens(collection.tokens);\n\t\tfor (const [name, token] of Object.entries(flat)) {\n\t\t\ttokenMap.set(name, token);\n\t\t}\n\t}\n\n\treturn tokenMap;\n}\n\n/**\n * Convert a flat token map to a nested structure based on token naming\n * e.g., \"color-bg-page\" -> { color: { bg: { page: value } } }\n */\nexport function flatToNested(\n\tflatTokens: Record<string, string>,\n): NestedStringRecord {\n\tconst nested: NestedStringRecord = {};\n\n\tfor (const [key, value] of Object.entries(flatTokens)) {\n\t\tconst parts = key.split(\"-\");\n\t\tlet current = nested;\n\n\t\tfor (let i = 0; i < parts.length - 1; i++) {\n\t\t\tconst part = parts[i];\n\t\t\tif (!part) continue;\n\n\t\t\tif (!(part in current)) {\n\t\t\t\tcurrent[part] = {};\n\t\t\t}\n\n\t\t\tconst next = current[part];\n\t\t\tif (typeof next === \"string\") {\n\t\t\t\t// If we hit a string value, we can't nest further\n\t\t\t\t// This means there's a naming conflict\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Token naming conflict at ${parts.slice(0, i + 1).join(\"-\")}`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (next === undefined) {\n\t\t\t\t// Should not happen since we just set it above, but satisfy TypeScript\n\t\t\t\tcurrent[part] = {};\n\t\t\t\tcurrent = current[part] as NestedStringRecord;\n\t\t\t} else {\n\t\t\t\tcurrent = next;\n\t\t\t}\n\t\t}\n\n\t\tconst lastPart = parts[parts.length - 1];\n\t\tif (lastPart && typeof current === \"object\") {\n\t\t\tcurrent[lastPart] = value;\n\t\t}\n\t}\n\n\treturn nested;\n}\n\n/**\n * Convert a flat token map directly to CSS variables\n * e.g., { \"color-bg-page\": \"#fff\" } -> { \"--color-bg-page\": \"#fff\" }\n * This is more efficient than flatToNested + nestedToCSSVars\n */\nexport function flatToCSSVars(\n\tflatTokens: Record<string, string>,\n): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(flatTokens)) {\n\t\tresult[`--${key}`] = value;\n\t}\n\treturn result;\n}\n\n/**\n * Convert a nested structure back to flat CSS variable names\n * e.g., { color: { bg: { page: '#fff' } } } -> { '--color-bg-page': '#fff' }\n */\nexport function nestedToCSSVars(\n\tnested: NestedStringRecord,\n\tprefix = \"\",\n): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\n\tfunction traverse(obj: NestedStringRecord, currentPrefix: string): void {\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\tconst newPrefix = currentPrefix ? `${currentPrefix}-${key}` : key;\n\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\tresult[`--${newPrefix}`] = value;\n\t\t\t} else {\n\t\t\t\ttraverse(value, newPrefix);\n\t\t\t}\n\t\t}\n\t}\n\n\ttraverse(nested, prefix);\n\treturn result;\n}\n\n/**\n * Deep merge two nested token structures\n * Values from source override values in target\n */\nexport function deepMergeTokens(\n\ttarget: NestedStringRecord,\n\tsource: NestedStringRecord,\n): NestedStringRecord {\n\tconst result: NestedStringRecord = { ...target };\n\n\tfor (const [key, value] of Object.entries(source)) {\n\t\tif (typeof value === \"string\") {\n\t\t\tresult[key] = value;\n\t\t} else {\n\t\t\tconst targetValue = result[key];\n\t\t\tif (typeof targetValue === \"object\" && targetValue !== null) {\n\t\t\t\tresult[key] = deepMergeTokens(targetValue as NestedStringRecord, value);\n\t\t\t} else {\n\t\t\t\tresult[key] = { ...value };\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Resolve a collection with its full inheritance chain from the API\n */\nexport async function resolveCollectionFromAPI(\n\tcollectionId: string,\n\tfetchCollection: (id: string) => Promise<APICollection | null>,\n): Promise<ResolvedCollection | null> {\n\tconst collection = await fetchCollection(collectionId);\n\tif (!collection) return null;\n\n\tconst definition = apiCollectionToDefinition(collection);\n\n\t// If this extends another collection, resolve the base first\n\tif (definition.baseCollectionId) {\n\t\tconst baseResolved = await resolveCollectionFromAPI(\n\t\t\tdefinition.baseCollectionId,\n\t\t\tfetchCollection,\n\t\t);\n\n\t\tif (baseResolved) {\n\t\t\t// Merge base tokens with this collection's tokens\n\t\t\tconst baseCollection = await fetchCollection(definition.baseCollectionId);\n\t\t\tif (baseCollection) {\n\t\t\t\tconst baseDef = apiCollectionToDefinition(baseCollection);\n\t\t\t\tconst merged = mergeCollections(baseDef, definition);\n\t\t\t\tconst tokenMap = buildTokenMap([merged]);\n\t\t\t\treturn resolveCollectionReferences(merged, tokenMap);\n\t\t\t}\n\t\t}\n\t}\n\n\t// No inheritance, just resolve this collection\n\tconst tokenMap = buildTokenMap([definition]);\n\treturn resolveCollectionReferences(definition, tokenMap);\n}\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { cubicBezier, duration } from \"../utils\";\n\n/**\n * Primitive animation tokens\n * Defines duration and easing values for consistent motion design\n */\nexport const primitiveAnimation = {\n\tprimitive: {\n\t\tduration: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"duration\",\n\t\t\t$description: \"Animation duration values\",\n\t\t\t/**\n\t\t\t * Instant - for immediate feedback (e.g., button press)\n\t\t\t */\n\t\t\t\"0\": duration(0),\n\t\t\t/**\n\t\t\t * Extra fast - for micro-interactions (e.g., hover states)\n\t\t\t */\n\t\t\t\"75\": duration(75),\n\t\t\t/**\n\t\t\t * Fast - for quick transitions (e.g., fade in/out, color changes)\n\t\t\t */\n\t\t\t\"150\": duration(150),\n\t\t\t/**\n\t\t\t * Normal - for standard UI transitions (e.g., menu open, modal appear)\n\t\t\t */\n\t\t\t\"200\": duration(200),\n\t\t\t/**\n\t\t\t * Medium - for moderate animations (e.g., accordion expand)\n\t\t\t */\n\t\t\t\"300\": duration(300),\n\t\t\t/**\n\t\t\t * Slow - for deliberate animations (e.g., page transitions)\n\t\t\t */\n\t\t\t\"500\": duration(500),\n\t\t\t/**\n\t\t\t * Extra slow - for dramatic effect (e.g., hero animations)\n\t\t\t */\n\t\t\t\"700\": duration(700),\n\t\t\t/**\n\t\t\t * Very slow - for long-running animations (e.g., progress indicators)\n\t\t\t */\n\t\t\t\"1000\": duration(1000),\n\t\t},\n\t\teasing: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"cubicBezier\",\n\t\t\t$description: \"Easing curves for animations\",\n\t\t\t/**\n\t\t\t * Linear - constant speed, no acceleration\n\t\t\t */\n\t\t\tlinear: cubicBezier(0, 0, 1, 1),\n\t\t\t/**\n\t\t\t * Ease - subtle acceleration and deceleration (CSS default)\n\t\t\t */\n\t\t\tease: cubicBezier(0.25, 0.1, 0.25, 1),\n\t\t\t/**\n\t\t\t * Ease In - starts slow, accelerates\n\t\t\t * Use for elements exiting the screen\n\t\t\t */\n\t\t\t\"ease-in\": cubicBezier(0.42, 0, 1, 1),\n\t\t\t/**\n\t\t\t * Ease Out - starts fast, decelerates\n\t\t\t * Use for elements entering the screen\n\t\t\t */\n\t\t\t\"ease-out\": cubicBezier(0, 0, 0.58, 1),\n\t\t\t/**\n\t\t\t * Ease In Out - slow start and end\n\t\t\t * Use for elements that stay on screen\n\t\t\t */\n\t\t\t\"ease-in-out\": cubicBezier(0.42, 0, 0.58, 1),\n\t\t\t/**\n\t\t\t * Emphasized - dramatic ease out with overshoot feel\n\t\t\t * Based on Material Design's emphasized easing\n\t\t\t */\n\t\t\temphasized: cubicBezier(0.2, 0, 0, 1),\n\t\t\t/**\n\t\t\t * Smooth - Apple-style smooth easing\n\t\t\t * Great for accordion, height transitions\n\t\t\t */\n\t\t\tsmooth: cubicBezier(0.23, 1, 0.32, 1),\n\t\t\t/**\n\t\t\t * Bounce - slight overshoot at the end\n\t\t\t * Use sparingly for playful interactions\n\t\t\t */\n\t\t\tbounce: cubicBezier(0.34, 1.56, 0.64, 1),\n\t\t\t/**\n\t\t\t * Snappy - quick response, smooth finish\n\t\t\t * Good for hover states and quick feedback\n\t\t\t */\n\t\t\tsnappy: cubicBezier(0.4, 0, 0.2, 1),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { dimension } from \"../utils\";\n\n/**\n * Primitive breakpoint tokens\n * Defines responsive breakpoints for the design system\n *\n * - sm: Mobile (320px+)\n * - md: Tablet (768px+)\n * - lg: Desktop (1440px+)\n *\n * NOTE: These are display-only in Figma and not synced as variables\n * because breakpoints are implementation details, not design variables.\n *\n * The maxWidthAlias extension generates max-w-* utility classes in Tailwind.\n */\nexport const primitiveBreakpoints = {\n\tprimitive: {\n\t\tbreakpoint: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"\", // Not used - skip is true\n\t\t\t\t\tskip: true, // Breakpoints are not synced to Figma\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\tsm: {\n\t\t\t\t...dimension(320),\n\t\t\t\t$extensions: { \"nds.maxWidthAlias\": \"mobile\" },\n\t\t\t},\n\t\t\tmd: {\n\t\t\t\t...dimension(768),\n\t\t\t\t$extensions: { \"nds.maxWidthAlias\": \"tablet\" },\n\t\t\t},\n\t\t\tlg: {\n\t\t\t\t...dimension(1440),\n\t\t\t\t$extensions: { \"nds.maxWidthAlias\": \"desktop\" },\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { srgb } from \"../utils\";\n\nexport const primitiveColors = {\n\tprimitive: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"color\",\n\t\t\tgray: {\n\t\t\t\t\"50\": srgb(\"#FAFAFA\"),\n\t\t\t\t\"100\": srgb(\"#F5F5F5\"),\n\t\t\t\t\"200\": srgb(\"#EEEEEE\"),\n\t\t\t\t\"300\": srgb(\"#E0E0E0\"),\n\t\t\t\t\"400\": srgb(\"#BDBDBD\"),\n\t\t\t\t\"500\": srgb(\"#9E9E9E\"),\n\t\t\t\t\"600\": srgb(\"#757575\"),\n\t\t\t\t\"700\": srgb(\"#616161\"),\n\t\t\t\t\"800\": srgb(\"#424242\"),\n\t\t\t\t\"900\": srgb(\"#212121\"),\n\t\t\t\t\"1000\": srgb(\"#1A1A1A\"),\n\t\t\t\t\"1100\": srgb(\"#141414\"),\n\t\t\t\t\"1200\": srgb(\"#0A0A0A\"),\n\t\t\t},\n\t\t\tbrown: {\n\t\t\t\t\"50\": srgb(\"#EEEBE9\"),\n\t\t\t\t\"100\": srgb(\"#D5CCC9\"),\n\t\t\t\t\"200\": srgb(\"#B9ABA5\"),\n\t\t\t\t\"300\": srgb(\"#9D8980\"),\n\t\t\t\t\"400\": srgb(\"#886F65\"),\n\t\t\t\t\"500\": srgb(\"#74564A\"),\n\t\t\t\t\"600\": srgb(\"#684D43\"),\n\t\t\t\t\"700\": srgb(\"#594139\"),\n\t\t\t\t\"800\": srgb(\"#4A352F\"),\n\t\t\t\t\"900\": srgb(\"#3B2824\"),\n\t\t\t\t\"1000\": srgb(\"#2F201D\"),\n\t\t\t\t\"1100\": srgb(\"#1C1312\"),\n\t\t\t\t\"1200\": srgb(\"#18100E\"),\n\t\t\t},\n\t\t\tsteel: {\n\t\t\t\t\"50\": srgb(\"#EDEFF1\"),\n\t\t\t\t\"100\": srgb(\"#D1D8DC\"),\n\t\t\t\t\"200\": srgb(\"#B3BEC4\"),\n\t\t\t\t\"300\": srgb(\"#94A3AD\"),\n\t\t\t\t\"400\": srgb(\"#7D8F9B\"),\n\t\t\t\t\"500\": srgb(\"#667C89\"),\n\t\t\t\t\"600\": srgb(\"#596D79\"),\n\t\t\t\t\"700\": srgb(\"#495963\"),\n\t\t\t\t\"800\": srgb(\"#3A474E\"),\n\t\t\t\t\"900\": srgb(\"#283237\"),\n\t\t\t\t\"1000\": srgb(\"#222B2F\"),\n\t\t\t\t\"1100\": srgb(\"#181E21\"),\n\t\t\t\t\"1200\": srgb(\"#101416\"),\n\t\t\t},\n\t\t\tred: {\n\t\t\t\t\"50\": srgb(\"#FFEBEE\"),\n\t\t\t\t\"100\": srgb(\"#FFCDD2\"),\n\t\t\t\t\"200\": srgb(\"#EF9A9A\"),\n\t\t\t\t\"300\": srgb(\"#E57373\"),\n\t\t\t\t\"400\": srgb(\"#EF5350\"),\n\t\t\t\t\"500\": srgb(\"#F44336\"),\n\t\t\t\t\"600\": srgb(\"#E53935\"),\n\t\t\t\t\"700\": srgb(\"#D32F2F\"),\n\t\t\t\t\"800\": srgb(\"#C62828\"),\n\t\t\t\t\"900\": srgb(\"#B71C1C\"),\n\t\t\t\tv100: srgb(\"#FF8A80\"),\n\t\t\t\tv200: srgb(\"#FF5252\"),\n\t\t\t\tv300: srgb(\"#FF1744\"),\n\t\t\t\tv400: srgb(\"#D50000\"),\n\t\t\t},\n\t\t\tpink: {\n\t\t\t\t\"50\": srgb(\"#F8E5EC\"),\n\t\t\t\t\"100\": srgb(\"#EFBECF\"),\n\t\t\t\t\"200\": srgb(\"#E694B0\"),\n\t\t\t\t\"300\": srgb(\"#DF6B92\"),\n\t\t\t\t\"400\": srgb(\"#DA4F7A\"),\n\t\t\t\t\"500\": srgb(\"#D63864\"),\n\t\t\t\t\"600\": srgb(\"#C63361\"),\n\t\t\t\t\"700\": srgb(\"#B22D5B\"),\n\t\t\t\t\"800\": srgb(\"#9F2757\"),\n\t\t\t\t\"900\": srgb(\"#7D1D4E\"),\n\t\t\t\tv100: srgb(\"#EF87AA\"),\n\t\t\t\tv200: srgb(\"#EB5181\"),\n\t\t\t\tv300: srgb(\"#E1305A\"),\n\t\t\t\tv400: srgb(\"#B52B62\"),\n\t\t\t},\n\t\t\tpurple: {\n\t\t\t\t\"50\": srgb(\"#F1E5F4\"),\n\t\t\t\t\"100\": srgb(\"#DBBFE4\"),\n\t\t\t\t\"200\": srgb(\"#C596D4\"),\n\t\t\t\t\"300\": srgb(\"#AF6CC3\"),\n\t\t\t\t\"400\": srgb(\"#9F4DB6\"),\n\t\t\t\t\"500\": srgb(\"#9031AA\"),\n\t\t\t\t\"600\": srgb(\"#832DA4\"),\n\t\t\t\t\"700\": srgb(\"#71279C\"),\n\t\t\t\t\"800\": srgb(\"#612294\"),\n\t\t\t\t\"900\": srgb(\"#441886\"),\n\t\t\t\tv100: srgb(\"#DC86F5\"),\n\t\t\t\tv200: srgb(\"#CF4EF3\"),\n\t\t\t\tv300: srgb(\"#C32AF0\"),\n\t\t\t\tv400: srgb(\"#9B20F6\"),\n\t\t\t},\n\t\t\tiris: {\n\t\t\t\t\"50\": srgb(\"#ECE7F5\"),\n\t\t\t\t\"100\": srgb(\"#CFC4E6\"),\n\t\t\t\t\"200\": srgb(\"#AF9ED7\"),\n\t\t\t\t\"300\": srgb(\"#9076C7\"),\n\t\t\t\t\"400\": srgb(\"#7859BC\"),\n\t\t\t\t\"500\": srgb(\"#613DB0\"),\n\t\t\t\t\"600\": srgb(\"#5837AB\"),\n\t\t\t\t\"700\": srgb(\"#4C2FA2\"),\n\t\t\t\t\"800\": srgb(\"#40299A\"),\n\t\t\t\t\"900\": srgb(\"#2D1D8C\"),\n\t\t\t\tv100: srgb(\"#DC86F5\"),\n\t\t\t\tv200: srgb(\"#CF4EF3\"),\n\t\t\t\tv300: srgb(\"#C32AF0\"),\n\t\t\t\tv400: srgb(\"#9B20F6\"),\n\t\t\t},\n\t\t\tindigo: {\n\t\t\t\t\"25\": srgb(\"#F5F7FF\"), // very light tint - menu hover\n\t\t\t\t\"35\": srgb(\"#EDF2FF\"), // light tint - menu selected\n\t\t\t\t\"50\": srgb(\"#E8EAF5\"),\n\t\t\t\t\"100\": srgb(\"#C6CAE6\"),\n\t\t\t\t\"200\": srgb(\"#A0A8D6\"),\n\t\t\t\t\"300\": srgb(\"#7B86C6\"),\n\t\t\t\t\"400\": srgb(\"#5F6BBA\"),\n\t\t\t\t\"500\": srgb(\"#4251AF\"),\n\t\t\t\t\"600\": srgb(\"#3C49A5\"),\n\t\t\t\t\"700\": srgb(\"#333F99\"),\n\t\t\t\t\"800\": srgb(\"#2A358E\"),\n\t\t\t\t\"900\": srgb(\"#1B2379\"),\n\t\t\t\tv100: srgb(\"#8F9EF8\"),\n\t\t\t\tv200: srgb(\"#586DF5\"),\n\t\t\t\tv300: srgb(\"#425AF5\"),\n\t\t\t\tv400: srgb(\"#364FF4\"),\n\t\t\t},\n\t\t\tblue: {\n\t\t\t\t\"50\": srgb(\"#E6F2FC\"),\n\t\t\t\t\"100\": srgb(\"#C2DDF8\"),\n\t\t\t\t\"200\": srgb(\"#9CC8F5\"),\n\t\t\t\t\"300\": srgb(\"#77B3F0\"),\n\t\t\t\t\"400\": srgb(\"#5DA3EF\"),\n\t\t\t\t\"500\": srgb(\"#4894EC\"),\n\t\t\t\t\"600\": srgb(\"#4186DE\"),\n\t\t\t\t\"700\": srgb(\"#3874CB\"),\n\t\t\t\t\"800\": srgb(\"#2F64BA\"),\n\t\t\t\t\"900\": srgb(\"#1F469B\"),\n\t\t\t\tv100: srgb(\"#8CB0F9\"),\n\t\t\t\tv200: srgb(\"#5589F7\"),\n\t\t\t\tv250: srgb(\"#3B85FF\"), // menu selected text\n\t\t\t\tv300: srgb(\"#4078F6\"),\n\t\t\t\tv400: srgb(\"#3761F6\"),\n\t\t\t},\n\t\t\tice: {\n\t\t\t\t\"50\": srgb(\"#E5F4FD\"),\n\t\t\t\t\"100\": srgb(\"#BDE4F9\"),\n\t\t\t\t\"200\": srgb(\"#94D2F6\"),\n\t\t\t\t\"300\": srgb(\"#6FC1F2\"),\n\t\t\t\t\"400\": srgb(\"#59B4F0\"),\n\t\t\t\t\"500\": srgb(\"#4BA7EE\"),\n\t\t\t\t\"600\": srgb(\"#4499DF\"),\n\t\t\t\t\"700\": srgb(\"#3B86CB\"),\n\t\t\t\t\"800\": srgb(\"#3275B8\"),\n\t\t\t\t\"900\": srgb(\"#235696\"),\n\t\t\t\tv100: srgb(\"#8CB0F9\"),\n\t\t\t\tv200: srgb(\"#5589F7\"),\n\t\t\t\tv300: srgb(\"#4078F6\"),\n\t\t\t\tv400: srgb(\"#3761F6\"),\n\t\t\t},\n\t\t\tcyan: {\n\t\t\t\t\"50\": srgb(\"#E4F6F9\"),\n\t\t\t\t\"100\": srgb(\"#BEE9F1\"),\n\t\t\t\t\"200\": srgb(\"#96DCE8\"),\n\t\t\t\t\"300\": srgb(\"#73CDDE\"),\n\t\t\t\t\"400\": srgb(\"#5FC3D7\"),\n\t\t\t\t\"500\": srgb(\"#54B9D1\"),\n\t\t\t\t\"600\": srgb(\"#4CA9BE\"),\n\t\t\t\t\"700\": srgb(\"#4295A5\"),\n\t\t\t\t\"800\": srgb(\"#38818D\"),\n\t\t\t\t\"900\": srgb(\"#275F63\"),\n\t\t\t\tv100: srgb(\"#A3FCFE\"),\n\t\t\t\tv200: srgb(\"#77FBFD\"),\n\t\t\t\tv300: srgb(\"#68E2FB\"),\n\t\t\t\tv400: srgb(\"#52B5D0\"),\n\t\t\t},\n\t\t\tteal: {\n\t\t\t\t\"50\": srgb(\"#E3F1F1\"),\n\t\t\t\t\"100\": srgb(\"#BBDEDB\"),\n\t\t\t\t\"200\": srgb(\"#91C9C4\"),\n\t\t\t\t\"300\": srgb(\"#6AB4AC\"),\n\t\t\t\t\"400\": srgb(\"#51A49A\"),\n\t\t\t\t\"500\": srgb(\"#429488\"),\n\t\t\t\t\"600\": srgb(\"#3B877B\"),\n\t\t\t\t\"700\": srgb(\"#34776B\"),\n\t\t\t\t\"800\": srgb(\"#2C675C\"),\n\t\t\t\t\"900\": srgb(\"#1E4C40\"),\n\t\t\t\tv100: srgb(\"#BBFDEC\"),\n\t\t\t\tv200: srgb(\"#91FCDC\"),\n\t\t\t\tv300: srgb(\"#6DE6B9\"),\n\t\t\t\tv400: srgb(\"#55BCA6\"),\n\t\t\t},\n\t\t\tgreen: {\n\t\t\t\t\"50\": srgb(\"#EAF5EA\"),\n\t\t\t\t\"100\": srgb(\"#CEE5CB\"),\n\t\t\t\t\"200\": srgb(\"#AFD5AB\"),\n\t\t\t\t\"300\": srgb(\"#91C58A\"),\n\t\t\t\t\"400\": srgb(\"#7BB972\"),\n\t\t\t\t\"500\": srgb(\"#67AD5B\"),\n\t\t\t\t\"600\": srgb(\"#5D9E52\"),\n\t\t\t\t\"700\": srgb(\"#508C46\"),\n\t\t\t\t\"800\": srgb(\"#457B3B\"),\n\t\t\t\t\"900\": srgb(\"#2F5D28\"),\n\t\t\t\tv100: srgb(\"#C6F4CD\"),\n\t\t\t\tv200: srgb(\"#8EEDB3\"),\n\t\t\t\tv300: srgb(\"#69E282\"),\n\t\t\t\tv400: srgb(\"#5AC561\"),\n\t\t\t},\n\t\t\tsage: {\n\t\t\t\t\"50\": srgb(\"#F2F8EA\"),\n\t\t\t\t\"100\": srgb(\"#DFECCB\"),\n\t\t\t\t\"200\": srgb(\"#CAE0AB\"),\n\t\t\t\t\"300\": srgb(\"#B6D48A\"),\n\t\t\t\t\"400\": srgb(\"#A6CB72\"),\n\t\t\t\t\"500\": srgb(\"#97C15C\"),\n\t\t\t\t\"600\": srgb(\"#88B153\"),\n\t\t\t\t\"700\": srgb(\"#749E47\"),\n\t\t\t\t\"800\": srgb(\"#618A3D\"),\n\t\t\t\t\"900\": srgb(\"#416829\"),\n\t\t\t\tv100: srgb(\"#D6FD9D\"),\n\t\t\t\tv200: srgb(\"#C3FD73\"),\n\t\t\t\tv300: srgb(\"#9BFC4E\"),\n\t\t\t\tv400: srgb(\"#85DA47\"),\n\t\t\t},\n\t\t\tlime: {\n\t\t\t\t\"50\": srgb(\"#F9FBE9\"),\n\t\t\t\t\"100\": srgb(\"#F1F4C8\"),\n\t\t\t\t\"200\": srgb(\"#E8EEA5\"),\n\t\t\t\t\"300\": srgb(\"#DEE784\"),\n\t\t\t\t\"400\": srgb(\"#D7E06D\"),\n\t\t\t\t\"500\": srgb(\"#D0DB59\"),\n\t\t\t\t\"600\": srgb(\"#C2CA51\"),\n\t\t\t\t\"700\": srgb(\"#B0B447\"),\n\t\t\t\t\"800\": srgb(\"#9E9D3D\"),\n\t\t\t\t\"900\": srgb(\"#80772C\"),\n\t\t\t\tv100: srgb(\"#F6FF92\"),\n\t\t\t\tv200: srgb(\"#F1FE67\"),\n\t\t\t\tv300: srgb(\"#D2FD51\"),\n\t\t\t\tv400: srgb(\"#BBE849\"),\n\t\t\t},\n\t\t\tyellow: {\n\t\t\t\t\"50\": srgb(\"#FFFDE9\"),\n\t\t\t\t\"100\": srgb(\"#FEF9CA\"),\n\t\t\t\t\"200\": srgb(\"#FDF5A8\"),\n\t\t\t\t\"300\": srgb(\"#FDF188\"),\n\t\t\t\t\"400\": srgb(\"#FCEE72\"),\n\t\t\t\t\"500\": srgb(\"#FCEC60\"),\n\t\t\t\t\"600\": srgb(\"#F7D959\"),\n\t\t\t\t\"700\": srgb(\"#F2C24F\"),\n\t\t\t\t\"800\": srgb(\"#EDAB46\"),\n\t\t\t\t\"900\": srgb(\"#E68537\"),\n\t\t\t\tv100: srgb(\"#FFFF9C\"),\n\t\t\t\tv200: srgb(\"#FFFF54\"),\n\t\t\t\tv300: srgb(\"#FCEB4E\"),\n\t\t\t\tv400: srgb(\"#F9D749\"),\n\t\t\t},\n\t\t\tamber: {\n\t\t\t\t\"50\": srgb(\"#FEF8E3\"),\n\t\t\t\t\"100\": srgb(\"#FCEDBA\"),\n\t\t\t\t\"200\": srgb(\"#FAE18F\"),\n\t\t\t\t\"300\": srgb(\"#F8D667\"),\n\t\t\t\t\"400\": srgb(\"#F7CC50\"),\n\t\t\t\t\"500\": srgb(\"#F6C344\"),\n\t\t\t\t\"600\": srgb(\"#F4B63F\"),\n\t\t\t\t\"700\": srgb(\"#F2A43A\"),\n\t\t\t\t\"800\": srgb(\"#F09436\"),\n\t\t\t\t\"900\": srgb(\"#EE782F\"),\n\t\t\t\tv100: srgb(\"#FBE68D\"),\n\t\t\t\tv200: srgb(\"#F9D85E\"),\n\t\t\t\tv300: srgb(\"#F6C644\"),\n\t\t\t\tv400: srgb(\"#F3AF3D\"),\n\t\t\t},\n\t\t\torange: {\n\t\t\t\t\"50\": srgb(\"#FDF3E2\"),\n\t\t\t\t\"100\": srgb(\"#FAE1B8\"),\n\t\t\t\t\"200\": srgb(\"#F7CE8B\"),\n\t\t\t\t\"300\": srgb(\"#F4BA61\"),\n\t\t\t\t\"400\": srgb(\"#F3AB47\"),\n\t\t\t\t\"500\": srgb(\"#F19D38\"),\n\t\t\t\t\"600\": srgb(\"#EC9135\"),\n\t\t\t\t\"700\": srgb(\"#E68231\"),\n\t\t\t\t\"800\": srgb(\"#DF742C\"),\n\t\t\t\t\"900\": srgb(\"#D55B26\"),\n\t\t\t\tv100: srgb(\"#F8D38B\"),\n\t\t\t\tv200: srgb(\"#F3AF56\"),\n\t\t\t\tv300: srgb(\"#F09637\"),\n\t\t\t\tv400: srgb(\"#EE762F\"),\n\t\t\t},\n\t\t\tember: {\n\t\t\t\t\"50\": srgb(\"#F8EAE7\"),\n\t\t\t\t\"100\": srgb(\"#F7CEBF\"),\n\t\t\t\t\"200\": srgb(\"#F3AF96\"),\n\t\t\t\t\"300\": srgb(\"#F0906D\"),\n\t\t\t\t\"400\": srgb(\"#EE7850\"),\n\t\t\t\t\"500\": srgb(\"#EC6337\"),\n\t\t\t\t\"600\": srgb(\"#E25D33\"),\n\t\t\t\t\"700\": srgb(\"#D5562E\"),\n\t\t\t\t\"800\": srgb(\"#C84E29\"),\n\t\t\t\t\"900\": srgb(\"#B04121\"),\n\t\t\t\tv100: srgb(\"#F2A286\"),\n\t\t\t\tv200: srgb(\"#EE774D\"),\n\t\t\t\tv300: srgb(\"#EB4F27\"),\n\t\t\t\tv400: srgb(\"#CB3E20\"),\n\t\t\t},\n\t\t\t\"alpha-black\": {\n\t\t\t\t\"5\": srgb(\"#000000\", 0.05),\n\t\t\t\t\"10\": srgb(\"#000000\", 0.1),\n\t\t\t\t\"20\": srgb(\"#000000\", 0.2),\n\t\t\t\t\"30\": srgb(\"#000000\", 0.3),\n\t\t\t\t\"40\": srgb(\"#000000\", 0.4),\n\t\t\t\t\"50\": srgb(\"#000000\", 0.5),\n\t\t\t\t\"60\": srgb(\"#000000\", 0.6),\n\t\t\t\t\"70\": srgb(\"#000000\", 0.7),\n\t\t\t\t\"80\": srgb(\"#000000\", 0.8),\n\t\t\t\t\"90\": srgb(\"#000000\", 0.9),\n\t\t\t\t\"95\": srgb(\"#000000\", 0.95),\n\t\t\t},\n\t\t\t\"alpha-white\": {\n\t\t\t\t\"5\": srgb(\"#FFFFFF\", 0.05),\n\t\t\t\t\"10\": srgb(\"#FFFFFF\", 0.1),\n\t\t\t\t\"20\": srgb(\"#FFFFFF\", 0.2),\n\t\t\t\t\"30\": srgb(\"#FFFFFF\", 0.3),\n\t\t\t\t\"40\": srgb(\"#FFFFFF\", 0.4),\n\t\t\t\t\"50\": srgb(\"#FFFFFF\", 0.5),\n\t\t\t\t\"60\": srgb(\"#FFFFFF\", 0.6),\n\t\t\t\t\"70\": srgb(\"#FFFFFF\", 0.7),\n\t\t\t\t\"80\": srgb(\"#FFFFFF\", 0.8),\n\t\t\t\t\"90\": srgb(\"#FFFFFF\", 0.9),\n\t\t\t\t\"95\": srgb(\"#FFFFFF\", 0.95),\n\t\t\t},\n\t\t\twhite: srgb(\"#FFFFFF\"),\n\t\t\tblack: srgb(\"#000000\"),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\n\n/**\n * Primitive opacity tokens\n * Defines opacity scale from 0 to 1\n */\nexport const primitiveOpacity = {\n\tprimitive: {\n\t\topacity: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t\"0\": { $type: \"number\", $value: 0 },\n\t\t\t\"25\": { $type: \"number\", $value: 0.25 },\n\t\t\t\"50\": { $type: \"number\", $value: 0.5 },\n\t\t\t\"75\": { $type: \"number\", $value: 0.75 },\n\t\t\t\"100\": { $type: \"number\", $value: 1 },\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { dimension } from \"../utils\";\n\n/**\n * Primitive radii tokens\n * Defines radii scale from 2px to 34px (increments of 2)\n */\nexport const primitiveRadii = {\n\tprimitive: {\n\t\tradii: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"0\": dimension(0),\n\t\t\t\"2\": dimension(2),\n\t\t\t\"4\": dimension(4),\n\t\t\t\"6\": dimension(6),\n\t\t\t\"8\": dimension(8),\n\t\t\t\"10\": dimension(10),\n\t\t\t\"12\": dimension(12),\n\t\t\t\"14\": dimension(14),\n\t\t\t\"16\": dimension(16),\n\t\t\t\"18\": dimension(18),\n\t\t\t\"20\": dimension(20),\n\t\t\t\"22\": dimension(22),\n\t\t\t\"24\": dimension(24),\n\t\t\t\"26\": dimension(26),\n\t\t\t\"28\": dimension(28),\n\t\t\t\"30\": dimension(30),\n\t\t\t\"32\": dimension(32),\n\t\t\t\"34\": dimension(34),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { shadow } from \"../utils\";\n\n/**\n * Primitive shadow tokens\n * Based on Tailwind CSS shadow scale\n */\nexport const primitiveShadow: TokenModule = {\n\tprimitive: {\n\t\tshadow: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\", // Primitives collection\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tskip: true, // Shadows are managed as Effect Styles in Figma, not variables\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\tsm: shadow([\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 1,\n\t\t\t\t\tblur: 2,\n\t\t\t\t\tspread: 0,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.05,\n\t\t\t\t},\n\t\t\t]),\n\t\t\tmd: shadow([\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 4,\n\t\t\t\t\tblur: 6,\n\t\t\t\t\tspread: -1,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 2,\n\t\t\t\t\tblur: 4,\n\t\t\t\t\tspread: -2,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.1,\n\t\t\t\t},\n\t\t\t]),\n\t\t\tlg: shadow([\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 10,\n\t\t\t\t\tblur: 15,\n\t\t\t\t\tspread: -3,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 4,\n\t\t\t\t\tblur: 6,\n\t\t\t\t\tspread: -4,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.1,\n\t\t\t\t},\n\t\t\t]),\n\t\t},\n\t},\n};\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { dimension } from \"../utils\";\n\n/**\n * Primitive spacing tokens\n * Defines spacing scale from 2px to 400px\n */\nexport const primitiveSpacing = {\n\tprimitive: {\n\t\tspacing: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"0\": dimension(0),\n\t\t\t\"1\": dimension(1),\n\t\t\t\"2\": dimension(2),\n\t\t\t\"4\": dimension(4),\n\t\t\t\"6\": dimension(6),\n\t\t\t\"8\": dimension(8),\n\t\t\t\"10\": dimension(10),\n\t\t\t\"11\": dimension(11),\n\t\t\t\"12\": dimension(12),\n\t\t\t\"16\": dimension(16),\n\t\t\t\"20\": dimension(20),\n\t\t\t\"24\": dimension(24),\n\t\t\t\"28\": dimension(28),\n\t\t\t\"32\": dimension(32),\n\t\t\t\"36\": dimension(36),\n\t\t\t\"40\": dimension(40),\n\t\t\t\"48\": dimension(48),\n\t\t\t\"56\": dimension(56),\n\t\t\t\"64\": dimension(64),\n\t\t\t\"72\": dimension(72),\n\t\t\t\"80\": dimension(80),\n\t\t\t\"96\": dimension(96),\n\t\t\t\"112\": dimension(112),\n\t\t\t\"128\": dimension(128),\n\t\t\t\"144\": dimension(144),\n\t\t\t\"160\": dimension(160),\n\t\t\t\"176\": dimension(176),\n\t\t\t\"192\": dimension(192),\n\t\t\t\"208\": dimension(208),\n\t\t\t\"224\": dimension(224),\n\t\t\t\"240\": dimension(240),\n\t\t\t\"256\": dimension(256),\n\t\t\t\"288\": dimension(288),\n\t\t\t\"320\": dimension(320),\n\t\t\t\"352\": dimension(352),\n\t\t\t\"384\": dimension(384),\n\t\t\t\"400\": dimension(400),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { dimension, fontFamily, fontWeight } from \"../utils\";\n\n/**\n * Primitive typography tokens\n * Defines font sizes, line heights, letter spacing, font families, and font weights\n */\nexport const primitiveTypography = {\n\tprimitive: {\n\t\t\"font-size\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"9\": dimension(9),\n\t\t\t\"11\": dimension(11),\n\t\t\t\"12\": dimension(12),\n\t\t\t\"14\": dimension(14),\n\t\t\t\"16\": dimension(16),\n\t\t\t\"18\": dimension(18),\n\t\t\t\"21\": dimension(21),\n\t\t\t\"24\": dimension(24),\n\t\t\t\"28\": dimension(28),\n\t\t\t\"32\": dimension(32),\n\t\t\t\"36\": dimension(36),\n\t\t\t\"42\": dimension(42),\n\t\t\t\"48\": dimension(48),\n\t\t\t\"56\": dimension(56),\n\t\t\t\"64\": dimension(64),\n\t\t\t\"72\": dimension(72),\n\t\t\t\"84\": dimension(84),\n\t\t\t\"88\": dimension(88),\n\t\t\t\"96\": dimension(96),\n\t\t\t\"112\": dimension(112),\n\t\t\t\"128\": dimension(128),\n\t\t\t\"148\": dimension(148),\n\t\t\t\"168\": dimension(168),\n\t\t\t\"192\": dimension(192),\n\t\t\t\"224\": dimension(224),\n\t\t\t\"256\": dimension(256),\n\t\t\t\"280\": dimension(280),\n\t\t},\n\t\t\"line-height\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"9\": dimension(11),\n\t\t\t\"11\": dimension(13),\n\t\t\t\"12\": dimension(16),\n\t\t\t\"14\": dimension(20),\n\t\t\t\"16\": dimension(24),\n\t\t\t\"18\": dimension(27),\n\t\t\t\"21\": dimension(29),\n\t\t\t\"22\": dimension(22),\n\t\t\t\"24\": dimension(24),\n\t\t\t\"28\": dimension(28),\n\t\t\t\"31\": dimension(31),\n\t\t\t\"32\": dimension(32),\n\t\t\t\"36\": dimension(36),\n\t\t\t\"38\": dimension(38),\n\t\t\t\"42\": dimension(46),\n\t\t\t\"43\": dimension(43),\n\t\t\t\"46\": dimension(46),\n\t\t\t\"48\": dimension(53),\n\t\t\t\"53\": dimension(53),\n\t\t\t\"56\": dimension(62),\n\t\t\t\"62\": dimension(62),\n\t\t\t\"64\": dimension(64),\n\t\t\t\"72\": dimension(72),\n\t\t\t\"84\": dimension(84),\n\t\t\t\"88\": dimension(88),\n\t\t\t\"96\": dimension(96),\n\t\t\t\"112\": dimension(106),\n\t\t\t\"128\": dimension(122),\n\t\t\t\"148\": dimension(141),\n\t\t\t\"168\": dimension(151),\n\t\t\t\"192\": dimension(173),\n\t\t\t\"224\": dimension(202),\n\t\t\t\"256\": dimension(218),\n\t\t\t\"280\": dimension(238),\n\t\t},\n\t\t\"letter-spacing\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"9\": dimension(0.18),\n\t\t\t\"11\": dimension(0.17),\n\t\t\t\"12\": dimension(0.12),\n\t\t\t\"14\": dimension(0.07),\n\t\t\t\"16\": dimension(0),\n\t\t\t\"18\": dimension(0),\n\t\t\t\"21\": dimension(0),\n\t\t\t\"24\": dimension(0),\n\t\t\t\"28\": dimension(-0.14),\n\t\t\t\"32\": dimension(-0.16),\n\t\t\t\"36\": dimension(-0.36),\n\t\t\t\"42\": dimension(-0.42),\n\t\t\t\"48\": dimension(-0.72),\n\t\t\t\"56\": dimension(-1.12),\n\t\t\t\"64\": dimension(-1.28),\n\t\t\t\"72\": dimension(-1.8),\n\t\t\t\"84\": dimension(-2.1),\n\t\t\t\"88\": dimension(-2.64),\n\t\t\t\"96\": dimension(-2.88),\n\t\t\t\"112\": dimension(-3.92),\n\t\t\t\"128\": dimension(-5.12),\n\t\t\t\"148\": dimension(-6.66),\n\t\t\t\"168\": dimension(-7.56),\n\t\t\t\"192\": dimension(-9.6),\n\t\t\t\"224\": dimension(-11.2),\n\t\t\t\"256\": dimension(-14.08),\n\t\t\t\"280\": dimension(-15.4),\n\t\t\tbutton: dimension(0.5),\n\t\t},\n\t\t\"font-family\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"fontFamily\",\n\t\t\t// Primitive font stacks\n\t\t\t\"pp-neue-montreal\": fontFamily([\"PP Neue Montreal\", \"sans-serif\"]),\n\t\t\tgloock: fontFamily([\"Gloock\", \"serif\"]),\n\t\t\tcormorant: fontFamily([\"Cormorant\", \"serif\"]),\n\t\t\tinter: fontFamily([\"Inter\", \"sans-serif\"]),\n\t\t\t\"inter-tight\": fontFamily([\"Inter Tight\", \"sans-serif\"]),\n\t\t\t\"instrument-serif\": fontFamily([\"Instrument Serif\", \"serif\"]),\n\t\t\t// Semantic aliases\n\t\t\tsans: fontFamily([\"PP Neue Montreal\", \"sans-serif\"]),\n\t\t\tserif: fontFamily([\"Gloock\", \"serif\"]),\n\t\t\t\"serif-alt\": fontFamily([\"Cormorant\", \"serif\"]),\n\t\t},\n\t\t\"font-weight\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"fontWeight\",\n\t\t\tregular: fontWeight(400),\n\t\t\tmedium: fontWeight(500),\n\t\t\tsemibold: fontWeight(600),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { JSONTokenTree } from \"@nds-design-system/design-tokens-format\";\nimport type { TokenExtensions } from \"./extensions\";\n\n/**\n * A token module is a partial token tree that can be merged with others.\n * It's a recursive structure where string keys map to either tokens or nested groups.\n */\nexport type TokenModule = {\n\t[key: string]: TokenValue | TokenGroup;\n};\n\n/**\n * A token group can contain nested groups or tokens\n */\nexport type TokenGroup = {\n\t$type?: string;\n\t$description?: string;\n\t/** NDS extension metadata - see extensions.ts for type definitions */\n\t$extensions?: TokenExtensions;\n\t[key: string]:\n\t\t| string\n\t\t| number\n\t\t| boolean\n\t\t| TokenValue\n\t\t| TokenGroup\n\t\t| TokenExtensions\n\t\t| string[]\n\t\t| number[]\n\t\t| undefined;\n};\n\n/**\n * Valid token type names per DTCG spec\n */\nexport type TokenTypeName =\n\t| \"color\"\n\t| \"dimension\"\n\t| \"fontFamily\"\n\t| \"fontWeight\"\n\t| \"duration\"\n\t| \"cubicBezier\"\n\t| \"number\"\n\t| \"strokeStyle\"\n\t| \"border\"\n\t| \"transition\"\n\t| \"shadow\"\n\t| \"gradient\"\n\t| \"typography\"\n\t| \"fontStyle\";\n\n/**\n * A token value has $type, $value, and potentially other properties.\n *\n * NOTE: $type is marked optional for TypeScript compatibility with design-tokens-format,\n * but runtime validation in validate.ts will error if $type is missing.\n * Each leaf token MUST have an explicit $type for proper Figma variable syncing.\n */\nexport type TokenValue = {\n\t$type?: TokenTypeName | string;\n\t$value:\n\t\t| string\n\t\t| number\n\t\t| boolean\n\t\t| string[]\n\t\t| number[]\n\t\t| Record<string, unknown>\n\t\t| Array<Record<string, unknown>>;\n\t$description?: string;\n\t[key: string]: unknown;\n};\n\n/**\n * Type guard to check if a value is a token module\n */\nexport function isTokenModule(value: unknown): value is TokenModule {\n\treturn typeof value === \"object\" && value !== null;\n}\n\n/**\n * Cast a token module to JSONTokenTree for validation\n */\nexport function toJSONTokenTree(module: TokenModule): JSONTokenTree {\n\treturn module as unknown as JSONTokenTree;\n}\n","import type { JSONTokenTree } from \"@nds-design-system/design-tokens-format\";\nimport { mergeTokenTrees } from \"./merge\";\nimport { primitiveAnimation } from \"./primitives/animation\";\nimport { primitiveBreakpoints } from \"./primitives/breakpoints\";\nimport { primitiveColors } from \"./primitives/colors\";\nimport { primitiveOpacity } from \"./primitives/opacity\";\nimport { primitiveRadii } from \"./primitives/radii\";\nimport { primitiveShadow } from \"./primitives/shadow\";\nimport { primitiveSpacing } from \"./primitives/spacing\";\nimport { primitiveTypography } from \"./primitives/typography\";\nimport { semanticColor } from \"./semantic/color/index\";\nimport { semanticSpatial } from \"./semantic/spatial/index\";\nimport { semanticSurface } from \"./semantic/surface/index\";\nimport { baseTypographyTokens } from \"./semantic/typography\";\nimport { toJSONTokenTree } from \"./types\";\n\n/**\n * Base token tree - primitives and base semantic tokens only.\n * Theme variants (dark, civic, bop, etc.) are applied at runtime via ThemeProvider.\n */\nexport const tokens: JSONTokenTree = mergeTokenTrees(\n\t// Primitives\n\ttoJSONTokenTree(primitiveColors),\n\ttoJSONTokenTree(primitiveTypography),\n\ttoJSONTokenTree(primitiveSpacing),\n\ttoJSONTokenTree(primitiveRadii),\n\ttoJSONTokenTree(primitiveBreakpoints),\n\ttoJSONTokenTree(primitiveAnimation),\n\ttoJSONTokenTree(primitiveOpacity),\n\ttoJSONTokenTree(primitiveShadow),\n\t// Typography base (property-based tokens)\n\ttoJSONTokenTree(baseTypographyTokens),\n\t// Base semantic tokens (default theme)\n\ttoJSONTokenTree(semanticColor),\n\ttoJSONTokenTree(semanticSurface),\n\ttoJSONTokenTree(semanticSpatial),\n);\n\nexport default tokens;\n","/**\n * ThemeProvider\n *\n * React context provider for applying theme tokens as CSS variables.\n * Use string theme names for type-safe selection, with \"base\" as default.\n */\n\nimport type {\n\tColorThemeName,\n\tCSSVariableMap,\n\tNestedStringRecord,\n\tSurfaceThemeName,\n\tTokenModule,\n} from \"@nds-design-system/tokens\";\nimport {\n\tcolorThemes,\n\tflatToCSSVars,\n\tflatToNested,\n\tisColorValue,\n\tisDimensionValue,\n\tsurfaceThemes,\n} from \"@nds-design-system/tokens\";\nimport { createContext, type ReactNode, useMemo } from \"react\";\n\n/**\n * Theme context value\n */\nexport interface ThemeContextValue {\n\t/** CSS variables map for inline styles */\n\tcssVars: CSSVariableMap;\n\t/** Resolved nested tokens */\n\ttokens: NestedStringRecord;\n\t/** Current color theme name */\n\tcolorTheme: ColorThemeName;\n\t/** Current surface theme name */\n\tsurfaceTheme: SurfaceThemeName;\n}\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n\n/**\n * Props for ThemeProvider\n */\nexport interface ThemeProviderProps {\n\t/** Color theme name (defaults to \"base\") */\n\tcolor?: ColorThemeName;\n\t/** Surface theme name (defaults to \"base\") */\n\tsurface?: SurfaceThemeName;\n\t/** Children to render */\n\tchildren: ReactNode;\n\t/** Optional className for the wrapper div */\n\tclassName?: string;\n\t/** Whether to render a wrapper div with CSS variables applied (defaults to true) */\n\tapplyStyles?: boolean;\n}\n\n/**\n * Convert a color value to CSS string\n */\nfunction colorToCSS(color: { components: number[]; alpha: number }): string {\n\tconst [r, g, b] = color.components;\n\tif (color.alpha < 1) {\n\t\treturn `color(srgb ${r} ${g} ${b} / ${color.alpha})`;\n\t}\n\treturn `color(srgb ${r} ${g} ${b})`;\n}\n\n/**\n * Convert a token value to CSS string\n */\nfunction tokenValueToCSS(value: unknown): string {\n\tif (isColorValue(value)) {\n\t\treturn colorToCSS(value);\n\t}\n\tif (isDimensionValue(value)) {\n\t\treturn `${value.value}${value.unit}`;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn String(value);\n\t}\n\treturn String(value);\n}\n\n/**\n * Process color tokens to flat key-value pairs (without -- prefix)\n */\nfunction processColorTokens(\n\tcolorObj: Record<string, unknown>,\n\tpath: string[] = [],\n): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\n\tfor (const [key, value] of Object.entries(colorObj)) {\n\t\tif (key.startsWith(\"$\")) continue;\n\n\t\tconst currentPath = [...path, key];\n\n\t\tif (typeof value === \"object\" && value !== null) {\n\t\t\tconst record = value as Record<string, unknown>;\n\n\t\t\tif (\"$value\" in record) {\n\t\t\t\t// This is a token - key without -- prefix\n\t\t\t\tconst varName = `color-${currentPath.join(\"-\")}`;\n\t\t\t\tconst tokenValue = record.$value;\n\n\t\t\t\tif (typeof tokenValue === \"string\" && tokenValue.startsWith(\"{\")) {\n\t\t\t\t\t// Alias reference - resolve to CSS var\n\t\t\t\t\tlet refPath = tokenValue.slice(1, -1).replace(/\\./g, \"-\");\n\t\t\t\t\t// Strip prefixes that aren't used in CSS variable names\n\t\t\t\t\trefPath = refPath.replace(/^primitive-/, \"\");\n\t\t\t\t\trefPath = refPath.replace(/^semantic-color-/, \"color-\");\n\t\t\t\t\tresult[varName] = `var(--${refPath})`;\n\t\t\t\t} else {\n\t\t\t\t\tresult[varName] = tokenValueToCSS(tokenValue);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Nested object - recurse\n\t\t\t\tObject.assign(result, processColorTokens(record, currentPath));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Process surface tokens to flat key-value pairs (without -- prefix)\n */\nfunction processSurfaceTokens(\n\tsurfaceObj: Record<string, unknown>,\n\tpath: string[] = [],\n): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\n\tfor (const [key, value] of Object.entries(surfaceObj)) {\n\t\tif (key.startsWith(\"$\")) continue;\n\n\t\tconst currentPath = [...path, key];\n\n\t\tif (typeof value === \"object\" && value !== null) {\n\t\t\tconst record = value as Record<string, unknown>;\n\n\t\t\tif (\"$value\" in record) {\n\t\t\t\t// This is a token\n\t\t\t\tconst tokenValue = record.$value;\n\t\t\t\tlet varName: string;\n\t\t\t\tlet cssValue: string;\n\n\t\t\t\t// Determine variable name based on token type (without -- prefix)\n\t\t\t\tif (currentPath[currentPath.length - 1] === \"radius\") {\n\t\t\t\t\t// e.g., button.radius -> radius-surface-button\n\t\t\t\t\tconst componentName = currentPath[0];\n\t\t\t\t\tvarName = `radius-surface-${componentName}`;\n\t\t\t\t} else if (currentPath[currentPath.length - 1] === \"stroke\") {\n\t\t\t\t\t// e.g., button.stroke -> surface-button-stroke\n\t\t\t\t\tconst componentName = currentPath[0];\n\t\t\t\t\tvarName = `surface-${componentName}-stroke`;\n\t\t\t\t} else {\n\t\t\t\t\tvarName = `surface-${currentPath.join(\"-\")}`;\n\t\t\t\t}\n\n\t\t\t\t// Resolve value\n\t\t\t\tif (typeof tokenValue === \"string\" && tokenValue.startsWith(\"{\")) {\n\t\t\t\t\t// Alias reference\n\t\t\t\t\tlet refPath = tokenValue.slice(1, -1).replace(/\\./g, \"-\");\n\t\t\t\t\t// Strip prefixes that aren't used in CSS variable names\n\t\t\t\t\trefPath = refPath.replace(/^primitive-/, \"\");\n\t\t\t\t\trefPath = refPath.replace(/^radii-/, \"radius-\");\n\t\t\t\t\tcssValue = `var(--${refPath})`;\n\t\t\t\t} else {\n\t\t\t\t\tcssValue = tokenValueToCSS(tokenValue);\n\t\t\t\t}\n\n\t\t\t\tresult[varName] = cssValue;\n\t\t\t} else {\n\t\t\t\t// Nested object - recurse\n\t\t\t\tObject.assign(result, processSurfaceTokens(record, currentPath));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Deep merge two token modules\n */\nfunction mergeTokenModules(\n\tbase: TokenModule,\n\toverride: TokenModule,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = JSON.parse(JSON.stringify(base));\n\tdeepMerge(result, override as Record<string, unknown>);\n\treturn result;\n}\n\n/**\n * Deep merge objects\n */\nfunction deepMerge(\n\ttarget: Record<string, unknown>,\n\tsource: Record<string, unknown>,\n): void {\n\tfor (const [key, value] of Object.entries(source)) {\n\t\tif (\n\t\t\ttypeof value === \"object\" &&\n\t\t\tvalue !== null &&\n\t\t\t!Array.isArray(value) &&\n\t\t\ttypeof target[key] === \"object\" &&\n\t\t\ttarget[key] !== null\n\t\t) {\n\t\t\tdeepMerge(\n\t\t\t\ttarget[key] as Record<string, unknown>,\n\t\t\t\tvalue as Record<string, unknown>,\n\t\t\t);\n\t\t} else {\n\t\t\ttarget[key] = value;\n\t\t}\n\t}\n}\n\n/**\n * ThemeProvider component\n *\n * Applies theme tokens as CSS variables using type-safe theme names.\n *\n * @example\n * ```tsx\n * // Use default base themes\n * <ThemeProvider>\n * <App />\n * </ThemeProvider>\n *\n * // Use specific themes by name\n * <ThemeProvider color=\"civic\" surface=\"sharp\">\n * <App />\n * </ThemeProvider>\n *\n * // Mix and match\n * <ThemeProvider color=\"institution\" surface=\"soft\">\n * <App />\n * </ThemeProvider>\n * ```\n */\nexport function ThemeProvider({\n\tcolor = \"base\",\n\tsurface = \"base\",\n\tchildren,\n\tclassName,\n\tapplyStyles = true,\n}: ThemeProviderProps) {\n\tconst { tokens, cssVars } = useMemo(() => {\n\t\tconst flatTokens: Record<string, string> = {};\n\n\t\t// Get color theme (merge with base if not base)\n\t\tconst baseColorModule = colorThemes.base;\n\t\tconst colorModule = colorThemes[color];\n\n\t\tconst mergedColor =\n\t\t\tcolor === \"base\"\n\t\t\t\t? (baseColorModule as Record<string, unknown>)\n\t\t\t\t: mergeTokenModules(baseColorModule, colorModule);\n\n\t\t// Navigate to semantic.color\n\t\tconst colorTokens =\n\t\t\t(mergedColor as { semantic?: { color?: Record<string, unknown> } })\n\t\t\t\t?.semantic?.color ?? mergedColor;\n\t\tObject.assign(flatTokens, processColorTokens(colorTokens));\n\n\t\t// Get surface theme (merge with base if not base)\n\t\tconst baseSurfaceModule = surfaceThemes.base;\n\t\tconst surfaceModule = surfaceThemes[surface];\n\n\t\tconst mergedSurface =\n\t\t\tsurface === \"base\"\n\t\t\t\t? (baseSurfaceModule as Record<string, unknown>)\n\t\t\t\t: mergeTokenModules(baseSurfaceModule, surfaceModule);\n\n\t\t// Navigate to semantic.surface\n\t\tconst surfaceTokens =\n\t\t\t(mergedSurface as { semantic?: { surface?: Record<string, unknown> } })\n\t\t\t\t?.semantic?.surface ?? mergedSurface;\n\t\tObject.assign(flatTokens, processSurfaceTokens(surfaceTokens));\n\n\t\t// Use shared utilities from tokens package\n\t\tconst nestedTokens = flatToNested(flatTokens);\n\t\tconst cssVariables = flatToCSSVars(flatTokens);\n\n\t\treturn { tokens: nestedTokens, cssVars: cssVariables };\n\t}, [color, surface]);\n\n\tconst contextValue: ThemeContextValue = {\n\t\tcssVars,\n\t\ttokens,\n\t\tcolorTheme: color,\n\t\tsurfaceTheme: surface,\n\t};\n\n\treturn (\n\t\t<ThemeContext.Provider value={contextValue}>\n\t\t\t{applyStyles ? (\n\t\t\t\t<div style={cssVars} className={className}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\tchildren\n\t\t\t)}\n\t\t</ThemeContext.Provider>\n\t);\n}\n","/**\n * Theme Hooks\n *\n * React hooks for accessing theme context.\n */\n\nimport type {\n\tCSSVariableMap,\n\tNestedStringRecord,\n} from \"@nds-design-system/tokens\";\nimport { useContext } from \"react\";\nimport { ThemeContext, type ThemeContextValue } from \"./theme-provider\";\n\n/**\n * Hook to access the theme context\n * @throws Error if used outside of ThemeProvider\n */\nexport function useTheme(): ThemeContextValue {\n\tconst context = useContext(ThemeContext);\n\tif (!context) {\n\t\tthrow new Error(\"useTheme must be used within a ThemeProvider\");\n\t}\n\treturn context;\n}\n\n/**\n * Hook to get just the nested tokens\n */\nexport function useThemeTokens(): NestedStringRecord {\n\tconst { tokens } = useTheme();\n\treturn tokens;\n}\n\n/**\n * Hook to get CSS variables for inline styles\n */\nexport function useCSSVars(): CSSVariableMap {\n\tconst { cssVars } = useTheme();\n\treturn cssVars;\n}\n","/**\n * Theme Utilities\n *\n * Helper functions for working with theme tokens and CSS variables.\n */\n\nimport type {\n\tCSSVariableMap,\n\tNestedStringRecord,\n} from \"@nds-design-system/tokens\";\nimport { nestedToCSSVars } from \"@nds-design-system/tokens\";\n\n/**\n * Convert nested token object to CSS variable map\n * @example\n * toCSSVars({ color: { bg: { page: '#fff' } } })\n * // Returns: { '--color-bg-page': '#fff' }\n */\nexport function toCSSVars(tokens: NestedStringRecord): CSSVariableMap {\n\treturn nestedToCSSVars(tokens);\n}\n\n/**\n * Apply CSS variables to an element\n * @example\n * applyTheme(document.body, { '--color-bg-page': '#fff' })\n */\nexport function applyTheme(\n\telement: HTMLElement,\n\tcssVars: CSSVariableMap,\n): void {\n\tfor (const [name, value] of Object.entries(cssVars)) {\n\t\telement.style.setProperty(name, value);\n\t}\n}\n\n/**\n * Remove CSS variables from an element\n */\nexport function removeTheme(\n\telement: HTMLElement,\n\tcssVars: CSSVariableMap,\n): void {\n\tfor (const name of Object.keys(cssVars)) {\n\t\telement.style.removeProperty(name);\n\t}\n}\n\n/**\n * Get a specific token value from nested tokens using dot notation\n * @example\n * getToken({ color: { bg: { page: '#fff' } } }, 'color.bg.page')\n * // Returns: '#fff'\n */\nexport function getToken(\n\ttokens: NestedStringRecord,\n\tpath: string,\n): string | undefined {\n\tconst parts = path.split(\".\");\n\tlet current: NestedStringRecord | string = tokens;\n\n\tfor (const part of parts) {\n\t\tif (typeof current === \"string\") return undefined;\n\t\tcurrent = current[part];\n\t\tif (current === undefined) return undefined;\n\t}\n\n\treturn typeof current === \"string\" ? current : undefined;\n}\n\n/**\n * Create a style object with CSS variables for React inline styles\n * @example\n * <div style={createThemeStyle(cssVars)}>...</div>\n */\nexport function createThemeStyle(cssVars: CSSVariableMap): React.CSSProperties {\n\treturn cssVars as React.CSSProperties;\n}\n\n/**\n * Merge multiple CSS variable maps\n */\nexport function mergeCSSVars(...maps: CSSVariableMap[]): CSSVariableMap {\n\treturn Object.assign({}, ...maps);\n}\n\n/**\n * Filter CSS variables by prefix\n * @example\n * filterCSSVars(cssVars, '--color-')\n * // Returns only variables starting with --color-\n */\nexport function filterCSSVars(\n\tcssVars: CSSVariableMap,\n\tprefix: string,\n): CSSVariableMap {\n\tconst result: CSSVariableMap = {};\n\tfor (const [name, value] of Object.entries(cssVars)) {\n\t\tif (name.startsWith(prefix)) {\n\t\t\tresult[name] = value;\n\t\t}\n\t}\n\treturn result;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/atoms/accordion/accordion.tsx","../src/components/atoms/background/background.tsx","../src/components/atoms/blurred-video-backdrop/blurred-video-backdrop.tsx","../src/lib/theme.ts","../src/components/atoms/button/button.tsx","../src/components/atoms/button/icon-button.tsx","../src/lib/form-control.ts","../src/components/atoms/input/input.tsx","../src/components/atoms/input/input-group.tsx","../src/components/atoms/ndstudio-footer/ndstudio-footer.tsx","../src/components/atoms/pager-control/pager-control.tsx","../src/components/shared/floating-arrow.tsx","../src/components/atoms/popover/popover.tsx","../src/components/atoms/select/select.tsx","../src/components/atoms/tooltip/tooltip.tsx","../src/components/atoms/video-player/caption-overlay.tsx","../src/hooks/use-captions.ts","../src/hooks/use-video-keyboard.ts","../src/components/atoms/video-player/video-player.tsx","../src/components/dev-tools/grid-overlay/grid-overlay.tsx","../src/components/dev-tools/dev-toolbar/dev-toolbar.tsx","../src/components/molecules/dialog/dialog.tsx","../src/components/molecules/video-dialog/video-dialog.tsx","../src/components/molecules/video-with-backdrop/video-with-backdrop.tsx","../src/components/organisms/card/card.tsx","../src/components/organisms/navbar/navbar.tsx","../src/components/organisms/us-gov-banner/us-gov-banner.tsx","../src/components/sections/banner/banner.tsx","../src/components/sections/card-grid/card-grid.tsx","../src/components/sections/two-column-section/two-column-section.tsx","../src/components/sections/faq-section/faq-section.tsx","../src/components/sections/hero/hero.tsx","../src/components/sections/prose/prose.tsx","../src/components/sections/quote-block/quote-block.tsx","../src/components/sections/river/river.tsx","../src/components/sections/tout/tout.tsx","../src/hooks/use-breakpoint.ts","../src/hooks/use-event-listener.ts","../../tokens/src/collections/types.ts","../../tokens/src/merge.ts","../../tokens/src/semantic/color/base.ts","../../design-tokens-format/src/definitions/tokenTypes.ts","../../design-tokens-format/src/utils/colorConversions.ts","../../tokens/src/utils.ts","../../tokens/src/semantic/color/bop.ts","../../tokens/src/semantic/color/civic.ts","../../tokens/src/semantic/color/dark.ts","../../tokens/src/semantic/color/darktech.ts","../../tokens/src/semantic/color/institution.ts","../../tokens/src/semantic/color/oceana.ts","../../tokens/src/semantic/color/recreation.ts","../../tokens/src/semantic/surface/base.ts","../../tokens/src/semantic/surface/framed.ts","../../tokens/src/semantic/surface/sharp.ts","../../tokens/src/semantic/surface/soft.ts","../../tokens/src/semantic/typography/base.ts","../../tokens/src/semantic/spatial/base.ts","../../tokens/src/theme-registry.ts","../../tokens/src/themes/resolver.ts","../../tokens/src/primitives/animation.ts","../../tokens/src/primitives/breakpoints.ts","../../tokens/src/primitives/colors.ts","../../tokens/src/primitives/opacity.ts","../../tokens/src/primitives/radii.ts","../../tokens/src/primitives/shadow.ts","../../tokens/src/primitives/spacing.ts","../../tokens/src/primitives/typography.ts","../../tokens/src/types.ts","../../tokens/src/tokens.ts","../src/theme/theme-provider.tsx","../src/theme/hooks.ts","../src/theme/utils.ts"],"names":["twMerge","React","BaseAccordion","tv","React2","jsx","React3","jsxs","React4","BaseButton","useRender","React5","React6","React7","duration","BasePopover","React8","BaseSelect","React9","BaseTooltip","React10","React11","React12","React13","useState","useRef","useCallback","useEffect","Fragment","BaseDialog","React15","React16","React17","React18","React19","Dialog","React20","React21","React22","React23","React24","React25","React26","React27","React28","React29","React30","React31","createContext","deepMerge","tokens","useMemo","useContext"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { cnBase as twMerge } from \"tailwind-variants\";\n\nexport { twMerge };\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { Accordion as BaseAccordion } from \"@base-ui-components/react/accordion\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n// =============================================================================\n// Accordion Variants\n// =============================================================================\n\nconst accordionVariants = tv({\n\tbase: \"flex flex-col\",\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"\",\n\t\t\tlight: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\nconst accordionItemVariants = tv({\n\tbase: \"border-b overflow-hidden\",\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"border-gray-300\",\n\t\t\tlight: \"border-gray-500\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\nconst accordionTriggerVariants = tv({\n\tbase: [\n\t\t// Uses primitive spacing tokens\n\t\t\"flex w-full items-center justify-between py-24 text-left\",\n\t\t\"typography-body-large transition-colors cursor-pointer\",\n\t],\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"text-gray-100 data-[open]:text-white\",\n\t\t\tlight: \"text-gray-800 data-[open]:text-gray-900\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\nconst accordionPanelVariants = tv({\n\t// Uses primitive spacing tokens\n\tbase: \"typography-body-large pb-24\",\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"text-gray-100\",\n\t\t\tlight: \"text-gray-800\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\n// =============================================================================\n// Accordion Context\n// =============================================================================\n\nconst AccordionContext = React.createContext<{\n\tcolorScheme: \"dark\" | \"light\";\n}>({\n\tcolorScheme: \"light\",\n});\n\n// =============================================================================\n// Accordion\n// =============================================================================\n\nexport interface AccordionProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof accordionVariants> {\n\t/**\n\t * Allow multiple items to be expanded at once\n\t * @default false\n\t */\n\tallowMultiple?: boolean;\n\t/**\n\t * The ID(s) of items that should be expanded by default\n\t */\n\tdefaultExpanded?: string | string[];\n\tchildren: React.ReactNode;\n}\n\n/**\n * Accordion component for expandable/collapsible content sections.\n * Built on Base UI's Accordion primitive.\n *\n * Variants:\n * - light: Light theme styling (default)\n * - dark: Dark theme styling\n *\n * @example\n * ```tsx\n * <Accordion defaultExpanded=\"item-1\" variant=\"dark\">\n * <AccordionItem id=\"item-1\" title=\"Question 1\">\n * Answer to question 1\n * </AccordionItem>\n * <AccordionItem id=\"item-2\" title=\"Question 2\">\n * Answer to question 2\n * </AccordionItem>\n * </Accordion>\n * ```\n */\nconst Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tallowMultiple = false,\n\t\t\tdefaultExpanded,\n\t\t\tcolorScheme = \"light\",\n\t\t\tchildren,\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Normalize defaultExpanded to array format for Base UI\n\t\tconst defaultValue = React.useMemo((): string[] | undefined => {\n\t\t\tif (!defaultExpanded) return undefined;\n\t\t\tif (Array.isArray(defaultExpanded)) return defaultExpanded;\n\t\t\treturn [defaultExpanded];\n\t\t}, [defaultExpanded]);\n\n\t\treturn (\n\t\t\t<AccordionContext.Provider value={{ colorScheme }}>\n\t\t\t\t<BaseAccordion.Root\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={accordionVariants({ colorScheme, class: className })}\n\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\tmultiple={allowMultiple}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</BaseAccordion.Root>\n\t\t\t</AccordionContext.Provider>\n\t\t);\n\t},\n);\nAccordion.displayName = \"Accordion\";\n\n// =============================================================================\n// AccordionItem\n// =============================================================================\n\nexport interface AccordionItemProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n\t/**\n\t * Unique identifier for this item\n\t */\n\tid: string;\n\t/**\n\t * The question/title displayed in the header\n\t */\n\ttitle: string;\n\t/**\n\t * The answer/content revealed when expanded\n\t */\n\tchildren: React.ReactNode;\n}\n\n/**\n * Individual accordion item with collapsible content.\n * Must be used within an Accordion component.\n */\nconst AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n\t({ className, id, title, children }, ref) => {\n\t\tconst { colorScheme } = React.useContext(AccordionContext);\n\n\t\treturn (\n\t\t\t<BaseAccordion.Item\n\t\t\t\tref={ref}\n\t\t\t\tvalue={id}\n\t\t\t\tclassName={accordionItemVariants({ colorScheme, class: className })}\n\t\t\t>\n\t\t\t\t{/* Header - always visible */}\n\t\t\t\t<BaseAccordion.Header>\n\t\t\t\t\t<BaseAccordion.Trigger\n\t\t\t\t\t\tclassName={accordionTriggerVariants({ colorScheme })}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>{title}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-base transition-transform duration-200\",\n\t\t\t\t\t\t\t\t\"[[data-open]_&]:rotate-45\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t+\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</BaseAccordion.Trigger>\n\t\t\t\t</BaseAccordion.Header>\n\n\t\t\t\t{/* Content - collapsible */}\n\t\t\t\t<BaseAccordion.Panel\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"h-[var(--accordion-panel-height)] overflow-hidden\",\n\t\t\t\t\t\t\"transition-[height] duration-300 ease-out\",\n\t\t\t\t\t\t\"[&[data-starting-style]]:h-0 [&[data-ending-style]]:h-0\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className={accordionPanelVariants({ colorScheme })}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</BaseAccordion.Panel>\n\t\t\t</BaseAccordion.Item>\n\t\t);\n\t},\n);\nAccordionItem.displayName = \"AccordionItem\";\n\nexport { Accordion, AccordionItem, accordionVariants };\n","\"use client\";\n\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\n// =============================================================================\n// Background Atomic Component\n// =============================================================================\n\nconst backgroundVariants = tv({\n\tbase: \"absolute inset-0\",\n});\n\n/**\n * Base container for background composition.\n * Use as a wrapper to compose multiple background layers (image, video, overlay, gradient).\n *\n * @example\n * ```tsx\n * <Background>\n * <Background.Image src=\"/hero.jpg\" />\n * <Background.Overlay opacity={0.4} />\n * <Background.Gradient direction=\"to-t\" from=\"black\" to=\"transparent\" />\n * </Background>\n * ```\n */\nexport interface BackgroundProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst Background = React.forwardRef<HTMLDivElement, BackgroundProps>(\n\t({ className, children, ...props }, ref) => (\n\t\t<div\n\t\t\tref={ref}\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={backgroundVariants({ class: className })}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t),\n);\nBackground.displayName = \"Background\";\n\n// =============================================================================\n// Background.Image\n// =============================================================================\n\nconst backgroundImageVariants = tv({\n\tbase: \"absolute inset-0 size-full object-cover\",\n});\n\nexport interface BackgroundImageProps\n\textends useRender.ComponentProps<\"img\">,\n\t\tOmit<React.ImgHTMLAttributes<HTMLImageElement>, \"src\" | \"render\"> {\n\t/**\n\t * URL for the background image\n\t */\n\tsrc: string;\n\t/**\n\t * Object position (default: \"center\")\n\t */\n\tposition?: string;\n}\n\n/**\n * Background image layer using an actual img element with object-cover.\n * Supports native lazy loading, srcset, and better accessibility.\n * Supports render prop for element composition.\n */\nfunction BackgroundImage(props: BackgroundImageProps) {\n\tconst {\n\t\tclassName,\n\t\tsrc,\n\t\tposition = \"center\",\n\t\talt = \"\",\n\t\tstyle,\n\t\trender,\n\t\t...otherProps\n\t} = props;\n\n\tconst imgClassName = backgroundImageVariants({ class: className });\n\tconst imgStyle = { objectPosition: position, ...style };\n\n\treturn useRender({\n\t\trender,\n\t\tprops: {\n\t\t\tsrc,\n\t\t\talt,\n\t\t\tclassName: imgClassName,\n\t\t\tstyle: imgStyle,\n\t\t\t...otherProps,\n\t\t},\n\t\tdefaultTagName: \"img\",\n\t});\n}\nBackgroundImage.displayName = \"Background.Image\";\n\n// =============================================================================\n// Background.Video\n// =============================================================================\n\nconst backgroundVideoVariants = tv({\n\tbase: \"absolute inset-0 size-full object-cover\",\n});\n\nexport interface BackgroundVideoProps\n\textends useRender.ComponentProps<\"video\">,\n\t\tOmit<\n\t\t\tReact.VideoHTMLAttributes<HTMLVideoElement>,\n\t\t\t\"children\" | \"render\" | \"src\"\n\t\t> {\n\t/**\n\t * URL for the video source\n\t */\n\tsrc: string;\n\t/**\n\t * Video MIME type (default: auto-detected from src)\n\t */\n\ttype?: string;\n\t/**\n\t * Poster image URL shown before video loads\n\t */\n\tposter?: string;\n}\n\n/**\n * Background video layer using HTML5 video element.\n * Supports render prop for element composition.\n */\nfunction BackgroundVideo(props: BackgroundVideoProps) {\n\tconst {\n\t\tclassName,\n\t\tsrc,\n\t\ttype,\n\t\tposter,\n\t\tautoPlay = true,\n\t\tloop = true,\n\t\tmuted = true,\n\t\tplaysInline = true,\n\t\trender,\n\t\tchildren,\n\t\t...otherProps\n\t} = props;\n\n\tconst videoClassName = backgroundVideoVariants({ class: className });\n\n\t// useRender must be called unconditionally\n\tconst rendered = useRender({\n\t\trender,\n\t\tprops: {\n\t\t\tautoPlay,\n\t\t\tloop,\n\t\t\tmuted,\n\t\t\tplaysInline,\n\t\t\tposter,\n\t\t\tclassName: videoClassName,\n\t\t\t...otherProps,\n\t\t},\n\t\tdefaultTagName: \"video\",\n\t});\n\n\t// If no render prop, return video with source child\n\tif (!render) {\n\t\treturn (\n\t\t\t<video\n\t\t\t\tautoPlay={autoPlay}\n\t\t\t\tloop={loop}\n\t\t\t\tmuted={muted}\n\t\t\t\tplaysInline={playsInline}\n\t\t\t\tposter={poster}\n\t\t\t\tclassName={videoClassName}\n\t\t\t\t{...otherProps}\n\t\t\t>\n\t\t\t\t<source src={src} type={type} />\n\t\t\t</video>\n\t\t);\n\t}\n\n\treturn rendered;\n}\nBackgroundVideo.displayName = \"Background.Video\";\n\n// =============================================================================\n// Background.Stream\n// =============================================================================\n\nconst backgroundStreamVariants = tv({\n\tbase: \"absolute inset-0 size-full border-0 scale-[1.5] object-cover\",\n});\n\nexport interface BackgroundStreamProps\n\textends React.IframeHTMLAttributes<HTMLIFrameElement> {\n\t/**\n\t * Cloudflare Stream video ID\n\t */\n\tvideoId: string;\n\t/**\n\t * Poster image URL (Cloudflare Stream thumbnail or custom)\n\t */\n\tposter?: string;\n\t/**\n\t * Whether the video should autoplay (default: true)\n\t */\n\tautoplay?: boolean;\n\t/**\n\t * Whether the video should loop (default: true)\n\t */\n\tloop?: boolean;\n\t/**\n\t * Whether the video should be muted (default: true)\n\t */\n\tmuted?: boolean;\n\t/**\n\t * Whether to show playback controls (default: false)\n\t */\n\tcontrols?: boolean;\n\t/**\n\t * Custom Cloudflare customer subdomain (if using custom domains)\n\t */\n\tcustomerSubdomain?: string;\n}\n\n/**\n * Background video layer using Cloudflare Stream.\n */\nconst BackgroundStream = React.forwardRef<\n\tHTMLIFrameElement,\n\tBackgroundStreamProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvideoId,\n\t\t\tposter,\n\t\t\tautoplay = true,\n\t\t\tloop = true,\n\t\t\tmuted = true,\n\t\t\tcontrols = false,\n\t\t\tcustomerSubdomain,\n\t\t\ttitle = \"Background video\",\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst baseUrl = customerSubdomain\n\t\t\t? `https://${customerSubdomain}.cloudflarestream.com`\n\t\t\t: \"https://iframe.videodelivery.net\";\n\n\t\tconst params = new URLSearchParams();\n\t\tif (autoplay) params.set(\"autoplay\", \"true\");\n\t\tif (loop) params.set(\"loop\", \"true\");\n\t\tif (muted) params.set(\"muted\", \"true\");\n\t\tif (!controls) params.set(\"controls\", \"false\");\n\t\tif (poster) params.set(\"poster\", poster);\n\t\tparams.set(\"preload\", \"auto\");\n\n\t\tconst streamUrl = `${baseUrl}/${videoId}?${params.toString()}`;\n\n\t\treturn (\n\t\t\t<iframe\n\t\t\t\tref={ref}\n\t\t\t\tsrc={streamUrl}\n\t\t\t\ttitle={title}\n\t\t\t\tallow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n\t\t\t\tallowFullScreen\n\t\t\t\tclassName={backgroundStreamVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nBackgroundStream.displayName = \"Background.Stream\";\n\n// =============================================================================\n// Background.Overlay\n// =============================================================================\n\nconst backgroundOverlayVariants = tv({\n\tbase: \"absolute inset-0 bg-bg-overlay\",\n});\n\nexport interface BackgroundOverlayProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * Overlay opacity (0-1)\n\t */\n\topacity?: number;\n}\n\n/**\n * Solid color overlay layer. Uses semantic bg-overlay token by default.\n * Override with className for different colors.\n */\nconst BackgroundOverlay = React.forwardRef<\n\tHTMLDivElement,\n\tBackgroundOverlayProps\n>(({ className, opacity = 0.4, style, ...props }, ref) => (\n\t<div\n\t\tref={ref}\n\t\taria-hidden=\"true\"\n\t\tclassName={backgroundOverlayVariants({ class: className })}\n\t\tstyle={{\n\t\t\topacity,\n\t\t\t...style,\n\t\t}}\n\t\t{...props}\n\t/>\n));\nBackgroundOverlay.displayName = \"Background.Overlay\";\n\n// =============================================================================\n// Background.Gradient\n// =============================================================================\n\nconst backgroundGradientVariants = tv({\n\tbase: \"absolute inset-0\",\n});\n\nexport interface BackgroundGradientProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * Gradient direction (Tailwind convention: to-t, to-b, to-l, to-r, etc.)\n\t * Or CSS gradient direction (to top, to bottom, 45deg, etc.)\n\t */\n\tdirection?: string;\n\t/**\n\t * Starting color (from)\n\t */\n\tfrom?: string;\n\t/**\n\t * Optional middle color (via)\n\t */\n\tvia?: string;\n\t/**\n\t * Ending color (to)\n\t */\n\tto?: string;\n\t/**\n\t * Full custom gradient string (overrides from/via/to)\n\t */\n\tgradient?: string;\n}\n\n/**\n * Gradient overlay layer. Use for fading backgrounds or creating depth.\n */\nconst BackgroundGradient = React.forwardRef<\n\tHTMLDivElement,\n\tBackgroundGradientProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tdirection = \"to-b\",\n\t\t\tfrom = \"transparent\",\n\t\t\tvia,\n\t\t\tto = \"black\",\n\t\t\tgradient,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Convert Tailwind-style direction to CSS\n\t\tconst cssDirection = direction.startsWith(\"to-\")\n\t\t\t? direction.replace(\"to-\", \"to \")\n\t\t\t: direction;\n\n\t\tconst gradientValue =\n\t\t\tgradient ||\n\t\t\t(via\n\t\t\t\t? `linear-gradient(${cssDirection}, ${from}, ${via}, ${to})`\n\t\t\t\t: `linear-gradient(${cssDirection}, ${from}, ${to})`);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName={backgroundGradientVariants({ class: className })}\n\t\t\t\tstyle={{\n\t\t\t\t\tbackgroundImage: gradientValue,\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nBackgroundGradient.displayName = \"Background.Gradient\";\n\n// =============================================================================\n// Compound Export\n// =============================================================================\n\nconst BackgroundCompound = Object.assign(Background, {\n\tImage: BackgroundImage,\n\tVideo: BackgroundVideo,\n\tStream: BackgroundStream,\n\tOverlay: BackgroundOverlay,\n\tGradient: BackgroundGradient,\n});\n\nexport {\n\tBackgroundCompound as Background,\n\tBackgroundImage,\n\tBackgroundVideo,\n\tBackgroundStream,\n\tBackgroundOverlay,\n\tBackgroundGradient,\n\tbackgroundVariants,\n\tbackgroundImageVariants,\n\tbackgroundVideoVariants,\n\tbackgroundStreamVariants,\n\tbackgroundOverlayVariants,\n\tbackgroundGradientVariants,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype BlurIntensity = \"low\" | \"medium\" | \"high\" | \"extreme\";\ntype OverlayType = \"none\" | \"vignette\" | \"top-bottom\";\n\n// ============================================================================\n// Variant Definitions\n// ============================================================================\n\n/**\n * Blurred video backdrop wrapper variants.\n *\n * The wrapper extends beyond its bounds (inset: -120px) to cover\n * blur artifacts at the edges.\n */\nconst blurredVideoBackdropVariants = tv({\n\tbase: [\n\t\t\"absolute\",\n\t\t\"pointer-events-none\",\n\t\t\"select-none\",\n\t\t\"will-change-contents\",\n\t\t\"transform-gpu\",\n\t],\n\tvariants: {\n\t\t/**\n\t\t * Blur intensity level.\n\t\t * Higher values provide more diffused backgrounds.\n\t\t */\n\t\tblur: {\n\t\t\tlow: \"\",\n\t\t\tmedium: \"\",\n\t\t\thigh: \"\",\n\t\t\textreme: \"\",\n\t\t},\n\t\t/**\n\t\t * Gradient overlay for visual depth.\n\t\t */\n\t\toverlay: {\n\t\t\tnone: \"\",\n\t\t\tvignette: \"\",\n\t\t\t\"top-bottom\": \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tblur: \"high\",\n\t\toverlay: \"none\",\n\t},\n});\n\n/**\n * Canvas element styles.\n */\nconst canvasVariants = tv({\n\tbase: [\"w-full\", \"h-full\", \"object-cover\"],\n});\n\n/**\n * Gradient overlay base styles.\n * Gradient backgrounds are applied via inline styles to avoid arbitrary values.\n */\nconst gradientOverlayVariants = tv({\n\tbase: [\"absolute\", \"inset-0\", \"pointer-events-none\"],\n});\n\n/**\n * Gradient overlay background styles.\n * Using inline styles to maintain token compliance (no arbitrary values in Tailwind).\n */\nconst OVERLAY_GRADIENTS: Record<Exclude<OverlayType, \"none\">, string> = {\n\tvignette:\n\t\t\"radial-gradient(ellipse at center, transparent 40%, rgba(0, 0, 0, 0.4) 100%)\",\n\t\"top-bottom\":\n\t\t\"linear-gradient(180deg, rgba(0, 0, 0, 0.4) 0%, transparent 30%, transparent 70%, rgba(0, 0, 0, 0.4) 100%)\",\n};\n\n// ============================================================================\n// Blur amount mapping\n// ============================================================================\n\nconst BLUR_AMOUNTS: Record<BlurIntensity, number> = {\n\tlow: 40,\n\tmedium: 80,\n\thigh: 100,\n\textreme: 120,\n};\n\n// ============================================================================\n// useCanvasBlur Hook\n// ============================================================================\n\ninterface UseCanvasBlurOptions {\n\t/** Ref to the source video element */\n\tvideoRef: React.RefObject<HTMLVideoElement | null>;\n\t/** Blur amount in pixels */\n\tblurAmount: number;\n\t/** Whether rendering is enabled */\n\tenabled?: boolean;\n\t/** Target FPS (lower = better performance, default: 30) */\n\ttargetFps?: number;\n\t/** Canvas scale factor (lower = better performance, default: 0.5) */\n\tscale?: number;\n}\n\ninterface UseCanvasBlurReturn {\n\t/** Ref to attach to the canvas element */\n\tcanvasRef: React.RefObject<HTMLCanvasElement | null>;\n\t/** Whether the canvas is currently rendering */\n\tisRendering: boolean;\n\t/** Performance metrics */\n\tmetrics: {\n\t\tfps: number;\n\t\tframeTime: number;\n\t};\n}\n\n/**\n * Hook for rendering a blurred video to canvas.\n *\n * Performance optimizations:\n * - Renders at reduced resolution (scale factor)\n * - Throttled to target FPS\n * - Uses CSS scale to fill container\n * - Single video decoder (no sync needed)\n */\nfunction useCanvasBlur({\n\tvideoRef,\n\tblurAmount,\n\tenabled = true,\n\ttargetFps = 30,\n\tscale = 0.5,\n}: UseCanvasBlurOptions): UseCanvasBlurReturn {\n\tconst canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n\tconst ctxRef = React.useRef<CanvasRenderingContext2D | null>(null);\n\tconst [isRendering, setIsRendering] = React.useState(false);\n\tconst [metrics, setMetrics] = React.useState({ fps: 0, frameTime: 0 });\n\n\t// Track when video ref is ready (it populates after mount)\n\tconst [videoReady, setVideoReady] = React.useState(false);\n\n\t// Performance tracking refs\n\tconst lastFrameTimeRef = React.useRef(0);\n\tconst frameCountRef = React.useRef(0);\n\tconst fpsIntervalRef = React.useRef(0);\n\n\t// Frame interval based on target FPS\n\tconst frameInterval = 1000 / targetFps;\n\n\t// Poll for video ref to be ready (refs populate after initial render)\n\tReact.useEffect(() => {\n\t\tif (!enabled) return;\n\n\t\tconst checkRef = () => {\n\t\t\tif (videoRef.current && canvasRef.current) {\n\t\t\t\tsetVideoReady(true);\n\t\t\t}\n\t\t};\n\n\t\t// Check immediately\n\t\tcheckRef();\n\n\t\t// Also check on next frames in case elements mount after this effect\n\t\tconst frameId = requestAnimationFrame(checkRef);\n\t\tconst timeoutId = setTimeout(checkRef, 100);\n\t\tconst timeoutId2 = setTimeout(checkRef, 500);\n\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(frameId);\n\t\t\tclearTimeout(timeoutId);\n\t\t\tclearTimeout(timeoutId2);\n\t\t};\n\t}, [enabled, videoRef]);\n\n\t// Main rendering effect\n\tReact.useEffect(() => {\n\t\tif (!enabled || !videoReady) return;\n\n\t\tconst video = videoRef.current;\n\t\tconst canvas = canvasRef.current;\n\n\t\tif (!video || !canvas) return;\n\n\t\t// Initialize canvas context\n\t\tconst ctx = canvas.getContext(\"2d\", {\n\t\t\talpha: false,\n\t\t\tdesynchronized: true, // Reduces latency\n\t\t});\n\n\t\tif (!ctx) return;\n\t\tctxRef.current = ctx;\n\n\t\tlet animationFrameId: number;\n\t\tlet isActive = true;\n\n\t\t// Set canvas size based on video dimensions with scale factor\n\t\tconst updateCanvasSize = () => {\n\t\t\tif (video.videoWidth && video.videoHeight) {\n\t\t\t\tcanvas.width = Math.floor(video.videoWidth * scale);\n\t\t\t\tcanvas.height = Math.floor(video.videoHeight * scale);\n\t\t\t}\n\t\t};\n\n\t\tconst render = (timestamp: number) => {\n\t\t\tif (!isActive || !video || !ctx) return;\n\n\t\t\t// Throttle to target FPS\n\t\t\tconst elapsed = timestamp - lastFrameTimeRef.current;\n\n\t\t\tif (elapsed >= frameInterval) {\n\t\t\t\tconst frameStart = performance.now();\n\n\t\t\t\t// Update canvas size if needed\n\t\t\t\tif (canvas.width === 0 || canvas.height === 0) {\n\t\t\t\t\tupdateCanvasSize();\n\t\t\t\t}\n\n\t\t\t\t// Only draw if video has data and is playing\n\t\t\t\tif (video.readyState >= 2 && !video.paused) {\n\t\t\t\t\t// Apply blur filter and draw\n\t\t\t\t\tctx.filter = `blur(${blurAmount * scale}px)`;\n\t\t\t\t\tctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n\n\t\t\t\t\tsetIsRendering(true);\n\t\t\t\t}\n\n\t\t\t\t// Track frame time\n\t\t\t\tconst frameTime = performance.now() - frameStart;\n\t\t\t\tframeCountRef.current++;\n\n\t\t\t\t// Update FPS every second\n\t\t\t\tif (timestamp - fpsIntervalRef.current >= 1000) {\n\t\t\t\t\tsetMetrics({\n\t\t\t\t\t\tfps: frameCountRef.current,\n\t\t\t\t\t\tframeTime: Math.round(frameTime * 100) / 100,\n\t\t\t\t\t});\n\t\t\t\t\tframeCountRef.current = 0;\n\t\t\t\t\tfpsIntervalRef.current = timestamp;\n\t\t\t\t}\n\n\t\t\t\tlastFrameTimeRef.current = timestamp - (elapsed % frameInterval);\n\t\t\t}\n\n\t\t\tanimationFrameId = requestAnimationFrame(render);\n\t\t};\n\n\t\t// Handle video events\n\t\tconst handleLoadedMetadata = () => {\n\t\t\tupdateCanvasSize();\n\t\t};\n\n\t\tconst handlePlay = () => {\n\t\t\tif (isActive) {\n\t\t\t\tanimationFrameId = requestAnimationFrame(render);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePause = () => {\n\t\t\tsetIsRendering(false);\n\t\t};\n\n\t\t// Add event listeners\n\t\tvideo.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n\t\tvideo.addEventListener(\"play\", handlePlay);\n\t\tvideo.addEventListener(\"pause\", handlePause);\n\n\t\t// Initialize size if video is already loaded\n\t\tif (video.readyState >= 1) {\n\t\t\tupdateCanvasSize();\n\t\t}\n\n\t\t// Start render loop if video is playing\n\t\tif (!video.paused) {\n\t\t\tanimationFrameId = requestAnimationFrame(render);\n\t\t}\n\n\t\treturn () => {\n\t\t\tisActive = false;\n\t\t\tcancelAnimationFrame(animationFrameId);\n\t\t\tvideo.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n\t\t\tvideo.removeEventListener(\"play\", handlePlay);\n\t\t\tvideo.removeEventListener(\"pause\", handlePause);\n\t\t\tsetIsRendering(false);\n\t\t};\n\t}, [enabled, videoReady, videoRef, blurAmount, frameInterval, scale]);\n\n\treturn {\n\t\tcanvasRef,\n\t\tisRendering,\n\t\tmetrics,\n\t};\n}\n\n// ============================================================================\n// BlurredVideoBackdrop Component\n// ============================================================================\n\nexport interface BlurredVideoBackdropProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n\t\tVariantProps<typeof blurredVideoBackdropVariants> {\n\t/** Ref to the primary video element to create backdrop from (required) */\n\tvideoRef: React.RefObject<HTMLVideoElement | null>;\n\t/** Opacity of the backdrop (0-1, default: 0.6) */\n\topacity?: number;\n\t/** Extension amount in pixels to cover blur artifacts (default: 120) */\n\textension?: number;\n\t/** Target FPS for canvas rendering (default: 30) */\n\ttargetFps?: number;\n\t/** Canvas scale factor - lower = better performance (default: 0.5) */\n\tscale?: number;\n\t/** Whether to show debug metrics */\n\tshowMetrics?: boolean;\n}\n\n/**\n * BlurredVideoBackdrop - A high-performance blurred video backdrop using canvas.\n *\n * Renders a blurred copy of a video element to create an ambient backdrop effect.\n * Uses canvas rendering for optimal performance - no video sync needed.\n *\n * Performance features:\n * - Single video decoder (draws from existing video element)\n * - Reduced resolution rendering (configurable scale)\n * - Throttled frame rate (configurable FPS)\n * - GPU-accelerated canvas scaling\n *\n * @example\n * ```tsx\n * const videoRef = useRef<HTMLVideoElement>(null);\n *\n * <div className=\"relative\">\n * <BlurredVideoBackdrop\n * videoRef={videoRef}\n * blur=\"high\"\n * overlay=\"vignette\"\n * />\n * <VideoPlayer videoRef={videoRef} src=\"/video.mp4\" />\n * </div>\n * ```\n */\nconst BlurredVideoBackdrop = React.forwardRef<\n\tHTMLDivElement,\n\tBlurredVideoBackdropProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvideoRef,\n\t\t\tblur = \"high\",\n\t\t\toverlay = \"none\",\n\t\t\topacity = 0.6,\n\t\t\textension = 120,\n\t\t\ttargetFps = 30,\n\t\t\tscale = 0.5,\n\t\t\tshowMetrics = false,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst blurAmount = BLUR_AMOUNTS[blur ?? \"high\"];\n\n\t\tconst { canvasRef, isRendering, metrics } = useCanvasBlur({\n\t\t\tvideoRef,\n\t\t\tblurAmount,\n\t\t\tenabled: true,\n\t\t\ttargetFps,\n\t\t\tscale,\n\t\t});\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tblurredVideoBackdropVariants({ blur, overlay }),\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\tinset: `-${extension}px`,\n\t\t\t\t\topacity,\n\t\t\t\t\tcontain: \"layout style paint\",\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t\tdata-blur={blur ?? \"high\"}\n\t\t\t\tdata-overlay={overlay ?? \"none\"}\n\t\t\t\tdata-rendering={isRendering}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<canvas\n\t\t\t\t\tref={canvasRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tcanvasVariants(),\n\t\t\t\t\t\t// Scale up the low-res canvas to fill container\n\t\t\t\t\t\t\"scale-[2]\", // Inverse of 0.5 scale factor\n\t\t\t\t\t\t\"origin-center\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t// Additional CSS blur for smoother appearance\n\t\t\t\t\t\tfilter: `blur(${blurAmount * 0.3}px)`,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{overlay && overlay !== \"none\" && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={gradientOverlayVariants()}\n\t\t\t\t\t\tstyle={{ background: OVERLAY_GRADIENTS[overlay] }}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{showMetrics && (\n\t\t\t\t\t<div className=\"absolute bottom-8 left-8 z-10 bg-black/80 text-white typography-caption px-8 py-4 rounded-4 font-mono\">\n\t\t\t\t\t\t<div>FPS: {metrics.fps}</div>\n\t\t\t\t\t\t<div>Frame: {metrics.frameTime}ms</div>\n\t\t\t\t\t\t<div>Scale: {scale}x</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nBlurredVideoBackdrop.displayName = \"BlurredVideoBackdrop\";\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n\tBlurredVideoBackdrop,\n\tblurredVideoBackdropVariants,\n\tcanvasVariants,\n\tgradientOverlayVariants,\n\tuseCanvasBlur,\n\tBLUR_AMOUNTS,\n};\n\nexport type {\n\tUseCanvasBlurOptions,\n\tUseCanvasBlurReturn,\n\tBlurIntensity,\n\tOverlayType,\n};\n","/**\n * Component-level theming interface\n *\n * This interface defines all the customizable design tokens that can be\n * overridden at the component level. Components accepting a `theme` prop\n * will apply these values as CSS custom properties, allowing fine-grained\n * control over appearance without creating new variants.\n *\n * All values use primitive token names (e.g., \"gray-100\", \"spacing-40\")\n * which are converted to CSS variable references internally.\n */\n\n// =============================================================================\n// Token Name Types\n// =============================================================================\n\n/**\n * Color token names - maps to `--color-{name}` CSS variables\n * @example \"gray-100\", \"ember-v300\", \"alpha-black-10\"\n */\nexport type ColorToken =\n\t// Grayscale\n\t| \"gray-50\"\n\t| \"gray-100\"\n\t| \"gray-200\"\n\t| \"gray-300\"\n\t| \"gray-400\"\n\t| \"gray-500\"\n\t| \"gray-600\"\n\t| \"gray-700\"\n\t| \"gray-800\"\n\t| \"gray-900\"\n\t| \"gray-1000\"\n\t| \"gray-1100\"\n\t| \"gray-1200\"\n\t// Steel\n\t| \"steel-50\"\n\t| \"steel-100\"\n\t| \"steel-200\"\n\t| \"steel-300\"\n\t| \"steel-400\"\n\t| \"steel-500\"\n\t| \"steel-600\"\n\t| \"steel-700\"\n\t| \"steel-800\"\n\t| \"steel-900\"\n\t| \"steel-1000\"\n\t| \"steel-1100\"\n\t| \"steel-1200\"\n\t// Brown\n\t| \"brown-50\"\n\t| \"brown-100\"\n\t| \"brown-200\"\n\t| \"brown-300\"\n\t| \"brown-400\"\n\t| \"brown-500\"\n\t| \"brown-600\"\n\t| \"brown-700\"\n\t| \"brown-800\"\n\t| \"brown-900\"\n\t| \"brown-1000\"\n\t| \"brown-1100\"\n\t| \"brown-1200\"\n\t// Ember\n\t| \"ember-50\"\n\t| \"ember-100\"\n\t| \"ember-200\"\n\t| \"ember-300\"\n\t| \"ember-400\"\n\t| \"ember-500\"\n\t| \"ember-600\"\n\t| \"ember-700\"\n\t| \"ember-800\"\n\t| \"ember-900\"\n\t| \"ember-v100\"\n\t| \"ember-v200\"\n\t| \"ember-v300\"\n\t| \"ember-v400\"\n\t// Orange\n\t| \"orange-50\"\n\t| \"orange-100\"\n\t| \"orange-200\"\n\t| \"orange-300\"\n\t| \"orange-400\"\n\t| \"orange-500\"\n\t| \"orange-600\"\n\t| \"orange-700\"\n\t| \"orange-800\"\n\t| \"orange-900\"\n\t| \"orange-v100\"\n\t| \"orange-v200\"\n\t| \"orange-v300\"\n\t| \"orange-v400\"\n\t// Amber\n\t| \"amber-50\"\n\t| \"amber-100\"\n\t| \"amber-200\"\n\t| \"amber-300\"\n\t| \"amber-400\"\n\t| \"amber-500\"\n\t| \"amber-600\"\n\t| \"amber-700\"\n\t| \"amber-800\"\n\t| \"amber-900\"\n\t| \"amber-v100\"\n\t| \"amber-v200\"\n\t| \"amber-v300\"\n\t| \"amber-v400\"\n\t// Yellow\n\t| \"yellow-50\"\n\t| \"yellow-100\"\n\t| \"yellow-200\"\n\t| \"yellow-300\"\n\t| \"yellow-400\"\n\t| \"yellow-500\"\n\t| \"yellow-600\"\n\t| \"yellow-700\"\n\t| \"yellow-800\"\n\t| \"yellow-900\"\n\t| \"yellow-v100\"\n\t| \"yellow-v200\"\n\t| \"yellow-v300\"\n\t| \"yellow-v400\"\n\t// Lime\n\t| \"lime-50\"\n\t| \"lime-100\"\n\t| \"lime-200\"\n\t| \"lime-300\"\n\t| \"lime-400\"\n\t| \"lime-500\"\n\t| \"lime-600\"\n\t| \"lime-700\"\n\t| \"lime-800\"\n\t| \"lime-900\"\n\t| \"lime-v100\"\n\t| \"lime-v200\"\n\t| \"lime-v300\"\n\t| \"lime-v400\"\n\t// Green\n\t| \"green-50\"\n\t| \"green-100\"\n\t| \"green-200\"\n\t| \"green-300\"\n\t| \"green-400\"\n\t| \"green-500\"\n\t| \"green-600\"\n\t| \"green-700\"\n\t| \"green-800\"\n\t| \"green-900\"\n\t| \"green-v100\"\n\t| \"green-v200\"\n\t| \"green-v300\"\n\t| \"green-v400\"\n\t// Sage\n\t| \"sage-50\"\n\t| \"sage-100\"\n\t| \"sage-200\"\n\t| \"sage-300\"\n\t| \"sage-400\"\n\t| \"sage-500\"\n\t| \"sage-600\"\n\t| \"sage-700\"\n\t| \"sage-800\"\n\t| \"sage-900\"\n\t| \"sage-v100\"\n\t| \"sage-v200\"\n\t| \"sage-v300\"\n\t| \"sage-v400\"\n\t// Teal\n\t| \"teal-50\"\n\t| \"teal-100\"\n\t| \"teal-200\"\n\t| \"teal-300\"\n\t| \"teal-400\"\n\t| \"teal-500\"\n\t| \"teal-600\"\n\t| \"teal-700\"\n\t| \"teal-800\"\n\t| \"teal-900\"\n\t| \"teal-v100\"\n\t| \"teal-v200\"\n\t| \"teal-v300\"\n\t| \"teal-v400\"\n\t// Cyan\n\t| \"cyan-50\"\n\t| \"cyan-100\"\n\t| \"cyan-200\"\n\t| \"cyan-300\"\n\t| \"cyan-400\"\n\t| \"cyan-500\"\n\t| \"cyan-600\"\n\t| \"cyan-700\"\n\t| \"cyan-800\"\n\t| \"cyan-900\"\n\t| \"cyan-v100\"\n\t| \"cyan-v200\"\n\t| \"cyan-v300\"\n\t| \"cyan-v400\"\n\t// Ice\n\t| \"ice-50\"\n\t| \"ice-100\"\n\t| \"ice-200\"\n\t| \"ice-300\"\n\t| \"ice-400\"\n\t| \"ice-500\"\n\t| \"ice-600\"\n\t| \"ice-700\"\n\t| \"ice-800\"\n\t| \"ice-900\"\n\t| \"ice-v100\"\n\t| \"ice-v200\"\n\t| \"ice-v300\"\n\t| \"ice-v400\"\n\t// Blue\n\t| \"blue-50\"\n\t| \"blue-100\"\n\t| \"blue-200\"\n\t| \"blue-300\"\n\t| \"blue-400\"\n\t| \"blue-500\"\n\t| \"blue-600\"\n\t| \"blue-700\"\n\t| \"blue-800\"\n\t| \"blue-900\"\n\t| \"blue-v100\"\n\t| \"blue-v200\"\n\t| \"blue-v300\"\n\t| \"blue-v400\"\n\t// Indigo\n\t| \"indigo-50\"\n\t| \"indigo-100\"\n\t| \"indigo-200\"\n\t| \"indigo-300\"\n\t| \"indigo-400\"\n\t| \"indigo-500\"\n\t| \"indigo-600\"\n\t| \"indigo-700\"\n\t| \"indigo-800\"\n\t| \"indigo-900\"\n\t| \"indigo-v100\"\n\t| \"indigo-v200\"\n\t| \"indigo-v300\"\n\t| \"indigo-v400\"\n\t// Iris\n\t| \"iris-50\"\n\t| \"iris-100\"\n\t| \"iris-200\"\n\t| \"iris-300\"\n\t| \"iris-400\"\n\t| \"iris-500\"\n\t| \"iris-600\"\n\t| \"iris-700\"\n\t| \"iris-800\"\n\t| \"iris-900\"\n\t| \"iris-v100\"\n\t| \"iris-v200\"\n\t| \"iris-v300\"\n\t| \"iris-v400\"\n\t// Purple\n\t| \"purple-50\"\n\t| \"purple-100\"\n\t| \"purple-200\"\n\t| \"purple-300\"\n\t| \"purple-400\"\n\t| \"purple-500\"\n\t| \"purple-600\"\n\t| \"purple-700\"\n\t| \"purple-800\"\n\t| \"purple-900\"\n\t| \"purple-v100\"\n\t| \"purple-v200\"\n\t| \"purple-v300\"\n\t| \"purple-v400\"\n\t// Pink\n\t| \"pink-50\"\n\t| \"pink-100\"\n\t| \"pink-200\"\n\t| \"pink-300\"\n\t| \"pink-400\"\n\t| \"pink-500\"\n\t| \"pink-600\"\n\t| \"pink-700\"\n\t| \"pink-800\"\n\t| \"pink-900\"\n\t| \"pink-v100\"\n\t| \"pink-v200\"\n\t| \"pink-v300\"\n\t| \"pink-v400\"\n\t// Red\n\t| \"red-50\"\n\t| \"red-100\"\n\t| \"red-200\"\n\t| \"red-300\"\n\t| \"red-400\"\n\t| \"red-500\"\n\t| \"red-600\"\n\t| \"red-700\"\n\t| \"red-800\"\n\t| \"red-900\"\n\t| \"red-v100\"\n\t| \"red-v200\"\n\t| \"red-v300\"\n\t| \"red-v400\"\n\t// Alpha\n\t| \"alpha-black-5\"\n\t| \"alpha-black-10\"\n\t| \"alpha-black-20\"\n\t| \"alpha-black-30\"\n\t| \"alpha-black-40\"\n\t| \"alpha-black-50\"\n\t| \"alpha-black-60\"\n\t| \"alpha-black-70\"\n\t| \"alpha-black-80\"\n\t| \"alpha-black-90\"\n\t| \"alpha-black-95\"\n\t| \"alpha-white-5\"\n\t| \"alpha-white-10\"\n\t| \"alpha-white-20\"\n\t| \"alpha-white-30\"\n\t| \"alpha-white-40\"\n\t| \"alpha-white-50\"\n\t| \"alpha-white-60\"\n\t| \"alpha-white-70\"\n\t| \"alpha-white-80\"\n\t| \"alpha-white-90\"\n\t| \"alpha-white-95\"\n\t// Special\n\t| \"white\"\n\t| \"black\";\n\n/**\n * Spacing token names - maps to `--spacing-{name}` CSS variables\n * @example \"spacing-40\", \"spacing-72\"\n */\nexport type SpacingToken =\n\t| \"spacing-0\"\n\t| \"spacing-2\"\n\t| \"spacing-4\"\n\t| \"spacing-6\"\n\t| \"spacing-8\"\n\t| \"spacing-10\"\n\t| \"spacing-11\"\n\t| \"spacing-12\"\n\t| \"spacing-16\"\n\t| \"spacing-20\"\n\t| \"spacing-24\"\n\t| \"spacing-28\"\n\t| \"spacing-32\"\n\t| \"spacing-36\"\n\t| \"spacing-40\"\n\t| \"spacing-48\"\n\t| \"spacing-56\"\n\t| \"spacing-64\"\n\t| \"spacing-72\"\n\t| \"spacing-80\"\n\t| \"spacing-96\"\n\t| \"spacing-112\"\n\t| \"spacing-128\"\n\t| \"spacing-144\"\n\t| \"spacing-160\"\n\t| \"spacing-176\"\n\t| \"spacing-192\"\n\t| \"spacing-208\"\n\t| \"spacing-224\"\n\t| \"spacing-240\"\n\t| \"spacing-256\"\n\t| \"spacing-288\"\n\t| \"spacing-320\"\n\t| \"spacing-352\"\n\t| \"spacing-384\"\n\t| \"spacing-400\";\n\n/**\n * Radius token names - maps to `--radii-{name}` CSS variables\n * @example \"radii-4\", \"radii-6\"\n */\nexport type RadiusToken =\n\t| \"radii-0\"\n\t| \"radii-2\"\n\t| \"radii-4\"\n\t| \"radii-6\"\n\t| \"radii-8\"\n\t| \"radii-10\"\n\t| \"radii-11\"\n\t| \"radii-12\"\n\t| \"radii-16\"\n\t| \"radii-20\"\n\t| \"radii-24\"\n\t| \"radii-28\"\n\t| \"radii-32\"\n\t| \"radii-36\"\n\t| \"radii-40\"\n\t| \"radii-48\"\n\t| \"radii-56\"\n\t| \"radii-64\"\n\t| \"radii-72\"\n\t| \"radii-80\"\n\t| \"radii-96\"\n\t| \"radii-112\"\n\t| \"radii-128\"\n\t| \"radii-144\"\n\t| \"radii-160\"\n\t| \"radii-176\"\n\t| \"radii-192\"\n\t| \"radii-208\"\n\t| \"radii-224\"\n\t| \"radii-240\"\n\t| \"radii-256\"\n\t| \"radii-288\"\n\t| \"radii-320\"\n\t| \"radii-352\"\n\t| \"radii-384\"\n\t| \"radii-400\";\n\n/**\n * Font size token values - primitive font sizes available in the design system\n * These correspond to Tailwind classes like `text-64`, `text-128`, etc.\n * @example 64, 128, 192\n */\nexport type FontSizeToken =\n\t| 9\n\t| 11\n\t| 12\n\t| 14\n\t| 16\n\t| 18\n\t| 21\n\t| 24\n\t| 28\n\t| 32\n\t| 36\n\t| 42\n\t| 48\n\t| 56\n\t| 64\n\t| 72\n\t| 84\n\t| 88\n\t| 96\n\t| 112\n\t| 128\n\t| 148\n\t| 168\n\t| 192\n\t| 224\n\t| 256\n\t| 280;\n\n/**\n * Array of all available font sizes for use in UI selectors/dropdowns\n */\nexport const FONT_SIZES: FontSizeToken[] = [\n\t9, 11, 12, 14, 16, 18, 21, 24, 28, 32, 36, 42, 48, 56, 64, 72, 84, 88, 96,\n\t112, 128, 148, 168, 192, 224, 256, 280,\n];\n\n/**\n * Helper to generate typography class string from font size\n * @example fontSizeToClass(128) => \"text-128 leading-128 tracking-128\"\n */\nexport function fontSizeToClass(size: FontSizeToken): string {\n\treturn `text-${size} leading-${size} tracking-${size}`;\n}\n\n/**\n * Helper to generate responsive typography class string\n * @example responsiveTypographyClass(64, 128, 192) => \"text-64 leading-64 tracking-64 md:text-128 md:leading-128 md:tracking-128 xl:text-192 xl:leading-192 xl:tracking-192\"\n */\nexport function responsiveTypographyClass(\n\tmobile: FontSizeToken,\n\ttablet: FontSizeToken,\n\tdesktop: FontSizeToken,\n): string {\n\treturn [\n\t\tfontSizeToClass(mobile),\n\t\t`md:${fontSizeToClass(tablet).split(\" \").join(\" md:\")}`,\n\t\t`xl:${fontSizeToClass(desktop).split(\" \").join(\" xl:\")}`,\n\t].join(\" \");\n}\n\n// =============================================================================\n// Color Tokens\n// =============================================================================\n\nexport interface ComponentThemeColors {\n\t/**\n\t * Background color for sections\n\t * @example \"gray-100\"\n\t */\n\tbgSection?: ColorToken;\n\n\t/**\n\t * Background color for cards\n\t * @example \"white\"\n\t */\n\tcardBackground?: ColorToken;\n\n\t/**\n\t * Muted background color\n\t * @example \"gray-50\"\n\t */\n\tbgMuted?: ColorToken;\n\n\t/**\n\t * Primary text color\n\t * @example \"gray-1100\"\n\t */\n\ttextPrimary?: ColorToken;\n\n\t/**\n\t * Secondary text color\n\t * @example \"gray-800\"\n\t */\n\ttextSecondary?: ColorToken;\n\n\t/**\n\t * Muted text color\n\t * @example \"gray-600\"\n\t */\n\ttextMuted?: ColorToken;\n\n\t/**\n\t * Inverted text color (for dark backgrounds)\n\t * @example \"gray-100\"\n\t */\n\ttextInverted?: ColorToken;\n\n\t/**\n\t * Link text color\n\t * @example \"gray-1100\"\n\t */\n\ttextLink?: ColorToken;\n\n\t/**\n\t * Link hover text color\n\t * @example \"gray-700\"\n\t */\n\ttextLinkHover?: ColorToken;\n\n\t/**\n\t * Brand accent color\n\t * @example \"ember-v300\"\n\t */\n\taccentBrand?: ColorToken;\n\n\t/**\n\t * Soft brand accent color\n\t * @example \"ember-100\"\n\t */\n\taccentBrandSoft?: ColorToken;\n\n\t/**\n\t * Subtle border color\n\t * @example \"alpha-black-10\"\n\t */\n\tborderSubtle?: ColorToken;\n\n\t/**\n\t * Strong border color\n\t * @example \"alpha-black-20\"\n\t */\n\tborderStrong?: ColorToken;\n\n\t/**\n\t * Focus border color (uses accentBrand by default)\n\t * @example \"ember-v300\"\n\t */\n\tborderFocus?: ColorToken;\n\n\t/**\n\t * Divider border color\n\t * @example \"alpha-black-10\"\n\t */\n\tborderDivider?: ColorToken;\n\n\t/**\n\t * Primary button background color\n\t * @example \"gray-1100\"\n\t */\n\tbuttonPrimaryBg?: ColorToken;\n\n\t/**\n\t * Primary button hover background color\n\t * @example \"gray-600\"\n\t */\n\tbuttonPrimaryBgHover?: ColorToken;\n\n\t/**\n\t * Secondary button background color\n\t * @example \"white\"\n\t */\n\tbuttonSecondaryBg?: ColorToken;\n\n\t/**\n\t * Secondary button hover background color\n\t * @example \"gray-100\"\n\t */\n\tbuttonSecondaryBgHover?: ColorToken;\n}\n\n// =============================================================================\n// Spatial Tokens\n// =============================================================================\n\nexport interface ComponentThemeSpatial {\n\t/**\n\t * Grid margin for large breakpoint\n\t * @example \"spacing-72\"\n\t */\n\tgridLargeMargin?: SpacingToken;\n\n\t/**\n\t * Grid gutter for large breakpoint\n\t * @example \"spacing-24\"\n\t */\n\tgridLargeGutter?: SpacingToken;\n\n\t/**\n\t * Number of grid columns for large breakpoint\n\t */\n\tgridLargeColumns?: number;\n\n\t/**\n\t * Grid margin for medium breakpoint\n\t * @example \"spacing-56\"\n\t */\n\tgridMediumMargin?: SpacingToken;\n\n\t/**\n\t * Grid gutter for medium breakpoint\n\t * @example \"spacing-20\"\n\t */\n\tgridMediumGutter?: SpacingToken;\n\n\t/**\n\t * Number of grid columns for medium breakpoint\n\t */\n\tgridMediumColumns?: number;\n\n\t/**\n\t * Grid margin for small breakpoint\n\t * @example \"spacing-24\"\n\t */\n\tgridSmallMargin?: SpacingToken;\n\n\t/**\n\t * Grid gutter for small breakpoint\n\t * @example \"spacing-12\"\n\t */\n\tgridSmallGutter?: SpacingToken;\n\n\t/**\n\t * Number of grid columns for small breakpoint\n\t */\n\tgridSmallColumns?: number;\n\n\t/**\n\t * Section gap for large breakpoint\n\t * @example \"spacing-64\"\n\t */\n\tsectionLargeGap?: SpacingToken;\n\n\t/**\n\t * Section padding for large breakpoint\n\t * @example \"spacing-128\"\n\t */\n\tsectionLargePadding?: SpacingToken;\n\n\t/**\n\t * Section gap for medium breakpoint\n\t * @example \"spacing-56\"\n\t */\n\tsectionMediumGap?: SpacingToken;\n\n\t/**\n\t * Section padding for medium breakpoint\n\t * @example \"spacing-96\"\n\t */\n\tsectionMediumPadding?: SpacingToken;\n\n\t/**\n\t * Section gap for small breakpoint\n\t * @example \"spacing-32\"\n\t */\n\tsectionSmallGap?: SpacingToken;\n\n\t/**\n\t * Section padding for small breakpoint\n\t * @example \"spacing-64\"\n\t */\n\tsectionSmallPadding?: SpacingToken;\n\n\t/**\n\t * Card gap for large size\n\t * @example \"spacing-10\"\n\t */\n\tcardLargeGap?: SpacingToken;\n\n\t/**\n\t * Card padding for large size\n\t * @example \"spacing-24\"\n\t */\n\tcardLargePadding?: SpacingToken;\n\n\t/**\n\t * Card gap for small size\n\t * @example \"spacing-12\"\n\t */\n\tcardSmallGap?: SpacingToken;\n\n\t/**\n\t * Card padding for small size\n\t * @example \"spacing-16\"\n\t */\n\tcardSmallPadding?: SpacingToken;\n}\n\n// =============================================================================\n// Surface Tokens\n// =============================================================================\n\nexport interface ComponentThemeSurface {\n\t/**\n\t * Card border radius\n\t * @example \"radii-4\"\n\t */\n\tcardRadius?: RadiusToken;\n\n\t/**\n\t * Card stroke/border width in pixels\n\t * @example 1\n\t */\n\tcardStroke?: number;\n\n\t/**\n\t * Button border radius\n\t * @example \"radii-6\"\n\t */\n\tbuttonRadius?: RadiusToken;\n\n\t/**\n\t * Button stroke/border weight in pixels\n\t * @example 1\n\t */\n\tbuttonStrokeWeight?: number;\n}\n\n// =============================================================================\n// Combined Theme Interface\n// =============================================================================\n\n/**\n * Complete component theme interface combining colors, spatial, and surface tokens.\n *\n * @example\n * ```tsx\n * const customTheme: ComponentTheme = {\n * colors: {\n * textPrimary: \"gray-100\",\n * accentBrand: \"ember-500\",\n * },\n * spatial: {\n * sectionLargePadding: \"spacing-96\",\n * },\n * surface: {\n * cardRadius: \"radii-8\",\n * },\n * };\n *\n * <Tout theme={customTheme} ... />\n * ```\n */\nexport interface ComponentTheme {\n\tcolors?: ComponentThemeColors;\n\tspatial?: ComponentThemeSpatial;\n\tsurface?: ComponentThemeSurface;\n}\n\n// =============================================================================\n// Button Theme Interface\n// =============================================================================\n\n/**\n * Button-specific theme interface for customizing individual button appearance.\n *\n * @example\n * ```tsx\n * const buttonTheme: ButtonTheme = {\n * bg: \"ember-500\",\n * bgHover: \"ember-600\",\n * text: \"white\",\n * radius: \"radii-8\",\n * };\n *\n * <Button theme={buttonTheme}>Themed Button</Button>\n * ```\n */\nexport interface ButtonTheme {\n\t/** Background color */\n\tbg?: ColorToken;\n\t/** Background color on hover */\n\tbgHover?: ColorToken;\n\t/** Background color on active/press */\n\tbgActive?: ColorToken;\n\t/** Text color */\n\ttext?: ColorToken;\n\t/** Border color (if using border) */\n\tborderColor?: ColorToken;\n\t/** Border width in pixels (0 for no border) */\n\tborderWidth?: number;\n\t/** Border radius */\n\tradius?: RadiusToken;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Converts a color token name to a CSS variable reference\n */\nfunction colorToVar(token: ColorToken): string {\n\treturn `var(--color-${token})`;\n}\n\n/**\n * Converts a spacing token name to a CSS variable reference\n */\nfunction spacingToVar(token: SpacingToken): string {\n\treturn `var(--${token})`;\n}\n\n/**\n * Converts a radius token name to a CSS variable reference\n */\nfunction radiusToVar(token: RadiusToken): string {\n\treturn `var(--${token})`;\n}\n\n/**\n * Converts a ComponentTheme object to CSS custom properties (inline style object)\n *\n * @param theme - The theme object to convert\n * @returns An object suitable for use as React inline styles\n */\nexport function themeToStyleVars(\n\ttheme: ComponentTheme | undefined,\n): React.CSSProperties {\n\tif (!theme) return {};\n\n\tconst vars: Record<string, string> = {};\n\n\t// Colors\n\tif (theme.colors) {\n\t\tconst { colors } = theme;\n\t\tif (colors.bgSection)\n\t\t\tvars[\"--theme-bg-section\"] = colorToVar(colors.bgSection);\n\t\tif (colors.cardBackground)\n\t\t\tvars[\"--theme-card-background\"] = colorToVar(colors.cardBackground);\n\t\tif (colors.bgMuted) vars[\"--theme-bg-muted\"] = colorToVar(colors.bgMuted);\n\t\tif (colors.textPrimary)\n\t\t\tvars[\"--theme-text-primary\"] = colorToVar(colors.textPrimary);\n\t\tif (colors.textSecondary)\n\t\t\tvars[\"--theme-text-secondary\"] = colorToVar(colors.textSecondary);\n\t\tif (colors.textMuted)\n\t\t\tvars[\"--theme-text-muted\"] = colorToVar(colors.textMuted);\n\t\tif (colors.textInverted)\n\t\t\tvars[\"--theme-text-inverted\"] = colorToVar(colors.textInverted);\n\t\tif (colors.textLink)\n\t\t\tvars[\"--theme-text-link\"] = colorToVar(colors.textLink);\n\t\tif (colors.textLinkHover)\n\t\t\tvars[\"--theme-text-link-hover\"] = colorToVar(colors.textLinkHover);\n\t\tif (colors.accentBrand)\n\t\t\tvars[\"--theme-accent-brand\"] = colorToVar(colors.accentBrand);\n\t\tif (colors.accentBrandSoft)\n\t\t\tvars[\"--theme-accent-brand-soft\"] = colorToVar(colors.accentBrandSoft);\n\t\tif (colors.borderSubtle)\n\t\t\tvars[\"--theme-border-subtle\"] = colorToVar(colors.borderSubtle);\n\t\tif (colors.borderStrong)\n\t\t\tvars[\"--theme-border-strong\"] = colorToVar(colors.borderStrong);\n\t\tif (colors.borderFocus)\n\t\t\tvars[\"--theme-border-focus\"] = colorToVar(colors.borderFocus);\n\t\tif (colors.borderDivider)\n\t\t\tvars[\"--theme-border-divider\"] = colorToVar(colors.borderDivider);\n\t\tif (colors.buttonPrimaryBg)\n\t\t\tvars[\"--theme-button-primary-bg\"] = colorToVar(colors.buttonPrimaryBg);\n\t\tif (colors.buttonPrimaryBgHover)\n\t\t\tvars[\"--theme-button-primary-bg-hover\"] = colorToVar(\n\t\t\t\tcolors.buttonPrimaryBgHover,\n\t\t\t);\n\t\tif (colors.buttonSecondaryBg)\n\t\t\tvars[\"--theme-button-secondary-bg\"] = colorToVar(\n\t\t\t\tcolors.buttonSecondaryBg,\n\t\t\t);\n\t\tif (colors.buttonSecondaryBgHover)\n\t\t\tvars[\"--theme-button-secondary-bg-hover\"] = colorToVar(\n\t\t\t\tcolors.buttonSecondaryBgHover,\n\t\t\t);\n\t}\n\n\t// Spatial\n\tif (theme.spatial) {\n\t\tconst { spatial } = theme;\n\t\tif (spatial.gridLargeMargin)\n\t\t\tvars[\"--theme-grid-large-margin\"] = spacingToVar(spatial.gridLargeMargin);\n\t\tif (spatial.gridLargeGutter)\n\t\t\tvars[\"--theme-grid-large-gutter\"] = spacingToVar(spatial.gridLargeGutter);\n\t\tif (spatial.gridLargeColumns)\n\t\t\tvars[\"--theme-grid-large-columns\"] = String(spatial.gridLargeColumns);\n\t\tif (spatial.gridMediumMargin)\n\t\t\tvars[\"--theme-grid-medium-margin\"] = spacingToVar(\n\t\t\t\tspatial.gridMediumMargin,\n\t\t\t);\n\t\tif (spatial.gridMediumGutter)\n\t\t\tvars[\"--theme-grid-medium-gutter\"] = spacingToVar(\n\t\t\t\tspatial.gridMediumGutter,\n\t\t\t);\n\t\tif (spatial.gridMediumColumns)\n\t\t\tvars[\"--theme-grid-medium-columns\"] = String(spatial.gridMediumColumns);\n\t\tif (spatial.gridSmallMargin)\n\t\t\tvars[\"--theme-grid-small-margin\"] = spacingToVar(spatial.gridSmallMargin);\n\t\tif (spatial.gridSmallGutter)\n\t\t\tvars[\"--theme-grid-small-gutter\"] = spacingToVar(spatial.gridSmallGutter);\n\t\tif (spatial.gridSmallColumns)\n\t\t\tvars[\"--theme-grid-small-columns\"] = String(spatial.gridSmallColumns);\n\t\tif (spatial.sectionLargeGap)\n\t\t\tvars[\"--theme-section-large-gap\"] = spacingToVar(spatial.sectionLargeGap);\n\t\tif (spatial.sectionLargePadding)\n\t\t\tvars[\"--theme-section-large-padding\"] = spacingToVar(\n\t\t\t\tspatial.sectionLargePadding,\n\t\t\t);\n\t\tif (spatial.sectionMediumGap)\n\t\t\tvars[\"--theme-section-medium-gap\"] = spacingToVar(\n\t\t\t\tspatial.sectionMediumGap,\n\t\t\t);\n\t\tif (spatial.sectionMediumPadding)\n\t\t\tvars[\"--theme-section-medium-padding\"] = spacingToVar(\n\t\t\t\tspatial.sectionMediumPadding,\n\t\t\t);\n\t\tif (spatial.sectionSmallGap)\n\t\t\tvars[\"--theme-section-small-gap\"] = spacingToVar(spatial.sectionSmallGap);\n\t\tif (spatial.sectionSmallPadding)\n\t\t\tvars[\"--theme-section-small-padding\"] = spacingToVar(\n\t\t\t\tspatial.sectionSmallPadding,\n\t\t\t);\n\t\tif (spatial.cardLargeGap)\n\t\t\tvars[\"--theme-card-large-gap\"] = spacingToVar(spatial.cardLargeGap);\n\t\tif (spatial.cardLargePadding)\n\t\t\tvars[\"--theme-card-large-padding\"] = spacingToVar(\n\t\t\t\tspatial.cardLargePadding,\n\t\t\t);\n\t\tif (spatial.cardSmallGap)\n\t\t\tvars[\"--theme-card-small-gap\"] = spacingToVar(spatial.cardSmallGap);\n\t\tif (spatial.cardSmallPadding)\n\t\t\tvars[\"--theme-card-small-padding\"] = spacingToVar(\n\t\t\t\tspatial.cardSmallPadding,\n\t\t\t);\n\t}\n\n\t// Surface\n\tif (theme.surface) {\n\t\tconst { surface } = theme;\n\t\tif (surface.cardRadius)\n\t\t\tvars[\"--theme-card-radius\"] = radiusToVar(surface.cardRadius);\n\t\tif (surface.cardStroke)\n\t\t\tvars[\"--theme-card-stroke\"] = `${surface.cardStroke}px`;\n\t\tif (surface.buttonRadius)\n\t\t\tvars[\"--theme-button-radius\"] = radiusToVar(surface.buttonRadius);\n\t\tif (surface.buttonStrokeWeight)\n\t\t\tvars[\"--theme-button-stroke-weight\"] = `${surface.buttonStrokeWeight}px`;\n\t}\n\n\treturn vars as React.CSSProperties;\n}\n\n/**\n * Converts a ButtonTheme object to CSS custom properties (inline style object)\n *\n * @param theme - The button theme object to convert\n * @returns An object suitable for use as React inline styles\n */\nexport function buttonThemeToStyleVars(\n\ttheme: ButtonTheme | undefined,\n): React.CSSProperties {\n\tif (!theme) return {};\n\n\tconst vars: Record<string, string> = {};\n\n\tif (theme.bg) vars[\"--btn-bg\"] = colorToVar(theme.bg);\n\tif (theme.bgHover) vars[\"--btn-bg-hover\"] = colorToVar(theme.bgHover);\n\tif (theme.bgActive) vars[\"--btn-bg-active\"] = colorToVar(theme.bgActive);\n\tif (theme.text) vars[\"--btn-text\"] = colorToVar(theme.text);\n\tif (theme.borderColor)\n\t\tvars[\"--btn-border-color\"] = colorToVar(theme.borderColor);\n\tif (theme.borderWidth !== undefined)\n\t\tvars[\"--btn-border-width\"] = `${theme.borderWidth}px`;\n\tif (theme.radius) vars[\"--btn-radius\"] = radiusToVar(theme.radius);\n\n\treturn vars as React.CSSProperties;\n}\n","\"use client\";\n\nimport {\n\tButton as BaseButton,\n\ttype ButtonProps as BaseButtonProps,\n} from \"@base-ui-components/react/button\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { type ButtonTheme, buttonThemeToStyleVars } from \"../../../lib/theme\";\n\n/**\n * Button component based on Figma Button component\n *\n * Variants (matches Figma):\n * - primary: Blue filled button for primary actions\n * - default: Dark filled button for secondary prominence\n * - secondary: Light gray filled button with subtle border\n * - destructive: Red filled button for destructive actions\n * - outline: Bordered button with transparent background\n * - ghost: Transparent button with subtle hover\n * - link: Text-only button with underline on hover\n *\n * Sizes (matches Figma):\n * - sm: Small buttons (32px height)\n * - default: Default buttons (36px height)\n * - lg: Large buttons (40px height)\n *\n * For icon-only buttons, use the IconButton component instead.\n *\n * Theme Support:\n * Pass a `theme` prop to override default colors via CSS custom properties.\n */\nconst buttonVariants = tv({\n\tbase: \"inline-flex items-center justify-center gap-spatial-ui-button-gap-icon-text whitespace-nowrap transition-colors duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-1 disabled:pointer-events-none disabled:opacity-50\",\n\tvariants: {\n\t\tvariant: {\n\t\t\t// Primary - blue filled button\n\t\t\tprimary:\n\t\t\t\t\"bg-button-primary-bg text-button-primary-text hover:bg-button-primary-bg-hover active:bg-button-primary-bg-active border-transparent\",\n\t\t\t// Default - dark filled button\n\t\t\tdefault:\n\t\t\t\t\"bg-button-default-bg text-button-default-text hover:bg-button-default-bg-hover active:bg-button-default-bg-active border-transparent\",\n\t\t\t// Secondary - light gray filled with subtle border\n\t\t\tsecondary:\n\t\t\t\t\"bg-button-secondary-bg text-button-secondary-text hover:bg-button-secondary-bg-hover active:bg-button-secondary-bg-active border border-button-secondary-border\",\n\t\t\t// Destructive - red filled button\n\t\t\tdestructive:\n\t\t\t\t\"bg-button-destructive-bg text-button-destructive-text hover:bg-button-destructive-bg-hover active:bg-button-destructive-bg-active border-transparent\",\n\t\t\t// Outline - bordered with transparent background\n\t\t\toutline:\n\t\t\t\t\"bg-button-outline-bg text-button-outline-text hover:bg-button-outline-bg-hover active:bg-button-outline-bg-active border border-button-outline-border hover:border-button-outline-border-hover\",\n\t\t\t// Ghost - transparent with subtle hover\n\t\t\tghost:\n\t\t\t\t\"bg-button-ghost-bg text-button-ghost-text hover:bg-button-ghost-bg-hover active:bg-button-ghost-bg-active border-transparent\",\n\t\t\t// Link - text only with underline on hover\n\t\t\tlink: \"bg-transparent text-button-link-text hover:text-button-link-text-hover hover:underline active:text-button-link-text-hover border-transparent underline-offset-4\",\n\t\t\t// Themed - uses CSS custom properties for styling\n\t\t\tthemed:\n\t\t\t\t\"[background:var(--btn-bg)] [color:var(--btn-text)] [border-color:var(--btn-border-color,transparent)] hover:[background:var(--btn-bg-hover,var(--btn-bg))] active:[background:var(--btn-bg-active,var(--btn-bg-hover,var(--btn-bg)))]\",\n\t\t},\n\t\tsize: {\n\t\t\tsm: \"typography-ui-text-xs h-spatial-ui-button-height-small px-spatial-ui-button-padding-x-small py-spatial-ui-button-padding-y-small rounded-surface-button-small\",\n\t\t\tdefault:\n\t\t\t\t\"typography-ui-text-sm h-spatial-ui-button-height-medium px-spatial-ui-button-padding-x-medium py-spatial-ui-button-padding-y-medium rounded-surface-button-medium\",\n\t\t\tlg: \"typography-ui-text-md h-spatial-ui-button-height-large px-spatial-ui-button-padding-x-large py-spatial-ui-button-padding-y-large rounded-surface-button-large\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t\tsize: \"default\",\n\t},\n});\n\nexport type HTMLButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\nexport type ButtonProps = BaseButtonProps &\n\tVariantProps<typeof buttonVariants> &\n\tHTMLButtonProps & {\n\t\t/**\n\t\t * Theme overrides for button styling via CSS custom properties\n\t\t */\n\t\ttheme?: ButtonTheme;\n\t};\n\n/**\n * Check if a ButtonTheme has any actual values set\n */\nfunction hasThemeValues(theme: ButtonTheme | undefined): boolean {\n\tif (!theme) return false;\n\treturn Object.values(theme).some((v) => v !== undefined && v !== null);\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n\t(\n\t\t{ className, variant, size, render, nativeButton, theme, style, ...props },\n\t\tref,\n\t) => {\n\t\t// When render prop is provided, default nativeButton to false to suppress warnings\n\t\tconst isNativeButton = nativeButton ?? render === undefined;\n\n\t\t// If theme has actual values, use \"themed\" variant to enable CSS custom property styling\n\t\tconst hasTheme = hasThemeValues(theme);\n\t\tconst effectiveVariant = hasTheme ? \"themed\" : variant;\n\t\tconst themeStyles = buttonThemeToStyleVars(theme);\n\t\tconst combinedStyles = hasTheme ? { ...themeStyles, ...style } : style;\n\n\t\t// Resolve actual values for data attributes\n\t\tconst resolvedVariant = effectiveVariant ?? \"default\";\n\t\tconst resolvedSize = size ?? \"default\";\n\n\t\treturn (\n\t\t\t<BaseButton\n\t\t\t\tclassName={buttonVariants({\n\t\t\t\t\tvariant: effectiveVariant,\n\t\t\t\t\tsize,\n\t\t\t\t\tclass: className,\n\t\t\t\t})}\n\t\t\t\tref={ref}\n\t\t\t\trender={render}\n\t\t\t\tnativeButton={isNativeButton}\n\t\t\t\tstyle={combinedStyles}\n\t\t\t\tdata-variant={resolvedVariant}\n\t\t\t\tdata-size={resolvedSize}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","\"use client\";\n\nimport { useRender } from \"@base-ui-components/react/use-render\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\n/**\n * IconButton component based on Figma Button component (icon-only variant)\n *\n * **IMPORTANT: Accessibility Requirement**\n * Icon-only buttons MUST have an accessible label. Provide one of:\n * - `aria-label`: A text description of the button's action (recommended)\n * - `aria-labelledby`: Reference to an element containing the label\n * - `title`: Tooltip text (less preferred, but provides a label)\n *\n * @example\n * ```tsx\n * // Correct usage with aria-label\n * <IconButton aria-label=\"Close menu\">\n * <CloseIcon />\n * </IconButton>\n * ```\n *\n * Variants (matches Figma):\n * - primary: Filled brand button (indigo background)\n * - primary-outline: Outlined brand button (indigo border/text)\n * - secondary: Filled neutral button (white background, for dark backgrounds)\n * - secondary-outline: Outlined neutral button (white border/text, for dark backgrounds)\n * - ghost: Transparent button with subtle hover (for light backgrounds)\n * - ghost-inverse: Transparent button with subtle hover (for dark backgrounds)\n *\n * Sizes:\n * - sm: Small (28x28)\n * - md: Medium (40x40) - default\n * - lg: Large (56x56)\n *\n * Rounded:\n * - default: Standard border radius (matches size)\n * - full: Fully circular\n */\nconst iconButtonVariants = tv({\n\tbase: \"inline-flex items-center justify-center whitespace-nowrap transition-colors duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&>svg]:shrink-0\",\n\tvariants: {\n\t\tvariant: {\n\t\t\t// Primary - filled brand button\n\t\t\tprimary:\n\t\t\t\t\"bg-button-primary-bg text-button-primary-text hover:bg-button-primary-bg-hover hover:text-button-primary-text-hover border-transparent focus-visible:ring-button-primary-bg\",\n\t\t\t// Primary Outline - outlined brand button\n\t\t\t\"primary-outline\":\n\t\t\t\t\"bg-button-primary-outline-bg text-button-primary-outline-text border border-button-primary-outline-border hover:bg-button-primary-outline-bg-hover hover:text-button-primary-outline-text-hover hover:border-button-primary-outline-border-hover focus-visible:ring-button-primary-outline-border\",\n\t\t\t// Secondary - filled neutral button (for dark backgrounds)\n\t\t\tsecondary:\n\t\t\t\t\"bg-button-secondary-bg text-button-secondary-text hover:bg-button-secondary-bg-hover hover:text-button-secondary-text-hover border-transparent focus-visible:ring-button-secondary-bg focus-visible:ring-offset-gray-1000\",\n\t\t\t// Secondary Outline - outlined neutral button (for dark backgrounds)\n\t\t\t\"secondary-outline\":\n\t\t\t\t\"bg-button-secondary-outline-bg text-button-secondary-outline-text border border-button-secondary-outline-border hover:bg-button-secondary-outline-bg-hover hover:text-button-secondary-outline-text-hover hover:border-button-secondary-outline-border-hover focus-visible:ring-button-secondary-outline-border focus-visible:ring-offset-gray-1000\",\n\t\t\t// Ghost - transparent button (for light backgrounds)\n\t\t\tghost:\n\t\t\t\t\"bg-button-ghost-bg text-button-ghost-text hover:bg-button-ghost-bg-hover hover:text-button-ghost-text-hover border-transparent focus-visible:ring-gray-1000\",\n\t\t\t// Ghost Inverse - transparent button (for dark backgrounds)\n\t\t\t\"ghost-inverse\":\n\t\t\t\t\"bg-button-ghost-inverse-bg text-button-ghost-inverse-text hover:bg-button-ghost-inverse-bg-hover hover:text-button-ghost-inverse-text-hover border-transparent focus-visible:ring-gray-50 focus-visible:ring-offset-gray-1000\",\n\t\t},\n\t\tsize: {\n\t\t\tsm: \"size-28\",\n\t\t\tmd: \"size-40\",\n\t\t\tlg: \"size-56\",\n\t\t},\n\t\trounded: {\n\t\t\tdefault: \"\",\n\t\t\tfull: \"rounded-full\",\n\t\t},\n\t},\n\tcompoundVariants: [\n\t\t// Apply size-specific rounded only when rounded is \"default\"\n\t\t{ size: \"sm\", rounded: \"default\", class: \"rounded-surface-button-small\" },\n\t\t{ size: \"md\", rounded: \"default\", class: \"rounded-surface-button-medium\" },\n\t\t{ size: \"lg\", rounded: \"default\", class: \"rounded-surface-button-large\" },\n\t],\n\tdefaultVariants: {\n\t\tvariant: \"primary\",\n\t\tsize: \"md\",\n\t\trounded: \"default\",\n\t},\n});\n\ninterface IconButtonState extends Record<string, unknown> {\n\tvariant:\n\t\t| \"primary\"\n\t\t| \"primary-outline\"\n\t\t| \"secondary\"\n\t\t| \"secondary-outline\"\n\t\t| \"ghost\"\n\t\t| \"ghost-inverse\";\n\tsize: \"sm\" | \"md\" | \"lg\";\n\trounded: \"default\" | \"full\";\n}\n\nexport interface IconButtonProps\n\textends useRender.ComponentProps<\"button\", IconButtonState>,\n\t\tVariantProps<typeof iconButtonVariants> {}\n\nfunction IconButton(props: IconButtonProps) {\n\tconst {\n\t\tclassName,\n\t\tvariant = \"primary\",\n\t\tsize = \"md\",\n\t\trounded = \"default\",\n\t\trender,\n\t\t...otherProps\n\t} = props;\n\n\tconst state: IconButtonState = {\n\t\tvariant,\n\t\tsize,\n\t\trounded,\n\t};\n\n\tconst buttonClassName = iconButtonVariants({\n\t\tvariant,\n\t\tsize,\n\t\trounded,\n\t\tclass: className,\n\t});\n\n\treturn useRender<IconButtonState, HTMLButtonElement>({\n\t\trender,\n\t\tstate,\n\t\tprops: {\n\t\t\ttype: \"button\",\n\t\t\tclassName: buttonClassName,\n\t\t\t...otherProps,\n\t\t},\n\t\tdefaultTagName: \"button\",\n\t});\n}\n\nexport { IconButton, iconButtonVariants };\n","import { tv } from \"tailwind-variants\";\n\n/**\n * Shared form control styles for Input, Select, and similar components.\n *\n * These base styles ensure consistent appearance across all form controls:\n * - Consistent height and padding\n * - Unified focus ring and border treatment\n * - Shared hover/disabled states\n *\n * Based on Figma BaseKit / Interface / Input & Dropdown designs.\n */\n\n/**\n * Base styles shared by all form controls (input, select, etc.)\n */\nexport const formControlBase = [\n\t// Layout\n\t\"flex w-full items-center\",\n\t// Typography\n\t\"text-16 font-medium leading-14\",\n\t// Border and radius - uses surface ui radius for theming support\n\t\"border border-solid border-ui-color-border rounded-surface-ui-medium\",\n\t// Background\n\t\"bg-ui-control-background\",\n\t// Transitions\n\t\"transition-[background-color,border-color,box-shadow] duration-150\",\n\t// Focus state\n\t\"outline-none focus-visible:border-border-focus focus-visible:ring-4 focus-visible:ring-ui-color-focus\",\n\t// Hover state (when not focused or disabled)\n\t\"hover:bg-ui-control-background-hover hover:focus-visible:bg-ui-control-background\",\n\t// Disabled state\n\t\"disabled:bg-ui-control-background-disabled disabled:cursor-not-allowed disabled:opacity-50\",\n];\n\n/**\n * Size variants shared by form controls\n * Uses spatial tokens for consistent sizing across form controls\n */\nexport const formControlSizes = {\n\tsm: \"h-spatial-ui-control-height-small px-spatial-ui-control-padding-x-small py-spatial-ui-control-padding-y-small text-14\",\n\tdefault:\n\t\t\"h-spatial-ui-control-height-medium px-spatial-ui-control-padding-x-medium py-spatial-ui-control-padding-y-medium\",\n\tlg: \"h-spatial-ui-control-height-large px-spatial-ui-control-padding-x-large py-spatial-ui-control-padding-y-large text-18\",\n} as const;\n\n/**\n * Error state styles shared by form controls\n */\nexport const formControlError = {\n\ttrue: \"border-ui-error-color focus-visible:border-ui-error-color focus-visible:ring-ui-error-color/20 text-ui-error-color\",\n\tfalse: \"\",\n} as const;\n\n/**\n * Form control variants using tailwind-variants\n * Can be composed with other variants for specific components\n */\nexport const formControlVariants = tv({\n\tbase: formControlBase,\n\tvariants: {\n\t\tsize: formControlSizes,\n\t\terror: formControlError,\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t\terror: false,\n\t},\n});\n\nexport type FormControlSize = keyof typeof formControlSizes;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { formControlBase, formControlError } from \"@/lib/form-control\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Input-specific size variants using semantic input tokens.\n * These tokens allow input sizing to be customized independently from other controls.\n */\nconst inputSizes = {\n\tsm: \"h-spatial-ui-input-height-small px-spatial-ui-input-padding-x-small py-spatial-ui-input-padding-y-small typography-body-sm-md\",\n\tdefault:\n\t\t\"h-spatial-ui-input-height-medium px-spatial-ui-input-padding-x-medium py-spatial-ui-input-padding-y-medium typography-body-md-md\",\n\tlg: \"h-spatial-ui-input-height-large px-spatial-ui-input-padding-x-large py-spatial-ui-input-padding-y-large typography-body-md-lg\",\n} as const;\n\n/**\n * Input variants for styling based on Figma BaseKit / Interface / Input\n *\n * States (handled via CSS pseudo-classes and props):\n * - Default: White background, subtle border\n * - Hover: Light gray background (via :hover)\n * - Focus: Accent border with focus ring (via :focus-visible)\n * - Error: Error border color (via error prop)\n * - Disabled: Disabled background (via :disabled)\n *\n * Sizes:\n * - sm: Smaller height and padding (36px)\n * - default: Standard height (48px)\n * - lg: Larger height and padding (56px)\n */\nconst inputVariants = tv({\n\tbase: [\n\t\t...formControlBase,\n\t\t// Input-specific: Placeholder styling\n\t\t\"placeholder:text-text-muted\",\n\t],\n\tvariants: {\n\t\tsize: inputSizes,\n\t\terror: {\n\t\t\t...formControlError,\n\t\t\ttrue: `${formControlError.true} placeholder:text-ui-error-color/60`,\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t\terror: false,\n\t},\n});\n\nexport interface InputProps\n\textends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n\t\tVariantProps<typeof inputVariants> {\n\t/**\n\t * Whether the input is in an error state\n\t */\n\terror?: boolean;\n}\n\n/**\n * Input component based on Figma BaseKit / Interface / Input\n *\n * A styled text input with support for various states:\n * - Default, hover, focus, error, and disabled states\n * - Three size variants: sm, default, lg\n *\n * Uses semantic UI tokens for theming support.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Input placeholder=\"Enter your email\" />\n *\n * // With error state\n * <Input error placeholder=\"Invalid input\" />\n *\n * // Different sizes\n * <Input size=\"sm\" placeholder=\"Small\" />\n * <Input size=\"lg\" placeholder=\"Large\" />\n *\n * // Disabled\n * <Input disabled placeholder=\"Disabled input\" />\n * ```\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n\t({ className, size, error, type = \"text\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<input\n\t\t\t\tref={ref}\n\t\t\t\ttype={type}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\tclassName={cn(inputVariants({ size, error, class: className }))}\n\t\t\t\tdata-size={size ?? \"default\"}\n\t\t\t\tdata-error={error ?? false}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nInput.displayName = \"Input\";\n\nexport { Input, inputVariants };\n","\"use client\";\n\nimport type * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { formControlBase } from \"@/lib/form-control\";\nimport { cn } from \"@/lib/utils\";\nimport { Button, type ButtonProps } from \"../button\";\n\n// =============================================================================\n// InputGroup Variants\n// =============================================================================\n\nconst inputGroupVariants = tv({\n\tbase: [\n\t\t...formControlBase,\n\t\t// InputGroup-specific: Container layout and styling\n\t\t\"group/input-group relative flex w-full items-center justify-start\",\n\t\t\"shadow-xs\",\n\t\t// Override focus state to work with child focus detection\n\t\t\"focus-visible:border-ui-color-border focus-visible:ring-0\",\n\t\t// Override hover to work with InputGroup structure\n\t\t\"hover:bg-ui-control-background\",\n\t\t// Height and layout (overridden by size variants)\n\t\t\"min-w-0\",\n\t\t\"has-[>textarea]:h-auto\",\n\t\t\"has-[>[data-align=inline-start]]:[&>input]:pl-6\",\n\t\t\"has-[>[data-align=inline-end]]:[&>input]:pr-6\",\n\t\t\"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pt-spatial-ui-input-group-gap-block has-[>[data-align=block-start]]:[&>input]:pb-spatial-ui-input-group-padding-y-medium\",\n\t\t\"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pb-spatial-ui-input-group-gap-block\",\n\t\t// Focus state detection on child input (overrides formControlBase focus)\n\t\t\"has-[[data-slot=input-group-control]:focus-visible]:border-ui-accent-base has-[[data-slot=input-group-control]:focus-visible]:ring-4 has-[[data-slot=input-group-control]:focus-visible]:ring-ui-color-focus\",\n\t\t// Error state detection on child elements\n\t\t\"has-[[data-slot][aria-invalid=true]]:border-ui-error-color has-[[data-slot][aria-invalid=true]]:ring-ui-error-color/20\",\n\t\t// Disabled state (overrides formControlBase disabled)\n\t\t\"data-[disabled=true]:bg-ui-control-background-disabled data-[disabled=true]:opacity-50 data-[disabled=true]:cursor-not-allowed\",\n\t],\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"h-spatial-ui-input-group-height-small\",\n\t\t\tdefault: \"h-spatial-ui-input-group-height-medium\",\n\t\t\tlg: \"h-spatial-ui-input-group-height-large\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t},\n});\n\n// =============================================================================\n// InputGroupAddon Variants\n// =============================================================================\n\nconst inputGroupAddonVariants = tv({\n\tbase: [\n\t\t\"flex items-center justify-center gap-6\",\n\t\t\"typography-ui-text-sm text-text-muted\",\n\t\t\"select-none cursor-text\",\n\t\t\"[&>svg:not([class*='size-'])]:size-16\",\n\t\t\"[&_button]:text-[unset] [&_button]:cursor-pointer\",\n\t\t\"group-data-[disabled=true]/input-group:opacity-50\",\n\t],\n\tvariants: {\n\t\talign: {\n\t\t\t\"inline-start\": [\n\t\t\t\t\"order-first h-full\",\n\t\t\t\t\"pl-spatial-ui-input-group-padding-x-medium\",\n\t\t\t\t\"has-[>button]:ml-[-6px]\",\n\t\t\t],\n\t\t\t\"inline-end\": [\n\t\t\t\t\"order-last h-full\",\n\t\t\t\t\"pr-spatial-ui-input-group-padding-x-medium\",\n\t\t\t\t\"has-[>button]:mr-[-6px]\",\n\t\t\t],\n\t\t\t\"block-start\": [\n\t\t\t\t\"order-first h-auto w-full justify-start\",\n\t\t\t\t\"px-spatial-ui-input-group-padding-x-medium pt-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t\"[.border-b]:pb-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t// Use shared text style for block addons (12px, Regular weight per Figma)\n\t\t\t\t\"typography-ui-text-xs\",\n\t\t\t],\n\t\t\t\"block-end\": [\n\t\t\t\t\"order-last h-auto w-full justify-start\",\n\t\t\t\t\"px-spatial-ui-input-group-padding-x-medium pb-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t\"[.border-t]:pt-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t// Use shared text style for block addons (12px, Regular weight per Figma)\n\t\t\t\t\"typography-ui-text-xs\",\n\t\t\t],\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\talign: \"inline-start\",\n\t},\n});\n\n// =============================================================================\n// InputGroup Component\n// =============================================================================\n\nexport interface InputGroupProps\n\textends React.FieldsetHTMLAttributes<HTMLFieldSetElement>,\n\t\tVariantProps<typeof inputGroupVariants> {}\n\n/**\n * InputGroup component for combining inputs with addons, buttons, and text.\n *\n * A container that groups an input with prefix/suffix addons, icons, or buttons.\n * Supports inline (left/right) and block (top/bottom) addon positioning.\n *\n * Uses semantic UI tokens for theming support.\n *\n * @example\n * ```tsx\n * // With prefix icon\n * <InputGroup>\n * <InputGroupAddon>\n * <SearchIcon />\n * </InputGroupAddon>\n * <InputGroupInput placeholder=\"Search...\" />\n * </InputGroup>\n *\n * // With suffix button\n * <InputGroup>\n * <InputGroupInput placeholder=\"Enter email\" />\n * <InputGroupAddon align=\"inline-end\">\n * <InputGroupButton>Subscribe</InputGroupButton>\n * </InputGroupAddon>\n * </InputGroup>\n *\n * // With text prefix\n * <InputGroup>\n * <InputGroupAddon>\n * <InputGroupText>https://</InputGroupText>\n * </InputGroupAddon>\n * <InputGroupInput placeholder=\"example.com\" />\n * </InputGroup>\n * ```\n */\nfunction InputGroup({ className, size, disabled, ...props }: InputGroupProps) {\n\treturn (\n\t\t<fieldset\n\t\t\tdata-slot=\"input-group\"\n\t\t\tdata-disabled={disabled || undefined}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={cn(\n\t\t\t\t\"p-0 m-0 min-w-0\",\n\t\t\t\tinputGroupVariants({ size, class: className }),\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupAddon Component\n// =============================================================================\n\nexport interface InputGroupAddonProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof inputGroupAddonVariants> {}\n\n/**\n * InputGroupAddon component for positioning addons within an InputGroup.\n *\n * Can contain icons, text, or buttons. Clicking the addon focuses the input.\n *\n * @example\n * ```tsx\n * // Inline start (default - left side)\n * <InputGroupAddon>\n * <SearchIcon />\n * </InputGroupAddon>\n *\n * // Inline end (right side)\n * <InputGroupAddon align=\"inline-end\">\n * <InputGroupButton>Submit</InputGroupButton>\n * </InputGroupAddon>\n *\n * // Block positions (top/bottom)\n * <InputGroupAddon align=\"block-start\">\n * <label>Email Address</label>\n * </InputGroupAddon>\n * ```\n */\nfunction InputGroupAddon({\n\tclassName,\n\talign = \"inline-start\",\n\tonClick,\n\tonKeyDown,\n\t...props\n}: InputGroupAddonProps) {\n\tconst focusInput = (element: HTMLElement) => {\n\t\telement.parentElement?.querySelector(\"input\")?.focus();\n\t};\n\n\tconst handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\t// Don't focus input if clicking a button inside the addon\n\t\tif ((e.target as HTMLElement).closest(\"button\")) {\n\t\t\tonClick?.(e);\n\t\t\treturn;\n\t\t}\n\t\t// Focus the input when clicking the addon\n\t\tfocusInput(e.currentTarget);\n\t\tonClick?.(e);\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t// Focus input on Enter or Space (unless inside a button)\n\t\tif (\n\t\t\t(e.key === \"Enter\" || e.key === \" \") &&\n\t\t\t!(e.target as HTMLElement).closest(\"button\")\n\t\t) {\n\t\t\tfocusInput(e.currentTarget);\n\t\t}\n\t\tonKeyDown?.(e);\n\t};\n\n\treturn (\n\t\t// biome-ignore lint/a11y/noStaticElementInteractions: Click-to-focus is a convenience UX pattern; primary interaction is via the input itself\n\t\t<div\n\t\t\tdata-slot=\"input-group-addon\"\n\t\t\tdata-align={align}\n\t\t\tclassName={cn(inputGroupAddonVariants({ align, class: className }))}\n\t\t\tonClick={handleClick}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupButton Component\n// =============================================================================\n\nconst inputGroupButtonVariants = tv({\n\tbase: [\n\t\t\"typography-ui-button-small shadow-none flex gap-6 items-center\",\n\t\t\"focus-visible:ring-1 focus-visible:ring-offset-0 focus-visible:ring-ui-color-border\",\n\t\t\"transition-opacity duration-150\",\n\t],\n\tvariants: {\n\t\tsize: {\n\t\t\txs: \"!h-24 gap-4 px-8 rounded-surface-ui-small [&>svg:not([class*='size-'])]:size-16 has-[>svg]:px-6\",\n\t\t\tsm: \"!h-28 px-10 gap-6 rounded-surface-ui-medium has-[>svg]:px-8\",\n\t\t\t\"icon-xs\":\n\t\t\t\t\"!size-24 rounded-surface-ui-small p-0 [&>svg:not([class*='size-'])]:size-16 has-[>svg]:p-0\",\n\t\t\t\"icon-sm\":\n\t\t\t\t\"!size-28 rounded-surface-ui-medium p-0 [&>svg:not([class*='size-'])]:size-16 has-[>svg]:p-0\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"xs\",\n\t},\n});\n\nexport interface InputGroupButtonProps\n\textends Omit<ButtonProps, \"size\">,\n\t\tVariantProps<typeof inputGroupButtonVariants> {}\n\n/**\n * InputGroupButton component for inline buttons within an InputGroup.\n *\n * A small button variant designed to fit inside input groups.\n *\n * @example\n * ```tsx\n * <InputGroupAddon align=\"inline-end\">\n * <InputGroupButton>Submit</InputGroupButton>\n * </InputGroupAddon>\n *\n * // Icon button\n * <InputGroupAddon align=\"inline-end\">\n * <InputGroupButton size=\"icon-xs\">\n * <ClearIcon />\n * </InputGroupButton>\n * </InputGroupAddon>\n * ```\n */\nfunction InputGroupButton({\n\tclassName,\n\ttype = \"button\",\n\tvariant = \"ghost\",\n\tsize = \"xs\",\n\t...props\n}: InputGroupButtonProps) {\n\treturn (\n\t\t<Button\n\t\t\ttype={type}\n\t\t\tdata-size={size}\n\t\t\tvariant={variant}\n\t\t\tclassName={cn(inputGroupButtonVariants({ size, class: className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupText Component\n// =============================================================================\n\nexport interface InputGroupTextProps\n\textends React.HTMLAttributes<HTMLSpanElement> {}\n\n/**\n * InputGroupText component for static text within an InputGroup.\n *\n * Use for prefixes like \"https://\" or suffixes like \".com\"\n *\n * @example\n * ```tsx\n * <InputGroupAddon>\n * <InputGroupText>https://</InputGroupText>\n * </InputGroupAddon>\n * ```\n */\nfunction InputGroupText({ className, ...props }: InputGroupTextProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-6 typography-ui-text-sm text-text-muted\",\n\t\t\t\t\"[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-16\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupInput Component\n// =============================================================================\n\nexport interface InputGroupInputProps\n\textends React.InputHTMLAttributes<HTMLInputElement> {}\n\n/**\n * InputGroupInput component - the input element within an InputGroup.\n *\n * Styled to integrate seamlessly with the InputGroup container.\n *\n * @example\n * ```tsx\n * <InputGroup>\n * <InputGroupInput placeholder=\"Enter text...\" />\n * </InputGroup>\n * ```\n */\nfunction InputGroupInput({ className, ...props }: InputGroupInputProps) {\n\treturn (\n\t\t<input\n\t\t\tdata-slot=\"input-group-control\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex-1 min-w-0 h-full w-full\",\n\t\t\t\t\"border-0 bg-transparent shadow-none outline-none\",\n\t\t\t\t\"typography-ui-text-sm text-left placeholder:text-text-muted\",\n\t\t\t\t\"px-spatial-ui-input-group-padding-x-medium\",\n\t\t\t\t\"focus-visible:ring-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// =============================================================================\n// InputGroupTextarea Component\n// =============================================================================\n\nexport interface InputGroupTextareaProps\n\textends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\n/**\n * InputGroupTextarea component - a textarea element within an InputGroup.\n *\n * Styled to integrate seamlessly with the InputGroup container.\n *\n * @example\n * ```tsx\n * <InputGroup>\n * <InputGroupTextarea placeholder=\"Enter long text...\" rows={4} />\n * </InputGroup>\n * ```\n */\nfunction InputGroupTextarea({ className, ...props }: InputGroupTextareaProps) {\n\treturn (\n\t\t<textarea\n\t\t\tdata-slot=\"input-group-control\"\n\t\t\tclassName={cn(\n\t\t\t\t\"flex-1 min-w-0 w-full resize-none\",\n\t\t\t\t\"border-0 bg-transparent shadow-none outline-none\",\n\t\t\t\t\"typography-ui-text-sm text-left placeholder:text-text-muted\",\n\t\t\t\t\"px-spatial-ui-input-group-padding-x-medium py-spatial-ui-input-group-padding-y-medium\",\n\t\t\t\t\"focus-visible:ring-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tInputGroup,\n\tInputGroupAddon,\n\tInputGroupButton,\n\tInputGroupText,\n\tInputGroupInput,\n\tInputGroupTextarea,\n\tinputGroupVariants,\n\tinputGroupAddonVariants,\n};\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface NdstudioFooterProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * The URL to link to\n\t * @default \"https://ndstudio.gov\"\n\t */\n\thref?: string;\n}\n\n/**\n * NdstudioFooter component displays a \"Designed and Engineered in DC by National Design Studio\" footer link.\n *\n * This component is designed to be used as a footer within other components like Tout,\n * but can also be used standalone.\n *\n * @example\n * ```tsx\n * // Used within a Tout component via footer slot\n * <Tout\n * headline=\"Feature Headline\"\n * primaryAction={<Button>Primary</Button>}\n * backgroundMedia={<img src=\"/bg.jpg\" alt=\"\" />}\n * footer={<NdstudioFooter />}\n * />\n *\n * // Standalone usage\n * <NdstudioFooter className=\"my-custom-class\" />\n * ```\n */\nconst NdstudioFooter = React.forwardRef<HTMLDivElement, NdstudioFooterProps>(\n\t({ className, href = \"https://ndstudio.gov\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={cn(\"text-center\", className)} {...props}>\n\t\t\t\t<p className=\"typography-label-large uppercase text-ivory-alpha-75\">\n\t\t\t\t\tDesigned and Engineered in DC by{\" \"}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={href}\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tNational Design Studio\n\t\t\t\t\t\t<span className=\"sr-only\"> (opens in new tab)</span>\n\t\t\t\t\t</a>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t},\n);\nNdstudioFooter.displayName = \"NdstudioFooter\";\n\nexport { NdstudioFooter };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\nconst pagerControlVariants = tv({\n\tbase: \"flex items-center\",\n\tvariants: {\n\t\tsize: {\n\t\t\t// Uses primitive spacing tokens\n\t\t\tsm: \"gap-2\",\n\t\t\tdefault: \"gap-2\",\n\t\t\tlg: \"gap-4\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t},\n});\n\nconst dotBaseVariants = tv({\n\tbase: \"cursor-pointer rounded-full transition-all duration-500 ease-[cubic-bezier(0.23,1,0.32,1)]\",\n\tvariants: {\n\t\tsize: {\n\t\t\t// Uses primitive spacing tokens\n\t\t\tsm: \"h-6\",\n\t\t\tdefault: \"h-10\",\n\t\t\tlg: \"h-16\",\n\t\t},\n\t\tvariant: {\n\t\t\tcharcoal: \"\",\n\t\t\tivory: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t\tvariant: \"charcoal\",\n\t},\n});\n\nexport interface PagerControlProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">,\n\t\tVariantProps<typeof pagerControlVariants>,\n\t\tVariantProps<typeof dotBaseVariants> {\n\t/**\n\t * Total number of pages/items\n\t */\n\tcount: number;\n\t/**\n\t * Current active page index (0-based)\n\t */\n\tactiveIndex?: number;\n\t/**\n\t * Duration in milliseconds for each page before auto-advancing\n\t * Set to 0 to disable auto-advance\n\t * @default 5000\n\t */\n\tduration?: number;\n\t/**\n\t * Whether the pager should auto-advance\n\t * @default true\n\t */\n\tautoPlay?: boolean;\n\t/**\n\t * Callback when the active page changes\n\t */\n\tonChange?: (index: number) => void;\n\t/**\n\t * Whether to pause auto-advance on hover\n\t * @default true\n\t */\n\tpauseOnHover?: boolean;\n\t/**\n\t * Whether to loop back to the first page after the last\n\t * @default true\n\t */\n\tloop?: boolean;\n}\n\n/**\n * PagerControl component for indicating progress through a series of pages/slides.\n *\n * Features smooth width transitions when switching between dots and an animated\n * progress fill on the active dot that shows time remaining before auto-advancing\n * (similar to Apple's carousel indicators).\n *\n * Variants:\n * - charcoal: Dark dots (for light backgrounds)\n * - ivory: Light dots (for dark backgrounds)\n *\n * Sizes:\n * - sm: Small dots (6px height)\n * - default: Medium dots (10px height)\n * - lg: Large dots (16px height)\n */\nconst PagerControl = React.forwardRef<HTMLDivElement, PagerControlProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tsize,\n\t\t\tvariant,\n\t\t\tcount,\n\t\t\tactiveIndex: controlledIndex,\n\t\t\tduration = 5000,\n\t\t\tautoPlay = true,\n\t\t\tonChange,\n\t\t\tpauseOnHover = true,\n\t\t\tloop = true,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [internalIndex, setInternalIndex] = React.useState(0);\n\t\tconst [isPaused, setIsPaused] = React.useState(false);\n\t\tconst [progress, setProgress] = React.useState(0);\n\n\t\t// Use controlled index if provided, otherwise use internal state\n\t\tconst activeIndex =\n\t\t\tcontrolledIndex !== undefined ? controlledIndex : internalIndex;\n\t\tconst isControlled = controlledIndex !== undefined;\n\n\t\t// Development warnings for common issues\n\t\tReact.useEffect(() => {\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tif (count < 1) {\n\t\t\t\t\tconsole.warn(\"PagerControl: count must be at least 1\");\n\t\t\t\t}\n\t\t\t\tif (controlledIndex !== undefined && controlledIndex >= count) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`PagerControl: activeIndex (${controlledIndex}) is out of bounds. Must be less than count (${count}).`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (controlledIndex !== undefined && controlledIndex < 0) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`PagerControl: activeIndex (${controlledIndex}) cannot be negative.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (isControlled && onChange === undefined) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\"PagerControl: controlled mode (activeIndex provided) requires an onChange handler.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}, [count, controlledIndex, isControlled, onChange]);\n\n\t\t// Clamp activeIndex to valid bounds\n\t\tconst safeActiveIndex = Math.max(0, Math.min(activeIndex, count - 1));\n\n\t\tconst animationFrameRef = React.useRef<number | null>(null);\n\t\tconst startTimeRef = React.useRef<number | null>(null);\n\t\tconst pausedProgressRef = React.useRef<number>(0);\n\n\t\tconst goToNext = React.useCallback(() => {\n\t\t\tconst nextIndex = safeActiveIndex + 1;\n\t\t\tif (nextIndex >= count) {\n\t\t\t\tif (loop) {\n\t\t\t\t\tif (!isControlled) setInternalIndex(0);\n\t\t\t\t\tonChange?.(0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!isControlled) setInternalIndex(nextIndex);\n\t\t\t\tonChange?.(nextIndex);\n\t\t\t}\n\t\t}, [safeActiveIndex, count, loop, isControlled, onChange]);\n\n\t\tconst goToIndex = React.useCallback(\n\t\t\t(index: number) => {\n\t\t\t\tif (!isControlled) setInternalIndex(index);\n\t\t\t\tonChange?.(index);\n\t\t\t\t// Reset progress when manually changing\n\t\t\t\tsetProgress(0);\n\t\t\t\tpausedProgressRef.current = 0;\n\t\t\t\tstartTimeRef.current = null;\n\t\t\t},\n\t\t\t[isControlled, onChange],\n\t\t);\n\n\t\t// Animation loop for smooth progress fill\n\t\tReact.useEffect(() => {\n\t\t\tif (!autoPlay || duration <= 0 || isPaused) {\n\t\t\t\tif (animationFrameRef.current) {\n\t\t\t\t\tcancelAnimationFrame(animationFrameRef.current);\n\t\t\t\t\tanimationFrameRef.current = null;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst animate = (timestamp: number) => {\n\t\t\t\tif (startTimeRef.current === null) {\n\t\t\t\t\tstartTimeRef.current =\n\t\t\t\t\t\ttimestamp - (pausedProgressRef.current / 100) * duration;\n\t\t\t\t}\n\n\t\t\t\tconst elapsed = timestamp - startTimeRef.current;\n\t\t\t\tconst newProgress = Math.min((elapsed / duration) * 100, 100);\n\t\t\t\tsetProgress(newProgress);\n\n\t\t\t\tif (newProgress >= 100) {\n\t\t\t\t\tgoToNext();\n\t\t\t\t\t// Reset for next cycle\n\t\t\t\t\tsetProgress(0);\n\t\t\t\t\tpausedProgressRef.current = 0;\n\t\t\t\t\tstartTimeRef.current = null;\n\t\t\t\t} else {\n\t\t\t\t\tanimationFrameRef.current = requestAnimationFrame(animate);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tanimationFrameRef.current = requestAnimationFrame(animate);\n\n\t\t\treturn () => {\n\t\t\t\tif (animationFrameRef.current) {\n\t\t\t\t\tcancelAnimationFrame(animationFrameRef.current);\n\t\t\t\t}\n\t\t\t};\n\t\t}, [autoPlay, duration, isPaused, goToNext]);\n\n\t\t// Handle pause/resume\n\t\tconst handleMouseEnter = React.useCallback(() => {\n\t\t\tif (pauseOnHover) {\n\t\t\t\tpausedProgressRef.current = progress;\n\t\t\t\tstartTimeRef.current = null;\n\t\t\t\tsetIsPaused(true);\n\t\t\t}\n\t\t}, [pauseOnHover, progress]);\n\n\t\tconst handleMouseLeave = React.useCallback(() => {\n\t\t\tif (pauseOnHover) {\n\t\t\t\tsetIsPaused(false);\n\t\t\t}\n\t\t}, [pauseOnHover]);\n\n\t\t// Reset progress when activeIndex changes externally (controlled mode)\n\t\tReact.useEffect(() => {\n\t\t\tif (isControlled) {\n\t\t\t\tsetProgress(0);\n\t\t\t\tpausedProgressRef.current = 0;\n\t\t\t\tstartTimeRef.current = null;\n\t\t\t}\n\t\t}, [isControlled]);\n\n\t\t// Get dot dimensions based on size - uses primitive spacing tokens\n\t\tconst getDotWidth = (isActive: boolean) => {\n\t\t\tif (isActive) {\n\t\t\t\tswitch (size) {\n\t\t\t\t\tcase \"sm\":\n\t\t\t\t\t\treturn \"w-16\";\n\t\t\t\t\tcase \"lg\":\n\t\t\t\t\t\treturn \"w-36\";\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn \"w-28\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (size) {\n\t\t\t\tcase \"sm\":\n\t\t\t\t\treturn \"w-6\";\n\t\t\t\tcase \"lg\":\n\t\t\t\t\treturn \"w-16\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"w-10\";\n\t\t\t}\n\t\t};\n\n\t\t// Get background classes for inactive dots\n\t\tconst getInactiveClasses = () => {\n\t\t\tif (variant === \"ivory\") {\n\t\t\t\treturn \"bg-alpha-white-30 hover:bg-alpha-white-60\";\n\t\t\t}\n\t\t\treturn \"bg-alpha-black-30 hover:bg-alpha-black-60\";\n\t\t};\n\n\t\t// Get background class for active dot (the track/background)\n\t\tconst getActiveTrackClass = () => {\n\t\t\tif (variant === \"ivory\") {\n\t\t\t\treturn \"bg-alpha-white-30\";\n\t\t\t}\n\t\t\treturn \"bg-alpha-black-30\";\n\t\t};\n\n\t\t// Get fill color for the progress indicator\n\t\tconst getProgressFillClass = () => {\n\t\t\tif (variant === \"ivory\") {\n\t\t\t\treturn \"bg-gray-50\";\n\t\t\t}\n\t\t\treturn \"bg-gray-1200\";\n\t\t};\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"tablist\"\n\t\t\t\taria-label=\"Page indicators\"\n\t\t\t\tclassName={pagerControlVariants({ size, class: className })}\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{Array.from({ length: count }, (_, index) => {\n\t\t\t\t\tconst isActive = index === safeActiveIndex;\n\n\t\t\t\t\tif (isActive) {\n\t\t\t\t\t\t// Active dot with progress fill\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: Pagination dots have fixed order based on count\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\t\taria-selected={true}\n\t\t\t\t\t\t\t\taria-label={`Page ${index + 1} of ${count}, current`}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"relative cursor-pointer overflow-hidden rounded-full transition-all duration-500 ease-[cubic-bezier(0.23,1,0.32,1)]\",\n\t\t\t\t\t\t\t\t\tdotBaseVariants({ size, variant }),\n\t\t\t\t\t\t\t\t\tgetDotWidth(true),\n\t\t\t\t\t\t\t\t\tgetActiveTrackClass(),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tonClick={() => goToIndex(index)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Progress fill */}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"absolute top-0 bottom-0 left-0 h-full rounded-full\",\n\t\t\t\t\t\t\t\t\t\tgetProgressFillClass(),\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: autoPlay && duration > 0 ? `${progress}%` : \"100%\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Inactive dot\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: Pagination dots have fixed order based on count\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\taria-selected={false}\n\t\t\t\t\t\t\taria-label={`Go to page ${index + 1} of ${count}`}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tdotBaseVariants({ size, variant }),\n\t\t\t\t\t\t\t\tgetDotWidth(false),\n\t\t\t\t\t\t\t\tgetInactiveClasses(),\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={() => goToIndex(index)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t},\n);\nPagerControl.displayName = \"PagerControl\";\n\nexport { PagerControl, pagerControlVariants };\n","import { tv } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Shared arrow variants for floating UI components\n *\n * Used by Tooltip, Popover, and other floating components.\n * Handles positioning based on the side attribute.\n */\nexport const floatingArrowVariants = tv({\n\tbase: [\n\t\t// Display flex to properly size the arrow container\n\t\t\"flex\",\n\t\t// Positioning based on floating side (uses spacing tokens since --spacing: 1px)\n\t\t\"data-[side=bottom]:-top-7\",\n\t\t\"data-[side=left]:-right-12 data-[side=left]:rotate-90\",\n\t\t\"data-[side=right]:-left-12 data-[side=right]:-rotate-90\",\n\t\t\"data-[side=top]:-bottom-7 data-[side=top]:rotate-180\",\n\t\t// Animation - follows popup\n\t\t\"data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:opacity-0\",\n\t],\n});\n\nexport interface FloatingArrowSvgProps {\n\t/** CSS class for the main fill color (e.g., \"fill-tooltip-bg\" or \"fill-overlay-background\") */\n\tfillClassName: string;\n\t/** CSS class for the border color using fill-* (e.g., \"fill-overlay-border\") - renders as outline behind main fill */\n\tborderClassName?: string;\n\t/** Additional className for the SVG element */\n\tclassName?: string;\n}\n\n/**\n * FloatingArrowSvg\n *\n * A shared arrow SVG component for floating UI elements.\n * Use with Tooltip, Popover, Dropdown, and other floating components.\n *\n * @example\n * ```tsx\n * // For dark tooltip (no border)\n * <FloatingArrowSvg fillClassName=\"fill-tooltip-bg\" />\n *\n * // For light popover with border\n * <FloatingArrowSvg\n * fillClassName=\"fill-overlay-background\"\n * borderClassName=\"fill-overlay-border\"\n * />\n * ```\n */\nexport const FloatingArrowSvg = ({\n\tfillClassName,\n\tborderClassName,\n\tclassName,\n}: FloatingArrowSvgProps) => (\n\t<svg\n\t\twidth=\"20\"\n\t\theight=\"10\"\n\t\tviewBox=\"0 0 20 10\"\n\t\tfill=\"none\"\n\t\tclassName={cn(\"block\", className)}\n\t\taria-hidden=\"true\"\n\t>\n\t\t{/* Main fill shape */}\n\t\t<path\n\t\t\td=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n\t\t\tclassName={fillClassName}\n\t\t/>\n\t\t{/* Border stroke (rendered on top for outline effect) */}\n\t\t{borderClassName && (\n\t\t\t<path\n\t\t\t\td=\"M8.99542 1.85876C9.75604 1.17425 10.9106 1.17422 11.6713 1.85878L16.5281 6.22989C17.0789 6.72568 17.7938 7.00001 18.5349 7.00001L15.89 7L11.0023 2.60207C10.622 2.2598 10.0447 2.2598 9.66436 2.60207L4.77734 7L2.13171 7.00001C2.87284 7.00001 3.58774 6.72568 4.13861 6.22989L8.99542 1.85876Z\"\n\t\t\t\tclassName={borderClassName}\n\t\t\t/>\n\t\t)}\n\t</svg>\n);\n","\"use client\";\n\nimport { Popover as BasePopover } from \"@base-ui-components/react/popover\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\nimport {\n\tFloatingArrowSvg,\n\tfloatingArrowVariants,\n} from \"../../shared/floating-arrow\";\n\n/**\n * Popover popup variants\n *\n * Uses semantic overlay tokens for themeable styling:\n * - color.overlay.background - Light background\n * - color.overlay.border - Subtle border\n * - color.overlay.text - Primary text\n * - surface.overlay.radius - Rounded corners\n * - spatial.component.overlay.padding/gap - Consistent spacing\n */\nconst popoverPopupVariants = tv({\n\tbase: [\n\t\t// Layout - uses component overlay tokens\n\t\t\"p-spatial-component-overlay-padding\",\n\t\t// Background - uses overlay background token\n\t\t\"bg-overlay-background\",\n\t\t// Border - uses overlay border token\n\t\t\"border border-overlay-border\",\n\t\t// Text - uses overlay text token\n\t\t\"text-overlay-text\",\n\t\t// Border radius - uses surface overlay token\n\t\t\"rounded-surface-overlay\",\n\t\t// Shadow for elevation\n\t\t\"shadow-lg\",\n\t\t// Allow arrow to extend outside popup bounds\n\t\t\"overflow-visible\",\n\t\t// Animation\n\t\t\"origin-[var(--transform-origin)]\",\n\t\t\"transition-[transform,scale,opacity] duration-150\",\n\t\t\"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n\t\t// Ensure it's above other content (higher than backdrop z-40)\n\t\t\"z-50\",\n\t\t// Max width for reasonable content display\n\t\t\"max-w-[320px]\",\n\t],\n\tvariants: {\n\t\tvariant: {\n\t\t\tdefault: \"\",\n\t\t\t// Future variants can be added here\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t},\n});\n\n/**\n * Popover arrow variants - uses shared floating arrow variants\n */\nconst popoverArrowVariants = floatingArrowVariants;\n\n// ============================================================================\n// Popover Root\n// ============================================================================\n\nexport interface PopoverRootProps extends BasePopover.Root.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Popover Root\n *\n * Groups all popover parts. Does not render an element.\n */\nconst PopoverRoot = ({ children, ...props }: PopoverRootProps) => {\n\treturn <BasePopover.Root {...props}>{children}</BasePopover.Root>;\n};\n\n// ============================================================================\n// Popover Trigger\n// ============================================================================\n\nexport interface PopoverTriggerProps\n\textends React.ComponentProps<typeof BasePopover.Trigger> {\n\tclassName?: string;\n}\n\n/**\n * Popover Trigger\n *\n * The element that triggers the popover on click.\n * Renders as the child element with popover behavior attached.\n * When children is a single React element, uses `render` prop to avoid wrapper element.\n */\nconst PopoverTrigger = React.forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n\t({ className, children, ...props }, ref) => {\n\t\t// If children is a single React element, use render prop to avoid wrapper\n\t\tconst isSingleElement = React.isValidElement(children);\n\n\t\tif (isSingleElement) {\n\t\t\treturn (\n\t\t\t\t<BasePopover.Trigger\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\trender={children as React.ReactElement<Record<string, unknown>>}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<BasePopover.Trigger ref={ref} className={className} {...props}>\n\t\t\t\t{children}\n\t\t\t</BasePopover.Trigger>\n\t\t);\n\t},\n);\nPopoverTrigger.displayName = \"PopoverTrigger\";\n\n// ============================================================================\n// Popover Portal\n// ============================================================================\n\nexport interface PopoverPortalProps extends BasePopover.Portal.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Popover Portal\n *\n * Renders the popover popup in a portal outside the DOM hierarchy.\n */\nconst PopoverPortal = ({ children, ...props }: PopoverPortalProps) => {\n\treturn <BasePopover.Portal {...props}>{children}</BasePopover.Portal>;\n};\n\n// ============================================================================\n// Popover Backdrop\n// ============================================================================\n\nexport interface PopoverBackdropProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Backdrop>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Popover Backdrop\n *\n * Optional backdrop element that can be used to close the popover on click.\n */\nconst PopoverBackdrop = React.forwardRef<HTMLDivElement, PopoverBackdropProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Backdrop\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\"fixed inset-0 z-40\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nPopoverBackdrop.displayName = \"PopoverBackdrop\";\n\n// ============================================================================\n// Popover Positioner\n// ============================================================================\n\nexport interface PopoverPositionerProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BasePopover.Positioner>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\n/**\n * Popover Positioner\n *\n * Positions the popover popup relative to the trigger.\n */\nconst PopoverPositioner = React.forwardRef<\n\tHTMLDivElement,\n\tPopoverPositionerProps\n>(({ className, side = \"bottom\", sideOffset = 8, ...props }, ref) => {\n\treturn (\n\t\t<BasePopover.Positioner\n\t\t\tref={ref}\n\t\t\tside={side}\n\t\t\tsideOffset={sideOffset}\n\t\t\tclassName={cn(\"z-50\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nPopoverPositioner.displayName = \"PopoverPositioner\";\n\n// ============================================================================\n// Popover Popup\n// ============================================================================\n\nexport interface PopoverPopupProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Popup>, \"className\">,\n\t\tVariantProps<typeof popoverPopupVariants> {\n\tclassName?: string;\n}\n\n/**\n * Popover Popup\n *\n * The popover content container with styled appearance.\n */\nconst PopoverPopup = React.forwardRef<HTMLDivElement, PopoverPopupProps>(\n\t({ className, variant, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Popup\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(popoverPopupVariants({ variant }), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nPopoverPopup.displayName = \"PopoverPopup\";\n\n// ============================================================================\n// Popover Arrow\n// ============================================================================\n\nexport interface PopoverArrowProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Arrow>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Popover Arrow\n *\n * Visual pointer element for the popover.\n * Uses shared FloatingArrowSvg with overlay color tokens for fill and border.\n */\nconst PopoverArrow = React.forwardRef<HTMLDivElement, PopoverArrowProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Arrow\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(popoverArrowVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<FloatingArrowSvg\n\t\t\t\t\tfillClassName=\"fill-overlay-background\"\n\t\t\t\t\tborderClassName=\"fill-overlay-border\"\n\t\t\t\t/>\n\t\t\t</BasePopover.Arrow>\n\t\t);\n\t},\n);\nPopoverArrow.displayName = \"PopoverArrow\";\n\n// ============================================================================\n// Popover Title\n// ============================================================================\n\nexport interface PopoverTitleProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Title>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Popover Title\n *\n * Title element for the popover content.\n */\nconst PopoverTitle = React.forwardRef<HTMLHeadingElement, PopoverTitleProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Title\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\"typography-body-md-md font-semibold\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nPopoverTitle.displayName = \"PopoverTitle\";\n\n// ============================================================================\n// Popover Description\n// ============================================================================\n\nexport interface PopoverDescriptionProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BasePopover.Description>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\n/**\n * Popover Description\n *\n * Description element for the popover content.\n */\nconst PopoverDescription = React.forwardRef<\n\tHTMLParagraphElement,\n\tPopoverDescriptionProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<BasePopover.Description\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t\"typography-body-sm-md text-overlay-text-muted mt-8\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nPopoverDescription.displayName = \"PopoverDescription\";\n\n// ============================================================================\n// Popover Close\n// ============================================================================\n\nexport interface PopoverCloseProps\n\textends Omit<React.ComponentProps<typeof BasePopover.Close>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Popover Close\n *\n * Close button for the popover.\n */\nconst PopoverClose = React.forwardRef<HTMLButtonElement, PopoverCloseProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BasePopover.Close\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute right-8 top-8 rounded-surface-ui-small p-4\",\n\t\t\t\t\t\"text-overlay-text-muted hover:text-overlay-text\",\n\t\t\t\t\t\"hover:bg-bg-section focus:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nPopoverClose.displayName = \"PopoverClose\";\n\n// ============================================================================\n// Simple Popover Component\n// ============================================================================\n\nexport interface PopoverProps {\n\t/** The content to show in the popover */\n\tchildren: React.ReactNode;\n\t/** The element that triggers the popover */\n\ttrigger: React.ReactNode;\n\t/** Title for the popover (optional) */\n\ttitle?: React.ReactNode;\n\t/** Side of the trigger to show the popover */\n\tside?: \"top\" | \"bottom\" | \"left\" | \"right\";\n\t/** Offset from the trigger */\n\tsideOffset?: number;\n\t/** Alignment along the side */\n\talign?: \"start\" | \"center\" | \"end\";\n\t/** Whether to show an arrow */\n\tshowArrow?: boolean;\n\t/** Whether to show a close button */\n\tshowClose?: boolean;\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Default open state */\n\tdefaultOpen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Additional className for the popup */\n\tclassName?: string;\n}\n\n/**\n * Popover\n *\n * A simple, pre-composed popover component for common use cases.\n * For more complex needs, use the compound components directly.\n *\n * @example\n * ```tsx\n * <Popover\n * trigger={<Button>Click me</Button>}\n * title=\"Popover Title\"\n * >\n * <p>This is the popover content.</p>\n * </Popover>\n * ```\n */\nconst Popover = ({\n\tchildren,\n\ttrigger,\n\ttitle,\n\tside = \"bottom\",\n\tsideOffset = 8,\n\talign = \"center\",\n\tshowArrow = true,\n\tshowClose = false,\n\topen,\n\tdefaultOpen,\n\tonOpenChange,\n\tclassName,\n}: PopoverProps) => {\n\treturn (\n\t\t<PopoverRoot\n\t\t\topen={open}\n\t\t\tdefaultOpen={defaultOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t>\n\t\t\t<PopoverTrigger>{trigger}</PopoverTrigger>\n\t\t\t<PopoverPortal>\n\t\t\t\t<PopoverPositioner side={side} sideOffset={sideOffset} align={align}>\n\t\t\t\t\t<PopoverPopup className={className}>\n\t\t\t\t\t\t{showArrow && <PopoverArrow />}\n\t\t\t\t\t\t{showClose && (\n\t\t\t\t\t\t\t<PopoverClose>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\t\t\t\theight=\"12\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 12 12\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M1.5 1.5L10.5 10.5M1.5 10.5L10.5 1.5\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t\t\t\t</PopoverClose>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{title && <PopoverTitle>{title}</PopoverTitle>}\n\t\t\t\t\t\t{title ? (\n\t\t\t\t\t\t\t<PopoverDescription>{children}</PopoverDescription>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tchildren\n\t\t\t\t\t\t)}\n\t\t\t\t\t</PopoverPopup>\n\t\t\t\t</PopoverPositioner>\n\t\t\t</PopoverPortal>\n\t\t</PopoverRoot>\n\t);\n};\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const PopoverParts = Object.assign(PopoverRoot, {\n\tRoot: PopoverRoot,\n\tTrigger: PopoverTrigger,\n\tPortal: PopoverPortal,\n\tBackdrop: PopoverBackdrop,\n\tPositioner: PopoverPositioner,\n\tPopup: PopoverPopup,\n\tArrow: PopoverArrow,\n\tTitle: PopoverTitle,\n\tDescription: PopoverDescription,\n\tClose: PopoverClose,\n});\n\nexport {\n\tPopover,\n\tPopoverRoot,\n\tPopoverTrigger,\n\tPopoverPortal,\n\tPopoverBackdrop,\n\tPopoverPositioner,\n\tPopoverPopup,\n\tPopoverArrow,\n\tPopoverTitle,\n\tPopoverDescription,\n\tPopoverClose,\n\tpopoverPopupVariants,\n\tpopoverArrowVariants,\n};\n","\"use client\";\n\nimport { Select as BaseSelect } from \"@base-ui-components/react/select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport {\n\tformControlBase,\n\tformControlError,\n\tformControlSizes,\n} from \"@/lib/form-control\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Select trigger variants based on Figma BaseKit / Interface / Dropdown\n *\n * States:\n * - Default: White background, subtle border\n * - Hover: Light gray background\n * - Focus/Open: Accent border with focus ring\n * - Selected: Has a value selected (darker text)\n * - Disabled: Reduced opacity, not interactive\n * - Invalid: Error border and styling\n */\nconst selectTriggerVariants = tv({\n\tbase: [\n\t\t...formControlBase,\n\t\t// Select-specific styles\n\t\t\"justify-between cursor-pointer\",\n\t\t// Override disabled to use data attribute (Base UI pattern)\n\t\t\"data-[disabled]:bg-ui-control-background-disabled data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n\t\t// Open state styling\n\t\t\"data-[popup-open]:border-ui-accent-base data-[popup-open]:ring-4 data-[popup-open]:ring-ui-color-focus data-[popup-open]:bg-ui-control-background\",\n\t\t// Invalid state (aria-invalid)\n\t\t\"aria-[invalid=true]:border-ui-error-color aria-[invalid=true]:ring-ui-error-color/20\",\n\t],\n\tvariants: {\n\t\tsize: formControlSizes,\n\t\terror: formControlError,\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t\terror: false,\n\t},\n});\n\n/**\n * Select popup/menu variants\n *\n * Uses overlay tokens for consistent floating panel styling:\n * - color.overlay.background - Light background\n * - color.overlay.border - Subtle border\n * - surface.overlay.radius - Rounded corners\n */\nconst selectPopupVariants = tv({\n\tbase: [\n\t\t// Layout - match trigger width using CSS custom property from Base UI\n\t\t\"flex flex-col gap-2 p-8\",\n\t\t\"w-[var(--anchor-width)]\",\n\t\t// Background - uses overlay token\n\t\t\"bg-overlay-background\",\n\t\t// Border - uses overlay token for subtle border\n\t\t\"border border-overlay-border\",\n\t\t// Border radius - uses overlay token for consistency with other overlays\n\t\t\"rounded-surface-overlay\",\n\t\t// Shadow for elevation\n\t\t\"shadow-lg\",\n\t\t// Animation\n\t\t\"origin-[var(--transform-origin)]\",\n\t\t\"transition-[transform,scale,opacity] duration-150\",\n\t\t\"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n\t\t// Ensure it's above other content\n\t\t\"z-50\",\n\t\t// Scrollable support\n\t\t\"overflow-y-auto max-h-[var(--available-height,300px)]\",\n\t],\n});\n\n/**\n * Select option/item variants based on Figma Menu Items\n *\n * States:\n * - Default: White background\n * - Hover/Highlighted: Light indigo tint background\n * - Selected: Stronger indigo tint with blue text and checkmark\n * - Disabled: Reduced opacity\n */\nconst selectOptionVariants = tv({\n\tbase: [\n\t\t// Layout\n\t\t\"flex items-center justify-between px-12 py-8 h-36\",\n\t\t// Typography - use semantic tokens\n\t\t\"typography-body-md-md font-medium text-ui-menu-item-text\",\n\t\t// Background - default\n\t\t\"bg-ui-menu-item-bg\",\n\t\t// Border radius - uses surface ui radius for theming support\n\t\t\"rounded-surface-ui-medium\",\n\t\t// Cursor\n\t\t\"cursor-pointer outline-none\",\n\t\t// Transitions\n\t\t\"transition-colors duration-150\",\n\t\t// Hover/highlighted state - use semantic token\n\t\t\"data-[highlighted]:bg-ui-menu-item-bg-hover\",\n\t\t// Selected state - use semantic tokens\n\t\t\"data-[selected]:bg-ui-menu-item-bg-selected data-[selected]:text-ui-menu-item-text-selected\",\n\t\t// Disabled state\n\t\t\"data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed\",\n\t],\n});\n\n/**\n * Select separator variants\n */\nconst selectSeparatorVariants = tv({\n\tbase: [\"h-px my-6 -mx-8\", \"bg-overlay-border\"],\n});\n\n/**\n * Select scroll arrow variants (shared by up and down)\n */\nconst selectScrollArrowVariants = tv({\n\tbase: [\n\t\t\"flex items-center justify-center\",\n\t\t\"py-4\",\n\t\t\"text-text-muted\",\n\t\t\"cursor-default\",\n\t\t// Sticky positioning for scroll indicators\n\t\t\"data-[direction=up]:sticky data-[direction=up]:top-0\",\n\t\t\"data-[direction=down]:sticky data-[direction=down]:bottom-0\",\n\t\t\"bg-overlay-background\",\n\t],\n});\n\n// ============================================================================\n// Select Root\n// ============================================================================\n\nexport interface SelectProps<Value = string>\n\textends BaseSelect.Root.Props<Value> {\n\tchildren: React.ReactNode;\n}\n\nconst SelectRoot = <Value = string>({\n\tchildren,\n\t...props\n}: SelectProps<Value>) => {\n\treturn <BaseSelect.Root {...props}>{children}</BaseSelect.Root>;\n};\n\n// ============================================================================\n// Select Trigger\n// ============================================================================\n\nexport interface SelectTriggerProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Trigger>, \"className\">,\n\t\tVariantProps<typeof selectTriggerVariants> {\n\tclassName?: string;\n\tplaceholder?: string;\n\t/**\n\t * Accessible label for the select trigger.\n\t * Required for accessibility when no visible label is present.\n\t */\n\t\"aria-label\"?: string;\n}\n\nconst SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tsize,\n\t\t\terror,\n\t\t\tplaceholder = \"Select option...\",\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\treturn (\n\t\t\t<BaseSelect.Trigger\n\t\t\t\tref={ref}\n\t\t\t\taria-label={ariaLabel ?? placeholder}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\tclassName={cn(selectTriggerVariants({ size, error }), className)}\n\t\t\t\tdata-size={size ?? \"default\"}\n\t\t\t\tdata-error={error ?? false}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<BaseSelect.Value>\n\t\t\t\t\t{(value) =>\n\t\t\t\t\t\tvalue ? (\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-text-muted\">{placeholder}</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t</BaseSelect.Value>\n\t\t\t\t<BaseSelect.Icon aria-hidden=\"true\">\n\t\t\t\t\t<ChevronDown className=\"size-16 text-gray-500 shrink-0\" />\n\t\t\t\t</BaseSelect.Icon>\n\t\t\t</BaseSelect.Trigger>\n\t\t);\n\t},\n);\nSelectTrigger.displayName = \"SelectTrigger\";\n\n// ============================================================================\n// Select Value (for custom trigger compositions)\n// ============================================================================\n\nexport interface SelectValueProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Value>, \"className\"> {\n\tclassName?: string;\n\tplaceholder?: string;\n}\n\nconst SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(\n\t({ className, placeholder = \"Select option...\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Value ref={ref} className={className} {...props}>\n\t\t\t\t{(value) =>\n\t\t\t\t\tvalue ? value : <span className=\"text-text-muted\">{placeholder}</span>\n\t\t\t\t}\n\t\t\t</BaseSelect.Value>\n\t\t);\n\t},\n);\nSelectValue.displayName = \"SelectValue\";\n\n// ============================================================================\n// Select Portal & Popup (Content)\n// ============================================================================\n\nexport interface SelectPopupProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Popup>, \"className\"> {\n\tclassName?: string;\n\t/**\n\t * Whether the selected item should align with the trigger.\n\t * When true (default), the popup positions so the selected item appears over the trigger.\n\t * When false, the popup aligns to the trigger edge.\n\t */\n\talignItemWithTrigger?: boolean;\n}\n\nconst SelectPopup = React.forwardRef<HTMLDivElement, SelectPopupProps>(\n\t({ className, children, alignItemWithTrigger = true, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Portal>\n\t\t\t\t<BaseSelect.Positioner\n\t\t\t\t\tside=\"bottom\"\n\t\t\t\t\tsideOffset={4}\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\talignItemWithTrigger={alignItemWithTrigger}\n\t\t\t\t>\n\t\t\t\t\t<BaseSelect.Popup\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(selectPopupVariants(), className)}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</BaseSelect.Popup>\n\t\t\t\t</BaseSelect.Positioner>\n\t\t\t</BaseSelect.Portal>\n\t\t);\n\t},\n);\nSelectPopup.displayName = \"SelectPopup\";\n\n// Alias for shadcn compatibility\nconst SelectContent = SelectPopup;\n\n// ============================================================================\n// Select Option (wraps Base UI's Select.Item)\n// ============================================================================\n\nexport interface SelectOptionProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Item>, \"className\"> {\n\tclassName?: string;\n}\n\nconst SelectOption = React.forwardRef<HTMLDivElement, SelectOptionProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Item\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(selectOptionVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n\t\t\t\t<BaseSelect.ItemIndicator aria-hidden=\"true\">\n\t\t\t\t\t<Check className=\"size-14 shrink-0\" />\n\t\t\t\t</BaseSelect.ItemIndicator>\n\t\t\t</BaseSelect.Item>\n\t\t);\n\t},\n);\nSelectOption.displayName = \"SelectOption\";\n\n// Alias for shadcn compatibility\nconst SelectItem = SelectOption;\n\n// ============================================================================\n// Select Group\n// ============================================================================\n\nexport interface SelectGroupProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Group>, \"className\"> {\n\tclassName?: string;\n}\n\nconst SelectGroup = React.forwardRef<HTMLDivElement, SelectGroupProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Group ref={ref} className={className} {...props}>\n\t\t\t\t{children}\n\t\t\t</BaseSelect.Group>\n\t\t);\n\t},\n);\nSelectGroup.displayName = \"SelectGroup\";\n\n// ============================================================================\n// Select Group Label\n// ============================================================================\n\nexport interface SelectGroupLabelProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseSelect.GroupLabel>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\nconst SelectGroupLabel = React.forwardRef<\n\tHTMLDivElement,\n\tSelectGroupLabelProps\n>(({ className, children, ...props }, ref) => {\n\treturn (\n\t\t<BaseSelect.GroupLabel\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t\"px-12 py-6 typography-body-sm-sm font-medium text-text-muted uppercase tracking-wide\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</BaseSelect.GroupLabel>\n\t);\n});\nSelectGroupLabel.displayName = \"SelectGroupLabel\";\n\n// Alias for shadcn compatibility\nconst SelectLabel = SelectGroupLabel;\n\n// ============================================================================\n// Select Separator\n// ============================================================================\n\nexport interface SelectSeparatorProps\n\textends Omit<React.ComponentProps<typeof BaseSelect.Separator>, \"className\"> {\n\tclassName?: string;\n}\n\nconst SelectSeparator = React.forwardRef<HTMLDivElement, SelectSeparatorProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseSelect.Separator\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(selectSeparatorVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nSelectSeparator.displayName = \"SelectSeparator\";\n\n// ============================================================================\n// Select Scroll Up Arrow\n// ============================================================================\n\nexport interface SelectScrollUpArrowProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseSelect.ScrollUpArrow>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\nconst SelectScrollUpArrow = React.forwardRef<\n\tHTMLDivElement,\n\tSelectScrollUpArrowProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<BaseSelect.ScrollUpArrow\n\t\t\tref={ref}\n\t\t\tdata-direction=\"up\"\n\t\t\taria-label=\"Scroll up\"\n\t\t\tclassName={cn(selectScrollArrowVariants(), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ChevronUp className=\"size-12\" aria-hidden=\"true\" />\n\t\t</BaseSelect.ScrollUpArrow>\n\t);\n});\nSelectScrollUpArrow.displayName = \"SelectScrollUpArrow\";\n\n// ============================================================================\n// Select Scroll Down Arrow\n// ============================================================================\n\nexport interface SelectScrollDownArrowProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseSelect.ScrollDownArrow>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\nconst SelectScrollDownArrow = React.forwardRef<\n\tHTMLDivElement,\n\tSelectScrollDownArrowProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<BaseSelect.ScrollDownArrow\n\t\t\tref={ref}\n\t\t\tdata-direction=\"down\"\n\t\t\taria-label=\"Scroll down\"\n\t\t\tclassName={cn(selectScrollArrowVariants(), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ChevronDown className=\"size-12\" aria-hidden=\"true\" />\n\t\t</BaseSelect.ScrollDownArrow>\n\t);\n});\nSelectScrollDownArrow.displayName = \"SelectScrollDownArrow\";\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const Select = Object.assign(SelectRoot, {\n\tTrigger: SelectTrigger,\n\tValue: SelectValue,\n\tPopup: SelectPopup,\n\tContent: SelectContent,\n\tOption: SelectOption,\n\tItem: SelectItem,\n\tGroup: SelectGroup,\n\tGroupLabel: SelectGroupLabel,\n\tLabel: SelectLabel,\n\tSeparator: SelectSeparator,\n\tScrollUpArrow: SelectScrollUpArrow,\n\tScrollDownArrow: SelectScrollDownArrow,\n});\n\n// Also export individual components for flexibility\nexport {\n\tSelectRoot,\n\tSelectTrigger,\n\tSelectValue,\n\tSelectPopup,\n\tSelectContent,\n\tSelectOption,\n\tSelectItem,\n\tSelectGroup,\n\tSelectGroupLabel,\n\tSelectLabel,\n\tSelectSeparator,\n\tSelectScrollUpArrow,\n\tSelectScrollDownArrow,\n\tselectTriggerVariants,\n\tselectPopupVariants,\n\tselectOptionVariants,\n\tselectSeparatorVariants,\n\tselectScrollArrowVariants,\n};\n","\"use client\";\n\nimport { Tooltip as BaseTooltip } from \"@base-ui-components/react/tooltip\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\nimport {\n\tFloatingArrowSvg,\n\tfloatingArrowVariants,\n} from \"../../shared/floating-arrow\";\n\n/**\n * Tooltip popup variants\n *\n * Uses semantic tokens for themeable styling:\n * - color.tooltip.bg - Dark background\n * - color.tooltip.text - Light text\n * - surface.tooltip.radius - Small border radius\n * - spatial.component.tooltip.padding-x/y - Consistent padding\n */\nconst tooltipPopupVariants = tv({\n\tbase: [\n\t\t// Layout - uses component tooltip tokens\n\t\t\"px-spatial-component-tooltip-padding-x py-spatial-component-tooltip-padding-y\",\n\t\t// Background and text - uses tooltip color tokens\n\t\t\"bg-tooltip-bg text-tooltip-text\",\n\t\t// Border radius - uses surface tooltip token\n\t\t\"rounded-surface-tooltip\",\n\t\t// Typography - uses semantic body text composite\n\t\t\"typography-body-sm-md font-medium\",\n\t\t// Shadow for elevation\n\t\t\"shadow-md\",\n\t\t// Allow arrow to extend outside popup bounds\n\t\t\"overflow-visible\",\n\t\t// Animation\n\t\t\"origin-[var(--transform-origin)]\",\n\t\t\"transition-[transform,scale,opacity] duration-150\",\n\t\t\"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n\t\t// Ensure it's above other content\n\t\t\"z-50\",\n\t],\n\tvariants: {\n\t\tvariant: {\n\t\t\tdefault: \"\",\n\t\t\t// Future variants can be added here (e.g., light, primary)\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t},\n});\n\n/**\n * Tooltip arrow variants - uses shared floating arrow variants\n */\nconst tooltipArrowVariants = floatingArrowVariants;\n\n// ============================================================================\n// Tooltip Provider\n// ============================================================================\n\nexport interface TooltipProviderProps extends BaseTooltip.Provider.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Tooltip Provider\n *\n * Manages shared delays across multiple tooltips.\n * Wrap your app or a section with this to enable tooltip delay grouping.\n */\nconst TooltipProvider = ({ children, ...props }: TooltipProviderProps) => {\n\treturn <BaseTooltip.Provider {...props}>{children}</BaseTooltip.Provider>;\n};\n\n// ============================================================================\n// Tooltip Root\n// ============================================================================\n\nexport interface TooltipRootProps extends BaseTooltip.Root.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Tooltip Root\n *\n * Groups all tooltip parts. Does not render an element.\n */\nconst TooltipRoot = ({ children, ...props }: TooltipRootProps) => {\n\treturn <BaseTooltip.Root {...props}>{children}</BaseTooltip.Root>;\n};\n\n// ============================================================================\n// Tooltip Trigger\n// ============================================================================\n\nexport interface TooltipTriggerProps\n\textends React.ComponentProps<typeof BaseTooltip.Trigger> {\n\tclassName?: string;\n}\n\n/**\n * Tooltip Trigger\n *\n * The element that triggers the tooltip on hover/focus.\n * Renders as the child element with tooltip behavior attached.\n * When children is a single React element, uses `render` prop to avoid wrapper element.\n */\nconst TooltipTrigger = React.forwardRef<HTMLButtonElement, TooltipTriggerProps>(\n\t({ className, children, ...props }, ref) => {\n\t\t// If children is a single React element, use render prop to avoid wrapper\n\t\tconst isSingleElement = React.isValidElement(children);\n\n\t\tif (isSingleElement) {\n\t\t\treturn (\n\t\t\t\t<BaseTooltip.Trigger\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\trender={children as React.ReactElement<Record<string, unknown>>}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseTooltip.Trigger ref={ref} className={className} {...props}>\n\t\t\t\t{children}\n\t\t\t</BaseTooltip.Trigger>\n\t\t);\n\t},\n);\nTooltipTrigger.displayName = \"TooltipTrigger\";\n\n// ============================================================================\n// Tooltip Portal\n// ============================================================================\n\nexport interface TooltipPortalProps extends BaseTooltip.Portal.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Tooltip Portal\n *\n * Renders the tooltip popup in a portal outside the DOM hierarchy.\n */\nconst TooltipPortal = ({ children, ...props }: TooltipPortalProps) => {\n\treturn <BaseTooltip.Portal {...props}>{children}</BaseTooltip.Portal>;\n};\n\n// ============================================================================\n// Tooltip Positioner\n// ============================================================================\n\nexport interface TooltipPositionerProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseTooltip.Positioner>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\n/**\n * Tooltip Positioner\n *\n * Positions the tooltip popup relative to the trigger.\n */\nconst TooltipPositioner = React.forwardRef<\n\tHTMLDivElement,\n\tTooltipPositionerProps\n>(({ className, side = \"top\", sideOffset = 8, ...props }, ref) => {\n\treturn (\n\t\t<BaseTooltip.Positioner\n\t\t\tref={ref}\n\t\t\tside={side}\n\t\t\tsideOffset={sideOffset}\n\t\t\tclassName={className}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nTooltipPositioner.displayName = \"TooltipPositioner\";\n\n// ============================================================================\n// Tooltip Popup\n// ============================================================================\n\nexport interface TooltipPopupProps\n\textends Omit<React.ComponentProps<typeof BaseTooltip.Popup>, \"className\">,\n\t\tVariantProps<typeof tooltipPopupVariants> {\n\tclassName?: string;\n}\n\n/**\n * Tooltip Popup\n *\n * The tooltip content container with styled appearance.\n */\nconst TooltipPopup = React.forwardRef<HTMLDivElement, TooltipPopupProps>(\n\t({ className, variant, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseTooltip.Popup\n\t\t\t\tref={ref}\n\t\t\t\trole=\"tooltip\"\n\t\t\t\tclassName={cn(tooltipPopupVariants({ variant }), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nTooltipPopup.displayName = \"TooltipPopup\";\n\n// ============================================================================\n// Tooltip Arrow\n// ============================================================================\n\nexport interface TooltipArrowProps\n\textends Omit<React.ComponentProps<typeof BaseTooltip.Arrow>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Tooltip Arrow\n *\n * Visual pointer element for the tooltip.\n * Uses shared FloatingArrowSvg with tooltip-bg color token.\n */\nconst TooltipArrow = React.forwardRef<HTMLDivElement, TooltipArrowProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseTooltip.Arrow\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(tooltipArrowVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<FloatingArrowSvg fillClassName=\"fill-tooltip-bg\" />\n\t\t\t</BaseTooltip.Arrow>\n\t\t);\n\t},\n);\nTooltipArrow.displayName = \"TooltipArrow\";\n\n// ============================================================================\n// Simple Tooltip Component\n// ============================================================================\n\nexport interface TooltipProps {\n\t/** The content to show in the tooltip */\n\tcontent: React.ReactNode;\n\t/** The element that triggers the tooltip */\n\tchildren: React.ReactNode;\n\t/** Side of the trigger to show the tooltip */\n\tside?: \"top\" | \"bottom\" | \"left\" | \"right\";\n\t/** Offset from the trigger */\n\tsideOffset?: number;\n\t/** Alignment along the side */\n\talign?: \"start\" | \"center\" | \"end\";\n\t/** Delay before showing the tooltip (ms) */\n\tdelay?: number;\n\t/** Delay before hiding the tooltip (ms) */\n\tcloseDelay?: number;\n\t/** Whether to show an arrow */\n\tshowArrow?: boolean;\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Default open state */\n\tdefaultOpen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Additional className for the popup */\n\tclassName?: string;\n}\n\n/**\n * Tooltip\n *\n * A simple, pre-composed tooltip component for common use cases.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"Save your changes\">\n * <Button>Save</Button>\n * </Tooltip>\n * ```\n */\nconst Tooltip = ({\n\tcontent,\n\tchildren,\n\tside = \"top\",\n\tsideOffset = 8,\n\talign = \"center\",\n\tdelay,\n\tcloseDelay,\n\tshowArrow = true,\n\topen,\n\tdefaultOpen,\n\tonOpenChange,\n\tclassName,\n}: TooltipProps) => {\n\treturn (\n\t\t<TooltipRoot\n\t\t\topen={open}\n\t\t\tdefaultOpen={defaultOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t>\n\t\t\t<TooltipTrigger delay={delay} closeDelay={closeDelay}>\n\t\t\t\t{children}\n\t\t\t</TooltipTrigger>\n\t\t\t<TooltipPortal>\n\t\t\t\t<TooltipPositioner side={side} sideOffset={sideOffset} align={align}>\n\t\t\t\t\t<TooltipPopup className={className}>\n\t\t\t\t\t\t{showArrow && <TooltipArrow />}\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</TooltipPopup>\n\t\t\t\t</TooltipPositioner>\n\t\t\t</TooltipPortal>\n\t\t</TooltipRoot>\n\t);\n};\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const TooltipParts = Object.assign(TooltipRoot, {\n\tProvider: TooltipProvider,\n\tRoot: TooltipRoot,\n\tTrigger: TooltipTrigger,\n\tPortal: TooltipPortal,\n\tPositioner: TooltipPositioner,\n\tPopup: TooltipPopup,\n\tArrow: TooltipArrow,\n});\n\nexport {\n\tTooltip,\n\tTooltipProvider,\n\tTooltipRoot,\n\tTooltipTrigger,\n\tTooltipPortal,\n\tTooltipPositioner,\n\tTooltipPopup,\n\tTooltipArrow,\n\ttooltipPopupVariants,\n\ttooltipArrowVariants,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport type { CaptionCue } from \"@/hooks/use-captions\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Caption overlay variants using semantic tokens.\n */\nconst captionOverlayVariants = tv({\n\tbase: [\n\t\t// Positioning - absolute at bottom of video container\n\t\t\"pointer-events-none\",\n\t\t\"absolute right-0 left-0\",\n\t\t\"z-10\",\n\t\t\"flex justify-center\",\n\t\t\"px-4\",\n\t],\n\tvariants: {\n\t\tposition: {\n\t\t\tbottom: \"bottom-64\",\n\t\t\t\"bottom-sm\": \"bottom-24\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tposition: \"bottom-sm\",\n\t},\n});\n\n/**\n * Caption text box variants.\n */\nconst captionTextVariants = tv({\n\tbase: [\n\t\t\"flex items-center justify-center\",\n\t\t\"w-fit max-w-[80%]\",\n\t\t\"gap-10\",\n\t\t\"px-12 py-6\",\n\t\t\"text-center\",\n\t\t\"font-normal leading-[1.4]\",\n\t\t\"rounded-6\",\n\t\t\"bg-video-player-caption-bg text-video-player-caption-text\",\n\t],\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"text-14\",\n\t\t\tmd: \"[font-size:clamp(16px,2vw,24px)]\",\n\t\t\tlg: \"text-24\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"md\",\n\t},\n});\n\nexport interface CaptionOverlayProps\n\textends React.HTMLAttributes<HTMLOutputElement>,\n\t\tVariantProps<typeof captionOverlayVariants>,\n\t\tVariantProps<typeof captionTextVariants> {\n\t/** Caption cue to display */\n\tcue?: CaptionCue | null;\n\t/** Caption text to display (alternative to cue) */\n\ttext?: string;\n}\n\n/**\n * CaptionOverlay component.\n *\n * Displays caption text overlaid on video content.\n * Styled to match the DGA video player implementation.\n *\n * @example\n * ```tsx\n * <CaptionOverlay cue={activeCue} />\n *\n * // Or with plain text\n * <CaptionOverlay text=\"Hello, world!\" />\n * ```\n */\nconst CaptionOverlay = React.forwardRef<HTMLOutputElement, CaptionOverlayProps>(\n\t({ className, cue, text, position, size, ...props }, ref) => {\n\t\t// Use cue text or fallback to text prop\n\t\tconst displayText = cue?.text ?? text;\n\n\t\t// Don't render anything if no caption text\n\t\tif (!displayText) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<output\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(captionOverlayVariants({ position }), className)}\n\t\t\t\taria-live=\"polite\"\n\t\t\t\taria-label=\"Video caption\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<span className={captionTextVariants({ size })}>{displayText}</span>\n\t\t\t</output>\n\t\t);\n\t},\n);\n\nCaptionOverlay.displayName = \"CaptionOverlay\";\n\nexport { CaptionOverlay, captionOverlayVariants, captionTextVariants };\n","\"use client\";\n\nimport * as React from \"react\";\n\n/**\n * Represents a single caption cue parsed from VTT.\n */\nexport interface CaptionCue {\n\t/** Unique identifier for the cue */\n\tid: string;\n\t/** Start time in seconds */\n\tstartTime: number;\n\t/** End time in seconds */\n\tendTime: number;\n\t/** Caption text content */\n\ttext: string;\n}\n\n/**\n * Parse VTT timestamp to seconds.\n * Handles formats: HH:MM:SS.mmm or MM:SS.mmm\n */\nfunction parseVttTimestamp(timestamp: string): number {\n\tconst parts = timestamp.trim().split(\":\");\n\tlet hours = 0;\n\tlet minutes = 0;\n\tlet seconds = 0;\n\n\tif (parts.length === 3) {\n\t\thours = Number.parseInt(parts[0], 10);\n\t\tminutes = Number.parseInt(parts[1], 10);\n\t\tseconds = Number.parseFloat(parts[2]);\n\t} else if (parts.length === 2) {\n\t\tminutes = Number.parseInt(parts[0], 10);\n\t\tseconds = Number.parseFloat(parts[1]);\n\t}\n\n\treturn hours * 3600 + minutes * 60 + seconds;\n}\n\n/**\n * Parse VTT content string into an array of caption cues.\n */\nfunction parseVtt(vttContent: string): CaptionCue[] {\n\tconst cues: CaptionCue[] = [];\n\tconst lines = vttContent.trim().split(\"\\n\");\n\n\tlet i = 0;\n\n\t// Skip WEBVTT header and any metadata\n\twhile (i < lines.length && !lines[i].includes(\"-->\")) {\n\t\ti++;\n\t}\n\n\twhile (i < lines.length) {\n\t\tconst line = lines[i].trim();\n\n\t\t// Look for timestamp line (contains -->)\n\t\tif (line.includes(\"-->\")) {\n\t\t\tconst [startStr, endStr] = line.split(\"-->\").map((s) => s.trim());\n\n\t\t\t// Handle optional cue settings after timestamp\n\t\t\tconst endParts = endStr.split(\" \");\n\t\t\tconst endTime = parseVttTimestamp(endParts[0]);\n\t\t\tconst startTime = parseVttTimestamp(startStr);\n\n\t\t\t// Collect text lines until empty line or next timestamp\n\t\t\tconst textLines: string[] = [];\n\t\t\ti++;\n\t\t\twhile (\n\t\t\t\ti < lines.length &&\n\t\t\t\tlines[i].trim() !== \"\" &&\n\t\t\t\t!lines[i].includes(\"-->\")\n\t\t\t) {\n\t\t\t\t// Skip cue identifier lines (numbers only)\n\t\t\t\tif (!/^\\d+$/.test(lines[i].trim())) {\n\t\t\t\t\ttextLines.push(lines[i].trim());\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif (textLines.length > 0) {\n\t\t\t\tcues.push({\n\t\t\t\t\tid: `cue-${cues.length}`,\n\t\t\t\t\tstartTime,\n\t\t\t\t\tendTime,\n\t\t\t\t\ttext: textLines.join(\"\\n\"),\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\ti++;\n\t\t}\n\t}\n\n\treturn cues;\n}\n\n/**\n * Strip VTT formatting tags from text.\n * Removes <v>, <c>, <i>, <b>, <u>, etc.\n */\nfunction stripVttTags(text: string): string {\n\treturn text\n\t\t.replace(/<\\/?[^>]+(>|$)/g, \"\") // Remove HTML-like tags\n\t\t.replace(/ /g, \" \")\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.trim();\n}\n\ninterface UseCaptionsOptions {\n\t/** VTT file URL to fetch */\n\tsrc?: string;\n\t/** Pre-loaded VTT content string */\n\tcontent?: string;\n\t/** Strip VTT formatting tags from caption text */\n\tstripTags?: boolean;\n\t/** Current playback time in seconds (alternative to setCurrentTime) */\n\tcurrentTime?: number;\n}\n\ninterface UseCaptionsReturn {\n\t/** All parsed caption cues */\n\tcues: CaptionCue[];\n\t/** Currently active cue based on current time */\n\tactiveCue: CaptionCue | null;\n\t/** Update the current playback time to get active cue */\n\tsetCurrentTime: (time: number) => void;\n\t/** Loading state */\n\tisLoading: boolean;\n\t/** Error state */\n\terror: Error | null;\n}\n\n/**\n * Hook for parsing VTT captions and tracking the active cue.\n *\n * @param options - Caption source options\n * @returns Parsed cues, active cue, and state\n *\n * @example\n * ```tsx\n * function VideoPlayer() {\n * const videoRef = React.useRef<HTMLVideoElement>(null);\n * const { activeCue, setCurrentTime } = useCaptions({\n * src: '/captions.vtt',\n * });\n *\n * // Sync with video time\n * React.useEffect(() => {\n * const video = videoRef.current;\n * if (!video) return;\n *\n * const handleTimeUpdate = () => setCurrentTime(video.currentTime);\n * video.addEventListener('timeupdate', handleTimeUpdate);\n * return () => video.removeEventListener('timeupdate', handleTimeUpdate);\n * }, [setCurrentTime]);\n *\n * return (\n * <div>\n * <video ref={videoRef} src=\"/video.mp4\" />\n * {activeCue && <div className=\"caption\">{activeCue.text}</div>}\n * </div>\n * );\n * }\n * ```\n */\nexport function useCaptions(\n\toptions: UseCaptionsOptions = {},\n): UseCaptionsReturn {\n\tconst { src, content, stripTags = true, currentTime: externalTime } = options;\n\n\tconst [cues, setCues] = React.useState<CaptionCue[]>([]);\n\tconst [internalTime, setInternalTime] = React.useState(0);\n\tconst [isLoading, setIsLoading] = React.useState(false);\n\tconst [error, setError] = React.useState<Error | null>(null);\n\n\t// Use external time if provided, otherwise use internal state\n\tconst currentTime = externalTime ?? internalTime;\n\n\t// Parse content or fetch from URL\n\tReact.useEffect(() => {\n\t\tif (content) {\n\t\t\t// Use provided content directly\n\t\t\tconst parsed = parseVtt(content);\n\t\t\tsetCues(\n\t\t\t\tstripTags\n\t\t\t\t\t? parsed.map((cue) => ({ ...cue, text: stripVttTags(cue.text) }))\n\t\t\t\t\t: parsed,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!src) {\n\t\t\tsetCues([]);\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsLoading(true);\n\t\tsetError(null);\n\n\t\tfetch(src)\n\t\t\t.then((response) => {\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tthrow new Error(`Failed to fetch captions: ${response.status}`);\n\t\t\t\t}\n\t\t\t\treturn response.text();\n\t\t\t})\n\t\t\t.then((vttContent) => {\n\t\t\t\tconst parsed = parseVtt(vttContent);\n\t\t\t\tsetCues(\n\t\t\t\t\tstripTags\n\t\t\t\t\t\t? parsed.map((cue) => ({ ...cue, text: stripVttTags(cue.text) }))\n\t\t\t\t\t\t: parsed,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tsetError(err instanceof Error ? err : new Error(String(err)));\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tsetIsLoading(false);\n\t\t\t});\n\t}, [src, content, stripTags]);\n\n\t// Find active cue for current time\n\tconst activeCue = React.useMemo(() => {\n\t\treturn (\n\t\t\tcues.find(\n\t\t\t\t(cue) => currentTime >= cue.startTime && currentTime <= cue.endTime,\n\t\t\t) ?? null\n\t\t);\n\t}, [cues, currentTime]);\n\n\t// Memoize setCurrentTime to avoid unnecessary re-renders\n\tconst handleSetCurrentTime = React.useCallback((time: number) => {\n\t\tsetInternalTime(time);\n\t}, []);\n\n\treturn {\n\t\tcues,\n\t\tactiveCue,\n\t\tsetCurrentTime: handleSetCurrentTime,\n\t\tisLoading,\n\t\terror,\n\t};\n}\n","import * as React from \"react\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseVideoKeyboardOptions {\n\t/** Ref to the video element */\n\tvideoRef: React.RefObject<HTMLVideoElement | null>;\n\t/** Whether keyboard handling is enabled (default: true) */\n\tenabled?: boolean;\n\t/** Seek amount in seconds for arrow keys (default: 5) */\n\tseekAmount?: number;\n\t/** Volume change amount for arrow keys (default: 0.1) */\n\tvolumeStep?: number;\n\t/** Callback when play/pause is toggled */\n\tonTogglePlay?: () => void;\n\t/** Callback when fullscreen is toggled */\n\tonToggleFullscreen?: () => void;\n\t/** Callback when captions are toggled */\n\tonToggleCaptions?: () => void;\n\t/** Callback when controls should be shown */\n\tonShowControls?: () => void;\n}\n\nexport interface UseVideoKeyboardReturn {\n\t/** Key down handler to attach to container element */\n\thandleKeyDown: (e: React.KeyboardEvent) => void;\n\t/** Props to spread on the container element */\n\tcontainerProps: {\n\t\tonKeyDown: (e: React.KeyboardEvent) => void;\n\t\ttabIndex: number;\n\t\trole: string;\n\t\t\"aria-label\": string;\n\t};\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\n/**\n * Hook for handling keyboard shortcuts in a video player.\n *\n * Supported shortcuts:\n * - Space: Play/pause\n * - Left Arrow: Seek backward\n * - Right Arrow: Seek forward\n * - Up Arrow: Volume up\n * - Down Arrow: Volume down\n * - M: Toggle mute\n * - F: Toggle fullscreen\n * - C: Toggle captions\n *\n * @example\n * ```tsx\n * const { containerProps } = useVideoKeyboard({\n * videoRef,\n * onTogglePlay: () => video.paused ? video.play() : video.pause(),\n * onToggleFullscreen: () => toggleFullscreen(),\n * onShowControls: () => setControlsVisible(true),\n * });\n *\n * return <div {...containerProps}>...</div>;\n * ```\n */\nexport function useVideoKeyboard({\n\tvideoRef,\n\tenabled = true,\n\tseekAmount = 5,\n\tvolumeStep = 0.1,\n\tonTogglePlay,\n\tonToggleFullscreen,\n\tonToggleCaptions,\n\tonShowControls,\n}: UseVideoKeyboardOptions): UseVideoKeyboardReturn {\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent) => {\n\t\t\tif (!enabled) return;\n\n\t\t\tconst video = videoRef.current;\n\t\t\tif (!video) return;\n\n\t\t\t// Don't handle if focus is on interactive elements\n\t\t\tconst target = e.target as HTMLElement;\n\t\t\tif (\n\t\t\t\ttarget.tagName === \"BUTTON\" ||\n\t\t\t\ttarget.tagName === \"INPUT\" ||\n\t\t\t\ttarget.tagName === \"TEXTAREA\" ||\n\t\t\t\ttarget.closest(\"button\") ||\n\t\t\t\ttarget.closest(\"input\") ||\n\t\t\t\ttarget.closest(\"[role='slider']\")\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet handled = false;\n\n\t\t\tswitch (e.key) {\n\t\t\t\t// Play/Pause\n\t\t\t\tcase \" \":\n\t\t\t\tcase \"Spacebar\":\n\t\t\t\tcase \"k\": // YouTube-style shortcut\n\t\t\t\t\tif (onTogglePlay) {\n\t\t\t\t\t\tonTogglePlay();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (video.paused) {\n\t\t\t\t\t\t\tvideo.play().catch(() => {});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvideo.pause();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Seek backward\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\tcase \"j\": // YouTube-style shortcut\n\t\t\t\t\tvideo.currentTime = Math.max(0, video.currentTime - seekAmount);\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Seek forward\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\tcase \"l\": // YouTube-style shortcut\n\t\t\t\t\tvideo.currentTime = Math.min(\n\t\t\t\t\t\tvideo.duration || 0,\n\t\t\t\t\t\tvideo.currentTime + seekAmount,\n\t\t\t\t\t);\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Volume up\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\tvideo.volume = Math.min(1, video.volume + volumeStep);\n\t\t\t\t\tvideo.muted = false;\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Volume down\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\tvideo.volume = Math.max(0, video.volume - volumeStep);\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Toggle mute\n\t\t\t\tcase \"m\":\n\t\t\t\tcase \"M\":\n\t\t\t\t\tvideo.muted = !video.muted;\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Toggle fullscreen\n\t\t\t\tcase \"f\":\n\t\t\t\tcase \"F\":\n\t\t\t\t\tonToggleFullscreen?.();\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Toggle captions\n\t\t\t\tcase \"c\":\n\t\t\t\tcase \"C\":\n\t\t\t\t\tonToggleCaptions?.();\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Jump to start\n\t\t\t\tcase \"Home\":\n\t\t\t\t\tvideo.currentTime = 0;\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Jump to end\n\t\t\t\tcase \"End\":\n\t\t\t\t\tvideo.currentTime = video.duration || 0;\n\t\t\t\t\thandled = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Number keys for percentage seeking (0-9)\n\t\t\t\tcase \"0\":\n\t\t\t\tcase \"1\":\n\t\t\t\tcase \"2\":\n\t\t\t\tcase \"3\":\n\t\t\t\tcase \"4\":\n\t\t\t\tcase \"5\":\n\t\t\t\tcase \"6\":\n\t\t\t\tcase \"7\":\n\t\t\t\tcase \"8\":\n\t\t\t\tcase \"9\":\n\t\t\t\t\tif (video.duration) {\n\t\t\t\t\t\tconst percent = parseInt(e.key, 10) / 10;\n\t\t\t\t\t\tvideo.currentTime = video.duration * percent;\n\t\t\t\t\t\thandled = true;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (handled) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\tonShowControls?.();\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tenabled,\n\t\t\tvideoRef,\n\t\t\tseekAmount,\n\t\t\tvolumeStep,\n\t\t\tonTogglePlay,\n\t\t\tonToggleFullscreen,\n\t\t\tonToggleCaptions,\n\t\t\tonShowControls,\n\t\t],\n\t);\n\n\tconst containerProps = React.useMemo(\n\t\t() => ({\n\t\t\tonKeyDown: handleKeyDown,\n\t\t\ttabIndex: 0,\n\t\t\trole: \"application\" as const,\n\t\t\t\"aria-label\": \"Video player, press space to play or pause\",\n\t\t}),\n\t\t[handleKeyDown],\n\t);\n\n\treturn {\n\t\thandleKeyDown,\n\t\tcontainerProps,\n\t};\n}\n","\"use client\";\n\nimport {\n\tMediaControlBar,\n\tMediaController,\n\tMediaLoadingIndicator,\n\tMediaMuteButton,\n\tMediaPlayButton,\n\tMediaTimeDisplay,\n\tMediaTimeRange,\n\tMediaVolumeRange,\n} from \"media-chrome/react\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { useCaptions } from \"@/hooks/use-captions\";\nimport { useVideoKeyboard } from \"@/hooks/use-video-keyboard\";\nimport { cn } from \"@/lib/utils\";\nimport { CaptionOverlay } from \"./caption-overlay\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Cloudflare Stream configuration */\ninterface CloudflareConfig {\n\t/** Cloudflare Stream video ID */\n\tvideoId: string;\n\t/** Cloudflare customer code/subdomain */\n\tcustomerCode: string;\n}\n\n// ============================================================================\n// Variant Definitions\n// ============================================================================\n\n/**\n * Video player container variants.\n */\nconst videoPlayerVariants = tv({\n\tbase: [\n\t\t\"relative\",\n\t\t\"bg-black\",\n\t\t\"overflow-hidden\",\n\t\t// Focus styling for keyboard navigation\n\t\t\"focus:outline-none\",\n\t\t\"focus-visible:ring-2\",\n\t\t\"focus-visible:ring-white/50\",\n\t],\n\tvariants: {\n\t\taspectRatio: {\n\t\t\t\"16/9\": \"aspect-video\",\n\t\t\t\"4/3\": \"aspect-[4/3]\",\n\t\t\t\"1/1\": \"aspect-square\",\n\t\t\t\"9/16\": \"aspect-[9/16]\",\n\t\t\tauto: \"\",\n\t\t},\n\t\trounded: {\n\t\t\tnone: \"\",\n\t\t\tsm: \"rounded-4\",\n\t\t\tmd: \"rounded-8\",\n\t\t\tlg: \"rounded-12\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\taspectRatio: \"16/9\",\n\t\trounded: \"none\",\n\t},\n});\n\n/**\n * Media controller container styles.\n * Uses CSS custom properties to configure media-chrome components.\n * Styled to match DGA video player design with ghost-style buttons.\n */\nconst mediaControllerVariants = tv({\n\tbase: [\n\t\t\"absolute inset-0\",\n\t\t\"w-full h-full\",\n\t\t// Button styling - transparent base, hover shows background\n\t\t\"[--media-control-background:transparent]\",\n\t\t\"[--media-control-hover-background:var(--color-video-player-button-bg-hover)]\",\n\t\t\"[--media-control-padding:8px]\",\n\t\t\"[--media-control-height:36px]\",\n\t\t\"[--media-button-icon-width:20px]\",\n\t\t\"[--media-button-icon-height:20px]\",\n\t\t// Progress bar / range styling\n\t\t\"[--media-range-track-background:var(--color-video-player-progress-bg)]\",\n\t\t\"[--media-range-bar-color:var(--color-video-player-progress-fill)]\",\n\t\t\"[--media-range-track-height:4px]\",\n\t\t\"[--media-range-track-border-radius:2px]\",\n\t\t\"[--media-range-thumb-background:var(--color-video-player-progress-fill)]\",\n\t\t\"[--media-range-thumb-height:12px]\",\n\t\t\"[--media-range-thumb-width:12px]\",\n\t\t\"[--media-range-thumb-border-radius:50%]\",\n\t\t// Text/icon colors\n\t\t\"[--media-icon-color:var(--color-video-player-controls-text)]\",\n\t\t\"[--media-primary-color:var(--color-video-player-controls-text)]\",\n\t\t\"[--media-secondary-color:transparent]\",\n\t\t\"[--media-text-color:var(--color-video-player-controls-text)]\",\n\t\t\"[--media-font-size:14px]\",\n\t\t// Time display styling\n\t\t\"[--media-time-display-background:transparent]\",\n\t],\n});\n\n/**\n * Media-chrome control button styles.\n * Applied to media-play-button, media-mute-button, etc.\n * Transparent by default, shows background on hover (ghost style).\n */\nconst mediaButtonStyles: React.CSSProperties = {\n\tpadding: \"8px\",\n\tborderRadius: \"50%\",\n\t// Tooltip styling - consistent across all buttons\n\t\"--media-tooltip-background\": \"var(--color-video-player-tooltip-bg)\",\n\t\"--media-tooltip-arrow-display\": \"none\",\n\t\"--media-tooltip-distance\": \"8px\",\n} as React.CSSProperties;\n\n/**\n * Time range styles matching DGA.\n */\nconst timeRangeStyles: React.CSSProperties = {\n\tflex: 1,\n\tbackground: \"transparent\",\n\t// Preview tooltip styling - consistent with button tooltips\n\t\"--media-box-arrow-display\": \"none\",\n\t\"--media-preview-box-margin\": \"0 0 8px 0\",\n\t\"--media-preview-time-margin\": \"0 0 8px 0\",\n\t\"--media-preview-time-background\": \"var(--color-video-player-tooltip-bg)\",\n} as React.CSSProperties;\n\n/**\n * Volume range styles.\n */\nconst volumeRangeStyles: React.CSSProperties = {\n\twidth: \"80px\",\n\tbackground: \"transparent\",\n\t// Tooltip styling - consistent with button tooltips\n\t\"--media-tooltip-background\": \"var(--color-video-player-tooltip-bg)\",\n\t\"--media-tooltip-arrow-display\": \"none\",\n\t\"--media-tooltip-distance\": \"8px\",\n} as React.CSSProperties;\n\n/**\n * Time display styles.\n */\nconst timeDisplayStyles: React.CSSProperties = {\n\tbackground: \"transparent\",\n\tfontFamily: \"monospace\",\n\tfontSize: \"14px\",\n\tcolor: \"white\",\n\twhiteSpace: \"nowrap\",\n};\n\n/**\n * Control bar variants.\n * Note: Positioning is handled via inline styles to override web component defaults.\n * Tailwind classes handle background color and visibility transitions.\n */\nconst controlBarVariants = tv({\n\tbase: [\n\t\t// Layout handled in inline styles, but we need flex\n\t\t\"flex items-center\",\n\t\t// Background using semantic token\n\t\t\"bg-video-player-controls-bg\",\n\t\t// Animation\n\t\t\"transition-all duration-300\",\n\t],\n\tvariants: {\n\t\tvisible: {\n\t\t\ttrue: \"opacity-100 translate-y-0\",\n\t\t\tfalse: \"opacity-0 translate-y-16 pointer-events-none\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvisible: true,\n\t},\n});\n\n/**\n * Control button styles for custom buttons.\n * Transparent by default, shows background on hover (ghost style).\n */\nconst controlButtonVariants = tv({\n\tbase: [\n\t\t\"flex items-center justify-center\",\n\t\t\"p-8 rounded-full\",\n\t\t// Transparent by default, background on hover\n\t\t\"bg-transparent\",\n\t\t\"text-video-player-controls-text\",\n\t\t\"hover:bg-video-player-button-bg-hover\",\n\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-video-player-progress-bg\",\n\t\t\"transition-colors duration-150\",\n\t\t\"cursor-pointer\",\n\t],\n});\n\n/**\n * Loading overlay variants.\n */\nconst loadingOverlayVariants = tv({\n\tbase: [\n\t\t\"absolute inset-0\",\n\t\t\"flex items-center justify-center\",\n\t\t\"bg-black/50\",\n\t\t\"pointer-events-none\",\n\t\t\"z-10\",\n\t],\n});\n\n// ============================================================================\n// HLS Hook (internal)\n// ============================================================================\n\n/**\n * Internal hook for HLS.js initialization.\n * Handles both native HLS (Safari) and HLS.js (Chrome/Firefox).\n */\nfunction useHlsInternal(\n\tvideoRef: React.RefObject<HTMLVideoElement | null>,\n\tsrc: string | undefined,\n\tenabled: boolean,\n) {\n\tconst [isLoading, setIsLoading] = React.useState(true);\n\tconst [error, setError] = React.useState<Error | null>(null);\n\tconst hlsRef = React.useRef<unknown>(null);\n\n\tReact.useEffect(() => {\n\t\tif (!enabled || !src || !videoRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst video = videoRef.current;\n\t\tconst isHlsSource = src.includes(\".m3u8\");\n\n\t\t// For non-HLS sources, just set the src directly\n\t\tif (!isHlsSource) {\n\t\t\tvideo.src = src;\n\t\t\tsetIsLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if native HLS is supported (Safari)\n\t\tif (video.canPlayType(\"application/vnd.apple.mpegurl\")) {\n\t\t\tvideo.src = src;\n\t\t\tsetIsLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\t// Try to use HLS.js for other browsers\n\t\tconst loadHls = async () => {\n\t\t\ttry {\n\t\t\t\t// Dynamic import of HLS.js (peer dependency)\n\t\t\t\tconst HlsModule = await import(\"hls.js\");\n\t\t\t\tconst Hls = HlsModule.default;\n\n\t\t\t\tif (!Hls.isSupported()) {\n\t\t\t\t\t// Fallback: try setting src directly\n\t\t\t\t\tvideo.src = src;\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst hls = new Hls({\n\t\t\t\t\tenableWorker: true,\n\t\t\t\t\tlowLatencyMode: false,\n\t\t\t\t});\n\n\t\t\t\thls.loadSource(src);\n\t\t\t\thls.attachMedia(video);\n\n\t\t\t\thls.on(Hls.Events.MANIFEST_PARSED, () => {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t});\n\n\t\t\t\thls.on(\n\t\t\t\t\tHls.Events.ERROR,\n\t\t\t\t\t(_event: unknown, data: { fatal?: boolean; details?: string }) => {\n\t\t\t\t\t\tif (data.fatal) {\n\t\t\t\t\t\t\tsetError(new Error(`HLS error: ${data.details}`));\n\t\t\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\thlsRef.current = hls;\n\t\t\t} catch {\n\t\t\t\t// HLS.js not available, try direct source\n\t\t\t\tvideo.src = src;\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t};\n\n\t\tloadHls();\n\n\t\treturn () => {\n\t\t\tif (hlsRef.current) {\n\t\t\t\t(hlsRef.current as { destroy: () => void }).destroy();\n\t\t\t\thlsRef.current = null;\n\t\t\t}\n\t\t};\n\t}, [enabled, src, videoRef]);\n\n\treturn { isLoading, error };\n}\n\n// ============================================================================\n// VideoPlayer Component\n// ============================================================================\n\nexport interface VideoPlayerProps\n\textends Omit<\n\t\t\tReact.HTMLAttributes<HTMLDivElement>,\n\t\t\t\"children\" | \"onError\" | \"onPlay\" | \"onPause\" | \"onEnded\" | \"onTimeUpdate\"\n\t\t>,\n\t\tVariantProps<typeof videoPlayerVariants> {\n\t/** Video source URL (HLS .m3u8 or regular video file) */\n\tsrc?: string;\n\t/** Cloudflare Stream configuration (takes precedence over src) */\n\tcloudflare?: CloudflareConfig;\n\t/** Poster image URL */\n\tposter?: string;\n\t/** VTT captions URL */\n\tcaptionsSrc?: string;\n\t/** Whether to autoplay (default: false) */\n\tautoPlay?: boolean;\n\t/** Whether to loop the video (default: false) */\n\tloop?: boolean;\n\t/** Whether to mute initially (default: false) */\n\tmuted?: boolean;\n\t/** Whether to show controls (default: true) */\n\tcontrols?: boolean;\n\t/** Whether to auto-hide controls when not interacting (default: true) */\n\tautoHideControls?: boolean;\n\t/** Control auto-hide delay in ms (default: 3000) */\n\tautoHideDelay?: number;\n\t/** Whether captions are enabled by default (default: false) */\n\tcaptionsEnabled?: boolean;\n\t/** Callback when video starts playing */\n\tonPlay?: () => void;\n\t/** Callback when video pauses */\n\tonPause?: () => void;\n\t/** Callback when video ends */\n\tonEnded?: () => void;\n\t/** Callback on time update */\n\tonTimeUpdate?: (time: number) => void;\n\t/** Callback on error */\n\tonError?: (error: Error) => void;\n\t/** Ref to the video element */\n\tvideoRef?: React.RefObject<HTMLVideoElement | null>;\n}\n\n/**\n * VideoPlayer - Standalone video player component with media-chrome controls.\n *\n * Supports Cloudflare Stream (recommended) or direct video URLs with HLS support.\n * Works standalone or can be composed with Modal for fullscreen playback.\n *\n * @example\n * ```tsx\n * // With Cloudflare Stream (recommended)\n * <VideoPlayer\n * cloudflare={{ videoId: \"abc123\", customerCode: \"xyz789\" }}\n * poster=\"/thumbnail.jpg\"\n * captionsSrc=\"/captions.vtt\"\n * />\n *\n * // With direct URL\n * <VideoPlayer\n * src=\"https://example.com/video.mp4\"\n * poster=\"/thumbnail.jpg\"\n * />\n *\n * // With Modal for fullscreen\n * <Modal trigger={<Button>Watch Video</Button>}>\n * <VideoPlayer cloudflare={{ videoId: \"...\", customerCode: \"...\" }} />\n * </Modal>\n * ```\n */\nconst VideoPlayer = React.forwardRef<HTMLDivElement, VideoPlayerProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tsrc,\n\t\t\tcloudflare,\n\t\t\tposter,\n\t\t\tcaptionsSrc,\n\t\t\tautoPlay = false,\n\t\t\tloop = false,\n\t\t\tmuted = false,\n\t\t\tcontrols = true,\n\t\t\tautoHideControls = true,\n\t\t\tautoHideDelay = 3000,\n\t\t\tcaptionsEnabled: initialCaptionsEnabled = false,\n\t\t\taspectRatio,\n\t\t\trounded,\n\t\t\tonPlay,\n\t\t\tonPause,\n\t\t\tonEnded,\n\t\t\tonTimeUpdate,\n\t\t\tonError,\n\t\t\tvideoRef: externalVideoRef,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Internal refs\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\t\tconst internalVideoRef = React.useRef<HTMLVideoElement | null>(null);\n\t\tconst controlsTimeoutRef = React.useRef<ReturnType<\n\t\t\ttypeof setTimeout\n\t\t> | null>(null);\n\n\t\t// State\n\t\tconst [isPlaying, setIsPlaying] = React.useState(false);\n\t\tconst [currentTime, setCurrentTime] = React.useState(0);\n\t\tconst [controlsVisible, setControlsVisible] = React.useState(true);\n\t\tconst [captionsEnabled, setCaptionsEnabled] = React.useState(\n\t\t\tinitialCaptionsEnabled,\n\t\t);\n\t\tconst [isFullscreen, setIsFullscreen] = React.useState(false);\n\n\t\t// Compute video source URL\n\t\tconst videoSrc = React.useMemo(() => {\n\t\t\tif (cloudflare) {\n\t\t\t\treturn `https://customer-${cloudflare.customerCode}.cloudflarestream.com/${cloudflare.videoId}/manifest/video.m3u8`;\n\t\t\t}\n\t\t\treturn src;\n\t\t}, [cloudflare, src]);\n\n\t\t// HLS support\n\t\tconst { isLoading, error: hlsError } = useHlsInternal(\n\t\t\tinternalVideoRef,\n\t\t\tvideoSrc,\n\t\t\ttrue,\n\t\t);\n\n\t\t// Caption parsing\n\t\tconst { activeCue } = useCaptions({\n\t\t\tsrc: captionsSrc,\n\t\t\tcurrentTime,\n\t\t});\n\n\t\t// Merge refs\n\t\tReact.useEffect(() => {\n\t\t\tif (externalVideoRef) {\n\t\t\t\t(\n\t\t\t\t\texternalVideoRef as React.MutableRefObject<HTMLVideoElement | null>\n\t\t\t\t).current = internalVideoRef.current;\n\t\t\t}\n\t\t}, [externalVideoRef]);\n\n\t\t// Merge container ref\n\t\tReact.useImperativeHandle(\n\t\t\tref,\n\t\t\t() => containerRef.current as HTMLDivElement,\n\t\t);\n\n\t\t// Report errors\n\t\tReact.useEffect(() => {\n\t\t\tif (hlsError && onError) {\n\t\t\t\tonError(hlsError);\n\t\t\t}\n\t\t}, [hlsError, onError]);\n\n\t\t// Video event handlers\n\t\tReact.useEffect(() => {\n\t\t\tconst video = internalVideoRef.current;\n\t\t\tif (!video) return;\n\n\t\t\tconst handlePlay = () => {\n\t\t\t\tsetIsPlaying(true);\n\t\t\t\tonPlay?.();\n\t\t\t};\n\n\t\t\tconst handlePause = () => {\n\t\t\t\tsetIsPlaying(false);\n\t\t\t\tonPause?.();\n\t\t\t};\n\n\t\t\tconst handleEnded = () => {\n\t\t\t\tsetIsPlaying(false);\n\t\t\t\tonEnded?.();\n\t\t\t};\n\n\t\t\tconst handleTimeUpdate = () => {\n\t\t\t\tsetCurrentTime(video.currentTime);\n\t\t\t\tonTimeUpdate?.(video.currentTime);\n\t\t\t};\n\n\t\t\tconst handleCanPlay = () => {\n\t\t\t\tif (autoPlay) {\n\t\t\t\t\tvideo.play().catch(() => {\n\t\t\t\t\t\t// Autoplay may be blocked\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvideo.addEventListener(\"play\", handlePlay);\n\t\t\tvideo.addEventListener(\"pause\", handlePause);\n\t\t\tvideo.addEventListener(\"ended\", handleEnded);\n\t\t\tvideo.addEventListener(\"timeupdate\", handleTimeUpdate);\n\t\t\tvideo.addEventListener(\"canplay\", handleCanPlay);\n\n\t\t\treturn () => {\n\t\t\t\tvideo.removeEventListener(\"play\", handlePlay);\n\t\t\t\tvideo.removeEventListener(\"pause\", handlePause);\n\t\t\t\tvideo.removeEventListener(\"ended\", handleEnded);\n\t\t\t\tvideo.removeEventListener(\"timeupdate\", handleTimeUpdate);\n\t\t\t\tvideo.removeEventListener(\"canplay\", handleCanPlay);\n\t\t\t};\n\t\t}, [autoPlay, onPlay, onPause, onEnded, onTimeUpdate]);\n\n\t\t// Auto-hide controls\n\t\tReact.useEffect(() => {\n\t\t\tif (!autoHideControls || !isPlaying || !controlsVisible) return;\n\n\t\t\tcontrolsTimeoutRef.current = setTimeout(() => {\n\t\t\t\tsetControlsVisible(false);\n\t\t\t}, autoHideDelay);\n\n\t\t\treturn () => {\n\t\t\t\tif (controlsTimeoutRef.current) {\n\t\t\t\t\tclearTimeout(controlsTimeoutRef.current);\n\t\t\t\t}\n\t\t\t};\n\t\t}, [autoHideControls, isPlaying, controlsVisible, autoHideDelay]);\n\n\t\t// Track fullscreen state\n\t\tReact.useEffect(() => {\n\t\t\tconst handleFullscreenChange = () => {\n\t\t\t\tsetIsFullscreen(!!document.fullscreenElement);\n\t\t\t};\n\n\t\t\tdocument.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n\t\t\tdocument.addEventListener(\n\t\t\t\t\"webkitfullscreenchange\",\n\t\t\t\thandleFullscreenChange,\n\t\t\t);\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener(\n\t\t\t\t\t\"fullscreenchange\",\n\t\t\t\t\thandleFullscreenChange,\n\t\t\t\t);\n\t\t\t\tdocument.removeEventListener(\n\t\t\t\t\t\"webkitfullscreenchange\",\n\t\t\t\t\thandleFullscreenChange,\n\t\t\t\t);\n\t\t\t};\n\t\t}, []);\n\n\t\t// Actions\n\t\tconst togglePlay = React.useCallback(() => {\n\t\t\tconst video = internalVideoRef.current;\n\t\t\tif (!video) return;\n\n\t\t\tif (video.paused) {\n\t\t\t\tvideo.play().catch(() => {});\n\t\t\t} else {\n\t\t\t\tvideo.pause();\n\t\t\t}\n\t\t}, []);\n\n\t\tconst toggleCaptions = React.useCallback(() => {\n\t\t\tsetCaptionsEnabled((prev) => !prev);\n\t\t}, []);\n\n\t\tconst toggleFullscreen = React.useCallback(() => {\n\t\t\tif (!document.fullscreenElement) {\n\t\t\t\tcontainerRef.current?.requestFullscreen();\n\t\t\t} else {\n\t\t\t\tdocument.exitFullscreen();\n\t\t\t}\n\t\t}, []);\n\n\t\tconst showControls = React.useCallback(() => {\n\t\t\tsetControlsVisible(true);\n\t\t\tif (controlsTimeoutRef.current) {\n\t\t\t\tclearTimeout(controlsTimeoutRef.current);\n\t\t\t}\n\t\t}, []);\n\n\t\tconst handleMouseLeave = React.useCallback(() => {\n\t\t\tif (autoHideControls && isPlaying) {\n\t\t\t\tsetControlsVisible(false);\n\t\t\t}\n\t\t}, [autoHideControls, isPlaying]);\n\n\t\t// Keyboard shortcuts for video player\n\t\tconst { containerProps: keyboardProps } = useVideoKeyboard({\n\t\t\tvideoRef: internalVideoRef,\n\t\t\tonTogglePlay: togglePlay,\n\t\t\tonToggleFullscreen: toggleFullscreen,\n\t\t\tonToggleCaptions: captionsSrc ? toggleCaptions : undefined,\n\t\t\tonShowControls: showControls,\n\t\t});\n\n\t\treturn (\n\t\t\t// biome-ignore lint/a11y/noStaticElementInteractions: role is applied via keyboardProps spread\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName={cn(videoPlayerVariants({ aspectRatio, rounded }), className)}\n\t\t\t\tonMouseMove={showControls}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\t{...keyboardProps}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{controls ? (\n\t\t\t\t\t<MediaController\n\t\t\t\t\t\tnoAutohide={true}\n\t\t\t\t\t\tclassName={mediaControllerVariants()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Video Element */}\n\t\t\t\t\t\t<video\n\t\t\t\t\t\t\tref={internalVideoRef}\n\t\t\t\t\t\t\tslot=\"media\"\n\t\t\t\t\t\t\tposter={poster}\n\t\t\t\t\t\t\tloop={loop}\n\t\t\t\t\t\t\tmuted={muted}\n\t\t\t\t\t\t\tplaysInline\n\t\t\t\t\t\t\tcrossOrigin=\"anonymous\"\n\t\t\t\t\t\t\tclassName=\"w-full h-full object-contain\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Loading Indicator */}\n\t\t\t\t\t\t<MediaLoadingIndicator slot=\"centered-chrome\" noAutohide />\n\n\t\t\t\t\t\t{/* Click to play/pause overlay */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tonClick={togglePlay}\n\t\t\t\t\t\t\tclassName=\"absolute inset-0 cursor-pointer z-[1]\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Control Bar */}\n\t\t\t\t\t\t<MediaControlBar\n\t\t\t\t\t\t\tclassName={controlBarVariants({ visible: controlsVisible })}\n\t\t\t\t\t\t\tonClick={(e: React.MouseEvent) => e.stopPropagation()}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tleft: \"24px\",\n\t\t\t\t\t\t\t\tright: \"24px\",\n\t\t\t\t\t\t\t\tbottom: \"24px\",\n\t\t\t\t\t\t\t\tgap: \"12px\",\n\t\t\t\t\t\t\t\tpadding: \"8px 16px\",\n\t\t\t\t\t\t\t\tborderRadius: \"9999px\",\n\t\t\t\t\t\t\t\tbackdropFilter: \"blur(10px)\",\n\t\t\t\t\t\t\t\tWebkitBackdropFilter: \"blur(10px)\",\n\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MediaPlayButton style={mediaButtonStyles} />\n\t\t\t\t\t\t\t<MediaMuteButton style={mediaButtonStyles} />\n\t\t\t\t\t\t\t<MediaVolumeRange style={volumeRangeStyles} />\n\t\t\t\t\t\t\t<MediaTimeDisplay\n\t\t\t\t\t\t\t\tstyle={timeDisplayStyles}\n\t\t\t\t\t\t\t\tshowDuration\n\t\t\t\t\t\t\t\tnoToggle\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<MediaTimeRange style={timeRangeStyles} />\n\n\t\t\t\t\t\t\t{/* Captions Button */}\n\t\t\t\t\t\t\t{captionsSrc && (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName={controlButtonVariants()}\n\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\ttoggleCaptions();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\tcaptionsEnabled ? \"Disable captions\" : \"Enable captions\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\taria-pressed={captionsEnabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CaptionsIcon enabled={captionsEnabled} />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Fullscreen Button */}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tclassName={controlButtonVariants()}\n\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\ttoggleFullscreen();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\tisFullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FullscreenIcon isFullscreen={isFullscreen} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</MediaControlBar>\n\t\t\t\t\t</MediaController>\n\t\t\t\t) : (\n\t\t\t\t\t/* Video without controls */\n\t\t\t\t\t<video\n\t\t\t\t\t\tref={internalVideoRef}\n\t\t\t\t\t\tposter={poster}\n\t\t\t\t\t\tloop={loop}\n\t\t\t\t\t\tmuted={muted}\n\t\t\t\t\t\tplaysInline\n\t\t\t\t\t\tcrossOrigin=\"anonymous\"\n\t\t\t\t\t\tclassName=\"w-full h-full object-contain\"\n\t\t\t\t\t\tonClick={togglePlay}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Loading Overlay (when HLS is loading) */}\n\t\t\t\t{isLoading && (\n\t\t\t\t\t<div className={loadingOverlayVariants()}>\n\t\t\t\t\t\t<div className=\"w-40 h-40 border-3 border-white/30 border-t-white rounded-full animate-spin\" />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Error Display */}\n\t\t\t\t{hlsError && (\n\t\t\t\t\t<div className={loadingOverlayVariants()}>\n\t\t\t\t\t\t<div className=\"text-white text-center px-16\">\n\t\t\t\t\t\t\t<p className=\"typography-body-sm-sm\">Failed to load video</p>\n\t\t\t\t\t\t\t<p className=\"typography-caption text-white/60 mt-4\">\n\t\t\t\t\t\t\t\t{hlsError.message}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Caption Overlay */}\n\t\t\t\t{captionsEnabled && activeCue && <CaptionOverlay cue={activeCue} />}\n\t\t\t</div>\n\t\t);\n\t},\n);\nVideoPlayer.displayName = \"VideoPlayer\";\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nconst CaptionsIcon = ({ enabled }: { enabled: boolean }) => (\n\t<svg\n\t\tclassName=\"w-20 h-20\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"currentColor\"\n\t\taria-hidden=\"true\"\n\t>\n\t\t{enabled ? (\n\t\t\t// Captions On\n\t\t\t<path d=\"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z\" />\n\t\t) : (\n\t\t\t// Captions Off (with strike-through)\n\t\t\t<>\n\t\t\t\t<path d=\"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z\" />\n\t\t\t\t<line\n\t\t\t\t\tx1=\"4\"\n\t\t\t\t\ty1=\"20\"\n\t\t\t\t\tx2=\"20\"\n\t\t\t\t\ty2=\"4\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t/>\n\t\t\t</>\n\t\t)}\n\t</svg>\n);\n\nconst FullscreenIcon = ({ isFullscreen }: { isFullscreen: boolean }) => (\n\t<svg\n\t\tclassName=\"w-20 h-20\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"2\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t>\n\t\t{isFullscreen ? (\n\t\t\t// Minimize (exit fullscreen)\n\t\t\t<>\n\t\t\t\t<polyline points=\"4 14 10 14 10 20\" />\n\t\t\t\t<polyline points=\"20 10 14 10 14 4\" />\n\t\t\t\t<line x1=\"14\" y1=\"10\" x2=\"21\" y2=\"3\" />\n\t\t\t\t<line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\" />\n\t\t\t</>\n\t\t) : (\n\t\t\t// Maximize (enter fullscreen)\n\t\t\t<>\n\t\t\t\t<polyline points=\"15 3 21 3 21 9\" />\n\t\t\t\t<polyline points=\"9 21 3 21 3 15\" />\n\t\t\t\t<line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\" />\n\t\t\t\t<line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\" />\n\t\t\t</>\n\t\t)}\n\t</svg>\n);\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n\tVideoPlayer,\n\tvideoPlayerVariants,\n\tmediaControllerVariants,\n\tcontrolBarVariants,\n\tcontrolButtonVariants,\n\tloadingOverlayVariants,\n};\n","export interface GridOverlayProps {\n\tcolumnOpacity?: number;\n\tborderOpacity?: number;\n\tvisible?: boolean;\n}\n\nexport function GridOverlay({\n\tcolumnOpacity = 0.15,\n\tborderOpacity = 0.3,\n\tvisible = true,\n}: GridOverlayProps) {\n\tconst columns = Array.from({ length: 24 }, (_, i) => i);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`\n\t\t\t\tfixed inset-0 z-[9998] pointer-events-none overflow-hidden\n\t\t\t\ttransition-opacity duration-300 ease-out\n\t\t\t\t${visible ? \"opacity-100\" : \"opacity-0\"}\n\t\t\t`}\n\t\t\taria-hidden=\"true\"\n\t\t\tdata-testid=\"grid-overlay\"\n\t\t>\n\t\t\t<div className=\"h-full w-full max-w-[90rem] mx-auto px-[var(--spatial-grid-small-margin)] md:px-[var(--spatial-grid-medium-margin)] lg:px-[var(--spatial-grid-large-margin)]\">\n\t\t\t\t<div className=\"h-full grid grid-cols-4 md:grid-cols-12 lg:grid-cols-24 gap-[var(--spatial-grid-small-gutter)] md:gap-[var(--spatial-grid-medium-gutter)] lg:gap-[var(--spatial-grid-large-gutter)]\">\n\t\t\t\t\t{columns.map((index) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tclassName=\"h-full border border-red-500\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackgroundColor: `rgb(239 68 68 / ${columnOpacity})`,\n\t\t\t\t\t\t\t\tborderColor: `rgb(239 68 68 / ${borderOpacity})`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdata-column={index + 1}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { GridOverlay } from \"../grid-overlay\";\n\nfunction GridIcon({ active }: { active?: boolean }) {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"20\"\n\t\t\theight=\"20\"\n\t\t\tviewBox=\"0 0 20 20\"\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={active ? \"2\" : \"1.5\"}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<rect x=\"2\" y=\"2\" width=\"16\" height=\"16\" rx=\"2\" />\n\t\t\t<line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"18\" />\n\t\t\t<line x1=\"13\" y1=\"2\" x2=\"13\" y2=\"18\" />\n\t\t</svg>\n\t);\n}\n\nexport interface DevToolbarProps {\n\tdefaultExpanded?: boolean;\n}\n\nconst DRAG_THRESHOLD = 3;\n\nexport function DevToolbar({ defaultExpanded = false }: DevToolbarProps) {\n\tconst [isExpanded, setIsExpanded] = useState(defaultExpanded);\n\tconst [showGrid, setShowGrid] = useState(false);\n\tconst [position, setPosition] = useState({ x: 0, y: 0 });\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst hasDraggedRef = useRef(false);\n\tconst dragRef = useRef<{\n\t\tstartX: number;\n\t\tstartY: number;\n\t\tstartPosX: number;\n\t\tstartPosY: number;\n\t} | null>(null);\n\tconst toolbarRef = useRef<HTMLDivElement>(null);\n\n\tconst toggleGrid = useCallback(() => setShowGrid((prev) => !prev), []);\n\tconst toggleExpanded = useCallback(() => setIsExpanded((prev) => !prev), []);\n\n\tuseEffect(() => {\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif ((e.ctrlKey || e.metaKey) && e.key === \"g\") {\n\t\t\t\te.preventDefault();\n\t\t\t\ttoggleGrid();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"keydown\", handleKeyDown);\n\t\treturn () => window.removeEventListener(\"keydown\", handleKeyDown);\n\t}, [toggleGrid]);\n\n\tconst handleDragStart = useCallback(\n\t\t(clientX: number, clientY: number) => {\n\t\t\tsetIsDragging(true);\n\t\t\thasDraggedRef.current = false;\n\t\t\tdragRef.current = {\n\t\t\t\tstartX: clientX,\n\t\t\t\tstartY: clientY,\n\t\t\t\tstartPosX: position.x,\n\t\t\t\tstartPosY: position.y,\n\t\t\t};\n\t\t},\n\t\t[position],\n\t);\n\n\tconst handleDragMove = useCallback(\n\t\t(clientX: number, clientY: number) => {\n\t\t\tif (!isDragging || !dragRef.current) return;\n\n\t\t\tconst deltaX = clientX - dragRef.current.startX;\n\t\t\tconst deltaY = clientY - dragRef.current.startY;\n\n\t\t\tif (\n\t\t\t\tMath.abs(deltaX) > DRAG_THRESHOLD ||\n\t\t\t\tMath.abs(deltaY) > DRAG_THRESHOLD\n\t\t\t) {\n\t\t\t\thasDraggedRef.current = true;\n\t\t\t}\n\n\t\t\tsetPosition({\n\t\t\t\tx: dragRef.current.startPosX + deltaX,\n\t\t\t\ty: dragRef.current.startPosY - deltaY,\n\t\t\t});\n\t\t},\n\t\t[isDragging],\n\t);\n\n\tconst handleDragEnd = useCallback(() => {\n\t\tsetIsDragging(false);\n\t\tdragRef.current = null;\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!isDragging) return;\n\n\t\tconst handleMouseMove = (e: MouseEvent) =>\n\t\t\thandleDragMove(e.clientX, e.clientY);\n\t\tconst handleTouchMove = (e: TouchEvent) => {\n\t\t\tif (e.touches[0])\n\t\t\t\thandleDragMove(e.touches[0].clientX, e.touches[0].clientY);\n\t\t};\n\t\tconst handleEnd = () => handleDragEnd();\n\n\t\twindow.addEventListener(\"mousemove\", handleMouseMove);\n\t\twindow.addEventListener(\"mouseup\", handleEnd);\n\t\twindow.addEventListener(\"touchmove\", handleTouchMove);\n\t\twindow.addEventListener(\"touchend\", handleEnd);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"mousemove\", handleMouseMove);\n\t\t\twindow.removeEventListener(\"mouseup\", handleEnd);\n\t\t\twindow.removeEventListener(\"touchmove\", handleTouchMove);\n\t\t\twindow.removeEventListener(\"touchend\", handleEnd);\n\t\t};\n\t}, [isDragging, handleDragMove, handleDragEnd]);\n\n\tconst handleBarMouseDown = (e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\thandleDragStart(e.clientX, e.clientY);\n\t};\n\n\tconst handleBarTouchStart = (e: React.TouchEvent) => {\n\t\tif (e.touches[0]) {\n\t\t\thandleDragStart(e.touches[0].clientX, e.touches[0].clientY);\n\t\t}\n\t};\n\n\tconst handleBarClick = () => {\n\t\tif (!hasDraggedRef.current) {\n\t\t\ttoggleExpanded();\n\t\t}\n\t\thasDraggedRef.current = false;\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{showGrid && <GridOverlay />}\n\n\t\t\t<div\n\t\t\t\tref={toolbarRef}\n\t\t\t\tclassName=\"fixed bottom-4 left-1/2 z-[9999]\"\n\t\t\t\tstyle={{\n\t\t\t\t\ttransform: `translate(calc(-50% + ${position.x}px), ${-position.y}px)`,\n\t\t\t\t}}\n\t\t\t\tdata-testid=\"dev-toolbar\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={`bg-gray-1100 rounded-radius-16 shadow-lg flex flex-col items-center overflow-hidden px-12 py-8 ${isExpanded ? \"gap-4\" : \"\"}`}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`\n\t\t\t\t\t\t\tgrid transition-all duration-300 ease-out\n\t\t\t\t\t\t\t${isExpanded ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\"}\n\t\t\t\t\t\t`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"overflow-hidden\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={toggleGrid}\n\t\t\t\t\t\t\t\tclassName={`\n\t\t\t\t\t\t\t\t\tsize-40 rounded-full flex items-center justify-center transition-colors\n\t\t\t\t\t\t\t\t\t${\n\t\t\t\t\t\t\t\t\t\tshowGrid\n\t\t\t\t\t\t\t\t\t\t\t? \"text-gray-50\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-gray-400 hover:text-gray-50 hover:bg-alpha-white-10\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t`}\n\t\t\t\t\t\t\t\ttitle=\"Toggle Grid (⌘G)\"\n\t\t\t\t\t\t\t\taria-label=\"Toggle grid overlay\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GridIcon active={showGrid} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonMouseDown={handleBarMouseDown}\n\t\t\t\t\t\tonTouchStart={handleBarTouchStart}\n\t\t\t\t\t\tonClick={handleBarClick}\n\t\t\t\t\t\tclassName={`\n\t\t\t\t\t\t\tw-32 h-4 bg-gray-50 rounded-full transition-opacity\n\t\t\t\t\t\t\t${isDragging ? \"opacity-100 cursor-grabbing\" : \"opacity-60 hover:opacity-100 cursor-grab\"}\n\t\t\t\t\t\t`}\n\t\t\t\t\t\taria-label={isExpanded ? \"Close dev tools\" : \"Open dev tools\"}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui-components/react/dialog\";\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Dialog backdrop variants\n *\n * Semi-transparent overlay behind the dialog content.\n */\nconst dialogBackdropVariants = tv({\n\tbase: [\n\t\t// Fixed positioning to cover viewport\n\t\t\"fixed inset-0\",\n\t\t// Semi-transparent black background using alpha token\n\t\t\"bg-alpha-black-50\",\n\t\t// Smooth opacity transition\n\t\t\"transition-opacity duration-200\",\n\t\t// Animation states\n\t\t\"data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:opacity-0\",\n\t\t// Ensure backdrop covers full viewport on iOS\n\t\t\"min-h-dvh\",\n\t],\n});\n\n/**\n * Dialog popup variants\n *\n * Uses semantic overlay tokens for themeable styling:\n * - color.overlay.background - Light background\n * - color.overlay.border - Subtle border\n * - color.overlay.text - Primary text\n * - surface.overlay.radius - Rounded corners\n */\nconst dialogPopupVariants = tv({\n\tbase: [\n\t\t// Fixed positioning, centered\n\t\t\"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n\t\t// Layout\n\t\t\"flex flex-col\",\n\t\t// Max dimensions with viewport margin (24px on each side = 48px total)\n\t\t\"max-h-[calc(100vh-48px)] max-w-[calc(100vw-48px)]\",\n\t\t// Ensure above backdrop\n\t\t\"z-50\",\n\t\t// Animation\n\t\t\"transition-all duration-200\",\n\t\t\"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n\t\t// Focus outline\n\t\t\"outline-none\",\n\t],\n\tvariants: {\n\t\tsize: {\n\t\t\tsm: \"w-full sm:max-w-[400px]\",\n\t\t\tmd: \"w-full sm:max-w-[560px]\",\n\t\t\tlg: \"w-full sm:max-w-[720px]\",\n\t\t\txl: \"w-full sm:max-w-[960px]\",\n\t\t\tfull: \"w-[calc(100vw-48px)] h-[calc(100vh-48px)]\",\n\t\t},\n\t\tvariant: {\n\t\t\tdefault: [\n\t\t\t\t// Background - uses overlay background token\n\t\t\t\t\"bg-overlay-background\",\n\t\t\t\t// Border - uses overlay border token\n\t\t\t\t\"border border-overlay-border\",\n\t\t\t\t// Text - uses overlay text token\n\t\t\t\t\"text-overlay-text\",\n\t\t\t\t// Border radius - uses surface overlay token\n\t\t\t\t\"rounded-surface-overlay\",\n\t\t\t\t// Shadow for elevation\n\t\t\t\t\"shadow-xl\",\n\t\t\t],\n\t\t\tminimal: [\n\t\t\t\t// Transparent background, no border/shadow\n\t\t\t\t\"bg-black\",\n\t\t\t\t\"border-0\",\n\t\t\t\t\"text-white\",\n\t\t\t\t\"rounded-8\",\n\t\t\t\t\"shadow-none\",\n\t\t\t\t\"overflow-hidden\",\n\t\t\t],\n\t\t},\n\t},\n\tcompoundVariants: [\n\t\t// Default variant padding by size\n\t\t{ variant: \"default\", size: \"sm\", class: \"p-24\" },\n\t\t{ variant: \"default\", size: \"md\", class: \"p-32\" },\n\t\t{ variant: \"default\", size: \"lg\", class: \"p-32\" },\n\t\t{ variant: \"default\", size: \"xl\", class: \"p-40\" },\n\t\t{ variant: \"default\", size: \"full\", class: \"p-40\" },\n\t\t// Minimal variant has no padding\n\t\t{ variant: \"minimal\", size: \"sm\", class: \"p-0\" },\n\t\t{ variant: \"minimal\", size: \"md\", class: \"p-0\" },\n\t\t{ variant: \"minimal\", size: \"lg\", class: \"p-0\" },\n\t\t{ variant: \"minimal\", size: \"xl\", class: \"p-0\" },\n\t\t{ variant: \"minimal\", size: \"full\", class: \"p-0\" },\n\t],\n\tdefaultVariants: {\n\t\tsize: \"md\",\n\t\tvariant: \"default\",\n\t},\n});\n\n// ============================================================================\n// Dialog Root\n// ============================================================================\n\nexport interface DialogRootProps extends BaseDialog.Root.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Dialog Root\n *\n * Groups all dialog parts and manages open/close state.\n * Provides focus trap, scroll lock, and escape key handling automatically.\n */\nconst DialogRoot = ({ children, ...props }: DialogRootProps) => {\n\treturn <BaseDialog.Root {...props}>{children}</BaseDialog.Root>;\n};\n\n// ============================================================================\n// Dialog Trigger\n// ============================================================================\n\nexport interface DialogTriggerProps\n\textends React.ComponentProps<typeof BaseDialog.Trigger> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Trigger\n *\n * The element that triggers the dialog to open on click.\n * When children is a single React element, uses `render` prop to avoid wrapper element.\n */\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n\t({ className, children, ...props }, ref) => {\n\t\t// If children is a single React element, use render prop to avoid wrapper\n\t\tconst isSingleElement = React.isValidElement(children);\n\n\t\tif (isSingleElement) {\n\t\t\treturn (\n\t\t\t\t<BaseDialog.Trigger\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\trender={children as React.ReactElement<Record<string, unknown>>}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<BaseDialog.Trigger ref={ref} className={className} {...props}>\n\t\t\t\t{children}\n\t\t\t</BaseDialog.Trigger>\n\t\t);\n\t},\n);\nDialogTrigger.displayName = \"DialogTrigger\";\n\n// ============================================================================\n// Dialog Portal\n// ============================================================================\n\nexport interface DialogPortalProps extends BaseDialog.Portal.Props {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Dialog Portal\n *\n * Renders the dialog in a portal outside the DOM hierarchy.\n * This ensures proper stacking context and avoids z-index issues.\n */\nconst DialogPortal = ({ children, ...props }: DialogPortalProps) => {\n\treturn <BaseDialog.Portal {...props}>{children}</BaseDialog.Portal>;\n};\n\n// ============================================================================\n// Dialog Backdrop\n// ============================================================================\n\nexport interface DialogBackdropProps\n\textends Omit<React.ComponentProps<typeof BaseDialog.Backdrop>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Backdrop\n *\n * Semi-transparent overlay that covers the page behind the dialog.\n * Clicking the backdrop closes the dialog by default.\n */\nconst DialogBackdrop = React.forwardRef<HTMLDivElement, DialogBackdropProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseDialog.Backdrop\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(dialogBackdropVariants(), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogBackdrop.displayName = \"DialogBackdrop\";\n\n// ============================================================================\n// Dialog Popup\n// ============================================================================\n\nexport interface DialogPopupProps\n\textends Omit<React.ComponentProps<typeof BaseDialog.Popup>, \"className\">,\n\t\tVariantProps<typeof dialogPopupVariants> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Popup\n *\n * The dialog content container. Centered on screen with configurable size.\n * Use `variant=\"minimal\"` for borderless dialogs (video modals, etc.)\n */\nconst DialogPopup = React.forwardRef<HTMLDivElement, DialogPopupProps>(\n\t({ className, size, variant, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseDialog.Popup\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(dialogPopupVariants({ size, variant }), className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogPopup.displayName = \"DialogPopup\";\n\n// ============================================================================\n// Dialog Title\n// ============================================================================\n\nexport interface DialogTitleProps\n\textends Omit<React.ComponentProps<typeof BaseDialog.Title>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Title\n *\n * Accessible title for the dialog. Should be used for screen reader support.\n */\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseDialog.Title\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\"typography-h4-md font-semibold mb-8\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogTitle.displayName = \"DialogTitle\";\n\n// ============================================================================\n// Dialog Description\n// ============================================================================\n\nexport interface DialogDescriptionProps\n\textends Omit<\n\t\tReact.ComponentProps<typeof BaseDialog.Description>,\n\t\t\"className\"\n\t> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Description\n *\n * Accessible description for the dialog content.\n */\nconst DialogDescription = React.forwardRef<\n\tHTMLParagraphElement,\n\tDialogDescriptionProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<BaseDialog.Description\n\t\t\tref={ref}\n\t\t\tclassName={cn(\"typography-body-md-md text-overlay-text-muted\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nDialogDescription.displayName = \"DialogDescription\";\n\n// ============================================================================\n// Dialog Close\n// ============================================================================\n\nexport interface DialogCloseProps\n\textends Omit<React.ComponentProps<typeof BaseDialog.Close>, \"className\"> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Close\n *\n * Close button for the dialog. Can be placed anywhere within the dialog.\n */\nconst DialogClose = React.forwardRef<HTMLButtonElement, DialogCloseProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<BaseDialog.Close\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute right-16 top-16 rounded-surface-ui-small p-8\",\n\t\t\t\t\t\"text-overlay-text-muted hover:text-overlay-text\",\n\t\t\t\t\t\"hover:bg-bg-section\",\n\t\t\t\t\t\"focus:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\",\n\t\t\t\t\t\"transition-colors duration-150\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogClose.displayName = \"DialogClose\";\n\n// ============================================================================\n// Dialog Body\n// ============================================================================\n\nexport interface DialogBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Body\n *\n * Container for the main dialog content. Handles overflow scrolling.\n */\nconst DialogBody = React.forwardRef<HTMLDivElement, DialogBodyProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\"flex-1 overflow-y-auto\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogBody.displayName = \"DialogBody\";\n\n// ============================================================================\n// Dialog Footer\n// ============================================================================\n\nexport interface DialogFooterProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\tclassName?: string;\n}\n\n/**\n * Dialog Footer\n *\n * Container for dialog actions (buttons, etc.). Typically placed at the bottom.\n */\nconst DialogFooter = React.forwardRef<HTMLDivElement, DialogFooterProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center justify-end gap-12 pt-24 mt-auto\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nDialogFooter.displayName = \"DialogFooter\";\n\n// ============================================================================\n// Simple Dialog Component\n// ============================================================================\n\nexport interface DialogProps {\n\t/** The content to show in the dialog */\n\tchildren: React.ReactNode;\n\t/** The element that triggers the dialog (optional for controlled mode) */\n\ttrigger?: React.ReactNode;\n\t/** Title for the dialog */\n\ttitle?: React.ReactNode;\n\t/** Description for the dialog */\n\tdescription?: React.ReactNode;\n\t/** Size of the dialog */\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\t/** Visual variant: \"default\" for card style, \"minimal\" for borderless (video modals) */\n\tvariant?: \"default\" | \"minimal\";\n\t/** Whether to show a close button */\n\tshowClose?: boolean;\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Default open state */\n\tdefaultOpen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Additional className for the popup */\n\tclassName?: string;\n}\n\n/**\n * Dialog\n *\n * A simple, pre-composed dialog component for common use cases.\n * For more complex needs, use the compound components directly.\n *\n * @example\n * ```tsx\n * // With trigger\n * <Dialog\n * trigger={<Button>Open Dialog</Button>}\n * title=\"Dialog Title\"\n * description=\"This is the dialog description.\"\n * >\n * <p>Dialog content goes here.</p>\n * </Dialog>\n *\n * // Controlled mode\n * <Dialog\n * open={isOpen}\n * onOpenChange={setIsOpen}\n * title=\"Controlled Dialog\"\n * >\n * <p>Content here</p>\n * </Dialog>\n * ```\n */\nconst Dialog = ({\n\tchildren,\n\ttrigger,\n\ttitle,\n\tdescription,\n\tsize = \"md\",\n\tvariant = \"default\",\n\tshowClose = true,\n\topen,\n\tdefaultOpen,\n\tonOpenChange,\n\tclassName,\n}: DialogProps) => {\n\treturn (\n\t\t<DialogRoot\n\t\t\topen={open}\n\t\t\tdefaultOpen={defaultOpen}\n\t\t\tonOpenChange={onOpenChange}\n\t\t>\n\t\t\t{trigger && <DialogTrigger>{trigger}</DialogTrigger>}\n\t\t\t<DialogPortal>\n\t\t\t\t<DialogBackdrop />\n\t\t\t\t<DialogPopup size={size} variant={variant} className={className}>\n\t\t\t\t\t{showClose && (\n\t\t\t\t\t\t<DialogClose>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M2 2L14 14M2 14L14 2\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t\t\t</DialogClose>\n\t\t\t\t\t)}\n\t\t\t\t\t{title && <DialogTitle>{title}</DialogTitle>}\n\t\t\t\t\t{description && <DialogDescription>{description}</DialogDescription>}\n\t\t\t\t\t<DialogBody>{children}</DialogBody>\n\t\t\t\t</DialogPopup>\n\t\t\t</DialogPortal>\n\t\t</DialogRoot>\n\t);\n};\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const DialogParts = Object.assign(DialogRoot, {\n\tRoot: DialogRoot,\n\tTrigger: DialogTrigger,\n\tPortal: DialogPortal,\n\tBackdrop: DialogBackdrop,\n\tPopup: DialogPopup,\n\tTitle: DialogTitle,\n\tDescription: DialogDescription,\n\tClose: DialogClose,\n\tBody: DialogBody,\n\tFooter: DialogFooter,\n});\n\nexport {\n\tDialog,\n\tDialogRoot,\n\tDialogTrigger,\n\tDialogPortal,\n\tDialogBackdrop,\n\tDialogPopup,\n\tDialogTitle,\n\tDialogDescription,\n\tDialogClose,\n\tDialogBody,\n\tDialogFooter,\n\tdialogBackdropVariants,\n\tdialogPopupVariants,\n};\n","\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui-components/react/dialog\";\nimport * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport {\n\tBlurredVideoBackdrop,\n\ttype BlurredVideoBackdropProps,\n} from \"@/components/atoms/blurred-video-backdrop\";\nimport {\n\tVideoPlayer,\n\ttype VideoPlayerProps,\n} from \"@/components/atoms/video-player\";\nimport { cn } from \"@/lib/utils\";\n\n// ============================================================================\n// Variant Definitions\n// ============================================================================\n\n/**\n * Video dialog container variants.\n * Uses fixed positioning to cover the viewport.\n */\nconst videoDialogVariants = tv({\n\tbase: [\n\t\t// Fixed positioning covering viewport\n\t\t\"fixed inset-0\",\n\t\t// Dark background base\n\t\t\"bg-black\",\n\t\t// Flex centering for the video\n\t\t\"flex items-center justify-center\",\n\t\t// Animation\n\t\t\"transition-opacity duration-300\",\n\t\t\"data-[starting-style]:opacity-0\",\n\t\t\"data-[ending-style]:opacity-0\",\n\t\t// Focus outline\n\t\t\"outline-none\",\n\t],\n});\n\n/**\n * Close button variants.\n */\nconst closeButtonVariants = tv({\n\tbase: [\n\t\t// Positioning\n\t\t\"absolute z-50\",\n\t\t// Size and shape\n\t\t\"w-48 h-48 rounded-full\",\n\t\t// Colors\n\t\t\"bg-black/60 text-white\",\n\t\t\"hover:bg-black/80\",\n\t\t// Transition\n\t\t\"transition-all duration-150\",\n\t\t// Focus\n\t\t\"focus:outline-none focus-visible:ring-2 focus-visible:ring-white/50\",\n\t\t// Flex centering for icon\n\t\t\"flex items-center justify-center\",\n\t\t// Cursor\n\t\t\"cursor-pointer\",\n\t],\n\tvariants: {\n\t\tposition: {\n\t\t\t\"top-right\": \"top-24 right-24\",\n\t\t\t\"top-left\": \"top-24 left-24\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tposition: \"top-right\",\n\t},\n});\n\n/**\n * Video container variants.\n * Expands to fill viewport, constrained by height (maintains aspect ratio).\n */\nconst videoContainerVariants = tv({\n\tbase: [\n\t\t// Relative for z-index\n\t\t\"relative z-10\",\n\t\t// Fill available space\n\t\t\"w-full h-full\",\n\t\t// Flex to center the video\n\t\t\"flex items-center justify-center\",\n\t\t// Padding from viewport edges\n\t\t\"p-16 sm:p-24 lg:p-32\",\n\t],\n});\n\n// ============================================================================\n// VideoDialog Component\n// ============================================================================\n\nexport interface VideoDialogProps\n\textends Omit<VideoPlayerProps, \"videoRef\" | \"className\"> {\n\t/** Trigger element that opens the dialog */\n\ttrigger: React.ReactNode;\n\t/** Blur intensity for backdrop (default: high) */\n\tblur?: BlurredVideoBackdropProps[\"blur\"];\n\t/** Gradient overlay for backdrop (default: vignette) */\n\toverlay?: BlurredVideoBackdropProps[\"overlay\"];\n\t/** Backdrop opacity (default: 0.6) */\n\tbackdropOpacity?: number;\n\t/** Whether to show close button (default: true) */\n\tshowClose?: boolean;\n\t/** Close button position (default: top-right) */\n\tclosePosition?: \"top-right\" | \"top-left\";\n\t/** Video player rounded corners (default: lg) */\n\trounded?: VideoPlayerProps[\"rounded\"];\n\t/** Controlled open state */\n\topen?: boolean;\n\t/** Default open state */\n\tdefaultOpen?: boolean;\n\t/** Callback when open state changes */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Additional className for the dialog container */\n\tclassName?: string;\n}\n\n/**\n * VideoDialog - Fullscreen video modal with blurred video backdrop.\n *\n * Creates an immersive video viewing experience where the blurred video\n * serves as the modal backdrop, with the main video centered on top.\n * Based on the DGA modal pattern.\n *\n * Features:\n * - Blurred video backdrop that syncs with main video\n * - Configurable blur intensity and gradient overlays\n * - Automatic play/pause when dialog opens/closes\n * - HLS streaming support via Cloudflare Stream\n * - Accessible dialog with focus trap and escape key handling\n *\n * @example\n * ```tsx\n * <VideoDialog\n * trigger={<Button>Watch Video</Button>}\n * cloudflare={{ videoId: \"abc123\", customerCode: \"xyz789\" }}\n * blur=\"high\"\n * overlay=\"vignette\"\n * />\n * ```\n */\nconst VideoDialog = React.forwardRef<HTMLDivElement, VideoDialogProps>(\n\t(\n\t\t{\n\t\t\ttrigger,\n\t\t\tsrc,\n\t\t\tcloudflare,\n\t\t\tblur = \"high\",\n\t\t\toverlay = \"vignette\",\n\t\t\tbackdropOpacity = 0.6,\n\t\t\tshowClose = true,\n\t\t\tclosePosition = \"top-right\",\n\t\t\trounded = \"lg\",\n\t\t\topen: controlledOpen,\n\t\t\tdefaultOpen,\n\t\t\tonOpenChange,\n\t\t\tclassName,\n\t\t\tautoPlay,\n\t\t\t...videoProps\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Internal open state for autoplay control\n\t\tconst [internalOpen, setInternalOpen] = React.useState(\n\t\t\tdefaultOpen ?? false,\n\t\t);\n\t\tconst isControlled = controlledOpen !== undefined;\n\t\tconst open = isControlled ? controlledOpen : internalOpen;\n\n\t\tconst handleOpenChange = React.useCallback(\n\t\t\t(newOpen: boolean) => {\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalOpen(newOpen);\n\t\t\t\t}\n\t\t\t\tonOpenChange?.(newOpen);\n\t\t\t},\n\t\t\t[isControlled, onOpenChange],\n\t\t);\n\n\t\t// Primary video ref for sync\n\t\tconst primaryVideoRef = React.useRef<HTMLVideoElement | null>(null);\n\n\t\treturn (\n\t\t\t<BaseDialog.Root\n\t\t\t\topen={open}\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t>\n\t\t\t\t<BaseDialog.Trigger\n\t\t\t\t\trender={\n\t\t\t\t\t\tReact.isValidElement(trigger)\n\t\t\t\t\t\t\t? (trigger as React.ReactElement<Record<string, unknown>>)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{!React.isValidElement(trigger) ? trigger : undefined}\n\t\t\t\t</BaseDialog.Trigger>\n\t\t\t\t<BaseDialog.Portal>\n\t\t\t\t\t<BaseDialog.Popup\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(videoDialogVariants(), className)}\n\t\t\t\t\t\tdata-component=\"video-dialog\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Blur Video Backdrop - covers entire viewport */}\n\t\t\t\t\t\t<BlurredVideoBackdrop\n\t\t\t\t\t\t\tvideoRef={primaryVideoRef}\n\t\t\t\t\t\t\tblur={blur}\n\t\t\t\t\t\t\toverlay={overlay}\n\t\t\t\t\t\t\topacity={backdropOpacity}\n\t\t\t\t\t\t\textension={120}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Close Button */}\n\t\t\t\t\t\t{showClose && (\n\t\t\t\t\t\t\t<BaseDialog.Close\n\t\t\t\t\t\t\t\tclassName={closeButtonVariants({ position: closePosition })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\twidth=\"20\"\n\t\t\t\t\t\t\t\t\theight=\"20\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 20 20\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M4 4L16 16M4 16L16 4\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t<span className=\"sr-only\">Close</span>\n\t\t\t\t\t\t\t</BaseDialog.Close>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Video Container - fills viewport, video centered within */}\n\t\t\t\t\t\t<div className={videoContainerVariants()}>\n\t\t\t\t\t\t\t<VideoPlayer\n\t\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t\tcloudflare={cloudflare}\n\t\t\t\t\t\t\t\tvideoRef={primaryVideoRef}\n\t\t\t\t\t\t\t\trounded={rounded}\n\t\t\t\t\t\t\t\tautoPlay={autoPlay ?? open}\n\t\t\t\t\t\t\t\taspectRatio=\"16/9\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\twidth: \"min(100%, calc((100vh - 64px) * 16 / 9))\",\n\t\t\t\t\t\t\t\t\tmaxHeight: \"calc(100vh - 64px)\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t{...videoProps}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</BaseDialog.Popup>\n\t\t\t\t</BaseDialog.Portal>\n\t\t\t</BaseDialog.Root>\n\t\t);\n\t},\n);\n\nVideoDialog.displayName = \"VideoDialog\";\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n\tVideoDialog,\n\tvideoDialogVariants,\n\tcloseButtonVariants,\n\tvideoContainerVariants,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport {\n\tBlurredVideoBackdrop,\n\ttype BlurredVideoBackdropProps,\n} from \"@/components/atoms/blurred-video-backdrop\";\nimport {\n\tVideoPlayer,\n\ttype VideoPlayerProps,\n} from \"@/components/atoms/video-player\";\nimport { cn } from \"@/lib/utils\";\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface VideoWithBackdropContextValue {\n\t/** Ref to primary video element */\n\tvideoRef: React.RefObject<HTMLVideoElement | null>;\n\t/** Video source URL */\n\tsrc?: string;\n\t/** Cloudflare config */\n\tcloudflare?: CloudflareConfig;\n}\n\nconst VideoWithBackdropContext =\n\tReact.createContext<VideoWithBackdropContextValue | null>(null);\n\nfunction useVideoWithBackdropContext() {\n\tconst context = React.useContext(VideoWithBackdropContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"VideoWithBackdrop compound components must be used within VideoWithBackdrop.Root\",\n\t\t);\n\t}\n\treturn context;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Cloudflare Stream configuration */\ninterface CloudflareConfig {\n\t/** Cloudflare Stream video ID */\n\tvideoId: string;\n\t/** Cloudflare customer code/subdomain */\n\tcustomerCode: string;\n}\n\n// ============================================================================\n// Variant Definitions\n// ============================================================================\n\n/**\n * Root container variants.\n */\nconst videoWithBackdropVariants = tv({\n\tbase: [\"relative\", \"overflow-hidden\", \"bg-black\"],\n\tvariants: {\n\t\t/**\n\t\t * Full-height mode for dialogs.\n\t\t */\n\t\tfullHeight: {\n\t\t\ttrue: \"h-full w-full\",\n\t\t\tfalse: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tfullHeight: false,\n\t},\n});\n\n/**\n * Content container variants.\n */\nconst contentVariants = tv({\n\tbase: [\"relative\", \"z-10\", \"flex\", \"items-center\", \"justify-center\"],\n\tvariants: {\n\t\tfullHeight: {\n\t\t\ttrue: \"h-full w-full\",\n\t\t\tfalse: \"\",\n\t\t},\n\t\tpadding: {\n\t\t\tnone: \"\",\n\t\t\tsm: \"p-16\",\n\t\t\tmd: \"p-24\",\n\t\t\tlg: \"p-48\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tfullHeight: false,\n\t\tpadding: \"md\",\n\t},\n});\n\n// ============================================================================\n// Root Component\n// ============================================================================\n\nexport interface VideoWithBackdropRootProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof videoWithBackdropVariants> {\n\t/** Video source URL (HLS .m3u8 or regular video file) */\n\tsrc?: string;\n\t/** Cloudflare Stream configuration (takes precedence over src) */\n\tcloudflare?: CloudflareConfig;\n\t/** Children to render */\n\tchildren: React.ReactNode;\n}\n\n/**\n * VideoWithBackdrop Root\n *\n * Container that provides video context to child components.\n * Use with VideoWithBackdrop.Backdrop and VideoWithBackdrop.Content.\n *\n * @example\n * ```tsx\n * <VideoWithBackdrop.Root cloudflare={config}>\n * <VideoWithBackdrop.Backdrop blur=\"high\" overlay=\"vignette\" />\n * <VideoWithBackdrop.Content>\n * <VideoWithBackdrop.Video />\n * </VideoWithBackdrop.Content>\n * </VideoWithBackdrop.Root>\n * ```\n */\nconst VideoWithBackdropRoot = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropRootProps\n>(({ className, src, cloudflare, fullHeight, children, ...props }, ref) => {\n\tconst videoRef = React.useRef<HTMLVideoElement | null>(null);\n\n\tconst contextValue = React.useMemo(\n\t\t() => ({ videoRef, src, cloudflare }),\n\t\t[src, cloudflare],\n\t);\n\n\treturn (\n\t\t<VideoWithBackdropContext.Provider value={contextValue}>\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(videoWithBackdropVariants({ fullHeight }), className)}\n\t\t\t\tdata-full-height={fullHeight ?? false}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</VideoWithBackdropContext.Provider>\n\t);\n});\nVideoWithBackdropRoot.displayName = \"VideoWithBackdropRoot\";\n\n// ============================================================================\n// Backdrop Component\n// ============================================================================\n\nexport interface VideoWithBackdropBackdropProps\n\textends Omit<BlurredVideoBackdropProps, \"videoRef\"> {}\n\n/**\n * VideoWithBackdrop Backdrop\n *\n * Renders the blurred video backdrop layer using canvas.\n * Automatically draws from the video element in context.\n */\nconst VideoWithBackdropBackdrop = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropBackdropProps\n>(({ ...props }, ref) => {\n\tconst { videoRef } = useVideoWithBackdropContext();\n\n\treturn <BlurredVideoBackdrop ref={ref} videoRef={videoRef} {...props} />;\n});\nVideoWithBackdropBackdrop.displayName = \"VideoWithBackdropBackdrop\";\n\n// ============================================================================\n// Content Component\n// ============================================================================\n\nexport interface VideoWithBackdropContentProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof contentVariants> {}\n\n/**\n * VideoWithBackdrop Content\n *\n * Container for the main video player and any additional content.\n * Positioned above the backdrop with z-index.\n */\nconst VideoWithBackdropContent = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropContentProps\n>(({ className, fullHeight, padding, children, ...props }, ref) => {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={cn(contentVariants({ fullHeight, padding }), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\nVideoWithBackdropContent.displayName = \"VideoWithBackdropContent\";\n\n// ============================================================================\n// Video Component (convenience wrapper)\n// ============================================================================\n\nexport interface VideoWithBackdropVideoProps\n\textends Omit<VideoPlayerProps, \"videoRef\"> {\n\t/** Max width of the video player container */\n\tmaxWidth?: string;\n}\n\n/**\n * VideoWithBackdrop Video\n *\n * Convenience wrapper for VideoPlayer that automatically connects\n * to the backdrop via context.\n */\nconst VideoWithBackdropVideo = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropVideoProps\n>(({ className, maxWidth = \"960px\", cloudflare, src, ...props }, ref) => {\n\tconst context = useVideoWithBackdropContext();\n\n\t// Use context values if not explicitly provided\n\tconst videoCloudflare = cloudflare ?? context.cloudflare;\n\tconst videoSrc = src ?? context.src;\n\n\treturn (\n\t\t<div ref={ref} className={cn(\"w-full\", className)} style={{ maxWidth }}>\n\t\t\t<VideoPlayer\n\t\t\t\tcloudflare={videoCloudflare}\n\t\t\t\tsrc={videoSrc}\n\t\t\t\tvideoRef={context.videoRef}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n});\nVideoWithBackdropVideo.displayName = \"VideoWithBackdropVideo\";\n\n// ============================================================================\n// Simple Pre-composed Component\n// ============================================================================\n\nexport interface VideoWithBackdropProps\n\textends Omit<VideoPlayerProps, \"videoRef\" | \"className\" | \"aspectRatio\"> {\n\t/** Blur intensity (default: high) */\n\tblur?: BlurredVideoBackdropProps[\"blur\"];\n\t/** Gradient overlay (default: vignette) */\n\toverlay?: BlurredVideoBackdropProps[\"overlay\"];\n\t/** Backdrop opacity (default: 0.6) */\n\tbackdropOpacity?: number;\n\t/** Max width of video player (default: 960px) */\n\tmaxWidth?: string;\n\t/** Content padding (default: md) */\n\tpadding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n\t/** Video player rounded corners */\n\trounded?: VideoPlayerProps[\"rounded\"];\n\t/** Additional className for root container */\n\tclassName?: string;\n\t/** Target FPS for backdrop canvas (default: 30) */\n\ttargetFps?: number;\n\t/** Canvas scale factor for backdrop (default: 0.5) */\n\tscale?: number;\n}\n\n/**\n * VideoWithBackdrop - Pre-composed video player with blurred backdrop.\n *\n * A simple, ready-to-use component that combines VideoPlayer with\n * BlurredVideoBackdrop for modal video experiences. Uses canvas rendering\n * for optimal performance.\n *\n * For custom layouts, use the compound components:\n * - VideoWithBackdrop.Root\n * - VideoWithBackdrop.Backdrop\n * - VideoWithBackdrop.Content\n * - VideoWithBackdrop.Video\n *\n * @example\n * ```tsx\n * // Simple usage (in a full-height container like Dialog)\n * <VideoWithBackdrop\n * cloudflare={{ videoId: \"...\", customerCode: \"...\" }}\n * autoPlay\n * blur=\"high\"\n * overlay=\"vignette\"\n * />\n *\n * // With Dialog\n * <Dialog size=\"full\" variant=\"minimal\">\n * <VideoWithBackdrop cloudflare={config} autoPlay />\n * </Dialog>\n * ```\n */\nconst VideoWithBackdrop = React.forwardRef<\n\tHTMLDivElement,\n\tVideoWithBackdropProps\n>(\n\t(\n\t\t{\n\t\t\tsrc,\n\t\t\tcloudflare,\n\t\t\tblur = \"high\",\n\t\t\toverlay = \"vignette\",\n\t\t\tbackdropOpacity = 0.6,\n\t\t\tmaxWidth = \"960px\",\n\t\t\tpadding = \"md\",\n\t\t\trounded = \"lg\",\n\t\t\tclassName,\n\t\t\ttargetFps = 30,\n\t\t\tscale = 0.5,\n\t\t\t...videoProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst videoRef = React.useRef<HTMLVideoElement | null>(null);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tvideoWithBackdropVariants({ fullHeight: true }),\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tdata-component=\"video-with-backdrop\"\n\t\t\t>\n\t\t\t\t<BlurredVideoBackdrop\n\t\t\t\t\tvideoRef={videoRef}\n\t\t\t\t\tblur={blur}\n\t\t\t\t\toverlay={overlay}\n\t\t\t\t\topacity={backdropOpacity}\n\t\t\t\t\ttargetFps={targetFps}\n\t\t\t\t\tscale={scale}\n\t\t\t\t/>\n\t\t\t\t<div className={cn(contentVariants({ fullHeight: true, padding }))}>\n\t\t\t\t\t<div className=\"w-full\" style={{ maxWidth }}>\n\t\t\t\t\t\t<VideoPlayer\n\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\tcloudflare={cloudflare}\n\t\t\t\t\t\t\tvideoRef={videoRef}\n\t\t\t\t\t\t\trounded={rounded}\n\t\t\t\t\t\t\t{...videoProps}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\nVideoWithBackdrop.displayName = \"VideoWithBackdrop\";\n\n// ============================================================================\n// Compound Component Export\n// ============================================================================\n\nexport const VideoWithBackdropParts = Object.assign(VideoWithBackdropRoot, {\n\tRoot: VideoWithBackdropRoot,\n\tBackdrop: VideoWithBackdropBackdrop,\n\tContent: VideoWithBackdropContent,\n\tVideo: VideoWithBackdropVideo,\n});\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n\tVideoWithBackdrop,\n\tVideoWithBackdropRoot,\n\tVideoWithBackdropBackdrop,\n\tVideoWithBackdropContent,\n\tVideoWithBackdropVideo,\n\tvideoWithBackdropVariants,\n\tcontentVariants,\n};\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nconst cardVariants = tv({\n\tbase: \"relative flex overflow-hidden rounded-surface-card bg-card-background stroke-surface-card border-border-subtle border-solid\",\n\tvariants: {\n\t\tlayout: {\n\t\t\tvertical: \"w-full flex-col\",\n\t\t\thorizontal: \"w-full flex-row\",\n\t\t\t/**\n\t\t\t * Overlay layout - content sits on top of full-bleed background.\n\t\t\t * Use with Background components for images/gradients.\n\t\t\t */\n\t\t\toverlay: \"w-full flex-col\",\n\t\t\t/**\n\t\t\t * Profile layout - square image with stacked content below.\n\t\t\t * Ideal for team member cards, user profiles, testimonials.\n\t\t\t */\n\t\t\tprofile: \"w-full flex-col\",\n\t\t\t/**\n\t\t\t * Compact layout - small thumbnail with condensed horizontal content.\n\t\t\t * Ideal for news items, article previews, resource lists.\n\t\t\t */\n\t\t\tcompact: \"w-full flex-row items-center gap-16\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tlayout: \"vertical\",\n\t},\n});\n\nexport interface CardProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof cardVariants> {}\n\n/**\n * Card component for displaying content in a contained, scannable format.\n *\n * Layouts:\n * - vertical: Image on top, content below (default)\n * - horizontal: Image on left, content on right\n * - overlay: Full-bleed background with content on top\n *\n * Use with CardImage, CardContent, CardEyebrow, CardTitle, CardDescription, and CardActions.\n * For overlay layout, use Background components for full-bleed backgrounds.\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n\t({ className, layout, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardVariants({ layout, class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCard.displayName = \"Card\";\n\nconst cardImageVariants = tv({\n\tbase: \"relative shrink-0 bg-bg-muted\",\n\tvariants: {\n\t\tlayout: {\n\t\t\tvertical: \"aspect-video w-full\",\n\t\t\thorizontal: \"aspect-auto w-2/5 self-stretch\",\n\t\t\toverlay: \"aspect-video w-full\",\n\t\t\t/** Profile: square aspect ratio for headshots/avatars */\n\t\t\tprofile: \"aspect-square w-full\",\n\t\t\t/** Compact: fixed small size for thumbnails */\n\t\t\tcompact: \"size-80 rounded-8\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tlayout: \"vertical\",\n\t},\n});\n\nexport interface CardImageProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof cardImageVariants> {\n\t/**\n\t * The image source URL\n\t */\n\tsrc?: string;\n\t/**\n\t * Alt text for the image\n\t */\n\talt?: string;\n}\n\n/**\n * Card image area with layout-specific styling.\n * - vertical: 16:9 aspect ratio, full width\n * - horizontal: ~40% width, stretches to content height\n * - profile: square aspect ratio for headshots/avatars\n * - compact: fixed small size for thumbnails\n */\nconst CardImage = React.forwardRef<HTMLDivElement, CardImageProps>(\n\t({ className, src, alt = \"\", layout, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardImageVariants({ layout, class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{src && (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\tclassName=\"absolute inset-0 size-full object-cover\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\nCardImage.displayName = \"CardImage\";\n\nconst cardContentVariants = tv({\n\tbase: \"flex w-full flex-1 flex-col gap-spatial-card-large-gap p-spatial-card-large-padding\",\n\tvariants: {\n\t\t/**\n\t\t * Vertical alignment of content within the card.\n\t\t * Useful for overlay layouts to position content at top/center/bottom.\n\t\t */\n\t\tjustify: {\n\t\t\tstart: \"justify-start\",\n\t\t\tcenter: \"justify-center\",\n\t\t\tend: \"justify-end\",\n\t\t},\n\t},\n});\n\nexport interface CardContentProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof cardContentVariants> {}\n\n/**\n * Card content container with proper padding and spacing.\n * Uses spatial card tokens for consistent sizing.\n * For overlay layout, add `relative z-10` to ensure content sits above background.\n *\n * @example\n * ```tsx\n * // Content at bottom of overlay card\n * <Card layout=\"overlay\">\n * <Background.Image src=\"/hero.jpg\" />\n * <CardContent justify=\"end\" className=\"relative z-10\">\n * <CardTitle>Title</CardTitle>\n * </CardContent>\n * </Card>\n * ```\n */\nconst CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n\t({ className, justify, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardContentVariants({ justify, class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardContent.displayName = \"CardContent\";\n\nconst cardEyebrowVariants = tv({\n\tbase: \"typography-overline text-text-muted uppercase tracking-wider\",\n});\n\nexport interface CardEyebrowProps\n\textends React.HTMLAttributes<HTMLParagraphElement> {}\n\n/**\n * Optional eyebrow text above the card title.\n */\nconst CardEyebrow = React.forwardRef<HTMLParagraphElement, CardEyebrowProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<p\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardEyebrowVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardEyebrow.displayName = \"CardEyebrow\";\n\nconst cardTitleVariants = tv({\n\tbase: \"typography-h5 text-text-primary\",\n});\n\nexport interface CardTitleProps\n\textends React.HTMLAttributes<HTMLHeadingElement> {\n\t/**\n\t * The heading level to render (h1-h6). Defaults to h3.\n\t */\n\tas?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n}\n\n/**\n * Card title/heading. Use the `as` prop to change the heading level.\n */\nconst CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n\t({ className, as: Component = \"h3\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<Component\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardTitleVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst cardDescriptionVariants = tv({\n\tbase: \"typography-body-small text-text-secondary\",\n});\n\nexport interface CardDescriptionProps\n\textends React.HTMLAttributes<HTMLParagraphElement> {}\n\n/**\n * Card body/description text.\n */\nconst CardDescription = React.forwardRef<\n\tHTMLParagraphElement,\n\tCardDescriptionProps\n>(({ className, ...props }, ref) => {\n\treturn (\n\t\t<p\n\t\t\tref={ref}\n\t\t\tclassName={cardDescriptionVariants({ class: className })}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nCardDescription.displayName = \"CardDescription\";\n\nconst cardBodyVariants = tv({\n\tbase: \"flex w-full flex-col gap-spatial-card-small-gap\",\n});\n\nexport interface CardBodyProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for card text content (eyebrow, title, description).\n * Uses spatial card tokens for consistent sizing.\n */\nconst CardBody = React.forwardRef<HTMLDivElement, CardBodyProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardBodyVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardBody.displayName = \"CardBody\";\n\nconst cardActionsVariants = tv({\n\tbase: \"flex gap-12\",\n});\n\nexport interface CardActionsProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for card action buttons.\n * Uses primitive spacing tokens.\n */\nconst CardActions = React.forwardRef<HTMLDivElement, CardActionsProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardActionsVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nCardActions.displayName = \"CardActions\";\n\nconst cardLinkVariants = tv({\n\tbase: \"group/link flex items-center gap-4 text-text-muted transition-colors duration-200 hover:text-text-primary\",\n});\n\nexport interface CardLinkProps extends React.HTMLAttributes<HTMLSpanElement> {\n\t/**\n\t * Whether to show the arrow indicator\n\t * @default true\n\t */\n\tshowArrow?: boolean;\n}\n\n/**\n * Inline link element for cards with optional animated arrow.\n * Commonly used for \"Read More →\" or \"Learn More →\" patterns.\n *\n * @example\n * ```tsx\n * <Card layout=\"compact\">\n * <CardImage src=\"/thumb.jpg\" layout=\"compact\" />\n * <CardContent>\n * <CardTitle>Article Title</CardTitle>\n * <CardLink>Read More</CardLink>\n * </CardContent>\n * </Card>\n * ```\n */\nconst CardLink = React.forwardRef<HTMLSpanElement, CardLinkProps>(\n\t({ className, children, showArrow = true, ...props }, ref) => {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardLinkVariants({ class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<span>{children}</span>\n\t\t\t\t{showArrow && (\n\t\t\t\t\t<span\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"inline-block transition-transform duration-200 ease-out group-hover/link:translate-x-4\"\n\t\t\t\t\t>\n\t\t\t\t\t\t→\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t);\n\t},\n);\nCardLink.displayName = \"CardLink\";\n\nexport {\n\tCard,\n\tcardVariants,\n\tCardImage,\n\tcardImageVariants,\n\tCardContent,\n\tcardContentVariants,\n\tCardEyebrow,\n\tcardEyebrowVariants,\n\tCardTitle,\n\tcardTitleVariants,\n\tCardDescription,\n\tcardDescriptionVariants,\n\tCardBody,\n\tcardBodyVariants,\n\tCardActions,\n\tcardActionsVariants,\n\tCardLink,\n\tcardLinkVariants,\n};\n","\"use client\";\n\nimport { Dialog } from \"@base-ui-components/react/dialog\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n// Context for mobile menu state\nconst NavbarContext = React.createContext<{\n\tisMobileMenuOpen: boolean;\n\tsetIsMobileMenuOpen: (open: boolean) => void;\n}>({\n\tisMobileMenuOpen: false,\n\tsetIsMobileMenuOpen: () => {},\n});\n\nexport interface NavbarProps extends React.HTMLAttributes<HTMLElement> {}\n\n/**\n * Main navigation bar container.\n * Provides responsive layout for brand, links, and actions.\n */\nconst Navbar = React.forwardRef<HTMLElement, NavbarProps>(\n\t({ className, children, ...props }, ref) => {\n\t\tconst [isMobileMenuOpen, setIsMobileMenuOpen] = React.useState(false);\n\t\tconst navRef = React.useRef<HTMLElement>(null);\n\n\t\t// Set navbar height CSS variable for mobile menu positioning\n\t\tReact.useEffect(() => {\n\t\t\tconst updateHeight = () => {\n\t\t\t\tif (navRef.current) {\n\t\t\t\t\tconst height = navRef.current.offsetHeight;\n\t\t\t\t\tdocument.documentElement.style.setProperty(\n\t\t\t\t\t\t\"--navbar-height\",\n\t\t\t\t\t\t`${height}px`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tupdateHeight();\n\t\t\twindow.addEventListener(\"resize\", updateHeight);\n\t\t\treturn () => window.removeEventListener(\"resize\", updateHeight);\n\t\t}, []);\n\n\t\t// Merge refs\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLElement | null) => {\n\t\t\t\t(navRef as React.MutableRefObject<HTMLElement | null>).current = node;\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref) {\n\t\t\t\t\tref.current = node;\n\t\t\t\t}\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\n\t\treturn (\n\t\t\t<NavbarContext.Provider value={{ isMobileMenuOpen, setIsMobileMenuOpen }}>\n\t\t\t\t<nav\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\tclassName={cn(\"relative z-50 w-full bg-gray-50\", className)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex w-full items-center justify-between\",\n\t\t\t\t\t\t\t// Mobile\n\t\t\t\t\t\t\t\"px-spatial-component-navbar-padding-x-mobile py-spatial-component-navbar-padding-y-mobile\",\n\t\t\t\t\t\t\t// Tablet\n\t\t\t\t\t\t\t\"md:px-spatial-component-navbar-padding-x-tablet md:py-spatial-component-navbar-padding-y-tablet\",\n\t\t\t\t\t\t\t// Desktop\n\t\t\t\t\t\t\t\"xl:px-spatial-component-navbar-padding-x-desktop xl:py-spatial-component-navbar-padding-y-desktop\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</nav>\n\t\t\t</NavbarContext.Provider>\n\t\t);\n\t},\n);\nNavbar.displayName = \"Navbar\";\n\nexport interface NavbarBrandProps extends React.HTMLAttributes<HTMLDivElement> {\n\tasChild?: boolean;\n}\n\n/**\n * Brand/logo area of the navbar.\n * Use asChild to render as a link.\n */\nconst NavbarBrand = React.forwardRef<HTMLDivElement, NavbarBrandProps>(\n\t({ className, asChild = false, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"div\";\n\t\treturn <Comp ref={ref} className={cn(\"shrink-0\", className)} {...props} />;\n\t},\n);\nNavbarBrand.displayName = \"NavbarBrand\";\n\nexport interface NavbarLinksProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for navigation links.\n * Centers links on desktop, hidden on mobile (use NavbarMobileMenu instead).\n */\nconst NavbarLinks = React.forwardRef<HTMLDivElement, NavbarLinksProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"hidden items-center gap-spatial-component-navbar-gap-links md:flex\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nNavbarLinks.displayName = \"NavbarLinks\";\n\nexport interface NavbarLinkProps\n\textends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n\tasChild?: boolean;\n\tactive?: boolean;\n}\n\n/**\n * Individual navigation link.\n * Use asChild to render with a router Link component.\n */\nconst NavbarLink = React.forwardRef<HTMLAnchorElement, NavbarLinkProps>(\n\t({ className, asChild = false, active, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"a\";\n\t\treturn (\n\t\t\t<Comp\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"typography-body-small font-medium text-gray-900 transition-colors hover:text-gray-700\",\n\t\t\t\t\tactive && \"text-gray-1100\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nNavbarLink.displayName = \"NavbarLink\";\n\nexport interface NavbarActionsProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for navbar action items (search, menu button, etc).\n */\nconst NavbarActions = React.forwardRef<HTMLDivElement, NavbarActionsProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-spatial-component-navbar-gap-actions\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nNavbarActions.displayName = \"NavbarActions\";\n\nexport interface NavbarMobileMenuProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Mobile menu container that displays navigation links on mobile devices.\n * Hidden on desktop (md and above). Should be used with NavbarMobileMenuButton.\n * Built on Base UI Dialog for accessibility (focus trap, escape key, click-outside).\n */\nconst NavbarMobileMenu = React.forwardRef<\n\tHTMLDivElement,\n\tNavbarMobileMenuProps\n>(({ className, children, ...props }, ref) => {\n\tconst { isMobileMenuOpen, setIsMobileMenuOpen } =\n\t\tReact.useContext(NavbarContext);\n\n\treturn (\n\t\t<Dialog.Root open={isMobileMenuOpen} onOpenChange={setIsMobileMenuOpen}>\n\t\t\t<Dialog.Portal>\n\t\t\t\t<Dialog.Popup\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"fixed inset-0 z-50 bg-gray-50 md:hidden\",\n\t\t\t\t\t\t// Position below navbar\n\t\t\t\t\t\t\"pt-[calc(var(--navbar-height,60px)+1px)]\",\n\t\t\t\t\t\t// Smooth transition\n\t\t\t\t\t\t\"transition-opacity duration-200\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<Dialog.Title className=\"sr-only\">Navigation menu</Dialog.Title>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\t\t\t// Padding matching navbar\n\t\t\t\t\t\t\t\"px-spatial-component-navbar-padding-x-mobile py-spatial-component-navbar-padding-y-tablet\",\n\t\t\t\t\t\t\t// Gap between links\n\t\t\t\t\t\t\t\"gap-spatial-component-navbar-gap-mobile-menu\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</Dialog.Popup>\n\t\t\t</Dialog.Portal>\n\t\t</Dialog.Root>\n\t);\n});\nNavbarMobileMenu.displayName = \"NavbarMobileMenu\";\n\nexport interface NavbarMobileMenuButtonProps\n\textends React.ButtonHTMLAttributes<HTMLButtonElement> {\n\tasChild?: boolean;\n}\n\n/**\n * Button to toggle the mobile menu.\n * Should be placed in NavbarActions on mobile.\n * Use asChild to render as a custom button component (e.g., IconButton).\n */\nconst NavbarMobileMenuButton = React.forwardRef<\n\tHTMLButtonElement,\n\tNavbarMobileMenuButtonProps\n>(({ className, asChild = false, children, ...props }, ref) => {\n\tconst { isMobileMenuOpen, setIsMobileMenuOpen } =\n\t\tReact.useContext(NavbarContext);\n\n\tconst handleClick = () => {\n\t\tsetIsMobileMenuOpen(!isMobileMenuOpen);\n\t};\n\n\tif (asChild) {\n\t\treturn (\n\t\t\t<Slot\n\t\t\t\tref={ref}\n\t\t\t\taria-label=\"Toggle navigation menu\"\n\t\t\t\taria-expanded={isMobileMenuOpen}\n\t\t\t\taria-controls=\"navbar-mobile-menu\"\n\t\t\t\tonClick={handleClick}\n\t\t\t\tclassName={className}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Slot>\n\t\t);\n\t}\n\n\treturn (\n\t\t<button\n\t\t\tref={ref}\n\t\t\ttype=\"button\"\n\t\t\taria-label=\"Toggle navigation menu\"\n\t\t\taria-expanded={isMobileMenuOpen}\n\t\t\taria-controls=\"navbar-mobile-menu\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\"transition-colors\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n});\nNavbarMobileMenuButton.displayName = \"NavbarMobileMenuButton\";\n\nexport interface NavbarMobileMenuLinkProps\n\textends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n\tasChild?: boolean;\n\tactive?: boolean;\n}\n\n/**\n * Navigation link for the mobile menu.\n * Automatically closes the mobile menu when clicked.\n * Use asChild to render with a router Link component.\n */\nconst NavbarMobileMenuLink = React.forwardRef<\n\tHTMLAnchorElement,\n\tNavbarMobileMenuLinkProps\n>(({ className, asChild = false, active, onClick, ...props }, ref) => {\n\tconst { setIsMobileMenuOpen } = React.useContext(NavbarContext);\n\tconst Comp = asChild ? Slot : \"a\";\n\n\tconst handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n\t\tsetIsMobileMenuOpen(false);\n\t\tonClick?.(event);\n\t};\n\n\treturn (\n\t\t<Comp\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t\"typography-body-medium font-medium text-gray-900 transition-colors hover:text-gray-700\",\n\t\t\t\t\"py-spatial-component-navbar-padding-y-mobile\",\n\t\t\t\tactive && \"text-gray-1100\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonClick={handleClick}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nNavbarMobileMenuLink.displayName = \"NavbarMobileMenuLink\";\n\nexport {\n\tNavbar,\n\tNavbarBrand,\n\tNavbarLinks,\n\tNavbarLink,\n\tNavbarActions,\n\tNavbarMobileMenu,\n\tNavbarMobileMenuButton,\n\tNavbarMobileMenuLink,\n};\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\n\nconst usGovBannerVariants = tv({\n\tslots: {\n\t\troot: \"flex w-full items-center justify-center py-12\",\n\t\tcontent: \"flex items-center gap-8\",\n\t\ttext: \"text-[11px] leading-[13px] tracking-[0.17px]\",\n\t},\n\tvariants: {\n\t\tvariant: {\n\t\t\tdefault: {\n\t\t\t\troot: \"bg-gray-50\",\n\t\t\t\tcontent: \"opacity-70\",\n\t\t\t\ttext: \"text-gray-900\",\n\t\t\t},\n\t\t\tinverted: {\n\t\t\t\troot: \"bg-transparent\",\n\t\t\t\tcontent: \"opacity-70\",\n\t\t\t\ttext: \"text-text-inverted\",\n\t\t\t},\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t},\n});\n\nexport interface USGovBannerProps\n\textends React.HTMLAttributes<HTMLDivElement>,\n\t\tVariantProps<typeof usGovBannerVariants> {\n\t/**\n\t * Custom flag icon element. Defaults to a US flag SVG.\n\t */\n\tflagIcon?: React.ReactNode;\n\t/**\n\t * Banner text content\n\t * @default \"An official website of the United States government\"\n\t */\n\ttext?: string;\n}\n\n/**\n * US Government official website banner.\n * Displays the official government website notice with flag icon.\n * Commonly placed at the very top of government websites.\n *\n * Variants:\n * - default: Light background with dark text (for light pages)\n * - inverted: Transparent background with white text/flag (for dark backgrounds/heroes)\n *\n * @example\n * ```tsx\n * // Default (light)\n * <USGovBanner />\n *\n * // Inverted (for dark backgrounds)\n * <USGovBanner variant=\"inverted\" />\n * ```\n */\nconst USGovBanner = React.forwardRef<HTMLDivElement, USGovBannerProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant,\n\t\t\tflagIcon,\n\t\t\ttext = \"An official website of the United States government\",\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst styles = usGovBannerVariants({ variant });\n\t\tconst isInverted = variant === \"inverted\";\n\n\t\treturn (\n\t\t\t<div ref={ref} className={styles.root({ class: className })} {...props}>\n\t\t\t\t<div className={styles.content()}>\n\t\t\t\t\t{flagIcon ?? (isInverted ? <WhiteUSFlag /> : <DefaultUSFlag />)}\n\t\t\t\t\t<p className={styles.text()}>{text}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\nUSGovBanner.displayName = \"USGovBanner\";\n\nfunction DefaultUSFlag() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"16\"\n\t\t\theight=\"12\"\n\t\t\tviewBox=\"0 0 16 12\"\n\t\t\tfill=\"none\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M0 0H16V12H0V0Z\" fill=\"#212121\" fillOpacity=\"0.1\" />\n\t\t\t<path\n\t\t\t\td=\"M0 0H16V0.923077H0V0ZM0 1.84615H16V2.76923H0V1.84615ZM0 3.69231H16V4.61538H0V3.69231ZM0 5.53846H16V6.46154H0V5.53846ZM0 7.38462H16V8.30769H0V7.38462ZM0 9.23077H16V10.1538H0V9.23077ZM0 11.0769H16V12H0V11.0769Z\"\n\t\t\t\tfill=\"#BF0A30\"\n\t\t\t\tfillOpacity=\"0.8\"\n\t\t\t/>\n\t\t\t<path d=\"M0 0H8V6.46154H0V0Z\" fill=\"#002868\" fillOpacity=\"0.8\" />\n\t\t</svg>\n\t);\n}\n\nfunction WhiteUSFlag() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"16\"\n\t\t\theight=\"12\"\n\t\t\tviewBox=\"0 0 16 12\"\n\t\t\tfill=\"none\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M0 0H16V12H0V0Z\" fill=\"white\" fillOpacity=\"0.1\" />\n\t\t\t<path\n\t\t\t\td=\"M0 0H16V0.923077H0V0ZM0 1.84615H16V2.76923H0V1.84615ZM0 3.69231H16V4.61538H0V3.69231ZM0 5.53846H16V6.46154H0V5.53846ZM0 7.38462H16V8.30769H0V7.38462ZM0 9.23077H16V10.1538H0V9.23077ZM0 11.0769H16V12H0V11.0769Z\"\n\t\t\t\tfill=\"white\"\n\t\t\t\tfillOpacity=\"0.8\"\n\t\t\t/>\n\t\t\t<path d=\"M0 0H8V6.46154H0V0Z\" fill=\"white\" fillOpacity=\"0.6\" />\n\t\t</svg>\n\t);\n}\n\nexport { USGovBanner, usGovBannerVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Banner component based on Figma BaseKit / Banners\n *\n * Used to surface short, important updates or a single key action\n * without disrupting the main page content.\n *\n * Responsive behavior using 24-column grid:\n * - Mobile (sm): Stacked layout, 20px horizontal / 32px vertical padding\n * - Tablet (md): Horizontal layout, 56px padding\n * - Desktop (lg): Horizontal layout, 72px padding\n *\n * Must be placed inside a `grid-container`. Uses `col-full` to span all columns.\n */\nconst bannerVariants = tv({\n\tbase: [\n\t\t// Grid alignment - full width\n\t\t\"col-full\",\n\t\t// Responsive padding: mobile -> tablet -> desktop\n\t\t// Uses primitive spacing tokens\n\t\t\"px-20 py-32\",\n\t\t\"md:p-56\",\n\t\t\"lg:px-72 lg:pb-72 lg:pt-0\",\n\t],\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tlight: \"bg-gray-50\",\n\t\t\tdark: \"bg-gray-1200\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t},\n});\n\nexport interface BannerProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof bannerVariants> {\n\t/**\n\t * The heading text displayed in the banner\n\t */\n\theading: string;\n\t/**\n\t * The description text displayed below the heading\n\t */\n\tdescription: string;\n\t/**\n\t * Optional action element (typically a Button component)\n\t */\n\taction?: React.ReactNode;\n}\n\n/**\n * Banner component for surfacing important updates or CTAs.\n *\n * Uses the 24-column grid system - must be placed inside a `grid-container`.\n * Spans full width with `col-full`.\n *\n * Responsive across breakpoints:\n * - Mobile: Stacked layout with smaller padding\n * - Tablet: Horizontal layout with medium padding\n * - Desktop: Horizontal layout with larger padding\n *\n * @example\n * ```tsx\n * <div className=\"grid-container\">\n * <Banner\n * heading=\"Important Update\"\n * description=\"Check out our new features.\"\n * action={<Button>Learn More</Button>}\n * />\n * </div>\n *\n * // Dark colorScheme\n * <Banner\n * colorScheme=\"dark\"\n * heading=\"Still Have Questions?\"\n * description=\"Contact us at support@example.com\"\n * action={<Button variant=\"secondary\">Email Us</Button>}\n * />\n * ```\n */\nconst Banner = React.forwardRef<HTMLElement, BannerProps>(\n\t({ className, colorScheme, heading, description, action, ...props }, ref) => {\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={bannerVariants({ colorScheme, class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Inner container with border-top for dark colorScheme */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t// Uses primitive spacing tokens\n\t\t\t\t\t\t\"flex flex-col md:flex-row gap-20 items-start md:items-center md:justify-between\",\n\t\t\t\t\t\tcolorScheme === \"dark\" && \"border-t border-gray-700 py-36\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Copy section */}\n\t\t\t\t\t<div className=\"flex flex-col gap-6 items-start\">\n\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"typography-subheading-small\",\n\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{heading}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t<p\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"typography-body-small\",\n\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-500\" : \"text-gray-800\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t{/* Action slot */}\n\t\t\t\t\t{action}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nBanner.displayName = \"Banner\";\n\nexport { Banner, bannerVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * CardGrid component for displaying cards in a responsive grid layout\n *\n * Variants:\n * - A: 3 columns on desktop, 2 on tablet, 1 on mobile\n * - B: 2 columns on desktop/tablet, 1 on mobile\n *\n * Uses the 24-column grid system with grid-container as root.\n */\nconst cardGridVariants = tv({\n\t// Base styles - grid-container for proper grid context - uses primitive spacing tokens\n\tbase: [\n\t\t\"grid-container\",\n\t\t// Small (mobile): 72px y padding\n\t\t\"py-72\",\n\t\t// Large (desktop): 128px y padding\n\t\t\"lg:py-128\",\n\t],\n\tvariants: {\n\t\tvariant: {\n\t\t\tA: \"\",\n\t\t\tB: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"A\",\n\t},\n});\n\nexport interface CardGridProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof cardGridVariants> {\n\t/**\n\t * The title text displayed above the cards\n\t */\n\ttitle: string;\n\t/**\n\t * The card elements to display in the grid\n\t */\n\tcards: React.ReactNode[];\n}\n\n/**\n * CardGrid component for displaying cards in a responsive grid layout.\n *\n * Uses the 24-column grid system with grid-container as root.\n *\n * Layout (Variant A):\n * - Mobile (sm): Single column, py-72\n * - Tablet (md): 2 columns, gap-56 between title and cards, gap-y-20 between cards\n * - Desktop (lg+): 3 columns, py-128, gap-64 between title and cards, gap-y-20 between cards\n *\n * Layout (Variant B):\n * - Mobile (sm): Single column, py-72\n * - Tablet (md): 2 columns, gap-56 between title and cards, gap-y-20 between cards\n * - Desktop (lg+): 2 columns, py-128, gap-64 between title and cards, gap-y-20 between cards\n *\n * @example\n * ```tsx\n * <CardGrid\n * variant=\"A\"\n * title=\"Featured Cards\"\n * cards={[\n * <Card key=\"1\">...</Card>,\n * <Card key=\"2\">...</Card>,\n * ]}\n * />\n * ```\n */\nconst CardGrid = React.forwardRef<HTMLElement, CardGridProps>(\n\t({ className, variant, title, cards, ...props }, ref) => {\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cardGridVariants({ variant, class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Title - col-full within grid - uses primitive spacing tokens */}\n\t\t\t\t<h2\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"col-full\",\n\t\t\t\t\t\t\"typography-h4 text-gray-900\",\n\t\t\t\t\t\t// Gap after title: mobile default, md: 56px, lg: 64px\n\t\t\t\t\t\t\"mb-36 md:mb-56 lg:mb-64\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</h2>\n\n\t\t\t\t{/* Inner grid for cards - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"col-full\",\n\t\t\t\t\t\t// Mobile: single column\n\t\t\t\t\t\t\"grid grid-cols-1 gap-20\",\n\t\t\t\t\t\t// Tablet: 2 columns\n\t\t\t\t\t\t\"md:grid-cols-2\",\n\t\t\t\t\t\t// Desktop: 3 columns for variant A, 2 columns for variant B\n\t\t\t\t\t\tvariant === \"A\" && \"lg:grid-cols-3\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{React.Children.toArray(cards).map((card) => (\n\t\t\t\t\t\t<div key={(card as React.ReactElement).key}>{card}</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nCardGrid.displayName = \"CardGrid\";\n\nexport { CardGrid, cardGridVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * TwoColumnSection component for text-heavy content sections\n *\n * Layout:\n * - Desktop (lg+): Title left, content right with border-top divider\n * - Mobile/Tablet: Stacked vertically\n *\n * Uses the 24-column grid system.\n */\nconst twoColumnSectionVariants = tv({\n\t// Base styles - responsive padding using primitive spacing tokens\n\tbase: [\n\t\t\"w-full\",\n\t\t// Small (mobile): 20px x, 56px top, 20px bottom\n\t\t\"px-20 pt-56 pb-20\",\n\t\t// Medium (tablet): 56px x, 56px y\n\t\t\"md:px-56 md:py-56\",\n\t\t// Large (desktop): 72px x, 72px top, 112px bottom\n\t\t\"lg:px-72 lg:pt-72 lg:pb-112\",\n\t],\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"bg-gray-1200\",\n\t\t\tlight: \"bg-white\",\n\t\t},\n\t\tlayout: {\n\t\t\tasymmetric: \"\",\n\t\t\tequal: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"dark\",\n\t\tlayout: \"asymmetric\",\n\t},\n});\n\nexport interface TwoColumnSectionProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof twoColumnSectionVariants> {\n\t/**\n\t * The title text displayed in the left column\n\t */\n\ttitle: string;\n\t/**\n\t * Lead content - prominently styled (brighter text)\n\t * Can be a string or ReactNode for rich content\n\t */\n\tlead?: React.ReactNode;\n\t/**\n\t * Body content - secondary styled (muted text)\n\t * Can be a string or ReactNode for rich content\n\t */\n\tchildren: React.ReactNode;\n\t/**\n\t * Layout style for the columns\n\t * - \"asymmetric\" (default): Uses 24-column grid with ~40/60 split (title: 9, content: 15)\n\t * - \"equal\": Simple 2-column equal-width layout at md+ breakpoints\n\t */\n\tlayout?: \"asymmetric\" | \"equal\";\n}\n\n/**\n * TwoColumnSection component for text-heavy content with title/content split.\n *\n * Layout:\n * - Mobile/Tablet: Stacked (title above content)\n * - Desktop (lg+): Title left (~40%), Content right (~60%)\n *\n * @example\n * ```tsx\n * <TwoColumnSection\n * title=\"US Tech Force\"\n * lead=\"The US Tech Force is recruiting an elite corps of engineers...\"\n * variant=\"dark\"\n * >\n * <p>Through a two-year program, participants will work...</p>\n * <p>Upon completing the program, engineers can seek...</p>\n * </TwoColumnSection>\n * ```\n */\nconst TwoColumnSection = React.forwardRef<HTMLElement, TwoColumnSectionProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tcolorScheme = \"dark\",\n\t\t\tlayout,\n\t\t\ttitle,\n\t\t\tlead,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={twoColumnSectionVariants({\n\t\t\t\t\tcolorScheme,\n\t\t\t\t\tlayout,\n\t\t\t\t\tclass: className,\n\t\t\t\t})}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Inner container with border-top - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"border-t pt-36\",\n\t\t\t\t\t\tcolorScheme === \"dark\" ? \"border-gray-700\" : \"border-gray-300\",\n\t\t\t\t\t\t// Grid layout - uses primitive spacing tokens\n\t\t\t\t\t\t\"grid grid-cols-1 gap-56\",\n\t\t\t\t\t\tlayout === \"equal\" ? \"md:grid-cols-2\" : \"lg:grid-cols-24 lg:gap-56\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Title column */}\n\t\t\t\t\t<h2\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"typography-subheading-medium\",\n\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t// Column span based on layout\n\t\t\t\t\t\t\tlayout !== \"equal\" && \"lg:col-span-9\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\n\t\t\t\t\t{/* Content column - uses primitive spacing tokens */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex flex-col gap-56\",\n\t\t\t\t\t\t\tlayout !== \"equal\" && \"lg:col-span-15\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Lead content - brighter/prominent */}\n\t\t\t\t\t\t{lead && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"typography-body-large\",\n\t\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{typeof lead === \"string\" ? <p>{lead}</p> : lead}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Body content - muted */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"typography-body-medium flex flex-col gap-[1em]\",\n\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-400\" : \"text-gray-600\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nTwoColumnSection.displayName = \"TwoColumnSection\";\n\nexport { TwoColumnSection, twoColumnSectionVariants };\n","import * as React from \"react\";\nimport type { VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\nimport { TwoColumnSection } from \"../two-column-section\";\nimport type { twoColumnSectionVariants } from \"../two-column-section/two-column-section\";\n\nexport interface FaqSectionProps\n\textends Omit<React.HTMLAttributes<HTMLElement>, \"title\">,\n\t\tVariantProps<typeof twoColumnSectionVariants> {\n\t/**\n\t * The title text displayed in the left column\n\t * @default \"Frequently Asked Questions\"\n\t */\n\ttitle?: string;\n\t/**\n\t * The FAQ content - typically an Accordion with AccordionItems\n\t */\n\tchildren: React.ReactNode;\n}\n\n/**\n * FaqSection component for displaying FAQ content in a two-column layout.\n *\n * Wraps TwoColumnSection with FAQ-specific defaults and typography.\n *\n * Layout:\n * - Mobile/Tablet: Stacked (title above content)\n * - Desktop (lg+): Title left (~40%), FAQ content right (~60%)\n *\n * @example\n * ```tsx\n * <FaqSection>\n * <Accordion defaultExpanded=\"faq-1\">\n * <AccordionItem id=\"faq-1\" title=\"What is the US Tech Force?\">\n * Tech Force will be an elite group of technology specialists...\n * </AccordionItem>\n * <AccordionItem id=\"faq-2\" title=\"What skills are required?\">\n * We're looking for expertise in software engineering...\n * </AccordionItem>\n * </Accordion>\n * </FaqSection>\n *\n * // With custom title\n * <FaqSection title=\"Common Questions\" colorScheme=\"light\">\n * ...\n * </FaqSection>\n * ```\n */\nconst FaqSection = React.forwardRef<HTMLElement, FaqSectionProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tcolorScheme = \"light\",\n\t\t\ttitle = \"Frequently Asked Questions\",\n\t\t\tchildren,\n\t\t\tlayout,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\treturn (\n\t\t\t<TwoColumnSection\n\t\t\t\tref={ref}\n\t\t\t\tcolorScheme={colorScheme}\n\t\t\t\tlayout={layout ?? undefined}\n\t\t\t\ttitle={title}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Override title typography to be larger\n\t\t\t\t\t\"[&_h2]:typography-h4\",\n\t\t\t\t\t// Accordion typography overrides\n\t\t\t\t\t\"[&_button]:typography-body-large [&_button]:md:typography-h5\",\n\t\t\t\t\t\"[&_[data-accordion-panel]]:typography-body-medium [&_[data-accordion-panel]]:md:typography-body-large\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</TwoColumnSection>\n\t\t);\n\t},\n);\nFaqSection.displayName = \"FaqSection\";\n\nexport { FaqSection };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { BackgroundOverlay } from \"@/components/atoms/background\";\nimport { type ComponentTheme, themeToStyleVars } from \"@/lib/theme\";\n\n// Re-export Background components for convenience as HeroBackground\nexport {\n\tBackground as HeroBackground,\n\tBackgroundGradient as HeroGradient,\n\ttype BackgroundGradientProps as HeroGradientProps,\n\tBackgroundImage as HeroBackgroundImage,\n\ttype BackgroundImageProps as HeroBackgroundImageProps,\n\tBackgroundOverlay as HeroOverlay,\n\ttype BackgroundOverlayProps as HeroOverlayProps,\n\tBackgroundStream as HeroBackgroundStream,\n\ttype BackgroundStreamProps as HeroBackgroundStreamProps,\n\tBackgroundVideo as HeroBackgroundVideo,\n\ttype BackgroundVideoProps as HeroBackgroundVideoProps,\n} from \"@/components/atoms/background\";\n\nconst DEFAULT_TITLE_TYPOGRAPHY = \"typography-h1-display\";\n\nconst heroVariants = tv({\n\tslots: {\n\t\troot: \"relative flex w-full flex-col overflow-hidden\",\n\t\ttop: \"relative z-10 w-full\",\n\t\tcontent: [\n\t\t\t\"relative z-10 mx-auto flex w-full max-w-screen-xl flex-1 flex-col\",\n\t\t\t\"p-20\",\n\t\t\t\"md:p-56\",\n\t\t],\n\t\ttitle: DEFAULT_TITLE_TYPOGRAPHY,\n\t\tindicator: \"absolute inset-x-0 bottom-0 z-10 flex justify-center pb-24\",\n\t},\n\tvariants: {\n\t\tvariant: {\n\t\t\tA1: {\n\t\t\t\troot: \"min-h-[80vh]\",\n\t\t\t\tcontent: [\"justify-end\", \"lg:p-72\"],\n\t\t\t},\n\t\t\tA2: {\n\t\t\t\troot: \"min-h-[80vh]\",\n\t\t\t\tcontent: [\"justify-start\", \"lg:p-64\"],\n\t\t\t},\n\t\t\tA3: {\n\t\t\t\troot: \"min-h-[80vh]\",\n\t\t\t\tcontent: [\"items-center justify-center\", \"lg:p-64\"],\n\t\t\t},\n\t\t},\n\t\t/**\n\t\t * Vertical alignment of content within the hero.\n\t\t * Provides a simpler API than variant for basic alignment needs.\n\t\t */\n\t\tcontentAlign: {\n\t\t\ttop: {\n\t\t\t\tcontent: \"justify-start\",\n\t\t\t},\n\t\t\tcenter: {\n\t\t\t\tcontent: \"items-center justify-center\",\n\t\t\t},\n\t\t\tbottom: {\n\t\t\t\tcontent: \"justify-end\",\n\t\t\t},\n\t\t},\n\t\tcolorScheme: {\n\t\t\tdark: {\n\t\t\t\troot: \"bg-bg-page\",\n\t\t\t\ttitle: \"text-text-primary\",\n\t\t\t},\n\t\t\tlight: {\n\t\t\t\troot: \"bg-gray-900\",\n\t\t\t\ttitle: \"text-text-inverted\",\n\t\t\t},\n\t\t},\n\t\thasBackground: {\n\t\t\ttrue: {\n\t\t\t\troot: \"bg-transparent\",\n\t\t\t},\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"A1\",\n\t\tcolorScheme: \"dark\",\n\t},\n});\n\n// =============================================================================\n// Standalone variants for sub-components (for external use)\n// =============================================================================\n\nconst heroHeaderVariants = tv({\n\tbase: \"relative z-10 w-full\",\n});\n\nconst heroContentVariants = tv({\n\tbase: [\n\t\t\"relative z-10 mx-auto flex w-full max-w-screen-xl flex-1 flex-col\",\n\t\t\"p-20\",\n\t\t\"md:p-56\",\n\t\t\"lg:p-72\",\n\t],\n});\n\nexport interface HeroHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Header slot for Hero - used for navigation, gov banners, etc.\n * Full-width with no padding, sits at the top of the hero.\n */\nconst HeroHeader = React.forwardRef<HTMLDivElement, HeroHeaderProps>(\n\t({ className, ...props }, ref) => (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={heroHeaderVariants({ class: className })}\n\t\t\t{...props}\n\t\t/>\n\t),\n);\nHeroHeader.displayName = \"Hero.Header\";\n\nexport interface HeroContentProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Content container for Hero - use for main content.\n * Has padding and sits above backgrounds with z-10.\n */\nconst HeroContent = React.forwardRef<HTMLDivElement, HeroContentProps>(\n\t({ className, ...props }, ref) => (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={heroContentVariants({ class: className })}\n\t\t\t{...props}\n\t\t/>\n\t),\n);\nHeroContent.displayName = \"Hero.Content\";\n\n// =============================================================================\n// Hero Component\n// =============================================================================\n\nexport interface HeroProps\n\textends Omit<React.HTMLAttributes<HTMLElement>, \"title\">,\n\t\tVariantProps<typeof heroVariants> {\n\t/**\n\t * The title text displayed in the hero.\n\t * If provided, renders an h1 with default typography.\n\t * Omit to use children for custom content composition.\n\t */\n\ttitle?: string;\n\t/**\n\t * Custom typography class for the title using primitive tokens.\n\t * Default: \"typography-h1-display\"\n\t */\n\ttitleClassName?: string;\n\t/**\n\t * Color scheme for text content.\n\t * - dark: Dark text for use on light backgrounds (default)\n\t * - light: Light text for use on dark backgrounds\n\t */\n\tcolorScheme?: \"dark\" | \"light\";\n\t// Note: contentAlign is provided by VariantProps<typeof heroVariants>\n\t// Options: \"top\" | \"center\" | \"bottom\"\n\t/**\n\t * Content for the top slot (full-width, no padding).\n\t * Use for USGovBanner, Navigation, etc.\n\t */\n\ttop?: React.ReactNode;\n\t/**\n\t * Indicator slot for scroll hints, arrows, or other visual cues.\n\t * Rendered at the bottom of the hero, below the main content.\n\t * @example\n\t * ```tsx\n\t * <Hero indicator={<ChevronDown className=\"animate-bounce\" />}>\n\t * <h1>Welcome</h1>\n\t * </Hero>\n\t * ```\n\t */\n\tindicator?: React.ReactNode;\n\t/**\n\t * Background for the hero. Can be:\n\t * - A color string (hex, rgb, etc.) for solid backgrounds\n\t * - A ReactNode (use HeroBackground.Image, HeroBackground.Video, or HeroBackground.Stream)\n\t */\n\tbackground?: React.ReactNode | string;\n\t/**\n\t * Opacity of the overlay (0-1, default: 0)\n\t * Only applies when using a background slot\n\t */\n\toverlayOpacity?: number;\n\t/**\n\t * Color of the overlay (default: \"black\")\n\t */\n\toverlayColor?: string;\n\t/**\n\t * Border radius for the hero container\n\t * Useful for designs with rounded bottom corners\n\t */\n\tborderRadius?: string;\n\t/**\n\t * Theme overrides for component styling via CSS custom properties\n\t */\n\ttheme?: ComponentTheme;\n}\n\n/**\n * Checks if the background prop is a color string\n */\nfunction isColorString(\n\tbackground: React.ReactNode | string | undefined,\n): background is string {\n\treturn (\n\t\ttypeof background === \"string\" &&\n\t\t(background.startsWith(\"#\") ||\n\t\t\tbackground.startsWith(\"rgb\") ||\n\t\t\tbackground.startsWith(\"hsl\") ||\n\t\t\t/^(var\\(|[a-z]+$)/i.test(background))\n\t);\n}\n\n/**\n * Hero component for page headers with large display typography.\n *\n * Slots:\n * - `top`: Full-width slot at top for USGovBanner, Navigation (no padding)\n * - `children`: Main content slot with padding and alignment\n *\n * The `title` prop is a convenience for simple heroes - it renders an h1 with\n * responsive typography. Children are always rendered, so you can use both\n * or just children for full control.\n *\n * Variants:\n * - A1: Content at bottom (default)\n * - A2: Content at top\n * - A3: Content centered\n *\n * @example\n * ```tsx\n * // Simple - just title and background\n * <Hero title=\"Welcome\" background=\"#1a1a1a\" />\n *\n * // With top slot for banner/nav\n * <Hero\n * variant=\"A1\"\n * background={<HeroBackground.Image src=\"/hero.jpg\" />}\n * top={\n * <>\n * <USGovBanner variant=\"inverted\" />\n * <Navigation />\n * </>\n * }\n * >\n * <h1>Board of Peace</h1>\n * <p>Subtitle goes here</p>\n * </Hero>\n * ```\n */\nconst Hero = React.forwardRef<HTMLElement, HeroProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tchildren,\n\t\t\ttitle,\n\t\t\ttitleClassName,\n\t\t\tcolorScheme = \"dark\",\n\t\t\tcontentAlign,\n\t\t\ttop,\n\t\t\tindicator,\n\t\t\tvariant,\n\t\t\tbackground,\n\t\t\toverlayOpacity = 0,\n\t\t\toverlayColor = \"black\",\n\t\t\tborderRadius,\n\t\t\ttheme,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isColor = isColorString(background);\n\t\tconst hasMediaBackground = background && !isColor;\n\t\tconst styles = heroVariants({\n\t\t\tvariant,\n\t\t\tcontentAlign,\n\t\t\tcolorScheme,\n\t\t\thasBackground: !!background,\n\t\t});\n\t\tconst themeStyles = themeToStyleVars(theme);\n\t\tconst combinedStyles = {\n\t\t\t...themeStyles,\n\t\t\t...(isColor ? { backgroundColor: background } : {}),\n\t\t\t...(borderRadius ? { borderRadius } : {}),\n\t\t\t...style,\n\t\t};\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={styles.root({ class: className })}\n\t\t\t\tstyle={\n\t\t\t\t\tObject.keys(combinedStyles).length > 0 ? combinedStyles : undefined\n\t\t\t\t}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{hasMediaBackground && background}\n\n\t\t\t\t{hasMediaBackground && overlayOpacity > 0 && (\n\t\t\t\t\t<BackgroundOverlay\n\t\t\t\t\t\topacity={overlayOpacity}\n\t\t\t\t\t\tclassName={overlayColor !== \"black\" ? undefined : \"bg-black\"}\n\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\toverlayColor !== \"black\"\n\t\t\t\t\t\t\t\t? { backgroundColor: overlayColor }\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{top && <div className={styles.top()}>{top}</div>}\n\n\t\t\t\t<div className={styles.content()}>\n\t\t\t\t\t{title && (\n\t\t\t\t\t\t<h1 className={styles.title({ class: titleClassName })}>{title}</h1>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Children - always render if provided */}\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Indicator slot - scroll hints, arrows, etc. */}\n\t\t\t\t{indicator && <div className={styles.indicator()}>{indicator}</div>}\n\t\t\t</section>\n\t\t);\n\t},\n) as React.ForwardRefExoticComponent<\n\tHeroProps & React.RefAttributes<HTMLElement>\n> & {\n\tHeader: typeof HeroHeader;\n\tContent: typeof HeroContent;\n};\nHero.displayName = \"Hero\";\n\n// Attach sub-components\nHero.Header = HeroHeader;\nHero.Content = HeroContent;\n\nexport {\n\tHero,\n\theroVariants,\n\theroContentVariants,\n\theroHeaderVariants,\n\tDEFAULT_TITLE_TYPOGRAPHY,\n\tHeroHeader,\n\tHeroContent,\n};\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface ProseProps extends React.HTMLAttributes<HTMLDivElement> {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Prose container for long-form content with proper typography and spacing.\n *\n * Provides responsive spacing between content blocks:\n * - Desktop (1440px+): 96px gap\n * - Tablet (768px+): 72px gap\n * - Mobile: 56px gap\n *\n * Use with ProseSection components for proper content structure.\n */\nconst Prose = React.forwardRef<HTMLDivElement, ProseProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full max-w-[700px] flex-col overflow-hidden\",\n\t\t\t\t\t// Responsive gap between sections\n\t\t\t\t\t\"gap-56 md:gap-72 xl:gap-96\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t},\n);\nProse.displayName = \"Prose\";\n\nexport interface ProseSectionProps extends React.HTMLAttributes<HTMLElement> {\n\t/**\n\t * The heading text for this section\n\t */\n\theading: string;\n\t/**\n\t * The heading level to render (h2 or h3)\n\t * @default \"h2\"\n\t */\n\tas?: \"h2\" | \"h3\";\n\tchildren: React.ReactNode;\n}\n\n/**\n * A section within Prose content, containing a heading and body text.\n *\n * Responsive typography:\n * - h2: Uses typography-h3\n * - h3: Uses typography-h4\n * - Body: Uses typography-body-medium\n */\nconst ProseSection = React.forwardRef<HTMLElement, ProseSectionProps>(\n\t({ className, heading, as = \"h2\", children, ...props }, ref) => {\n\t\tconst Heading = as;\n\t\tconst headingClass = as === \"h2\" ? \"typography-h3\" : \"typography-h4\";\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex w-full flex-col\",\n\t\t\t\t\t// Responsive gap between heading and body\n\t\t\t\t\t\"gap-24 md:gap-40\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Heading className={cn(headingClass, \"text-gray-900\")}>\n\t\t\t\t\t{heading}\n\t\t\t\t</Heading>\n\t\t\t\t<div className=\"typography-body-medium flex flex-col gap-[1em] text-gray-800 break-words\">\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nProseSection.displayName = \"ProseSection\";\n\nexport { Prose, ProseSection };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { BackgroundOverlay } from \"@/components/atoms/background\";\n\n// =============================================================================\n// QuoteBlock Variants\n// =============================================================================\n\nconst quoteBlockVariants = tv({\n\tslots: {\n\t\troot: \"relative flex min-h-[500px] w-full flex-col overflow-hidden rounded-radius-8\",\n\t\tcontent: [\n\t\t\t\"relative z-10 flex max-w-[1440px] flex-1 flex-col items-start justify-end\",\n\t\t\t\"p-40\",\n\t\t\t\"md:p-80\",\n\t\t\t\"lg:p-112\",\n\t\t],\n\t\tquoteWrapper: \"relative flex flex-col gap-40 md:gap-48\",\n\t\tquote: [\n\t\t\t\"relative text-text-inverted\",\n\t\t\t\"typography-small-headline-small\",\n\t\t\t\"md:typography-medium-headline-small\",\n\t\t\t\"lg:typography-large-headline-small\",\n\t\t\t\"font-serif md:font-serif lg:font-serif\",\n\t\t],\n\t\topenQuote: [\n\t\t\t\"absolute text-text-inverted\",\n\t\t\t\"typography-small-headline-small\",\n\t\t\t\"md:typography-medium-headline-small\",\n\t\t\t\"lg:typography-large-headline-small\",\n\t\t\t\"font-serif md:font-serif lg:font-serif\",\n\t\t\t\"-left-[0.5em] -top-[0.1em]\",\n\t\t],\n\t\tattribution: \"flex flex-col items-start gap-4\",\n\t\tsignature: \"h-auto w-[120px] md:w-[153px]\",\n\t\tbyline: \"flex flex-col text-text-inverted\",\n\t\tbylineName: \"typography-body-medium text-text-inverted\",\n\t\tbylineTitle: \"typography-body-medium text-text-inverted opacity-80\",\n\t},\n\tvariants: {\n\t\tsize: {\n\t\t\tdefault: {\n\t\t\t\troot: \"\",\n\t\t\t},\n\t\t\tcompact: {\n\t\t\t\troot: \"min-h-[400px] lg:min-h-[600px]\",\n\t\t\t},\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tsize: \"default\",\n\t},\n});\n\n// =============================================================================\n// QuoteBlock Component\n// =============================================================================\n\nexport interface QuoteBlockProps\n\textends Omit<React.HTMLAttributes<HTMLElement>, \"children\">,\n\t\tVariantProps<typeof quoteBlockVariants> {\n\t/**\n\t * The quote text to display\n\t */\n\tquote: string;\n\t/**\n\t * Whether to show decorative quote marks\n\t * @default true\n\t */\n\tshowQuoteMarks?: boolean;\n\t/**\n\t * Signature image URL (optional)\n\t */\n\tsignatureImage?: string;\n\t/**\n\t * Alt text for signature image\n\t */\n\tsignatureAlt?: string;\n\t/**\n\t * Attribution name (e.g., \"Donald J. Trump\")\n\t */\n\tattributionName?: string;\n\t/**\n\t * Attribution title (e.g., \"45 & 47 President of the United States\")\n\t */\n\tattributionTitle?: string;\n\t/**\n\t * Background element - use BackgroundImage or similar\n\t */\n\tbackground?: React.ReactNode;\n\t/**\n\t * Overlay opacity (0-1)\n\t */\n\toverlayOpacity?: number;\n\t/**\n\t * Overlay color\n\t */\n\toverlayColor?: string;\n\t/**\n\t * Custom class for the quote text\n\t */\n\tquoteClassName?: string;\n\t/**\n\t * Custom class for the byline name\n\t */\n\tbylineNameClassName?: string;\n\t/**\n\t * Custom class for the byline title\n\t */\n\tbylineTitleClassName?: string;\n}\n\nconst QuoteBlock = React.forwardRef<HTMLElement, QuoteBlockProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tquote,\n\t\t\tshowQuoteMarks = true,\n\t\t\tsignatureImage,\n\t\t\tsignatureAlt = \"Signature\",\n\t\t\tattributionName,\n\t\t\tattributionTitle,\n\t\t\tbackground,\n\t\t\toverlayOpacity = 0,\n\t\t\toverlayColor = \"black\",\n\t\t\tquoteClassName,\n\t\t\tbylineNameClassName,\n\t\t\tbylineTitleClassName,\n\t\t\tsize,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst styles = quoteBlockVariants({ size });\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={styles.root({ class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Background */}\n\t\t\t\t{background}\n\n\t\t\t\t{/* Overlay */}\n\t\t\t\t{overlayOpacity > 0 && (\n\t\t\t\t\t<BackgroundOverlay\n\t\t\t\t\t\topacity={overlayOpacity}\n\t\t\t\t\t\tclassName={overlayColor !== \"black\" ? undefined : \"bg-black\"}\n\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\toverlayColor !== \"black\"\n\t\t\t\t\t\t\t\t? { backgroundColor: overlayColor }\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Content */}\n\t\t\t\t<div className={styles.content()}>\n\t\t\t\t\t<div className={styles.quoteWrapper()}>\n\t\t\t\t\t\t{/* Quote */}\n\t\t\t\t\t\t<blockquote className={styles.quote({ class: quoteClassName })}>\n\t\t\t\t\t\t\t{showQuoteMarks && (\n\t\t\t\t\t\t\t\t<span className={styles.openQuote()} aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<span className=\"relative\">\n\t\t\t\t\t\t\t\t{showQuoteMarks ? `${quote}\"` : quote}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</blockquote>\n\n\t\t\t\t\t\t{/* Attribution */}\n\t\t\t\t\t\t{(signatureImage || attributionName || attributionTitle) && (\n\t\t\t\t\t\t\t<div className={styles.attribution()}>\n\t\t\t\t\t\t\t\t{signatureImage && (\n\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\tsrc={signatureImage}\n\t\t\t\t\t\t\t\t\t\talt={signatureAlt}\n\t\t\t\t\t\t\t\t\t\tclassName={styles.signature()}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{(attributionName || attributionTitle) && (\n\t\t\t\t\t\t\t\t\t<div className={styles.byline()}>\n\t\t\t\t\t\t\t\t\t\t{attributionName && (\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={styles.bylineName({\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass: bylineNameClassName,\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{attributionName}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{attributionTitle && (\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={styles.bylineTitle({\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass: bylineTitleClassName,\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{attributionTitle}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\n\nQuoteBlock.displayName = \"QuoteBlock\";\n\nexport { QuoteBlock, quoteBlockVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * River component for content sections with text and media\n *\n * Variants:\n * - A: Text on left (9 cols), media on right (15 cols) on desktop\n * - B: Media on left (15 cols), text on right (9 cols) on desktop\n *\n * Uses the 24-column grid system. Must be placed inside a `grid-container`.\n */\nconst riverVariants = tv({\n\t// Base styles - col-full within parent grid, responsive padding using primitive spacing tokens\n\tbase: [\n\t\t\"col-full\",\n\t\t// Small (mobile): 20px x, 72px top, 20px bottom\n\t\t\"px-20 pt-72 pb-20\",\n\t\t// Medium (tablet): 56px x, 96px y\n\t\t\"md:px-56 md:py-96\",\n\t\t// Large (desktop): 72px x, 128px y\n\t\t\"lg:px-72 lg:py-128\",\n\t],\n\tvariants: {\n\t\tvariant: {\n\t\t\tA: \"\",\n\t\t\tB: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"A\",\n\t},\n});\n\nexport interface RiverProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof riverVariants> {\n\t/**\n\t * The headline text\n\t */\n\theadline: string;\n\t/**\n\t * The body text\n\t */\n\tbody: string;\n\t/**\n\t * Primary action button (required)\n\t */\n\tprimaryAction: React.ReactNode;\n\t/**\n\t * Secondary action button (optional)\n\t */\n\tsecondaryAction?: React.ReactNode;\n\t/**\n\t * Media content (image, video, etc.)\n\t */\n\tmedia: React.ReactNode;\n}\n\n/**\n * River component for content sections with text and media.\n *\n * Uses the 24-column grid system - must be placed inside a `grid-container`.\n *\n * Layout:\n * - Mobile/Tablet: Stacked (text above media)\n * - Desktop (lg+):\n * - Variant A: Text (9 cols) | Media (15 cols)\n * - Variant B: Media (15 cols) | Text (9 cols)\n *\n * @example\n * ```tsx\n * <div className=\"grid-container\">\n * <River\n * variant=\"A\"\n * headline=\"Feature Headline\"\n * body=\"Description of the feature...\"\n * primaryAction={<Button>Primary</Button>}\n * secondaryAction={<Button variant=\"outline\">Secondary</Button>}\n * media={<img src=\"...\" alt=\"Feature\" />}\n * />\n * </div>\n * ```\n */\nconst River = React.forwardRef<HTMLElement, RiverProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant,\n\t\t\theadline,\n\t\t\tbody,\n\t\t\tprimaryAction,\n\t\t\tsecondaryAction,\n\t\t\tmedia,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst contentColumn = (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\t// Full width on mobile/tablet, 9 cols on desktop\n\t\t\t\t\t\"lg:col-span-9\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Text content with 16px gap - uses primitive spacing tokens */}\n\t\t\t\t<div className=\"flex flex-col gap-16\">\n\t\t\t\t\t<h2 className=\"typography-h4 text-gray-900\">{headline}</h2>\n\t\t\t\t\t<p className=\"typography-body-small text-gray-800\">{body}</p>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Buttons with 36px gap from text, responsive sizes - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"flex flex-row gap-16 mt-36\", \"[&>*]:flex-shrink-0\")}\n\t\t\t\t>\n\t\t\t\t\t{primaryAction}\n\t\t\t\t\t{secondaryAction}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\n\t\tconst mediaColumn = (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Full width on mobile/tablet, 15 cols on desktop\n\t\t\t\t\t\"lg:col-span-15\",\n\t\t\t\t\t// Ensure media fills the container\n\t\t\t\t\t\"[&>*]:w-full [&>*]:h-auto\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{media}\n\t\t\t</div>\n\t\t);\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={riverVariants({ variant, class: className })}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Inner grid container for 24-col layout - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"grid grid-cols-1 gap-36\", \"lg:grid-cols-24 lg:gap-36\")}\n\t\t\t\t>\n\t\t\t\t\t{variant === \"B\" ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{mediaColumn}\n\t\t\t\t\t\t\t{contentColumn}\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{contentColumn}\n\t\t\t\t\t\t\t{mediaColumn}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nRiver.displayName = \"River\";\n\nexport { River, riverVariants };\n","import * as React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { type ComponentTheme, themeToStyleVars } from \"@/lib/theme\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * Tout variants for background and content styling\n */\nconst toutVariants = tv({\n\tbase: [\n\t\t// Full width\n\t\t\"w-full\",\n\t\t// Positioning context for background\n\t\t\"relative overflow-hidden\",\n\t\t// Responsive height: 600px mobile, 750px tablet, 900px desktop\n\t\t\"h-[600px] md:h-[750px] lg:h-[900px]\",\n\t],\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tlight: \"\",\n\t\t\tdark: \"\",\n\t\t},\n\t\talign: {\n\t\t\tleft: \"\",\n\t\t\tcenter: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"light\",\n\t\talign: \"left\",\n\t},\n});\n\n/**\n * Tout component based on Figma BaseKit / Touts\n *\n * A full-bleed section with a background image and overlaid content.\n * Content can be positioned on the left side or centered.\n *\n * Color schemes:\n * - light: Light text styling (default)\n * - dark: Dark text styling\n *\n * Alignment:\n * - left: Content aligned to the left (default)\n * - center: Content centered\n *\n * Responsive behavior:\n * - Mobile (sm): 600px height, 4 columns with gap-20, content spans all 4 cols\n * - Tablet (md): 750px height, 12 columns with gap-20, content spans 9 cols (left) or centered\n * - Desktop (lg): 900px height, 24 columns with gap-20, content spans 9 cols (left) or centered\n *\n * This component is self-contained - do NOT wrap in a grid-container.\n */\nexport interface ToutProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof toutVariants> {\n\t/**\n\t * The headline displayed in the tout\n\t */\n\theadline: React.ReactNode;\n\t/**\n\t * The body text displayed below the headline (optional)\n\t */\n\tbody?: string;\n\t/**\n\t * Primary action button (required)\n\t */\n\tprimaryAction: React.ReactNode;\n\t/**\n\t * Secondary action button (optional)\n\t */\n\tsecondaryAction?: React.ReactNode;\n\t/**\n\t * Background media (image or video element)\n\t * Should be a full-bleed element that covers the entire section\n\t */\n\tbackgroundMedia: React.ReactNode;\n\t/**\n\t * Optional footer content to display at the bottom of the section.\n\t * Use with NdstudioFooter component for the branded footer.\n\t */\n\tfooter?: React.ReactNode;\n\t/**\n\t * Component-level theme overrides.\n\t * Allows customization of colors, spacing, and surface properties.\n\t */\n\ttheme?: ComponentTheme;\n}\n\n/**\n * Tout component for hero-like sections with background media and overlaid content.\n *\n * This component is self-contained with its own grid.\n * Grid setup:\n * - Desktop (lg): 24 columns, gap-20, content spans 9 cols\n * - Tablet (md): 12 columns, gap-20, content spans 9 cols\n * - Mobile: 4 columns, gap-20, content spans all 4 cols\n *\n * @example\n * ```tsx\n * <Tout\n * headline=\"Feature Headline\"\n * body=\"Description of the feature...\"\n * primaryAction={<Button>Primary</Button>}\n * secondaryAction={<Button variant=\"outline\" colorScheme=\"light\">Secondary</Button>}\n * backgroundMedia={\n * <img\n * src=\"/background.jpg\"\n * alt=\"\"\n * className=\"absolute inset-0 w-full h-full object-cover\"\n * />\n * }\n * footer={<NdstudioFooter />}\n * />\n * ```\n */\nconst Tout = React.forwardRef<HTMLElement, ToutProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tcolorScheme = \"light\",\n\t\t\talign = \"left\",\n\t\t\theadline,\n\t\t\tbody,\n\t\t\tprimaryAction,\n\t\t\tsecondaryAction,\n\t\t\tbackgroundMedia,\n\t\t\tfooter,\n\t\t\ttheme,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isCentered = align === \"center\";\n\t\tconst isDark = colorScheme === \"dark\";\n\t\tconst themeStyles = themeToStyleVars(theme);\n\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={toutVariants({ colorScheme, align, class: className })}\n\t\t\t\tstyle={{ ...themeStyles, ...style }}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Background layer - full bleed */}\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"absolute inset-0 pointer-events-none\"\n\t\t\t\t>\n\t\t\t\t\t{/* Fallback background color */}\n\t\t\t\t\t<div className=\"absolute inset-0 bg-gray-500\" />\n\t\t\t\t\t{/* Background media */}\n\t\t\t\t\t{backgroundMedia}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Inner grid for content alignment - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t// Position above background\n\t\t\t\t\t\t\"relative z-10\",\n\t\t\t\t\t\t// Grid setup with responsive columns\n\t\t\t\t\t\t\"grid w-full h-full\",\n\t\t\t\t\t\t// Mobile: 4 columns with gap-20\n\t\t\t\t\t\t\"grid-cols-4 gap-20\",\n\t\t\t\t\t\t// Tablet (md): 12 columns\n\t\t\t\t\t\t\"md:grid-cols-12\",\n\t\t\t\t\t\t// Desktop (lg): 24 columns\n\t\t\t\t\t\t\"lg:grid-cols-24\",\n\t\t\t\t\t\t// Max width and centering like grid-container\n\t\t\t\t\t\t\"max-w-[var(--breakpoint-lg)] mx-auto\",\n\t\t\t\t\t\t// Responsive margins matching grid-container - uses primitive spacing tokens\n\t\t\t\t\t\t\"px-20 md:px-56 lg:px-72\",\n\t\t\t\t\t\t// Vertical padding to position content at bottom - uses primitive spacing tokens\n\t\t\t\t\t\t\"py-36 md:py-56 lg:py-72\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t// Grid spacing theme overrides\n\t\t\t\t\t\t...(theme?.spatial?.gridSmallMargin && {\n\t\t\t\t\t\t\tpaddingLeft: \"var(--theme-grid-small-margin)\",\n\t\t\t\t\t\t\tpaddingRight: \"var(--theme-grid-small-margin)\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t...(theme?.spatial?.gridSmallGutter && {\n\t\t\t\t\t\t\tgap: \"var(--theme-grid-small-gutter)\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Content column - aligned to grid */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t// Flex container for content\n\t\t\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\t\t\tisCentered ? \"justify-start items-center\" : \"justify-end\",\n\t\t\t\t\t\t\t// Responsive gap between text and buttons - uses primitive spacing tokens\n\t\t\t\t\t\t\t\"gap-28 md:gap-36\",\n\t\t\t\t\t\t\t// Mobile: all 4 cols\n\t\t\t\t\t\t\t\"col-span-4\",\n\t\t\t\t\t\t\t// Tablet & Desktop: 9 cols left-aligned, full width centered\n\t\t\t\t\t\t\tisCentered ? \"md:col-span-12 lg:col-span-24\" : \"md:col-span-9\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Text content stack - uses primitive spacing tokens */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex flex-col gap-16\",\n\t\t\t\t\t\t\t\tisCentered && \"items-center text-center\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<h2\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"typography-h4\",\n\t\t\t\t\t\t\t\t\tisDark ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tcolor: theme?.colors?.textPrimary\n\t\t\t\t\t\t\t\t\t\t? \"var(--theme-text-primary)\"\n\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{headline}\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t\t{body && (\n\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"typography-body-small\",\n\t\t\t\t\t\t\t\t\t\tisDark ? \"text-gray-400\" : \"text-gray-800\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tcolor: theme?.colors?.textSecondary\n\t\t\t\t\t\t\t\t\t\t\t? \"var(--theme-text-secondary)\"\n\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{body}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* CTA buttons - uses primitive spacing tokens */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex flex-row\",\n\t\t\t\t\t\t\t\tisCentered ? \"justify-center\" : \"items-start\",\n\t\t\t\t\t\t\t\t// Responsive gap between buttons\n\t\t\t\t\t\t\t\t\"gap-8 md:gap-12\",\n\t\t\t\t\t\t\t\t\"[&>*]:flex-shrink-0\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{primaryAction}\n\t\t\t\t\t\t\t{secondaryAction}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Footer slot */}\n\t\t\t\t{footer && (\n\t\t\t\t\t<div className=\"absolute bottom-6 md:bottom-8 left-0 right-0 z-10\">\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</section>\n\t\t);\n\t},\n);\nTout.displayName = \"Tout\";\n\nexport { Tout, toutVariants };\n","\"use client\";\n\nimport * as React from \"react\";\n\n/**\n * Design system breakpoint values in pixels.\n * These match the primitive breakpoint tokens from packages/tokens.\n */\nexport const BREAKPOINTS = {\n\tsm: 320,\n\tmd: 768,\n\tlg: 1440,\n} as const;\n\nexport type Breakpoint = keyof typeof BREAKPOINTS;\n\n/**\n * Get the current breakpoint based on viewport width.\n */\nfunction getCurrentBreakpoint(width: number): Breakpoint {\n\tif (width >= BREAKPOINTS.lg) return \"lg\";\n\tif (width >= BREAKPOINTS.md) return \"md\";\n\treturn \"sm\";\n}\n\n/**\n * Hook to get the current responsive breakpoint.\n * Returns the active breakpoint name based on viewport width.\n *\n * @returns The current breakpoint: 'sm' | 'md' | 'lg'\n *\n * @example\n * ```tsx\n * function Component() {\n * const breakpoint = useBreakpoint();\n *\n * return (\n * <div>\n * {breakpoint === 'sm' && <MobileLayout />}\n * {breakpoint === 'md' && <TabletLayout />}\n * {breakpoint === 'lg' && <DesktopLayout />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useBreakpoint(): Breakpoint {\n\tconst [breakpoint, setBreakpoint] = React.useState<Breakpoint>(() => {\n\t\tif (typeof window === \"undefined\") return \"sm\";\n\t\treturn getCurrentBreakpoint(window.innerWidth);\n\t});\n\n\tReact.useEffect(() => {\n\t\tconst handleResize = () => {\n\t\t\tsetBreakpoint(getCurrentBreakpoint(window.innerWidth));\n\t\t};\n\n\t\t// Set initial value\n\t\thandleResize();\n\n\t\twindow.addEventListener(\"resize\", handleResize);\n\t\treturn () => window.removeEventListener(\"resize\", handleResize);\n\t}, []);\n\n\treturn breakpoint;\n}\n\n/**\n * Hook to check if viewport is at or above a specific breakpoint.\n *\n * @param breakpoint - The minimum breakpoint to check against\n * @returns boolean indicating if viewport is at or above the breakpoint\n *\n * @example\n * ```tsx\n * function Component() {\n * const isDesktop = useMinBreakpoint('lg');\n * const isTabletUp = useMinBreakpoint('md');\n *\n * return isDesktop ? <DesktopView /> : <MobileView />;\n * }\n * ```\n */\nexport function useMinBreakpoint(breakpoint: Breakpoint): boolean {\n\tconst [matches, setMatches] = React.useState<boolean>(() => {\n\t\tif (typeof window === \"undefined\") return false;\n\t\treturn window.innerWidth >= BREAKPOINTS[breakpoint];\n\t});\n\n\tReact.useEffect(() => {\n\t\tconst mediaQuery = window.matchMedia(\n\t\t\t`(min-width: ${BREAKPOINTS[breakpoint]}px)`,\n\t\t);\n\n\t\tsetMatches(mediaQuery.matches);\n\n\t\tconst handleChange = (event: MediaQueryListEvent) => {\n\t\t\tsetMatches(event.matches);\n\t\t};\n\n\t\tmediaQuery.addEventListener(\"change\", handleChange);\n\t\treturn () => mediaQuery.removeEventListener(\"change\", handleChange);\n\t}, [breakpoint]);\n\n\treturn matches;\n}\n\n/**\n * Hook to check if viewport is below a specific breakpoint.\n *\n * @param breakpoint - The breakpoint to check against\n * @returns boolean indicating if viewport is below the breakpoint\n *\n * @example\n * ```tsx\n * function Component() {\n * const isMobile = useMaxBreakpoint('md'); // Below tablet\n *\n * return isMobile ? <MobileNav /> : <DesktopNav />;\n * }\n * ```\n */\nexport function useMaxBreakpoint(breakpoint: Breakpoint): boolean {\n\tconst [matches, setMatches] = React.useState<boolean>(() => {\n\t\tif (typeof window === \"undefined\") return false;\n\t\treturn window.innerWidth < BREAKPOINTS[breakpoint];\n\t});\n\n\tReact.useEffect(() => {\n\t\tconst mediaQuery = window.matchMedia(\n\t\t\t`(max-width: ${BREAKPOINTS[breakpoint] - 1}px)`,\n\t\t);\n\n\t\tsetMatches(mediaQuery.matches);\n\n\t\tconst handleChange = (event: MediaQueryListEvent) => {\n\t\t\tsetMatches(event.matches);\n\t\t};\n\n\t\tmediaQuery.addEventListener(\"change\", handleChange);\n\t\treturn () => mediaQuery.removeEventListener(\"change\", handleChange);\n\t}, [breakpoint]);\n\n\treturn matches;\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\ntype EventMap<T> = T extends Window\n\t? WindowEventMap\n\t: T extends Document\n\t\t? DocumentEventMap\n\t\t: T extends HTMLElement\n\t\t\t? HTMLElementEventMap\n\t\t\t: never;\n\n/**\n * Custom hook that attaches an event listener to a specified element.\n * Automatically handles cleanup on unmount and when dependencies change.\n *\n * @param eventName - The name of the event to listen for\n * @param handler - The callback function to execute when the event fires\n * @param element - The element to attach the listener to (defaults to window)\n * @param options - Optional event listener options\n *\n * @example\n * ```tsx\n * // Listen to window resize\n * useEventListener('resize', handleResize);\n *\n * // Listen to element scroll\n * useEventListener('scroll', handleScroll, containerRef.current);\n *\n * // With options\n * useEventListener('scroll', handleScroll, window, { passive: true });\n * ```\n */\nexport function useEventListener<\n\tT extends Window | Document | HTMLElement,\n\tK extends keyof EventMap<T>,\n>(\n\teventName: K,\n\thandler: (event: EventMap<T>[K]) => void,\n\telement?: T | null,\n\toptions?: boolean | AddEventListenerOptions,\n): void {\n\t// Store the handler in a ref to avoid re-subscribing on every render\n\tconst savedHandler = React.useRef(handler);\n\n\t// Update ref when handler changes\n\tReact.useLayoutEffect(() => {\n\t\tsavedHandler.current = handler;\n\t}, [handler]);\n\n\tReact.useEffect(() => {\n\t\t// Default to window if no element is provided\n\t\tconst targetElement = element ?? window;\n\n\t\tif (!targetElement?.addEventListener) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst eventListener = (event: Event) => {\n\t\t\tsavedHandler.current(event as EventMap<T>[K]);\n\t\t};\n\n\t\ttargetElement.addEventListener(eventName as string, eventListener, options);\n\n\t\treturn () => {\n\t\t\ttargetElement.removeEventListener(\n\t\t\t\teventName as string,\n\t\t\t\teventListener,\n\t\t\t\toptions,\n\t\t\t);\n\t\t};\n\t}, [eventName, element, options]);\n}\n","/**\n * Collection Types\n *\n * Types for representing Figma variable collections in TypeScript.\n * Collections are the organizational units for design tokens in Figma.\n * Aligned with the token-server API schema.\n */\n\nimport type { TokenTypeName } from \"../types\";\n\n/**\n * Token category - determines which axis of theming this collection affects\n */\nexport type TokenCategory = \"color\" | \"spacing\" | \"typography\" | \"brand\";\n\n/**\n * Collection type - whether this is a base collection or extends another\n */\nexport type CollectionType = \"base\" | \"extended\";\n\n/**\n * A reference to another token using the {token-name} syntax\n */\nexport type TokenReference = `{${string}}`;\n\n/**\n * Color value in DTCG format (from Figma)\n */\nexport interface ColorValue {\n\tcolorSpace: \"srgb\" | \"display-p3\" | \"rec2020\";\n\tcomponents: [number, number, number];\n\talpha: number;\n\thex: string;\n}\n\n/**\n * Dimension value in DTCG format\n */\nexport interface DimensionValue {\n\tvalue: number;\n\tunit: \"px\" | \"rem\" | \"em\" | \"%\";\n}\n\n/**\n * Typography composite value\n */\nexport interface TypographyValue {\n\tfontFamily: string | string[];\n\tfontSize: DimensionValue | string;\n\tfontWeight: number | string;\n\tlineHeight: number | string;\n\tletterSpacing?: DimensionValue | string;\n}\n\n/**\n * Resolved token value - can be any of the supported value types\n */\nexport type ResolvedTokenValue =\n\t| string\n\t| number\n\t| boolean\n\t| ColorValue\n\t| DimensionValue\n\t| TypographyValue\n\t| Record<string, unknown>;\n\n/**\n * A token value can either be a resolved value or a reference to another token\n */\nexport interface CollectionTokenValue {\n\t$type: TokenTypeName | string;\n\t$value: ResolvedTokenValue | TokenReference;\n\t$description?: string;\n}\n\n/**\n * Token set within a collection - wrapper around flat tokens\n * Collections store tokens as: { tokens: { \"token-name\": { $type, $value } } }\n */\nexport type TokenSet = Record<string, CollectionTokenValue>;\n\n/**\n * Collection from the token-server API\n * Matches the database schema in apps/token-server/src/db/schema.ts\n */\nexport interface APICollection {\n\tid: string;\n\tname: string;\n\tdescription: string | null;\n\ttype: CollectionType | null;\n\tbaseCollectionId: string | null;\n\tfigmaCollectionId: string | null;\n\tusesBreakpoints: boolean;\n\ttokens: Record<string, TokenSet | CollectionTokenValue>;\n\tpublishedVersionId: string | null;\n\tcreatedBy: string | null;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\n/**\n * Collection definition - internal representation for theme composition\n *\n * A collection can be either:\n * - A \"base\" collection that defines the foundational tokens\n * - An \"extended\" collection that overrides specific tokens from a base\n */\nexport interface CollectionDefinition {\n\t/** Collection ID (UUID from API) */\n\tid: string;\n\t/** Collection name (e.g., \"Color\", \"Color - Dark\", \"Test Theme\") */\n\tname: string;\n\t/** Whether this is a base collection or extends another */\n\ttype: CollectionType;\n\t/** For extended collections, the ID of the base collection this extends */\n\tbaseCollectionId?: string;\n\t/** Optional description */\n\tdescription?: string;\n\t/** The tokens in this collection - can be nested or flat */\n\ttokens: Record<string, TokenSet | CollectionTokenValue>;\n}\n\n/**\n * Collection metadata without tokens - useful for listings and selection UI\n */\nexport interface CollectionMetadata {\n\tid: string;\n\tname: string;\n\ttype: CollectionType;\n\tbaseCollectionId?: string;\n\tdescription?: string;\n}\n\n/**\n * Convert API collection to internal definition\n */\nexport function apiCollectionToDefinition(\n\tapi: APICollection,\n): CollectionDefinition {\n\treturn {\n\t\tid: api.id,\n\t\tname: api.name,\n\t\ttype: api.baseCollectionId ? \"extended\" : (api.type ?? \"base\"),\n\t\tbaseCollectionId: api.baseCollectionId ?? undefined,\n\t\tdescription: api.description ?? undefined,\n\t\ttokens: api.tokens,\n\t};\n}\n\n/**\n * A registry of all available collections, organized by category\n */\nexport interface CollectionRegistry {\n\tcolor: {\n\t\tbase: CollectionDefinition | null;\n\t\textensions: CollectionDefinition[];\n\t};\n\tspacing: {\n\t\tbase: CollectionDefinition | null;\n\t\textensions: CollectionDefinition[];\n\t};\n\ttypography: {\n\t\tbase: CollectionDefinition | null;\n\t\textensions: CollectionDefinition[];\n\t};\n\tbrand: {\n\t\tbase: CollectionDefinition | null;\n\t\textensions: CollectionDefinition[];\n\t};\n}\n\n/**\n * Type guard to check if a value is a token reference\n */\nexport function isTokenReference(value: unknown): value is TokenReference {\n\treturn (\n\t\ttypeof value === \"string\" && value.startsWith(\"{\") && value.endsWith(\"}\")\n\t);\n}\n\n/**\n * Extract the token name from a reference\n */\nexport function parseTokenReference(ref: TokenReference): string {\n\treturn ref.slice(1, -1);\n}\n\n/**\n * Create a token reference from a token name\n */\nexport function createTokenReference(tokenName: string): TokenReference {\n\treturn `{${tokenName}}` as TokenReference;\n}\n\n/**\n * Type guard to check if a value is a color value object\n */\nexport function isColorValue(value: unknown): value is ColorValue {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst obj = value as Record<string, unknown>;\n\treturn (\n\t\t\"colorSpace\" in obj &&\n\t\t\"components\" in obj &&\n\t\tArray.isArray(obj.components) &&\n\t\tobj.components.length === 3\n\t);\n}\n\n/**\n * Type guard to check if a value is a dimension value object\n */\nexport function isDimensionValue(value: unknown): value is DimensionValue {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst obj = value as Record<string, unknown>;\n\treturn \"value\" in obj && \"unit\" in obj && typeof obj.value === \"number\";\n}\n","import type { JSONTokenTree } from \"@nds-design-system/design-tokens-format\";\n\n/**\n * Deep merge multiple token trees into a single tree\n */\nexport function mergeTokenTrees(...trees: JSONTokenTree[]): JSONTokenTree {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (const tree of trees) {\n\t\tdeepMerge(result, tree as Record<string, unknown>);\n\t}\n\n\treturn result as JSONTokenTree;\n}\n\n/**\n * Deep merge two objects, with source overwriting target\n */\nfunction deepMerge(\n\ttarget: Record<string, unknown>,\n\tsource: Record<string, unknown>,\n): void {\n\tfor (const [key, value] of Object.entries(source)) {\n\t\tif (key in target) {\n\t\t\tconst targetValue = target[key];\n\n\t\t\t// If both are objects (and not null), merge recursively\n\t\t\tif (isPlainObject(targetValue) && isPlainObject(value)) {\n\t\t\t\tdeepMerge(\n\t\t\t\t\ttargetValue as Record<string, unknown>,\n\t\t\t\t\tvalue as Record<string, unknown>,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Otherwise, source overwrites target\n\t\t\t\ttarget[key] = value;\n\t\t\t}\n\t\t} else {\n\t\t\t// Key doesn't exist in target, add it\n\t\t\ttarget[key] = value;\n\t\t}\n\t}\n}\n\n/**\n * Check if value is a plain object (not array, null, etc.)\n */\nfunction isPlainObject(value: unknown): boolean {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t!Array.isArray(value) &&\n\t\tObject.prototype.toString.call(value) === \"[object Object]\"\n\t);\n}\n\n/**\n * Flatten a nested token tree into a flat map of paths to tokens\n */\nexport function flattenTokenTree(\n\ttree: JSONTokenTree,\n\tprefix: string[] = [],\n): Map<string, unknown> {\n\tconst result = new Map<string, unknown>();\n\n\tfunction traverse(obj: unknown, path: string[]): void {\n\t\tif (typeof obj !== \"object\" || obj === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst record = obj as Record<string, unknown>;\n\n\t\t// Check if this is a token (has $value)\n\t\tif (\"$value\" in record) {\n\t\t\tresult.set(path.join(\".\"), obj);\n\t\t\treturn;\n\t\t}\n\n\t\t// Otherwise, traverse children\n\t\tfor (const [key, value] of Object.entries(record)) {\n\t\t\tif (!key.startsWith(\"$\")) {\n\t\t\t\ttraverse(value, [...path, key]);\n\t\t\t}\n\t\t}\n\t}\n\n\ttraverse(tree, prefix);\n\treturn result;\n}\n\n/**\n * Sort token tree keys alphabetically for consistent output\n */\nexport function sortTokenTree(tree: JSONTokenTree): JSONTokenTree {\n\tfunction sortObject(obj: unknown): unknown {\n\t\tif (typeof obj !== \"object\" || obj === null) {\n\t\t\treturn obj;\n\t\t}\n\n\t\tif (Array.isArray(obj)) {\n\t\t\treturn obj.map(sortObject);\n\t\t}\n\n\t\tconst record = obj as Record<string, unknown>;\n\t\tconst sorted: Record<string, unknown> = {};\n\n\t\t// Sort keys, but keep $ prefixed keys first\n\t\tconst keys = Object.keys(record).sort((a, b) => {\n\t\t\tconst aHasPrefix = a.startsWith(\"$\");\n\t\t\tconst bHasPrefix = b.startsWith(\"$\");\n\n\t\t\tif (aHasPrefix && !bHasPrefix) return -1;\n\t\t\tif (!aHasPrefix && bHasPrefix) return 1;\n\n\t\t\treturn a.localeCompare(b);\n\t\t});\n\n\t\tfor (const key of keys) {\n\t\t\tsorted[key] = sortObject(record[key]);\n\t\t}\n\n\t\treturn sorted;\n\t}\n\n\treturn sortObject(tree) as JSONTokenTree;\n}\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Base Semantic Color Tokens\n *\n * Matches Figma \"Color\" collection - Default mode.\n * Theme variants (dark, civic, institution, etc.) extend these with partial overrides.\n */\nexport const baseColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tcollectionName: \"Color\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t// Background tokens (color-bg-*)\n\t\t\tbg: {\n\t\t\t\tpage: { $type: \"color\", $value: \"{primitive.color.gray.50}\" },\n\t\t\t\tsection: { $type: \"color\", $value: \"{primitive.color.gray.100}\" },\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.200}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\tmuted: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t},\n\t\t\t// Card token (color-card-*)\n\t\t\tcard: {\n\t\t\t\tbackground: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t},\n\t\t\t// Text tokens (color-text-*)\n\t\t\ttext: {\n\t\t\t\tprimary: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\tsecondary: { $type: \"color\", $value: \"{primitive.color.gray.800}\" },\n\t\t\t\tmuted: { $type: \"color\", $value: \"{primitive.color.gray.600}\" },\n\t\t\t\tinverted: { $type: \"color\", $value: \"{primitive.color.gray.100}\" },\n\t\t\t\tlink: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\t\"link-hover\": { $type: \"color\", $value: \"{primitive.color.gray.700}\" },\n\t\t\t},\n\t\t\t// Accent tokens (color-accent-*)\n\t\t\taccent: {\n\t\t\t\tbrand: { $type: \"color\", $value: \"{primitive.color.indigo.v400}\" },\n\t\t\t\t\"brand-soft\": { $type: \"color\", $value: \"{primitive.color.ember.100}\" },\n\t\t\t},\n\t\t\t// Border tokens (color-border-*)\n\t\t\tborder: {\n\t\t\t\tsubtle: { $type: \"color\", $value: \"{primitive.color.alpha-black.10}\" },\n\t\t\t\tstrong: { $type: \"color\", $value: \"{primitive.color.alpha-black.20}\" },\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.40}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t// Button tokens (color-button-*)\n\t\t\t// Matches Figma Button component variants\n\t\t\tbutton: {\n\t\t\t\t// Primary button (blue filled) - Figma: #4186de\n\t\t\t\tprimary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.blue.500}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.blue.600}\" },\n\t\t\t\t\t\"bg-active\": { $type: \"color\", $value: \"{primitive.color.blue.700}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t\t// Default button (dark filled) - Figma: #141414\n\t\t\t\tdefault: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\t\t\"bg-active\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.50}\" },\n\t\t\t\t},\n\t\t\t\t// Secondary button (light gray filled) - Figma: #f5f5f5\n\t\t\t\tsecondary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.100}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"bg-active\": { $type: \"color\", $value: \"{primitive.color.gray.300}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t\tborder: {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Destructive button (red filled) - Figma: #e53935\n\t\t\t\tdestructive: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.red.500}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.red.600}\" },\n\t\t\t\t\t\"bg-active\": { $type: \"color\", $value: \"{primitive.color.red.700}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t\t// Outline button (bordered, transparent)\n\t\t\t\toutline: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.5}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"bg-active\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t\tborder: { $type: \"color\", $value: \"{primitive.color.gray.300}\" },\n\t\t\t\t\t\"border-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.400}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Ghost button (transparent, subtle hover)\n\t\t\t\tghost: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.5}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"bg-active\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t},\n\t\t\t\t// Link button (text only, underline on hover)\n\t\t\t\tlink: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\t\"bg-active\": { $type: \"color\", $value: \"transparent\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1200}\" },\n\t\t\t\t\t\"text-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.700}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t// Tooltip tokens (color-tooltip-*)\n\t\t\t// Inverted color scheme for tooltip overlays\n\t\t\ttooltip: {\n\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.1000}\" },\n\t\t\t\ttext: { $type: \"color\", $value: \"{semantic.color.text.inverted}\" },\n\t\t\t},\n\t\t\t// Overlay tokens (color-overlay-*)\n\t\t\t// Shared by popover, modal, dropdown, menu (light background, spacious)\n\t\t\toverlay: {\n\t\t\t\tbackground: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.card.background}\",\n\t\t\t\t\t$description: \"Overlay background color (light)\",\n\t\t\t\t},\n\t\t\t\tborder: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.border.subtle}\",\n\t\t\t\t\t$description: \"Overlay border color\",\n\t\t\t\t},\n\t\t\t\ttext: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.text.primary}\",\n\t\t\t\t\t$description: \"Overlay primary text color\",\n\t\t\t\t},\n\t\t\t\t\"text-muted\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.text.muted}\",\n\t\t\t\t\t$description: \"Overlay muted text color\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t// UI tokens (color-ui-*)\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.v400}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.100}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.200}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.1000}\",\n\t\t\t\t},\n\t\t\t\t\"error-color\": { $type: \"color\", $value: \"{primitive.color.red.300}\" },\n\t\t\t\t\"accent-base\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.v300}\",\n\t\t\t\t},\n\t\t\t\t\"accent-base-2\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.v200}\",\n\t\t\t\t},\n\t\t\t\t\"accent-base-3\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.v300}\",\n\t\t\t\t},\n\t\t\t\t// Menu/dropdown item tokens\n\t\t\t\t\"menu-item-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"menu-item-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.25}\",\n\t\t\t\t},\n\t\t\t\t\"menu-item-bg-selected\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.35}\",\n\t\t\t\t},\n\t\t\t\t\"menu-item-text\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\t\"menu-item-text-selected\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.v250}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t// Video Player tokens (color-video-player-*)\n\t\t\t// Used for fullscreen video modal, controls, and captions\n\t\t\t\"video-player\": {\n\t\t\t\t\"controls-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.40}\",\n\t\t\t\t\t$description: \"Video controls bar background (glassmorphic)\",\n\t\t\t\t},\n\t\t\t\t\"controls-text\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t\t$description: \"Video controls text and icons\",\n\t\t\t\t},\n\t\t\t\t\"controls-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t\t$description: \"Video controls hover state\",\n\t\t\t\t},\n\t\t\t\t\"button-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t\t$description: \"Control button background (visible on dark video)\",\n\t\t\t\t},\n\t\t\t\t\"button-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t\t$description: \"Control button hover background\",\n\t\t\t\t},\n\t\t\t\t\"button-bg-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.30}\",\n\t\t\t\t\t$description: \"Control button active/pressed background\",\n\t\t\t\t},\n\t\t\t\t\"caption-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.70}\",\n\t\t\t\t\t$description: \"Caption background overlay\",\n\t\t\t\t},\n\t\t\t\t\"caption-text\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t\t$description: \"Caption text color\",\n\t\t\t\t},\n\t\t\t\t\"backdrop-overlay\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.90}\",\n\t\t\t\t\t$description: \"Modal backdrop overlay\",\n\t\t\t\t},\n\t\t\t\t\"progress-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.30}\",\n\t\t\t\t\t$description: \"Progress bar track background\",\n\t\t\t\t},\n\t\t\t\t\"progress-fill\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t\t$description: \"Progress bar fill color\",\n\t\t\t\t},\n\t\t\t\t\"tooltip-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.90}\",\n\t\t\t\t\t$description: \"Video tooltip background\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { WithAliasValue } from \"./Alias\";\nimport type { TokenSignature } from \"./TokenSignature\";\n\n// Type declaration following the https://tr.designtokens.org/format specification\n\n// 8.1 Color, following the https://tr.designtokens.org/color specification\nconst colorTypeName = \"color\";\nexport const colorSpaceValues = [\n\t\"srgb\",\n\t\"srgb-linear\",\n\t\"hsl\",\n\t\"hwb\",\n\t\"lab\",\n\t\"lch\",\n\t\"oklab\",\n\t\"oklch\",\n\t\"display-p3\",\n\t\"a98-rgb\",\n\t\"prophoto-rgb\",\n\t\"rec2020\",\n\t\"xyz-d65\",\n\t\"xyz-d50\",\n] as const;\nexport namespace Color {\n\texport type TypeName = typeof colorTypeName;\n\n\texport type RawValue = {\n\t\tcolorSpace: (typeof colorSpaceValues)[number];\n\t\tcomponents: [number | \"none\", number | \"none\", number | \"none\"];\n\t\talpha?: number;\n\t\thex?: `#${string}`;\n\t};\n\texport type Value = WithAliasValue<Color.RawValue>;\n\texport type Token = TokenSignature<Color.TypeName, Color.Value>;\n}\n\n// 8.2 Dimension\nconst dimensionTypeName = \"dimension\";\nexport namespace Dimension {\n\texport type TypeName = typeof dimensionTypeName;\n\texport type RawValue = { value: number; unit: \"px\" | \"rem\" };\n\texport type Value = WithAliasValue<Dimension.RawValue>;\n\texport type Token = TokenSignature<Dimension.TypeName, Dimension.Value>;\n}\n\n// 8.3 Font Family\nconst fontFamilyTypeName = \"fontFamily\";\nexport namespace FontFamily {\n\texport type TypeName = typeof fontFamilyTypeName;\n\texport type RawValue = string | Array<string>;\n\texport type Value = WithAliasValue<FontFamily.RawValue>;\n\texport type Token = TokenSignature<FontFamily.TypeName, FontFamily.Value>;\n}\n\n// 8.4 Font Weight\nconst fontWeightTypeName = \"fontWeight\";\nexport const fontWeightValues = [\n\t\"thin\",\n\t\"hairline\",\n\t\"extra-light\",\n\t\"ultra-light\",\n\t\"light\",\n\t\"normal\",\n\t\"regular\",\n\t\"book\",\n\t\"medium\",\n\t\"semi-bold\",\n\t\"demi-bold\",\n\t\"bold\",\n\t\"extra-bold\",\n\t\"ultra-bold\",\n\t\"black\",\n\t\"heavy\",\n\t\"extra-black\",\n\t\"ultra-black\",\n] as const;\nexport namespace FontWeight {\n\texport type TypeName = typeof fontWeightTypeName;\n\texport type RawValue = (typeof fontWeightValues)[number] | number;\n\texport type Value = WithAliasValue<FontWeight.RawValue>;\n\texport type Token = TokenSignature<FontWeight.TypeName, FontWeight.Value>;\n}\n\n// 8.5 Duration\nconst durationTypeName = \"duration\";\nexport namespace Duration {\n\texport type TypeName = typeof durationTypeName;\n\texport type RawValue = { value: number; unit: \"ms\" | \"s\" };\n\texport type Value = WithAliasValue<Duration.RawValue>;\n\texport type Token = TokenSignature<Duration.TypeName, Duration.Value>;\n}\n\n// 8.6 Cubic Bezier\nconst cubicBezierTypeName = \"cubicBezier\";\nexport namespace CubicBezier {\n\texport type TypeName = typeof cubicBezierTypeName;\n\texport type RawValue = [number, number, number, number];\n\texport type Value = WithAliasValue<CubicBezier.RawValue>;\n\texport type Token = TokenSignature<CubicBezier.TypeName, CubicBezier.Value>;\n}\n\n// 8.7 Number\nconst numberTypeName = \"number\";\nexport namespace NumberNs {\n\texport type TypeName = typeof numberTypeName;\n\texport type RawValue = number;\n\texport type Value = WithAliasValue<NumberNs.RawValue>;\n\texport type Token = TokenSignature<NumberNs.TypeName, NumberNs.Value>;\n}\n\n/*\n 9. Composite Types\n https://tr.designtokens.org/format/#composite-types\n*/\n// 9.2 Stroke Style\nconst strokeStyleTypeName = \"strokeStyle\";\nexport const strokeStyleStringValues = [\n\t\"solid\",\n\t\"dashed\",\n\t\"dotted\",\n\t\"double\",\n\t\"groove\",\n\t\"ridge\",\n\t\"outset\",\n\t\"inset\",\n] as const;\nexport const strokeStyleLineCapValues = [\"round\", \"butt\", \"square\"] as const;\nexport namespace StrokeStyle {\n\texport type TypeName = typeof strokeStyleTypeName;\n\texport type RawValue =\n\t\t| (typeof strokeStyleStringValues)[number]\n\t\t| {\n\t\t\t\tdashArray: Dimension.Value[];\n\t\t\t\tlineCap: (typeof strokeStyleLineCapValues)[number];\n\t\t };\n\texport type Value = WithAliasValue<StrokeStyle.RawValue>;\n\texport type Token = TokenSignature<StrokeStyle.TypeName, StrokeStyle.Value>;\n}\n\n// 9.3 Border\nconst borderTypeName = \"border\";\nexport namespace Border {\n\texport type TypeName = typeof borderTypeName;\n\texport type RawValue = {\n\t\tcolor: Color.Value;\n\t\twidth: Dimension.Value;\n\t\tstyle: StrokeStyle.Value;\n\t};\n\texport type Value = WithAliasValue<Border.RawValue>;\n\texport type Token = TokenSignature<Border.TypeName, Border.Value>;\n}\n\n// 9.4 Transition\nconst transitionTypeName = \"transition\";\nexport namespace Transition {\n\texport type TypeName = typeof transitionTypeName;\n\texport type RawValue = {\n\t\tduration: Duration.Value;\n\t\tdelay: Duration.Value;\n\t\ttimingFunction: CubicBezier.Value;\n\t};\n\texport type Value = WithAliasValue<Transition.RawValue>;\n\texport type Token = TokenSignature<Transition.TypeName, Transition.Value>;\n}\n\n// 9.5 Shadow\nconst shadowTypeName = \"shadow\";\nexport namespace Shadow {\n\texport type TypeName = typeof shadowTypeName;\n\texport type RawValue =\n\t\t| Array<{\n\t\t\t\tcolor: Color.Value;\n\t\t\t\toffsetX: Dimension.Value;\n\t\t\t\toffsetY: Dimension.Value;\n\t\t\t\tblur: Dimension.Value;\n\t\t\t\tspread: Dimension.Value;\n\t\t\t\tinset?: boolean;\n\t\t }>\n\t\t| {\n\t\t\t\tcolor: Color.Value;\n\t\t\t\toffsetX: Dimension.Value;\n\t\t\t\toffsetY: Dimension.Value;\n\t\t\t\tblur: Dimension.Value;\n\t\t\t\tspread: Dimension.Value;\n\t\t\t\tinset?: boolean;\n\t\t };\n\texport type Value = WithAliasValue<Shadow.RawValue>;\n\texport type Token = TokenSignature<Shadow.TypeName, Shadow.Value>;\n}\n\n// 9.6 Gradient\nconst gradientTypeName = \"gradient\";\nexport namespace Gradient {\n\texport type TypeName = typeof gradientTypeName;\n\texport type RawValue = Array<{\n\t\tcolor: Color.Value;\n\t\tposition: NumberNs.Value;\n\t}>;\n\texport type Value = WithAliasValue<Gradient.RawValue>;\n\texport type Token = TokenSignature<Gradient.TypeName, Gradient.Value>;\n}\n\n// 9.7 Typography\nconst typographyTypeName = \"typography\";\nexport namespace Typography {\n\texport type TypeName = typeof typographyTypeName;\n\texport type RawValue = {\n\t\tfontFamily: FontFamily.Value;\n\t\tfontSize: Dimension.Value;\n\t\tfontWeight: FontWeight.Value;\n\t\tletterSpacing: Dimension.Value;\n\t\tlineHeight: NumberNs.Value;\n\t};\n\texport type Value = WithAliasValue<Typography.RawValue>;\n\texport type Token = TokenSignature<Typography.TypeName, Typography.Value>;\n}\n\n/* ------------------------------------------\n Mapping Exports\n--------------------------------------------- */\nexport const tokenTypeNames = [\n\tcolorTypeName,\n\tdimensionTypeName,\n\tfontFamilyTypeName,\n\tfontWeightTypeName,\n\tdurationTypeName,\n\tcubicBezierTypeName,\n\tnumberTypeName,\n\tstrokeStyleTypeName,\n\tborderTypeName,\n\ttransitionTypeName,\n\tshadowTypeName,\n\tgradientTypeName,\n\ttypographyTypeName,\n] as const;\n\ntype TokenTypeNamesArray = typeof tokenTypeNames;\ntype TokenTypeNameFromArray = TokenTypeNamesArray[number];\n\nexport const tokenTypeNamesMapping = tokenTypeNames.reduce<\n\tRecord<TokenTypeNameFromArray, TokenTypeNameFromArray>\n>(\n\t(acc, t) => {\n\t\tacc[t] = t;\n\t\treturn acc;\n\t},\n\t{} as Record<TokenTypeNameFromArray, TokenTypeNameFromArray>,\n);\n\nexport type TokenTypeName =\n\t| Color.TypeName\n\t| Dimension.TypeName\n\t| FontFamily.TypeName\n\t| FontWeight.TypeName\n\t| Duration.TypeName\n\t| CubicBezier.TypeName\n\t| NumberNs.TypeName\n\t| StrokeStyle.TypeName\n\t| Border.TypeName\n\t| Transition.TypeName\n\t| Shadow.TypeName\n\t| Gradient.TypeName\n\t| Typography.TypeName;\n\nexport type DesignToken =\n\t| Color.Token\n\t| Dimension.Token\n\t| FontFamily.Token\n\t| FontWeight.Token\n\t| Duration.Token\n\t| CubicBezier.Token\n\t| NumberNs.Token\n\t| StrokeStyle.Token\n\t| Border.Token\n\t| Transition.Token\n\t| Shadow.Token\n\t| Gradient.Token\n\t| Typography.Token;\n\nexport type PickTokenByType<T extends TokenTypeName> = {\n\tcolor: Color.Token;\n\tdimension: Dimension.Token;\n\tfontFamily: FontFamily.Token;\n\tfontWeight: FontWeight.Token;\n\tduration: Duration.Token;\n\tcubicBezier: CubicBezier.Token;\n\tnumber: NumberNs.Token;\n\tstrokeStyle: StrokeStyle.Token;\n\tborder: Border.Token;\n\ttransition: Transition.Token;\n\tshadow: Shadow.Token;\n\tgradient: Gradient.Token;\n\ttypography: Typography.Token;\n}[T];\n","/**\n * Color conversion utilities for design tokens\n */\n\n/**\n * RGB color components normalized to 0-1 range\n */\nexport interface RGBComponents {\n\tr: number;\n\tg: number;\n\tb: number;\n}\n\n/**\n * RGBA color with optional alpha\n */\nexport interface RGBAColor extends RGBComponents {\n\ta?: number;\n}\n\n/**\n * Converts a hex color string to RGB components normalized to 0-1 range\n * Supports: #RGB, #RRGGBB, #RRGGBBAA\n *\n * @example\n * hexToRgb(\"#FF0000\") // { r: 1, g: 0, b: 0 }\n * hexToRgb(\"#F00\") // { r: 1, g: 0, b: 0 }\n */\nexport function hexToRgb(hex: string): RGBComponents {\n\tconst cleanHex = hex.replace(/^#/, \"\");\n\n\tlet r: number;\n\tlet g: number;\n\tlet b: number;\n\n\tif (cleanHex.length === 3) {\n\t\t// Short format: #RGB\n\t\tconst c0 = cleanHex[0] ?? \"0\";\n\t\tconst c1 = cleanHex[1] ?? \"0\";\n\t\tconst c2 = cleanHex[2] ?? \"0\";\n\t\tr = Number.parseInt(c0 + c0, 16);\n\t\tg = Number.parseInt(c1 + c1, 16);\n\t\tb = Number.parseInt(c2 + c2, 16);\n\t} else if (cleanHex.length === 6 || cleanHex.length === 8) {\n\t\t// Standard format: #RRGGBB or #RRGGBBAA\n\t\tr = Number.parseInt(cleanHex.slice(0, 2), 16);\n\t\tg = Number.parseInt(cleanHex.slice(2, 4), 16);\n\t\tb = Number.parseInt(cleanHex.slice(4, 6), 16);\n\t} else {\n\t\tthrow new Error(`Invalid hex color format: ${hex}`);\n\t}\n\n\treturn {\n\t\tr: r / 255,\n\t\tg: g / 255,\n\t\tb: b / 255,\n\t};\n}\n\n/**\n * Converts a hex color string to RGBA\n * Supports: #RGB, #RRGGBB, #RRGGBBAA\n *\n * @example\n * hexToRgba(\"#FF0000\") // { r: 1, g: 0, b: 0, a: 1 }\n * hexToRgba(\"#FF000080\") // { r: 1, g: 0, b: 0, a: 0.502 }\n */\nexport function hexToRgba(hex: string): RGBAColor {\n\tconst cleanHex = hex.replace(/^#/, \"\");\n\tconst rgb = hexToRgb(hex);\n\n\tlet a = 1;\n\tif (cleanHex.length === 8) {\n\t\ta = Number.parseInt(cleanHex.slice(6, 8), 16) / 255;\n\t}\n\n\treturn { ...rgb, a };\n}\n\n/**\n * Converts a hex color to an array of RGB components [r, g, b]\n * Components are normalized to 0-1 range with 4 decimal precision\n *\n * @example\n * hexToComponents(\"#FF0000\") // [1, 0, 0]\n */\nexport function hexToComponents(hex: string): [number, number, number] {\n\tconst { r, g, b } = hexToRgb(hex);\n\treturn [\n\t\tMath.round(r * 10000) / 10000,\n\t\tMath.round(g * 10000) / 10000,\n\t\tMath.round(b * 10000) / 10000,\n\t];\n}\n","import type {\n\tColor,\n\tCubicBezier,\n\tDimension,\n\tDuration,\n\tFontFamily,\n\tFontWeight,\n\tShadow,\n} from \"@nds-design-system/design-tokens-format\";\nimport { hexToComponents } from \"@nds-design-system/design-tokens-format\";\n\n/**\n * Creates a DTCG-compliant dimension token\n *\n * @example\n * dimension(16) // 16px\n * dimension(1.5, \"rem\") // 1.5rem\n */\nexport function dimension(\n\tvalue: number,\n\tunit: \"px\" | \"rem\" = \"px\",\n): Dimension.Token {\n\treturn {\n\t\t$type: \"dimension\",\n\t\t$value: { value, unit },\n\t};\n}\n\n/**\n * Creates a DTCG-compliant font family token\n *\n * @example\n * fontFamily(\"PP Neue Montreal\") // Single font\n * fontFamily([\"PP Neue Montreal\", \"sans-serif\"]) // Font stack\n */\nexport function fontFamily(value: string | string[]): FontFamily.Token {\n\treturn {\n\t\t$type: \"fontFamily\",\n\t\t$value: Array.isArray(value) ? value : [value],\n\t};\n}\n\n/**\n * Creates a DTCG-compliant font weight token\n *\n * @example\n * fontWeight(400) // Regular\n * fontWeight(600) // Semi-bold\n * fontWeight(\"bold\") // Named weight\n */\nexport function fontWeight(\n\tvalue: number | FontWeight.RawValue,\n): FontWeight.Token {\n\treturn {\n\t\t$type: \"fontWeight\",\n\t\t$value: value,\n\t};\n}\n\n/**\n * Creates a DTCG-compliant sRGB color token from a hex value\n *\n * @example\n * srgb(\"#FF0000\") // Red color token\n * srgb(\"#FF0000\", 0.5) // Red with 50% alpha\n */\nexport function srgb(hex: `#${string}`, alpha = 1): Color.Token {\n\treturn {\n\t\t$type: \"color\",\n\t\t$value: {\n\t\t\tcolorSpace: \"srgb\",\n\t\t\tcomponents: hexToComponents(hex),\n\t\t\talpha,\n\t\t\thex,\n\t\t},\n\t};\n}\n\n/**\n * Creates a DTCG-compliant duration token\n *\n * @example\n * duration(150) // 150ms\n * duration(0.3, \"s\") // 0.3s\n */\nexport function duration(\n\tvalue: number,\n\tunit: \"ms\" | \"s\" = \"ms\",\n): Duration.Token {\n\treturn {\n\t\t$type: \"duration\",\n\t\t$value: { value, unit },\n\t};\n}\n\n/**\n * Creates a DTCG-compliant cubic-bezier easing token\n *\n * @example\n * cubicBezier(0.4, 0, 0.2, 1) // ease-out\n * cubicBezier(0.23, 1, 0.32, 1) // custom easing\n */\nexport function cubicBezier(\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): CubicBezier.Token {\n\treturn {\n\t\t$type: \"cubicBezier\",\n\t\t$value: [x1, y1, x2, y2],\n\t};\n}\n\n/**\n * Shadow layer configuration\n */\nexport interface ShadowLayer {\n\toffsetX: number;\n\toffsetY: number;\n\tblur: number;\n\tspread: number;\n\t/** Color as hex string or alias reference */\n\tcolor: `#${string}` | `{${string}}`;\n\t/** Alpha/opacity for the color (0-1, default: 1) */\n\talpha?: number;\n\tinset?: boolean;\n}\n\n/**\n * Creates a DTCG-compliant shadow token\n *\n * @example\n * shadow([{ offsetX: 0, offsetY: 1, blur: 3, spread: 0, color: \"#000000\", alpha: 0.1 }])\n * shadow([{ offsetX: 0, offsetY: 4, blur: 6, spread: -1, color: \"{primitive.color.black}\", alpha: 0.1 }])\n */\nexport function shadow(layers: ShadowLayer[]): Shadow.Token {\n\treturn {\n\t\t$type: \"shadow\",\n\t\t$value: layers.map((l) => ({\n\t\t\tcolor: l.color.startsWith(\"{\")\n\t\t\t\t? (l.color as `{${string}}`)\n\t\t\t\t: {\n\t\t\t\t\t\tcolorSpace: \"srgb\" as const,\n\t\t\t\t\t\tcomponents: hexToComponents(l.color as `#${string}`),\n\t\t\t\t\t\talpha: l.alpha ?? 1,\n\t\t\t\t\t},\n\t\t\toffsetX: { value: l.offsetX, unit: \"px\" as const },\n\t\t\toffsetY: { value: l.offsetY, unit: \"px\" as const },\n\t\t\tblur: { value: l.blur, unit: \"px\" as const },\n\t\t\tspread: { value: l.spread, unit: \"px\" as const },\n\t\t\t...(l.inset ? { inset: true } : {}),\n\t\t})),\n\t};\n}\n","import type { ThemeExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\nimport { srgb } from \"../../utils\";\n\n/**\n * Board of Peace (BoP) Theme Color Tokens\n *\n * A refined, institutional theme with warm ivory backgrounds,\n * deep navy text, and polished gold accents.\n *\n * NOTE: This theme uses inline hex values intentionally. These are brand-specific\n * colors from the BoP design system that don't map to our standard primitive palette.\n * The unique ivory, gold, and navy tones are central to the BoP brand identity.\n *\n * Design colors from Figma:\n * - Ivory: #FEFDF9 (page background)\n * - Sand: #F5F4EF (section background)\n * - Port: #111326 (primary text)\n * - Polished Gold: #A68B5E (accent/muted text)\n */\nexport const bopColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"bop\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t} satisfies ThemeExtension,\n\t\t\tbg: {\n\t\t\t\tpage: srgb(\"#FEFDF9\"),\n\t\t\t\tsection: srgb(\"#F5F4EF\"),\n\t\t\t\tmuted: srgb(\"#FEFDF9\"),\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: srgb(\"#8A6F42\"),\n\t\t\t},\n\t\t\ttext: {\n\t\t\t\tprimary: srgb(\"#111326\"),\n\t\t\t\tsecondary: srgb(\"#111326\"),\n\t\t\t\tmuted: srgb(\"#A68B5E\"),\n\t\t\t\tinverted: srgb(\"#FEFDF9\"),\n\t\t\t},\n\t\t\taccent: {\n\t\t\t\tbrand: srgb(\"#A68B5E\"),\n\t\t\t\t\"brand-soft\": srgb(\"#C4A870\"),\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\tsubtle: srgb(\"#26284B\", 0.1),\n\t\t\t\tstrong: srgb(\"#26284B\", 0.2),\n\t\t\t\tdivider: srgb(\"#26284B\", 0.1),\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\t\"primary-bg-hover\": srgb(\"#26284B\"),\n\t\t\t},\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": srgb(\"#111326\"),\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Civic Theme Color Overrides\n *\n * Matches Figma \"Civic\" collection - extends Color.\n * Civic theme with red accents for government/public sector applications.\n * Only tokens that differ from base are defined.\n */\nexport const civicColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"civic\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"29f4d62156d027717b2f2a80e95002ed749bdd38\",\n\t\t\t\t\tcollectionName: \"Civic\",\n\t\t\t\t\textendsCollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\tbg: {\n\t\t\t\tpage: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t},\n\t\t\taccent: {\n\t\t\t\tbrand: { $type: \"color\", $value: \"{primitive.color.red.900}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tprimary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.red.900}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.red.800}\" },\n\t\t\t\t},\n\t\t\t\t\"primary-outline\": {\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.red.900}\" },\n\t\t\t\t\t\"text-hover\": { $type: \"color\", $value: \"{primitive.color.red.800}\" },\n\t\t\t\t\tborder: { $type: \"color\", $value: \"{primitive.color.red.900}\" },\n\t\t\t\t\t\"border-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.red.800}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.red.900}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Dark Theme Color Overrides\n *\n * Matches Figma \"Color\" collection - Dark Mode.\n * Partial overrides for dark mode. Only tokens that differ from base are defined.\n * These get deep-merged with base tokens at runtime.\n */\nexport const darkColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"dark\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tcollectionName: \"Color\",\n\t\t\t\t\tmodeMapping: { modeName: \"Dark Mode\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t// Background tokens\n\t\t\tbg: {\n\t\t\t\tpage: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\tsection: { $type: \"color\", $value: \"{primitive.color.gray.1000}\" },\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.100}\",\n\t\t\t\t},\n\t\t\t\tmuted: { $type: \"color\", $value: \"{primitive.color.gray.900}\" },\n\t\t\t},\n\t\t\t// Card token\n\t\t\tcard: {\n\t\t\t\tbackground: { $type: \"color\", $value: \"{primitive.color.gray.800}\" },\n\t\t\t},\n\t\t\t// Text tokens\n\t\t\ttext: {\n\t\t\t\tprimary: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\tsecondary: { $type: \"color\", $value: \"{primitive.color.gray.400}\" },\n\t\t\t\tmuted: { $type: \"color\", $value: \"{primitive.color.gray.500}\" },\n\t\t\t\tinverted: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\tlink: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\"link-hover\": { $type: \"color\", $value: \"{primitive.color.gray.400}\" },\n\t\t\t},\n\t\t\t// Border tokens\n\t\t\tborder: {\n\t\t\t\tsubtle: { $type: \"color\", $value: \"{primitive.color.alpha-white.20}\" },\n\t\t\t\tstrong: { $type: \"color\", $value: \"{primitive.color.alpha-white.30}\" },\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.accent.brand}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tprimary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.gray.400}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.1100}\" },\n\t\t\t\t\t\"text-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.1100}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"primary-outline\": {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.alpha-white.5}\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"text-hover\": { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t\tborder: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"border-hover\": { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.gray.800}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.gray.700}\" },\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.200}\" },\n\t\t\t\t\t\"text-hover\": { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t\tghost: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.alpha-white.5}\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t\t},\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.gray.300}\" },\n\t\t\t\t\t\"text-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.gray.100}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t// UI tokens\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.200}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.800}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.30}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"error-color\": { $type: \"color\", $value: \"{primitive.color.red.200}\" },\n\t\t\t\t\"accent-base\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.300}\",\n\t\t\t\t},\n\t\t\t\t\"accent-base-2\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.300}\",\n\t\t\t\t},\n\t\t\t\t\"accent-base-3\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.indigo.300}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Darktech Theme Color Overrides\n *\n * Dark backgrounds with cyan/tech accents.\n * Optimized for technical and dark-mode interfaces.\n *\n * References primitive color tokens for consistency.\n */\nexport const darktechColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"darktech\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t} satisfies ThemeExtension,\n\n\t\t\t// Dark backgrounds\n\t\t\tbg: {\n\t\t\t\tpage: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1100}\",\n\t\t\t\t},\n\t\t\t\tsection: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1200}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Light text for dark backgrounds\n\t\t\ttext: {\n\t\t\t\tprimary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.200}\",\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.400}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.500}\",\n\t\t\t\t},\n\t\t\t\tinverted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1100}\",\n\t\t\t\t},\n\t\t\t\tlink: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v300}\",\n\t\t\t\t},\n\t\t\t\t\"link-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v200}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Cyan/tech accent colors\n\t\t\taccent: {\n\t\t\t\tbrand: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v300}\",\n\t\t\t\t},\n\t\t\t\t\"brand-soft\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.teal.900}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Borders for dark mode\n\t\t\tborder: {\n\t\t\t\tsubtle: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t},\n\t\t\t\tstrong: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t},\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.accent.brand}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Button colors for dark mode\n\t\t\tbutton: {\n\t\t\t\t\"primary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.600}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.800}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// UI colors for dark mode\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v300}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.900}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.800}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.gray.1000}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-white.20}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.v300}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Institution Theme Color Overrides\n *\n * Matches Figma \"Institution\" collection - extends Color.\n * Warm institutional theme with brown and green accents.\n * Only tokens that differ from base are defined.\n */\nexport const institutionColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"institution\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"307b920325965d277d6cbfe0c1573b413f86baf4\",\n\t\t\t\t\tcollectionName: \"Institution\",\n\t\t\t\t\textendsCollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\tbg: {\n\t\t\t\tpage: { $type: \"color\", $value: \"{primitive.color.brown.50}\" },\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t},\n\t\t\ttext: {\n\t\t\t\tprimary: { $type: \"color\", $value: \"{primitive.color.gray.1000}\" },\n\t\t\t\tsecondary: { $type: \"color\", $value: \"{primitive.color.brown.600}\" },\n\t\t\t},\n\t\t\taccent: {\n\t\t\t\tbrand: { $type: \"color\", $value: \"{primitive.color.green.v400}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tprimary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.green.v400}\" },\n\t\t\t\t\t\"bg-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.green.v300}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"primary-outline\": {\n\t\t\t\t\ttext: { $type: \"color\", $value: \"{primitive.color.green.v400}\" },\n\t\t\t\t\t\"text-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.green.v300}\",\n\t\t\t\t\t},\n\t\t\t\t\tborder: { $type: \"color\", $value: \"{primitive.color.green.v400}\" },\n\t\t\t\t\t\"border-hover\": {\n\t\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t\t$value: \"{primitive.color.green.v300}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\tbg: { $type: \"color\", $value: \"{primitive.color.brown.50}\" },\n\t\t\t\t\t\"bg-hover\": { $type: \"color\", $value: \"{primitive.color.white}\" },\n\t\t\t\t},\n\t\t\t},\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Oceana Theme Color Overrides\n *\n * Ocean-inspired cool blue palette.\n * Fresh, clean aesthetic for water/coastal content.\n *\n * References primitive color tokens for consistency.\n */\nexport const oceanaColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"oceana\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"79e46a4d616f3e2d07556a58f4253ed909bca3b7\",\n\t\t\t\t\tcollectionName: \"Oceana\",\n\t\t\t\t\textendsCollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\n\t\t\t// Cool blue-tinted backgrounds\n\t\t\tbg: {\n\t\t\t\tpage: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.50}\",\n\t\t\t\t},\n\t\t\t\tsection: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.100}\",\n\t\t\t\t},\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.200}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.900}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Text colors with cool tint\n\t\t\ttext: {\n\t\t\t\tprimary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.steel.1100}\",\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.steel.700}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.steel.500}\",\n\t\t\t\t},\n\t\t\t\tinverted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.50}\",\n\t\t\t\t},\n\t\t\t\tlink: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.600}\",\n\t\t\t\t},\n\t\t\t\t\"link-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.800}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Ocean blue accents\n\t\t\taccent: {\n\t\t\t\tbrand: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.600}\",\n\t\t\t\t},\n\t\t\t\t\"brand-soft\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.cyan.50}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Borders\n\t\t\tborder: {\n\t\t\t\tsubtle: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\tstrong: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.20}\",\n\t\t\t\t},\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.accent.brand}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Button colors\n\t\t\tbutton: {\n\t\t\t\t\"primary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.800}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.100}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// UI colors\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.600}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.100}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.ice.200}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.20}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.blue.600}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Recreation Theme Color Overrides\n *\n * Warm brown/beige palette with earthy tones.\n * Inviting aesthetic for recreational and lifestyle content.\n *\n * References primitive color tokens for consistency.\n */\nexport const recreationColorTokens = {\n\tsemantic: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"color\",\n\t\t\t\t\tname: \"recreation\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"cf9e75990b12bf4551bf2b165ec51e5ce594fecf\",\n\t\t\t\t\tcollectionName: \"Recreation\",\n\t\t\t\t\textendsCollectionKey: \"92aacd2e50c6b60494d54a525fd64c6727d58905\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\n\t\t\t// Warm beige backgrounds\n\t\t\tbg: {\n\t\t\t\tpage: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.50}\",\n\t\t\t\t},\n\t\t\t\tsection: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.100}\",\n\t\t\t\t},\n\t\t\t\t\"section-secondary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.200}\",\n\t\t\t\t},\n\t\t\t\t\"section-tertiary\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.900}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tbackground: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Text colors with warm tint\n\t\t\ttext: {\n\t\t\t\tprimary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.1100}\",\n\t\t\t\t},\n\t\t\t\tsecondary: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.700}\",\n\t\t\t\t},\n\t\t\t\tmuted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.500}\",\n\t\t\t\t},\n\t\t\t\tinverted: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.50}\",\n\t\t\t\t},\n\t\t\t\tlink: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t\t\"link-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.800}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Earthy brown accents\n\t\t\taccent: {\n\t\t\t\tbrand: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t\t\"brand-soft\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.100}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Borders\n\t\t\tborder: {\n\t\t\t\tsubtle: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\tstrong: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.20}\",\n\t\t\t\t},\n\t\t\t\tfocus: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{semantic.color.accent.brand}\",\n\t\t\t\t},\n\t\t\t\tdivider: {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Button colors\n\t\t\tbutton: {\n\t\t\t\t\"primary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.700}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"secondary-bg-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.100}\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// UI colors\n\t\t\tui: {\n\t\t\t\t\"button-primary-bg\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t\t\"control-background\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.white}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-hover\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.100}\",\n\t\t\t\t},\n\t\t\t\t\"control-background-disabled\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.200}\",\n\t\t\t\t},\n\t\t\t\t\"color-focus\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.10}\",\n\t\t\t\t},\n\t\t\t\t\"color-border\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.alpha-black.20}\",\n\t\t\t\t},\n\t\t\t\t\"color-border-active\": {\n\t\t\t\t\t$type: \"color\",\n\t\t\t\t\t$value: \"{primitive.color.brown.600}\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Base Surface Tokens\n *\n * Defines surface styling properties like border radius and stroke width.\n */\nexport const baseSurfaceTokens = {\n\tsemantic: {\n\t\tsurface: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"surface\",\n\t\t\t\t\tname: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"4f6dd00a848af32a4163fde4d543eb933824813e\",\n\t\t\t\t\tcollectionName: \"Surface\",\n\t\t\t\t\tmodeMapping: { modeName: \"Mode 1\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t/**\n\t\t\t * UI Radius Tokens\n\t\t\t *\n\t\t\t * Base radius values for UI components. Individual components (button, card, input)\n\t\t\t * extend from these values, allowing theme variants to override once and affect all.\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.radii.4}\",\n\t\t\t\t\t\t$description: \"Small UI radius (4px) - tight corners\",\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.radii.6}\",\n\t\t\t\t\t\t$description: \"Medium UI radius (6px) - default corners\",\n\t\t\t\t\t},\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.radii.8}\",\n\t\t\t\t\t\t$description: \"Large UI radius (8px) - rounded corners\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tradius: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{semantic.surface.ui.radius.medium}\",\n\t\t\t\t\t$description: \"Card border radius - extends from ui.radius.medium\",\n\t\t\t\t},\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{semantic.surface.ui.radius.small}\",\n\t\t\t\t\t\t$description: \"Button radius for small size\",\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{semantic.surface.ui.radius.medium}\",\n\t\t\t\t\t\t$description: \"Button radius for medium size\",\n\t\t\t\t\t},\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{semantic.surface.ui.radius.large}\",\n\t\t\t\t\t\t$description: \"Button radius for large size\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t\ttooltip: {\n\t\t\t\tradius: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{semantic.surface.ui.radius.small}\",\n\t\t\t\t\t$description:\n\t\t\t\t\t\t\"Tooltip border radius - uses small UI radius for tight corners\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * Overlay Surface Tokens\n\t\t\t *\n\t\t\t * Surface properties for floating UI components (popover, modal, dropdown, menu).\n\t\t\t */\n\t\t\toverlay: {\n\t\t\t\tradius: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{semantic.surface.ui.radius.large}\",\n\t\t\t\t\t$description: \"Overlay border radius - uses large UI radius (8px)\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Framed Surface Tokens\n *\n * A framed surface theme with heavier card borders and no button radius.\n */\nexport const framedSurfaceTokens = {\n\tsemantic: {\n\t\tsurface: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"surface\",\n\t\t\t\t\tname: \"framed\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"8d2f720d2f15a79f6caf1c9e1332295eae600152\",\n\t\t\t\t\tcollectionName: \"Framed\",\n\t\t\t\t\textendsCollectionKey: \"4f6dd00a848af32a4163fde4d543eb933824813e\",\n\t\t\t\t\tmodeMapping: { modeName: \"Mode 1\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t/**\n\t\t\t * Framed UI Radius - no radius (0px) for crisp, framed appearance\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: { $type: \"dimension\", $value: \"{primitive.radii.0}\" },\n\t\t\t\t\tmedium: { $type: \"dimension\", $value: \"{primitive.radii.0}\" },\n\t\t\t\t\tlarge: { $type: \"dimension\", $value: \"{primitive.radii.0}\" },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.2}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Sharp Surface Tokens\n *\n * A sharper surface theme with minimal border radius.\n */\nexport const sharpSurfaceTokens = {\n\tsemantic: {\n\t\tsurface: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"surface\",\n\t\t\t\t\tname: \"sharp\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"89b2727e714b609da1a6da3fb39a02fece2c5c87\",\n\t\t\t\t\tcollectionName: \"Sharp\",\n\t\t\t\t\textendsCollectionKey: \"4f6dd00a848af32a4163fde4d543eb933824813e\",\n\t\t\t\t\tmodeMapping: { modeName: \"Mode 1\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t/**\n\t\t\t * Sharp UI Radius - minimal corners (2px)\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: { $type: \"dimension\", $value: \"{primitive.radii.2}\" },\n\t\t\t\t\tmedium: { $type: \"dimension\", $value: \"{primitive.radii.2}\" },\n\t\t\t\t\tlarge: { $type: \"dimension\", $value: \"{primitive.radii.2}\" },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { ThemeFigmaSyncExtension } from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Soft Surface Tokens\n *\n * A soft surface theme with large rounded corners and minimal strokes.\n */\nexport const softSurfaceTokens = {\n\tsemantic: {\n\t\tsurface: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"surface\",\n\t\t\t\t\tname: \"soft\",\n\t\t\t\t\textends: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"e8c7bcd55a82a80373e500114ab1c648eaee98e0\",\n\t\t\t\t\tcollectionName: \"Soft\",\n\t\t\t\t\textendsCollectionKey: \"4f6dd00a848af32a4163fde4d543eb933824813e\",\n\t\t\t\t\tmodeMapping: { modeName: \"Mode 1\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeFigmaSyncExtension,\n\t\t\t/**\n\t\t\t * Soft UI Radius - all corners are heavily rounded (20px)\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tradius: {\n\t\t\t\t\tsmall: { $type: \"dimension\", $value: \"{primitive.radii.20}\" },\n\t\t\t\t\tmedium: { $type: \"dimension\", $value: \"{primitive.radii.20}\" },\n\t\t\t\t\tlarge: { $type: \"dimension\", $value: \"{primitive.radii.20}\" },\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.0}\" },\n\t\t\t},\n\t\t\tbutton: {\n\t\t\t\tstroke: { $type: \"dimension\", $value: \"{primitive.spacing.1}\" },\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type {\n\tFigmaSyncExtension,\n\tThemeExtension,\n\tUtilityExtension,\n} from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Base Typography Tokens\n *\n * Property-based typography tokens organized into Heading, Text, and UI groups.\n * Theme variants (nds-brand, darktech, recreation) extend these with overrides.\n *\n * Each group uses $extensions[\"nds.utility\"] to mark it for CSS utility generation.\n * The generator composes inherited properties (font, weight) with local properties\n * (size, line-height, tracking) to create complete typography utilities.\n *\n * Responsive utilities are enabled via `responsive: true` which uses nested groups\n * (lg, md, sm) to generate breakpoint-specific variants.\n *\n * Structure based on Figma \"Typography\" collection with nested breakpoint groups.\n */\nexport const baseTypographyTokens = {\n\tsemantic: {\n\t\ttypography: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"typography\",\n\t\t\t\t\tname: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"96f5387fdb03cd6bbd3a7de7ead150f46afac330\",\n\t\t\t\t\tcollectionName: \"Typography\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeExtension & FigmaSyncExtension,\n\n\t\t\t// =====================================================================\n\t\t\t// HEADING GROUP\n\t\t\t// Shared font properties for all headings\n\t\t\t// =====================================================================\n\t\t\theading: {\n\t\t\t\tfont: {\n\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t$value: \"{primitive.font-family.inter-tight}\",\n\t\t\t\t\t$description: \"Headline font family - shared across all headings\",\n\t\t\t\t},\n\t\t\t\tweight: {\n\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t$value: \"{primitive.font-weight.semibold}\",\n\t\t\t\t\t$description: \"Headline weight (600) - shared across all headings\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H1 Display (XL) - Large hero typography\n\t\t\th1: {\n\t\t\t\tdisplay: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-h1-display\",\n\t\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tlg: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.128}\",\n\t\t\t\t\t\t\t$description: \"H1 display font size (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.128}\",\n\t\t\t\t\t\t\t$description: \"H1 display line height (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.128}\",\n\t\t\t\t\t\t\t$description: \"H1 display letter spacing (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.96}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.96}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.96}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.64}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.64}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.64}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Regular H1 - flattened breakpoint structure\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h1\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.96}\",\n\t\t\t\t\t\t$description: \"H1 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.96}\",\n\t\t\t\t\t\t$description: \"H1 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.96}\",\n\t\t\t\t\t\t$description: \"H1 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.72}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.72}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.72}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.48}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.48}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.48}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H2\n\t\t\th2: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h2\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.72}\",\n\t\t\t\t\t\t$description: \"H2 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.72}\",\n\t\t\t\t\t\t$description: \"H2 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.72}\",\n\t\t\t\t\t\t$description: \"H2 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.64}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.64}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.64}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.48}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.48}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.48}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H3\n\t\t\th3: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h3\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.64}\",\n\t\t\t\t\t\t$description: \"H3 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.64}\",\n\t\t\t\t\t\t$description: \"H3 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.64}\",\n\t\t\t\t\t\t$description: \"H3 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.48}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.48}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.48}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.32}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.32}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.32}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H4\n\t\t\th4: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h4\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.48}\",\n\t\t\t\t\t\t$description: \"H4 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.48}\",\n\t\t\t\t\t\t$description: \"H4 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.48}\",\n\t\t\t\t\t\t$description: \"H4 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.32}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.32}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.32}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.24}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.24}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.24}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// H5\n\t\t\th5: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-h5\",\n\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"heading.font\",\n\t\t\t\t\t\t\tfontWeight: \"heading.weight\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tlg: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.32}\",\n\t\t\t\t\t\t$description: \"H5 font size (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.32}\",\n\t\t\t\t\t\t$description: \"H5 line height (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.32}\",\n\t\t\t\t\t\t$description: \"H5 letter spacing (lg breakpoint)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmd: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.24}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.24}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.24}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsm: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.21}\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.21}\",\n\t\t\t\t\t},\n\t\t\t\t\ttracking: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.letter-spacing.21}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// =====================================================================\n\t\t\t// TEXT GROUP\n\t\t\t// Body text, overline, and caption\n\t\t\t// =====================================================================\n\t\t\tbody: {\n\t\t\t\tfont: {\n\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t$value: \"{primitive.font-family.inter}\",\n\t\t\t\t\t$description: \"Body font family\",\n\t\t\t\t},\n\t\t\t\tweight: {\n\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t$value: \"{primitive.font-weight.regular}\",\n\t\t\t\t\t$description: \"Body font weight\",\n\t\t\t\t},\n\t\t\t\t// Body Large - responsive typography\n\t\t\t\tlg: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-body-lg\",\n\t\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"body.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tlg: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.21}\",\n\t\t\t\t\t\t\t$description: \"Body lg font size (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.21}\",\n\t\t\t\t\t\t\t$description: \"Body lg line height (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.21}\",\n\t\t\t\t\t\t\t$description: \"Body lg letter spacing (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.18}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.18}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.18}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Body Medium - responsive typography\n\t\t\t\tmd: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-body-md\",\n\t\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"body.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tlg: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.18}\",\n\t\t\t\t\t\t\t$description: \"Body md font size (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.18}\",\n\t\t\t\t\t\t\t$description: \"Body md line height (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.18}\",\n\t\t\t\t\t\t\t$description: \"Body md letter spacing (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.16}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Body Small - responsive typography\n\t\t\t\tsm: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-body-sm\",\n\t\t\t\t\t\t\tresponsive: true,\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"body.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tlg: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t\t$description: \"Body sm font size (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t\t$description: \"Body sm line height (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.14}\",\n\t\t\t\t\t\t\t$description: \"Body sm letter spacing (lg breakpoint)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.14}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.12}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.12}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.12}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Overline - Small caps/label text\n\t\t\toverline: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-overline\",\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tsize: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t$description: \"Overline font size\",\n\t\t\t\t},\n\t\t\t\t\"line-height\": {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.line-height.24}\",\n\t\t\t\t\t$description: \"Overline line height\",\n\t\t\t\t},\n\t\t\t\ttracking: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.letter-spacing.14}\",\n\t\t\t\t\t$description: \"Overline letter spacing\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// Caption - Small supplementary text\n\t\t\tcaption: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\tname: \"typography-caption\",\n\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\tfontFamily: \"body.font\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\tsize: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.font-size.11}\",\n\t\t\t\t\t$description: \"Caption font size\",\n\t\t\t\t},\n\t\t\t\t\"line-height\": {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.line-height.11}\",\n\t\t\t\t\t$description: \"Caption line height\",\n\t\t\t\t},\n\t\t\t\ttracking: {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.letter-spacing.11}\",\n\t\t\t\t\t$description: \"Caption letter spacing\",\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// =====================================================================\n\t\t\t// UI GROUP\n\t\t\t// Button, link, and interactive element typography\n\t\t\t// =====================================================================\n\t\t\tui: {\n\t\t\t\tbutton: {\n\t\t\t\t\tfont: {\n\t\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t\t$value: \"{primitive.font-family.inter}\",\n\t\t\t\t\t\t$description: \"Button font family\",\n\t\t\t\t\t},\n\t\t\t\t\tweight: {\n\t\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t\t$value: \"{primitive.font-weight.medium}\",\n\t\t\t\t\t\t$description: \"Button font weight\",\n\t\t\t\t\t},\n\t\t\t\t\tlg: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-button-lg\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.button.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.button.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.18}\",\n\t\t\t\t\t\t\t$description: \"lg button font size\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.18}\",\n\t\t\t\t\t\t\t$description: \"lg button line height\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.button}\",\n\t\t\t\t\t\t\t$description: \"lg button letter spacing\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-button-md\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.button.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.button.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.16}\",\n\t\t\t\t\t\t\t$description: \"md button font size\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.16}\",\n\t\t\t\t\t\t\t$description: \"md button line height\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.button}\",\n\t\t\t\t\t\t\t$description: \"md button letter spacing\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-button-sm\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.button.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.button.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t\t$description: \"sm button font size\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t\t$description: \"sm button line height\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttracking: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.letter-spacing.button}\",\n\t\t\t\t\t\t\t$description: \"sm button letter spacing\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlink: {\n\t\t\t\t\tweight: {\n\t\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t\t$value: \"{primitive.font-weight.medium}\",\n\t\t\t\t\t\t$description: \"Link font weight\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlabel: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\tname: \"typography-ui-label\",\n\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\tfontFamily: \"ui.label.font\",\n\t\t\t\t\t\t\t\tfontWeight: \"ui.label.weight\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\tfont: {\n\t\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t\t$value: \"{primitive.font-family.inter}\",\n\t\t\t\t\t\t$description: \"Label font family\",\n\t\t\t\t\t},\n\t\t\t\t\tweight: {\n\t\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t\t$value: \"{primitive.font-weight.medium}\",\n\t\t\t\t\t\t$description: \"Label font weight\",\n\t\t\t\t\t},\n\t\t\t\t\tsize: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t$description: \"Label font size\",\n\t\t\t\t\t},\n\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t$description: \"Label line height\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// Text - General UI text ramp for buttons, captions, and other UI elements\n\t\t\t\ttext: {\n\t\t\t\t\tfont: {\n\t\t\t\t\t\t$type: \"fontFamily\",\n\t\t\t\t\t\t$value: \"{primitive.font-family.inter}\",\n\t\t\t\t\t\t$description: \"UI text font family\",\n\t\t\t\t\t},\n\t\t\t\t\tweight: {\n\t\t\t\t\t\t$type: \"fontWeight\",\n\t\t\t\t\t\t$value: \"{primitive.font-weight.medium}\",\n\t\t\t\t\t\t$description: \"UI text font weight\",\n\t\t\t\t\t},\n\t\t\t\t\txs: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-text-xs\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.text.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.text.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.12}\",\n\t\t\t\t\t\t\t$description:\n\t\t\t\t\t\t\t\t\"Extra small UI text font size (12px) - for small buttons, captions\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.12}\",\n\t\t\t\t\t\t\t$description: \"Extra small UI text line height (16px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tsm: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-text-sm\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.text.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.text.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.14}\",\n\t\t\t\t\t\t\t$description:\n\t\t\t\t\t\t\t\t\"Small UI text font size (14px) - for default buttons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.14}\",\n\t\t\t\t\t\t\t$description: \"Small UI text line height (20px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tmd: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-text-md\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.text.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.text.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.16}\",\n\t\t\t\t\t\t\t$description:\n\t\t\t\t\t\t\t\t\"Medium UI text font size (16px) - for large buttons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.16}\",\n\t\t\t\t\t\t\t$description: \"Medium UI text line height (24px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tlg: {\n\t\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\t\"nds.utility\": {\n\t\t\t\t\t\t\t\tname: \"typography-ui-text-lg\",\n\t\t\t\t\t\t\t\tinherit: {\n\t\t\t\t\t\t\t\t\tfontFamily: \"ui.text.font\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"ui.text.weight\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} satisfies UtilityExtension,\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.font-size.18}\",\n\t\t\t\t\t\t\t$description:\n\t\t\t\t\t\t\t\t\"Large UI text font size (18px) - optional larger size\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"line-height\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.line-height.28}\",\n\t\t\t\t\t\t\t$description: \"Large UI text line height (28px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type {\n\tBreakpointExtension,\n\tFigmaSyncExtension,\n\tGridExtension,\n\tThemeExtension,\n} from \"../../extensions\";\nimport type { TokenModule } from \"../../types\";\n\n/**\n * Base Spatial Tokens\n *\n * Layout and spacing tokens for grid systems, sections, and cards.\n * These provide the foundational spatial structure for responsive layouts.\n * Other spatial themes (airy, balanced, compact, etc.) extend from this base.\n *\n * Breakpoint sizes:\n * - large: Desktop (1440px+)\n * - medium: Tablet (768px - 1439px)\n * - small: Mobile (< 768px)\n */\nexport const baseSpatialTokens = {\n\tsemantic: {\n\t\tspatial: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.theme\": {\n\t\t\t\t\tcategory: \"spatial\",\n\t\t\t\t\tname: \"base\",\n\t\t\t\t},\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"145a1dde6a2edbd03b4e1fe9bbc9269e90bfe5f1\",\n\t\t\t\t\tcollectionName: \"Spatial\",\n\t\t\t\t\tmodeMapping: { modeName: \"Default\" },\n\t\t\t\t},\n\t\t\t} satisfies ThemeExtension & FigmaSyncExtension,\n\t\t\tgrid: {\n\t\t\t\t$extensions: {\n\t\t\t\t\t\"nds.grid\": {\n\t\t\t\t\t\tgenerateUtilities: true,\n\t\t\t\t\t},\n\t\t\t\t} satisfies GridExtension,\n\t\t\t\tlarge: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.breakpoint\": {\n\t\t\t\t\t\t\tname: \"lg\",\n\t\t\t\t\t\t\tminWidth: \"{primitive.breakpoint.lg}\",\n\t\t\t\t\t\t\tdescription: \"Desktop (1440px+)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies BreakpointExtension,\n\t\t\t\t\tmargin: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.72}\",\n\t\t\t\t\t\t$description: \"Outer margin for large breakpoint grid\",\n\t\t\t\t\t},\n\t\t\t\t\tgutter: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Gap between columns for large breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t\tcolumns: {\n\t\t\t\t\t\t$type: \"number\",\n\t\t\t\t\t\t$value: 24,\n\t\t\t\t\t\t$description: \"Number of columns for large breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.breakpoint\": {\n\t\t\t\t\t\t\tname: \"md\",\n\t\t\t\t\t\t\tminWidth: \"{primitive.breakpoint.md}\",\n\t\t\t\t\t\t\tdescription: \"Tablet (768px - 1439px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies BreakpointExtension,\n\t\t\t\t\tmargin: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.56}\",\n\t\t\t\t\t\t$description: \"Outer margin for medium breakpoint grid\",\n\t\t\t\t\t},\n\t\t\t\t\tgutter: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.20}\",\n\t\t\t\t\t\t$description: \"Gap between columns for medium breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t\tcolumns: {\n\t\t\t\t\t\t$type: \"number\",\n\t\t\t\t\t\t$value: 12,\n\t\t\t\t\t\t$description: \"Number of columns for medium breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsmall: {\n\t\t\t\t\t$extensions: {\n\t\t\t\t\t\t\"nds.breakpoint\": {\n\t\t\t\t\t\t\tname: \"sm\",\n\t\t\t\t\t\t\tminWidth: \"{primitive.breakpoint.sm}\",\n\t\t\t\t\t\t\tdescription: \"Mobile (< 768px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t} satisfies BreakpointExtension,\n\t\t\t\t\tmargin: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Outer margin for small breakpoint grid\",\n\t\t\t\t\t},\n\t\t\t\t\tgutter: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t$description: \"Gap between columns for small breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t\tcolumns: {\n\t\t\t\t\t\t$type: \"number\",\n\t\t\t\t\t\t$value: 4,\n\t\t\t\t\t\t$description: \"Number of columns for small breakpoint\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tsection: {\n\t\t\t\tlarge: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.64}\",\n\t\t\t\t\t\t$description: \"Gap between elements in large sections\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.128}\",\n\t\t\t\t\t\t$description: \"Vertical padding for large sections\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.56}\",\n\t\t\t\t\t\t$description: \"Gap between elements in medium sections\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.96}\",\n\t\t\t\t\t\t$description: \"Vertical padding for medium sections\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsmall: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t$description: \"Gap between elements in small sections\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.64}\",\n\t\t\t\t\t\t$description: \"Vertical padding for small sections\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tcard: {\n\t\t\t\tlarge: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t$description: \"Internal gap for large cards\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Internal padding for large cards\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tsmall: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t$description: \"Internal gap for small cards\",\n\t\t\t\t\t},\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t$description: \"Internal padding for small cards\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * UI Control Tokens\n\t\t\t *\n\t\t\t * Spacing for form controls and UI elements.\n\t\t\t */\n\t\t\tui: {\n\t\t\t\tcontrol: {\n\t\t\t\t\t\"vertical-padding\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t$description: \"Vertical padding for form controls\",\n\t\t\t\t\t},\n\t\t\t\t\t\"horizontal-padding\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t$description: \"Horizontal padding for form controls\",\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t$description: \"Gap between control elements\",\n\t\t\t\t\t},\n\t\t\t\t\theight: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.36}\",\n\t\t\t\t\t\t\t$description: \"Height for small form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.48}\",\n\t\t\t\t\t\t\t$description: \"Height for medium form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.56}\",\n\t\t\t\t\t\t\t$description: \"Height for large form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for small form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for medium form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.20}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for large form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for small form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for medium form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for large form controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tbutton: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t\"icon-text\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.6}\",\n\t\t\t\t\t\t\t$description: \"Gap between button icon and text\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"button-group\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Gap between buttons in a group\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t// Figma Button sizes: sm=32px, default=36px, lg=40px\n\t\t\t\t\theight: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Height for small buttons (32px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.36}\",\n\t\t\t\t\t\t\t$description: \"Height for medium/default buttons (36px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Height for large buttons (40px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for small buttons (12px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for medium buttons (16px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for large buttons (24px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for small buttons (8px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for medium buttons (8px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for large buttons (10px)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tinput: {\n\t\t\t\t\theight: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.height.small}\",\n\t\t\t\t\t\t\t$description: \"Height for small input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.height.medium}\",\n\t\t\t\t\t\t\t$description: \"Height for medium input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.height.large}\",\n\t\t\t\t\t\t\t$description: \"Height for large input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-x.small}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for small input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-x.medium}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for medium input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-x.large}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for large input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-y.small}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for small input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-y.medium}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for medium input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.padding-y.large}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for large input controls\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"input-group\": {\n\t\t\t\t\theight: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.height.small}\",\n\t\t\t\t\t\t\t$description: \"Height for small input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.height.medium}\",\n\t\t\t\t\t\t\t$description: \"Height for medium input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.height.large}\",\n\t\t\t\t\t\t\t$description: \"Height for large input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-x.small}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for small input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-x.medium}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for medium input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-x.large}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for large input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-y.small}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for small input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-y.medium}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for medium input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.input.padding-y.large}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for large input groups\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\tblock: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{semantic.spatial.ui.control.gap}\",\n\t\t\t\t\t\t\t$description: \"Gap between block addon and input in input group\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * Component Spacing Tokens\n\t\t\t *\n\t\t\t * Spacing for specific components (padding, gap).\n\t\t\t */\n\t\t\tcomponent: {\n\t\t\t\tcard: {\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t\t$description: \"Padding for small cards\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Padding for medium cards\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Padding for large cards\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Internal gap for cards\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tfeature: {\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\tsmall: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Padding for small features\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmedium: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Padding for medium features\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlarge: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.48}\",\n\t\t\t\t\t\t\t$description: \"Padding for large features\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Gap between icon and content in features\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttestimonial: {\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t$description: \"Padding for testimonials\",\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t$description: \"Gap between quote and attribution\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tform: {\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t\"field-field\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.20}\",\n\t\t\t\t\t\t\t$description: \"Gap between form fields\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"label-field\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Gap between label and field\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"field-button\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t\t$description: \"Gap between field and submit button\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taccordion: {\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.28}\",\n\t\t\t\t\t\t$description: \"Vertical padding for accordion items\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\ttooltip: {\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.10}\",\n\t\t\t\t\t\t$description: \"Horizontal padding for tooltip content\",\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.6}\",\n\t\t\t\t\t\t$description: \"Vertical padding for tooltip content\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Overlay Spacing Tokens\n\t\t\t\t *\n\t\t\t\t * Spacing for floating UI components (popover, modal, dropdown, menu).\n\t\t\t\t */\n\t\t\t\toverlay: {\n\t\t\t\t\tpadding: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t$description: \"Padding for overlay containers (16px)\",\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t$description: \"Gap between overlay content elements (16px)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tnavbar: {\n\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\tmobile: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.20}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for mobile navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttablet: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for tablet navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdesktop: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.32}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for desktop navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\tmobile: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for mobile navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttablet: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for tablet navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdesktop: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.24}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for desktop navbar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgap: {\n\t\t\t\t\t\tlinks: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Gap between navbar links\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tactions: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Gap between navbar actions\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"mobile-menu\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Gap in mobile menu items\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t/**\n\t\t\t\t * Video Player Spacing Tokens\n\t\t\t\t *\n\t\t\t\t * Spacing for video player controls, captions, and overlays.\n\t\t\t\t */\n\t\t\t\t\"video-player\": {\n\t\t\t\t\tcontrols: {\n\t\t\t\t\t\theight: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.48}\",\n\t\t\t\t\t\t\t$description: \"Height of video player controls bar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpadding: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Padding inside controls bar\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgap: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.12}\",\n\t\t\t\t\t\t\t$description: \"Gap between control buttons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcaption: {\n\t\t\t\t\t\t\"padding-x\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Horizontal padding for caption text\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"padding-y\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.8}\",\n\t\t\t\t\t\t\t$description: \"Vertical padding for caption text\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"offset-bottom\": {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.64}\",\n\t\t\t\t\t\t\t$description: \"Distance from bottom of video to caption\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"close-button\": {\n\t\t\t\t\t\tsize: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.40}\",\n\t\t\t\t\t\t\t$description: \"Size of close button\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\toffset: {\n\t\t\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t\t\t$value: \"{primitive.spacing.16}\",\n\t\t\t\t\t\t\t$description: \"Offset from top-right corner\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * Prose Tokens\n\t\t\t *\n\t\t\t * Spacing for prose/content blocks.\n\t\t\t */\n\t\t\tprose: {\n\t\t\t\t\"heading-gap\": {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.spacing.36}\",\n\t\t\t\t\t$description: \"Gap before headings in prose\",\n\t\t\t\t},\n\t\t\t\t\"block-gap\": {\n\t\t\t\t\t$type: \"dimension\",\n\t\t\t\t\t$value: \"{primitive.spacing.96}\",\n\t\t\t\t\t$description: \"Gap between prose blocks\",\n\t\t\t\t},\n\t\t\t},\n\t\t\t/**\n\t\t\t * Content Layout Tokens\n\t\t\t *\n\t\t\t * Responsive content width patterns for the 12-column grid.\n\t\t\t * Generates utilities: grid-content-narrow, grid-content-medium, grid-content-wide\n\t\t\t */\n\t\t\tlayout: {\n\t\t\t\tnarrow: {\n\t\t\t\t\t$description: \"Narrow centered content (reading/mission statements)\",\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 8 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 3 },\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 8 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 3 },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\t$description: \"Medium centered content (forms/general)\",\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 8 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 3 },\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 10 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 2 },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twide: {\n\t\t\t\t\t$description: \"Wide content (dashboards/tables)\",\n\t\t\t\t\tlarge: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 10 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 2 },\n\t\t\t\t\t},\n\t\t\t\t\tmedium: {\n\t\t\t\t\t\tspan: { $type: \"number\", $value: 12 },\n\t\t\t\t\t\tstart: { $type: \"number\", $value: 1 },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","/**\n * Theme Registry\n *\n * Maps theme names to token modules for type-safe theme selection.\n */\n\n// Import color themes\nimport { baseColorTokens } from \"./semantic/color/base\";\nimport { bopColorTokens } from \"./semantic/color/bop\";\nimport { civicColorTokens } from \"./semantic/color/civic\";\nimport { darkColorTokens } from \"./semantic/color/dark\";\nimport { darktechColorTokens } from \"./semantic/color/darktech\";\nimport { institutionColorTokens } from \"./semantic/color/institution\";\nimport { oceanaColorTokens } from \"./semantic/color/oceana\";\nimport { recreationColorTokens } from \"./semantic/color/recreation\";\nimport { airySpatialTokens } from \"./semantic/spatial/airy\";\nimport { balancedSpatialTokens } from \"./semantic/spatial/balanced\";\n// Import spatial themes\nimport { baseSpatialTokens } from \"./semantic/spatial/base\";\nimport { bopSpatialTokens } from \"./semantic/spatial/bop\";\nimport { compactSpatialTokens } from \"./semantic/spatial/compact\";\nimport { customSpatialTokens } from \"./semantic/spatial/custom\";\n// Import surface themes\nimport { baseSurfaceTokens } from \"./semantic/surface/base\";\nimport { framedSurfaceTokens } from \"./semantic/surface/framed\";\nimport { sharpSurfaceTokens } from \"./semantic/surface/sharp\";\nimport { softSurfaceTokens } from \"./semantic/surface/soft\";\n// Import typography themes\nimport {\n\tbaseTypographyTokens,\n\tdarktechTypographyTokens,\n\tndsBrandTypographyTokens,\n\trecreationTypographyTokens,\n} from \"./semantic/typography\";\nimport type { TokenModule } from \"./types\";\n\n/**\n * Color theme registry - maps names to token modules\n */\nexport const colorThemes = {\n\tbase: baseColorTokens,\n\tbop: bopColorTokens,\n\tcivic: civicColorTokens,\n\tdark: darkColorTokens,\n\tdarktech: darktechColorTokens,\n\tinstitution: institutionColorTokens,\n\toceana: oceanaColorTokens,\n\trecreation: recreationColorTokens,\n} as const satisfies Record<string, TokenModule>;\n\n/**\n * Surface theme registry - maps names to token modules\n */\nexport const surfaceThemes = {\n\tbase: baseSurfaceTokens,\n\tsharp: sharpSurfaceTokens,\n\tframed: framedSurfaceTokens,\n\tsoft: softSurfaceTokens,\n} as const satisfies Record<string, TokenModule>;\n\n/**\n * Typography theme registry - maps names to token modules\n * Property-based typography tokens with theme overrides\n */\nexport const typographyThemes = {\n\tbase: baseTypographyTokens,\n\t\"nds-brand\": ndsBrandTypographyTokens,\n\tdarktech: darktechTypographyTokens,\n\trecreation: recreationTypographyTokens,\n} as const satisfies Record<string, TokenModule>;\n\n/**\n * Spatial theme registry - maps names to token modules\n */\nexport const spatialThemes = {\n\tbase: baseSpatialTokens,\n\tairy: airySpatialTokens,\n\tbalanced: balancedSpatialTokens,\n\tbop: bopSpatialTokens,\n\tcompact: compactSpatialTokens,\n\tcustom: customSpatialTokens,\n} as const satisfies Record<string, TokenModule>;\n\n/**\n * Valid color theme names\n */\nexport type ColorThemeName = keyof typeof colorThemes;\n\n/**\n * Valid surface theme names\n */\nexport type SurfaceThemeName = keyof typeof surfaceThemes;\n\n/**\n * Valid typography theme names\n */\nexport type TypographyThemeName = keyof typeof typographyThemes;\n\n/**\n * Valid spatial theme names\n */\nexport type SpatialThemeName = keyof typeof spatialThemes;\n\n/**\n * All available color theme names\n */\nexport const colorThemeNames = Object.keys(colorThemes) as ColorThemeName[];\n\n/**\n * All available surface theme names\n */\nexport const surfaceThemeNames = Object.keys(\n\tsurfaceThemes,\n) as SurfaceThemeName[];\n\n/**\n * All available typography theme names\n */\nexport const typographyThemeNames = Object.keys(\n\ttypographyThemes,\n) as TypographyThemeName[];\n\n/**\n * All available spatial theme names\n */\nexport const spatialThemeNames = Object.keys(\n\tspatialThemes,\n) as SpatialThemeName[];\n\n/**\n * Get color token module by name\n */\nexport function getColorTheme(name: ColorThemeName): TokenModule {\n\treturn colorThemes[name];\n}\n\n/**\n * Get surface token module by name\n */\nexport function getSurfaceTheme(name: SurfaceThemeName): TokenModule {\n\treturn surfaceThemes[name];\n}\n\n/**\n * Get spatial token module by name\n */\nexport function getSpatialTheme(name: SpatialThemeName): TokenModule {\n\treturn spatialThemes[name];\n}\n\n/**\n * Get typography token module by name\n */\nexport function getTypographyTheme(name: TypographyThemeName): TokenModule {\n\treturn typographyThemes[name];\n}\n","/**\n * Theme Resolver\n *\n * Resolves token references and merges extended collections with their bases.\n * Works with the token-server API collection format.\n */\n\nimport type {\n\tAPICollection,\n\tCollectionDefinition,\n\tCollectionTokenValue,\n\tColorValue,\n\tResolvedTokenValue,\n\tTokenReference,\n\tTokenSet,\n} from \"../collections/types\";\nimport {\n\tapiCollectionToDefinition,\n\tisColorValue,\n\tisDimensionValue,\n\tisTokenReference,\n\tparseTokenReference,\n} from \"../collections/types\";\nimport type { NestedStringRecord } from \"./types\";\n\n/**\n * Resolved collection - all references resolved to CSS values\n */\nexport interface ResolvedCollection {\n\tid: string;\n\tname: string;\n\t/** Flat token map: \"color-bg-page\" -> \"color(srgb ...)\" */\n\tflatTokens: Record<string, string>;\n\t/** Nested token structure: { color: { bg: { page: \"color(srgb ...)\" } } } */\n\tnestedTokens: NestedStringRecord;\n}\n\n/**\n * Check if a value is a token value object (has $type and $value)\n */\nfunction isTokenValue(value: unknown): value is CollectionTokenValue {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst obj = value as Record<string, unknown>;\n\treturn \"$type\" in obj && \"$value\" in obj;\n}\n\n/**\n * Flatten nested token structure to flat key-value pairs\n * e.g., { tokens: { \"color-bg-page\": { $type, $value } } } -> { \"color-bg-page\": { $type, $value } }\n */\nexport function flattenCollectionTokens(\n\ttokens: Record<string, TokenSet | CollectionTokenValue>,\n): Record<string, CollectionTokenValue> {\n\tconst flat: Record<string, CollectionTokenValue> = {};\n\n\tfunction traverse(obj: Record<string, unknown>, prefix = \"\"): void {\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\t// Skip $type at group level\n\t\t\tif (key === \"$type\" && typeof value === \"string\") continue;\n\n\t\t\tconst fullKey = prefix ? `${prefix}-${key}` : key;\n\n\t\t\tif (isTokenValue(value)) {\n\t\t\t\tflat[fullKey] = value;\n\t\t\t} else if (typeof value === \"object\" && value !== null) {\n\t\t\t\ttraverse(value as Record<string, unknown>, fullKey);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Handle wrapper like { tokens: { ... } }\n\tif (\"tokens\" in tokens && typeof tokens.tokens === \"object\") {\n\t\ttraverse(tokens.tokens as Record<string, unknown>);\n\t} else {\n\t\ttraverse(tokens);\n\t}\n\n\treturn flat;\n}\n\n/**\n * Resolve all token references in a collection\n */\nexport function resolveCollectionReferences(\n\tcollection: CollectionDefinition,\n\tallTokens: Map<string, CollectionTokenValue>,\n): ResolvedCollection {\n\tconst flatTokens: Record<string, string> = {};\n\tconst collectionTokens = flattenCollectionTokens(collection.tokens);\n\n\tfor (const [name, token] of Object.entries(collectionTokens)) {\n\t\tconst resolvedValue = resolveTokenValue(token.$value, allTokens, new Set());\n\t\tflatTokens[name] = formatValueToCSS(resolvedValue, token.$type);\n\t}\n\n\treturn {\n\t\tid: collection.id,\n\t\tname: collection.name,\n\t\tflatTokens,\n\t\tnestedTokens: flatToNested(flatTokens),\n\t};\n}\n\n/**\n * Convert a token reference name to a CSS variable reference\n * e.g., \"primitive.color.gray.50\" -> \"var(--color-gray-50)\"\n * Strips the \"primitive.\" prefix since CSS vars don't include it\n */\nfunction tokenRefToCSSVar(refName: string): string {\n\t// Strip \"primitive.\" prefix if present - CSS vars don't include it\n\tconst cleanName = refName.replace(/^primitive\\./, \"\");\n\tconst cssVarName = cleanName.replace(/\\./g, \"-\");\n\treturn `var(--${cssVarName})`;\n}\n\n/**\n * Resolve a token value, following references as needed\n * When a reference can't be found in the token map, it's converted to a CSS variable reference\n */\nfunction resolveTokenValue(\n\tvalue: ResolvedTokenValue | TokenReference,\n\tallTokens: Map<string, CollectionTokenValue>,\n\tvisited: Set<string>,\n): ResolvedTokenValue {\n\t// If it's a reference, resolve it\n\tif (isTokenReference(value)) {\n\t\tconst refName = parseTokenReference(value);\n\n\t\t// Circular reference check\n\t\tif (visited.has(refName)) {\n\t\t\tconsole.warn(`Circular reference detected: ${refName}`);\n\t\t\treturn tokenRefToCSSVar(refName);\n\t\t}\n\n\t\tconst referencedToken = allTokens.get(refName);\n\t\tif (!referencedToken) {\n\t\t\t// Reference not found in token map - assume it's a primitive that exists as a CSS variable\n\t\t\treturn tokenRefToCSSVar(refName);\n\t\t}\n\n\t\tvisited.add(refName);\n\t\treturn resolveTokenValue(referencedToken.$value, allTokens, visited);\n\t}\n\n\treturn value;\n}\n\n/**\n * Format a resolved value to a CSS-compatible string\n */\nfunction formatValueToCSS(value: ResolvedTokenValue, type: string): string {\n\t// Handle color values\n\tif (type === \"color\" && isColorValue(value)) {\n\t\treturn colorValueToCSS(value);\n\t}\n\n\t// Handle dimension values\n\tif (type === \"dimension\" && isDimensionValue(value)) {\n\t\treturn `${value.value}${value.unit}`;\n\t}\n\n\t// Handle string/number directly\n\tif (typeof value === \"string\") {\n\t\t// Check if it's a hex color\n\t\tif (value.startsWith(\"#\")) {\n\t\t\treturn hexToSRGB(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\tif (typeof value === \"number\") {\n\t\treturn String(value);\n\t}\n\n\t// Handle objects - try to stringify meaningfully\n\tif (typeof value === \"object\" && value !== null) {\n\t\t// Check for color-like objects\n\t\tif (\"hex\" in value && typeof (value as ColorValue).hex === \"string\") {\n\t\t\treturn colorValueToCSS(value as ColorValue);\n\t\t}\n\t}\n\n\treturn String(value);\n}\n\n/**\n * Convert a hex color to sRGB CSS format\n */\nexport function hexToSRGB(hex: string): string {\n\tconst cleanHex = hex.replace(\"#\", \"\");\n\tconst r = Number.parseInt(cleanHex.slice(0, 2), 16) / 255;\n\tconst g = Number.parseInt(cleanHex.slice(2, 4), 16) / 255;\n\tconst b = Number.parseInt(cleanHex.slice(4, 6), 16) / 255;\n\treturn `color(srgb ${r} ${g} ${b})`;\n}\n\n/**\n * Convert a color value object to CSS string\n */\nexport function colorValueToCSS(color: ColorValue): string {\n\tconst [r, g, b] = color.components;\n\tconst alpha = color.alpha ?? 1;\n\n\tif (alpha < 1) {\n\t\treturn `color(srgb ${r} ${g} ${b} / ${alpha})`;\n\t}\n\treturn `color(srgb ${r} ${g} ${b})`;\n}\n\n/**\n * Merge an extended collection with its base collection\n * Extended tokens override base tokens with the same name\n */\nexport function mergeCollections(\n\tbase: CollectionDefinition,\n\textension: CollectionDefinition,\n): CollectionDefinition {\n\tconst baseFlat = flattenCollectionTokens(base.tokens);\n\tconst extFlat = flattenCollectionTokens(extension.tokens);\n\n\t// Merge flat tokens back into nested structure\n\tconst mergedFlat = { ...baseFlat, ...extFlat };\n\n\treturn {\n\t\tid: extension.id,\n\t\tname: extension.name,\n\t\ttype: \"extended\",\n\t\tbaseCollectionId: base.id,\n\t\tdescription: extension.description,\n\t\ttokens: { tokens: mergedFlat },\n\t};\n}\n\n/**\n * Build a map of all tokens from multiple collections\n * Later collections override earlier ones\n */\nexport function buildTokenMap(\n\tcollections: CollectionDefinition[],\n): Map<string, CollectionTokenValue> {\n\tconst tokenMap = new Map<string, CollectionTokenValue>();\n\n\tfor (const collection of collections) {\n\t\tconst flat = flattenCollectionTokens(collection.tokens);\n\t\tfor (const [name, token] of Object.entries(flat)) {\n\t\t\ttokenMap.set(name, token);\n\t\t}\n\t}\n\n\treturn tokenMap;\n}\n\n/**\n * Convert a flat token map to a nested structure based on token naming\n * e.g., \"color-bg-page\" -> { color: { bg: { page: value } } }\n */\nexport function flatToNested(\n\tflatTokens: Record<string, string>,\n): NestedStringRecord {\n\tconst nested: NestedStringRecord = {};\n\n\tfor (const [key, value] of Object.entries(flatTokens)) {\n\t\tconst parts = key.split(\"-\");\n\t\tlet current = nested;\n\n\t\tfor (let i = 0; i < parts.length - 1; i++) {\n\t\t\tconst part = parts[i];\n\t\t\tif (!part) continue;\n\n\t\t\tif (!(part in current)) {\n\t\t\t\tcurrent[part] = {};\n\t\t\t}\n\n\t\t\tconst next = current[part];\n\t\t\tif (typeof next === \"string\") {\n\t\t\t\t// If we hit a string value, we can't nest further\n\t\t\t\t// This means there's a naming conflict\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Token naming conflict at ${parts.slice(0, i + 1).join(\"-\")}`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (next === undefined) {\n\t\t\t\t// Should not happen since we just set it above, but satisfy TypeScript\n\t\t\t\tcurrent[part] = {};\n\t\t\t\tcurrent = current[part] as NestedStringRecord;\n\t\t\t} else {\n\t\t\t\tcurrent = next;\n\t\t\t}\n\t\t}\n\n\t\tconst lastPart = parts[parts.length - 1];\n\t\tif (lastPart && typeof current === \"object\") {\n\t\t\tcurrent[lastPart] = value;\n\t\t}\n\t}\n\n\treturn nested;\n}\n\n/**\n * Convert a flat token map directly to CSS variables\n * e.g., { \"color-bg-page\": \"#fff\" } -> { \"--color-bg-page\": \"#fff\" }\n * This is more efficient than flatToNested + nestedToCSSVars\n */\nexport function flatToCSSVars(\n\tflatTokens: Record<string, string>,\n): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(flatTokens)) {\n\t\tresult[`--${key}`] = value;\n\t}\n\treturn result;\n}\n\n/**\n * Convert a nested structure back to flat CSS variable names\n * e.g., { color: { bg: { page: '#fff' } } } -> { '--color-bg-page': '#fff' }\n */\nexport function nestedToCSSVars(\n\tnested: NestedStringRecord,\n\tprefix = \"\",\n): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\n\tfunction traverse(obj: NestedStringRecord, currentPrefix: string): void {\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\tconst newPrefix = currentPrefix ? `${currentPrefix}-${key}` : key;\n\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\tresult[`--${newPrefix}`] = value;\n\t\t\t} else {\n\t\t\t\ttraverse(value, newPrefix);\n\t\t\t}\n\t\t}\n\t}\n\n\ttraverse(nested, prefix);\n\treturn result;\n}\n\n/**\n * Deep merge two nested token structures\n * Values from source override values in target\n */\nexport function deepMergeTokens(\n\ttarget: NestedStringRecord,\n\tsource: NestedStringRecord,\n): NestedStringRecord {\n\tconst result: NestedStringRecord = { ...target };\n\n\tfor (const [key, value] of Object.entries(source)) {\n\t\tif (typeof value === \"string\") {\n\t\t\tresult[key] = value;\n\t\t} else {\n\t\t\tconst targetValue = result[key];\n\t\t\tif (typeof targetValue === \"object\" && targetValue !== null) {\n\t\t\t\tresult[key] = deepMergeTokens(targetValue as NestedStringRecord, value);\n\t\t\t} else {\n\t\t\t\tresult[key] = { ...value };\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Resolve a collection with its full inheritance chain from the API\n */\nexport async function resolveCollectionFromAPI(\n\tcollectionId: string,\n\tfetchCollection: (id: string) => Promise<APICollection | null>,\n): Promise<ResolvedCollection | null> {\n\tconst collection = await fetchCollection(collectionId);\n\tif (!collection) return null;\n\n\tconst definition = apiCollectionToDefinition(collection);\n\n\t// If this extends another collection, resolve the base first\n\tif (definition.baseCollectionId) {\n\t\tconst baseResolved = await resolveCollectionFromAPI(\n\t\t\tdefinition.baseCollectionId,\n\t\t\tfetchCollection,\n\t\t);\n\n\t\tif (baseResolved) {\n\t\t\t// Merge base tokens with this collection's tokens\n\t\t\tconst baseCollection = await fetchCollection(definition.baseCollectionId);\n\t\t\tif (baseCollection) {\n\t\t\t\tconst baseDef = apiCollectionToDefinition(baseCollection);\n\t\t\t\tconst merged = mergeCollections(baseDef, definition);\n\t\t\t\tconst tokenMap = buildTokenMap([merged]);\n\t\t\t\treturn resolveCollectionReferences(merged, tokenMap);\n\t\t\t}\n\t\t}\n\t}\n\n\t// No inheritance, just resolve this collection\n\tconst tokenMap = buildTokenMap([definition]);\n\treturn resolveCollectionReferences(definition, tokenMap);\n}\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { cubicBezier, duration } from \"../utils\";\n\n/**\n * Primitive animation tokens\n * Defines duration and easing values for consistent motion design\n */\nexport const primitiveAnimation = {\n\tprimitive: {\n\t\tduration: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"duration\",\n\t\t\t$description: \"Animation duration values\",\n\t\t\t/**\n\t\t\t * Instant - for immediate feedback (e.g., button press)\n\t\t\t */\n\t\t\t\"0\": duration(0),\n\t\t\t/**\n\t\t\t * Extra fast - for micro-interactions (e.g., hover states)\n\t\t\t */\n\t\t\t\"75\": duration(75),\n\t\t\t/**\n\t\t\t * Fast - for quick transitions (e.g., fade in/out, color changes)\n\t\t\t */\n\t\t\t\"150\": duration(150),\n\t\t\t/**\n\t\t\t * Normal - for standard UI transitions (e.g., menu open, modal appear)\n\t\t\t */\n\t\t\t\"200\": duration(200),\n\t\t\t/**\n\t\t\t * Medium - for moderate animations (e.g., accordion expand)\n\t\t\t */\n\t\t\t\"300\": duration(300),\n\t\t\t/**\n\t\t\t * Slow - for deliberate animations (e.g., page transitions)\n\t\t\t */\n\t\t\t\"500\": duration(500),\n\t\t\t/**\n\t\t\t * Extra slow - for dramatic effect (e.g., hero animations)\n\t\t\t */\n\t\t\t\"700\": duration(700),\n\t\t\t/**\n\t\t\t * Very slow - for long-running animations (e.g., progress indicators)\n\t\t\t */\n\t\t\t\"1000\": duration(1000),\n\t\t},\n\t\teasing: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t\tskip: true,\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"cubicBezier\",\n\t\t\t$description: \"Easing curves for animations\",\n\t\t\t/**\n\t\t\t * Linear - constant speed, no acceleration\n\t\t\t */\n\t\t\tlinear: cubicBezier(0, 0, 1, 1),\n\t\t\t/**\n\t\t\t * Ease - subtle acceleration and deceleration (CSS default)\n\t\t\t */\n\t\t\tease: cubicBezier(0.25, 0.1, 0.25, 1),\n\t\t\t/**\n\t\t\t * Ease In - starts slow, accelerates\n\t\t\t * Use for elements exiting the screen\n\t\t\t */\n\t\t\t\"ease-in\": cubicBezier(0.42, 0, 1, 1),\n\t\t\t/**\n\t\t\t * Ease Out - starts fast, decelerates\n\t\t\t * Use for elements entering the screen\n\t\t\t */\n\t\t\t\"ease-out\": cubicBezier(0, 0, 0.58, 1),\n\t\t\t/**\n\t\t\t * Ease In Out - slow start and end\n\t\t\t * Use for elements that stay on screen\n\t\t\t */\n\t\t\t\"ease-in-out\": cubicBezier(0.42, 0, 0.58, 1),\n\t\t\t/**\n\t\t\t * Emphasized - dramatic ease out with overshoot feel\n\t\t\t * Based on Material Design's emphasized easing\n\t\t\t */\n\t\t\temphasized: cubicBezier(0.2, 0, 0, 1),\n\t\t\t/**\n\t\t\t * Smooth - Apple-style smooth easing\n\t\t\t * Great for accordion, height transitions\n\t\t\t */\n\t\t\tsmooth: cubicBezier(0.23, 1, 0.32, 1),\n\t\t\t/**\n\t\t\t * Bounce - slight overshoot at the end\n\t\t\t * Use sparingly for playful interactions\n\t\t\t */\n\t\t\tbounce: cubicBezier(0.34, 1.56, 0.64, 1),\n\t\t\t/**\n\t\t\t * Snappy - quick response, smooth finish\n\t\t\t * Good for hover states and quick feedback\n\t\t\t */\n\t\t\tsnappy: cubicBezier(0.4, 0, 0.2, 1),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { dimension } from \"../utils\";\n\n/**\n * Primitive breakpoint tokens\n * Defines responsive breakpoints for the design system\n *\n * - sm: Mobile (320px+)\n * - md: Tablet (768px+)\n * - lg: Desktop (1440px+)\n *\n * NOTE: These are display-only in Figma and not synced as variables\n * because breakpoints are implementation details, not design variables.\n *\n * The maxWidthAlias extension generates max-w-* utility classes in Tailwind.\n */\nexport const primitiveBreakpoints = {\n\tprimitive: {\n\t\tbreakpoint: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"\", // Not used - skip is true\n\t\t\t\t\tskip: true, // Breakpoints are not synced to Figma\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\tsm: {\n\t\t\t\t...dimension(320),\n\t\t\t\t$extensions: { \"nds.maxWidthAlias\": \"mobile\" },\n\t\t\t},\n\t\t\tmd: {\n\t\t\t\t...dimension(768),\n\t\t\t\t$extensions: { \"nds.maxWidthAlias\": \"tablet\" },\n\t\t\t},\n\t\t\tlg: {\n\t\t\t\t...dimension(1440),\n\t\t\t\t$extensions: { \"nds.maxWidthAlias\": \"desktop\" },\n\t\t\t},\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { srgb } from \"../utils\";\n\nexport const primitiveColors = {\n\tprimitive: {\n\t\tcolor: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"color\",\n\t\t\tgray: {\n\t\t\t\t\"50\": srgb(\"#FAFAFA\"),\n\t\t\t\t\"100\": srgb(\"#F5F5F5\"),\n\t\t\t\t\"200\": srgb(\"#EEEEEE\"),\n\t\t\t\t\"300\": srgb(\"#E0E0E0\"),\n\t\t\t\t\"400\": srgb(\"#BDBDBD\"),\n\t\t\t\t\"500\": srgb(\"#9E9E9E\"),\n\t\t\t\t\"600\": srgb(\"#757575\"),\n\t\t\t\t\"700\": srgb(\"#616161\"),\n\t\t\t\t\"800\": srgb(\"#424242\"),\n\t\t\t\t\"900\": srgb(\"#212121\"),\n\t\t\t\t\"1000\": srgb(\"#1A1A1A\"),\n\t\t\t\t\"1100\": srgb(\"#141414\"),\n\t\t\t\t\"1200\": srgb(\"#0A0A0A\"),\n\t\t\t},\n\t\t\tbrown: {\n\t\t\t\t\"50\": srgb(\"#EEEBE9\"),\n\t\t\t\t\"100\": srgb(\"#D5CCC9\"),\n\t\t\t\t\"200\": srgb(\"#B9ABA5\"),\n\t\t\t\t\"300\": srgb(\"#9D8980\"),\n\t\t\t\t\"400\": srgb(\"#886F65\"),\n\t\t\t\t\"500\": srgb(\"#74564A\"),\n\t\t\t\t\"600\": srgb(\"#684D43\"),\n\t\t\t\t\"700\": srgb(\"#594139\"),\n\t\t\t\t\"800\": srgb(\"#4A352F\"),\n\t\t\t\t\"900\": srgb(\"#3B2824\"),\n\t\t\t\t\"1000\": srgb(\"#2F201D\"),\n\t\t\t\t\"1100\": srgb(\"#1C1312\"),\n\t\t\t\t\"1200\": srgb(\"#18100E\"),\n\t\t\t},\n\t\t\tsteel: {\n\t\t\t\t\"50\": srgb(\"#EDEFF1\"),\n\t\t\t\t\"100\": srgb(\"#D1D8DC\"),\n\t\t\t\t\"200\": srgb(\"#B3BEC4\"),\n\t\t\t\t\"300\": srgb(\"#94A3AD\"),\n\t\t\t\t\"400\": srgb(\"#7D8F9B\"),\n\t\t\t\t\"500\": srgb(\"#667C89\"),\n\t\t\t\t\"600\": srgb(\"#596D79\"),\n\t\t\t\t\"700\": srgb(\"#495963\"),\n\t\t\t\t\"800\": srgb(\"#3A474E\"),\n\t\t\t\t\"900\": srgb(\"#283237\"),\n\t\t\t\t\"1000\": srgb(\"#222B2F\"),\n\t\t\t\t\"1100\": srgb(\"#181E21\"),\n\t\t\t\t\"1200\": srgb(\"#101416\"),\n\t\t\t},\n\t\t\tred: {\n\t\t\t\t\"50\": srgb(\"#FFEBEE\"),\n\t\t\t\t\"100\": srgb(\"#FFCDD2\"),\n\t\t\t\t\"200\": srgb(\"#EF9A9A\"),\n\t\t\t\t\"300\": srgb(\"#E57373\"),\n\t\t\t\t\"400\": srgb(\"#EF5350\"),\n\t\t\t\t\"500\": srgb(\"#F44336\"),\n\t\t\t\t\"600\": srgb(\"#E53935\"),\n\t\t\t\t\"700\": srgb(\"#D32F2F\"),\n\t\t\t\t\"800\": srgb(\"#C62828\"),\n\t\t\t\t\"900\": srgb(\"#B71C1C\"),\n\t\t\t\tv100: srgb(\"#FF8A80\"),\n\t\t\t\tv200: srgb(\"#FF5252\"),\n\t\t\t\tv300: srgb(\"#FF1744\"),\n\t\t\t\tv400: srgb(\"#D50000\"),\n\t\t\t},\n\t\t\tpink: {\n\t\t\t\t\"50\": srgb(\"#F8E5EC\"),\n\t\t\t\t\"100\": srgb(\"#EFBECF\"),\n\t\t\t\t\"200\": srgb(\"#E694B0\"),\n\t\t\t\t\"300\": srgb(\"#DF6B92\"),\n\t\t\t\t\"400\": srgb(\"#DA4F7A\"),\n\t\t\t\t\"500\": srgb(\"#D63864\"),\n\t\t\t\t\"600\": srgb(\"#C63361\"),\n\t\t\t\t\"700\": srgb(\"#B22D5B\"),\n\t\t\t\t\"800\": srgb(\"#9F2757\"),\n\t\t\t\t\"900\": srgb(\"#7D1D4E\"),\n\t\t\t\tv100: srgb(\"#EF87AA\"),\n\t\t\t\tv200: srgb(\"#EB5181\"),\n\t\t\t\tv300: srgb(\"#E1305A\"),\n\t\t\t\tv400: srgb(\"#B52B62\"),\n\t\t\t},\n\t\t\tpurple: {\n\t\t\t\t\"50\": srgb(\"#F1E5F4\"),\n\t\t\t\t\"100\": srgb(\"#DBBFE4\"),\n\t\t\t\t\"200\": srgb(\"#C596D4\"),\n\t\t\t\t\"300\": srgb(\"#AF6CC3\"),\n\t\t\t\t\"400\": srgb(\"#9F4DB6\"),\n\t\t\t\t\"500\": srgb(\"#9031AA\"),\n\t\t\t\t\"600\": srgb(\"#832DA4\"),\n\t\t\t\t\"700\": srgb(\"#71279C\"),\n\t\t\t\t\"800\": srgb(\"#612294\"),\n\t\t\t\t\"900\": srgb(\"#441886\"),\n\t\t\t\tv100: srgb(\"#DC86F5\"),\n\t\t\t\tv200: srgb(\"#CF4EF3\"),\n\t\t\t\tv300: srgb(\"#C32AF0\"),\n\t\t\t\tv400: srgb(\"#9B20F6\"),\n\t\t\t},\n\t\t\tiris: {\n\t\t\t\t\"50\": srgb(\"#ECE7F5\"),\n\t\t\t\t\"100\": srgb(\"#CFC4E6\"),\n\t\t\t\t\"200\": srgb(\"#AF9ED7\"),\n\t\t\t\t\"300\": srgb(\"#9076C7\"),\n\t\t\t\t\"400\": srgb(\"#7859BC\"),\n\t\t\t\t\"500\": srgb(\"#613DB0\"),\n\t\t\t\t\"600\": srgb(\"#5837AB\"),\n\t\t\t\t\"700\": srgb(\"#4C2FA2\"),\n\t\t\t\t\"800\": srgb(\"#40299A\"),\n\t\t\t\t\"900\": srgb(\"#2D1D8C\"),\n\t\t\t\tv100: srgb(\"#DC86F5\"),\n\t\t\t\tv200: srgb(\"#CF4EF3\"),\n\t\t\t\tv300: srgb(\"#C32AF0\"),\n\t\t\t\tv400: srgb(\"#9B20F6\"),\n\t\t\t},\n\t\t\tindigo: {\n\t\t\t\t\"25\": srgb(\"#F5F7FF\"), // very light tint - menu hover\n\t\t\t\t\"35\": srgb(\"#EDF2FF\"), // light tint - menu selected\n\t\t\t\t\"50\": srgb(\"#E8EAF5\"),\n\t\t\t\t\"100\": srgb(\"#C6CAE6\"),\n\t\t\t\t\"200\": srgb(\"#A0A8D6\"),\n\t\t\t\t\"300\": srgb(\"#7B86C6\"),\n\t\t\t\t\"400\": srgb(\"#5F6BBA\"),\n\t\t\t\t\"500\": srgb(\"#4251AF\"),\n\t\t\t\t\"600\": srgb(\"#3C49A5\"),\n\t\t\t\t\"700\": srgb(\"#333F99\"),\n\t\t\t\t\"800\": srgb(\"#2A358E\"),\n\t\t\t\t\"900\": srgb(\"#1B2379\"),\n\t\t\t\tv100: srgb(\"#8F9EF8\"),\n\t\t\t\tv200: srgb(\"#586DF5\"),\n\t\t\t\tv300: srgb(\"#425AF5\"),\n\t\t\t\tv400: srgb(\"#364FF4\"),\n\t\t\t},\n\t\t\tblue: {\n\t\t\t\t\"50\": srgb(\"#E6F2FC\"),\n\t\t\t\t\"100\": srgb(\"#C2DDF8\"),\n\t\t\t\t\"200\": srgb(\"#9CC8F5\"),\n\t\t\t\t\"300\": srgb(\"#77B3F0\"),\n\t\t\t\t\"400\": srgb(\"#5DA3EF\"),\n\t\t\t\t\"500\": srgb(\"#4894EC\"),\n\t\t\t\t\"600\": srgb(\"#4186DE\"),\n\t\t\t\t\"700\": srgb(\"#3874CB\"),\n\t\t\t\t\"800\": srgb(\"#2F64BA\"),\n\t\t\t\t\"900\": srgb(\"#1F469B\"),\n\t\t\t\tv100: srgb(\"#8CB0F9\"),\n\t\t\t\tv200: srgb(\"#5589F7\"),\n\t\t\t\tv250: srgb(\"#3B85FF\"), // menu selected text\n\t\t\t\tv300: srgb(\"#4078F6\"),\n\t\t\t\tv400: srgb(\"#3761F6\"),\n\t\t\t},\n\t\t\tice: {\n\t\t\t\t\"50\": srgb(\"#E5F4FD\"),\n\t\t\t\t\"100\": srgb(\"#BDE4F9\"),\n\t\t\t\t\"200\": srgb(\"#94D2F6\"),\n\t\t\t\t\"300\": srgb(\"#6FC1F2\"),\n\t\t\t\t\"400\": srgb(\"#59B4F0\"),\n\t\t\t\t\"500\": srgb(\"#4BA7EE\"),\n\t\t\t\t\"600\": srgb(\"#4499DF\"),\n\t\t\t\t\"700\": srgb(\"#3B86CB\"),\n\t\t\t\t\"800\": srgb(\"#3275B8\"),\n\t\t\t\t\"900\": srgb(\"#235696\"),\n\t\t\t\tv100: srgb(\"#8CB0F9\"),\n\t\t\t\tv200: srgb(\"#5589F7\"),\n\t\t\t\tv300: srgb(\"#4078F6\"),\n\t\t\t\tv400: srgb(\"#3761F6\"),\n\t\t\t},\n\t\t\tcyan: {\n\t\t\t\t\"50\": srgb(\"#E4F6F9\"),\n\t\t\t\t\"100\": srgb(\"#BEE9F1\"),\n\t\t\t\t\"200\": srgb(\"#96DCE8\"),\n\t\t\t\t\"300\": srgb(\"#73CDDE\"),\n\t\t\t\t\"400\": srgb(\"#5FC3D7\"),\n\t\t\t\t\"500\": srgb(\"#54B9D1\"),\n\t\t\t\t\"600\": srgb(\"#4CA9BE\"),\n\t\t\t\t\"700\": srgb(\"#4295A5\"),\n\t\t\t\t\"800\": srgb(\"#38818D\"),\n\t\t\t\t\"900\": srgb(\"#275F63\"),\n\t\t\t\tv100: srgb(\"#A3FCFE\"),\n\t\t\t\tv200: srgb(\"#77FBFD\"),\n\t\t\t\tv300: srgb(\"#68E2FB\"),\n\t\t\t\tv400: srgb(\"#52B5D0\"),\n\t\t\t},\n\t\t\tteal: {\n\t\t\t\t\"50\": srgb(\"#E3F1F1\"),\n\t\t\t\t\"100\": srgb(\"#BBDEDB\"),\n\t\t\t\t\"200\": srgb(\"#91C9C4\"),\n\t\t\t\t\"300\": srgb(\"#6AB4AC\"),\n\t\t\t\t\"400\": srgb(\"#51A49A\"),\n\t\t\t\t\"500\": srgb(\"#429488\"),\n\t\t\t\t\"600\": srgb(\"#3B877B\"),\n\t\t\t\t\"700\": srgb(\"#34776B\"),\n\t\t\t\t\"800\": srgb(\"#2C675C\"),\n\t\t\t\t\"900\": srgb(\"#1E4C40\"),\n\t\t\t\tv100: srgb(\"#BBFDEC\"),\n\t\t\t\tv200: srgb(\"#91FCDC\"),\n\t\t\t\tv300: srgb(\"#6DE6B9\"),\n\t\t\t\tv400: srgb(\"#55BCA6\"),\n\t\t\t},\n\t\t\tgreen: {\n\t\t\t\t\"50\": srgb(\"#EAF5EA\"),\n\t\t\t\t\"100\": srgb(\"#CEE5CB\"),\n\t\t\t\t\"200\": srgb(\"#AFD5AB\"),\n\t\t\t\t\"300\": srgb(\"#91C58A\"),\n\t\t\t\t\"400\": srgb(\"#7BB972\"),\n\t\t\t\t\"500\": srgb(\"#67AD5B\"),\n\t\t\t\t\"600\": srgb(\"#5D9E52\"),\n\t\t\t\t\"700\": srgb(\"#508C46\"),\n\t\t\t\t\"800\": srgb(\"#457B3B\"),\n\t\t\t\t\"900\": srgb(\"#2F5D28\"),\n\t\t\t\tv100: srgb(\"#C6F4CD\"),\n\t\t\t\tv200: srgb(\"#8EEDB3\"),\n\t\t\t\tv300: srgb(\"#69E282\"),\n\t\t\t\tv400: srgb(\"#5AC561\"),\n\t\t\t},\n\t\t\tsage: {\n\t\t\t\t\"50\": srgb(\"#F2F8EA\"),\n\t\t\t\t\"100\": srgb(\"#DFECCB\"),\n\t\t\t\t\"200\": srgb(\"#CAE0AB\"),\n\t\t\t\t\"300\": srgb(\"#B6D48A\"),\n\t\t\t\t\"400\": srgb(\"#A6CB72\"),\n\t\t\t\t\"500\": srgb(\"#97C15C\"),\n\t\t\t\t\"600\": srgb(\"#88B153\"),\n\t\t\t\t\"700\": srgb(\"#749E47\"),\n\t\t\t\t\"800\": srgb(\"#618A3D\"),\n\t\t\t\t\"900\": srgb(\"#416829\"),\n\t\t\t\tv100: srgb(\"#D6FD9D\"),\n\t\t\t\tv200: srgb(\"#C3FD73\"),\n\t\t\t\tv300: srgb(\"#9BFC4E\"),\n\t\t\t\tv400: srgb(\"#85DA47\"),\n\t\t\t},\n\t\t\tlime: {\n\t\t\t\t\"50\": srgb(\"#F9FBE9\"),\n\t\t\t\t\"100\": srgb(\"#F1F4C8\"),\n\t\t\t\t\"200\": srgb(\"#E8EEA5\"),\n\t\t\t\t\"300\": srgb(\"#DEE784\"),\n\t\t\t\t\"400\": srgb(\"#D7E06D\"),\n\t\t\t\t\"500\": srgb(\"#D0DB59\"),\n\t\t\t\t\"600\": srgb(\"#C2CA51\"),\n\t\t\t\t\"700\": srgb(\"#B0B447\"),\n\t\t\t\t\"800\": srgb(\"#9E9D3D\"),\n\t\t\t\t\"900\": srgb(\"#80772C\"),\n\t\t\t\tv100: srgb(\"#F6FF92\"),\n\t\t\t\tv200: srgb(\"#F1FE67\"),\n\t\t\t\tv300: srgb(\"#D2FD51\"),\n\t\t\t\tv400: srgb(\"#BBE849\"),\n\t\t\t},\n\t\t\tyellow: {\n\t\t\t\t\"50\": srgb(\"#FFFDE9\"),\n\t\t\t\t\"100\": srgb(\"#FEF9CA\"),\n\t\t\t\t\"200\": srgb(\"#FDF5A8\"),\n\t\t\t\t\"300\": srgb(\"#FDF188\"),\n\t\t\t\t\"400\": srgb(\"#FCEE72\"),\n\t\t\t\t\"500\": srgb(\"#FCEC60\"),\n\t\t\t\t\"600\": srgb(\"#F7D959\"),\n\t\t\t\t\"700\": srgb(\"#F2C24F\"),\n\t\t\t\t\"800\": srgb(\"#EDAB46\"),\n\t\t\t\t\"900\": srgb(\"#E68537\"),\n\t\t\t\tv100: srgb(\"#FFFF9C\"),\n\t\t\t\tv200: srgb(\"#FFFF54\"),\n\t\t\t\tv300: srgb(\"#FCEB4E\"),\n\t\t\t\tv400: srgb(\"#F9D749\"),\n\t\t\t},\n\t\t\tamber: {\n\t\t\t\t\"50\": srgb(\"#FEF8E3\"),\n\t\t\t\t\"100\": srgb(\"#FCEDBA\"),\n\t\t\t\t\"200\": srgb(\"#FAE18F\"),\n\t\t\t\t\"300\": srgb(\"#F8D667\"),\n\t\t\t\t\"400\": srgb(\"#F7CC50\"),\n\t\t\t\t\"500\": srgb(\"#F6C344\"),\n\t\t\t\t\"600\": srgb(\"#F4B63F\"),\n\t\t\t\t\"700\": srgb(\"#F2A43A\"),\n\t\t\t\t\"800\": srgb(\"#F09436\"),\n\t\t\t\t\"900\": srgb(\"#EE782F\"),\n\t\t\t\tv100: srgb(\"#FBE68D\"),\n\t\t\t\tv200: srgb(\"#F9D85E\"),\n\t\t\t\tv300: srgb(\"#F6C644\"),\n\t\t\t\tv400: srgb(\"#F3AF3D\"),\n\t\t\t},\n\t\t\torange: {\n\t\t\t\t\"50\": srgb(\"#FDF3E2\"),\n\t\t\t\t\"100\": srgb(\"#FAE1B8\"),\n\t\t\t\t\"200\": srgb(\"#F7CE8B\"),\n\t\t\t\t\"300\": srgb(\"#F4BA61\"),\n\t\t\t\t\"400\": srgb(\"#F3AB47\"),\n\t\t\t\t\"500\": srgb(\"#F19D38\"),\n\t\t\t\t\"600\": srgb(\"#EC9135\"),\n\t\t\t\t\"700\": srgb(\"#E68231\"),\n\t\t\t\t\"800\": srgb(\"#DF742C\"),\n\t\t\t\t\"900\": srgb(\"#D55B26\"),\n\t\t\t\tv100: srgb(\"#F8D38B\"),\n\t\t\t\tv200: srgb(\"#F3AF56\"),\n\t\t\t\tv300: srgb(\"#F09637\"),\n\t\t\t\tv400: srgb(\"#EE762F\"),\n\t\t\t},\n\t\t\tember: {\n\t\t\t\t\"50\": srgb(\"#F8EAE7\"),\n\t\t\t\t\"100\": srgb(\"#F7CEBF\"),\n\t\t\t\t\"200\": srgb(\"#F3AF96\"),\n\t\t\t\t\"300\": srgb(\"#F0906D\"),\n\t\t\t\t\"400\": srgb(\"#EE7850\"),\n\t\t\t\t\"500\": srgb(\"#EC6337\"),\n\t\t\t\t\"600\": srgb(\"#E25D33\"),\n\t\t\t\t\"700\": srgb(\"#D5562E\"),\n\t\t\t\t\"800\": srgb(\"#C84E29\"),\n\t\t\t\t\"900\": srgb(\"#B04121\"),\n\t\t\t\tv100: srgb(\"#F2A286\"),\n\t\t\t\tv200: srgb(\"#EE774D\"),\n\t\t\t\tv300: srgb(\"#EB4F27\"),\n\t\t\t\tv400: srgb(\"#CB3E20\"),\n\t\t\t},\n\t\t\t\"alpha-black\": {\n\t\t\t\t\"5\": srgb(\"#000000\", 0.05),\n\t\t\t\t\"10\": srgb(\"#000000\", 0.1),\n\t\t\t\t\"20\": srgb(\"#000000\", 0.2),\n\t\t\t\t\"30\": srgb(\"#000000\", 0.3),\n\t\t\t\t\"40\": srgb(\"#000000\", 0.4),\n\t\t\t\t\"50\": srgb(\"#000000\", 0.5),\n\t\t\t\t\"60\": srgb(\"#000000\", 0.6),\n\t\t\t\t\"70\": srgb(\"#000000\", 0.7),\n\t\t\t\t\"80\": srgb(\"#000000\", 0.8),\n\t\t\t\t\"90\": srgb(\"#000000\", 0.9),\n\t\t\t\t\"95\": srgb(\"#000000\", 0.95),\n\t\t\t},\n\t\t\t\"alpha-white\": {\n\t\t\t\t\"5\": srgb(\"#FFFFFF\", 0.05),\n\t\t\t\t\"10\": srgb(\"#FFFFFF\", 0.1),\n\t\t\t\t\"20\": srgb(\"#FFFFFF\", 0.2),\n\t\t\t\t\"30\": srgb(\"#FFFFFF\", 0.3),\n\t\t\t\t\"40\": srgb(\"#FFFFFF\", 0.4),\n\t\t\t\t\"50\": srgb(\"#FFFFFF\", 0.5),\n\t\t\t\t\"60\": srgb(\"#FFFFFF\", 0.6),\n\t\t\t\t\"70\": srgb(\"#FFFFFF\", 0.7),\n\t\t\t\t\"80\": srgb(\"#FFFFFF\", 0.8),\n\t\t\t\t\"90\": srgb(\"#FFFFFF\", 0.9),\n\t\t\t\t\"95\": srgb(\"#FFFFFF\", 0.95),\n\t\t\t},\n\t\t\twhite: srgb(\"#FFFFFF\"),\n\t\t\tblack: srgb(\"#000000\"),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\n\n/**\n * Primitive opacity tokens\n * Defines opacity scale from 0 to 1\n */\nexport const primitiveOpacity = {\n\tprimitive: {\n\t\topacity: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t\"0\": { $type: \"number\", $value: 0 },\n\t\t\t\"25\": { $type: \"number\", $value: 0.25 },\n\t\t\t\"50\": { $type: \"number\", $value: 0.5 },\n\t\t\t\"75\": { $type: \"number\", $value: 0.75 },\n\t\t\t\"100\": { $type: \"number\", $value: 1 },\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { dimension } from \"../utils\";\n\n/**\n * Primitive radii tokens\n * Defines radii scale from 2px to 34px (increments of 2)\n */\nexport const primitiveRadii = {\n\tprimitive: {\n\t\tradii: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"0\": dimension(0),\n\t\t\t\"2\": dimension(2),\n\t\t\t\"4\": dimension(4),\n\t\t\t\"6\": dimension(6),\n\t\t\t\"8\": dimension(8),\n\t\t\t\"10\": dimension(10),\n\t\t\t\"12\": dimension(12),\n\t\t\t\"14\": dimension(14),\n\t\t\t\"16\": dimension(16),\n\t\t\t\"18\": dimension(18),\n\t\t\t\"20\": dimension(20),\n\t\t\t\"22\": dimension(22),\n\t\t\t\"24\": dimension(24),\n\t\t\t\"26\": dimension(26),\n\t\t\t\"28\": dimension(28),\n\t\t\t\"30\": dimension(30),\n\t\t\t\"32\": dimension(32),\n\t\t\t\"34\": dimension(34),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { shadow } from \"../utils\";\n\n/**\n * Primitive shadow tokens\n * Based on Tailwind CSS shadow scale\n */\nexport const primitiveShadow: TokenModule = {\n\tprimitive: {\n\t\tshadow: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\", // Primitives collection\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tskip: true, // Shadows are managed as Effect Styles in Figma, not variables\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\tsm: shadow([\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 1,\n\t\t\t\t\tblur: 2,\n\t\t\t\t\tspread: 0,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.05,\n\t\t\t\t},\n\t\t\t]),\n\t\t\tmd: shadow([\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 4,\n\t\t\t\t\tblur: 6,\n\t\t\t\t\tspread: -1,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 2,\n\t\t\t\t\tblur: 4,\n\t\t\t\t\tspread: -2,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.1,\n\t\t\t\t},\n\t\t\t]),\n\t\t\tlg: shadow([\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 10,\n\t\t\t\t\tblur: 15,\n\t\t\t\t\tspread: -3,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 4,\n\t\t\t\t\tblur: 6,\n\t\t\t\t\tspread: -4,\n\t\t\t\t\tcolor: \"#000000\",\n\t\t\t\t\talpha: 0.1,\n\t\t\t\t},\n\t\t\t]),\n\t\t},\n\t},\n};\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { dimension } from \"../utils\";\n\n/**\n * Primitive spacing tokens\n * Defines spacing scale from 2px to 400px\n */\nexport const primitiveSpacing = {\n\tprimitive: {\n\t\tspacing: {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"0\": dimension(0),\n\t\t\t\"1\": dimension(1),\n\t\t\t\"2\": dimension(2),\n\t\t\t\"4\": dimension(4),\n\t\t\t\"6\": dimension(6),\n\t\t\t\"8\": dimension(8),\n\t\t\t\"10\": dimension(10),\n\t\t\t\"11\": dimension(11),\n\t\t\t\"12\": dimension(12),\n\t\t\t\"16\": dimension(16),\n\t\t\t\"20\": dimension(20),\n\t\t\t\"24\": dimension(24),\n\t\t\t\"28\": dimension(28),\n\t\t\t\"32\": dimension(32),\n\t\t\t\"36\": dimension(36),\n\t\t\t\"40\": dimension(40),\n\t\t\t\"48\": dimension(48),\n\t\t\t\"56\": dimension(56),\n\t\t\t\"64\": dimension(64),\n\t\t\t\"72\": dimension(72),\n\t\t\t\"80\": dimension(80),\n\t\t\t\"96\": dimension(96),\n\t\t\t\"112\": dimension(112),\n\t\t\t\"128\": dimension(128),\n\t\t\t\"144\": dimension(144),\n\t\t\t\"160\": dimension(160),\n\t\t\t\"176\": dimension(176),\n\t\t\t\"192\": dimension(192),\n\t\t\t\"208\": dimension(208),\n\t\t\t\"224\": dimension(224),\n\t\t\t\"240\": dimension(240),\n\t\t\t\"256\": dimension(256),\n\t\t\t\"288\": dimension(288),\n\t\t\t\"320\": dimension(320),\n\t\t\t\"352\": dimension(352),\n\t\t\t\"384\": dimension(384),\n\t\t\t\"400\": dimension(400),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { FigmaSyncExtension } from \"../extensions\";\nimport type { TokenModule } from \"../types\";\nimport { dimension, fontFamily, fontWeight } from \"../utils\";\n\n/**\n * Primitive typography tokens\n * Defines font sizes, line heights, letter spacing, font families, and font weights\n */\nexport const primitiveTypography = {\n\tprimitive: {\n\t\t\"font-size\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"9\": dimension(9),\n\t\t\t\"11\": dimension(11),\n\t\t\t\"12\": dimension(12),\n\t\t\t\"14\": dimension(14),\n\t\t\t\"16\": dimension(16),\n\t\t\t\"18\": dimension(18),\n\t\t\t\"21\": dimension(21),\n\t\t\t\"24\": dimension(24),\n\t\t\t\"28\": dimension(28),\n\t\t\t\"32\": dimension(32),\n\t\t\t\"36\": dimension(36),\n\t\t\t\"42\": dimension(42),\n\t\t\t\"48\": dimension(48),\n\t\t\t\"56\": dimension(56),\n\t\t\t\"64\": dimension(64),\n\t\t\t\"72\": dimension(72),\n\t\t\t\"84\": dimension(84),\n\t\t\t\"88\": dimension(88),\n\t\t\t\"96\": dimension(96),\n\t\t\t\"112\": dimension(112),\n\t\t\t\"128\": dimension(128),\n\t\t\t\"148\": dimension(148),\n\t\t\t\"168\": dimension(168),\n\t\t\t\"192\": dimension(192),\n\t\t\t\"224\": dimension(224),\n\t\t\t\"256\": dimension(256),\n\t\t\t\"280\": dimension(280),\n\t\t},\n\t\t\"line-height\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"9\": dimension(11),\n\t\t\t\"11\": dimension(13),\n\t\t\t\"12\": dimension(16),\n\t\t\t\"14\": dimension(20),\n\t\t\t\"16\": dimension(24),\n\t\t\t\"18\": dimension(27),\n\t\t\t\"21\": dimension(29),\n\t\t\t\"22\": dimension(22),\n\t\t\t\"24\": dimension(24),\n\t\t\t\"28\": dimension(28),\n\t\t\t\"31\": dimension(31),\n\t\t\t\"32\": dimension(32),\n\t\t\t\"36\": dimension(36),\n\t\t\t\"38\": dimension(38),\n\t\t\t\"42\": dimension(46),\n\t\t\t\"43\": dimension(43),\n\t\t\t\"46\": dimension(46),\n\t\t\t\"48\": dimension(53),\n\t\t\t\"53\": dimension(53),\n\t\t\t\"56\": dimension(62),\n\t\t\t\"62\": dimension(62),\n\t\t\t\"64\": dimension(64),\n\t\t\t\"72\": dimension(72),\n\t\t\t\"84\": dimension(84),\n\t\t\t\"88\": dimension(88),\n\t\t\t\"96\": dimension(96),\n\t\t\t\"112\": dimension(106),\n\t\t\t\"128\": dimension(122),\n\t\t\t\"148\": dimension(141),\n\t\t\t\"168\": dimension(151),\n\t\t\t\"192\": dimension(173),\n\t\t\t\"224\": dimension(202),\n\t\t\t\"256\": dimension(218),\n\t\t\t\"280\": dimension(238),\n\t\t},\n\t\t\"letter-spacing\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"dimension\",\n\t\t\t\"9\": dimension(0.18),\n\t\t\t\"11\": dimension(0.17),\n\t\t\t\"12\": dimension(0.12),\n\t\t\t\"14\": dimension(0.07),\n\t\t\t\"16\": dimension(0),\n\t\t\t\"18\": dimension(0),\n\t\t\t\"21\": dimension(0),\n\t\t\t\"24\": dimension(0),\n\t\t\t\"28\": dimension(-0.14),\n\t\t\t\"32\": dimension(-0.16),\n\t\t\t\"36\": dimension(-0.36),\n\t\t\t\"42\": dimension(-0.42),\n\t\t\t\"48\": dimension(-0.72),\n\t\t\t\"56\": dimension(-1.12),\n\t\t\t\"64\": dimension(-1.28),\n\t\t\t\"72\": dimension(-1.8),\n\t\t\t\"84\": dimension(-2.1),\n\t\t\t\"88\": dimension(-2.64),\n\t\t\t\"96\": dimension(-2.88),\n\t\t\t\"112\": dimension(-3.92),\n\t\t\t\"128\": dimension(-5.12),\n\t\t\t\"148\": dimension(-6.66),\n\t\t\t\"168\": dimension(-7.56),\n\t\t\t\"192\": dimension(-9.6),\n\t\t\t\"224\": dimension(-11.2),\n\t\t\t\"256\": dimension(-14.08),\n\t\t\t\"280\": dimension(-15.4),\n\t\t\tbutton: dimension(0.5),\n\t\t},\n\t\t\"font-family\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"fontFamily\",\n\t\t\t// Primitive font stacks\n\t\t\t\"pp-neue-montreal\": fontFamily([\"PP Neue Montreal\", \"sans-serif\"]),\n\t\t\tgloock: fontFamily([\"Gloock\", \"serif\"]),\n\t\t\tcormorant: fontFamily([\"Cormorant\", \"serif\"]),\n\t\t\tinter: fontFamily([\"Inter\", \"sans-serif\"]),\n\t\t\t\"inter-tight\": fontFamily([\"Inter Tight\", \"sans-serif\"]),\n\t\t\t\"instrument-serif\": fontFamily([\"Instrument Serif\", \"serif\"]),\n\t\t\t// Semantic aliases\n\t\t\tsans: fontFamily([\"PP Neue Montreal\", \"sans-serif\"]),\n\t\t\tserif: fontFamily([\"Gloock\", \"serif\"]),\n\t\t\t\"serif-alt\": fontFamily([\"Cormorant\", \"serif\"]),\n\t\t},\n\t\t\"font-weight\": {\n\t\t\t$extensions: {\n\t\t\t\t\"nds.figmaSync\": {\n\t\t\t\t\tcollectionKey: \"b8954b6c8ba9f47552aea2920a0ee36c5f000e64\",\n\t\t\t\t\tcollectionName: \"Primitives\",\n\t\t\t\t\tmodeMapping: { modeName: \"Value\" },\n\t\t\t\t},\n\t\t\t} satisfies FigmaSyncExtension,\n\t\t\t$type: \"fontWeight\",\n\t\t\tregular: fontWeight(400),\n\t\t\tmedium: fontWeight(500),\n\t\t\tsemibold: fontWeight(600),\n\t\t},\n\t},\n} satisfies TokenModule;\n","import type { JSONTokenTree } from \"@nds-design-system/design-tokens-format\";\nimport type { TokenExtensions } from \"./extensions\";\n\n/**\n * A token module is a partial token tree that can be merged with others.\n * It's a recursive structure where string keys map to either tokens or nested groups.\n */\nexport type TokenModule = {\n\t[key: string]: TokenValue | TokenGroup;\n};\n\n/**\n * A token group can contain nested groups or tokens\n */\nexport type TokenGroup = {\n\t$type?: string;\n\t$description?: string;\n\t/** NDS extension metadata - see extensions.ts for type definitions */\n\t$extensions?: TokenExtensions;\n\t[key: string]:\n\t\t| string\n\t\t| number\n\t\t| boolean\n\t\t| TokenValue\n\t\t| TokenGroup\n\t\t| TokenExtensions\n\t\t| string[]\n\t\t| number[]\n\t\t| undefined;\n};\n\n/**\n * Valid token type names per DTCG spec\n */\nexport type TokenTypeName =\n\t| \"color\"\n\t| \"dimension\"\n\t| \"fontFamily\"\n\t| \"fontWeight\"\n\t| \"duration\"\n\t| \"cubicBezier\"\n\t| \"number\"\n\t| \"strokeStyle\"\n\t| \"border\"\n\t| \"transition\"\n\t| \"shadow\"\n\t| \"gradient\"\n\t| \"typography\"\n\t| \"fontStyle\";\n\n/**\n * A token value has $type, $value, and potentially other properties.\n *\n * NOTE: $type is marked optional for TypeScript compatibility with design-tokens-format,\n * but runtime validation in validate.ts will error if $type is missing.\n * Each leaf token MUST have an explicit $type for proper Figma variable syncing.\n */\nexport type TokenValue = {\n\t$type?: TokenTypeName | string;\n\t$value:\n\t\t| string\n\t\t| number\n\t\t| boolean\n\t\t| string[]\n\t\t| number[]\n\t\t| Record<string, unknown>\n\t\t| Array<Record<string, unknown>>;\n\t$description?: string;\n\t[key: string]: unknown;\n};\n\n/**\n * Type guard to check if a value is a token module\n */\nexport function isTokenModule(value: unknown): value is TokenModule {\n\treturn typeof value === \"object\" && value !== null;\n}\n\n/**\n * Cast a token module to JSONTokenTree for validation\n */\nexport function toJSONTokenTree(module: TokenModule): JSONTokenTree {\n\treturn module as unknown as JSONTokenTree;\n}\n","import type { JSONTokenTree } from \"@nds-design-system/design-tokens-format\";\nimport { mergeTokenTrees } from \"./merge\";\nimport { primitiveAnimation } from \"./primitives/animation\";\nimport { primitiveBreakpoints } from \"./primitives/breakpoints\";\nimport { primitiveColors } from \"./primitives/colors\";\nimport { primitiveOpacity } from \"./primitives/opacity\";\nimport { primitiveRadii } from \"./primitives/radii\";\nimport { primitiveShadow } from \"./primitives/shadow\";\nimport { primitiveSpacing } from \"./primitives/spacing\";\nimport { primitiveTypography } from \"./primitives/typography\";\nimport { semanticColor } from \"./semantic/color/index\";\nimport { semanticSpatial } from \"./semantic/spatial/index\";\nimport { semanticSurface } from \"./semantic/surface/index\";\nimport { baseTypographyTokens } from \"./semantic/typography\";\nimport { toJSONTokenTree } from \"./types\";\n\n/**\n * Base token tree - primitives and base semantic tokens only.\n * Theme variants (dark, civic, bop, etc.) are applied at runtime via ThemeProvider.\n */\nexport const tokens: JSONTokenTree = mergeTokenTrees(\n\t// Primitives\n\ttoJSONTokenTree(primitiveColors),\n\ttoJSONTokenTree(primitiveTypography),\n\ttoJSONTokenTree(primitiveSpacing),\n\ttoJSONTokenTree(primitiveRadii),\n\ttoJSONTokenTree(primitiveBreakpoints),\n\ttoJSONTokenTree(primitiveAnimation),\n\ttoJSONTokenTree(primitiveOpacity),\n\ttoJSONTokenTree(primitiveShadow),\n\t// Typography base (property-based tokens)\n\ttoJSONTokenTree(baseTypographyTokens),\n\t// Base semantic tokens (default theme)\n\ttoJSONTokenTree(semanticColor),\n\ttoJSONTokenTree(semanticSurface),\n\ttoJSONTokenTree(semanticSpatial),\n);\n\nexport default tokens;\n","/**\n * ThemeProvider\n *\n * React context provider for applying theme tokens as CSS variables.\n * Use string theme names for type-safe selection, with \"base\" as default.\n */\n\nimport type {\n\tColorThemeName,\n\tCSSVariableMap,\n\tNestedStringRecord,\n\tResolvedProjectTheme,\n\tSurfaceThemeName,\n\tTokenModule,\n} from \"@nds-design-system/tokens\";\nimport {\n\tcolorThemes,\n\tflatToCSSVars,\n\tflatToNested,\n\tisColorValue,\n\tisDimensionValue,\n\tsurfaceThemes,\n} from \"@nds-design-system/tokens\";\nimport { createContext, type ReactNode, useMemo } from \"react\";\n\n/**\n * Theme context value\n */\nexport interface ThemeContextValue {\n\t/** CSS variables map for inline styles */\n\tcssVars: CSSVariableMap;\n\t/** Resolved nested tokens */\n\ttokens: NestedStringRecord;\n\t/** Current color theme name */\n\tcolorTheme: ColorThemeName;\n\t/** Current surface theme name */\n\tsurfaceTheme: SurfaceThemeName;\n}\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n\n/**\n * Props for ThemeProvider\n */\nexport interface ThemeProviderProps {\n\t/** Color theme name (defaults to \"base\") */\n\tcolor?: ColorThemeName;\n\t/** Surface theme name (defaults to \"base\") */\n\tsurface?: SurfaceThemeName;\n\t/**\n\t * Custom project theme created with defineTheme()\n\t * When provided, overrides color/surface props with custom theme tokens\n\t */\n\tcustomTheme?: ResolvedProjectTheme;\n\t/** Children to render */\n\tchildren: ReactNode;\n\t/** Optional className for the wrapper div */\n\tclassName?: string;\n\t/** Whether to render a wrapper div with CSS variables applied (defaults to true) */\n\tapplyStyles?: boolean;\n}\n\n/**\n * Convert a color value to CSS string\n */\nfunction colorToCSS(color: { components: number[]; alpha: number }): string {\n\tconst [r, g, b] = color.components;\n\tif (color.alpha < 1) {\n\t\treturn `color(srgb ${r} ${g} ${b} / ${color.alpha})`;\n\t}\n\treturn `color(srgb ${r} ${g} ${b})`;\n}\n\n/**\n * Convert a token value to CSS string\n */\nfunction tokenValueToCSS(value: unknown): string {\n\tif (isColorValue(value)) {\n\t\treturn colorToCSS(value);\n\t}\n\tif (isDimensionValue(value)) {\n\t\treturn `${value.value}${value.unit}`;\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tif (typeof value === \"number\") {\n\t\treturn String(value);\n\t}\n\treturn String(value);\n}\n\n/**\n * Process color tokens to flat key-value pairs (without -- prefix)\n */\nfunction processColorTokens(\n\tcolorObj: Record<string, unknown>,\n\tpath: string[] = [],\n): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\n\tfor (const [key, value] of Object.entries(colorObj)) {\n\t\tif (key.startsWith(\"$\")) continue;\n\n\t\tconst currentPath = [...path, key];\n\n\t\tif (typeof value === \"object\" && value !== null) {\n\t\t\tconst record = value as Record<string, unknown>;\n\n\t\t\tif (\"$value\" in record) {\n\t\t\t\t// This is a token - key without -- prefix\n\t\t\t\tconst varName = `color-${currentPath.join(\"-\")}`;\n\t\t\t\tconst tokenValue = record.$value;\n\n\t\t\t\tif (typeof tokenValue === \"string\" && tokenValue.startsWith(\"{\")) {\n\t\t\t\t\t// Alias reference - resolve to CSS var\n\t\t\t\t\tlet refPath = tokenValue.slice(1, -1).replace(/\\./g, \"-\");\n\t\t\t\t\t// Strip prefixes that aren't used in CSS variable names\n\t\t\t\t\trefPath = refPath.replace(/^primitive-/, \"\");\n\t\t\t\t\trefPath = refPath.replace(/^semantic-color-/, \"color-\");\n\t\t\t\t\tresult[varName] = `var(--${refPath})`;\n\t\t\t\t} else {\n\t\t\t\t\tresult[varName] = tokenValueToCSS(tokenValue);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Nested object - recurse\n\t\t\t\tObject.assign(result, processColorTokens(record, currentPath));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Process surface tokens to flat key-value pairs (without -- prefix)\n */\nfunction processSurfaceTokens(\n\tsurfaceObj: Record<string, unknown>,\n\tpath: string[] = [],\n): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\n\tfor (const [key, value] of Object.entries(surfaceObj)) {\n\t\tif (key.startsWith(\"$\")) continue;\n\n\t\tconst currentPath = [...path, key];\n\n\t\tif (typeof value === \"object\" && value !== null) {\n\t\t\tconst record = value as Record<string, unknown>;\n\n\t\t\tif (\"$value\" in record) {\n\t\t\t\t// This is a token\n\t\t\t\tconst tokenValue = record.$value;\n\t\t\t\tlet varName: string;\n\t\t\t\tlet cssValue: string;\n\n\t\t\t\t// Determine variable name based on token type (without -- prefix)\n\t\t\t\tif (currentPath[currentPath.length - 1] === \"radius\") {\n\t\t\t\t\t// e.g., button.radius -> radius-surface-button\n\t\t\t\t\tconst componentName = currentPath[0];\n\t\t\t\t\tvarName = `radius-surface-${componentName}`;\n\t\t\t\t} else if (currentPath[currentPath.length - 1] === \"stroke\") {\n\t\t\t\t\t// e.g., button.stroke -> surface-button-stroke\n\t\t\t\t\tconst componentName = currentPath[0];\n\t\t\t\t\tvarName = `surface-${componentName}-stroke`;\n\t\t\t\t} else {\n\t\t\t\t\tvarName = `surface-${currentPath.join(\"-\")}`;\n\t\t\t\t}\n\n\t\t\t\t// Resolve value\n\t\t\t\tif (typeof tokenValue === \"string\" && tokenValue.startsWith(\"{\")) {\n\t\t\t\t\t// Alias reference\n\t\t\t\t\tlet refPath = tokenValue.slice(1, -1).replace(/\\./g, \"-\");\n\t\t\t\t\t// Strip prefixes that aren't used in CSS variable names\n\t\t\t\t\trefPath = refPath.replace(/^primitive-/, \"\");\n\t\t\t\t\trefPath = refPath.replace(/^radii-/, \"radius-\");\n\t\t\t\t\tcssValue = `var(--${refPath})`;\n\t\t\t\t} else {\n\t\t\t\t\tcssValue = tokenValueToCSS(tokenValue);\n\t\t\t\t}\n\n\t\t\t\tresult[varName] = cssValue;\n\t\t\t} else {\n\t\t\t\t// Nested object - recurse\n\t\t\t\tObject.assign(result, processSurfaceTokens(record, currentPath));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Deep merge two token modules\n */\nfunction mergeTokenModules(\n\tbase: TokenModule,\n\toverride: TokenModule,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = JSON.parse(JSON.stringify(base));\n\tdeepMerge(result, override as Record<string, unknown>);\n\treturn result;\n}\n\n/**\n * Deep merge objects\n */\nfunction deepMerge(\n\ttarget: Record<string, unknown>,\n\tsource: Record<string, unknown>,\n): void {\n\tfor (const [key, value] of Object.entries(source)) {\n\t\tif (\n\t\t\ttypeof value === \"object\" &&\n\t\t\tvalue !== null &&\n\t\t\t!Array.isArray(value) &&\n\t\t\ttypeof target[key] === \"object\" &&\n\t\t\ttarget[key] !== null\n\t\t) {\n\t\t\tdeepMerge(\n\t\t\t\ttarget[key] as Record<string, unknown>,\n\t\t\t\tvalue as Record<string, unknown>,\n\t\t\t);\n\t\t} else {\n\t\t\ttarget[key] = value;\n\t\t}\n\t}\n}\n\n/**\n * ThemeProvider component\n *\n * Applies theme tokens as CSS variables using type-safe theme names.\n *\n * @example\n * ```tsx\n * // Use default base themes\n * <ThemeProvider>\n * <App />\n * </ThemeProvider>\n *\n * // Use specific themes by name\n * <ThemeProvider color=\"civic\" surface=\"sharp\">\n * <App />\n * </ThemeProvider>\n *\n * // Use a custom project theme\n * import { defineTheme, srgb } from \"@nds-design-system/tokens\";\n *\n * const myTheme = defineTheme({\n * name: \"my-project\",\n * extends: \"base\",\n * tokens: {\n * semantic: {\n * color: {\n * bg: { page: srgb(\"#FEFDF9\") },\n * accent: { brand: srgb(\"#A68B5E\") },\n * },\n * },\n * },\n * });\n *\n * <ThemeProvider customTheme={myTheme}>\n * <App />\n * </ThemeProvider>\n * ```\n */\nexport function ThemeProvider({\n\tcolor = \"base\",\n\tsurface = \"base\",\n\tcustomTheme,\n\tchildren,\n\tclassName,\n\tapplyStyles = true,\n}: ThemeProviderProps) {\n\tconst { tokens, cssVars } = useMemo(() => {\n\t\tconst flatTokens: Record<string, string> = {};\n\n\t\t// Get base color theme\n\t\tconst baseColorModule = colorThemes.base;\n\n\t\t// If customTheme is provided, use its base theme; otherwise use the color prop\n\t\tconst effectiveColor = customTheme ? customTheme.extends : color;\n\t\tconst colorModule =\n\t\t\tcolorThemes[effectiveColor as keyof typeof colorThemes] ??\n\t\t\tcolorThemes.base;\n\n\t\tconst mergedColor =\n\t\t\teffectiveColor === \"base\"\n\t\t\t\t? (baseColorModule as Record<string, unknown>)\n\t\t\t\t: mergeTokenModules(baseColorModule, colorModule);\n\n\t\t// Navigate to semantic.color\n\t\tconst colorTokens =\n\t\t\t(mergedColor as { semantic?: { color?: Record<string, unknown> } })\n\t\t\t\t?.semantic?.color ?? mergedColor;\n\t\tObject.assign(flatTokens, processColorTokens(colorTokens));\n\n\t\t// Get surface theme (merge with base if not base)\n\t\tconst baseSurfaceModule = surfaceThemes.base;\n\t\tconst surfaceModule = surfaceThemes[surface];\n\n\t\tconst mergedSurface =\n\t\t\tsurface === \"base\"\n\t\t\t\t? (baseSurfaceModule as Record<string, unknown>)\n\t\t\t\t: mergeTokenModules(baseSurfaceModule, surfaceModule);\n\n\t\t// Navigate to semantic.surface\n\t\tconst surfaceTokens =\n\t\t\t(mergedSurface as { semantic?: { surface?: Record<string, unknown> } })\n\t\t\t\t?.semantic?.surface ?? mergedSurface;\n\t\tObject.assign(flatTokens, processSurfaceTokens(surfaceTokens));\n\n\t\t// Use shared utilities from tokens package\n\t\tconst nestedTokens = flatToNested(flatTokens);\n\t\tlet cssVariables = flatToCSSVars(flatTokens);\n\n\t\t// If customTheme provided, merge its CSS variables (overriding base values)\n\t\tif (customTheme) {\n\t\t\tcssVariables = {\n\t\t\t\t...cssVariables,\n\t\t\t\t...Object.fromEntries(\n\t\t\t\t\tObject.entries(customTheme.cssVars).map(([key, value]) => [\n\t\t\t\t\t\tkey.startsWith(\"--\") ? key : `--${key}`,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\treturn { tokens: nestedTokens, cssVars: cssVariables };\n\t}, [color, surface, customTheme]);\n\n\tconst contextValue: ThemeContextValue = {\n\t\tcssVars,\n\t\ttokens,\n\t\tcolorTheme: customTheme ? (customTheme.extends as ColorThemeName) : color,\n\t\tsurfaceTheme: surface,\n\t};\n\n\treturn (\n\t\t<ThemeContext.Provider value={contextValue}>\n\t\t\t{applyStyles ? (\n\t\t\t\t<div style={cssVars} className={className}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\tchildren\n\t\t\t)}\n\t\t</ThemeContext.Provider>\n\t);\n}\n","/**\n * Theme Hooks\n *\n * React hooks for accessing theme context.\n */\n\nimport type {\n\tCSSVariableMap,\n\tNestedStringRecord,\n} from \"@nds-design-system/tokens\";\nimport { useContext } from \"react\";\nimport { ThemeContext, type ThemeContextValue } from \"./theme-provider\";\n\n/**\n * Hook to access the theme context\n * @throws Error if used outside of ThemeProvider\n */\nexport function useTheme(): ThemeContextValue {\n\tconst context = useContext(ThemeContext);\n\tif (!context) {\n\t\tthrow new Error(\"useTheme must be used within a ThemeProvider\");\n\t}\n\treturn context;\n}\n\n/**\n * Hook to get just the nested tokens\n */\nexport function useThemeTokens(): NestedStringRecord {\n\tconst { tokens } = useTheme();\n\treturn tokens;\n}\n\n/**\n * Hook to get CSS variables for inline styles\n */\nexport function useCSSVars(): CSSVariableMap {\n\tconst { cssVars } = useTheme();\n\treturn cssVars;\n}\n","/**\n * Theme Utilities\n *\n * Helper functions for working with theme tokens and CSS variables.\n */\n\nimport type {\n\tCSSVariableMap,\n\tNestedStringRecord,\n} from \"@nds-design-system/tokens\";\nimport { nestedToCSSVars } from \"@nds-design-system/tokens\";\n\n/**\n * Convert nested token object to CSS variable map\n * @example\n * toCSSVars({ color: { bg: { page: '#fff' } } })\n * // Returns: { '--color-bg-page': '#fff' }\n */\nexport function toCSSVars(tokens: NestedStringRecord): CSSVariableMap {\n\treturn nestedToCSSVars(tokens);\n}\n\n/**\n * Apply CSS variables to an element\n * @example\n * applyTheme(document.body, { '--color-bg-page': '#fff' })\n */\nexport function applyTheme(\n\telement: HTMLElement,\n\tcssVars: CSSVariableMap,\n): void {\n\tfor (const [name, value] of Object.entries(cssVars)) {\n\t\telement.style.setProperty(name, value);\n\t}\n}\n\n/**\n * Remove CSS variables from an element\n */\nexport function removeTheme(\n\telement: HTMLElement,\n\tcssVars: CSSVariableMap,\n): void {\n\tfor (const name of Object.keys(cssVars)) {\n\t\telement.style.removeProperty(name);\n\t}\n}\n\n/**\n * Get a specific token value from nested tokens using dot notation\n * @example\n * getToken({ color: { bg: { page: '#fff' } } }, 'color.bg.page')\n * // Returns: '#fff'\n */\nexport function getToken(\n\ttokens: NestedStringRecord,\n\tpath: string,\n): string | undefined {\n\tconst parts = path.split(\".\");\n\tlet current: NestedStringRecord | string = tokens;\n\n\tfor (const part of parts) {\n\t\tif (typeof current === \"string\") return undefined;\n\t\tcurrent = current[part];\n\t\tif (current === undefined) return undefined;\n\t}\n\n\treturn typeof current === \"string\" ? current : undefined;\n}\n\n/**\n * Create a style object with CSS variables for React inline styles\n * @example\n * <div style={createThemeStyle(cssVars)}>...</div>\n */\nexport function createThemeStyle(cssVars: CSSVariableMap): React.CSSProperties {\n\treturn cssVars as React.CSSProperties;\n}\n\n/**\n * Merge multiple CSS variable maps\n */\nexport function mergeCSSVars(...maps: CSSVariableMap[]): CSSVariableMap {\n\treturn Object.assign({}, ...maps);\n}\n\n/**\n * Filter CSS variables by prefix\n * @example\n * filterCSSVars(cssVars, '--color-')\n * // Returns only variables starting with --color-\n */\nexport function filterCSSVars(\n\tcssVars: CSSVariableMap,\n\tprefix: string,\n): CSSVariableMap {\n\tconst result: CSSVariableMap = {};\n\tfor (const [name, value] of Object.entries(cssVars)) {\n\t\tif (name.startsWith(prefix)) {\n\t\t\tresult[name] = value;\n\t\t}\n\t}\n\treturn result;\n}\n"]}
|