react-marketing-ui 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/dist/accordion.js +1 -1
  2. package/dist/accordion.js.map +1 -1
  3. package/dist/accordion.mjs +222 -2
  4. package/dist/accordion.mjs.map +1 -1
  5. package/dist/action-swap.js +1 -0
  6. package/dist/action-swap.mjs +77 -3
  7. package/dist/action-swap.mjs.map +1 -1
  8. package/dist/animated-beam.js +1 -0
  9. package/dist/animated-beam.mjs +127 -2
  10. package/dist/animated-beam.mjs.map +1 -1
  11. package/dist/button.js +1 -1
  12. package/dist/button.js.map +1 -1
  13. package/dist/button.mjs +115 -2
  14. package/dist/button.mjs.map +1 -1
  15. package/dist/card.js +1 -2
  16. package/dist/card.js.map +1 -1
  17. package/dist/card.mjs +135 -3
  18. package/dist/card.mjs.map +1 -1
  19. package/dist/dia-text-reveal.js +1 -0
  20. package/dist/dia-text-reveal.mjs +331 -2
  21. package/dist/dia-text-reveal.mjs.map +1 -1
  22. package/dist/elevated-input.js +1 -1
  23. package/dist/elevated-input.js.map +1 -1
  24. package/dist/elevated-input.mjs +48 -2
  25. package/dist/elevated-input.mjs.map +1 -1
  26. package/dist/fade-in.js +1 -0
  27. package/dist/fade-in.mjs +84 -2
  28. package/dist/fade-in.mjs.map +1 -1
  29. package/dist/feature-card.js +1 -1
  30. package/dist/feature-card.js.map +1 -1
  31. package/dist/feature-card.mjs +34 -2
  32. package/dist/feature-card.mjs.map +1 -1
  33. package/dist/flowchart-parts.js +1 -1
  34. package/dist/flowchart-parts.js.map +1 -1
  35. package/dist/flowchart-parts.mjs +91 -2
  36. package/dist/flowchart-parts.mjs.map +1 -1
  37. package/dist/glossy-button.js +1 -1
  38. package/dist/glossy-button.js.map +1 -1
  39. package/dist/glossy-button.mjs +82 -2
  40. package/dist/glossy-button.mjs.map +1 -1
  41. package/dist/grainient.js +1 -0
  42. package/dist/grainient.mjs +327 -2
  43. package/dist/grainient.mjs.map +1 -1
  44. package/dist/highlighter.js +1 -0
  45. package/dist/highlighter.mjs +122 -3
  46. package/dist/highlighter.mjs.map +1 -1
  47. package/dist/index.js +1 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/index.mjs +2642 -32
  50. package/dist/index.mjs.map +1 -1
  51. package/dist/input.js +1 -0
  52. package/dist/input.mjs +107 -2
  53. package/dist/input.mjs.map +1 -1
  54. package/dist/lib/breakpoints.js +1 -1
  55. package/dist/lib/breakpoints.js.map +1 -1
  56. package/dist/lib/breakpoints.mjs +34 -1
  57. package/dist/lib/breakpoints.mjs.map +1 -1
  58. package/dist/lib/cn.js +1 -1
  59. package/dist/lib/cn.js.map +1 -1
  60. package/dist/lib/cn.mjs +17 -1
  61. package/dist/lib/cn.mjs.map +1 -1
  62. package/dist/lib/ease.js +1 -0
  63. package/dist/lib/ease.mjs +9 -1
  64. package/dist/lib/ease.mjs.map +1 -1
  65. package/dist/lib/surface.js +1 -0
  66. package/dist/lib/surface.mjs +37 -1
  67. package/dist/lib/surface.mjs.map +1 -1
  68. package/dist/lib/use-media-query.js +1 -0
  69. package/dist/lib/use-media-query.mjs +16 -1
  70. package/dist/lib/use-media-query.mjs.map +1 -1
  71. package/dist/liquid-metal.js +1 -0
  72. package/dist/liquid-metal.mjs +40 -2
  73. package/dist/liquid-metal.mjs.map +1 -1
  74. package/dist/navigation-menu-icons.js +1 -1
  75. package/dist/navigation-menu-icons.js.map +1 -1
  76. package/dist/navigation-menu-icons.mjs +36 -1
  77. package/dist/navigation-menu-icons.mjs.map +1 -1
  78. package/dist/navigation-menu-styles.js +1 -1
  79. package/dist/navigation-menu-styles.js.map +1 -1
  80. package/dist/navigation-menu-styles.mjs +11 -1
  81. package/dist/navigation-menu-styles.mjs.map +1 -1
  82. package/dist/navigation-menu.js +1 -2
  83. package/dist/navigation-menu.js.map +1 -1
  84. package/dist/navigation-menu.mjs +350 -5
  85. package/dist/navigation-menu.mjs.map +1 -1
  86. package/dist/password-input.js +1 -0
  87. package/dist/password-input.mjs +171 -3
  88. package/dist/password-input.mjs.map +1 -1
  89. package/dist/rainbow-button.js +1 -0
  90. package/dist/rainbow-button.mjs +45 -2
  91. package/dist/rainbow-button.mjs.map +1 -1
  92. package/dist/range-slider.js +1 -0
  93. package/dist/range-slider.mjs +82 -1
  94. package/dist/range-slider.mjs.map +1 -1
  95. package/dist/rolling-badge.js +1 -0
  96. package/dist/rolling-badge.mjs +68 -2
  97. package/dist/rolling-badge.mjs.map +1 -1
  98. package/dist/savings-badge.js +1 -1
  99. package/dist/savings-badge.js.map +1 -1
  100. package/dist/savings-badge.mjs +22 -2
  101. package/dist/savings-badge.mjs.map +1 -1
  102. package/dist/shine-border.js +1 -0
  103. package/dist/shine-border.mjs +44 -2
  104. package/dist/shine-border.mjs.map +1 -1
  105. package/dist/sparkles-text.js +1 -0
  106. package/dist/sparkles-text.mjs +84 -3
  107. package/dist/sparkles-text.mjs.map +1 -1
  108. package/dist/tabs.js +1 -0
  109. package/dist/tabs.mjs +118 -2
  110. package/dist/tabs.mjs.map +1 -1
  111. package/dist/theme-toggle.js +1 -0
  112. package/dist/theme-toggle.mjs +248 -5
  113. package/dist/theme-toggle.mjs.map +1 -1
  114. package/package.json +68 -68
  115. package/dist/chunk-3SB6HUBA.mjs +0 -31
  116. package/dist/chunk-3SB6HUBA.mjs.map +0 -1
  117. package/dist/chunk-4PBVBXGY.mjs +0 -84
  118. package/dist/chunk-4PBVBXGY.mjs.map +0 -1
  119. package/dist/chunk-4VCFWVSJ.mjs +0 -42
  120. package/dist/chunk-4VCFWVSJ.mjs.map +0 -1
  121. package/dist/chunk-5QQAPGR2.mjs +0 -109
  122. package/dist/chunk-5QQAPGR2.mjs.map +0 -1
  123. package/dist/chunk-6MB4UKRX.mjs +0 -19
  124. package/dist/chunk-6MB4UKRX.mjs.map +0 -1
  125. package/dist/chunk-6T5LR34O.mjs +0 -45
  126. package/dist/chunk-6T5LR34O.mjs.map +0 -1
  127. package/dist/chunk-AYLCYDUM.mjs +0 -275
  128. package/dist/chunk-AYLCYDUM.mjs.map +0 -1
  129. package/dist/chunk-AYY7D2RJ.mjs +0 -112
  130. package/dist/chunk-AYY7D2RJ.mjs.map +0 -1
  131. package/dist/chunk-CTZEI2YS.mjs +0 -324
  132. package/dist/chunk-CTZEI2YS.mjs.map +0 -1
  133. package/dist/chunk-DA3I3Y5O.mjs +0 -71
  134. package/dist/chunk-DA3I3Y5O.mjs.map +0 -1
  135. package/dist/chunk-EYHT2EWJ.mjs +0 -18
  136. package/dist/chunk-EYHT2EWJ.mjs.map +0 -1
  137. package/dist/chunk-IHLGCS63.mjs +0 -36
  138. package/dist/chunk-IHLGCS63.mjs.map +0 -1
  139. package/dist/chunk-JVXJ6SFX.mjs +0 -38
  140. package/dist/chunk-JVXJ6SFX.mjs.map +0 -1
  141. package/dist/chunk-KBHYXLRG.mjs +0 -13
  142. package/dist/chunk-KBHYXLRG.mjs.map +0 -1
  143. package/dist/chunk-KMXUQYR3.mjs +0 -74
  144. package/dist/chunk-KMXUQYR3.mjs.map +0 -1
  145. package/dist/chunk-KNPOZ34H.mjs +0 -88
  146. package/dist/chunk-KNPOZ34H.mjs.map +0 -1
  147. package/dist/chunk-KRNWCJ4D.mjs +0 -219
  148. package/dist/chunk-KRNWCJ4D.mjs.map +0 -1
  149. package/dist/chunk-M5MESV26.mjs +0 -124
  150. package/dist/chunk-M5MESV26.mjs.map +0 -1
  151. package/dist/chunk-MJYBPJBA.mjs +0 -115
  152. package/dist/chunk-MJYBPJBA.mjs.map +0 -1
  153. package/dist/chunk-NNHPQ67J.mjs +0 -10
  154. package/dist/chunk-NNHPQ67J.mjs.map +0 -1
  155. package/dist/chunk-OCZFHVVD.mjs +0 -71
  156. package/dist/chunk-OCZFHVVD.mjs.map +0 -1
  157. package/dist/chunk-QAWSH567.mjs +0 -19
  158. package/dist/chunk-QAWSH567.mjs.map +0 -1
  159. package/dist/chunk-R2E2J42H.mjs +0 -38
  160. package/dist/chunk-R2E2J42H.mjs.map +0 -1
  161. package/dist/chunk-TPGLLSYV.mjs +0 -65
  162. package/dist/chunk-TPGLLSYV.mjs.map +0 -1
  163. package/dist/chunk-VJENJHXJ.mjs +0 -72
  164. package/dist/chunk-VJENJHXJ.mjs.map +0 -1
  165. package/dist/chunk-W22G7XHR.mjs +0 -104
  166. package/dist/chunk-W22G7XHR.mjs.map +0 -1
  167. package/dist/chunk-WDR5VPZJ.mjs +0 -79
  168. package/dist/chunk-WDR5VPZJ.mjs.map +0 -1
  169. package/dist/chunk-WLUGKBH7.mjs +0 -37
  170. package/dist/chunk-WLUGKBH7.mjs.map +0 -1
  171. package/dist/chunk-WYJYLDUA.mjs +0 -84
  172. package/dist/chunk-WYJYLDUA.mjs.map +0 -1
  173. package/dist/chunk-XZEDZVXT.mjs +0 -38
  174. package/dist/chunk-XZEDZVXT.mjs.map +0 -1
  175. package/dist/chunk-YKGP5JIL.mjs +0 -328
  176. package/dist/chunk-YKGP5JIL.mjs.map +0 -1
  177. package/dist/chunk-YM3U2OBE.mjs +0 -99
  178. package/dist/chunk-YM3U2OBE.mjs.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/components/accordion.tsx","../src/lib/ease.ts","../src/components/action-swap.tsx","../src/components/animated-beam.tsx","../src/components/button.tsx","../src/lib/surface.ts","../src/components/card.tsx","../src/components/dia-text-reveal.lines.tsx","../src/components/dia-text-reveal.sweep.ts","../src/components/dia-text-reveal.utils.ts","../src/components/dia-text-reveal.tsx","../src/components/elevated-input.tsx","../src/components/fade-in.tsx","../src/components/feature-card.tsx","../src/components/flowchart-parts.tsx","../src/components/glossy-button.tsx","../src/components/grainient.shader.ts","../src/components/grainient.tsx","../src/lib/use-media-query.ts","../src/components/highlighter.tsx","../src/components/input.tsx","../src/components/liquid-metal.tsx","../src/components/navigation-menu-icons.tsx","../src/components/navigation-menu-styles.ts","../src/components/navigation-menu.tsx","../src/components/password-input.tsx","../src/components/rainbow-button.tsx","../src/components/range-slider.tsx","../src/components/rolling-badge.tsx","../src/components/savings-badge.tsx","../src/components/shine-border.tsx","../src/components/sparkles-text.tsx","../src/components/tabs.tsx","../src/components/theme-toggle.tsx","../src/lib/breakpoints.ts"],"names":["twMerge","clsx","jsx","BaseAccordion","jsxs","useReducedMotion","useRef","useState","useLayoutEffect","AnimatePresence","motion","useId","useEffect","cva","prefersReducedMotion","useMemo","useCallback","useInView","createContext","useContext","Fragment","Program","Renderer","Triangle","Mesh","annotate","timer","LiquidMetalShader","ChevronDownIcon","NavigationMenuPrimitive","Slot","tick","useSyncExternalStore","DEFAULT_COLORS","useSpring","useTransform","BREAKPOINTS","getBreakpoint","onBreakpointChange","subscribe"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport type { CSSProperties } from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * A style object that may carry CSS custom properties (CSS variables)\n * such as `--duration`. React's `CSSProperties` intentionally drops\n * its index signature, so custom properties are not accepted without help.\n */\nexport type CSSPropertiesWithVars = CSSProperties & Record<`--${string}`, string | number>;\n\n/**\n * Builds a {@link CSSProperties} value that also allows CSS custom properties,\n * so `style` props can be written without an `as React.CSSProperties` cast while\n * still type-checking both the known style keys and the custom-property values.\n *\n * @example\n * <div style={validCssVars({ '--duration': '0.35s', color: 'red' })} />\n */\nexport function validCssVars(style: CSSPropertiesWithVars): CSSProperties {\n return style;\n}\n\n/**\n * Narrows a union to the member(s) that declare `key` — a type-guard\n * replacement for the `in` operator's discriminated-union narrowing.\n */\nexport function hasKey<K extends PropertyKey>(key: K, obj: unknown): obj is Record<K, unknown> {\n return obj !== null && typeof obj === 'object' && Object.hasOwn(obj, key);\n}\n\nexport function noop(): void {\n // intentional no-op\n}\n","import { Accordion as BaseAccordion } from '@base-ui/react/accordion';\nimport type * as React from 'react';\nimport { cn } from '../lib/utils.js';\n\ntype AccordionVariant =\n | 'default'\n | 'split'\n | 'outline'\n | 'nested'\n | 'isolated-bordered'\n | 'isolated-filled'\n | 'isolated-filled-bordered';\n\nfunction Accordion({\n className,\n multiple = false,\n variant = 'default',\n ...props\n}: BaseAccordion.Root.Props & { variant?: AccordionVariant }) {\n return (\n <BaseAccordion.Root\n data-slot=\"accordion\"\n data-variant={variant}\n multiple={multiple}\n className={cn(\n 'group flex w-full flex-col',\n variant === 'split' && 'space-y-2',\n variant === 'outline' && 'overflow-hidden rounded-lg border bg-(--surface)',\n variant === 'nested' && 'rounded-lg border bg-muted p-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AccordionItem({ className, ...props }: BaseAccordion.Item.Props) {\n return (\n <BaseAccordion.Item\n data-slot=\"accordion-item\"\n className={cn(\n 'transition-[margin,border-radius,border] duration-250 ease-out-expo',\n // Default variant styles\n 'group-data-[variant=default]:border-(--border) group-data-[variant=default]:border-b group-data-[variant=default]:last:border-b-0',\n // Split variant styles (individual cards)\n 'group-data-[variant=split]:overflow-hidden group-data-[variant=split]:rounded-lg group-data-[variant=split]:border group-data-[variant=split]:border-(--border) group-data-[variant=split]:bg-(--surface)',\n // Outline variant styles (items within single card)\n 'group-data-[variant=outline]:border-(--border) group-data-[variant=outline]:border-b group-data-[variant=outline]:last:border-b-0',\n // Nested variant styles - items within the single outer card\n 'group-data-[variant=nested]:mt-0.5 group-data-[variant=nested]:first:mt-0',\n // Isolated bordered variant styles - dynamically separates open items from closed ones\n // Base styles: all items have borders and background to look like cards\n 'group-data-[variant=isolated-bordered]:overflow-hidden group-data-[variant=isolated-bordered]:border group-data-[variant=isolated-bordered]:border-(--border) group-data-[variant=isolated-bordered]:bg-(--surface)',\n // Closed items: group together by overlapping borders with negative margin\n // Only apply to closed items that follow another closed item (not open items, first item, or items after open items)\n 'group-data-[variant=isolated-bordered]:relative group-data-[variant=isolated-bordered]:not-first:not-data-open:not-[[data-open]+&]:-mt-px',\n // Opened item - separated with margins\n 'group-data-[variant=isolated-bordered]:data-open:mt-2 group-data-[variant=isolated-bordered]:data-open:mb-2 group-data-[variant=isolated-bordered]:data-open:rounded-lg',\n // First item\n 'group-data-[variant=isolated-bordered]:first:rounded-t-lg group-data-[variant=isolated-bordered]:data-open:first:mt-0',\n // Last item\n 'group-data-[variant=isolated-bordered]:last:rounded-b-lg group-data-[variant=isolated-bordered]:data-open:last:mb-0',\n // Item after open item: round top corners (start of new group)\n 'group-data-[variant=isolated-bordered]:[[data-open]+&]:rounded-t-lg',\n // Item before open item: round bottom corners (end of group)\n 'group-data-[variant=isolated-bordered]:[&:has(+_[data-open])]:rounded-b-lg',\n // Isolated filled variant\n 'group-data-[variant=isolated-filled]:overflow-hidden group-data-[variant=isolated-filled]:bg-muted',\n // Opened item - separated with margins and rounded\n 'group-data-[variant=isolated-filled]:data-open:my-2 group-data-[variant=isolated-filled]:data-open:rounded-lg',\n // First item\n 'group-data-[variant=isolated-filled]:first:rounded-t-lg group-data-[variant=isolated-filled]:data-open:first:mt-0',\n // Last item\n 'group-data-[variant=isolated-filled]:last:rounded-b-lg group-data-[variant=isolated-filled]:data-open:last:mb-0',\n // Item after open item: round top corners (start of new group)\n 'group-data-[variant=isolated-filled]:[[data-open]+&]:rounded-t-lg',\n // Item before open item: round bottom corners (end of group)\n 'group-data-[variant=isolated-filled]:[&:has(+_[data-open])]:rounded-b-lg',\n // Isolated filled bordered variant - filled background with borders between closed items\n 'group-data-[variant=isolated-filled-bordered]:overflow-hidden group-data-[variant=isolated-filled-bordered]:bg-muted',\n // All items except last have border-bottom to prevent layout shift, default to visible border\n 'group-data-[variant=isolated-filled-bordered]:not-last:border-(--border) group-data-[variant=isolated-filled-bordered]:not-last:border-b',\n // Make border transparent (invisible) for: items before open items, and open items themselves\n 'group-data-[variant=isolated-filled-bordered]:[&:has(+_[data-open])]:border-transparent',\n 'group-data-[variant=isolated-filled-bordered]:data-open:border-transparent',\n // Opened item - separated with margins and rounded\n 'group-data-[variant=isolated-filled-bordered]:data-open:my-2 group-data-[variant=isolated-filled-bordered]:data-open:rounded-lg',\n // First item\n 'group-data-[variant=isolated-filled-bordered]:first:rounded-t-lg group-data-[variant=isolated-filled-bordered]:data-open:first:mt-0',\n // Last item\n 'group-data-[variant=isolated-filled-bordered]:last:rounded-b-lg group-data-[variant=isolated-filled-bordered]:data-open:last:mb-0',\n // Item after open item: round top corners (start of new group)\n 'group-data-[variant=isolated-filled-bordered]:[[data-open]+&]:rounded-t-lg',\n // Item before open item: round bottom corners (end of group)\n 'group-data-[variant=isolated-filled-bordered]:[&:has(+_[data-open])]:rounded-b-lg',\n\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AccordionHeader({ className, ...props }: BaseAccordion.Header.Props) {\n return (\n <BaseAccordion.Header\n data-slot=\"accordion-header\"\n // `not-prose` guards the trigger from document typography when the\n // accordion is rendered inside a prose/markdown container (e.g. MDX docs),\n // which would otherwise style this heading with large margins and an\n // inflated line-height. Inert outside a prose context.\n className={cn('not-prose', className)}\n {...props}\n />\n );\n}\n\ninterface AccordionTriggerProps extends BaseAccordion.Trigger.Props {\n showIndicator?: boolean;\n indicatorType?: 'chevron' | 'plus';\n indicatorPosition?: 'start' | 'end';\n /** Colour class applied to the indicator glyph, e.g. `text-(--accent-brand)`. Defaults to muted-foreground. */\n indicatorColor?: string;\n icon?: React.ReactNode;\n subtitle?: React.ReactNode;\n}\n\nfunction AccordionTrigger({\n children,\n className,\n showIndicator = true,\n indicatorType = 'plus',\n indicatorPosition = 'end',\n indicatorColor,\n icon,\n subtitle,\n ...props\n}: AccordionTriggerProps) {\n const hasStartIndicator = showIndicator && indicatorPosition === 'start';\n const hasEndIndicator = showIndicator && indicatorPosition === 'end';\n\n const renderIndicator = () => {\n if (!showIndicator) return null;\n\n const indicatorClassName = cn('size-4 shrink-0 transition-transform duration-200 ease-out-expo', indicatorColor);\n\n const indicatorIcon =\n indicatorType === 'chevron' ? (\n <ChevronDownIcon data-slot=\"accordion-indicator\" className={indicatorClassName} />\n ) : (\n <PlusIcon data-slot=\"accordion-indicator\" className={indicatorClassName} />\n );\n\n return (\n <span className=\"shrink-0 text-muted-foreground\" aria-hidden=\"true\">\n {indicatorIcon}\n </span>\n );\n };\n\n return (\n <AccordionHeader>\n <BaseAccordion.Trigger\n data-slot=\"accordion-trigger\"\n data-has-icon={hasStartIndicator ? 'true' : undefined}\n className={cn(\n 'group/trigger flex w-full cursor-pointer items-center justify-between gap-3 py-5 px-3.5 text-left font-medium text-sm outline-none disabled:pointer-events-none disabled:opacity-60',\n // Default variant styles\n 'group-data-[variant=default]:px-0',\n // Split variant styles\n 'group-data-[variant=split]:rounded-t-lg',\n // Nested variant styles - trigger with subtle interaction\n 'group-data-[variant=nested]:rounded-sm group-data-[variant=nested]:px-3 group-data-[variant=nested]:py-2.5 group-data-[variant=nested]:hover:bg-background group-data-[variant=nested]:dark:hover:bg-background/50',\n // Indicator rotation animations\n indicatorType === 'chevron' && '[&[data-panel-open]_[data-slot=accordion-indicator]]:rotate-180',\n indicatorType === 'plus' && '[&[data-panel-open]_[data-slot=accordion-indicator]]:rotate-90',\n className,\n )}\n {...props}\n >\n {hasStartIndicator ? renderIndicator() : null}\n\n {/* icon prop — only rendered when indicator is at end position */}\n {icon && !hasStartIndicator && (\n <span className=\"shrink-0 text-muted-foreground\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span className=\"underline-offset-2 group-hover/trigger:underline\">{children}</span>\n {subtitle ? <span className=\"text-muted-foreground text-sm no-underline\">{subtitle}</span> : null}\n </div>\n\n {hasEndIndicator ? renderIndicator() : null}\n </BaseAccordion.Trigger>\n </AccordionHeader>\n );\n}\n\nfunction AccordionContent({ children, className, ...props }: BaseAccordion.Panel.Props) {\n return (\n <BaseAccordion.Panel\n data-slot=\"accordion-content\"\n className={cn(\n 'h-(--accordion-panel-height) overflow-hidden text-sm transition-[height,opacity] duration-250 ease-out-expo data-ending-style:h-0 data-starting-style:h-0 data-ending-style:opacity-0 data-starting-style:opacity-0',\n )}\n {...props}\n >\n <div\n className={cn(\n 'p-3.5 text-muted-foreground',\n 'group-data-[variant=default]:px-0 group-data-[variant=default]:pt-0',\n 'group-data-[variant=split]:pt-0',\n 'group-data-[variant=outline]:pt-0',\n // Nested variant\n 'group-data-[variant=nested]:mt-1 group-data-[variant=nested]:mb-0.5 group-data-[variant=nested]:rounded-sm group-data-[variant=nested]:border group-data-[variant=nested]:bg-background group-data-[variant=nested]:p-3 group-data-[variant=nested]:[[data-slot=accordion-item]:last-child_&]:mb-0',\n // Isolated bordered variant\n 'group-data-[variant=isolated-bordered]:pt-0',\n // Isolated filled variant\n 'group-data-[variant=isolated-filled]:pt-0',\n // Isolated filled bordered variant\n 'group-data-[variant=isolated-filled-bordered]:pt-0',\n // Icon alignment - add left padding when parent item contains a trigger with icon\n '[[data-slot=accordion-item]:has([data-has-icon])_&]:pl-[calc(1rem+0.75rem)]',\n '[[data-slot=accordion-item]:has([data-has-icon])_&]:group-data-[variant=default]:pl-[calc(1rem+0.75rem)]',\n className,\n )}\n >\n {children}\n </div>\n </BaseAccordion.Panel>\n );\n}\n\nfunction PlusIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" {...props}>\n {/* Horizontal bar - fades out when accordion opens */}\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.75 12C2.75 11.3096 3.30964 10.75 4 10.75H20C20.6904 10.75 21.25 11.3096 21.25 12C21.25 12.6904 20.6904 13.25 20 13.25H4C3.30964 13.25 2.75 12.6904 2.75 12Z\"\n fill=\"currentColor\"\n className=\"in-data-panel-open:opacity-0 transition-opacity duration-200 ease-out-expo\"\n />\n {/* Vertical bar - remains visible (becomes horizontal after 90° rotation) */}\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 2.75C12.6904 2.75 13.25 3.30964 13.25 4V20C13.25 20.6904 12.6904 21.25 12 21.25C11.3096 21.25 10.75 20.6904 10.75 20V4C10.75 3.30964 11.3096 2.75 12 2.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\n/** Inline replacement for the site's `@iconify-icons/mingcute/down-line` glyph. */\nfunction ChevronDownIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" {...props}>\n <path d=\"M1 3.5L5 7.5L9 3.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n );\n}\n\nexport { Accordion, AccordionContent, AccordionHeader, AccordionItem, AccordionTrigger };\n","/**\n * Easing curves shared across landing-ui components.\n */\n\n/** Smooth deceleration — matches the former CSS `ease-out-expo`. */\nexport const easeOut = [0.22, 1, 0.36, 1] as const;\n\n/** Gentle overshoot — bounce-like settle for spring alternatives. */\nexport const easeOutBack = [0.34, 1.56, 0.64, 1] as const;\n\n// ── Content-swap tokens (action-swap) ─────────────────────────────────────\n// Values mirror beui.dev's `lib/ease.ts` so vendored action-swap primitives\n// keep their upstream timing.\n\n/** Strong ease-out — the default `ease-out` reads weak at these durations. */\nexport const EASE_OUT = [0.16, 1, 0.3, 1] as const;\n\n/** CSS string form of {@link EASE_OUT} for inline style transitions. */\nexport const EASE_OUT_CSS = 'cubic-bezier(0.16, 1, 0.3, 1)';\n\n/** Content swaps — label/icon slots trading places inside a control. */\nexport const SPRING_SWAP = { type: 'spring', stiffness: 460, damping: 30, mass: 0.55 } as const;\n","'use client';\n// Adapted from beui.dev/components/motion/action-swap (roll variant only).\n// Upstream imports `motion/react`; this project is on framer-motion, and its\n// blur/cascade animations and pre-styled <ActionSwapButton> are omitted — the\n// button's variant classes reference `bg-card`/`bg-primary`, which this site\n// doesn't define as --color-* tokens, so Tailwind would drop them silently.\n\nimport { AnimatePresence, motion, useReducedMotion, type Variants } from 'framer-motion';\nimport { type ReactNode, useLayoutEffect, useRef, useState } from 'react';\nimport { EASE_OUT, EASE_OUT_CSS, SPRING_SWAP } from '../lib/ease.js';\nimport { cn } from '../lib/utils.js';\n\n/** The outgoing half rolls out faster than the incoming half settles. */\nconst ROLL_EXIT_TRANSITION = { duration: 0.14, ease: EASE_OUT } as const;\nconst ROLL_BLUR = 'blur(3px)';\n\n/** Rest state used under reduced motion — no travel, no blur. */\nconst AT_REST = { opacity: 1, y: 0, filter: 'blur(0px)' } as const;\n\n/** Text travels in percentages so the roll scales with the line height. */\nconst TEXT_VARIANTS: Variants = {\n initial: { opacity: 0, y: '90%', filter: ROLL_BLUR },\n animate: { opacity: 1, y: '0%', filter: 'blur(0px)', transition: SPRING_SWAP },\n exit: { opacity: 0, y: '-90%', filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION },\n};\n\n/** Icons travel in pixels — a glyph box has no line height to scale against. */\nconst ICON_VARIANTS: Variants = {\n initial: { opacity: 0, y: 12, filter: ROLL_BLUR },\n animate: { opacity: 1, y: 0, filter: 'blur(0px)', transition: SPRING_SWAP },\n exit: { opacity: 0, y: -12, filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION },\n};\n\nexport type ActionSwapRollProps = {\n /** Identity of the current content — changing it triggers the roll. */\n value: string;\n children: ReactNode;\n className?: string;\n};\n\n/**\n * Rolls `children` up out of the box while the new content rolls in from below,\n * animating the box's width so labels of different lengths don't snap.\n *\n * The visible label is the accessible name, so for the duration of a swap both\n * the outgoing and incoming text are in the accessibility tree. Give the host\n * control an explicit `aria-label` when that ambiguity matters.\n */\nexport function ActionSwapRollText({ value, children, className }: ActionSwapRollProps) {\n const reduce = useReducedMotion() ?? false;\n const measureRef = useRef<HTMLSpanElement>(null);\n const [width, setWidth] = useState<number>();\n\n // Deliberately un-keyed: the invisible copy is re-measured after every render\n // so the box tracks content it can't diff (fonts finishing, text changing).\n useLayoutEffect(() => {\n const nextWidth = measureRef.current?.offsetWidth;\n if (!nextWidth) return;\n setWidth((current) => (current === nextWidth ? current : nextWidth));\n });\n\n return (\n <span\n className={cn('relative inline-block overflow-hidden whitespace-nowrap align-bottom', className)}\n style={{ width, transition: reduce ? undefined : `width 220ms ${EASE_OUT_CSS}` }}\n >\n {/* Width source: laid out in flow but never painted, so the absolutely\n positioned live copies below have something to size the box. */}\n <span ref={measureRef} aria-hidden={true} className=\"invisible inline-block whitespace-nowrap\">\n {children}\n </span>\n <AnimatePresence initial={false}>\n <motion.span\n key={value}\n variants={TEXT_VARIANTS}\n initial={reduce ? false : 'initial'}\n animate={reduce ? AT_REST : 'animate'}\n exit={reduce ? undefined : 'exit'}\n className=\"absolute top-0 left-0 inline-block will-change-[opacity,filter,transform]\"\n >\n {children}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n\n/**\n * Icon counterpart to {@link ActionSwapRollText}. `popLayout` pulls the outgoing\n * icon out of flow so the pair overlaps in one cell instead of sitting side by\n * side mid-swap. Always `aria-hidden` — icons here restate a visible label.\n */\nexport function ActionSwapRollIcon({ value, children, className }: ActionSwapRollProps) {\n const reduce = useReducedMotion() ?? false;\n\n return (\n <span className={cn('relative inline-grid shrink-0 place-items-center overflow-hidden', className)}>\n <AnimatePresence mode=\"popLayout\" initial={false}>\n <motion.span\n key={value}\n aria-hidden={true}\n variants={ICON_VARIANTS}\n initial={reduce ? false : 'initial'}\n animate={reduce ? AT_REST : 'animate'}\n exit={reduce ? undefined : 'exit'}\n className=\"col-start-1 row-start-1 inline-flex items-center justify-center will-change-[opacity,filter,transform]\"\n >\n {children}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { type RefObject, useEffect, useId, useState } from 'react';\nimport { cn } from '../lib/utils.js';\n\nexport type AnimatedBeamProps = {\n className?: string;\n containerRef: RefObject<HTMLElement | null>;\n fromRef: RefObject<HTMLElement | null>;\n toRef: RefObject<HTMLElement | null>;\n curvature?: number;\n reverse?: boolean;\n pathColor?: string;\n pathWidth?: number;\n pathOpacity?: number;\n gradientStartColor?: string;\n gradientStopColor?: string;\n delay?: number;\n duration?: number;\n repeat?: number;\n repeatDelay?: number;\n startXOffset?: number;\n startYOffset?: number;\n endXOffset?: number;\n endYOffset?: number;\n};\n\nexport function AnimatedBeam({\n className,\n containerRef,\n fromRef,\n toRef,\n curvature = 0,\n reverse = false,\n duration = 5,\n delay = 0,\n pathColor = 'gray',\n pathWidth = 2,\n pathOpacity = 0.2,\n gradientStartColor = '#ffaa40',\n gradientStopColor = '#9c40ff',\n repeat = Number.POSITIVE_INFINITY,\n repeatDelay = 0,\n startXOffset = 0,\n startYOffset = 0,\n endXOffset = 0,\n endYOffset = 0,\n}: AnimatedBeamProps) {\n const id = useId();\n const [pathD, setPathD] = useState('');\n const [svgDimensions, setSvgDimensions] = useState({\n width: 0,\n height: 0,\n });\n\n const gradientCoordinates = reverse\n ? {\n x1: ['90%', '-10%'],\n x2: ['100%', '0%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n : {\n x1: ['10%', '110%'],\n x2: ['0%', '100%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n };\n\n // biome-ignore lint/plugin: measures live DOM layout to compute beam path — post-render measurement.\n useEffect(() => {\n const updatePath = () => {\n if (containerRef.current && fromRef.current && toRef.current) {\n const containerRect = containerRef.current.getBoundingClientRect();\n const rectA = fromRef.current.getBoundingClientRect();\n const rectB = toRef.current.getBoundingClientRect();\n\n const svgWidth = containerRect.width;\n const svgHeight = containerRect.height;\n setSvgDimensions({ width: svgWidth, height: svgHeight });\n\n const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset;\n const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset;\n const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset;\n const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset;\n\n const controlY = startY - curvature;\n const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`;\n setPathD(d);\n }\n };\n\n const resizeObserver = new ResizeObserver(() => {\n updatePath();\n });\n\n if (containerRef.current) resizeObserver.observe(containerRef.current);\n\n updatePath();\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset]);\n\n return (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n width={svgDimensions.width}\n height={svgDimensions.height}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('pointer-events-none absolute top-0 left-0 transform-gpu stroke-2', className)}\n viewBox={`0 0 ${svgDimensions.width} ${svgDimensions.height}`}\n >\n <path d={pathD} stroke={pathColor} strokeWidth={pathWidth} strokeOpacity={pathOpacity} strokeLinecap=\"round\" />\n <path d={pathD} strokeWidth={pathWidth} stroke={`url(#${id})`} strokeOpacity=\"1\" strokeLinecap=\"round\" />\n <defs>\n <motion.linearGradient\n className=\"transform-gpu\"\n id={id}\n gradientUnits=\"userSpaceOnUse\"\n initial={{\n x1: '0%',\n x2: '0%',\n y1: '0%',\n y2: '0%',\n }}\n animate={{\n x1: gradientCoordinates.x1,\n x2: gradientCoordinates.x2,\n y1: gradientCoordinates.y1,\n y2: gradientCoordinates.y2,\n }}\n transition={{\n delay,\n duration,\n ease: [0.16, 1, 0.3, 1],\n repeat,\n repeatDelay,\n }}\n >\n <stop stopColor={gradientStartColor} stopOpacity=\"0\" />\n <stop stopColor={gradientStartColor} />\n <stop offset=\"32.5%\" stopColor={gradientStopColor} />\n <stop offset=\"100%\" stopColor={gradientStopColor} stopOpacity=\"0\" />\n </motion.linearGradient>\n </defs>\n </svg>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Shared marketing-site button styles.\n *\n * The `transition` in the base string matches the former `.button-transition`\n * utility — a pure-CSS morph so the component stays server-renderable.\n */\nconst buttonVariants = cva(\n 'group inline-flex items-center justify-center gap-1.5 font-medium [transition:opacity_.24s_80ms,transform_.15s_cubic-bezier(.4,0,.2,1),box-shadow_.15s_cubic-bezier(.4,0,.2,1),filter_.15s_cubic-bezier(.4,0,.2,1)] disabled:[transition:opacity_.1s]',\n {\n variants: {\n variant: {\n filled: 'bg-(--foreground) text-(--primary-foreground) shadow-elevated-3 hover:opacity-90',\n bordered: 'border border-(--border-hi) bg-surface-3 text-foreground shadow-elevated-3 hover:bg-(--muted)',\n ghost: 'text-(--foreground-secondary) hover:bg-(--surface-hover) hover:text-(--foreground)',\n },\n size: {\n sm: 'h-8 px-3.5 text-[15px]',\n md: 'h-9 px-5 text-[17px]',\n lg: 'h-11 px-6 text-[17px]',\n icon: 'size-11',\n },\n shape: {\n rounded: 'rounded-interactive',\n pill: 'rounded-full',\n },\n },\n // Pill is the house standard — every CTA is fully rounded.\n defaultVariants: { variant: 'filled', size: 'md', shape: 'pill' },\n },\n);\n\nexport type ButtonProps = VariantProps<typeof buttonVariants> & {\n showArrow?: boolean;\n /**\n * Set when `actionOrLink` is an off-site URL — renders the anchor with\n * `target=\"_blank\"` and `rel=\"noopener noreferrer\"`.\n */\n external?: boolean;\n /** Hover tooltip on the rendered anchor/button. */\n title?: string;\n /**\n * String → renders as a plain anchor <a href={...}>.\n * Function → renders as a <button type=\"button\" onClick={...}>.\n */\n actionOrLink: string | (() => void);\n children: ReactNode;\n className?: string;\n 'aria-label'?: string;\n 'aria-expanded'?: boolean;\n};\n\n/**\n * Shared marketing-site button.\n *\n * variant=\"filled\" → primary CTA (inverse theming: bg-(--foreground) + text-(--primary-foreground)\n * + shadow-elevated-3 — flips with the theme so it pops against any surface)\n * variant=\"bordered\" → elevated surface + border (bg-surface-3 + shadow-elevated-3 + border)\n * variant=\"ghost\" → transparent, muted text that gains a surface on hover\n * size=\"sm\" → h-8, px-3.5, text-[15px] (navbar / compact)\n * size=\"md\" → h-9, px-5, text-[17px] (default)\n * size=\"lg\" → h-11, px-6, text-[17px] (hero CTAs)\n * size=\"icon\" → size-11 square (icon-only buttons)\n * shape=\"pill\" → fully rounded (rounded-full); pill is the default\n * showArrow → chevron right at rest, morphs to arrow-right on hover\n *\n * Server-renderable: the arrow morph is pure CSS (group-hover), so no client\n * state or animation library is needed. When `actionOrLink` is a function the\n * component renders a <button>; passing a function requires a client-component\n * parent (functions can't cross the server→client boundary), which is inherent\n * to any onClick prop and unchanged by this component being server-capable.\n */\nexport function Button({\n variant,\n size,\n shape,\n showArrow = false,\n external = false,\n title,\n actionOrLink,\n children,\n className,\n 'aria-label': ariaLabel,\n 'aria-expanded': ariaExpanded,\n}: ButtonProps) {\n const buttonClassName = cn(buttonVariants({ variant, size, shape }), className);\n\n /*\n * Single SVG that morphs from › to → on hover — pure CSS, no JS.\n * The shaft draws in from the left (stroke-dashoffset 9 → 0) and the arrowhead\n * nudges right. Draw-in is slower (.22s) than the reverse (.08s), matching the\n * asymmetric timing of the former framer-motion version. ease = cubic-bezier(.22,1,.36,1).\n */\n const arrowSlot = showArrow && (\n <svg\n viewBox=\"0 0 14 14\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n className=\"shrink-0\"\n >\n {/* Shaft — draws in from the left */}\n <line\n x1=\"0\"\n y1=\"7\"\n x2=\"9\"\n y2=\"7\"\n strokeDasharray=\"9\"\n className=\"[stroke-dashoffset:9] [transition:stroke-dashoffset_.08s_cubic-bezier(.22,1,.36,1)] group-hover:[stroke-dashoffset:0] group-hover:[transition-duration:.22s]\"\n />\n {/* Arrowhead — nudges right so the shaft \"connects\" underneath */}\n <path\n d=\"M5 3l4 4-4 4\"\n className=\"[transform:translateX(0)] [transition:transform_.22s_cubic-bezier(.22,1,.36,1)] group-hover:[transform:translateX(2px)]\"\n />\n </svg>\n );\n\n if (typeof actionOrLink === 'string')\n return (\n <a\n href={actionOrLink}\n className={cn(buttonClassName, 'no-underline')}\n aria-label={ariaLabel}\n title={title}\n {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {children}\n {arrowSlot}\n </a>\n );\n\n return (\n <button\n type=\"button\"\n className={buttonClassName}\n onClick={actionOrLink}\n aria-label={ariaLabel}\n aria-expanded={ariaExpanded}\n title={title}\n >\n {children}\n {arrowSlot}\n </button>\n );\n}\n","export type SurfaceLevel = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n\nconst SURFACE_BG: Record<SurfaceLevel, string> = {\n 1: 'bg-surface-1',\n 2: 'bg-surface-2',\n 3: 'bg-surface-3',\n 4: 'bg-surface-4',\n 5: 'bg-surface-5',\n 6: 'bg-surface-6',\n 7: 'bg-surface-7',\n 8: 'bg-surface-8',\n};\n\nconst SURFACE_VAR: Record<SurfaceLevel, string> = {\n 1: '[--popup-surface:var(--surface-1)]',\n 2: '[--popup-surface:var(--surface-2)]',\n 3: '[--popup-surface:var(--surface-3)]',\n 4: '[--popup-surface:var(--surface-4)]',\n 5: '[--popup-surface:var(--surface-5)]',\n 6: '[--popup-surface:var(--surface-6)]',\n 7: '[--popup-surface:var(--surface-7)]',\n 8: '[--popup-surface:var(--surface-8)]',\n};\n\n/**\n * Drops + rim insets in a single `box-shadow` (no `::after`). Used by `solidSurface()`.\n * Literal Tailwind classes so the scanner picks them up.\n */\nconst SURFACE_SHADOW_COMBINED: Record<SurfaceLevel, string> = {\n 1: 'shadow-elevated-1',\n 2: 'shadow-elevated-2',\n 3: 'shadow-elevated-3',\n 4: 'shadow-elevated-4',\n 5: 'shadow-elevated-5',\n 6: 'shadow-elevated-6',\n 7: 'shadow-elevated-7',\n 8: 'shadow-elevated-8',\n};\n\n/**\n * Elevation for a free-floating surface: background, elevation variable, and the drop shadow with\n * its rim inset painted in the same `box-shadow` — which leaves `::after` free for other purposes.\n *\n * Suits containers with no opaque children near their edges. A child painted over the rim (a sticky\n * label, a pinned input, a dialog header) covers it, since nothing re-paints the rim above the\n * children.\n *\n * When `level !== shadowLevel` the rim color tracks `shadowLevel` — the two cannot be controlled\n * independently.\n */\nexport function solidSurface(level: SurfaceLevel, shadowLevel: SurfaceLevel = level): string {\n return `${SURFACE_BG[level]} ${SURFACE_SHADOW_COMBINED[shadowLevel]} ${SURFACE_VAR[level]}`;\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\nimport { type SurfaceLevel, solidSurface } from '../lib/surface.js';\nimport { cn } from '../lib/utils.js';\n\nconst cardVariants = cva('text-foreground flex flex-col', {\n variants: {\n variant: {\n default: 'gap-6 rounded-2xl py-6',\n inset: 'rounded-2xl p-1',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {\n level?: SurfaceLevel;\n shadowLevel?: SurfaceLevel;\n}\n\nfunction Card({ className, variant = 'default', level = 3, shadowLevel = 1, ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n data-variant={variant}\n data-level={level}\n className={cn(\n cardVariants({ variant }),\n solidSurface(level, shadowLevel),\n // bg-muted overrides solidSurface's bg, making the outer a gray frame\n // while keeping its shadow, rim, and --popup-surface.\n variant === 'inset' && 'bg-muted',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n '@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start has-[[data-slot=card-action]]:grid-cols-[1fr_auto] [.border-b]:pb-6',\n '[[data-variant=default]>_&]:gap-1.5 [[data-variant=default]>_&]:px-6',\n '[[data-variant=inset]>_&]:px-3 [[data-variant=inset]>_&]:py-2 [[data-variant=inset]>_&]:pt-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"card-title\" className={cn('font-semibold [[data-variant=default]_&]:leading-none', className)} {...props} />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"card-description\" className={cn('text-muted-foreground text-sm', className)} {...props} />;\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\n '[[data-variant=default]>_&]:px-6',\n '[[data-variant=inset]>_&]:flex [[data-variant=inset]>_&]:flex-1 [[data-variant=inset]>_&]:flex-col [[data-variant=inset]>_&]:rounded-lg [[data-variant=inset]>_&]:bg-surface-3 [[data-variant=inset]>_&]:p-4 [[data-variant=inset]>_&]:shadow-elevated-3 [[data-variant=inset]>_&]:[--popup-surface:var(--surface-3)]',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n 'flex items-center [.border-t]:pt-6',\n '[[data-variant=default]>_&]:px-6',\n '[[data-variant=inset]>_&]:mt-auto [[data-variant=inset]>_&]:justify-end [[data-variant=inset]>_&]:pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type { CardProps };\nexport { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils.js';\n\ntype ExitingLineProps = {\n text: string;\n textColor: string;\n duration: number;\n fallDuration: number;\n opacityEase: (t: number) => number;\n wrap?: boolean;\n onDone: () => void;\n};\n\ntype HeightClipperProps = {\n height?: number;\n delay: number;\n children: ReactNode;\n};\n\ntype WidthReservationProps = { texts: string[] };\n\nexport function HeightClipper({ height, delay, children }: HeightClipperProps) {\n return (\n <motion.span\n className=\"block w-full overflow-hidden\"\n animate={height === undefined ? {} : { height }}\n transition={{\n height: { duration: 0.4, ease: [0.4, 0, 0.2, 1], delay },\n }}\n >\n {children}\n </motion.span>\n );\n}\n\nexport function ExitingLine({ text, textColor, duration, fallDuration, opacityEase, wrap = false, onDone }: ExitingLineProps) {\n return (\n <motion.span\n aria-hidden={true}\n className={cn(\n wrap\n ? 'pointer-events-none absolute top-0 left-0 w-full'\n : 'pointer-events-none absolute top-0 left-1/2 whitespace-nowrap',\n )}\n style={{ color: textColor }}\n initial={wrap ? { opacity: 1, y: 0 } : { opacity: 1, x: '-50%', y: 0 }}\n animate={wrap ? { opacity: 0, y: 14 } : { opacity: 0, x: '-50%', y: 14 }}\n transition={{\n opacity: { duration, ease: opacityEase },\n y: { duration: fallDuration, ease: [0.22, 0.61, 0.36, 1] },\n }}\n onAnimationComplete={onDone}\n >\n {text}\n </motion.span>\n );\n}\n\nexport function WidthReservation({ texts }: WidthReservationProps) {\n return (\n <span aria-hidden={true} className=\"invisible block h-0 overflow-hidden\">\n {texts.map((t) => (\n <span key={t} className=\"block\">\n {t}\n </span>\n ))}\n </span>\n );\n}\n","/**\n * The moving gradient band that paints DiaTextReveal's glyphs, and the coverage math that\n * lets the outgoing line's fade track it exactly.\n *\n * The band moves by *sliding a static gradient*, not by rebuilding one per frame. Rebuilding\n * meant a JS callback, a style recalc, a fresh gradient rasterization and a\n * `background-clip: text` repaint on every frame — all main-thread-only work, so the sweep\n * stalled whenever the thread was contended (scrolling, WebGL render loops, React commits).\n * A fixed image offset by a CSS animation needs no script at all and lets the browser cache\n * the raster, which is what keeps the sweep moving while the page is being scrolled.\n */\n\nimport type { CSSProperties } from 'react';\n\n/** Half-width of the colour band, in percent of the line. */\nconst BAND_HALF = 17;\n/** Band centre at the start of a sweep — fully left of the line, so nothing is painted. */\nconst SWEEP_START = -BAND_HALF;\n/** Band centre at the end of a sweep — fully right of the line, so everything is painted. */\nconst SWEEP_END = 100 + BAND_HALF;\n\n/** Cubic in-out: the band accelerates in, then eases out. */\nconst sweepEaseFn = (t: number) => (t < 0.5 ? 4 * t ** 3 : 1 - (-2 * t + 2) ** 3 / 2);\n\n/**\n * Fraction of the line the sweep has painted at `progress` (0–1 of the sweep's duration).\n */\nconst coverageAt = (progress: number) => Math.min(1, (sweepEaseFn(progress) * (SWEEP_END - SWEEP_START)) / 100);\n\n/**\n * Point in the sweep (0–1) at which the whole line is painted.\n */\nconst COVERAGE_SPAN = (() => {\n let lo = 0;\n let hi = 1;\n for (let i = 0; i < 40; i += 1) {\n const mid = (lo + hi) / 2;\n if (coverageAt(mid) < 1) lo = mid;\n else hi = mid;\n }\n return hi;\n})();\n\nconst EXIT_FADE_BIAS = 0.4;\n\n/** Easing for the outgoing line's fade, tracking how much of the incoming line is painted. */\nconst exitEase = (t: number) => coverageAt(t * COVERAGE_SPAN) ** EXIT_FADE_BIAS;\n\nconst makeExitEase = (leadFraction: number) => {\n if (leadFraction <= 0) return exitEase;\n if (leadFraction >= 1) return () => 0;\n return (t: number) => (t <= leadFraction ? 0 : exitEase((t - leadFraction) / (1 - leadFraction)));\n};\n\n/* ── Sliding-gradient geometry ───────────────────────────────────────── */\n\nconst SWEEP_SCALE = 3;\nconst BAND_HALF_IMAGE = BAND_HALF / SWEEP_SCALE;\n\nconst positionFor = (pos: number) => (pos - 50 * SWEEP_SCALE) / (1 - SWEEP_SCALE);\n\n/** Position holding the band fully left of the line — nothing painted. */\nconst SWEEP_FROM = `${positionFor(SWEEP_START).toFixed(3)}%`;\n/** Position holding the band fully right of the line — everything painted. */\nconst SWEEP_TO = `${positionFor(SWEEP_END).toFixed(3)}%`;\n/** `background-size` for the oversized image the animation slides. */\nconst SWEEP_SIZE = `${SWEEP_SCALE * 100}% 100%`;\n\nconst EASE_SAMPLES = 24;\nconst sweepEaseCss = `linear(${Array.from({ length: EASE_SAMPLES + 1 }, (_, i) => sweepEaseFn(i / EASE_SAMPLES).toFixed(5)).join(\n ', ',\n)})`;\n\nfunction buildSweepGradient(colors: string[], textColor: string) {\n const bandStart = 50 - BAND_HALF_IMAGE;\n const bandEnd = 50 + BAND_HALF_IMAGE;\n const n = colors.length;\n\n const parts: string[] = [`${textColor} 0%`, `${textColor} ${bandStart.toFixed(3)}%`];\n for (const [i, c] of colors.entries()) {\n const pct = n === 1 ? 50 : bandStart + (i / (n - 1)) * BAND_HALF_IMAGE * 2;\n parts.push(`${c} ${pct.toFixed(3)}%`);\n }\n parts.push(`transparent ${bandEnd.toFixed(3)}%`, 'transparent 100%');\n\n return `linear-gradient(90deg, ${parts.join(', ')})`;\n}\n\nexport type Sweep = { cycle: number; lead: boolean } | null;\n\ntype SweepStyleArgs = {\n colors: string[];\n textColor: string;\n duration: number;\n delay: number;\n sweep: Sweep;\n paused: boolean;\n reduced: boolean;\n};\n\nfunction buildSweepStyle({ colors, textColor, duration, delay, sweep, paused, reduced }: SweepStyleArgs) {\n return {\n color: 'transparent',\n backgroundClip: 'text',\n WebkitBackgroundClip: 'text',\n backgroundImage: buildSweepGradient(colors, textColor),\n backgroundRepeat: 'no-repeat',\n backgroundSize: SWEEP_SIZE,\n backgroundPositionX: reduced ? SWEEP_TO : SWEEP_FROM,\n '--dia-sweep-from': SWEEP_FROM,\n '--dia-sweep-to': SWEEP_TO,\n ...(sweep !== null &&\n !reduced && {\n animationName: sweep.cycle % 2 === 0 ? 'dia-sweep-a' : 'dia-sweep-b',\n animationDuration: `${duration}s`,\n animationDelay: `${delay}s`,\n animationTimingFunction: sweepEaseCss,\n animationFillMode: 'both',\n animationIterationCount: 1,\n animationPlayState: paused ? 'paused' : 'running',\n }),\n } satisfies CSSProperties & Record<`--${string}`, string>;\n}\n\nexport { buildSweepStyle, COVERAGE_SPAN, makeExitEase };\n","/** Measures the single-line (nowrap) rendered width of each text string. */\nexport function measureWidths(el: HTMLElement, texts: string[]) {\n const parent = el.parentElement;\n if (!parent) return texts.map(() => 0);\n\n const ghost = el.cloneNode();\n if (!(ghost instanceof HTMLElement)) return texts.map(() => 0);\n\n Object.assign(ghost.style, {\n position: 'absolute',\n visibility: 'hidden',\n pointerEvents: 'none',\n width: 'auto',\n whiteSpace: 'nowrap',\n });\n parent.appendChild(ghost);\n const widths = texts.map((t) => {\n ghost.textContent = t;\n return ghost.getBoundingClientRect().width;\n });\n ghost.remove();\n return widths;\n}\n","'use client';\n\nimport { motion, useInView, useReducedMotion } from 'framer-motion';\nimport type { AnimationEvent, ComponentPropsWithoutRef } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { cn } from '../lib/utils.js';\n\nimport { ExitingLine, HeightClipper, WidthReservation } from './dia-text-reveal.lines.js';\nimport { buildSweepStyle, COVERAGE_SPAN, makeExitEase, type Sweep } from './dia-text-reveal.sweep.js';\nimport { measureWidths } from './dia-text-reveal.utils.js';\nimport './dia-text-reveal.css';\n\nconst DEFAULT_COLORS = ['#c679c4', '#fa3d1d', '#ffb005', '#e1e1fe', '#0358f7'];\n\nconst EXIT_LEAD_RATIO = 0.3;\n\nexport interface DiaTextRevealProps\n extends Omit<ComponentPropsWithoutRef<typeof motion.span>, 'ref' | 'children' | 'style' | 'animate' | 'transition' | 'color'> {\n /** Text to reveal. Pass multiple strings to rotate when `repeat` is `true`. */\n text: string | string[];\n /** Colors sampled across the moving gradient band. */\n colors?: string[];\n /** CSS color for revealed text after the sweep. @defaultValue `\"var(--color-foreground)\"` */\n textColor?: string;\n /** Duration of one sweep pass, in seconds. @defaultValue `1` */\n duration?: number;\n /** Delay before the sweep starts, in seconds. @defaultValue `0` */\n delay?: number;\n /** When `text` is an array, replay the sweep and advance to the next string after each completion. */\n repeat?: boolean;\n /** Pause between cycles when `repeat` is `true`, in seconds. @defaultValue `0.5` */\n repeatDelay?: number;\n /** How long the outgoing line takes to fade/slide away, in seconds. @defaultValue the sweep's coverage window */\n exitDuration?: number;\n /** Head start given to the outgoing line, in seconds. @defaultValue `0.15 * duration` */\n exitLead?: number;\n /** If `true`, the animation starts only after the element enters the viewport. @defaultValue `true` */\n startOnView?: boolean;\n /** External gate: while `false`, the sweep is held at its start. @defaultValue `true` */\n start?: boolean;\n /** Passed to `useInView`: if `true`, in-view detection fires at most once. @defaultValue `true` */\n once?: boolean;\n /** Additional class names for the animated `span`. */\n className?: string;\n /** When `text` has multiple entries, use the widest string's width for layout. @defaultValue `false` */\n fixedWidth?: boolean;\n /** Allow the text to wrap onto multiple lines. @defaultValue `false` */\n wrap?: boolean;\n}\n\nexport function DiaTextReveal({\n text,\n colors = DEFAULT_COLORS,\n textColor = 'var(--color-foreground)',\n duration = 1,\n delay = 0,\n repeat = false,\n repeatDelay = 0.5,\n exitDuration,\n exitLead,\n startOnView = true,\n start = true,\n once = true,\n className,\n fixedWidth = false,\n wrap = false,\n ...props\n}: DiaTextRevealProps) {\n const texts = Array.isArray(text) ? text : [text];\n const isMulti = texts.length > 1;\n const prefersReducedMotion = useReducedMotion();\n const exitSpan = exitDuration ?? duration * COVERAGE_SPAN;\n const lead = Math.max(0, exitLead ?? duration * EXIT_LEAD_RATIO);\n const exitTotal = lead + exitSpan;\n const leadFraction = exitTotal > 0 ? lead / exitTotal : 0;\n const exitOpacityEase = useMemo(() => makeExitEase(leadFraction), [leadFraction]);\n\n const spanRef = useRef<HTMLSpanElement>(null);\n const optsRef = useRef({ repeat, repeatDelay, texts });\n optsRef.current = { repeat, repeatDelay, texts };\n\n const indexRef = useRef(0);\n const hasPlayedRef = useRef(false);\n const timerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const pendingRepeatRef = useRef(false);\n\n const [activeIndex, setActiveIndex] = useState(0);\n const [sweep, setSweep] = useState<Sweep>(null);\n const [exiting, setExiting] = useState<{\n index: number;\n token: number;\n } | null>(null);\n const clearExiting = useCallback(() => setExiting(null), []);\n const [measuredWidths, setMeasuredWidths] = useState<number[]>([]);\n const [wrapHeight, setWrapHeight] = useState<{\n h: number;\n shrink: boolean;\n } | null>(null);\n const innerRef = useRef<HTMLSpanElement>(null);\n\n const isInView = useInView(spanRef, { once, amount: 0.1 });\n const isLiveInView = useInView(spanRef, {\n once: false,\n amount: 0.1,\n });\n\n // biome-ignore lint/plugin: measures live DOM layout (getBoundingClientRect on a ghost clone) — post-render measurement.\n // biome-ignore lint/correctness/useExhaustiveDependencies: re-measures only when the text content changes; isMulti/texts are derived from the same text prop.\n useEffect(() => {\n const el = spanRef.current;\n if (!(el && isMulti) || wrap) return;\n const measure = () => setMeasuredWidths(measureWidths(el, texts));\n measure();\n if (document.fonts.status !== 'loaded') document.fonts.ready.then(measure);\n }, [Array.isArray(text) ? text.join('\\0') : text, isMulti, wrap, texts]);\n\n // biome-ignore lint/plugin: subscribes a ResizeObserver to live DOM layout.\n useEffect(() => {\n const el = innerRef.current;\n if (!(el && wrap && isMulti)) return;\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return;\n const h = entry.contentRect.height;\n setWrapHeight((prev) =>\n prev !== null && prev.h === h\n ? prev\n : {\n h,\n shrink: prev !== null && h < prev.h,\n },\n );\n });\n observer.observe(el);\n return () => observer.disconnect();\n }, [wrap, isMulti]);\n\n const advance = useCallback(() => {\n const opts = optsRef.current;\n const current = indexRef.current;\n const next = (current + 1) % opts.texts.length;\n indexRef.current = next;\n setExiting({ index: current, token: Date.now() });\n setActiveIndex(next);\n setSweep((prev) => ({\n cycle: (prev?.cycle ?? 0) + 1,\n lead: true,\n }));\n }, []);\n\n const scheduleRepeat = useCallback(() => {\n timerRef.current = setTimeout(() => {\n timerRef.current = undefined;\n advance();\n }, optsRef.current.repeatDelay * 1000);\n }, [advance]);\n\n const onSweepEnd = useCallback(\n (event: AnimationEvent<HTMLSpanElement>) => {\n if (!event.animationName.startsWith('dia-sweep')) return;\n if (!optsRef.current.repeat) return;\n scheduleRepeat();\n },\n [scheduleRepeat],\n );\n\n // biome-ignore lint/plugin: flips imperative animation state on a viewport/gate edge.\n useEffect(() => {\n if (prefersReducedMotion) return;\n if (startOnView && !isInView) return;\n if (!start) return;\n if (once && hasPlayedRef.current) return;\n hasPlayedRef.current = true;\n setSweep((prev) => (prev === null ? { cycle: 0, lead: false } : { cycle: prev.cycle + 1, lead: false }));\n }, [isInView, start, startOnView, once, prefersReducedMotion]);\n\n // biome-ignore lint/plugin: pauses/re-arms a pending timer on live viewport presence.\n useEffect(() => {\n if (!repeat || prefersReducedMotion) return;\n if (!isLiveInView) {\n if (timerRef.current === undefined) return;\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n pendingRepeatRef.current = true;\n } else if (pendingRepeatRef.current) {\n pendingRepeatRef.current = false;\n scheduleRepeat();\n }\n }, [isLiveInView, repeat, prefersReducedMotion, scheduleRepeat]);\n\n // biome-ignore lint/plugin: releases a pending timer on unmount.\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n const paused = repeat && sweep !== null && !isLiveInView;\n\n const revealStyle = buildSweepStyle({\n colors,\n textColor,\n duration,\n delay: delay + (sweep?.lead ? lead : 0),\n sweep,\n paused,\n reduced: prefersReducedMotion === true,\n });\n\n if (!isMulti)\n return (\n <motion.span\n ref={spanRef}\n className={cn('align-baseline text-inherit leading-[100%]', className)}\n style={revealStyle}\n {...props}\n onAnimationEnd={onSweepEnd}\n >\n {texts[activeIndex]}\n </motion.span>\n );\n\n const fixedW = !wrap && fixedWidth && measuredWidths.length > 0 ? Math.max(...measuredWidths) : undefined;\n const animatedW = wrap || fixedWidth ? undefined : measuredWidths[activeIndex];\n const animatedH = wrap ? wrapHeight?.h : undefined;\n const heightDelay = exiting !== null && wrapHeight?.shrink ? exitTotal : 0;\n\n const incoming = (\n <span\n ref={innerRef}\n className={cn('inline-block', wrap && 'w-full', !wrap && 'whitespace-nowrap')}\n style={revealStyle}\n onAnimationEnd={onSweepEnd}\n >\n {texts[activeIndex]}\n </span>\n );\n\n return (\n <motion.span\n ref={spanRef}\n className={cn(\n wrap\n ? 'relative inline-block w-full text-center align-baseline text-inherit'\n : 'relative inline-block whitespace-nowrap text-center align-baseline text-inherit leading-[100%]',\n className,\n )}\n style={{\n ...(fixedW !== undefined && { width: fixedW }),\n }}\n animate={{\n ...(animatedW !== undefined && { width: animatedW }),\n }}\n transition={{\n width: { duration: 0.4, ease: [0.4, 0, 0.2, 1] },\n }}\n {...props}\n >\n {wrap ? (\n <HeightClipper height={animatedH} delay={heightDelay}>\n <WidthReservation texts={texts} />\n {incoming}\n </HeightClipper>\n ) : (\n incoming\n )}\n\n {exiting && !prefersReducedMotion && (\n <ExitingLine\n key={exiting.token}\n text={texts[exiting.index]!}\n textColor={textColor}\n duration={0.4}\n fallDuration={0.25}\n opacityEase={exitOpacityEase}\n wrap={wrap}\n onDone={clearExiting}\n />\n )}\n </motion.span>\n );\n}\n","import type { InputHTMLAttributes, RefObject } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Physically-recessed input: the inverse read of GlossyButton.\n * The illusion is built entirely from `box-shadow` layers (no wrapper div).\n *\n * Server-renderable: no browser APIs are used.\n */\nexport function ElevatedInput({\n className,\n type = 'text',\n ref,\n ...props\n}: InputHTMLAttributes<HTMLInputElement> & {\n ref?: RefObject<HTMLInputElement | null>;\n}) {\n return (\n <input\n ref={ref}\n type={type}\n className={cn(\n // Layout & shape\n 'relative w-full overflow-hidden rounded-lg',\n // Typography\n 'text-(--color-foreground) text-sm placeholder:text-(--color-muted-foreground)',\n // Sizing\n 'h-9 px-3',\n // Reset native input chrome\n 'appearance-none border-none outline-none',\n\n // Background — a barely-there top darkening that reads as cavity depth.\n 'bg-[linear-gradient(to_bottom,oklch(0_0_0/0.04),transparent)]',\n 'dark:bg-[linear-gradient(to_bottom,oklch(1_0_0/0.04),transparent)]',\n\n // Shadow stack — light mode\n 'shadow-[inset_0_1px_0_0_oklch(1_0_0/0.08),inset_0_2px_2px_-1px_oklch(0_0_0/0.08),inset_0_4px_4px_-2px_oklch(0_0_0/0.08),0_1px_0_0_oklch(0_0_0/0.12),inset_0_0_0_1px_oklch(0_0_0/0.16)]',\n // Shadow stack — dark mode\n 'dark:shadow-[inset_0_1px_0_0_oklch(1_0_0/0.1),inset_0_2px_2px_-1px_oklch(0_0_0/0.28),inset_0_4px_4px_-2px_oklch(0_0_0/0.22),0_1px_0_0_oklch(0_0_0/0.36),inset_0_0_0_1px_oklch(1_0_0/0.16)]',\n\n // Focus\n 'focus-visible:shadow-[inset_0_1px_0_0_oklch(1_0_0/0.08),inset_0_2px_2px_-1px_oklch(0_0_0/0.04),inset_0_4px_4px_-2px_oklch(0_0_0/0.04),0_0_0_3px_oklch(0_0_0/0.08),inset_0_0_0_1.5px_oklch(0_0_0/0.36)]',\n 'dark:focus-visible:shadow-[inset_0_1px_0_0_oklch(1_0_0/0.12),inset_0_2px_2px_-1px_oklch(0_0_0/0.16),inset_0_4px_4px_-2px_oklch(0_0_0/0.12),0_0_0_3px_oklch(1_0_0/0.08),inset_0_0_0_1.5px_oklch(1_0_0/0.28)]',\n\n 'transition-shadow duration-150',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n );\n}\n","'use client';\n\nimport { motion, useInView } from 'framer-motion';\nimport { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { easeOut } from '../lib/ease.js';\n\n/** Holds an entrance back until an external cue is ready. */\ntype Gate = {\n /** While `false`, the entrance stays in its initial state even once in view. @defaultValue `true` */\n start?: boolean;\n};\n\nexport type FadeInProps = Gate & {\n children: React.ReactNode;\n className?: string;\n delay?: number;\n duration?: number;\n yOffset?: number;\n};\n\nexport type StaggerProps = Gate & {\n children: React.ReactNode;\n className?: string;\n staggerDelay?: number;\n baseDelay?: number;\n};\n\nexport type StaggerItemProps = {\n children: React.ReactNode;\n className?: string;\n};\n\n/** Shared viewport config so every entrance in this file triggers at the same threshold. */\nconst viewport = { once: true, margin: '-60px' } as const;\n\n/** Rows in a grid can differ by a fraction of a pixel; treat near-equal tops as the same row. */\nconst ROW_TOLERANCE = 8;\n\n/** Registers a newly visible item and receives back the delay it should animate with. */\ntype RegisterItem = (element: Element, reveal: (delay: number) => void) => void;\n\nconst StaggerContext = createContext<RegisterItem | null>(null);\n\n/**\n * Wraps children in a framer-motion div that fades+slides up\n * when it enters the viewport.\n */\nexport function FadeIn({ children, className, delay = 0, duration = 1, yOffset = 20, start = true }: FadeInProps) {\n const ref = useRef<HTMLDivElement>(null);\n const inView = useInView(ref, viewport);\n const hidden = { opacity: 0, y: yOffset };\n\n return (\n <motion.div\n ref={ref}\n className={className}\n initial={hidden}\n animate={inView && start ? { opacity: 1, y: 0 } : hidden}\n transition={{ duration, delay, ease: easeOut }}\n >\n {children}\n </motion.div>\n );\n}\n\n/**\n * Coordinates staggered entrances for the `<StaggerItem>`s inside it.\n *\n * Unlike framer-motion's `staggerChildren`, the cascade is driven by each\n * item's own visibility rather than the container's: items that scroll into\n * view together are batched into one frame, sorted top-to-bottom then\n * left-to-right, and given progressively later delays.\n *\n * While `start` is `false`, items that come into view queue up instead of\n * revealing, so the whole cascade lands as one batch when the cue arrives.\n */\nexport function Stagger({ children, className, staggerDelay = 0.15, baseDelay = 0, start = true }: StaggerProps) {\n const queue = useRef<{ element: Element; reveal: (delay: number) => void }[]>([]);\n const frame = useRef<number | null>(null);\n const started = useRef(start);\n started.current = start;\n\n const flush = useCallback(() => {\n frame.current = null;\n const batch = queue.current;\n queue.current = [];\n\n const positioned = batch.map((entry) => ({\n ...entry,\n rect: entry.element.getBoundingClientRect(),\n }));\n positioned.sort((a, b) =>\n Math.abs(a.rect.top - b.rect.top) > ROW_TOLERANCE ? a.rect.top - b.rect.top : a.rect.left - b.rect.left,\n );\n for (const [index, entry] of positioned.entries()) entry.reveal(baseDelay + index * staggerDelay);\n }, [baseDelay, staggerDelay]);\n\n const register = useCallback<RegisterItem>(\n (element, reveal) => {\n queue.current.push({ element, reveal });\n if (started.current) frame.current ??= requestAnimationFrame(flush);\n },\n [flush],\n );\n\n // biome-ignore lint/plugin: drains an imperative queue of pending reveals when the gate opens.\n useEffect(() => {\n if (start && queue.current.length > 0) frame.current ??= requestAnimationFrame(flush);\n }, [start, flush]);\n\n return (\n <StaggerContext value={register}>\n <div className={className}>{children}</div>\n </StaggerContext>\n );\n}\n\n/** Use inside <Stagger> to mark each animated child. */\nexport function StaggerItem({ children, className }: StaggerItemProps) {\n const register = useContext(StaggerContext);\n const ref = useRef<HTMLDivElement>(null);\n const claimed = useRef(false);\n const [delay, setDelay] = useState<number | null>(null);\n\n const onViewportEnter = useCallback(() => {\n if (claimed.current) return;\n claimed.current = true;\n const element = ref.current;\n if (register && element) register(element, setDelay);\n else setDelay(0);\n }, [register]);\n\n return (\n <motion.div\n ref={ref}\n className={className}\n initial={{ opacity: 0, y: 18 }}\n animate={delay === null ? { opacity: 0, y: 18 } : { opacity: 1, y: 0 }}\n transition={{ duration: 0.45, delay: delay ?? 0, ease: easeOut }}\n viewport={viewport}\n onViewportEnter={onViewportEnter}\n >\n {children}\n </motion.div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\nexport type FeatureCardProps = {\n /** Icon rendered in the elevated top-left box. Pass any ReactNode (e.g. an\n * inlined SVG or an iconify <Icon icon={...} />). */\n icon: ReactNode;\n title: string;\n body: string;\n /** Icon colour class, e.g. `text-violet-500`. Defaults to the secondary foreground tone. */\n iconColor?: string;\n /** Extra classes merged onto the card root. */\n className?: string;\n};\n\n/**\n * Shared marketing feature card: a soft-filled panel with an elevated icon box\n * above a title + body. Used across the /security, /syncing, /web-access pages\n * and future copy pages.\n *\n * Geometry mirrors the design-system reference (p-6 → lg:p-8 → xl:p-10, icon box\n * size-10 → lg:size-12); the design tokens are mapped onto this library's own\n * variables so both themes stay in sync.\n */\nexport function FeatureCard({ icon, title, body, iconColor, className }: FeatureCardProps) {\n return (\n <div\n className={cn(\n 'flex w-full flex-col justify-between gap-6 rounded-[20px] bg-(--muted) p-6 lg:gap-8 lg:rounded-3xl lg:p-8 xl:gap-10 xl:p-10',\n className,\n )}\n >\n <div className=\"flex size-10 items-center justify-center rounded-[10px] bg-(--surface) shadow-(--shadow-sm) lg:size-12 lg:rounded-md\">\n <span\n className={cn('flex h-5 w-5 items-center justify-center lg:h-6 lg:w-6', iconColor ?? 'text-(--foreground-secondary)')}\n >\n {icon}\n </span>\n </div>\n <div className=\"flex flex-col gap-2\">\n <h3 className=\"font-semibold text-[15px] text-foreground lg:text-base\">{title}</h3>\n <p className=\"text-(--foreground-secondary) text-[13px] leading-relaxed lg:text-sm\">{body}</p>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils.js';\n\n// ── Non-exported helpers ──────────────────────────────────────────────────────\n\n/** Downward chevron (rotated square, two borders) placed at the end of a line. */\nconst downChevronClass =\n 'absolute left-1/2 top-full size-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-b border-r border-(--foreground-muted)';\n\nconst rightChevronClass =\n 'absolute right-0 top-1/2 size-2 translate-x-1/2 -translate-y-1/2 rotate-45 border-t border-r border-(--foreground-muted)';\n\nconst leftChevronClass =\n 'absolute left-0 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 -rotate-45 border-t border-l border-(--foreground-muted)';\n\n/** Micro label chip that masks the line it sits on. */\nconst microLabelClass =\n 'absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 whitespace-nowrap rounded-full border border-(--border) bg-(--muted) px-1.5 py-px font-mono text-[8.5px] leading-tight text-(--foreground-secondary)';\n\n// ── Exports ───────────────────────────────────────────────────────────────────\n\ntype ArrowRightProps = { label?: string; className?: string };\n\n/** Horizontal connector (left → right) between two snake cells. */\nexport function ArrowRight({ label, className }: ArrowRightProps) {\n return (\n <div className={cn('relative flex items-center', className)}>\n <span className=\"h-px w-full bg-(--foreground-muted)\" />\n <span className={rightChevronClass} />\n {label ? <span className={microLabelClass}>{label}</span> : null}\n </div>\n );\n}\n\ntype ArrowLeftProps = { label?: string; className?: string };\n\n/** Horizontal connector (right → left) between two snake cells. */\nexport function ArrowLeft({ label, className }: ArrowLeftProps) {\n return (\n <div className={cn('relative flex items-center', className)}>\n <span className=\"h-px w-full bg-(--foreground-muted)\" />\n <span className={leftChevronClass} />\n {label ? <span className={microLabelClass}>{label}</span> : null}\n </div>\n );\n}\n\ntype TurnDownProps = { className?: string };\n\n/** Short vertical connector used when the snake drops to the next row. */\nexport function TurnDown({ className }: TurnDownProps) {\n return (\n <div className={cn('relative h-4', className)}>\n <span className=\"absolute left-1/2 top-0 h-full w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className={downChevronClass} />\n </div>\n );\n}\n\ntype SplitArrowProps = { leftLabel?: string; rightLabel?: string; className?: string };\n\n/** One-to-two branch connector: spine down, horizontal arm, drops at 25% / 75%. */\nexport function SplitArrow({ leftLabel, rightLabel, className }: SplitArrowProps) {\n return (\n <div className={cn('relative h-12', className)}>\n <span className=\"absolute left-1/2 top-0 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[25%] right-[25%] top-1/2 h-px -translate-y-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[25%] top-1/2 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[75%] top-1/2 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[25%] top-full size-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-b border-r border-(--foreground-muted)\" />\n <span className=\"absolute left-[75%] top-full size-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-b border-r border-(--foreground-muted)\" />\n {leftLabel ? (\n <span className=\"absolute left-[30%] top-1/2 -translate-y-1/2 rounded-full border border-(--border) bg-(--muted) px-2 py-0.5 font-mono text-[10px] text-(--foreground-secondary)\">\n {leftLabel}\n </span>\n ) : null}\n {rightLabel ? (\n <span className=\"absolute right-[30%] top-1/2 -translate-y-1/2 rounded-full border border-(--border) bg-(--muted) px-2 py-0.5 font-mono text-[10px] text-(--foreground-secondary)\">\n {rightLabel}\n </span>\n ) : null}\n </div>\n );\n}\n\ntype JoinArrowProps = { className?: string };\n\n/** Two-to-one join connector: risers at 25% / 75%, horizontal arm, spine down. */\nexport function JoinArrow({ className }: JoinArrowProps) {\n return (\n <div className={cn('relative h-12', className)}>\n <span className=\"absolute left-[25%] top-0 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[75%] top-0 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[25%] right-[25%] top-1/2 h-px -translate-y-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-1/2 top-1/2 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-1/2 top-full size-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-b border-r border-(--foreground-muted)\" />\n </div>\n );\n}\n\ntype FlowNodeProps = {\n icon?: ReactNode;\n /**\n * Accepted for API compatibility with the site's icon-based version; the icon is now a\n * caller-supplied ReactNode that carries its own sizing/color classes, so this is unused.\n */\n iconClass?: string;\n chipClass?: string;\n title: string;\n body?: string;\n tag?: string;\n children?: ReactNode;\n className?: string;\n};\n\n/** A compact rounded node: icon chip, one-line title, one-line sub, optional children. */\nexport function FlowNode({ icon, chipClass, title, body, tag, children, className }: FlowNodeProps) {\n return (\n <div className={cn('flex h-full flex-col rounded-[12px] border border-(--border) bg-(--surface) p-2.5', className)}>\n <div className=\"flex items-start gap-2\">\n {icon ? (\n <div className={cn('flex size-7 shrink-0 items-center justify-center rounded-[8px]', chipClass ?? 'bg-(--muted)')}>\n {icon}\n </div>\n ) : null}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-x-1.5 gap-y-0.5\">\n <p className=\"font-semibold text-[11px] leading-snug text-foreground sm:text-[12px]\">{title}</p>\n {tag ? (\n <span className=\"rounded-full border border-(--border) px-1.5 py-px font-mono text-[8.5px] text-(--foreground-muted)\">\n {tag}\n </span>\n ) : null}\n </div>\n {body ? <p className=\"mt-0.5 text-[9.5px] leading-snug text-(--foreground-secondary) sm:text-[10px]\">{body}</p> : null}\n </div>\n </div>\n {children ? <div className=\"mt-2\">{children}</div> : null}\n </div>\n );\n}\n\ntype FlowPillProps = { title: string; className?: string };\n\n/** A start/end pill: centered, fits content, sits on the flowchart spine. */\nexport function FlowPill({ title, className }: FlowPillProps) {\n return (\n <div\n className={cn(\n 'mx-auto flex w-fit max-w-full items-center justify-center rounded-full border border-(--border) bg-(--surface) px-4 py-2 text-center',\n className,\n )}\n >\n <p className=\"text-[12px] font-semibold leading-snug text-foreground\">{title}</p>\n </div>\n );\n}\n\ntype FlowDiamondProps = { label: string; sub?: string; className?: string };\n\n/** A compact decision diamond (clip-path, straight text inside). */\nexport function FlowDiamond({ label, sub, className }: FlowDiamondProps) {\n return (\n <div className={cn('relative h-14 w-36 justify-self-center sm:h-16 sm:w-44', className)}>\n <div className=\"absolute inset-0 bg-(--border-hi) [clip-path:polygon(50%_0,100%_50%,50%_100%,0_50%)]\" />\n <div className=\"absolute inset-[1px] flex flex-col items-center justify-center gap-0.5 bg-(--surface) px-6 text-center [clip-path:polygon(50%_0,100%_50%,50%_100%,0_50%)]\">\n <p className=\"text-[11px] font-semibold leading-tight text-foreground sm:text-[12px]\">{label}</p>\n {sub ? <p className=\"text-[8.5px] leading-tight text-(--foreground-muted)\">{sub}</p> : null}\n </div>\n </div>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Physically-lit button: a domed, back-lit key built from one effect layer.\n *\n * The geometry lives in a single `box-shadow` list that gets swapped wholesale on\n * press, so the bevel and cast can drop out while the rim survives without any\n * of them being separate elements:\n *\n * • the gloss span — face fill + the shadow list (bevel, rim, cast).\n * • its `before:` — the dome gradient, painted over the face.\n * • its `after:` — the hover/press tint, the only thing that cross-fades.\n *\n * The recipe lives in `global.css`. Every colour is a `--btn-*` primitive, and\n * the two shadow composites are declared on `.glossy` — on the key itself, not\n * on `:root` — because a var() inside a custom property is substituted where the\n * property is *declared*. That's what lets one `.glossy-<variant>` class restyle\n * the whole recipe by setting primitives, and it's why there are no `dark:`\n * variants here: `.dark` overrides the same primitives.\n *\n * The span is a sibling of the label rather than its parent so the label never\n * inherits the effect layers' stacking or transitions; `isolate` on the root\n * contains the span's negative z-index.\n *\n * Server-renderable: every state is pure CSS. Passing a function as\n * `actionOrLink` requires a client-component parent, as with any onClick prop.\n */\n\n/**\n * The whole visual treatment. Absolutely positioned behind the label, with the\n * dome (`before:`) and the interaction tint (`after:`) stacked over the face.\n * Only the tint animates opacity; the shadow list animates by being replaced.\n */\nconst glossLayer = cn(\n 'pointer-events-none absolute inset-0 z-[-1] rounded-[inherit]',\n '[background-color:var(--btn-face)] [box-shadow:var(--shadow-button)]',\n 'transition-shadow duration-150',\n // Pressed (and disabled): bevel + cast go transparent, the rim stays.\n 'group-active/glossy:[box-shadow:var(--shadow-button-pressed)]',\n 'group-disabled/glossy:[box-shadow:var(--shadow-button-pressed)]',\n // Dome — fixed direction, per-variant stops. Above the face, below the tint.\n \"before:absolute before:inset-0 before:rounded-[inherit] before:content-[''] before:[background-image:var(--gradient-button)]\",\n // Interaction tint. Hidden outright when disabled, and on touch (no hover\n // state to speak of) so the root's active:opacity can carry the press instead.\n \"after:absolute after:inset-0 after:rounded-[inherit] after:content-[''] after:opacity-0\",\n 'after:[background-color:var(--btn-tint-hover)] after:transition-opacity after:duration-150 after:[will-change:opacity]',\n 'group-hover/glossy:after:opacity-100',\n 'group-active/glossy:after:[background-color:var(--btn-tint-active)]',\n 'group-disabled/glossy:after:hidden [@media(hover:none)]:after:hidden',\n);\n\nconst glossyButtonVariants = cva(\n cn(\n 'glossy group/glossy relative isolate inline-flex cursor-pointer select-none items-center justify-center gap-1 whitespace-nowrap rounded-full font-normal',\n // Label colour rides the variant. Kept as a utility rather than a plain\n // declaration on `.glossy` so a caller's own text-* class still wins.\n '[color:var(--btn-fg)]',\n 'disabled:cursor-default disabled:opacity-50',\n // Touch devices get no hover layer, so the whole key dims on press instead.\n '[@media(hover:none)]:active:opacity-80',\n ),\n {\n variants: {\n size: {\n sm: 'h-8 px-2.5 text-sm',\n md: 'h-9 px-5 text-[17px]',\n lg: 'h-11 px-6 text-[17px]',\n },\n /**\n * Written out as literal class names — Tailwind's scanner is static, so a\n * `glossy-${variant}` template would never make it into the stylesheet.\n * `neutral` is the bare recipe, so it needs no class of its own.\n */\n variant: {\n neutral: '',\n accent: 'glossy-accent',\n destructive: 'glossy-destructive',\n special: 'glossy-special',\n positive: 'glossy-positive',\n attention: 'glossy-attention',\n highlight: 'glossy-highlight',\n inverse: 'glossy-inverse',\n },\n },\n defaultVariants: { size: 'md', variant: 'neutral' },\n },\n);\n\nexport type GlossyButtonProps = VariantProps<typeof glossyButtonVariants> & {\n /**\n * String → renders as a plain <a href={...}>.\n * Function → renders as a <button type=\"button\" onClick={...}>.\n */\n actionOrLink: string | (() => void);\n children: ReactNode;\n /** Button-only — an anchor can't be disabled. */\n disabled?: boolean;\n className?: string;\n 'aria-label'?: string;\n};\n\nexport function GlossyButton({\n size,\n variant,\n actionOrLink,\n children,\n disabled,\n className,\n 'aria-label': ariaLabel,\n}: GlossyButtonProps) {\n const content = (\n <>\n <span data-fx-layer=\"gloss\" aria-hidden={true} className={glossLayer} />\n <span className=\"px-0.5\">{children}</span>\n </>\n );\n\n const buttonClassName = cn(glossyButtonVariants({ size, variant }), className);\n\n if (typeof actionOrLink === 'string')\n return (\n <a href={actionOrLink} className={cn(buttonClassName, 'no-underline')} aria-label={ariaLabel}>\n {content}\n </a>\n );\n\n return (\n <button type=\"button\" className={buttonClassName} onClick={actionOrLink} disabled={disabled} aria-label={ariaLabel}>\n {content}\n </button>\n );\n}\n\nexport { glossyButtonVariants };\n","import { type Mesh, Program, type Renderer } from 'ogl';\n\n// Keep renderer/program alive across re-renders so the uniform-sync effect can\n// update uniforms without ever rebuilding the WebGL context.\nconst vertex = `#version 300 es\nin vec2 position;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n}\n`;\n\nconst fragment = `#version 300 es\nprecision highp float;\nuniform vec2 iResolution;\nuniform float iTime;\nuniform float uTimeSpeed;\nuniform float uColorBalance;\nuniform float uWarpStrength;\nuniform float uWarpFrequency;\nuniform float uWarpSpeed;\nuniform float uWarpAmplitude;\nuniform float uBlendAngle;\nuniform float uBlendSoftness;\nuniform float uRotationAmount;\nuniform float uNoiseScale;\nuniform float uGrainAmount;\nuniform float uGrainScale;\nuniform float uGrainAnimated;\nuniform float uContrast;\nuniform float uGamma;\nuniform float uSaturation;\nuniform vec2 uCenterOffset;\nuniform float uZoom;\nuniform vec3 uColor1;\nuniform vec3 uColor2;\nuniform vec3 uColor3;\nout vec4 fragColor;\n#define S(a,b,t) smoothstep(a,b,t)\nmat2 Rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}\nvec2 hash(vec2 p){p=vec2(dot(p,vec2(2127.1,81.17)),dot(p,vec2(1269.5,283.37)));return fract(sin(p)*43758.5453);}\nfloat noise(vec2 p){vec2 i=floor(p),f=fract(p),u=f*f*(3.0-2.0*f);float n=mix(mix(dot(-1.0+2.0*hash(i+vec2(0.0,0.0)),f-vec2(0.0,0.0)),dot(-1.0+2.0*hash(i+vec2(1.0,0.0)),f-vec2(1.0,0.0)),u.x),mix(dot(-1.0+2.0*hash(i+vec2(0.0,1.0)),f-vec2(0.0,1.0)),dot(-1.0+2.0*hash(i+vec2(1.0,1.0)),f-vec2(1.0,1.0)),u.x),u.y);return 0.5+0.5*n;}\nvoid mainImage(out vec4 o, vec2 C){\n float t=iTime*uTimeSpeed;\n vec2 uv=C/iResolution.xy;\n float ratio=iResolution.x/iResolution.y;\n vec2 tuv=uv-0.5+uCenterOffset;\n tuv/=max(uZoom,0.001);\n float degree=noise(vec2(t*0.1,tuv.x*tuv.y)*uNoiseScale);\n tuv.y*=1.0/ratio;\n tuv*=Rot(radians((degree-0.5)*uRotationAmount+180.0));\n tuv.y*=ratio;\n float frequency=uWarpFrequency;\n float ws=max(uWarpStrength,0.001);\n float amplitude=uWarpAmplitude/ws;\n float warpTime=t*uWarpSpeed;\n tuv.x+=sin(tuv.y*frequency+warpTime)/amplitude;\n tuv.y+=sin(tuv.x*(frequency*1.5)+warpTime)/(amplitude*0.5);\n vec3 colLav=uColor1;\n vec3 colOrg=uColor2;\n vec3 colDark=uColor3;\n float b=uColorBalance;\n float s=max(uBlendSoftness,0.0);\n mat2 blendRot=Rot(radians(uBlendAngle));\n float blendX=(tuv*blendRot).x;\n float edge0=-0.3-b-s;\n float edge1=0.2-b+s;\n float v0=0.5-b+s;\n float v1=-0.3-b-s;\n vec3 layer1=mix(colDark,colOrg,S(edge0,edge1,blendX));\n vec3 layer2=mix(colOrg,colLav,S(edge0,edge1,blendX));\n vec3 col=mix(layer1,layer2,S(v0,v1,tuv.y));\n vec2 grainUv=uv*max(uGrainScale,0.001);\n if(uGrainAnimated>0.5){grainUv+=vec2(iTime*0.05);}\n float grain=fract(sin(dot(grainUv,vec2(12.9898,78.233)))*43758.5453);\n col+=(grain-0.5)*uGrainAmount;\n col=(col-0.5)*uContrast+0.5;\n float luma=dot(col,vec3(0.2126,0.7152,0.0722));\n col=mix(vec3(luma),col,uSaturation);\n col=pow(max(col,0.0),vec3(1.0/max(uGamma,0.001)));\n col=clamp(col,0.0,1.0);\n o=vec4(col,1.0);\n}\nvoid main(){\n vec4 o=vec4(0.0);\n mainImage(o,gl_FragCoord.xy);\n fragColor=o;\n}\n`;\n\nexport type GrainientContext = { renderer: Renderer; program: Program; mesh: Mesh };\n\nexport function createGrainientProgram(gl: Renderer['gl']): Program {\n return new Program(gl, {\n vertex,\n fragment,\n uniforms: {\n iTime: { value: 0 },\n iResolution: { value: new Float32Array([1, 1]) },\n uTimeSpeed: { value: 0.25 },\n uColorBalance: { value: 0.0 },\n uWarpStrength: { value: 1.0 },\n uWarpFrequency: { value: 5.0 },\n uWarpSpeed: { value: 2.0 },\n uWarpAmplitude: { value: 50.0 },\n uBlendAngle: { value: 0.0 },\n uBlendSoftness: { value: 0.05 },\n uRotationAmount: { value: 500.0 },\n uNoiseScale: { value: 2.0 },\n uGrainAmount: { value: 0.1 },\n uGrainScale: { value: 2.0 },\n uGrainAnimated: { value: 0.0 },\n uContrast: { value: 1.5 },\n uGamma: { value: 1.0 },\n uSaturation: { value: 1.0 },\n uCenterOffset: { value: new Float32Array([0, 0]) },\n uZoom: { value: 0.9 },\n uColor1: { value: new Float32Array([1, 1, 1]) },\n uColor2: { value: new Float32Array([1, 1, 1]) },\n uColor3: { value: new Float32Array([1, 1, 1]) },\n },\n });\n}\n\nexport const ctxMap = new WeakMap<HTMLElement, GrainientContext>();\n","'use client';\n\nimport { Mesh, Renderer, Triangle } from 'ogl';\nimport { useEffect, useRef } from 'react';\nimport { cn } from '../lib/utils.js';\nimport { createGrainientProgram, ctxMap } from './grainient.shader.js';\nimport type { GrainientProps } from './grainient.types.js';\nimport './grainient.css';\n\nconst HEX_COLOR_RE = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n\nconst hexToRgb = (hex: string): [number, number, number] => {\n const result = HEX_COLOR_RE.exec(hex);\n if (!result) return [1, 1, 1];\n // The regex guarantees all three capture groups when it matches; the defaults\n // only silence noUncheckedIndexedAccess.\n const [, r = 'ff', g = 'ff', b = 'ff'] = result;\n return [Number.parseInt(r, 16) / 255, Number.parseInt(g, 16) / 255, Number.parseInt(b, 16) / 255];\n};\n\n// framer-motion's MotionConfig only governs declarative motion.* components, so\n// this raw-WebGL canvas carries its own prefers-reduced-motion check.\nconst prefersReducedMotion = () =>\n typeof globalThis !== 'undefined' && globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches === true;\n\n// The home page mounts four Grainient canvases at once; browsers cap live WebGL\n// contexts (~8-16) and each costs GPU/CPU. On low-power clients — narrow viewports\n// or few CPU cores — skip WebGL and let the static background stand in.\nconst isLowPowerClient = () => {\n if (typeof globalThis === 'undefined') return false;\n const narrow = globalThis.matchMedia?.('(max-width: 1023px)').matches === true;\n const fewCores =\n typeof navigator !== 'undefined' && typeof navigator.hardwareConcurrency === 'number' && navigator.hardwareConcurrency <= 4;\n return narrow || fewCores;\n};\n\n// A tiling SVG feTurbulence tile that stands in for the shader's film grain,\n// inlined so it needs no network request.\nconst GRAIN_LAYER = `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.12'/%3E%3C/svg%3E\")`;\n\n// CSS gradient fallback when no pre-rendered image is available.\nconst fallbackGradient = (c1: string, c2: string, c3: string) =>\n `${GRAIN_LAYER}, linear-gradient(135deg, ${c1} 0%, ${c2} 55%, ${c3} 100%)`;\n\n// Apply a pre-rendered static image as a cover background.\nconst applyStaticBg = (el: HTMLDivElement, src: string) => {\n el.style.backgroundImage = `url(${src})`;\n el.style.backgroundSize = 'cover';\n el.style.backgroundPosition = 'center';\n};\n\n// Build the WebGL context, wire up resize/visibility observers, and run the\n// render loop. Returns a cleanup that tears everything back down.\nfunction initGrainient(container: HTMLDivElement): () => void {\n const renderer = new Renderer({\n webgl: 2,\n alpha: true,\n antialias: false,\n dpr: Math.min(globalThis.devicePixelRatio || 1, 2),\n });\n\n const gl = renderer.gl;\n const canvas = gl.canvas;\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n canvas.style.display = 'block';\n container.appendChild(canvas);\n\n const geometry = new Triangle(gl);\n const program = createGrainientProgram(gl);\n const mesh = new Mesh(gl, { geometry, program });\n ctxMap.set(container, { renderer, program, mesh });\n\n const setSize = () => {\n const rect = container.getBoundingClientRect();\n renderer.setSize(Math.max(1, Math.floor(rect.width)), Math.max(1, Math.floor(rect.height)));\n const res: Float32Array = program.uniforms.iResolution.value;\n res[0] = gl.drawingBufferWidth;\n res[1] = gl.drawingBufferHeight;\n renderer.render({ scene: mesh });\n };\n\n const ro = new ResizeObserver(setSize);\n ro.observe(container);\n setSize();\n\n let raf = 0;\n let isVisible = true;\n let isPageVisible = !document.hidden;\n const t0 = performance.now();\n\n const loop = (t: number) => {\n program.uniforms.iTime.value = (t - t0) * 0.001;\n renderer.render({ scene: mesh });\n raf = requestAnimationFrame(loop);\n };\n\n const tryStart = () => {\n if (isVisible && isPageVisible && raf === 0) raf = requestAnimationFrame(loop);\n };\n const tryStop = () => {\n if (raf !== 0) {\n cancelAnimationFrame(raf);\n raf = 0;\n }\n };\n\n // Reduced motion: render a single static frame and never start the RAF loop.\n const reduce = prefersReducedMotion();\n\n const io = new IntersectionObserver(\n ([entry]) => {\n if (!entry) return;\n isVisible = entry.isIntersecting;\n if (isVisible) tryStart();\n else tryStop();\n },\n { threshold: 0 },\n );\n if (!reduce) io.observe(container);\n\n const onVisibility = () => {\n isPageVisible = !document.hidden;\n if (isPageVisible) tryStart();\n else tryStop();\n };\n if (!reduce) document.addEventListener('visibilitychange', onVisibility);\n if (!reduce) tryStart();\n\n return () => {\n tryStop();\n ro.disconnect();\n io.disconnect();\n document.removeEventListener('visibilitychange', onVisibility);\n ctxMap.delete(container);\n try {\n container.removeChild(canvas);\n } catch {\n /* ignore */\n }\n };\n}\n\nconst Grainient = (props: GrainientProps) => {\n const {\n timeSpeed = 0.25,\n colorBalance = 0.0,\n warpStrength = 1.0,\n warpFrequency = 5.0,\n warpSpeed = 2.0,\n warpAmplitude = 50.0,\n blendAngle = 0.0,\n blendSoftness = 0.05,\n rotationAmount = 500.0,\n noiseScale = 2.0,\n grainAmount = 0.1,\n grainScale = 2.0,\n grainAnimated = false,\n contrast = 1.5,\n gamma = 1.0,\n saturation = 1.0,\n centerX = 0.0,\n centerY = 0.0,\n zoom = 0.9,\n color1 = '#FF9FFC',\n color2 = '#5227FF',\n color3 = '#B497CF',\n staticSrc = '',\n className = '',\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n // Set once on mount: when true, WebGL is skipped and a static background stands in.\n const fallbackRef = useRef(false);\n\n // Effect 1: build WebGL context once, pause when offscreen / tab hidden.\n // When a pre-rendered image is available, low-power clients and\n // prefers-reduced-motion users get it as a zero-GPU-cost background.\n // The renderer is created once on mount; color changes are handled in Effect 2.\n // biome-ignore lint/plugin: creates the WebGL renderer once on mount and tears it down on unmount — imperative GPU setup with no derived-state form.\n // biome-ignore lint/correctness/useExhaustiveDependencies: mount-only WebGL setup; color/staticSrc changes are handled in Effect 2.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n if (isLowPowerClient() || prefersReducedMotion()) {\n fallbackRef.current = true;\n container.dataset.fallback = 'true';\n if (staticSrc) applyStaticBg(container, staticSrc);\n else container.style.background = fallbackGradient(color1, color2, color3);\n return;\n }\n return initGrainient(container);\n }, []); // renderer created once\n\n // Effect 2: sync props to uniforms — zero GPU cost, no teardown.\n // biome-ignore lint/plugin: imperatively writes props into mutable WebGL uniform objects (an external system); there is no render-time equivalent.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n // Fallback clients have no WebGL context; re-apply the background so a\n // later color/src change still reaches the static background.\n if (fallbackRef.current) {\n if (staticSrc) applyStaticBg(container, staticSrc);\n else container.style.background = fallbackGradient(color1, color2, color3);\n return;\n }\n\n const ctx = ctxMap.get(container);\n if (!ctx) return;\n\n const { program, renderer, mesh } = ctx;\n const u = program.uniforms;\n\n u.uTimeSpeed.value = timeSpeed;\n u.uColorBalance.value = colorBalance;\n u.uWarpStrength.value = warpStrength;\n u.uWarpFrequency.value = warpFrequency;\n u.uWarpSpeed.value = warpSpeed;\n u.uWarpAmplitude.value = warpAmplitude;\n u.uBlendAngle.value = blendAngle;\n u.uBlendSoftness.value = blendSoftness;\n u.uRotationAmount.value = rotationAmount;\n u.uNoiseScale.value = noiseScale;\n u.uGrainAmount.value = grainAmount;\n u.uGrainScale.value = grainScale;\n u.uGrainAnimated.value = grainAnimated ? 1.0 : 0.0;\n u.uContrast.value = contrast;\n u.uGamma.value = gamma;\n u.uSaturation.value = saturation;\n u.uCenterOffset.value = new Float32Array([centerX, centerY]);\n u.uZoom.value = zoom;\n u.uColor1.value = new Float32Array(hexToRgb(color1));\n u.uColor2.value = new Float32Array(hexToRgb(color2));\n u.uColor3.value = new Float32Array(hexToRgb(color3));\n\n // Under reduced motion the RAF loop never starts; draw one frame here so\n // the real colors appear (the first frame from setSize() is all-white).\n if (prefersReducedMotion()) renderer.render({ scene: mesh });\n }, [\n timeSpeed,\n colorBalance,\n warpStrength,\n warpFrequency,\n warpSpeed,\n warpAmplitude,\n blendAngle,\n blendSoftness,\n rotationAmount,\n noiseScale,\n grainAmount,\n grainScale,\n grainAnimated,\n contrast,\n gamma,\n saturation,\n centerX,\n centerY,\n zoom,\n color1,\n color2,\n color3,\n staticSrc,\n ]);\n\n return <div ref={containerRef} className={cn('grainient-container', className)} />;\n};\n\nexport default Grainient;\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Tracks a CSS media query, returning `true` when it matches.\n *\n * The default return before hydration is `false`; pass `defaultState`\n * to set a different initial value (e.g. `true` for dark-mode queries\n * whose SSR default is dark).\n */\nexport function useMediaQuery(query: string, defaultState = false): boolean {\n const [matches, setMatches] = useState(defaultState);\n\n // biome-ignore lint/plugin: subscribes to a matchMedia listener — an imperative side effect with no derived-state equivalent.\n useEffect(() => {\n const mql = globalThis.matchMedia(query);\n setMatches(mql.matches);\n\n const onChange = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n }, [query]);\n\n return matches;\n}\n","'use client';\n\nimport { useInView } from 'framer-motion';\nimport { type ReactNode, useLayoutEffect, useRef, useState } from 'react';\nimport { annotate } from 'rough-notation';\nimport type { RoughAnnotation } from 'rough-notation/lib/model';\nimport { useMediaQuery } from '../lib/use-media-query.js';\nimport { cn } from '../lib/utils.js';\n\ntype AnnotationAction = 'highlight' | 'underline' | 'box' | 'circle' | 'strike-through' | 'crossed-off' | 'bracket';\n\n/**\n * rough-notation writes the colour straight into the SVG's `stroke` presentation\n * attribute, where `var()` is never substituted — so a design token has to be\n * resolved against the live element before it is handed over.\n */\nfunction resolveColor(element: Element, color: string): string {\n if (!color.startsWith('var(')) return color;\n const token = color.slice(4, -1).trim();\n return globalThis.getComputedStyle(element).getPropertyValue(token).trim() || color;\n}\n\n/**\n * The site's breakpoints, ascending, in the `rem` units Tailwind emits them in —\n * so they keep tracking the root font size the way the CSS does. Mirrored from\n * the library's `@theme` block (`xs` and `md` are custom, the rest are defaults).\n */\nconst BREAKPOINTS = [\n ['xs', 30],\n ['sm', 40],\n ['md', 50],\n ['lg', 64],\n ['xl', 80],\n ['2xl', 96],\n] as const;\n\ntype Breakpoint = 'base' | (typeof BREAKPOINTS)[number][0];\n\n/** `'base'` is the implicit below-`xs` band — the widths no `min-width` query claims. */\nfunction getBreakpoint(): Breakpoint {\n let current: Breakpoint = 'base';\n for (const [name, rem] of BREAKPOINTS) {\n if (globalThis.matchMedia(`(min-width: ${rem}rem)`).matches) current = name;\n }\n return current;\n}\n\n/**\n * Call `listener` whenever the viewport crosses a breakpoint. Returns the\n * unsubscribe.\n *\n * The imperative counterpart to a `useBreakpoint` hook, for work that has to land\n * in the *same frame* as the layout change. Media-query change events fire during\n * the rendering steps, before `requestAnimationFrame` and before paint, so a\n * listener that writes to the DOM here is painted with the new layout rather than\n * one frame behind it.\n */\nfunction onBreakpointChange(listener: () => void): () => void {\n const queries = BREAKPOINTS.map(([, rem]) => globalThis.matchMedia(`(min-width: ${rem}rem)`));\n for (const query of queries) query.addEventListener('change', listener);\n return () => {\n for (const query of queries) query.removeEventListener('change', listener);\n };\n}\n\ntype HighlighterProps = {\n /** The words to annotate. Rendered inline, so they inherit the surrounding type. */\n children: ReactNode;\n className?: string;\n /**\n * Which marker stroke to draw.\n * @default 'highlight'\n */\n action?: AnnotationAction;\n /**\n * Stroke colour. Accepts a `var(--token)` string, which is resolved against\n * the live element and re-resolved whenever the theme flips.\n * @default 'var(--marker-highlight)'\n */\n color?: string;\n /** @default 1.5 */\n strokeWidth?: number;\n /** Milliseconds the stroke takes to draw itself on. @default 600 */\n animationDuration?: number;\n /**\n * Milliseconds to hold the stroke back before it starts drawing. Ignored under\n * reduced motion, where there is no draw-on to stagger.\n * @default 0\n */\n delay?: number;\n /** Passes over the same stroke, which is what makes it read as hand-drawn. @default 2 */\n iterations?: number;\n /** Pixels of slack between the text box and the stroke. @default 2 */\n padding?: number;\n /** Annotate every line the text wraps onto, rather than one box around all of them. @default true */\n multiline?: boolean;\n /** Hold the stroke back until the text scrolls into view. @default false */\n isView?: boolean;\n};\n\n/**\n * Draws a hand-drawn marker stroke over a word or phrase.\n *\n * The stroke is an SVG that rough-notation injects on the client, so the\n * exported HTML ships the bare text and nothing about the layout depends on JS\n * having run. Readers who ask for reduced motion get the stroke without the\n * draw-on animation.\n */\nexport function Highlighter({\n children,\n className,\n action = 'highlight',\n color = 'var(--marker-highlight)',\n strokeWidth = 1.5,\n animationDuration = 600,\n delay = 0,\n iterations = 2,\n padding = 2,\n multiline = true,\n isView = false,\n}: HighlighterProps) {\n const elementRef = useRef<HTMLSpanElement>(null);\n const isInView = useInView(elementRef, { once: true, margin: '-10%' });\n const reducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)');\n // Only a re-run trigger: the colour itself comes from the computed style, which\n // is already correct on first paint because the theme class is set before\n // hydration. The observer below bumps this whenever the class attribute flips.\n const [themeVersion, setThemeVersion] = useState(0);\n\n const shouldShow = !isView || isInView;\n\n // Theme flips land as a class swap on <html> (the `.dark` class toggled by the\n // theme provider), and rough-notation bakes the *resolved* token into the\n // SVG's stroke attribute — which does not track var(). Re-running the draw\n // effect with a freshly resolved colour is what repaints the stroke.\n useLayoutEffect(() => {\n const observer = new MutationObserver(() => setThemeVersion((v) => v + 1));\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });\n return () => observer.disconnect();\n }, []);\n\n // Imperatively injects and tears down a rough-notation SVG measured off live\n // DOM layout — a post-render side effect with no render-time equivalent.\n // biome-ignore lint/correctness/useExhaustiveDependencies: `themeVersion` is a redraw trigger, not a read value — the token resolves to a different colour per theme, so a flip has to repaint the stroke.\n useLayoutEffect(() => {\n const element = elementRef.current;\n if (!(shouldShow && element)) return;\n\n let annotation: RoughAnnotation | undefined;\n let untrack: (() => void) | undefined;\n\n const draw = () => {\n annotation = annotate(element, {\n type: action,\n color: resolveColor(element, color),\n strokeWidth,\n animationDuration,\n animate: !reducedMotion,\n iterations,\n padding,\n multiline,\n });\n annotation.show();\n\n // The wrapper below already carries the stroke wherever the page moves the\n // text, so the only thing left that can stale it is a change in the text's\n // own shape — which on a breakpoint-driven layout means a breakpoint. This\n // is subscribed directly rather than through a `useBreakpoint` hook because\n // a React state round-trip commits a frame or more after the browser has\n // painted the new layout, which is exactly the lag being chased out.\n // `show()` on a still-showing annotation re-renders un-animated, so the\n // stroke resizes without replaying the draw-on.\n let drawnAt = getBreakpoint();\n untrack = onBreakpointChange(() => {\n const current = getBreakpoint();\n if (current === drawnAt) return;\n drawnAt = current;\n annotation?.show();\n });\n };\n\n const startDelay = reducedMotion ? 0 : delay;\n const timer = startDelay > 0 ? globalThis.setTimeout(draw, startDelay) : undefined;\n if (timer === undefined) draw();\n\n return () => {\n globalThis.clearTimeout(timer);\n untrack?.();\n annotation?.remove();\n };\n }, [\n shouldShow,\n action,\n color,\n strokeWidth,\n animationDuration,\n delay,\n iterations,\n padding,\n multiline,\n reducedMotion,\n themeVersion,\n ]);\n\n // Two spans, and both earn their place.\n //\n // rough-notation injects its SVG as a *sibling* of the annotated element, laid\n // out `position: absolute; top: 0; left: 0`, with the stroke's coordinates baked\n // as offsets from wherever that SVG lands. Left alone it resolves against\n // whatever positioned ancestor it happens to find — for a centred, shrink-wrapped\n // page section, effectively the viewport — so every reflow that slid the text\n // sideways slid it out from under its own stroke, and only a redraw put it back.\n // The `relative` wrapper makes the SVG resolve against a box the text sits\n // inside instead, so the two now move as one and no listener is involved.\n //\n // The inner span stays plain `inline`, which is what makes `multiline` work:\n // `getClientRects()` on an inline reports one box per line, so wrapped text gets\n // a stroke per line rather than one slab drawn around the whole paragraph.\n return (\n <span className={cn('relative inline-block bg-transparent', className)}>\n <span ref={elementRef}>{children}</span>\n </span>\n );\n}\n\nexport type { AnnotationAction, HighlighterProps };\n","'use client';\n\nimport { type InputHTMLAttributes, type ReactNode, useId, useState } from 'react';\nimport { cn } from '../lib/utils.js';\n\nconst FIELD_BORDER: Record<string, string> = {\n idle: 'border-(--color-border)',\n focused: 'border-(--color-foreground)/40',\n error: 'border-(--color-destructive)',\n};\n\nconst FIELD_HEIGHT: Record<string, string> = {\n sm: 'h-8',\n md: 'h-9',\n lg: 'h-11',\n};\n\nconst FIELD_SHAPE: Record<string, string> = {\n rounded: 'rounded-lg',\n pill: 'rounded-full',\n};\n\nconst INPUT_SIZE: Record<string, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n};\n\nconst INPUT_PAD: Record<string, string> = {\n sm: 'px-2.5',\n md: 'px-3',\n lg: 'px-3.5',\n};\n\nexport type InputProps = {\n label?: string;\n error?: string | boolean;\n hint?: string;\n leftAdornment?: ReactNode;\n rightAdornment?: ReactNode;\n size?: 'sm' | 'md' | 'lg';\n shape?: 'rounded' | 'pill';\n className?: string;\n inputClassName?: string;\n inputType?: InputHTMLAttributes<HTMLInputElement>['type'];\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>;\n\nexport function Input({\n label,\n error,\n hint,\n leftAdornment,\n rightAdornment,\n size = 'md',\n shape = 'rounded',\n className,\n inputClassName,\n inputType = 'text',\n id: idProp,\n onFocus,\n onBlur,\n disabled,\n autoFocus,\n ...inputProps\n}: InputProps) {\n const autoId = useId();\n const id = idProp ?? autoId;\n const [focused, setFocused] = useState(false);\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : null;\n const state = hasError ? 'error' : focused ? 'focused' : 'idle';\n const hasLeft = Boolean(leftAdornment);\n const hasRight = Boolean(rightAdornment);\n\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n {label ? (\n <label htmlFor={id} className=\"px-1 font-medium text-(--color-foreground) text-sm\">\n {label}\n </label>\n ) : null}\n\n <div\n className={cn(\n 'relative flex flex-row items-center overflow-hidden border',\n FIELD_BORDER[state],\n FIELD_HEIGHT[size],\n FIELD_SHAPE[shape],\n disabled && 'opacity-60',\n )}\n >\n {hasLeft ? (\n <div className=\"pointer-events-none absolute top-0 bottom-0 left-3 z-10 flex items-center justify-center\">\n {leftAdornment}\n </div>\n ) : null}\n\n <input\n id={id}\n type={inputType}\n disabled={disabled}\n // biome-ignore lint/a11y/noAutofocus: forwarded HTML attribute — callers decide whether to autofocus\n autoFocus={autoFocus}\n onFocus={(event_) => {\n setFocused(true);\n onFocus?.(event_);\n }}\n onBlur={(event_) => {\n setFocused(false);\n onBlur?.(event_);\n }}\n className={cn(\n 'h-full min-w-0 flex-1 bg-transparent text-(--color-foreground) outline-none',\n INPUT_SIZE[size],\n hasLeft ? 'pl-10' : INPUT_PAD[size],\n hasRight ? 'pr-10' : INPUT_PAD[size],\n inputClassName,\n )}\n {...inputProps}\n />\n\n {hasRight ? (\n <div className=\"pointer-events-none absolute top-0 right-3 bottom-0 z-10 flex items-center justify-center\">\n {rightAdornment}\n </div>\n ) : null}\n </div>\n\n {errorMessage ? (\n <p role=\"alert\" className=\"px-1 text-(--color-destructive) text-xs\">\n {errorMessage}\n </p>\n ) : hint ? (\n <p className=\"px-1 text-(--color-muted-foreground) text-xs\">{hint}</p>\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { LiquidMetal as LiquidMetalShader } from '@paper-design/shaders-react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/* ── Shader wrapper ────────────────────────────────────── */\n\nexport type LiquidMetalProps = {\n /** Base background color of the liquid metal. */\n colorBack?: string;\n /** Tint / highlight color for the chrome effect. */\n colorTint?: string;\n /** Animation speed (0.1–2.0 recommended). */\n speed?: number;\n /** Pattern stripe density (1–10). */\n repetition?: number;\n /** Wave distortion amount (0–1). */\n distortion?: number;\n /** Texture zoom (0.01–4). */\n scale?: number;\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * Full-bleed animated liquid-metal shader. Absolutely positioned to fill its\n * nearest positioned ancestor; the WebGL canvas is decorative, so it is hidden\n * from assistive tech and never intercepts pointer events.\n */\nexport function LiquidMetal({\n colorBack = '#aaaaac',\n colorTint = '#ffffff',\n speed = 0.5,\n repetition = 4,\n distortion = 0.1,\n scale = 1,\n className,\n style,\n}: LiquidMetalProps) {\n return (\n <div aria-hidden={true} className={cn('pointer-events-none absolute inset-0 z-0 overflow-hidden', className)} style={style}>\n <LiquidMetalShader\n colorBack={colorBack}\n colorTint={colorTint}\n speed={speed}\n repetition={repetition}\n distortion={distortion}\n softness={0}\n shiftRed={0.3}\n shiftBlue={-0.3}\n angle={45}\n shape=\"none\"\n scale={scale}\n fit=\"cover\"\n style={{ width: '100%', height: '100%' }}\n />\n </div>\n );\n}\n","import type * as React from 'react';\n\nexport function ChevronDownIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" {...props}>\n <path d=\"M1 3.5L5 7.5L9 3.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" {...props}>\n <path d=\"M3.5 1L7.5 5L3.5 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n );\n}\n\nexport function ArrowSvg(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"20\" height=\"10\" viewBox=\"0 0 20 10\" fill=\"none\" {...props}>\n <path\n d=\"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 className=\"fill-(--popup-surface,var(--surface-3))\"\n />\n <path\n d=\"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 className=\"fill-border\"\n />\n <path\n d=\"M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z\"\n className=\"fill-border\"\n />\n </svg>\n );\n}\n","import type { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport { cva } from 'class-variance-authority';\nimport type * as React from 'react';\nimport type { SurfaceLevel } from '../lib/surface.js';\n\ntype PositionerProps = React.ComponentProps<typeof NavigationMenuPrimitive.Positioner>;\n\nexport const navigationMenuTriggerStyle = cva(\n 'box-border flex items-center justify-center gap-1.5 h-10 px-2.5 xs:px-3 m-0 rounded-md text-foreground font-medium !text-[15px] leading-6 select-none no-underline hover:text-foreground data-[popup-open]:bg-black/[0.07] dark:data-[popup-open]:bg-white/[0.07] data-[popup-open]:text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-1 focus-visible:outline-ring focus-visible:relative',\n);\n\nexport const navigationMenuSubTriggerStyle = cva(\n 'w-full text-left relative block rounded-md p-2.5 xs:p-3 no-underline text-inherit hover:bg-black/[0.07] dark:hover:bg-white/[0.07] hover:text-foreground active:bg-black/[0.11] dark:active:bg-white/[0.11] focus-visible:relative focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-1 focus-visible:outline-ring data-[popup-open]:bg-black/[0.07] dark:data-[popup-open]:bg-white/[0.07] data-[popup-open]:text-foreground',\n);\n\nexport interface NavigationMenuProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Root> {\n side?: PositionerProps['side'];\n sideOffset?: PositionerProps['sideOffset'];\n align?: PositionerProps['align'];\n alignOffset?: PositionerProps['alignOffset'];\n collisionPadding?: PositionerProps['collisionPadding'];\n collisionBoundary?: PositionerProps['collisionBoundary'];\n positionMethod?: PositionerProps['positionMethod'];\n arrow?: boolean;\n /** Surface elevation level (1-8) for the bar. Defaults to 2 — subtle toolbar above the page. */\n level?: SurfaceLevel;\n /** Shadow weight (1-8) for the bar. Defaults to 2. */\n shadowLevel?: SurfaceLevel;\n}\n\nexport interface NavigationMenuLinkProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Link> {\n /**\n * When true, applies trigger button styling for top-level navigation links\n */\n standalone?: boolean;\n}\n\nexport interface NavigationMenuViewportProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Viewport> {\n side?: PositionerProps['side'];\n sideOffset?: PositionerProps['sideOffset'];\n align?: PositionerProps['align'];\n alignOffset?: PositionerProps['alignOffset'];\n collisionPadding?: PositionerProps['collisionPadding'];\n collisionBoundary?: PositionerProps['collisionBoundary'];\n positionMethod?: PositionerProps['positionMethod'];\n arrow?: boolean;\n}\n\nexport interface NavigationMenuSubProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Root> {\n side?: PositionerProps['side'];\n sideOffset?: PositionerProps['sideOffset'];\n align?: PositionerProps['align'];\n alignOffset?: PositionerProps['alignOffset'];\n arrow?: boolean;\n}\n","import { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport type * as React from 'react';\nimport { solidSurface } from '../lib/surface.js';\nimport { cn, validCssVars } from '../lib/utils.js';\nimport { ArrowSvg, ChevronDownIcon, ChevronRightIcon } from './navigation-menu-icons.js';\nimport {\n type NavigationMenuLinkProps,\n type NavigationMenuProps,\n type NavigationMenuSubProps,\n type NavigationMenuViewportProps,\n navigationMenuSubTriggerStyle,\n navigationMenuTriggerStyle,\n} from './navigation-menu-styles.js';\n\nfunction NavigationMenu({\n className,\n children,\n side,\n sideOffset = 10,\n align,\n alignOffset,\n collisionPadding = { top: 5, bottom: 5, left: 20, right: 20 },\n collisionBoundary,\n arrow = false,\n positionMethod = 'fixed',\n level = 2,\n shadowLevel = 2,\n ...props\n}: NavigationMenuProps) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-level={level}\n className={cn('min-w-max rounded-md p-1 text-foreground', solidSurface(level, shadowLevel), className)}\n {...props}\n >\n {children}\n <NavigationMenuViewport\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n collisionPadding={collisionPadding}\n collisionBoundary={collisionBoundary}\n arrow={arrow}\n positionMethod={positionMethod}\n />\n </NavigationMenuPrimitive.Root>\n );\n}\n\nfunction NavigationMenuList({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return <NavigationMenuPrimitive.List data-slot=\"navigation-menu-list\" className={cn('relative flex', className)} {...props} />;\n}\n\nfunction NavigationMenuItem({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return <NavigationMenuPrimitive.Item data-slot=\"navigation-menu-item\" className={cn('relative', className)} {...props} />;\n}\n\nfunction NavigationMenuTrigger({ className, children, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), className)}\n {...props}\n >\n {children}\n <NavigationMenuIcon />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuIcon({\n className,\n render = <ChevronDownIcon />,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Icon>) {\n return (\n <NavigationMenuPrimitive.Icon\n className={cn('transition-transform duration-200 ease-in-out data-[popup-open]:rotate-180', className)}\n render={render}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuSubTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-sub-trigger\"\n className={cn(navigationMenuSubTriggerStyle(), className)}\n {...props}\n >\n {children}\n <NavigationMenuPrimitive.Icon\n className=\"absolute top-1/2 right-2.5 flex h-2.5 w-2.5 -translate-y-1/2 items-center justify-center transition-transform duration-200 ease-in-out data-[popup-open]:rotate-180\"\n render={<ChevronRightIcon />}\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'h-full w-[calc(100vw-2.5rem)] p-4 sm:w-max',\n // Transitions for opacity/transform/filter\n 'transition-[opacity,transform,filter,scale,translate] duration-(--duration) ease-(--easing)',\n // Starting/ending opacity\n 'data-ending-style:opacity-0 data-starting-style:opacity-0',\n // Direction-aware slide (starting)\n 'data-starting-style:data-[activation-direction=left]:-translate-x-1/2',\n 'data-starting-style:data-[activation-direction=right]:translate-x-1/2',\n // Direction-aware slide (ending)\n 'data-ending-style:data-[activation-direction=left]:translate-x-1/2',\n 'data-ending-style:data-[activation-direction=right]:-translate-x-1/2',\n // Blur effect during transitions\n 'data-ending-style:blur-[4px] data-starting-style:blur-[4px]',\n // scale effect during transitions\n 'data-ending-style:scale-97 data-starting-style:scale-97',\n // Motion reduce support\n 'motion-reduce:transition-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuLink({ className, standalone, ...props }: NavigationMenuLinkProps) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n standalone\n ? navigationMenuTriggerStyle()\n : 'block rounded-md p-2.5 xs:p-3 text-inherit no-underline duration-150 hover:text-foreground hover:duration-0 focus-visible:relative focus-visible:outline-2 focus-visible:outline-ring focus-visible:-outline-offset-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuBackdrop({ ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Backdrop>) {\n return <NavigationMenuPrimitive.Backdrop data-slot=\"navigation-menu-backdrop\" {...props} />;\n}\n\nfunction NavigationMenuPortal({ ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Portal>) {\n return <NavigationMenuPrimitive.Portal data-slot=\"navigation-menu-portal\" {...props} />;\n}\n\nfunction NavigationMenuArrow({ ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Arrow>) {\n return (\n <NavigationMenuPrimitive.Arrow\n className=\"flex transition-[left] duration-[var(--duration)] ease-[var(--easing)] data-[side=bottom]:top-[-8px] data-[side=left]:right-[-13px] data-[side=top]:bottom-[-8px] data-[side=right]:left-[-13px] data-[side=left]:rotate-90 data-[side=right]:-rotate-90 data-[side=top]:rotate-180\"\n {...props}\n >\n <ArrowSvg />\n </NavigationMenuPrimitive.Arrow>\n );\n}\n\nfunction NavigationMenuViewport({\n className,\n children,\n side,\n sideOffset,\n align,\n alignOffset,\n collisionPadding,\n collisionBoundary,\n arrow = false,\n positionMethod = 'fixed',\n ...props\n}: NavigationMenuViewportProps) {\n return (\n <NavigationMenuPortal>\n <NavigationMenuPrimitive.Positioner\n data-slot=\"navigation-menu-positioner\"\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n collisionPadding={collisionPadding}\n collisionBoundary={collisionBoundary}\n positionMethod={positionMethod}\n className=\"z-50 box-border h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-(--duration) ease-(--easing) before:absolute before:content-[''] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=left]:before:top-0 data-[side=right]:before:top-0 data-[side=bottom]:before:right-0 data-[side=left]:before:-right-2.5 data-[side=top]:before:right-0 data-[side=left]:before:bottom-0 data-[side=right]:before:bottom-0 data-[side=top]:before:-bottom-2.5 data-[side=bottom]:before:left-0 data-[side=right]:before:-left-2.5 data-[side=top]:before:left-0 data-[side=bottom]:before:h-2.5 data-[side=top]:before:h-2.5 data-[side=left]:before:w-2.5 data-[side=right]:before:w-2.5\"\n style={validCssVars({ '--duration': '0.35s', '--easing': 'cubic-bezier(0.22, 1, 0.36, 1)' })}\n >\n <NavigationMenuPrimitive.Popup\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) overflow-hidden rounded-md text-foreground transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-starting-style:scale-90 data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-150',\n solidSurface(3, 3),\n )}\n >\n {arrow ? <NavigationMenuArrow /> : null}\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn('relative h-full w-full overflow-hidden', className)}\n {...props}\n >\n {children}\n </NavigationMenuPrimitive.Viewport>\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPortal>\n );\n}\n\nfunction NavigationMenuSub({\n className,\n children,\n orientation = 'vertical',\n side = 'right',\n sideOffset = 24,\n align = 'end',\n alignOffset = -24,\n arrow = false,\n ...props\n}: NavigationMenuSubProps) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu-sub\"\n className={cn('', className)}\n orientation={orientation}\n {...props}\n >\n {children}\n <NavigationMenuPortal>\n <NavigationMenuPrimitive.Positioner\n data-slot=\"navigation-menu-sub-positioner\"\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n align={align}\n side={side}\n className=\"box-border h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-(--duration) ease-(--easing) before:absolute before:content-[''] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=left]:before:top-0 data-[side=right]:before:top-0 data-[side=bottom]:before:right-0 data-[side=left]:before:-right-2.5 data-[side=top]:before:right-0 data-[side=left]:before:bottom-0 data-[side=right]:before:bottom-0 data-[side=top]:before:-bottom-2.5 data-[side=bottom]:before:left-0 data-[side=right]:before:-left-2.5 data-[side=top]:before:left-0 data-[side=bottom]:before:h-2.5 data-[side=top]:before:h-2.5 data-[side=left]:before:w-2.5 data-[side=right]:before:w-2.5\"\n style={validCssVars({ '--duration': '0.35s', '--easing': 'cubic-bezier(0.22, 1, 0.36, 1)' })}\n >\n <NavigationMenuPrimitive.Popup\n data-slot=\"navigation-menu-sub-content\"\n className={cn(\n 'relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) overflow-hidden rounded-md text-foreground transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-starting-style:scale-90 data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-150',\n solidSurface(5, 5),\n )}\n >\n {arrow ? <NavigationMenuArrow /> : null}\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-sub-viewport\"\n className=\"relative h-full w-full overflow-hidden\"\n />\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPortal>\n </NavigationMenuPrimitive.Root>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuArrow,\n NavigationMenuBackdrop,\n NavigationMenuContent,\n NavigationMenuIcon,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuPortal,\n NavigationMenuSub,\n NavigationMenuSubTrigger,\n NavigationMenuTrigger,\n NavigationMenuViewport,\n};\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { Input, type InputProps } from './input.js';\n\nexport type PasswordInputProps = Omit<InputProps, 'rightAdornment' | 'inputType'> & {\n inputType?: 'password' | 'new-password';\n};\n\nexport function PasswordInput({ inputType = 'password', ...props }: PasswordInputProps) {\n const [visible, setVisible] = useState(false);\n\n const toggle = useCallback(() => setVisible((v) => !v), []);\n\n const eye = (\n <button\n type=\"button\"\n onClick={toggle}\n className=\"pointer-events-auto cursor-pointer text-(--color-muted-foreground) hover:text-(--color-foreground)\"\n aria-label={visible ? 'Hide password' : 'Show password'}\n tabIndex={-1}\n >\n {visible ? <EyeOffIcon className=\"size-5\" /> : <EyeIcon className=\"size-5\" />}\n </button>\n );\n\n return (\n <Input\n {...props}\n inputType={visible ? 'text' : 'password'}\n rightAdornment={eye}\n autoComplete={inputType === 'new-password' ? 'new-password' : 'current-password'}\n />\n );\n}\n\nfunction EyeIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction EyeOffIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\" />\n <path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\" />\n <path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\" />\n <path d=\"m2 2 20 20\" />\n </svg>\n );\n}\n","'use client';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { ButtonHTMLAttributes, RefObject } from 'react';\nimport { cn } from '../lib/utils.js';\n\nconst rainbowButtonVariants = cva(\n cn(\n 'relative cursor-pointer group transition-transform animate-rainbow',\n 'inline-flex items-center justify-center gap-2 shrink-0',\n 'rounded-sm outline-none focus-visible:ring-[3px] aria-invalid:border-destructive',\n 'text-sm font-medium whitespace-nowrap',\n 'disabled:pointer-events-none disabled:opacity-50',\n \"[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0\",\n ),\n {\n variants: {\n variant: {\n default:\n 'border-0 bg-[linear-gradient(#121213,#121213),linear-gradient(#121213_50%,rgba(18,18,19,0.6)_80%,rgba(18,18,19,0)),linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))] bg-[length:200%] text-primary-foreground [background-clip:padding-box,border-box,border-box] [background-origin:border-box] [border:calc(0.125rem)_solid_transparent] before:absolute before:bottom-[-20%] before:left-1/2 before:z-0 before:h-1/5 before:w-3/5 before:-translate-x-1/2 before:animate-rainbow before:bg-[linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))] before:bg-[length:200%] before:[filter:blur(0.75rem)] dark:bg-[linear-gradient(#fff,#fff),linear-gradient(#fff_50%,rgba(255,255,255,0.6)_80%,rgba(0,0,0,0)),linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))]',\n outline:\n 'border border-input border-b-transparent bg-[linear-gradient(#ffffff,#ffffff),linear-gradient(#ffffff_50%,rgba(18,18,19,0.6)_80%,rgba(18,18,19,0)),linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))] bg-[length:200%] text-accent-foreground [background-clip:padding-box,border-box,border-box] [background-origin:border-box] before:absolute before:bottom-[-20%] before:left-1/2 before:z-0 before:h-1/5 before:w-3/5 before:-translate-x-1/2 before:animate-rainbow before:bg-[linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))] before:bg-[length:200%] before:[filter:blur(0.75rem)] dark:bg-[linear-gradient(#0a0a0a,#0a0a0a),linear-gradient(#0a0a0a_50%,rgba(255,255,255,0.6)_80%,rgba(0,0,0,0)),linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))]',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-11 rounded-md px-8',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport interface RainbowButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof rainbowButtonVariants> {\n asChild?: boolean;\n ref?: RefObject<HTMLButtonElement | null>;\n}\n\nexport function RainbowButton({ className, variant, size, asChild = false, ref, ...props }: RainbowButtonProps) {\n const Comp = asChild ? Slot : 'button';\n return <Comp data-slot=\"button\" className={cn(rainbowButtonVariants({ variant, size, className }))} ref={ref} {...props} />;\n}\n\nRainbowButton.displayName = 'RainbowButton';\n\nexport { rainbowButtonVariants };\n","'use client';\n\nimport type { ChangeEvent } from 'react';\nimport { useCallback } from 'react';\n\nexport type Tick = { value: number; label: string };\n\nexport type RangeSliderProps = {\n label: string;\n value: number;\n /** Allowed values, ascending. The first and last double as the bounds. */\n steps: number[];\n ticks: Tick[];\n valueLabel: string;\n onChange: (v: number) => void;\n};\n\n/** Index of the grid step nearest `value`, so an off-grid value still resolves. */\nfunction nearestIndex(steps: number[], value: number) {\n return steps.reduce((best, s, i) => (Math.abs(s - value) < Math.abs(steps[best]! - value) ? i : best), 0);\n}\n\n/**\n * Slider over an explicit list of allowed values rather than a uniform `step`,\n * so a grid whose span isn't a whole multiple of its increment can still reach\n * its stated ceiling.\n */\nexport function RangeSlider({ label, value, steps, ticks, valueLabel, onChange }: RangeSliderProps) {\n const min = steps[0]!;\n const max = steps.at(-1) ?? min;\n const pct = ((value - min) / (max - min)) * 100;\n const index = nearestIndex(steps, value);\n\n const handleChange = useCallback(\n (event_: ChangeEvent<HTMLInputElement>) => onChange(steps[Number(event_.target.value)]!),\n [onChange, steps],\n );\n\n return (\n <div className=\"w-full\">\n <div className=\"mb-5 flex items-baseline justify-between gap-2\">\n <p className=\"font-semibold text-[15px] text-(--color-foreground)\">{label}</p>\n <p className=\"font-bold font-numeric text-[20px] text-(--color-foreground) tabular-nums\">{valueLabel}</p>\n </div>\n\n <div className=\"relative\" style={{ height: 20 }}>\n <div className=\"absolute inset-x-0 top-1/2 h-1.5 -translate-y-1/2 rounded-full bg-(--color-border)\" />\n <div\n className=\"pointer-events-none absolute top-1/2 left-0 h-1.5 -translate-y-1/2 rounded-full bg-(--color-foreground)\"\n style={{ width: `${pct}%` }}\n />\n <input\n type=\"range\"\n min={0}\n max={steps.length - 1}\n step={1}\n value={index}\n onChange={handleChange}\n className=\"peer absolute inset-0 z-10 h-full w-full cursor-pointer opacity-0\"\n aria-label={label}\n aria-valuetext={valueLabel}\n />\n <div\n className=\"pointer-events-none absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-(--color-foreground) peer-focus-visible:outline-2 peer-focus-visible:outline-(--color-foreground) peer-focus-visible:outline-offset-2\"\n style={{\n left: `${pct}%`,\n width: 16,\n height: 16,\n boxShadow: '0 2px 8px rgba(0,0,0,0.15)',\n }}\n />\n </div>\n\n <div className=\"relative mt-2\" style={{ height: 16 }}>\n {ticks.map((tick, i) => {\n const tp = ((tick.value - min) / (max - min)) * 100;\n const isFirst = i === 0;\n const isLast = i === ticks.length - 1;\n let left: number | string | undefined = `${tp}%`;\n if (isFirst) left = 0;\n else if (isLast) left = undefined;\n return (\n <span\n key={tick.value}\n className=\"absolute font-numeric text-(--color-muted-foreground) text-[11px] tabular-nums\"\n style={{\n left,\n right: isLast ? 0 : undefined,\n transform: isFirst || isLast ? undefined : 'translateX(-50%)',\n }}\n >\n {tick.label}\n </span>\n );\n })}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { type ReactNode, useSyncExternalStore } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/* ── One-shot ticking store ─────────────────────────────── */\n\nlet tick = 0;\nconst listeners = new Set<() => void>();\nlet timer: ReturnType<typeof setInterval> | null = null;\n\nfunction subscribe(onChange: () => void): () => void {\n listeners.add(onChange);\n if (timer === null)\n timer = setInterval(() => {\n tick += 1;\n for (const l of listeners) l();\n }, ROTATE_MS);\n return () => {\n listeners.delete(onChange);\n if (listeners.size === 0 && timer !== null) {\n clearInterval(timer);\n timer = null;\n }\n };\n}\n\nconst getSnapshot = () => tick;\nconst getServerSnapshot = () => 0;\n\n/* ── Component ──────────────────────────────────────────── */\n\nconst ROTATE_MS = 4000;\n\nexport type BadgeEntry = {\n icon: ReactNode;\n label: string;\n};\n\nexport type RollingBadgeProps = {\n badges: BadgeEntry[];\n className?: string;\n};\n\nexport function RollingBadge({ badges, className }: RollingBadgeProps) {\n const index = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) % badges.length;\n const badge = badges[index];\n\n if (badges.length === 0 || !badge) return null;\n\n return (\n <motion.div\n layout={true}\n className={cn(\n 'relative inline-flex h-8 items-center overflow-hidden rounded-full border border-(--color-border) bg-background px-3.5 shadow-sm',\n className,\n )}\n >\n <AnimatePresence initial={false} mode=\"popLayout\">\n <motion.span\n key={index}\n layout=\"position\"\n initial={{ y: '120%', opacity: 0 }}\n animate={{ y: '0%', opacity: 1 }}\n exit={{ y: '-120%', opacity: 0 }}\n transition={{\n type: 'spring',\n stiffness: 320,\n damping: 32,\n }}\n className=\"flex items-center gap-1.5 whitespace-nowrap font-medium text-[12.5px]\"\n >\n <span className=\"h-3.5 w-3.5 shrink-0\" aria-hidden={true}>\n {badge.icon}\n </span>\n {badge.label}\n </motion.span>\n </AnimatePresence>\n </motion.div>\n );\n}\n","import type * as React from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Soft emerald pill for money-saved callouts — the per-provider delta in the\n * estimate chart.\n *\n * The wording differs per call site, so the label stays in `children`; only the\n * pill treatment is shared.\n */\nexport function SavingsBadge({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n 'rounded-full bg-emerald-500/15 px-2.5 py-0.5 font-numeric font-semibold text-[11px] text-emerald-500 tabular-nums',\n className,\n )}\n {...props}\n />\n );\n}\n","'use client';\n\nimport type { HTMLAttributes } from 'react';\nimport { cn, validCssVars } from '../lib/utils.js';\n\nexport interface ShineBorderProps extends HTMLAttributes<HTMLDivElement> {\n /** Width of the border in pixels. @default 1 */\n borderWidth?: number;\n /** Duration of the animation in seconds. @default 14 */\n duration?: number;\n /** Color of the border — single color or array of colors. @default \"#000000\" */\n shineColor?: string | string[];\n}\n\n/**\n * An animated background-border effect that sits absolutely on top of\n * its positioned parent. Add `relative` to the parent container.\n */\nexport function ShineBorder({\n borderWidth = 1,\n duration = 14,\n shineColor = '#000000',\n className,\n style,\n ...props\n}: ShineBorderProps) {\n return (\n <div\n style={validCssVars({\n '--border-width': `${borderWidth}px`,\n '--duration': `${duration}s`,\n backgroundImage: `radial-gradient(transparent,transparent, ${\n Array.isArray(shineColor) ? shineColor.join(',') : shineColor\n },transparent,transparent)`,\n backgroundSize: '300% 300%',\n mask: 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n WebkitMask: 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n WebkitMaskComposite: 'xor',\n maskComposite: 'exclude',\n padding: 'var(--border-width)',\n ...style,\n })}\n className={cn(\n 'pointer-events-none absolute inset-0 size-full rounded-[inherit] will-change-[background-position] motion-safe:animate-shine',\n className,\n )}\n {...props}\n />\n );\n}\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { type ReactNode, useEffect, useState } from 'react';\nimport { useMediaQuery } from '../lib/use-media-query.js';\nimport { cn } from '../lib/utils.js';\n\n/** Four-pointed star, drawn once and reused by every sparkle. */\nconst STAR_PATH =\n 'M9.82531 0.843845C10.0553 0.215178 10.9446 0.215178 11.1746 0.843845L11.8618 2.72026C12.4006 4.19229 12.3916 6.39157 13.5 7.5C14.6084 8.60843 16.8077 8.59935 18.2797 9.13822L20.1561 9.82534C20.7858 10.0553 20.7858 10.9447 20.1561 11.1747L18.2797 11.8618C16.8077 12.4007 14.6084 12.3916 13.5 13.5C12.3916 14.6084 12.4006 16.8077 11.8618 18.2798L11.1746 20.1562C10.9446 20.7858 10.0553 20.7858 9.82531 20.1562L9.13819 18.2798C8.59932 16.8077 8.60843 14.6084 7.5 13.5C6.39157 12.3916 4.19225 12.4007 2.72023 11.8618L0.843814 11.1747C0.215148 10.9447 0.215148 10.0553 0.843814 9.82534L2.72023 9.13822C4.19225 8.59935 6.39157 8.60843 7.5 7.5C8.60843 6.39157 8.59932 4.19229 9.13819 2.72026L9.82531 0.843845Z';\n\nconst DEFAULT_COLORS = {\n first: 'var(--color-accent-brand)',\n second: 'var(--color-accent-brand-soft)',\n};\n\ntype Sparkle = {\n /** Position within the text's box, as percentages. */\n x: string;\n y: string;\n color: string;\n /** Offsets the twinkle so the group never pulses in unison. */\n delay: number;\n scale: number;\n /** `performance.now()` timestamp after which this sparkle is replaced by a fresh one. */\n expiresAt: number;\n};\n\nfunction SparkleStar({ x, y, color, delay, scale }: Omit<Sparkle, 'expiresAt'>) {\n return (\n <motion.svg\n className=\"pointer-events-none absolute z-20\"\n initial={{ opacity: 0, left: x, top: y }}\n animate={{\n opacity: [0, 1, 0],\n scale: [0, scale, 0],\n rotate: [75, 120, 150],\n }}\n transition={{\n duration: 0.8,\n repeat: Number.POSITIVE_INFINITY,\n delay,\n }}\n width=\"21\"\n height=\"21\"\n viewBox=\"0 0 21 21\"\n aria-hidden={true}\n >\n <path d={STAR_PATH} fill={color} />\n </motion.svg>\n );\n}\n\nexport type SparklesTextProps = {\n /** The text to sparkle. Rendered inline, so it inherits the surrounding type. */\n children: ReactNode;\n className?: string;\n /** How many sparkles orbit the text at once. @default 10 */\n sparklesCount?: number;\n /** The two colors sparkles alternate between. */\n colors?: { first: string; second: string };\n};\n\n/**\n * Wraps a word or phrase in continuously respawning sparkles.\n *\n * Sparkles are generated on the client only — the exported HTML ships the bare\n * text, so nothing about the layout depends on JS having run. Readers who ask\n * for reduced motion get that same bare text.\n */\nexport function SparklesText({ children, className, sparklesCount = 10, colors = DEFAULT_COLORS }: SparklesTextProps) {\n const reducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)');\n const [sparkles, setSparkles] = useState<Sparkle[]>([]);\n const { first, second } = colors;\n\n // biome-ignore lint/plugin: spawns and retires sparkles on a timer — an imperative animation loop with no derived-state equivalent.\n useEffect(() => {\n if (reducedMotion) {\n setSparkles([]);\n return;\n }\n\n const spawn = (): Sparkle => ({\n x: `${Math.random() * 100}%`,\n y: `${Math.random() * 100}%`,\n color: Math.random() > 0.5 ? first : second,\n delay: Math.random() * 2,\n scale: Math.random() + 0.3,\n expiresAt: performance.now() + (Math.random() * 10 + 5) * 1000,\n });\n\n setSparkles(Array.from({ length: sparklesCount }, spawn));\n\n const interval = setInterval(() => {\n setSparkles((current) => {\n const now = performance.now();\n if (!current.some((sparkle) => sparkle.expiresAt <= now)) return current;\n return current.map((sparkle) => (sparkle.expiresAt <= now ? spawn() : sparkle));\n });\n }, 500);\n\n return () => clearInterval(interval);\n }, [first, second, sparklesCount, reducedMotion]);\n\n return (\n <span className={cn('relative inline-block', className)}>\n {sparkles.map((sparkle) => (\n <SparkleStar key={`${sparkle.x}-${sparkle.y}-${sparkle.expiresAt}`} {...sparkle} />\n ))}\n {children}\n </span>\n );\n}\n","'use client';\n\nimport { motion, useReducedMotion, useSpring, useTransform } from 'framer-motion';\nimport { type MouseEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/* ── Tabs ───────────────────────────────────────────────────────────────\n * A segmented control whose active pill slides between tabs and, while an\n * inactive tab is hovered, stretches (\"pulls\") toward the cursor for a\n * magnetic feel. A clipped, inverted duplicate of the labels stays glued to\n * the base labels underneath, so text flips colour exactly as the pill\n * passes over it — including the partial reveal during the pull.\n *\n * Single-select only: it switches one value, so the buttons carry\n * `aria-pressed` rather than the tab/tabpanel roles, which would promise\n * associated panels and arrow-key navigation this control doesn't provide.\n */\n\n/** One segment. `id` is the value handed back to `onChange`. */\nexport type Tab<T extends string = string> = {\n id: T;\n label: string;\n badge?: string;\n};\n\n// How far the pill reaches toward the hovered tab (fraction of the gap).\nconst PULL = 0.035;\n\ntype Rect = { left: number; width: number };\n\n// Target pill rect: the active tab at rest, or stretched toward a hovered\n// neighbour so its leading edge reaches partway across the gap.\nfunction pillTarget(activeIdx: number, hoverIdx: number | null, rects: Rect[], pull: number): Rect {\n const active = rects[activeIdx];\n if (!active) throw new Error(`No rect at index ${activeIdx}`);\n if (hoverIdx === null || hoverIdx === activeIdx) return active;\n\n const hover = rects[hoverIdx];\n if (!hover) return active;\n const activeRight = active.left + active.width;\n const hoverRight = hover.left + hover.width;\n\n const left = Math.min(active.left, active.left + (hover.left - active.left) * pull);\n const right = Math.max(activeRight, activeRight + (hoverRight - activeRight) * pull);\n return { left, width: right - left };\n}\n\n// Shared box so the base labels and the inverted duplicate measure identically.\nconst labelBox = 'flex items-center gap-2.5 px-5 py-1.5 font-semibold text-[13px]';\nconst badgeBox = 'font-bold text-(--color-accent-brand-soft) text-[11px] whitespace-nowrap';\n\nexport type TabsProps<T extends string> = {\n tabs: readonly Tab<T>[];\n value: T;\n onChange: (v: T) => void;\n /** Accessible name for the group, e.g. \"Billing period\". */\n label: string;\n className?: string;\n};\n\nexport function Tabs<T extends string>({ tabs, value, onChange, label, className }: TabsProps<T>) {\n const reduced = useReducedMotion();\n const pull = reduced ? 0 : PULL;\n\n const trackRef = useRef<HTMLDivElement>(null);\n\n const [rects, setRects] = useState<Rect[]>([]);\n const [trackWidth, setTrackWidth] = useState(0);\n const [hovered, setHovered] = useState<number | null>(null);\n const [ready, setReady] = useState(false);\n\n const foundIdx = tabs.findIndex((t) => t.id === value);\n const activeIdx = foundIdx === -1 ? 0 : foundIdx;\n\n const springConfig = reduced ? { stiffness: 700, damping: 60 } : { stiffness: 420, damping: 34, mass: 0.7 };\n const pillLeft = useSpring(0, springConfig);\n const pillWidth = useSpring(0, springConfig);\n const innerX = useTransform(pillLeft, (v) => -v);\n\n const measure = useCallback(() => {\n const track = trackRef.current;\n if (!track) return;\n setTrackWidth(track.offsetWidth);\n const btns = track.querySelectorAll<HTMLButtonElement>('button[data-index]');\n setRects(\n Array.from(btns, (el) => ({\n left: el.offsetLeft,\n width: el.offsetWidth,\n })),\n );\n }, []);\n\n // biome-ignore lint/plugin: measures live DOM layout under a ResizeObserver — post-render measurement, no render-time equivalent.\n useEffect(() => {\n measure();\n const track = trackRef.current;\n if (!track) return;\n const ro = new ResizeObserver(measure);\n ro.observe(track);\n return () => ro.disconnect();\n }, [measure]);\n\n // biome-ignore lint/plugin: imperatively drives the pill's spring motion values toward a layout-derived target.\n useEffect(() => {\n if (rects.length !== tabs.length) return;\n const target = pillTarget(activeIdx, hovered, rects, pull);\n if (ready) {\n pillLeft.set(target.left);\n pillWidth.set(target.width);\n } else {\n pillLeft.jump(target.left);\n pillWidth.jump(target.width);\n setReady(true);\n }\n }, [rects, tabs.length, activeIdx, hovered, pull, ready, pillLeft, pillWidth]);\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLButtonElement>) => onChange(tabs[Number(e.currentTarget.dataset.index)]!.id),\n [onChange, tabs],\n );\n const handleEnter = useCallback((e: MouseEvent<HTMLButtonElement>) => setHovered(Number(e.currentTarget.dataset.index)), []);\n const handleLeave = useCallback(() => setHovered(null), []);\n\n return (\n <fieldset\n aria-label={label}\n className={cn('inline-flex items-center rounded-full border border-(--color-border) bg-(--color-surface) p-1', className)}\n >\n <div ref={trackRef} className=\"relative inline-flex items-center\">\n {/* Base labels — muted at rest; hidden wherever the opaque pill sits over them. */}\n {tabs.map((tab, i) => (\n <button\n key={tab.id}\n type=\"button\"\n data-index={i}\n onClick={handleClick}\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n aria-pressed={value === tab.id}\n className={cn(labelBox, 'text-(--color-muted-foreground) hover:text-(--color-foreground)')}\n >\n {tab.label}\n {tab.badge ? <span className={badgeBox}>{tab.badge}</span> : null}\n </button>\n ))}\n\n {/* Sliding, pulling pill carrying a clipped inverted copy of the labels. */}\n <motion.div\n aria-hidden={true}\n className=\"pointer-events-none absolute inset-y-0 select-none overflow-hidden rounded-full bg-(--color-foreground)\"\n style={{ left: pillLeft, width: pillWidth, opacity: ready ? 1 : 0 }}\n >\n <motion.div className=\"absolute inset-y-0 left-0 flex items-center\" style={{ width: trackWidth, x: innerX }}>\n {tabs.map((tab) => (\n <span key={tab.id} className={cn(labelBox, 'text-(--color-surface)')}>\n {tab.label}\n {tab.badge ? <span className={badgeBox}>{tab.badge}</span> : null}\n </span>\n ))}\n </motion.div>\n </motion.div>\n </div>\n </fieldset>\n );\n}\n","'use client';\n\nimport { ActionSwapRollIcon, ActionSwapRollText } from './action-swap.js';\nimport { Button } from './button.js';\n\n/*\n * Controlled theme toggle: the parent owns the current theme and the flip\n * handler, so there's no next-themes, no hydration detection, and no\n * pre-hydration CSS fallback — the theme is always known and the roll renders\n * directly on first paint.\n */\n\n// Icon-only (navbar / footer) sits on the `sm` height; the labeled row (mobile\n// drawer) on `md`. The `w-8 p-0` / `gap-2 px-3 text-[13px]` overrides turn the\n// shared <Button> sizes into the toggle's square and labeled geometries.\nconst ICON_LAYOUT = 'w-8 p-0';\nconst LABELED_LAYOUT = 'gap-2 px-3 text-[13px]';\n\n/** Sun glyph — the icon shown while dark, i.e. the theme you switch *to*. */\nfunction SunIcon() {\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n >\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"1\" />\n <line x1=\"12\" y1=\"23\" x2=\"12\" y2=\"21\" />\n <line x1=\"3\" y1=\"12\" x2=\"1\" y2=\"12\" />\n <line x1=\"23\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"5\" y1=\"5\" x2=\"3.5\" y2=\"3.5\" />\n <line x1=\"20.5\" y1=\"20.5\" x2=\"19\" y2=\"19\" />\n <line x1=\"19\" y1=\"5\" x2=\"20.5\" y2=\"3.5\" />\n <line x1=\"4.5\" y1=\"20.5\" x2=\"3\" y2=\"19\" />\n </svg>\n );\n}\n\n/** Moon glyph — the icon shown while light, i.e. the theme you switch *to*. */\nfunction MoonIcon() {\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n >\n <path d=\"M21 12.8A9 9 0 1 1 11.2 3 7 7 0 0 0 21 12.8z\" />\n </svg>\n );\n}\n\nexport type ThemeToggleProps = {\n /** Current theme — drives which icon/label the roll shows. */\n theme: 'light' | 'dark';\n /** Flip handler; the parent persists the new theme. */\n onToggle: () => void;\n /** Render the labeled row (mobile drawer) instead of the icon-only square. */\n showLabel?: boolean;\n};\n\nexport function ThemeToggle({ theme, onToggle, showLabel = false }: ThemeToggleProps) {\n const size = showLabel ? 'md' : 'sm';\n const layoutClassName = showLabel ? LABELED_LAYOUT : ICON_LAYOUT;\n\n // The icon shows the theme you are switching *to*, matching the label.\n const isDark = theme === 'dark';\n const label = isDark ? 'Switch to light mode' : 'Switch to dark mode';\n\n return (\n <Button\n variant=\"filled\"\n size={size}\n actionOrLink={onToggle}\n className={layoutClassName}\n // The visible label rolls, so mid-swap both strings are briefly in the\n // tree. Naming the button explicitly keeps it unambiguous either way.\n aria-label={label}\n >\n <ActionSwapRollIcon value={theme} className=\"h-4 w-4\">\n {isDark ? <SunIcon /> : <MoonIcon />}\n </ActionSwapRollIcon>\n {showLabel ? <ActionSwapRollText value={theme}>{label}</ActionSwapRollText> : null}\n </Button>\n );\n}\n","import { useCallback, useSyncExternalStore } from 'react';\n\n/** Site breakpoints — `md` is 50rem here, not Tailwind's default 48rem. */\nexport const BREAKPOINTS = [\n ['xs', 30],\n ['sm', 40],\n ['md', 50],\n ['lg', 64],\n ['xl', 80],\n ['2xl', 96],\n] as const;\n\n/** `'base'` is the implicit below-`xs` band — the widths no `min-width` query claims. */\nexport type Breakpoint = 'base' | (typeof BREAKPOINTS)[number][0];\n\n/**\n * The current breakpoint, read straight from `matchMedia`. Use this over\n * `useBreakpoint` inside effects that need the *live* band: through the\n * hydration pass the rendered value is still the server's `'base'`, which is a\n * change away from the truth and will read as one.\n */\nexport function getBreakpoint(): Breakpoint {\n let current: Breakpoint = 'base';\n for (const [name, rem] of BREAKPOINTS) {\n if (globalThis.matchMedia(`(min-width: ${rem}rem)`).matches) current = name;\n }\n return current;\n}\n\n/**\n * Call `listener` whenever the viewport crosses a breakpoint. Returns the\n * unsubscribe.\n *\n * The imperative counterpart to `useBreakpoint`, for work that has to land in\n * the *same frame* as the layout change. Media-query change events fire during\n * the rendering steps, before `requestAnimationFrame` and before paint, so a\n * listener that writes to the DOM here is painted with the new layout rather\n * than one frame behind it. Going through React state instead costs a render\n * round-trip — the scheduler runs the update in a later task, and the layout\n * effect lands after the browser has already painted.\n */\nexport function onBreakpointChange(listener: () => void): () => void {\n const queries = BREAKPOINTS.map(([, rem]) => globalThis.matchMedia(`(min-width: ${rem}rem)`));\n for (const query of queries) query.addEventListener('change', listener);\n return () => {\n for (const query of queries) query.removeEventListener('change', listener);\n };\n}\n\nfunction getBreakpointServer(): Breakpoint {\n return 'base';\n}\n\n/**\n * The widest breakpoint the viewport currently satisfies, re-rendering only when\n * it crosses from one band into another — not on every pixel of a resize.\n *\n * This is for work that has to be *redone* when the layout changes shape, like\n * re-measuring something positioned against text that the gutters just moved. It\n * is not for choosing what to render: the exported HTML has to be correct at\n * every width before JS runs, so layout belongs in CSS breakpoints, and this\n * returns `'base'` during SSR and the first client paint regardless of viewport.\n */\nexport function useBreakpoint(): Breakpoint {\n const subscribe = useCallback(onBreakpointChange, []);\n return useSyncExternalStore(subscribe, getBreakpoint, getBreakpointServer);\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/components/accordion.tsx","../src/lib/ease.ts","../src/components/action-swap.tsx","../src/components/animated-beam.tsx","../src/components/button.tsx","../src/lib/surface.ts","../src/components/card.tsx","../src/components/dia-text-reveal.lines.tsx","../src/components/dia-text-reveal.sweep.ts","../src/components/dia-text-reveal.utils.ts","../src/components/dia-text-reveal.tsx","../src/components/elevated-input.tsx","../src/components/fade-in.tsx","../src/components/feature-card.tsx","../src/components/flowchart-parts.tsx","../src/components/glossy-button.tsx","../src/components/grainient.shader.ts","../src/components/grainient.tsx","../src/lib/use-media-query.ts","../src/components/highlighter.tsx","../src/components/input.tsx","../src/components/liquid-metal.tsx","../src/components/navigation-menu-icons.tsx","../src/components/navigation-menu-styles.ts","../src/components/navigation-menu.tsx","../src/components/password-input.tsx","../src/components/rainbow-button.tsx","../src/components/range-slider.tsx","../src/components/rolling-badge.tsx","../src/components/savings-badge.tsx","../src/components/shine-border.tsx","../src/components/sparkles-text.tsx","../src/components/tabs.tsx","../src/components/theme-toggle.tsx","../src/lib/breakpoints.ts"],"names":["twMerge","clsx","jsx","BaseAccordion","jsxs","useReducedMotion","useRef","useState","useLayoutEffect","AnimatePresence","motion","useId","useEffect","cva","prefersReducedMotion","useMemo","useCallback","useInView","createContext","useContext","Fragment","Program","Renderer","Triangle","Mesh","annotate","timer","LiquidMetalShader","ChevronDownIcon","NavigationMenuPrimitive","Slot","tick","useSyncExternalStore","DEFAULT_COLORS","useSpring","useTransform","BREAKPOINTS","getBreakpoint","onBreakpointChange","subscribe"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport type { CSSProperties } from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * A style object that may carry CSS custom properties (CSS variables)\n * such as `--duration`. React's `CSSProperties` intentionally drops\n * its index signature, so custom properties are not accepted without help.\n */\nexport type CSSPropertiesWithVars = CSSProperties & Record<`--${string}`, string | number>;\n\n/**\n * Builds a {@link CSSProperties} value that also allows CSS custom properties,\n * so `style` props can be written without an `as React.CSSProperties` cast while\n * still type-checking both the known style keys and the custom-property values.\n *\n * @example\n * <div style={validCssVars({ '--duration': '0.35s', color: 'red' })} />\n */\nexport function validCssVars(style: CSSPropertiesWithVars): CSSProperties {\n return style;\n}\n\n/**\n * Narrows a union to the member(s) that declare `key` — a type-guard\n * replacement for the `in` operator's discriminated-union narrowing.\n */\nexport function hasKey<K extends PropertyKey>(key: K, obj: unknown): obj is Record<K, unknown> {\n return obj !== null && typeof obj === 'object' && Object.hasOwn(obj, key);\n}\n\nexport function noop(): void {\n // intentional no-op\n}\n","import { Accordion as BaseAccordion } from '@base-ui/react/accordion';\nimport type * as React from 'react';\nimport { cn } from '../lib/utils.js';\n\ntype AccordionVariant =\n | 'default'\n | 'split'\n | 'outline'\n | 'nested'\n | 'isolated-bordered'\n | 'isolated-filled'\n | 'isolated-filled-bordered';\n\nfunction Accordion({\n className,\n multiple = false,\n variant = 'default',\n ...props\n}: BaseAccordion.Root.Props & { variant?: AccordionVariant }) {\n return (\n <BaseAccordion.Root\n data-slot=\"accordion\"\n data-variant={variant}\n multiple={multiple}\n className={cn(\n 'group flex w-full flex-col',\n variant === 'split' && 'space-y-2',\n variant === 'outline' && 'overflow-hidden rounded-lg border bg-(--surface)',\n variant === 'nested' && 'rounded-lg border bg-muted p-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AccordionItem({ className, ...props }: BaseAccordion.Item.Props) {\n return (\n <BaseAccordion.Item\n data-slot=\"accordion-item\"\n className={cn(\n 'transition-[margin,border-radius,border] duration-250 ease-out-expo',\n // Default variant styles\n 'group-data-[variant=default]:border-(--border) group-data-[variant=default]:border-b group-data-[variant=default]:last:border-b-0',\n // Split variant styles (individual cards)\n 'group-data-[variant=split]:overflow-hidden group-data-[variant=split]:rounded-lg group-data-[variant=split]:border group-data-[variant=split]:border-(--border) group-data-[variant=split]:bg-(--surface)',\n // Outline variant styles (items within single card)\n 'group-data-[variant=outline]:border-(--border) group-data-[variant=outline]:border-b group-data-[variant=outline]:last:border-b-0',\n // Nested variant styles - items within the single outer card\n 'group-data-[variant=nested]:mt-0.5 group-data-[variant=nested]:first:mt-0',\n // Isolated bordered variant styles - dynamically separates open items from closed ones\n // Base styles: all items have borders and background to look like cards\n 'group-data-[variant=isolated-bordered]:overflow-hidden group-data-[variant=isolated-bordered]:border group-data-[variant=isolated-bordered]:border-(--border) group-data-[variant=isolated-bordered]:bg-(--surface)',\n // Closed items: group together by overlapping borders with negative margin\n // Only apply to closed items that follow another closed item (not open items, first item, or items after open items)\n 'group-data-[variant=isolated-bordered]:relative group-data-[variant=isolated-bordered]:not-first:not-data-open:not-[[data-open]+&]:-mt-px',\n // Opened item - separated with margins\n 'group-data-[variant=isolated-bordered]:data-open:mt-2 group-data-[variant=isolated-bordered]:data-open:mb-2 group-data-[variant=isolated-bordered]:data-open:rounded-lg',\n // First item\n 'group-data-[variant=isolated-bordered]:first:rounded-t-lg group-data-[variant=isolated-bordered]:data-open:first:mt-0',\n // Last item\n 'group-data-[variant=isolated-bordered]:last:rounded-b-lg group-data-[variant=isolated-bordered]:data-open:last:mb-0',\n // Item after open item: round top corners (start of new group)\n 'group-data-[variant=isolated-bordered]:[[data-open]+&]:rounded-t-lg',\n // Item before open item: round bottom corners (end of group)\n 'group-data-[variant=isolated-bordered]:[&:has(+_[data-open])]:rounded-b-lg',\n // Isolated filled variant\n 'group-data-[variant=isolated-filled]:overflow-hidden group-data-[variant=isolated-filled]:bg-muted',\n // Opened item - separated with margins and rounded\n 'group-data-[variant=isolated-filled]:data-open:my-2 group-data-[variant=isolated-filled]:data-open:rounded-lg',\n // First item\n 'group-data-[variant=isolated-filled]:first:rounded-t-lg group-data-[variant=isolated-filled]:data-open:first:mt-0',\n // Last item\n 'group-data-[variant=isolated-filled]:last:rounded-b-lg group-data-[variant=isolated-filled]:data-open:last:mb-0',\n // Item after open item: round top corners (start of new group)\n 'group-data-[variant=isolated-filled]:[[data-open]+&]:rounded-t-lg',\n // Item before open item: round bottom corners (end of group)\n 'group-data-[variant=isolated-filled]:[&:has(+_[data-open])]:rounded-b-lg',\n // Isolated filled bordered variant - filled background with borders between closed items\n 'group-data-[variant=isolated-filled-bordered]:overflow-hidden group-data-[variant=isolated-filled-bordered]:bg-muted',\n // All items except last have border-bottom to prevent layout shift, default to visible border\n 'group-data-[variant=isolated-filled-bordered]:not-last:border-(--border) group-data-[variant=isolated-filled-bordered]:not-last:border-b',\n // Make border transparent (invisible) for: items before open items, and open items themselves\n 'group-data-[variant=isolated-filled-bordered]:[&:has(+_[data-open])]:border-transparent',\n 'group-data-[variant=isolated-filled-bordered]:data-open:border-transparent',\n // Opened item - separated with margins and rounded\n 'group-data-[variant=isolated-filled-bordered]:data-open:my-2 group-data-[variant=isolated-filled-bordered]:data-open:rounded-lg',\n // First item\n 'group-data-[variant=isolated-filled-bordered]:first:rounded-t-lg group-data-[variant=isolated-filled-bordered]:data-open:first:mt-0',\n // Last item\n 'group-data-[variant=isolated-filled-bordered]:last:rounded-b-lg group-data-[variant=isolated-filled-bordered]:data-open:last:mb-0',\n // Item after open item: round top corners (start of new group)\n 'group-data-[variant=isolated-filled-bordered]:[[data-open]+&]:rounded-t-lg',\n // Item before open item: round bottom corners (end of group)\n 'group-data-[variant=isolated-filled-bordered]:[&:has(+_[data-open])]:rounded-b-lg',\n\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AccordionHeader({ className, ...props }: BaseAccordion.Header.Props) {\n return (\n <BaseAccordion.Header\n data-slot=\"accordion-header\"\n // `not-prose` guards the trigger from document typography when the\n // accordion is rendered inside a prose/markdown container (e.g. MDX docs),\n // which would otherwise style this heading with large margins and an\n // inflated line-height. Inert outside a prose context.\n className={cn('not-prose', className)}\n {...props}\n />\n );\n}\n\ninterface AccordionTriggerProps extends BaseAccordion.Trigger.Props {\n showIndicator?: boolean;\n indicatorType?: 'chevron' | 'plus';\n indicatorPosition?: 'start' | 'end';\n /** Colour class applied to the indicator glyph, e.g. `text-(--accent-brand)`. Defaults to muted-foreground. */\n indicatorColor?: string;\n icon?: React.ReactNode;\n subtitle?: React.ReactNode;\n}\n\nfunction AccordionTrigger({\n children,\n className,\n showIndicator = true,\n indicatorType = 'plus',\n indicatorPosition = 'end',\n indicatorColor,\n icon,\n subtitle,\n ...props\n}: AccordionTriggerProps) {\n const hasStartIndicator = showIndicator && indicatorPosition === 'start';\n const hasEndIndicator = showIndicator && indicatorPosition === 'end';\n\n const renderIndicator = () => {\n if (!showIndicator) return null;\n\n const indicatorClassName = cn('size-4 shrink-0 transition-transform duration-200 ease-out-expo', indicatorColor);\n\n const indicatorIcon =\n indicatorType === 'chevron' ? (\n <ChevronDownIcon data-slot=\"accordion-indicator\" className={indicatorClassName} />\n ) : (\n <PlusIcon data-slot=\"accordion-indicator\" className={indicatorClassName} />\n );\n\n return (\n <span className=\"shrink-0 text-muted-foreground\" aria-hidden=\"true\">\n {indicatorIcon}\n </span>\n );\n };\n\n return (\n <AccordionHeader>\n <BaseAccordion.Trigger\n data-slot=\"accordion-trigger\"\n data-has-icon={hasStartIndicator ? 'true' : undefined}\n className={cn(\n 'group/trigger flex w-full cursor-pointer items-center justify-between gap-3 py-5 px-3.5 text-left font-medium text-sm outline-none disabled:pointer-events-none disabled:opacity-60',\n // Default variant styles\n 'group-data-[variant=default]:px-0',\n // Split variant styles\n 'group-data-[variant=split]:rounded-t-lg',\n // Nested variant styles - trigger with subtle interaction\n 'group-data-[variant=nested]:rounded-sm group-data-[variant=nested]:px-3 group-data-[variant=nested]:py-2.5 group-data-[variant=nested]:hover:bg-background group-data-[variant=nested]:dark:hover:bg-background/50',\n // Indicator rotation animations\n indicatorType === 'chevron' && '[&[data-panel-open]_[data-slot=accordion-indicator]]:rotate-180',\n indicatorType === 'plus' && '[&[data-panel-open]_[data-slot=accordion-indicator]]:rotate-90',\n className,\n )}\n {...props}\n >\n {hasStartIndicator ? renderIndicator() : null}\n\n {/* icon prop — only rendered when indicator is at end position */}\n {icon && !hasStartIndicator && (\n <span className=\"shrink-0 text-muted-foreground\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span className=\"underline-offset-2 group-hover/trigger:underline\">{children}</span>\n {subtitle ? <span className=\"text-muted-foreground text-sm no-underline\">{subtitle}</span> : null}\n </div>\n\n {hasEndIndicator ? renderIndicator() : null}\n </BaseAccordion.Trigger>\n </AccordionHeader>\n );\n}\n\nfunction AccordionContent({ children, className, ...props }: BaseAccordion.Panel.Props) {\n return (\n <BaseAccordion.Panel\n data-slot=\"accordion-content\"\n className={cn(\n 'h-(--accordion-panel-height) overflow-hidden text-sm transition-[height,opacity] duration-250 ease-out-expo data-ending-style:h-0 data-starting-style:h-0 data-ending-style:opacity-0 data-starting-style:opacity-0',\n )}\n {...props}\n >\n <div\n className={cn(\n 'p-3.5 text-muted-foreground',\n 'group-data-[variant=default]:px-0 group-data-[variant=default]:pt-0',\n 'group-data-[variant=split]:pt-0',\n 'group-data-[variant=outline]:pt-0',\n // Nested variant\n 'group-data-[variant=nested]:mt-1 group-data-[variant=nested]:mb-0.5 group-data-[variant=nested]:rounded-sm group-data-[variant=nested]:border group-data-[variant=nested]:bg-background group-data-[variant=nested]:p-3 group-data-[variant=nested]:[[data-slot=accordion-item]:last-child_&]:mb-0',\n // Isolated bordered variant\n 'group-data-[variant=isolated-bordered]:pt-0',\n // Isolated filled variant\n 'group-data-[variant=isolated-filled]:pt-0',\n // Isolated filled bordered variant\n 'group-data-[variant=isolated-filled-bordered]:pt-0',\n // Icon alignment - add left padding when parent item contains a trigger with icon\n '[[data-slot=accordion-item]:has([data-has-icon])_&]:pl-[calc(1rem+0.75rem)]',\n '[[data-slot=accordion-item]:has([data-has-icon])_&]:group-data-[variant=default]:pl-[calc(1rem+0.75rem)]',\n className,\n )}\n >\n {children}\n </div>\n </BaseAccordion.Panel>\n );\n}\n\nfunction PlusIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" {...props}>\n {/* Horizontal bar - fades out when accordion opens */}\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.75 12C2.75 11.3096 3.30964 10.75 4 10.75H20C20.6904 10.75 21.25 11.3096 21.25 12C21.25 12.6904 20.6904 13.25 20 13.25H4C3.30964 13.25 2.75 12.6904 2.75 12Z\"\n fill=\"currentColor\"\n className=\"in-data-panel-open:opacity-0 transition-opacity duration-200 ease-out-expo\"\n />\n {/* Vertical bar - remains visible (becomes horizontal after 90° rotation) */}\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12 2.75C12.6904 2.75 13.25 3.30964 13.25 4V20C13.25 20.6904 12.6904 21.25 12 21.25C11.3096 21.25 10.75 20.6904 10.75 20V4C10.75 3.30964 11.3096 2.75 12 2.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n\n/** Inline replacement for the site's `@iconify-icons/mingcute/down-line` glyph. */\nfunction ChevronDownIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" {...props}>\n <path d=\"M1 3.5L5 7.5L9 3.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n );\n}\n\nexport { Accordion, AccordionContent, AccordionHeader, AccordionItem, AccordionTrigger };\n","/**\n * Easing curves shared across landing-ui components.\n */\n\n/** Smooth deceleration — matches the former CSS `ease-out-expo`. */\nexport const easeOut = [0.22, 1, 0.36, 1] as const;\n\n/** Gentle overshoot — bounce-like settle for spring alternatives. */\nexport const easeOutBack = [0.34, 1.56, 0.64, 1] as const;\n\n// ── Content-swap tokens (action-swap) ─────────────────────────────────────\n// Values mirror beui.dev's `lib/ease.ts` so vendored action-swap primitives\n// keep their upstream timing.\n\n/** Strong ease-out — the default `ease-out` reads weak at these durations. */\nexport const EASE_OUT = [0.16, 1, 0.3, 1] as const;\n\n/** CSS string form of {@link EASE_OUT} for inline style transitions. */\nexport const EASE_OUT_CSS = 'cubic-bezier(0.16, 1, 0.3, 1)';\n\n/** Content swaps — label/icon slots trading places inside a control. */\nexport const SPRING_SWAP = { type: 'spring', stiffness: 460, damping: 30, mass: 0.55 } as const;\n","'use client';\n// Adapted from beui.dev/components/motion/action-swap (roll variant only).\n// Upstream imports `motion/react`; this project is on framer-motion, and its\n// blur/cascade animations and pre-styled <ActionSwapButton> are omitted — the\n// button's variant classes reference `bg-card`/`bg-primary`, which this site\n// doesn't define as --color-* tokens, so Tailwind would drop them silently.\n\nimport { AnimatePresence, motion, useReducedMotion, type Variants } from 'framer-motion';\nimport { type ReactNode, useLayoutEffect, useRef, useState } from 'react';\nimport { EASE_OUT, EASE_OUT_CSS, SPRING_SWAP } from '../lib/ease.js';\nimport { cn } from '../lib/utils.js';\n\n/** The outgoing half rolls out faster than the incoming half settles. */\nconst ROLL_EXIT_TRANSITION = { duration: 0.14, ease: EASE_OUT } as const;\nconst ROLL_BLUR = 'blur(3px)';\n\n/** Rest state used under reduced motion — no travel, no blur. */\nconst AT_REST = { opacity: 1, y: 0, filter: 'blur(0px)' } as const;\n\n/** Text travels in percentages so the roll scales with the line height. */\nconst TEXT_VARIANTS: Variants = {\n initial: { opacity: 0, y: '90%', filter: ROLL_BLUR },\n animate: { opacity: 1, y: '0%', filter: 'blur(0px)', transition: SPRING_SWAP },\n exit: { opacity: 0, y: '-90%', filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION },\n};\n\n/** Icons travel in pixels — a glyph box has no line height to scale against. */\nconst ICON_VARIANTS: Variants = {\n initial: { opacity: 0, y: 12, filter: ROLL_BLUR },\n animate: { opacity: 1, y: 0, filter: 'blur(0px)', transition: SPRING_SWAP },\n exit: { opacity: 0, y: -12, filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION },\n};\n\nexport type ActionSwapRollProps = {\n /** Identity of the current content — changing it triggers the roll. */\n value: string;\n children: ReactNode;\n className?: string;\n};\n\n/**\n * Rolls `children` up out of the box while the new content rolls in from below,\n * animating the box's width so labels of different lengths don't snap.\n *\n * The visible label is the accessible name, so for the duration of a swap both\n * the outgoing and incoming text are in the accessibility tree. Give the host\n * control an explicit `aria-label` when that ambiguity matters.\n */\nexport function ActionSwapRollText({ value, children, className }: ActionSwapRollProps) {\n const reduce = useReducedMotion() ?? false;\n const measureRef = useRef<HTMLSpanElement>(null);\n const [width, setWidth] = useState<number>();\n\n // Deliberately un-keyed: the invisible copy is re-measured after every render\n // so the box tracks content it can't diff (fonts finishing, text changing).\n useLayoutEffect(() => {\n const nextWidth = measureRef.current?.offsetWidth;\n if (!nextWidth) return;\n setWidth((current) => (current === nextWidth ? current : nextWidth));\n });\n\n return (\n <span\n className={cn('relative inline-block overflow-hidden whitespace-nowrap align-bottom', className)}\n style={{ width, transition: reduce ? undefined : `width 220ms ${EASE_OUT_CSS}` }}\n >\n {/* Width source: laid out in flow but never painted, so the absolutely\n positioned live copies below have something to size the box. */}\n <span ref={measureRef} aria-hidden={true} className=\"invisible inline-block whitespace-nowrap\">\n {children}\n </span>\n <AnimatePresence initial={false}>\n <motion.span\n key={value}\n variants={TEXT_VARIANTS}\n initial={reduce ? false : 'initial'}\n animate={reduce ? AT_REST : 'animate'}\n exit={reduce ? undefined : 'exit'}\n className=\"absolute top-0 left-0 inline-block will-change-[opacity,filter,transform]\"\n >\n {children}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n\n/**\n * Icon counterpart to {@link ActionSwapRollText}. `popLayout` pulls the outgoing\n * icon out of flow so the pair overlaps in one cell instead of sitting side by\n * side mid-swap. Always `aria-hidden` — icons here restate a visible label.\n */\nexport function ActionSwapRollIcon({ value, children, className }: ActionSwapRollProps) {\n const reduce = useReducedMotion() ?? false;\n\n return (\n <span className={cn('relative inline-grid shrink-0 place-items-center overflow-hidden', className)}>\n <AnimatePresence mode=\"popLayout\" initial={false}>\n <motion.span\n key={value}\n aria-hidden={true}\n variants={ICON_VARIANTS}\n initial={reduce ? false : 'initial'}\n animate={reduce ? AT_REST : 'animate'}\n exit={reduce ? undefined : 'exit'}\n className=\"col-start-1 row-start-1 inline-flex items-center justify-center will-change-[opacity,filter,transform]\"\n >\n {children}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { type RefObject, useEffect, useId, useState } from 'react';\nimport { cn } from '../lib/utils.js';\n\nexport type AnimatedBeamProps = {\n className?: string;\n containerRef: RefObject<HTMLElement | null>;\n fromRef: RefObject<HTMLElement | null>;\n toRef: RefObject<HTMLElement | null>;\n curvature?: number;\n reverse?: boolean;\n pathColor?: string;\n pathWidth?: number;\n pathOpacity?: number;\n gradientStartColor?: string;\n gradientStopColor?: string;\n delay?: number;\n duration?: number;\n repeat?: number;\n repeatDelay?: number;\n startXOffset?: number;\n startYOffset?: number;\n endXOffset?: number;\n endYOffset?: number;\n};\n\nexport function AnimatedBeam({\n className,\n containerRef,\n fromRef,\n toRef,\n curvature = 0,\n reverse = false,\n duration = 5,\n delay = 0,\n pathColor = 'gray',\n pathWidth = 2,\n pathOpacity = 0.2,\n gradientStartColor = '#ffaa40',\n gradientStopColor = '#9c40ff',\n repeat = Number.POSITIVE_INFINITY,\n repeatDelay = 0,\n startXOffset = 0,\n startYOffset = 0,\n endXOffset = 0,\n endYOffset = 0,\n}: AnimatedBeamProps) {\n const id = useId();\n const [pathD, setPathD] = useState('');\n const [svgDimensions, setSvgDimensions] = useState({\n width: 0,\n height: 0,\n });\n\n const gradientCoordinates = reverse\n ? {\n x1: ['90%', '-10%'],\n x2: ['100%', '0%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n : {\n x1: ['10%', '110%'],\n x2: ['0%', '100%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n };\n\n // biome-ignore lint/plugin: measures live DOM layout to compute beam path — post-render measurement.\n useEffect(() => {\n const updatePath = () => {\n if (containerRef.current && fromRef.current && toRef.current) {\n const containerRect = containerRef.current.getBoundingClientRect();\n const rectA = fromRef.current.getBoundingClientRect();\n const rectB = toRef.current.getBoundingClientRect();\n\n const svgWidth = containerRect.width;\n const svgHeight = containerRect.height;\n setSvgDimensions({ width: svgWidth, height: svgHeight });\n\n const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset;\n const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset;\n const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset;\n const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset;\n\n const controlY = startY - curvature;\n const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`;\n setPathD(d);\n }\n };\n\n const resizeObserver = new ResizeObserver(() => {\n updatePath();\n });\n\n if (containerRef.current) resizeObserver.observe(containerRef.current);\n\n updatePath();\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset]);\n\n return (\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n width={svgDimensions.width}\n height={svgDimensions.height}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('pointer-events-none absolute top-0 left-0 transform-gpu stroke-2', className)}\n viewBox={`0 0 ${svgDimensions.width} ${svgDimensions.height}`}\n >\n <path d={pathD} stroke={pathColor} strokeWidth={pathWidth} strokeOpacity={pathOpacity} strokeLinecap=\"round\" />\n <path d={pathD} strokeWidth={pathWidth} stroke={`url(#${id})`} strokeOpacity=\"1\" strokeLinecap=\"round\" />\n <defs>\n <motion.linearGradient\n className=\"transform-gpu\"\n id={id}\n gradientUnits=\"userSpaceOnUse\"\n initial={{\n x1: '0%',\n x2: '0%',\n y1: '0%',\n y2: '0%',\n }}\n animate={{\n x1: gradientCoordinates.x1,\n x2: gradientCoordinates.x2,\n y1: gradientCoordinates.y1,\n y2: gradientCoordinates.y2,\n }}\n transition={{\n delay,\n duration,\n ease: [0.16, 1, 0.3, 1],\n repeat,\n repeatDelay,\n }}\n >\n <stop stopColor={gradientStartColor} stopOpacity=\"0\" />\n <stop stopColor={gradientStartColor} />\n <stop offset=\"32.5%\" stopColor={gradientStopColor} />\n <stop offset=\"100%\" stopColor={gradientStopColor} stopOpacity=\"0\" />\n </motion.linearGradient>\n </defs>\n </svg>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Shared marketing-site button styles.\n *\n * The `transition` in the base string matches the former `.button-transition`\n * utility — a pure-CSS morph so the component stays server-renderable.\n */\nconst buttonVariants = cva(\n 'group inline-flex items-center justify-center gap-1.5 font-medium [transition:opacity_.24s_80ms,transform_.15s_cubic-bezier(.4,0,.2,1),box-shadow_.15s_cubic-bezier(.4,0,.2,1),filter_.15s_cubic-bezier(.4,0,.2,1)] disabled:[transition:opacity_.1s]',\n {\n variants: {\n variant: {\n filled: 'bg-(--foreground) text-(--primary-foreground) shadow-elevated-3 hover:opacity-90',\n bordered: 'border border-(--border-hi) bg-surface-3 text-foreground shadow-elevated-3 hover:bg-(--muted)',\n ghost: 'text-(--foreground-secondary) hover:bg-(--surface-hover) hover:text-(--foreground)',\n },\n size: {\n sm: 'h-8 px-3.5 text-[15px]',\n md: 'h-9 px-5 text-[17px]',\n lg: 'h-11 px-6 text-[17px]',\n icon: 'size-11',\n },\n shape: {\n rounded: 'rounded-interactive',\n pill: 'rounded-full',\n },\n },\n // Pill is the house standard — every CTA is fully rounded.\n defaultVariants: { variant: 'filled', size: 'md', shape: 'pill' },\n },\n);\n\nexport type ButtonProps = VariantProps<typeof buttonVariants> & {\n showArrow?: boolean;\n /**\n * Set when `actionOrLink` is an off-site URL — renders the anchor with\n * `target=\"_blank\"` and `rel=\"noopener noreferrer\"`.\n */\n external?: boolean;\n /** Hover tooltip on the rendered anchor/button. */\n title?: string;\n /**\n * String → renders as a plain anchor <a href={...}>.\n * Function → renders as a <button type=\"button\" onClick={...}>.\n */\n actionOrLink: string | (() => void);\n children: ReactNode;\n className?: string;\n 'aria-label'?: string;\n 'aria-expanded'?: boolean;\n};\n\n/**\n * Shared marketing-site button.\n *\n * variant=\"filled\" → primary CTA (inverse theming: bg-(--foreground) + text-(--primary-foreground)\n * + shadow-elevated-3 — flips with the theme so it pops against any surface)\n * variant=\"bordered\" → elevated surface + border (bg-surface-3 + shadow-elevated-3 + border)\n * variant=\"ghost\" → transparent, muted text that gains a surface on hover\n * size=\"sm\" → h-8, px-3.5, text-[15px] (navbar / compact)\n * size=\"md\" → h-9, px-5, text-[17px] (default)\n * size=\"lg\" → h-11, px-6, text-[17px] (hero CTAs)\n * size=\"icon\" → size-11 square (icon-only buttons)\n * shape=\"pill\" → fully rounded (rounded-full); pill is the default\n * showArrow → chevron right at rest, morphs to arrow-right on hover\n *\n * Server-renderable: the arrow morph is pure CSS (group-hover), so no client\n * state or animation library is needed. When `actionOrLink` is a function the\n * component renders a <button>; passing a function requires a client-component\n * parent (functions can't cross the server→client boundary), which is inherent\n * to any onClick prop and unchanged by this component being server-capable.\n */\nexport function Button({\n variant,\n size,\n shape,\n showArrow = false,\n external = false,\n title,\n actionOrLink,\n children,\n className,\n 'aria-label': ariaLabel,\n 'aria-expanded': ariaExpanded,\n}: ButtonProps) {\n const buttonClassName = cn(buttonVariants({ variant, size, shape }), className);\n\n /*\n * Single SVG that morphs from › to → on hover — pure CSS, no JS.\n * The shaft draws in from the left (stroke-dashoffset 9 → 0) and the arrowhead\n * nudges right. Draw-in is slower (.22s) than the reverse (.08s), matching the\n * asymmetric timing of the former framer-motion version. ease = cubic-bezier(.22,1,.36,1).\n */\n const arrowSlot = showArrow && (\n <svg\n viewBox=\"0 0 14 14\"\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n className=\"shrink-0\"\n >\n {/* Shaft — draws in from the left */}\n <line\n x1=\"0\"\n y1=\"7\"\n x2=\"9\"\n y2=\"7\"\n strokeDasharray=\"9\"\n className=\"[stroke-dashoffset:9] [transition:stroke-dashoffset_.08s_cubic-bezier(.22,1,.36,1)] group-hover:[stroke-dashoffset:0] group-hover:[transition-duration:.22s]\"\n />\n {/* Arrowhead — nudges right so the shaft \"connects\" underneath */}\n <path\n d=\"M5 3l4 4-4 4\"\n className=\"[transform:translateX(0)] [transition:transform_.22s_cubic-bezier(.22,1,.36,1)] group-hover:[transform:translateX(2px)]\"\n />\n </svg>\n );\n\n if (typeof actionOrLink === 'string')\n return (\n <a\n href={actionOrLink}\n className={cn(buttonClassName, 'no-underline')}\n aria-label={ariaLabel}\n title={title}\n {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {children}\n {arrowSlot}\n </a>\n );\n\n return (\n <button\n type=\"button\"\n className={buttonClassName}\n onClick={actionOrLink}\n aria-label={ariaLabel}\n aria-expanded={ariaExpanded}\n title={title}\n >\n {children}\n {arrowSlot}\n </button>\n );\n}\n","export type SurfaceLevel = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n\nconst SURFACE_BG: Record<SurfaceLevel, string> = {\n 1: 'bg-surface-1',\n 2: 'bg-surface-2',\n 3: 'bg-surface-3',\n 4: 'bg-surface-4',\n 5: 'bg-surface-5',\n 6: 'bg-surface-6',\n 7: 'bg-surface-7',\n 8: 'bg-surface-8',\n};\n\nconst SURFACE_VAR: Record<SurfaceLevel, string> = {\n 1: '[--popup-surface:var(--surface-1)]',\n 2: '[--popup-surface:var(--surface-2)]',\n 3: '[--popup-surface:var(--surface-3)]',\n 4: '[--popup-surface:var(--surface-4)]',\n 5: '[--popup-surface:var(--surface-5)]',\n 6: '[--popup-surface:var(--surface-6)]',\n 7: '[--popup-surface:var(--surface-7)]',\n 8: '[--popup-surface:var(--surface-8)]',\n};\n\n/**\n * Drops + rim insets in a single `box-shadow` (no `::after`). Used by `solidSurface()`.\n * Literal Tailwind classes so the scanner picks them up.\n */\nconst SURFACE_SHADOW_COMBINED: Record<SurfaceLevel, string> = {\n 1: 'shadow-elevated-1',\n 2: 'shadow-elevated-2',\n 3: 'shadow-elevated-3',\n 4: 'shadow-elevated-4',\n 5: 'shadow-elevated-5',\n 6: 'shadow-elevated-6',\n 7: 'shadow-elevated-7',\n 8: 'shadow-elevated-8',\n};\n\n/**\n * Elevation for a free-floating surface: background, elevation variable, and the drop shadow with\n * its rim inset painted in the same `box-shadow` — which leaves `::after` free for other purposes.\n *\n * Suits containers with no opaque children near their edges. A child painted over the rim (a sticky\n * label, a pinned input, a dialog header) covers it, since nothing re-paints the rim above the\n * children.\n *\n * When `level !== shadowLevel` the rim color tracks `shadowLevel` — the two cannot be controlled\n * independently.\n */\nexport function solidSurface(level: SurfaceLevel, shadowLevel: SurfaceLevel = level): string {\n return `${SURFACE_BG[level]} ${SURFACE_SHADOW_COMBINED[shadowLevel]} ${SURFACE_VAR[level]}`;\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type * as React from 'react';\nimport { type SurfaceLevel, solidSurface } from '../lib/surface.js';\nimport { cn } from '../lib/utils.js';\n\nconst cardVariants = cva('text-foreground flex flex-col', {\n variants: {\n variant: {\n default: 'gap-6 rounded-2xl py-6',\n inset: 'rounded-2xl p-1',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {\n level?: SurfaceLevel;\n shadowLevel?: SurfaceLevel;\n}\n\nfunction Card({ className, variant = 'default', level = 3, shadowLevel = 1, ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n data-variant={variant}\n data-level={level}\n className={cn(\n cardVariants({ variant }),\n solidSurface(level, shadowLevel),\n // bg-muted overrides solidSurface's bg, making the outer a gray frame\n // while keeping its shadow, rim, and --popup-surface.\n variant === 'inset' && 'bg-muted',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n '@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start has-[[data-slot=card-action]]:grid-cols-[1fr_auto] [.border-b]:pb-6',\n '[[data-variant=default]>_&]:gap-1.5 [[data-variant=default]>_&]:px-6',\n '[[data-variant=inset]>_&]:px-3 [[data-variant=inset]>_&]:py-2 [[data-variant=inset]>_&]:pt-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"card-title\" className={cn('font-semibold [[data-variant=default]_&]:leading-none', className)} {...props} />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"card-description\" className={cn('text-muted-foreground text-sm', className)} {...props} />;\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\n '[[data-variant=default]>_&]:px-6',\n '[[data-variant=inset]>_&]:flex [[data-variant=inset]>_&]:flex-1 [[data-variant=inset]>_&]:flex-col [[data-variant=inset]>_&]:rounded-lg [[data-variant=inset]>_&]:bg-surface-3 [[data-variant=inset]>_&]:p-4 [[data-variant=inset]>_&]:shadow-elevated-3 [[data-variant=inset]>_&]:[--popup-surface:var(--surface-3)]',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n 'flex items-center [.border-t]:pt-6',\n '[[data-variant=default]>_&]:px-6',\n '[[data-variant=inset]>_&]:mt-auto [[data-variant=inset]>_&]:justify-end [[data-variant=inset]>_&]:pt-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type { CardProps };\nexport { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils.js';\n\ntype ExitingLineProps = {\n text: string;\n textColor: string;\n duration: number;\n fallDuration: number;\n opacityEase: (t: number) => number;\n wrap?: boolean;\n onDone: () => void;\n};\n\ntype HeightClipperProps = {\n height?: number;\n delay: number;\n children: ReactNode;\n};\n\ntype WidthReservationProps = { texts: string[] };\n\nexport function HeightClipper({ height, delay, children }: HeightClipperProps) {\n return (\n <motion.span\n className=\"block w-full overflow-hidden\"\n animate={height === undefined ? {} : { height }}\n transition={{\n height: { duration: 0.4, ease: [0.4, 0, 0.2, 1], delay },\n }}\n >\n {children}\n </motion.span>\n );\n}\n\nexport function ExitingLine({ text, textColor, duration, fallDuration, opacityEase, wrap = false, onDone }: ExitingLineProps) {\n return (\n <motion.span\n aria-hidden={true}\n className={cn(\n wrap\n ? 'pointer-events-none absolute top-0 left-0 w-full'\n : 'pointer-events-none absolute top-0 left-1/2 whitespace-nowrap',\n )}\n style={{ color: textColor }}\n initial={wrap ? { opacity: 1, y: 0 } : { opacity: 1, x: '-50%', y: 0 }}\n animate={wrap ? { opacity: 0, y: 14 } : { opacity: 0, x: '-50%', y: 14 }}\n transition={{\n opacity: { duration, ease: opacityEase },\n y: { duration: fallDuration, ease: [0.22, 0.61, 0.36, 1] },\n }}\n onAnimationComplete={onDone}\n >\n {text}\n </motion.span>\n );\n}\n\nexport function WidthReservation({ texts }: WidthReservationProps) {\n return (\n <span aria-hidden={true} className=\"invisible block h-0 overflow-hidden\">\n {texts.map((t) => (\n <span key={t} className=\"block\">\n {t}\n </span>\n ))}\n </span>\n );\n}\n","/**\n * The moving gradient band that paints DiaTextReveal's glyphs, and the coverage math that\n * lets the outgoing line's fade track it exactly.\n *\n * The band moves by *sliding a static gradient*, not by rebuilding one per frame. Rebuilding\n * meant a JS callback, a style recalc, a fresh gradient rasterization and a\n * `background-clip: text` repaint on every frame — all main-thread-only work, so the sweep\n * stalled whenever the thread was contended (scrolling, WebGL render loops, React commits).\n * A fixed image offset by a CSS animation needs no script at all and lets the browser cache\n * the raster, which is what keeps the sweep moving while the page is being scrolled.\n */\n\nimport type { CSSProperties } from 'react';\n\n/** Half-width of the colour band, in percent of the line. */\nconst BAND_HALF = 17;\n/** Band centre at the start of a sweep — fully left of the line, so nothing is painted. */\nconst SWEEP_START = -BAND_HALF;\n/** Band centre at the end of a sweep — fully right of the line, so everything is painted. */\nconst SWEEP_END = 100 + BAND_HALF;\n\n/** Cubic in-out: the band accelerates in, then eases out. */\nconst sweepEaseFn = (t: number) => (t < 0.5 ? 4 * t ** 3 : 1 - (-2 * t + 2) ** 3 / 2);\n\n/**\n * Fraction of the line the sweep has painted at `progress` (0–1 of the sweep's duration).\n */\nconst coverageAt = (progress: number) => Math.min(1, (sweepEaseFn(progress) * (SWEEP_END - SWEEP_START)) / 100);\n\n/**\n * Point in the sweep (0–1) at which the whole line is painted.\n */\nconst COVERAGE_SPAN = (() => {\n let lo = 0;\n let hi = 1;\n for (let i = 0; i < 40; i += 1) {\n const mid = (lo + hi) / 2;\n if (coverageAt(mid) < 1) lo = mid;\n else hi = mid;\n }\n return hi;\n})();\n\nconst EXIT_FADE_BIAS = 0.4;\n\n/** Easing for the outgoing line's fade, tracking how much of the incoming line is painted. */\nconst exitEase = (t: number) => coverageAt(t * COVERAGE_SPAN) ** EXIT_FADE_BIAS;\n\nconst makeExitEase = (leadFraction: number) => {\n if (leadFraction <= 0) return exitEase;\n if (leadFraction >= 1) return () => 0;\n return (t: number) => (t <= leadFraction ? 0 : exitEase((t - leadFraction) / (1 - leadFraction)));\n};\n\n/* ── Sliding-gradient geometry ───────────────────────────────────────── */\n\nconst SWEEP_SCALE = 3;\nconst BAND_HALF_IMAGE = BAND_HALF / SWEEP_SCALE;\n\nconst positionFor = (pos: number) => (pos - 50 * SWEEP_SCALE) / (1 - SWEEP_SCALE);\n\n/** Position holding the band fully left of the line — nothing painted. */\nconst SWEEP_FROM = `${positionFor(SWEEP_START).toFixed(3)}%`;\n/** Position holding the band fully right of the line — everything painted. */\nconst SWEEP_TO = `${positionFor(SWEEP_END).toFixed(3)}%`;\n/** `background-size` for the oversized image the animation slides. */\nconst SWEEP_SIZE = `${SWEEP_SCALE * 100}% 100%`;\n\nconst EASE_SAMPLES = 24;\nconst sweepEaseCss = `linear(${Array.from({ length: EASE_SAMPLES + 1 }, (_, i) => sweepEaseFn(i / EASE_SAMPLES).toFixed(5)).join(\n ', ',\n)})`;\n\nfunction buildSweepGradient(colors: string[], textColor: string) {\n const bandStart = 50 - BAND_HALF_IMAGE;\n const bandEnd = 50 + BAND_HALF_IMAGE;\n const n = colors.length;\n\n const parts: string[] = [`${textColor} 0%`, `${textColor} ${bandStart.toFixed(3)}%`];\n for (const [i, c] of colors.entries()) {\n const pct = n === 1 ? 50 : bandStart + (i / (n - 1)) * BAND_HALF_IMAGE * 2;\n parts.push(`${c} ${pct.toFixed(3)}%`);\n }\n parts.push(`transparent ${bandEnd.toFixed(3)}%`, 'transparent 100%');\n\n return `linear-gradient(90deg, ${parts.join(', ')})`;\n}\n\nexport type Sweep = { cycle: number; lead: boolean } | null;\n\ntype SweepStyleArgs = {\n colors: string[];\n textColor: string;\n duration: number;\n delay: number;\n sweep: Sweep;\n paused: boolean;\n reduced: boolean;\n};\n\nfunction buildSweepStyle({ colors, textColor, duration, delay, sweep, paused, reduced }: SweepStyleArgs) {\n return {\n color: 'transparent',\n backgroundClip: 'text',\n WebkitBackgroundClip: 'text',\n backgroundImage: buildSweepGradient(colors, textColor),\n backgroundRepeat: 'no-repeat',\n backgroundSize: SWEEP_SIZE,\n backgroundPositionX: reduced ? SWEEP_TO : SWEEP_FROM,\n '--dia-sweep-from': SWEEP_FROM,\n '--dia-sweep-to': SWEEP_TO,\n ...(sweep !== null &&\n !reduced && {\n animationName: sweep.cycle % 2 === 0 ? 'dia-sweep-a' : 'dia-sweep-b',\n animationDuration: `${duration}s`,\n animationDelay: `${delay}s`,\n animationTimingFunction: sweepEaseCss,\n animationFillMode: 'both',\n animationIterationCount: 1,\n animationPlayState: paused ? 'paused' : 'running',\n }),\n } satisfies CSSProperties & Record<`--${string}`, string>;\n}\n\nexport { buildSweepStyle, COVERAGE_SPAN, makeExitEase };\n","/** Measures the single-line (nowrap) rendered width of each text string. */\nexport function measureWidths(el: HTMLElement, texts: string[]) {\n const parent = el.parentElement;\n if (!parent) return texts.map(() => 0);\n\n const ghost = el.cloneNode();\n if (!(ghost instanceof HTMLElement)) return texts.map(() => 0);\n\n Object.assign(ghost.style, {\n position: 'absolute',\n visibility: 'hidden',\n pointerEvents: 'none',\n width: 'auto',\n whiteSpace: 'nowrap',\n });\n parent.appendChild(ghost);\n const widths = texts.map((t) => {\n ghost.textContent = t;\n return ghost.getBoundingClientRect().width;\n });\n ghost.remove();\n return widths;\n}\n","'use client';\n\nimport { motion, useInView, useReducedMotion } from 'framer-motion';\nimport type { AnimationEvent, ComponentPropsWithoutRef } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { cn } from '../lib/utils.js';\n\nimport { ExitingLine, HeightClipper, WidthReservation } from './dia-text-reveal.lines.js';\nimport { buildSweepStyle, COVERAGE_SPAN, makeExitEase, type Sweep } from './dia-text-reveal.sweep.js';\nimport { measureWidths } from './dia-text-reveal.utils.js';\nimport './dia-text-reveal.css';\n\nconst DEFAULT_COLORS = ['#c679c4', '#fa3d1d', '#ffb005', '#e1e1fe', '#0358f7'];\n\nconst EXIT_LEAD_RATIO = 0.3;\n\nexport interface DiaTextRevealProps\n extends Omit<ComponentPropsWithoutRef<typeof motion.span>, 'ref' | 'children' | 'style' | 'animate' | 'transition' | 'color'> {\n /** Text to reveal. Pass multiple strings to rotate when `repeat` is `true`. */\n text: string | string[];\n /** Colors sampled across the moving gradient band. */\n colors?: string[];\n /** CSS color for revealed text after the sweep. @defaultValue `\"var(--color-foreground)\"` */\n textColor?: string;\n /** Duration of one sweep pass, in seconds. @defaultValue `1` */\n duration?: number;\n /** Delay before the sweep starts, in seconds. @defaultValue `0` */\n delay?: number;\n /** When `text` is an array, replay the sweep and advance to the next string after each completion. */\n repeat?: boolean;\n /** Pause between cycles when `repeat` is `true`, in seconds. @defaultValue `0.5` */\n repeatDelay?: number;\n /** How long the outgoing line takes to fade/slide away, in seconds. @defaultValue the sweep's coverage window */\n exitDuration?: number;\n /** Head start given to the outgoing line, in seconds. @defaultValue `0.15 * duration` */\n exitLead?: number;\n /** If `true`, the animation starts only after the element enters the viewport. @defaultValue `true` */\n startOnView?: boolean;\n /** External gate: while `false`, the sweep is held at its start. @defaultValue `true` */\n start?: boolean;\n /** Passed to `useInView`: if `true`, in-view detection fires at most once. @defaultValue `true` */\n once?: boolean;\n /** Additional class names for the animated `span`. */\n className?: string;\n /** When `text` has multiple entries, use the widest string's width for layout. @defaultValue `false` */\n fixedWidth?: boolean;\n /** Allow the text to wrap onto multiple lines. @defaultValue `false` */\n wrap?: boolean;\n}\n\nexport function DiaTextReveal({\n text,\n colors = DEFAULT_COLORS,\n textColor = 'var(--color-foreground)',\n duration = 1,\n delay = 0,\n repeat = false,\n repeatDelay = 0.5,\n exitDuration,\n exitLead,\n startOnView = true,\n start = true,\n once = true,\n className,\n fixedWidth = false,\n wrap = false,\n ...props\n}: DiaTextRevealProps) {\n const texts = Array.isArray(text) ? text : [text];\n const isMulti = texts.length > 1;\n const prefersReducedMotion = useReducedMotion();\n const exitSpan = exitDuration ?? duration * COVERAGE_SPAN;\n const lead = Math.max(0, exitLead ?? duration * EXIT_LEAD_RATIO);\n const exitTotal = lead + exitSpan;\n const leadFraction = exitTotal > 0 ? lead / exitTotal : 0;\n const exitOpacityEase = useMemo(() => makeExitEase(leadFraction), [leadFraction]);\n\n const spanRef = useRef<HTMLSpanElement>(null);\n const optsRef = useRef({ repeat, repeatDelay, texts });\n optsRef.current = { repeat, repeatDelay, texts };\n\n const indexRef = useRef(0);\n const hasPlayedRef = useRef(false);\n const timerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const pendingRepeatRef = useRef(false);\n\n const [activeIndex, setActiveIndex] = useState(0);\n const [sweep, setSweep] = useState<Sweep>(null);\n const [exiting, setExiting] = useState<{\n index: number;\n token: number;\n } | null>(null);\n const clearExiting = useCallback(() => setExiting(null), []);\n const [measuredWidths, setMeasuredWidths] = useState<number[]>([]);\n const [wrapHeight, setWrapHeight] = useState<{\n h: number;\n shrink: boolean;\n } | null>(null);\n const innerRef = useRef<HTMLSpanElement>(null);\n\n const isInView = useInView(spanRef, { once, amount: 0.1 });\n const isLiveInView = useInView(spanRef, {\n once: false,\n amount: 0.1,\n });\n\n // biome-ignore lint/plugin: measures live DOM layout (getBoundingClientRect on a ghost clone) — post-render measurement.\n // biome-ignore lint/correctness/useExhaustiveDependencies: re-measures only when the text content changes; isMulti/texts are derived from the same text prop.\n useEffect(() => {\n const el = spanRef.current;\n if (!(el && isMulti) || wrap) return;\n const measure = () => setMeasuredWidths(measureWidths(el, texts));\n measure();\n if (document.fonts.status !== 'loaded') document.fonts.ready.then(measure);\n }, [Array.isArray(text) ? text.join('\\0') : text, isMulti, wrap, texts]);\n\n // biome-ignore lint/plugin: subscribes a ResizeObserver to live DOM layout.\n useEffect(() => {\n const el = innerRef.current;\n if (!(el && wrap && isMulti)) return;\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return;\n const h = entry.contentRect.height;\n setWrapHeight((prev) =>\n prev !== null && prev.h === h\n ? prev\n : {\n h,\n shrink: prev !== null && h < prev.h,\n },\n );\n });\n observer.observe(el);\n return () => observer.disconnect();\n }, [wrap, isMulti]);\n\n const advance = useCallback(() => {\n const opts = optsRef.current;\n const current = indexRef.current;\n const next = (current + 1) % opts.texts.length;\n indexRef.current = next;\n setExiting({ index: current, token: Date.now() });\n setActiveIndex(next);\n setSweep((prev) => ({\n cycle: (prev?.cycle ?? 0) + 1,\n lead: true,\n }));\n }, []);\n\n const scheduleRepeat = useCallback(() => {\n timerRef.current = setTimeout(() => {\n timerRef.current = undefined;\n advance();\n }, optsRef.current.repeatDelay * 1000);\n }, [advance]);\n\n const onSweepEnd = useCallback(\n (event: AnimationEvent<HTMLSpanElement>) => {\n if (!event.animationName.startsWith('dia-sweep')) return;\n if (!optsRef.current.repeat) return;\n scheduleRepeat();\n },\n [scheduleRepeat],\n );\n\n // biome-ignore lint/plugin: flips imperative animation state on a viewport/gate edge.\n useEffect(() => {\n if (prefersReducedMotion) return;\n if (startOnView && !isInView) return;\n if (!start) return;\n if (once && hasPlayedRef.current) return;\n hasPlayedRef.current = true;\n setSweep((prev) => (prev === null ? { cycle: 0, lead: false } : { cycle: prev.cycle + 1, lead: false }));\n }, [isInView, start, startOnView, once, prefersReducedMotion]);\n\n // biome-ignore lint/plugin: pauses/re-arms a pending timer on live viewport presence.\n useEffect(() => {\n if (!repeat || prefersReducedMotion) return;\n if (!isLiveInView) {\n if (timerRef.current === undefined) return;\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n pendingRepeatRef.current = true;\n } else if (pendingRepeatRef.current) {\n pendingRepeatRef.current = false;\n scheduleRepeat();\n }\n }, [isLiveInView, repeat, prefersReducedMotion, scheduleRepeat]);\n\n // biome-ignore lint/plugin: releases a pending timer on unmount.\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n const paused = repeat && sweep !== null && !isLiveInView;\n\n const revealStyle = buildSweepStyle({\n colors,\n textColor,\n duration,\n delay: delay + (sweep?.lead ? lead : 0),\n sweep,\n paused,\n reduced: prefersReducedMotion === true,\n });\n\n if (!isMulti)\n return (\n <motion.span\n ref={spanRef}\n className={cn('align-baseline text-inherit leading-[100%]', className)}\n style={revealStyle}\n {...props}\n onAnimationEnd={onSweepEnd}\n >\n {texts[activeIndex]}\n </motion.span>\n );\n\n const fixedW = !wrap && fixedWidth && measuredWidths.length > 0 ? Math.max(...measuredWidths) : undefined;\n const animatedW = wrap || fixedWidth ? undefined : measuredWidths[activeIndex];\n const animatedH = wrap ? wrapHeight?.h : undefined;\n const heightDelay = exiting !== null && wrapHeight?.shrink ? exitTotal : 0;\n\n const incoming = (\n <span\n ref={innerRef}\n className={cn('inline-block', wrap && 'w-full', !wrap && 'whitespace-nowrap')}\n style={revealStyle}\n onAnimationEnd={onSweepEnd}\n >\n {texts[activeIndex]}\n </span>\n );\n\n return (\n <motion.span\n ref={spanRef}\n className={cn(\n wrap\n ? 'relative inline-block w-full text-center align-baseline text-inherit'\n : 'relative inline-block whitespace-nowrap text-center align-baseline text-inherit leading-[100%]',\n className,\n )}\n style={{\n ...(fixedW !== undefined && { width: fixedW }),\n }}\n animate={{\n ...(animatedW !== undefined && { width: animatedW }),\n }}\n transition={{\n width: { duration: 0.4, ease: [0.4, 0, 0.2, 1] },\n }}\n {...props}\n >\n {wrap ? (\n <HeightClipper height={animatedH} delay={heightDelay}>\n <WidthReservation texts={texts} />\n {incoming}\n </HeightClipper>\n ) : (\n incoming\n )}\n\n {exiting && !prefersReducedMotion && (\n <ExitingLine\n key={exiting.token}\n text={texts[exiting.index]!}\n textColor={textColor}\n duration={0.4}\n fallDuration={0.25}\n opacityEase={exitOpacityEase}\n wrap={wrap}\n onDone={clearExiting}\n />\n )}\n </motion.span>\n );\n}\n","import type { InputHTMLAttributes, RefObject } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Physically-recessed input: the inverse read of GlossyButton.\n * The illusion is built entirely from `box-shadow` layers (no wrapper div).\n *\n * Server-renderable: no browser APIs are used.\n */\nexport function ElevatedInput({\n className,\n type = 'text',\n ref,\n ...props\n}: InputHTMLAttributes<HTMLInputElement> & {\n ref?: RefObject<HTMLInputElement | null>;\n}) {\n return (\n <input\n ref={ref}\n type={type}\n className={cn(\n // Layout & shape\n 'relative w-full overflow-hidden rounded-lg',\n // Typography\n 'text-(--color-foreground) text-sm placeholder:text-(--color-muted-foreground)',\n // Sizing\n 'h-9 px-3',\n // Reset native input chrome\n 'appearance-none border-none outline-none',\n\n // Background — a barely-there top darkening that reads as cavity depth.\n 'bg-[linear-gradient(to_bottom,oklch(0_0_0/0.04),transparent)]',\n 'dark:bg-[linear-gradient(to_bottom,oklch(1_0_0/0.04),transparent)]',\n\n // Shadow stack — light mode\n 'shadow-[inset_0_1px_0_0_oklch(1_0_0/0.08),inset_0_2px_2px_-1px_oklch(0_0_0/0.08),inset_0_4px_4px_-2px_oklch(0_0_0/0.08),0_1px_0_0_oklch(0_0_0/0.12),inset_0_0_0_1px_oklch(0_0_0/0.16)]',\n // Shadow stack — dark mode\n 'dark:shadow-[inset_0_1px_0_0_oklch(1_0_0/0.1),inset_0_2px_2px_-1px_oklch(0_0_0/0.28),inset_0_4px_4px_-2px_oklch(0_0_0/0.22),0_1px_0_0_oklch(0_0_0/0.36),inset_0_0_0_1px_oklch(1_0_0/0.16)]',\n\n // Focus\n 'focus-visible:shadow-[inset_0_1px_0_0_oklch(1_0_0/0.08),inset_0_2px_2px_-1px_oklch(0_0_0/0.04),inset_0_4px_4px_-2px_oklch(0_0_0/0.04),0_0_0_3px_oklch(0_0_0/0.08),inset_0_0_0_1.5px_oklch(0_0_0/0.36)]',\n 'dark:focus-visible:shadow-[inset_0_1px_0_0_oklch(1_0_0/0.12),inset_0_2px_2px_-1px_oklch(0_0_0/0.16),inset_0_4px_4px_-2px_oklch(0_0_0/0.12),0_0_0_3px_oklch(1_0_0/0.08),inset_0_0_0_1.5px_oklch(1_0_0/0.28)]',\n\n 'transition-shadow duration-150',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n );\n}\n","'use client';\n\nimport { motion, useInView } from 'framer-motion';\nimport { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { easeOut } from '../lib/ease.js';\n\n/** Holds an entrance back until an external cue is ready. */\ntype Gate = {\n /** While `false`, the entrance stays in its initial state even once in view. @defaultValue `true` */\n start?: boolean;\n};\n\nexport type FadeInProps = Gate & {\n children: React.ReactNode;\n className?: string;\n delay?: number;\n duration?: number;\n yOffset?: number;\n};\n\nexport type StaggerProps = Gate & {\n children: React.ReactNode;\n className?: string;\n staggerDelay?: number;\n baseDelay?: number;\n};\n\nexport type StaggerItemProps = {\n children: React.ReactNode;\n className?: string;\n};\n\n/** Shared viewport config so every entrance in this file triggers at the same threshold. */\nconst viewport = { once: true, margin: '-60px' } as const;\n\n/** Rows in a grid can differ by a fraction of a pixel; treat near-equal tops as the same row. */\nconst ROW_TOLERANCE = 8;\n\n/** Registers a newly visible item and receives back the delay it should animate with. */\ntype RegisterItem = (element: Element, reveal: (delay: number) => void) => void;\n\nconst StaggerContext = createContext<RegisterItem | null>(null);\n\n/**\n * Wraps children in a framer-motion div that fades+slides up\n * when it enters the viewport.\n */\nexport function FadeIn({ children, className, delay = 0, duration = 1, yOffset = 20, start = true }: FadeInProps) {\n const ref = useRef<HTMLDivElement>(null);\n const inView = useInView(ref, viewport);\n const hidden = { opacity: 0, y: yOffset };\n\n return (\n <motion.div\n ref={ref}\n className={className}\n initial={hidden}\n animate={inView && start ? { opacity: 1, y: 0 } : hidden}\n transition={{ duration, delay, ease: easeOut }}\n >\n {children}\n </motion.div>\n );\n}\n\n/**\n * Coordinates staggered entrances for the `<StaggerItem>`s inside it.\n *\n * Unlike framer-motion's `staggerChildren`, the cascade is driven by each\n * item's own visibility rather than the container's: items that scroll into\n * view together are batched into one frame, sorted top-to-bottom then\n * left-to-right, and given progressively later delays.\n *\n * While `start` is `false`, items that come into view queue up instead of\n * revealing, so the whole cascade lands as one batch when the cue arrives.\n */\nexport function Stagger({ children, className, staggerDelay = 0.15, baseDelay = 0, start = true }: StaggerProps) {\n const queue = useRef<{ element: Element; reveal: (delay: number) => void }[]>([]);\n const frame = useRef<number | null>(null);\n const started = useRef(start);\n started.current = start;\n\n const flush = useCallback(() => {\n frame.current = null;\n const batch = queue.current;\n queue.current = [];\n\n const positioned = batch.map((entry) => ({\n ...entry,\n rect: entry.element.getBoundingClientRect(),\n }));\n positioned.sort((a, b) =>\n Math.abs(a.rect.top - b.rect.top) > ROW_TOLERANCE ? a.rect.top - b.rect.top : a.rect.left - b.rect.left,\n );\n for (const [index, entry] of positioned.entries()) entry.reveal(baseDelay + index * staggerDelay);\n }, [baseDelay, staggerDelay]);\n\n const register = useCallback<RegisterItem>(\n (element, reveal) => {\n queue.current.push({ element, reveal });\n if (started.current) frame.current ??= requestAnimationFrame(flush);\n },\n [flush],\n );\n\n // biome-ignore lint/plugin: drains an imperative queue of pending reveals when the gate opens.\n useEffect(() => {\n if (start && queue.current.length > 0) frame.current ??= requestAnimationFrame(flush);\n }, [start, flush]);\n\n return (\n <StaggerContext value={register}>\n <div className={className}>{children}</div>\n </StaggerContext>\n );\n}\n\n/** Use inside <Stagger> to mark each animated child. */\nexport function StaggerItem({ children, className }: StaggerItemProps) {\n const register = useContext(StaggerContext);\n const ref = useRef<HTMLDivElement>(null);\n const claimed = useRef(false);\n const [delay, setDelay] = useState<number | null>(null);\n\n const onViewportEnter = useCallback(() => {\n if (claimed.current) return;\n claimed.current = true;\n const element = ref.current;\n if (register && element) register(element, setDelay);\n else setDelay(0);\n }, [register]);\n\n return (\n <motion.div\n ref={ref}\n className={className}\n initial={{ opacity: 0, y: 18 }}\n animate={delay === null ? { opacity: 0, y: 18 } : { opacity: 1, y: 0 }}\n transition={{ duration: 0.45, delay: delay ?? 0, ease: easeOut }}\n viewport={viewport}\n onViewportEnter={onViewportEnter}\n >\n {children}\n </motion.div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\nexport type FeatureCardProps = {\n /** Icon rendered in the elevated top-left box. Pass any ReactNode (e.g. an\n * inlined SVG or an iconify <Icon icon={...} />). */\n icon: ReactNode;\n title: string;\n body: string;\n /** Icon colour class, e.g. `text-violet-500`. Defaults to the secondary foreground tone. */\n iconColor?: string;\n /** Extra classes merged onto the card root. */\n className?: string;\n};\n\n/**\n * Shared marketing feature card: a soft-filled panel with an elevated icon box\n * above a title + body. Used across the /security, /syncing, /web-access pages\n * and future copy pages.\n *\n * Geometry mirrors the design-system reference (p-6 → lg:p-8 → xl:p-10, icon box\n * size-10 → lg:size-12); the design tokens are mapped onto this library's own\n * variables so both themes stay in sync.\n */\nexport function FeatureCard({ icon, title, body, iconColor, className }: FeatureCardProps) {\n return (\n <div\n className={cn(\n 'flex w-full flex-col justify-between gap-6 rounded-[20px] bg-(--muted) p-6 lg:gap-8 lg:rounded-3xl lg:p-8 xl:gap-10 xl:p-10',\n className,\n )}\n >\n <div className=\"flex size-10 items-center justify-center rounded-[10px] bg-(--surface) shadow-(--shadow-sm) lg:size-12 lg:rounded-md\">\n <span\n className={cn('flex h-5 w-5 items-center justify-center lg:h-6 lg:w-6', iconColor ?? 'text-(--foreground-secondary)')}\n >\n {icon}\n </span>\n </div>\n <div className=\"flex flex-col gap-2\">\n <h3 className=\"font-semibold text-[15px] text-foreground lg:text-base\">{title}</h3>\n <p className=\"text-(--foreground-secondary) text-[13px] leading-relaxed lg:text-sm\">{body}</p>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/utils.js';\n\n// ── Non-exported helpers ──────────────────────────────────────────────────────\n\n/** Downward chevron (rotated square, two borders) placed at the end of a line. */\nconst downChevronClass =\n 'absolute left-1/2 top-full size-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-b border-r border-(--foreground-muted)';\n\nconst rightChevronClass =\n 'absolute right-0 top-1/2 size-2 translate-x-1/2 -translate-y-1/2 rotate-45 border-t border-r border-(--foreground-muted)';\n\nconst leftChevronClass =\n 'absolute left-0 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 -rotate-45 border-t border-l border-(--foreground-muted)';\n\n/** Micro label chip that masks the line it sits on. */\nconst microLabelClass =\n 'absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 whitespace-nowrap rounded-full border border-(--border) bg-(--muted) px-1.5 py-px font-mono text-[8.5px] leading-tight text-(--foreground-secondary)';\n\n// ── Exports ───────────────────────────────────────────────────────────────────\n\ntype ArrowRightProps = { label?: string; className?: string };\n\n/** Horizontal connector (left → right) between two snake cells. */\nexport function ArrowRight({ label, className }: ArrowRightProps) {\n return (\n <div className={cn('relative flex items-center', className)}>\n <span className=\"h-px w-full bg-(--foreground-muted)\" />\n <span className={rightChevronClass} />\n {label ? <span className={microLabelClass}>{label}</span> : null}\n </div>\n );\n}\n\ntype ArrowLeftProps = { label?: string; className?: string };\n\n/** Horizontal connector (right → left) between two snake cells. */\nexport function ArrowLeft({ label, className }: ArrowLeftProps) {\n return (\n <div className={cn('relative flex items-center', className)}>\n <span className=\"h-px w-full bg-(--foreground-muted)\" />\n <span className={leftChevronClass} />\n {label ? <span className={microLabelClass}>{label}</span> : null}\n </div>\n );\n}\n\ntype TurnDownProps = { className?: string };\n\n/** Short vertical connector used when the snake drops to the next row. */\nexport function TurnDown({ className }: TurnDownProps) {\n return (\n <div className={cn('relative h-4', className)}>\n <span className=\"absolute left-1/2 top-0 h-full w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className={downChevronClass} />\n </div>\n );\n}\n\ntype SplitArrowProps = { leftLabel?: string; rightLabel?: string; className?: string };\n\n/** One-to-two branch connector: spine down, horizontal arm, drops at 25% / 75%. */\nexport function SplitArrow({ leftLabel, rightLabel, className }: SplitArrowProps) {\n return (\n <div className={cn('relative h-12', className)}>\n <span className=\"absolute left-1/2 top-0 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[25%] right-[25%] top-1/2 h-px -translate-y-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[25%] top-1/2 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[75%] top-1/2 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[25%] top-full size-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-b border-r border-(--foreground-muted)\" />\n <span className=\"absolute left-[75%] top-full size-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-b border-r border-(--foreground-muted)\" />\n {leftLabel ? (\n <span className=\"absolute left-[30%] top-1/2 -translate-y-1/2 rounded-full border border-(--border) bg-(--muted) px-2 py-0.5 font-mono text-[10px] text-(--foreground-secondary)\">\n {leftLabel}\n </span>\n ) : null}\n {rightLabel ? (\n <span className=\"absolute right-[30%] top-1/2 -translate-y-1/2 rounded-full border border-(--border) bg-(--muted) px-2 py-0.5 font-mono text-[10px] text-(--foreground-secondary)\">\n {rightLabel}\n </span>\n ) : null}\n </div>\n );\n}\n\ntype JoinArrowProps = { className?: string };\n\n/** Two-to-one join connector: risers at 25% / 75%, horizontal arm, spine down. */\nexport function JoinArrow({ className }: JoinArrowProps) {\n return (\n <div className={cn('relative h-12', className)}>\n <span className=\"absolute left-[25%] top-0 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[75%] top-0 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-[25%] right-[25%] top-1/2 h-px -translate-y-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-1/2 top-1/2 h-1/2 w-px -translate-x-1/2 bg-(--foreground-muted)\" />\n <span className=\"absolute left-1/2 top-full size-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-b border-r border-(--foreground-muted)\" />\n </div>\n );\n}\n\ntype FlowNodeProps = {\n icon?: ReactNode;\n /**\n * Accepted for API compatibility with the site's icon-based version; the icon is now a\n * caller-supplied ReactNode that carries its own sizing/color classes, so this is unused.\n */\n iconClass?: string;\n chipClass?: string;\n title: string;\n body?: string;\n tag?: string;\n children?: ReactNode;\n className?: string;\n};\n\n/** A compact rounded node: icon chip, one-line title, one-line sub, optional children. */\nexport function FlowNode({ icon, chipClass, title, body, tag, children, className }: FlowNodeProps) {\n return (\n <div className={cn('flex h-full flex-col rounded-[12px] border border-(--border) bg-(--surface) p-2.5', className)}>\n <div className=\"flex items-start gap-2\">\n {icon ? (\n <div className={cn('flex size-7 shrink-0 items-center justify-center rounded-[8px]', chipClass ?? 'bg-(--muted)')}>\n {icon}\n </div>\n ) : null}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-x-1.5 gap-y-0.5\">\n <p className=\"font-semibold text-[11px] leading-snug text-foreground sm:text-[12px]\">{title}</p>\n {tag ? (\n <span className=\"rounded-full border border-(--border) px-1.5 py-px font-mono text-[8.5px] text-(--foreground-muted)\">\n {tag}\n </span>\n ) : null}\n </div>\n {body ? <p className=\"mt-0.5 text-[9.5px] leading-snug text-(--foreground-secondary) sm:text-[10px]\">{body}</p> : null}\n </div>\n </div>\n {children ? <div className=\"mt-2\">{children}</div> : null}\n </div>\n );\n}\n\ntype FlowPillProps = { title: string; className?: string };\n\n/** A start/end pill: centered, fits content, sits on the flowchart spine. */\nexport function FlowPill({ title, className }: FlowPillProps) {\n return (\n <div\n className={cn(\n 'mx-auto flex w-fit max-w-full items-center justify-center rounded-full border border-(--border) bg-(--surface) px-4 py-2 text-center',\n className,\n )}\n >\n <p className=\"text-[12px] font-semibold leading-snug text-foreground\">{title}</p>\n </div>\n );\n}\n\ntype FlowDiamondProps = { label: string; sub?: string; className?: string };\n\n/** A compact decision diamond (clip-path, straight text inside). */\nexport function FlowDiamond({ label, sub, className }: FlowDiamondProps) {\n return (\n <div className={cn('relative h-14 w-36 justify-self-center sm:h-16 sm:w-44', className)}>\n <div className=\"absolute inset-0 bg-(--border-hi) [clip-path:polygon(50%_0,100%_50%,50%_100%,0_50%)]\" />\n <div className=\"absolute inset-[1px] flex flex-col items-center justify-center gap-0.5 bg-(--surface) px-6 text-center [clip-path:polygon(50%_0,100%_50%,50%_100%,0_50%)]\">\n <p className=\"text-[11px] font-semibold leading-tight text-foreground sm:text-[12px]\">{label}</p>\n {sub ? <p className=\"text-[8.5px] leading-tight text-(--foreground-muted)\">{sub}</p> : null}\n </div>\n </div>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Physically-lit button: a domed, back-lit key built from one effect layer.\n *\n * The geometry lives in a single `box-shadow` list that gets swapped wholesale on\n * press, so the bevel and cast can drop out while the rim survives without any\n * of them being separate elements:\n *\n * • the gloss span — face fill + the shadow list (bevel, rim, cast).\n * • its `before:` — the dome gradient, painted over the face.\n * • its `after:` — the hover/press tint, the only thing that cross-fades.\n *\n * The recipe lives in `global.css`. Every colour is a `--btn-*` primitive, and\n * the two shadow composites are declared on `.glossy` — on the key itself, not\n * on `:root` — because a var() inside a custom property is substituted where the\n * property is *declared*. That's what lets one `.glossy-<variant>` class restyle\n * the whole recipe by setting primitives, and it's why there are no `dark:`\n * variants here: `.dark` overrides the same primitives.\n *\n * The span is a sibling of the label rather than its parent so the label never\n * inherits the effect layers' stacking or transitions; `isolate` on the root\n * contains the span's negative z-index.\n *\n * Server-renderable: every state is pure CSS. Passing a function as\n * `actionOrLink` requires a client-component parent, as with any onClick prop.\n */\n\n/**\n * The whole visual treatment. Absolutely positioned behind the label, with the\n * dome (`before:`) and the interaction tint (`after:`) stacked over the face.\n * Only the tint animates opacity; the shadow list animates by being replaced.\n */\nconst glossLayer = cn(\n 'pointer-events-none absolute inset-0 z-[-1] rounded-[inherit]',\n '[background-color:var(--btn-face)] [box-shadow:var(--shadow-button)]',\n 'transition-shadow duration-150',\n // Pressed (and disabled): bevel + cast go transparent, the rim stays.\n 'group-active/glossy:[box-shadow:var(--shadow-button-pressed)]',\n 'group-disabled/glossy:[box-shadow:var(--shadow-button-pressed)]',\n // Dome — fixed direction, per-variant stops. Above the face, below the tint.\n \"before:absolute before:inset-0 before:rounded-[inherit] before:content-[''] before:[background-image:var(--gradient-button)]\",\n // Interaction tint. Hidden outright when disabled, and on touch (no hover\n // state to speak of) so the root's active:opacity can carry the press instead.\n \"after:absolute after:inset-0 after:rounded-[inherit] after:content-[''] after:opacity-0\",\n 'after:[background-color:var(--btn-tint-hover)] after:transition-opacity after:duration-150 after:[will-change:opacity]',\n 'group-hover/glossy:after:opacity-100',\n 'group-active/glossy:after:[background-color:var(--btn-tint-active)]',\n 'group-disabled/glossy:after:hidden [@media(hover:none)]:after:hidden',\n);\n\nconst glossyButtonVariants = cva(\n cn(\n 'glossy group/glossy relative isolate inline-flex cursor-pointer select-none items-center justify-center gap-1 whitespace-nowrap rounded-full font-normal',\n // Label colour rides the variant. Kept as a utility rather than a plain\n // declaration on `.glossy` so a caller's own text-* class still wins.\n '[color:var(--btn-fg)]',\n 'disabled:cursor-default disabled:opacity-50',\n // Touch devices get no hover layer, so the whole key dims on press instead.\n '[@media(hover:none)]:active:opacity-80',\n ),\n {\n variants: {\n size: {\n sm: 'h-8 px-2.5 text-sm',\n md: 'h-9 px-5 text-[17px]',\n lg: 'h-11 px-6 text-[17px]',\n },\n /**\n * Written out as literal class names — Tailwind's scanner is static, so a\n * `glossy-${variant}` template would never make it into the stylesheet.\n * `neutral` is the bare recipe, so it needs no class of its own.\n */\n variant: {\n neutral: '',\n accent: 'glossy-accent',\n destructive: 'glossy-destructive',\n special: 'glossy-special',\n positive: 'glossy-positive',\n attention: 'glossy-attention',\n highlight: 'glossy-highlight',\n inverse: 'glossy-inverse',\n },\n },\n defaultVariants: { size: 'md', variant: 'neutral' },\n },\n);\n\nexport type GlossyButtonProps = VariantProps<typeof glossyButtonVariants> & {\n /**\n * String → renders as a plain <a href={...}>.\n * Function → renders as a <button type=\"button\" onClick={...}>.\n */\n actionOrLink: string | (() => void);\n children: ReactNode;\n /** Button-only — an anchor can't be disabled. */\n disabled?: boolean;\n className?: string;\n 'aria-label'?: string;\n};\n\nexport function GlossyButton({\n size,\n variant,\n actionOrLink,\n children,\n disabled,\n className,\n 'aria-label': ariaLabel,\n}: GlossyButtonProps) {\n const content = (\n <>\n <span data-fx-layer=\"gloss\" aria-hidden={true} className={glossLayer} />\n <span className=\"px-0.5\">{children}</span>\n </>\n );\n\n const buttonClassName = cn(glossyButtonVariants({ size, variant }), className);\n\n if (typeof actionOrLink === 'string')\n return (\n <a href={actionOrLink} className={cn(buttonClassName, 'no-underline')} aria-label={ariaLabel}>\n {content}\n </a>\n );\n\n return (\n <button type=\"button\" className={buttonClassName} onClick={actionOrLink} disabled={disabled} aria-label={ariaLabel}>\n {content}\n </button>\n );\n}\n\nexport { glossyButtonVariants };\n","import { type Mesh, Program, type Renderer } from 'ogl';\n\n// Keep renderer/program alive across re-renders so the uniform-sync effect can\n// update uniforms without ever rebuilding the WebGL context.\nconst vertex = `#version 300 es\nin vec2 position;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n}\n`;\n\nconst fragment = `#version 300 es\nprecision highp float;\nuniform vec2 iResolution;\nuniform float iTime;\nuniform float uTimeSpeed;\nuniform float uColorBalance;\nuniform float uWarpStrength;\nuniform float uWarpFrequency;\nuniform float uWarpSpeed;\nuniform float uWarpAmplitude;\nuniform float uBlendAngle;\nuniform float uBlendSoftness;\nuniform float uRotationAmount;\nuniform float uNoiseScale;\nuniform float uGrainAmount;\nuniform float uGrainScale;\nuniform float uGrainAnimated;\nuniform float uContrast;\nuniform float uGamma;\nuniform float uSaturation;\nuniform vec2 uCenterOffset;\nuniform float uZoom;\nuniform vec3 uColor1;\nuniform vec3 uColor2;\nuniform vec3 uColor3;\nout vec4 fragColor;\n#define S(a,b,t) smoothstep(a,b,t)\nmat2 Rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}\nvec2 hash(vec2 p){p=vec2(dot(p,vec2(2127.1,81.17)),dot(p,vec2(1269.5,283.37)));return fract(sin(p)*43758.5453);}\nfloat noise(vec2 p){vec2 i=floor(p),f=fract(p),u=f*f*(3.0-2.0*f);float n=mix(mix(dot(-1.0+2.0*hash(i+vec2(0.0,0.0)),f-vec2(0.0,0.0)),dot(-1.0+2.0*hash(i+vec2(1.0,0.0)),f-vec2(1.0,0.0)),u.x),mix(dot(-1.0+2.0*hash(i+vec2(0.0,1.0)),f-vec2(0.0,1.0)),dot(-1.0+2.0*hash(i+vec2(1.0,1.0)),f-vec2(1.0,1.0)),u.x),u.y);return 0.5+0.5*n;}\nvoid mainImage(out vec4 o, vec2 C){\n float t=iTime*uTimeSpeed;\n vec2 uv=C/iResolution.xy;\n float ratio=iResolution.x/iResolution.y;\n vec2 tuv=uv-0.5+uCenterOffset;\n tuv/=max(uZoom,0.001);\n float degree=noise(vec2(t*0.1,tuv.x*tuv.y)*uNoiseScale);\n tuv.y*=1.0/ratio;\n tuv*=Rot(radians((degree-0.5)*uRotationAmount+180.0));\n tuv.y*=ratio;\n float frequency=uWarpFrequency;\n float ws=max(uWarpStrength,0.001);\n float amplitude=uWarpAmplitude/ws;\n float warpTime=t*uWarpSpeed;\n tuv.x+=sin(tuv.y*frequency+warpTime)/amplitude;\n tuv.y+=sin(tuv.x*(frequency*1.5)+warpTime)/(amplitude*0.5);\n vec3 colLav=uColor1;\n vec3 colOrg=uColor2;\n vec3 colDark=uColor3;\n float b=uColorBalance;\n float s=max(uBlendSoftness,0.0);\n mat2 blendRot=Rot(radians(uBlendAngle));\n float blendX=(tuv*blendRot).x;\n float edge0=-0.3-b-s;\n float edge1=0.2-b+s;\n float v0=0.5-b+s;\n float v1=-0.3-b-s;\n vec3 layer1=mix(colDark,colOrg,S(edge0,edge1,blendX));\n vec3 layer2=mix(colOrg,colLav,S(edge0,edge1,blendX));\n vec3 col=mix(layer1,layer2,S(v0,v1,tuv.y));\n vec2 grainUv=uv*max(uGrainScale,0.001);\n if(uGrainAnimated>0.5){grainUv+=vec2(iTime*0.05);}\n float grain=fract(sin(dot(grainUv,vec2(12.9898,78.233)))*43758.5453);\n col+=(grain-0.5)*uGrainAmount;\n col=(col-0.5)*uContrast+0.5;\n float luma=dot(col,vec3(0.2126,0.7152,0.0722));\n col=mix(vec3(luma),col,uSaturation);\n col=pow(max(col,0.0),vec3(1.0/max(uGamma,0.001)));\n col=clamp(col,0.0,1.0);\n o=vec4(col,1.0);\n}\nvoid main(){\n vec4 o=vec4(0.0);\n mainImage(o,gl_FragCoord.xy);\n fragColor=o;\n}\n`;\n\nexport type GrainientContext = { renderer: Renderer; program: Program; mesh: Mesh };\n\nexport function createGrainientProgram(gl: Renderer['gl']): Program {\n return new Program(gl, {\n vertex,\n fragment,\n uniforms: {\n iTime: { value: 0 },\n iResolution: { value: new Float32Array([1, 1]) },\n uTimeSpeed: { value: 0.25 },\n uColorBalance: { value: 0.0 },\n uWarpStrength: { value: 1.0 },\n uWarpFrequency: { value: 5.0 },\n uWarpSpeed: { value: 2.0 },\n uWarpAmplitude: { value: 50.0 },\n uBlendAngle: { value: 0.0 },\n uBlendSoftness: { value: 0.05 },\n uRotationAmount: { value: 500.0 },\n uNoiseScale: { value: 2.0 },\n uGrainAmount: { value: 0.1 },\n uGrainScale: { value: 2.0 },\n uGrainAnimated: { value: 0.0 },\n uContrast: { value: 1.5 },\n uGamma: { value: 1.0 },\n uSaturation: { value: 1.0 },\n uCenterOffset: { value: new Float32Array([0, 0]) },\n uZoom: { value: 0.9 },\n uColor1: { value: new Float32Array([1, 1, 1]) },\n uColor2: { value: new Float32Array([1, 1, 1]) },\n uColor3: { value: new Float32Array([1, 1, 1]) },\n },\n });\n}\n\nexport const ctxMap = new WeakMap<HTMLElement, GrainientContext>();\n","'use client';\n\nimport { Mesh, Renderer, Triangle } from 'ogl';\nimport { useEffect, useRef } from 'react';\nimport { cn } from '../lib/utils.js';\nimport { createGrainientProgram, ctxMap } from './grainient.shader.js';\nimport type { GrainientProps } from './grainient.types.js';\nimport './grainient.css';\n\nconst HEX_COLOR_RE = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n\nconst hexToRgb = (hex: string): [number, number, number] => {\n const result = HEX_COLOR_RE.exec(hex);\n if (!result) return [1, 1, 1];\n // The regex guarantees all three capture groups when it matches; the defaults\n // only silence noUncheckedIndexedAccess.\n const [, r = 'ff', g = 'ff', b = 'ff'] = result;\n return [Number.parseInt(r, 16) / 255, Number.parseInt(g, 16) / 255, Number.parseInt(b, 16) / 255];\n};\n\n// framer-motion's MotionConfig only governs declarative motion.* components, so\n// this raw-WebGL canvas carries its own prefers-reduced-motion check.\nconst prefersReducedMotion = () =>\n typeof globalThis !== 'undefined' && globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches === true;\n\n// The home page mounts four Grainient canvases at once; browsers cap live WebGL\n// contexts (~8-16) and each costs GPU/CPU. On low-power clients — narrow viewports\n// or few CPU cores — skip WebGL and let the static background stand in.\nconst isLowPowerClient = () => {\n if (typeof globalThis === 'undefined') return false;\n const narrow = globalThis.matchMedia?.('(max-width: 1023px)').matches === true;\n const fewCores =\n typeof navigator !== 'undefined' && typeof navigator.hardwareConcurrency === 'number' && navigator.hardwareConcurrency <= 4;\n return narrow || fewCores;\n};\n\n// A tiling SVG feTurbulence tile that stands in for the shader's film grain,\n// inlined so it needs no network request.\nconst GRAIN_LAYER = `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.12'/%3E%3C/svg%3E\")`;\n\n// CSS gradient fallback when no pre-rendered image is available.\nconst fallbackGradient = (c1: string, c2: string, c3: string) =>\n `${GRAIN_LAYER}, linear-gradient(135deg, ${c1} 0%, ${c2} 55%, ${c3} 100%)`;\n\n// Apply a pre-rendered static image as a cover background.\nconst applyStaticBg = (el: HTMLDivElement, src: string) => {\n el.style.backgroundImage = `url(${src})`;\n el.style.backgroundSize = 'cover';\n el.style.backgroundPosition = 'center';\n};\n\n// Build the WebGL context, wire up resize/visibility observers, and run the\n// render loop. Returns a cleanup that tears everything back down.\nfunction initGrainient(container: HTMLDivElement): () => void {\n const renderer = new Renderer({\n webgl: 2,\n alpha: true,\n antialias: false,\n dpr: Math.min(globalThis.devicePixelRatio || 1, 2),\n });\n\n const gl = renderer.gl;\n const canvas = gl.canvas;\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n canvas.style.display = 'block';\n container.appendChild(canvas);\n\n const geometry = new Triangle(gl);\n const program = createGrainientProgram(gl);\n const mesh = new Mesh(gl, { geometry, program });\n ctxMap.set(container, { renderer, program, mesh });\n\n const setSize = () => {\n const rect = container.getBoundingClientRect();\n renderer.setSize(Math.max(1, Math.floor(rect.width)), Math.max(1, Math.floor(rect.height)));\n const res: Float32Array = program.uniforms.iResolution.value;\n res[0] = gl.drawingBufferWidth;\n res[1] = gl.drawingBufferHeight;\n renderer.render({ scene: mesh });\n };\n\n const ro = new ResizeObserver(setSize);\n ro.observe(container);\n setSize();\n\n let raf = 0;\n let isVisible = true;\n let isPageVisible = !document.hidden;\n const t0 = performance.now();\n\n const loop = (t: number) => {\n program.uniforms.iTime.value = (t - t0) * 0.001;\n renderer.render({ scene: mesh });\n raf = requestAnimationFrame(loop);\n };\n\n const tryStart = () => {\n if (isVisible && isPageVisible && raf === 0) raf = requestAnimationFrame(loop);\n };\n const tryStop = () => {\n if (raf !== 0) {\n cancelAnimationFrame(raf);\n raf = 0;\n }\n };\n\n // Reduced motion: render a single static frame and never start the RAF loop.\n const reduce = prefersReducedMotion();\n\n const io = new IntersectionObserver(\n ([entry]) => {\n if (!entry) return;\n isVisible = entry.isIntersecting;\n if (isVisible) tryStart();\n else tryStop();\n },\n { threshold: 0 },\n );\n if (!reduce) io.observe(container);\n\n const onVisibility = () => {\n isPageVisible = !document.hidden;\n if (isPageVisible) tryStart();\n else tryStop();\n };\n if (!reduce) document.addEventListener('visibilitychange', onVisibility);\n if (!reduce) tryStart();\n\n return () => {\n tryStop();\n ro.disconnect();\n io.disconnect();\n document.removeEventListener('visibilitychange', onVisibility);\n ctxMap.delete(container);\n try {\n container.removeChild(canvas);\n } catch {\n /* ignore */\n }\n };\n}\n\nconst Grainient = (props: GrainientProps) => {\n const {\n timeSpeed = 0.25,\n colorBalance = 0.0,\n warpStrength = 1.0,\n warpFrequency = 5.0,\n warpSpeed = 2.0,\n warpAmplitude = 50.0,\n blendAngle = 0.0,\n blendSoftness = 0.05,\n rotationAmount = 500.0,\n noiseScale = 2.0,\n grainAmount = 0.1,\n grainScale = 2.0,\n grainAnimated = false,\n contrast = 1.5,\n gamma = 1.0,\n saturation = 1.0,\n centerX = 0.0,\n centerY = 0.0,\n zoom = 0.9,\n color1 = '#FF9FFC',\n color2 = '#5227FF',\n color3 = '#B497CF',\n staticSrc = '',\n className = '',\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n // Set once on mount: when true, WebGL is skipped and a static background stands in.\n const fallbackRef = useRef(false);\n\n // Effect 1: build WebGL context once, pause when offscreen / tab hidden.\n // When a pre-rendered image is available, low-power clients and\n // prefers-reduced-motion users get it as a zero-GPU-cost background.\n // The renderer is created once on mount; color changes are handled in Effect 2.\n // biome-ignore lint/plugin: creates the WebGL renderer once on mount and tears it down on unmount — imperative GPU setup with no derived-state form.\n // biome-ignore lint/correctness/useExhaustiveDependencies: mount-only WebGL setup; color/staticSrc changes are handled in Effect 2.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n if (isLowPowerClient() || prefersReducedMotion()) {\n fallbackRef.current = true;\n container.dataset.fallback = 'true';\n if (staticSrc) applyStaticBg(container, staticSrc);\n else container.style.background = fallbackGradient(color1, color2, color3);\n return;\n }\n return initGrainient(container);\n }, []); // renderer created once\n\n // Effect 2: sync props to uniforms — zero GPU cost, no teardown.\n // biome-ignore lint/plugin: imperatively writes props into mutable WebGL uniform objects (an external system); there is no render-time equivalent.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n // Fallback clients have no WebGL context; re-apply the background so a\n // later color/src change still reaches the static background.\n if (fallbackRef.current) {\n if (staticSrc) applyStaticBg(container, staticSrc);\n else container.style.background = fallbackGradient(color1, color2, color3);\n return;\n }\n\n const ctx = ctxMap.get(container);\n if (!ctx) return;\n\n const { program, renderer, mesh } = ctx;\n const u = program.uniforms;\n\n u.uTimeSpeed.value = timeSpeed;\n u.uColorBalance.value = colorBalance;\n u.uWarpStrength.value = warpStrength;\n u.uWarpFrequency.value = warpFrequency;\n u.uWarpSpeed.value = warpSpeed;\n u.uWarpAmplitude.value = warpAmplitude;\n u.uBlendAngle.value = blendAngle;\n u.uBlendSoftness.value = blendSoftness;\n u.uRotationAmount.value = rotationAmount;\n u.uNoiseScale.value = noiseScale;\n u.uGrainAmount.value = grainAmount;\n u.uGrainScale.value = grainScale;\n u.uGrainAnimated.value = grainAnimated ? 1.0 : 0.0;\n u.uContrast.value = contrast;\n u.uGamma.value = gamma;\n u.uSaturation.value = saturation;\n u.uCenterOffset.value = new Float32Array([centerX, centerY]);\n u.uZoom.value = zoom;\n u.uColor1.value = new Float32Array(hexToRgb(color1));\n u.uColor2.value = new Float32Array(hexToRgb(color2));\n u.uColor3.value = new Float32Array(hexToRgb(color3));\n\n // Under reduced motion the RAF loop never starts; draw one frame here so\n // the real colors appear (the first frame from setSize() is all-white).\n if (prefersReducedMotion()) renderer.render({ scene: mesh });\n }, [\n timeSpeed,\n colorBalance,\n warpStrength,\n warpFrequency,\n warpSpeed,\n warpAmplitude,\n blendAngle,\n blendSoftness,\n rotationAmount,\n noiseScale,\n grainAmount,\n grainScale,\n grainAnimated,\n contrast,\n gamma,\n saturation,\n centerX,\n centerY,\n zoom,\n color1,\n color2,\n color3,\n staticSrc,\n ]);\n\n return <div ref={containerRef} className={cn('grainient-container', className)} />;\n};\n\nexport default Grainient;\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Tracks a CSS media query, returning `true` when it matches.\n *\n * The default return before hydration is `false`; pass `defaultState`\n * to set a different initial value (e.g. `true` for dark-mode queries\n * whose SSR default is dark).\n */\nexport function useMediaQuery(query: string, defaultState = false): boolean {\n const [matches, setMatches] = useState(defaultState);\n\n // biome-ignore lint/plugin: subscribes to a matchMedia listener — an imperative side effect with no derived-state equivalent.\n useEffect(() => {\n const mql = globalThis.matchMedia(query);\n setMatches(mql.matches);\n\n const onChange = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n }, [query]);\n\n return matches;\n}\n","'use client';\n\nimport { useInView } from 'framer-motion';\nimport { type ReactNode, useLayoutEffect, useRef, useState } from 'react';\nimport { annotate } from 'rough-notation';\nimport type { RoughAnnotation } from 'rough-notation/lib/model';\nimport { useMediaQuery } from '../lib/use-media-query.js';\nimport { cn } from '../lib/utils.js';\n\ntype AnnotationAction = 'highlight' | 'underline' | 'box' | 'circle' | 'strike-through' | 'crossed-off' | 'bracket';\n\n/**\n * rough-notation writes the colour straight into the SVG's `stroke` presentation\n * attribute, where `var()` is never substituted — so a design token has to be\n * resolved against the live element before it is handed over.\n */\nfunction resolveColor(element: Element, color: string): string {\n if (!color.startsWith('var(')) return color;\n const token = color.slice(4, -1).trim();\n return globalThis.getComputedStyle(element).getPropertyValue(token).trim() || color;\n}\n\n/**\n * The site's breakpoints, ascending, in the `rem` units Tailwind emits them in —\n * so they keep tracking the root font size the way the CSS does. Mirrored from\n * the library's `@theme` block (`xs` and `md` are custom, the rest are defaults).\n */\nconst BREAKPOINTS = [\n ['xs', 30],\n ['sm', 40],\n ['md', 50],\n ['lg', 64],\n ['xl', 80],\n ['2xl', 96],\n] as const;\n\ntype Breakpoint = 'base' | (typeof BREAKPOINTS)[number][0];\n\n/** `'base'` is the implicit below-`xs` band — the widths no `min-width` query claims. */\nfunction getBreakpoint(): Breakpoint {\n let current: Breakpoint = 'base';\n for (const [name, rem] of BREAKPOINTS) {\n if (globalThis.matchMedia(`(min-width: ${rem}rem)`).matches) current = name;\n }\n return current;\n}\n\n/**\n * Call `listener` whenever the viewport crosses a breakpoint. Returns the\n * unsubscribe.\n *\n * The imperative counterpart to a `useBreakpoint` hook, for work that has to land\n * in the *same frame* as the layout change. Media-query change events fire during\n * the rendering steps, before `requestAnimationFrame` and before paint, so a\n * listener that writes to the DOM here is painted with the new layout rather than\n * one frame behind it.\n */\nfunction onBreakpointChange(listener: () => void): () => void {\n const queries = BREAKPOINTS.map(([, rem]) => globalThis.matchMedia(`(min-width: ${rem}rem)`));\n for (const query of queries) query.addEventListener('change', listener);\n return () => {\n for (const query of queries) query.removeEventListener('change', listener);\n };\n}\n\ntype HighlighterProps = {\n /** The words to annotate. Rendered inline, so they inherit the surrounding type. */\n children: ReactNode;\n className?: string;\n /**\n * Which marker stroke to draw.\n * @default 'highlight'\n */\n action?: AnnotationAction;\n /**\n * Stroke colour. Accepts a `var(--token)` string, which is resolved against\n * the live element and re-resolved whenever the theme flips.\n * @default 'var(--marker-highlight)'\n */\n color?: string;\n /** @default 1.5 */\n strokeWidth?: number;\n /** Milliseconds the stroke takes to draw itself on. @default 600 */\n animationDuration?: number;\n /**\n * Milliseconds to hold the stroke back before it starts drawing. Ignored under\n * reduced motion, where there is no draw-on to stagger.\n * @default 0\n */\n delay?: number;\n /** Passes over the same stroke, which is what makes it read as hand-drawn. @default 2 */\n iterations?: number;\n /** Pixels of slack between the text box and the stroke. @default 2 */\n padding?: number;\n /** Annotate every line the text wraps onto, rather than one box around all of them. @default true */\n multiline?: boolean;\n /** Hold the stroke back until the text scrolls into view. @default false */\n isView?: boolean;\n};\n\n/**\n * Draws a hand-drawn marker stroke over a word or phrase.\n *\n * The stroke is an SVG that rough-notation injects on the client, so the\n * exported HTML ships the bare text and nothing about the layout depends on JS\n * having run. Readers who ask for reduced motion get the stroke without the\n * draw-on animation.\n */\nexport function Highlighter({\n children,\n className,\n action = 'highlight',\n color = 'var(--marker-highlight)',\n strokeWidth = 1.5,\n animationDuration = 600,\n delay = 0,\n iterations = 2,\n padding = 2,\n multiline = true,\n isView = false,\n}: HighlighterProps) {\n const elementRef = useRef<HTMLSpanElement>(null);\n const isInView = useInView(elementRef, { once: true, margin: '-10%' });\n const reducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)');\n // Only a re-run trigger: the colour itself comes from the computed style, which\n // is already correct on first paint because the theme class is set before\n // hydration. The observer below bumps this whenever the class attribute flips.\n const [themeVersion, setThemeVersion] = useState(0);\n\n const shouldShow = !isView || isInView;\n\n // Theme flips land as a class swap on <html> (the `.dark` class toggled by the\n // theme provider), and rough-notation bakes the *resolved* token into the\n // SVG's stroke attribute — which does not track var(). Re-running the draw\n // effect with a freshly resolved colour is what repaints the stroke.\n useLayoutEffect(() => {\n const observer = new MutationObserver(() => setThemeVersion((v) => v + 1));\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });\n return () => observer.disconnect();\n }, []);\n\n // Imperatively injects and tears down a rough-notation SVG measured off live\n // DOM layout — a post-render side effect with no render-time equivalent.\n // biome-ignore lint/correctness/useExhaustiveDependencies: `themeVersion` is a redraw trigger, not a read value — the token resolves to a different colour per theme, so a flip has to repaint the stroke.\n useLayoutEffect(() => {\n const element = elementRef.current;\n if (!(shouldShow && element)) return;\n\n let annotation: RoughAnnotation | undefined;\n let untrack: (() => void) | undefined;\n\n const draw = () => {\n annotation = annotate(element, {\n type: action,\n color: resolveColor(element, color),\n strokeWidth,\n animationDuration,\n animate: !reducedMotion,\n iterations,\n padding,\n multiline,\n });\n annotation.show();\n\n // The wrapper below already carries the stroke wherever the page moves the\n // text, so the only thing left that can stale it is a change in the text's\n // own shape — which on a breakpoint-driven layout means a breakpoint. This\n // is subscribed directly rather than through a `useBreakpoint` hook because\n // a React state round-trip commits a frame or more after the browser has\n // painted the new layout, which is exactly the lag being chased out.\n // `show()` on a still-showing annotation re-renders un-animated, so the\n // stroke resizes without replaying the draw-on.\n let drawnAt = getBreakpoint();\n untrack = onBreakpointChange(() => {\n const current = getBreakpoint();\n if (current === drawnAt) return;\n drawnAt = current;\n annotation?.show();\n });\n };\n\n const startDelay = reducedMotion ? 0 : delay;\n const timer = startDelay > 0 ? globalThis.setTimeout(draw, startDelay) : undefined;\n if (timer === undefined) draw();\n\n return () => {\n globalThis.clearTimeout(timer);\n untrack?.();\n annotation?.remove();\n };\n }, [\n shouldShow,\n action,\n color,\n strokeWidth,\n animationDuration,\n delay,\n iterations,\n padding,\n multiline,\n reducedMotion,\n themeVersion,\n ]);\n\n // Two spans, and both earn their place.\n //\n // rough-notation injects its SVG as a *sibling* of the annotated element, laid\n // out `position: absolute; top: 0; left: 0`, with the stroke's coordinates baked\n // as offsets from wherever that SVG lands. Left alone it resolves against\n // whatever positioned ancestor it happens to find — for a centred, shrink-wrapped\n // page section, effectively the viewport — so every reflow that slid the text\n // sideways slid it out from under its own stroke, and only a redraw put it back.\n // The `relative` wrapper makes the SVG resolve against a box the text sits\n // inside instead, so the two now move as one and no listener is involved.\n //\n // The inner span stays plain `inline`, which is what makes `multiline` work:\n // `getClientRects()` on an inline reports one box per line, so wrapped text gets\n // a stroke per line rather than one slab drawn around the whole paragraph.\n return (\n <span className={cn('relative inline-block bg-transparent', className)}>\n <span ref={elementRef}>{children}</span>\n </span>\n );\n}\n\nexport type { AnnotationAction, HighlighterProps };\n","'use client';\n\nimport { type InputHTMLAttributes, type ReactNode, useId, useState } from 'react';\nimport { cn } from '../lib/utils.js';\n\nconst FIELD_BORDER: Record<string, string> = {\n idle: 'border-(--color-border)',\n focused: 'border-(--color-foreground)/40',\n error: 'border-(--color-destructive)',\n};\n\nconst FIELD_HEIGHT: Record<string, string> = {\n sm: 'h-8',\n md: 'h-9',\n lg: 'h-11',\n};\n\nconst FIELD_SHAPE: Record<string, string> = {\n rounded: 'rounded-lg',\n pill: 'rounded-full',\n};\n\nconst INPUT_SIZE: Record<string, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n};\n\nconst INPUT_PAD: Record<string, string> = {\n sm: 'px-2.5',\n md: 'px-3',\n lg: 'px-3.5',\n};\n\nexport type InputProps = {\n label?: string;\n error?: string | boolean;\n hint?: string;\n leftAdornment?: ReactNode;\n rightAdornment?: ReactNode;\n size?: 'sm' | 'md' | 'lg';\n shape?: 'rounded' | 'pill';\n className?: string;\n inputClassName?: string;\n inputType?: InputHTMLAttributes<HTMLInputElement>['type'];\n} & Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>;\n\nexport function Input({\n label,\n error,\n hint,\n leftAdornment,\n rightAdornment,\n size = 'md',\n shape = 'rounded',\n className,\n inputClassName,\n inputType = 'text',\n id: idProp,\n onFocus,\n onBlur,\n disabled,\n autoFocus,\n ...inputProps\n}: InputProps) {\n const autoId = useId();\n const id = idProp ?? autoId;\n const [focused, setFocused] = useState(false);\n const hasError = Boolean(error);\n const errorMessage = typeof error === 'string' ? error : null;\n const state = hasError ? 'error' : focused ? 'focused' : 'idle';\n const hasLeft = Boolean(leftAdornment);\n const hasRight = Boolean(rightAdornment);\n\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n {label ? (\n <label htmlFor={id} className=\"px-1 font-medium text-(--color-foreground) text-sm\">\n {label}\n </label>\n ) : null}\n\n <div\n className={cn(\n 'relative flex flex-row items-center overflow-hidden border',\n FIELD_BORDER[state],\n FIELD_HEIGHT[size],\n FIELD_SHAPE[shape],\n disabled && 'opacity-60',\n )}\n >\n {hasLeft ? (\n <div className=\"pointer-events-none absolute top-0 bottom-0 left-3 z-10 flex items-center justify-center\">\n {leftAdornment}\n </div>\n ) : null}\n\n <input\n id={id}\n type={inputType}\n disabled={disabled}\n // biome-ignore lint/a11y/noAutofocus: forwarded HTML attribute — callers decide whether to autofocus\n autoFocus={autoFocus}\n onFocus={(event_) => {\n setFocused(true);\n onFocus?.(event_);\n }}\n onBlur={(event_) => {\n setFocused(false);\n onBlur?.(event_);\n }}\n className={cn(\n 'h-full min-w-0 flex-1 bg-transparent text-(--color-foreground) outline-none',\n INPUT_SIZE[size],\n hasLeft ? 'pl-10' : INPUT_PAD[size],\n hasRight ? 'pr-10' : INPUT_PAD[size],\n inputClassName,\n )}\n {...inputProps}\n />\n\n {hasRight ? (\n <div className=\"pointer-events-none absolute top-0 right-3 bottom-0 z-10 flex items-center justify-center\">\n {rightAdornment}\n </div>\n ) : null}\n </div>\n\n {errorMessage ? (\n <p role=\"alert\" className=\"px-1 text-(--color-destructive) text-xs\">\n {errorMessage}\n </p>\n ) : hint ? (\n <p className=\"px-1 text-(--color-muted-foreground) text-xs\">{hint}</p>\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { LiquidMetal as LiquidMetalShader } from '@paper-design/shaders-react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/* ── Shader wrapper ────────────────────────────────────── */\n\nexport type LiquidMetalProps = {\n /** Base background color of the liquid metal. */\n colorBack?: string;\n /** Tint / highlight color for the chrome effect. */\n colorTint?: string;\n /** Animation speed (0.1–2.0 recommended). */\n speed?: number;\n /** Pattern stripe density (1–10). */\n repetition?: number;\n /** Wave distortion amount (0–1). */\n distortion?: number;\n /** Texture zoom (0.01–4). */\n scale?: number;\n className?: string;\n style?: CSSProperties;\n};\n\n/**\n * Full-bleed animated liquid-metal shader. Absolutely positioned to fill its\n * nearest positioned ancestor; the WebGL canvas is decorative, so it is hidden\n * from assistive tech and never intercepts pointer events.\n */\nexport function LiquidMetal({\n colorBack = '#aaaaac',\n colorTint = '#ffffff',\n speed = 0.5,\n repetition = 4,\n distortion = 0.1,\n scale = 1,\n className,\n style,\n}: LiquidMetalProps) {\n return (\n <div aria-hidden={true} className={cn('pointer-events-none absolute inset-0 z-0 overflow-hidden', className)} style={style}>\n <LiquidMetalShader\n colorBack={colorBack}\n colorTint={colorTint}\n speed={speed}\n repetition={repetition}\n distortion={distortion}\n softness={0}\n shiftRed={0.3}\n shiftBlue={-0.3}\n angle={45}\n shape=\"none\"\n scale={scale}\n fit=\"cover\"\n style={{ width: '100%', height: '100%' }}\n />\n </div>\n );\n}\n","import type * as React from 'react';\n\nexport function ChevronDownIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" {...props}>\n <path d=\"M1 3.5L5 7.5L9 3.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" {...props}>\n <path d=\"M3.5 1L7.5 5L3.5 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n );\n}\n\nexport function ArrowSvg(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"20\" height=\"10\" viewBox=\"0 0 20 10\" fill=\"none\" {...props}>\n <path\n d=\"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 className=\"fill-(--popup-surface,var(--surface-3))\"\n />\n <path\n d=\"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 className=\"fill-border\"\n />\n <path\n d=\"M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z\"\n className=\"fill-border\"\n />\n </svg>\n );\n}\n","import type { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport { cva } from 'class-variance-authority';\nimport type * as React from 'react';\nimport type { SurfaceLevel } from '../lib/surface.js';\n\ntype PositionerProps = React.ComponentProps<typeof NavigationMenuPrimitive.Positioner>;\n\nexport const navigationMenuTriggerStyle = cva(\n 'box-border flex items-center justify-center gap-1.5 h-10 px-2.5 xs:px-3 m-0 rounded-md text-foreground font-medium !text-[15px] leading-6 select-none no-underline hover:text-foreground data-[popup-open]:bg-black/[0.07] dark:data-[popup-open]:bg-white/[0.07] data-[popup-open]:text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-1 focus-visible:outline-ring focus-visible:relative',\n);\n\nexport const navigationMenuSubTriggerStyle = cva(\n 'w-full text-left relative block rounded-md p-2.5 xs:p-3 no-underline text-inherit hover:bg-black/[0.07] dark:hover:bg-white/[0.07] hover:text-foreground active:bg-black/[0.11] dark:active:bg-white/[0.11] focus-visible:relative focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-1 focus-visible:outline-ring data-[popup-open]:bg-black/[0.07] dark:data-[popup-open]:bg-white/[0.07] data-[popup-open]:text-foreground',\n);\n\nexport interface NavigationMenuProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Root> {\n side?: PositionerProps['side'];\n sideOffset?: PositionerProps['sideOffset'];\n align?: PositionerProps['align'];\n alignOffset?: PositionerProps['alignOffset'];\n collisionPadding?: PositionerProps['collisionPadding'];\n collisionBoundary?: PositionerProps['collisionBoundary'];\n positionMethod?: PositionerProps['positionMethod'];\n arrow?: boolean;\n /** Surface elevation level (1-8) for the bar. Defaults to 2 — subtle toolbar above the page. */\n level?: SurfaceLevel;\n /** Shadow weight (1-8) for the bar. Defaults to 2. */\n shadowLevel?: SurfaceLevel;\n}\n\nexport interface NavigationMenuLinkProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Link> {\n /**\n * When true, applies trigger button styling for top-level navigation links\n */\n standalone?: boolean;\n}\n\nexport interface NavigationMenuViewportProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Viewport> {\n side?: PositionerProps['side'];\n sideOffset?: PositionerProps['sideOffset'];\n align?: PositionerProps['align'];\n alignOffset?: PositionerProps['alignOffset'];\n collisionPadding?: PositionerProps['collisionPadding'];\n collisionBoundary?: PositionerProps['collisionBoundary'];\n positionMethod?: PositionerProps['positionMethod'];\n arrow?: boolean;\n}\n\nexport interface NavigationMenuSubProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Root> {\n side?: PositionerProps['side'];\n sideOffset?: PositionerProps['sideOffset'];\n align?: PositionerProps['align'];\n alignOffset?: PositionerProps['alignOffset'];\n arrow?: boolean;\n}\n","import { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport type * as React from 'react';\nimport { solidSurface } from '../lib/surface.js';\nimport { cn, validCssVars } from '../lib/utils.js';\nimport { ArrowSvg, ChevronDownIcon, ChevronRightIcon } from './navigation-menu-icons.js';\nimport {\n type NavigationMenuLinkProps,\n type NavigationMenuProps,\n type NavigationMenuSubProps,\n type NavigationMenuViewportProps,\n navigationMenuSubTriggerStyle,\n navigationMenuTriggerStyle,\n} from './navigation-menu-styles.js';\n\nfunction NavigationMenu({\n className,\n children,\n side,\n sideOffset = 10,\n align,\n alignOffset,\n collisionPadding = { top: 5, bottom: 5, left: 20, right: 20 },\n collisionBoundary,\n arrow = false,\n positionMethod = 'fixed',\n level = 2,\n shadowLevel = 2,\n ...props\n}: NavigationMenuProps) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-level={level}\n className={cn('min-w-max rounded-md p-1 text-foreground', solidSurface(level, shadowLevel), className)}\n {...props}\n >\n {children}\n <NavigationMenuViewport\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n collisionPadding={collisionPadding}\n collisionBoundary={collisionBoundary}\n arrow={arrow}\n positionMethod={positionMethod}\n />\n </NavigationMenuPrimitive.Root>\n );\n}\n\nfunction NavigationMenuList({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return <NavigationMenuPrimitive.List data-slot=\"navigation-menu-list\" className={cn('relative flex', className)} {...props} />;\n}\n\nfunction NavigationMenuItem({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return <NavigationMenuPrimitive.Item data-slot=\"navigation-menu-item\" className={cn('relative', className)} {...props} />;\n}\n\nfunction NavigationMenuTrigger({ className, children, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(navigationMenuTriggerStyle(), className)}\n {...props}\n >\n {children}\n <NavigationMenuIcon />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuIcon({\n className,\n render = <ChevronDownIcon />,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Icon>) {\n return (\n <NavigationMenuPrimitive.Icon\n className={cn('transition-transform duration-200 ease-in-out data-[popup-open]:rotate-180', className)}\n render={render}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuSubTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-sub-trigger\"\n className={cn(navigationMenuSubTriggerStyle(), className)}\n {...props}\n >\n {children}\n <NavigationMenuPrimitive.Icon\n className=\"absolute top-1/2 right-2.5 flex h-2.5 w-2.5 -translate-y-1/2 items-center justify-center transition-transform duration-200 ease-in-out data-[popup-open]:rotate-180\"\n render={<ChevronRightIcon />}\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'h-full w-[calc(100vw-2.5rem)] p-4 sm:w-max',\n // Transitions for opacity/transform/filter\n 'transition-[opacity,transform,filter,scale,translate] duration-(--duration) ease-(--easing)',\n // Starting/ending opacity\n 'data-ending-style:opacity-0 data-starting-style:opacity-0',\n // Direction-aware slide (starting)\n 'data-starting-style:data-[activation-direction=left]:-translate-x-1/2',\n 'data-starting-style:data-[activation-direction=right]:translate-x-1/2',\n // Direction-aware slide (ending)\n 'data-ending-style:data-[activation-direction=left]:translate-x-1/2',\n 'data-ending-style:data-[activation-direction=right]:-translate-x-1/2',\n // Blur effect during transitions\n 'data-ending-style:blur-[4px] data-starting-style:blur-[4px]',\n // scale effect during transitions\n 'data-ending-style:scale-97 data-starting-style:scale-97',\n // Motion reduce support\n 'motion-reduce:transition-none',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuLink({ className, standalone, ...props }: NavigationMenuLinkProps) {\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n standalone\n ? navigationMenuTriggerStyle()\n : 'block rounded-md p-2.5 xs:p-3 text-inherit no-underline duration-150 hover:text-foreground hover:duration-0 focus-visible:relative focus-visible:outline-2 focus-visible:outline-ring focus-visible:-outline-offset-1',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuBackdrop({ ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Backdrop>) {\n return <NavigationMenuPrimitive.Backdrop data-slot=\"navigation-menu-backdrop\" {...props} />;\n}\n\nfunction NavigationMenuPortal({ ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Portal>) {\n return <NavigationMenuPrimitive.Portal data-slot=\"navigation-menu-portal\" {...props} />;\n}\n\nfunction NavigationMenuArrow({ ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Arrow>) {\n return (\n <NavigationMenuPrimitive.Arrow\n className=\"flex transition-[left] duration-[var(--duration)] ease-[var(--easing)] data-[side=bottom]:top-[-8px] data-[side=left]:right-[-13px] data-[side=top]:bottom-[-8px] data-[side=right]:left-[-13px] data-[side=left]:rotate-90 data-[side=right]:-rotate-90 data-[side=top]:rotate-180\"\n {...props}\n >\n <ArrowSvg />\n </NavigationMenuPrimitive.Arrow>\n );\n}\n\nfunction NavigationMenuViewport({\n className,\n children,\n side,\n sideOffset,\n align,\n alignOffset,\n collisionPadding,\n collisionBoundary,\n arrow = false,\n positionMethod = 'fixed',\n ...props\n}: NavigationMenuViewportProps) {\n return (\n <NavigationMenuPortal>\n <NavigationMenuPrimitive.Positioner\n data-slot=\"navigation-menu-positioner\"\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n collisionPadding={collisionPadding}\n collisionBoundary={collisionBoundary}\n positionMethod={positionMethod}\n className=\"z-50 box-border h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-(--duration) ease-(--easing) before:absolute before:content-[''] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=left]:before:top-0 data-[side=right]:before:top-0 data-[side=bottom]:before:right-0 data-[side=left]:before:-right-2.5 data-[side=top]:before:right-0 data-[side=left]:before:bottom-0 data-[side=right]:before:bottom-0 data-[side=top]:before:-bottom-2.5 data-[side=bottom]:before:left-0 data-[side=right]:before:-left-2.5 data-[side=top]:before:left-0 data-[side=bottom]:before:h-2.5 data-[side=top]:before:h-2.5 data-[side=left]:before:w-2.5 data-[side=right]:before:w-2.5\"\n style={validCssVars({ '--duration': '0.35s', '--easing': 'cubic-bezier(0.22, 1, 0.36, 1)' })}\n >\n <NavigationMenuPrimitive.Popup\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) overflow-hidden rounded-md text-foreground transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-starting-style:scale-90 data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-150',\n solidSurface(3, 3),\n )}\n >\n {arrow ? <NavigationMenuArrow /> : null}\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn('relative h-full w-full overflow-hidden', className)}\n {...props}\n >\n {children}\n </NavigationMenuPrimitive.Viewport>\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPortal>\n );\n}\n\nfunction NavigationMenuSub({\n className,\n children,\n orientation = 'vertical',\n side = 'right',\n sideOffset = 24,\n align = 'end',\n alignOffset = -24,\n arrow = false,\n ...props\n}: NavigationMenuSubProps) {\n return (\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu-sub\"\n className={cn('', className)}\n orientation={orientation}\n {...props}\n >\n {children}\n <NavigationMenuPortal>\n <NavigationMenuPrimitive.Positioner\n data-slot=\"navigation-menu-sub-positioner\"\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n align={align}\n side={side}\n className=\"box-border h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-(--duration) ease-(--easing) before:absolute before:content-[''] data-instant:transition-none data-[side=bottom]:before:-top-2.5 data-[side=left]:before:top-0 data-[side=right]:before:top-0 data-[side=bottom]:before:right-0 data-[side=left]:before:-right-2.5 data-[side=top]:before:right-0 data-[side=left]:before:bottom-0 data-[side=right]:before:bottom-0 data-[side=top]:before:-bottom-2.5 data-[side=bottom]:before:left-0 data-[side=right]:before:-left-2.5 data-[side=top]:before:left-0 data-[side=bottom]:before:h-2.5 data-[side=top]:before:h-2.5 data-[side=left]:before:w-2.5 data-[side=right]:before:w-2.5\"\n style={validCssVars({ '--duration': '0.35s', '--easing': 'cubic-bezier(0.22, 1, 0.36, 1)' })}\n >\n <NavigationMenuPrimitive.Popup\n data-slot=\"navigation-menu-sub-content\"\n className={cn(\n 'relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) overflow-hidden rounded-md text-foreground transition-[opacity,transform,width,height,scale,translate] duration-(--duration) ease-(--easing) data-ending-style:scale-90 data-starting-style:scale-90 data-ending-style:opacity-0 data-starting-style:opacity-0 data-ending-style:duration-150',\n solidSurface(5, 5),\n )}\n >\n {arrow ? <NavigationMenuArrow /> : null}\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-sub-viewport\"\n className=\"relative h-full w-full overflow-hidden\"\n />\n </NavigationMenuPrimitive.Popup>\n </NavigationMenuPrimitive.Positioner>\n </NavigationMenuPortal>\n </NavigationMenuPrimitive.Root>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuArrow,\n NavigationMenuBackdrop,\n NavigationMenuContent,\n NavigationMenuIcon,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n NavigationMenuPortal,\n NavigationMenuSub,\n NavigationMenuSubTrigger,\n NavigationMenuTrigger,\n NavigationMenuViewport,\n};\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { Input, type InputProps } from './input.js';\n\nexport type PasswordInputProps = Omit<InputProps, 'rightAdornment' | 'inputType'> & {\n inputType?: 'password' | 'new-password';\n};\n\nexport function PasswordInput({ inputType = 'password', ...props }: PasswordInputProps) {\n const [visible, setVisible] = useState(false);\n\n const toggle = useCallback(() => setVisible((v) => !v), []);\n\n const eye = (\n <button\n type=\"button\"\n onClick={toggle}\n className=\"pointer-events-auto cursor-pointer text-(--color-muted-foreground) hover:text-(--color-foreground)\"\n aria-label={visible ? 'Hide password' : 'Show password'}\n tabIndex={-1}\n >\n {visible ? <EyeOffIcon className=\"size-5\" /> : <EyeIcon className=\"size-5\" />}\n </button>\n );\n\n return (\n <Input\n {...props}\n inputType={visible ? 'text' : 'password'}\n rightAdornment={eye}\n autoComplete={inputType === 'new-password' ? 'new-password' : 'current-password'}\n />\n );\n}\n\nfunction EyeIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction EyeOffIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\" />\n <path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\" />\n <path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\" />\n <path d=\"m2 2 20 20\" />\n </svg>\n );\n}\n","'use client';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { ButtonHTMLAttributes, RefObject } from 'react';\nimport { cn } from '../lib/utils.js';\n\nconst rainbowButtonVariants = cva(\n cn(\n 'relative cursor-pointer group transition-transform animate-rainbow',\n 'inline-flex items-center justify-center gap-2 shrink-0',\n 'rounded-sm outline-none focus-visible:ring-[3px] aria-invalid:border-destructive',\n 'text-sm font-medium whitespace-nowrap',\n 'disabled:pointer-events-none disabled:opacity-50',\n \"[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0\",\n ),\n {\n variants: {\n variant: {\n default:\n 'border-0 bg-[linear-gradient(#121213,#121213),linear-gradient(#121213_50%,rgba(18,18,19,0.6)_80%,rgba(18,18,19,0)),linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))] bg-[length:200%] text-primary-foreground [background-clip:padding-box,border-box,border-box] [background-origin:border-box] [border:calc(0.125rem)_solid_transparent] before:absolute before:bottom-[-20%] before:left-1/2 before:z-0 before:h-1/5 before:w-3/5 before:-translate-x-1/2 before:animate-rainbow before:bg-[linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))] before:bg-[length:200%] before:[filter:blur(0.75rem)] dark:bg-[linear-gradient(#fff,#fff),linear-gradient(#fff_50%,rgba(255,255,255,0.6)_80%,rgba(0,0,0,0)),linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))]',\n outline:\n 'border border-input border-b-transparent bg-[linear-gradient(#ffffff,#ffffff),linear-gradient(#ffffff_50%,rgba(18,18,19,0.6)_80%,rgba(18,18,19,0)),linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))] bg-[length:200%] text-accent-foreground [background-clip:padding-box,border-box,border-box] [background-origin:border-box] before:absolute before:bottom-[-20%] before:left-1/2 before:z-0 before:h-1/5 before:w-3/5 before:-translate-x-1/2 before:animate-rainbow before:bg-[linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))] before:bg-[length:200%] before:[filter:blur(0.75rem)] dark:bg-[linear-gradient(#0a0a0a,#0a0a0a),linear-gradient(#0a0a0a_50%,rgba(255,255,255,0.6)_80%,rgba(0,0,0,0)),linear-gradient(90deg,var(--color-rainbow-1),var(--color-rainbow-5),var(--color-rainbow-3),var(--color-rainbow-4),var(--color-rainbow-2))]',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-11 rounded-md px-8',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport interface RainbowButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof rainbowButtonVariants> {\n asChild?: boolean;\n ref?: RefObject<HTMLButtonElement | null>;\n}\n\nexport function RainbowButton({ className, variant, size, asChild = false, ref, ...props }: RainbowButtonProps) {\n const Comp = asChild ? Slot : 'button';\n return <Comp data-slot=\"button\" className={cn(rainbowButtonVariants({ variant, size, className }))} ref={ref} {...props} />;\n}\n\nRainbowButton.displayName = 'RainbowButton';\n\nexport { rainbowButtonVariants };\n","'use client';\n\nimport type { ChangeEvent } from 'react';\nimport { useCallback } from 'react';\n\nexport type Tick = { value: number; label: string };\n\nexport type RangeSliderProps = {\n label: string;\n value: number;\n /** Allowed values, ascending. The first and last double as the bounds. */\n steps: number[];\n ticks: Tick[];\n valueLabel: string;\n onChange: (v: number) => void;\n};\n\n/** Index of the grid step nearest `value`, so an off-grid value still resolves. */\nfunction nearestIndex(steps: number[], value: number) {\n return steps.reduce((best, s, i) => (Math.abs(s - value) < Math.abs(steps[best]! - value) ? i : best), 0);\n}\n\n/**\n * Slider over an explicit list of allowed values rather than a uniform `step`,\n * so a grid whose span isn't a whole multiple of its increment can still reach\n * its stated ceiling.\n */\nexport function RangeSlider({ label, value, steps, ticks, valueLabel, onChange }: RangeSliderProps) {\n const min = steps[0]!;\n const max = steps.at(-1) ?? min;\n const pct = ((value - min) / (max - min)) * 100;\n const index = nearestIndex(steps, value);\n\n const handleChange = useCallback(\n (event_: ChangeEvent<HTMLInputElement>) => onChange(steps[Number(event_.target.value)]!),\n [onChange, steps],\n );\n\n return (\n <div className=\"w-full\">\n <div className=\"mb-5 flex items-baseline justify-between gap-2\">\n <p className=\"font-semibold text-[15px] text-(--color-foreground)\">{label}</p>\n <p className=\"font-bold font-numeric text-[20px] text-(--color-foreground) tabular-nums\">{valueLabel}</p>\n </div>\n\n <div className=\"relative\" style={{ height: 20 }}>\n <div className=\"absolute inset-x-0 top-1/2 h-1.5 -translate-y-1/2 rounded-full bg-(--color-border)\" />\n <div\n className=\"pointer-events-none absolute top-1/2 left-0 h-1.5 -translate-y-1/2 rounded-full bg-(--color-foreground)\"\n style={{ width: `${pct}%` }}\n />\n <input\n type=\"range\"\n min={0}\n max={steps.length - 1}\n step={1}\n value={index}\n onChange={handleChange}\n className=\"peer absolute inset-0 z-10 h-full w-full cursor-pointer opacity-0\"\n aria-label={label}\n aria-valuetext={valueLabel}\n />\n <div\n className=\"pointer-events-none absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-(--color-foreground) peer-focus-visible:outline-2 peer-focus-visible:outline-(--color-foreground) peer-focus-visible:outline-offset-2\"\n style={{\n left: `${pct}%`,\n width: 16,\n height: 16,\n boxShadow: '0 2px 8px rgba(0,0,0,0.15)',\n }}\n />\n </div>\n\n <div className=\"relative mt-2\" style={{ height: 16 }}>\n {ticks.map((tick, i) => {\n const tp = ((tick.value - min) / (max - min)) * 100;\n const isFirst = i === 0;\n const isLast = i === ticks.length - 1;\n let left: number | string | undefined = `${tp}%`;\n if (isFirst) left = 0;\n else if (isLast) left = undefined;\n return (\n <span\n key={tick.value}\n className=\"absolute font-numeric text-(--color-muted-foreground) text-[11px] tabular-nums\"\n style={{\n left,\n right: isLast ? 0 : undefined,\n transform: isFirst || isLast ? undefined : 'translateX(-50%)',\n }}\n >\n {tick.label}\n </span>\n );\n })}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { type ReactNode, useSyncExternalStore } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/* ── One-shot ticking store ─────────────────────────────── */\n\nlet tick = 0;\nconst listeners = new Set<() => void>();\nlet timer: ReturnType<typeof setInterval> | null = null;\n\nfunction subscribe(onChange: () => void): () => void {\n listeners.add(onChange);\n if (timer === null)\n timer = setInterval(() => {\n tick += 1;\n for (const l of listeners) l();\n }, ROTATE_MS);\n return () => {\n listeners.delete(onChange);\n if (listeners.size === 0 && timer !== null) {\n clearInterval(timer);\n timer = null;\n }\n };\n}\n\nconst getSnapshot = () => tick;\nconst getServerSnapshot = () => 0;\n\n/* ── Component ──────────────────────────────────────────── */\n\nconst ROTATE_MS = 4000;\n\nexport type BadgeEntry = {\n icon: ReactNode;\n label: string;\n};\n\nexport type RollingBadgeProps = {\n badges: BadgeEntry[];\n className?: string;\n};\n\nexport function RollingBadge({ badges, className }: RollingBadgeProps) {\n const index = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) % badges.length;\n const badge = badges[index];\n\n if (badges.length === 0 || !badge) return null;\n\n return (\n <motion.div\n layout={true}\n className={cn(\n 'relative inline-flex h-8 items-center overflow-hidden rounded-full border border-(--color-border) bg-background px-3.5 shadow-sm',\n className,\n )}\n >\n <AnimatePresence initial={false} mode=\"popLayout\">\n <motion.span\n key={index}\n layout=\"position\"\n initial={{ y: '120%', opacity: 0 }}\n animate={{ y: '0%', opacity: 1 }}\n exit={{ y: '-120%', opacity: 0 }}\n transition={{\n type: 'spring',\n stiffness: 320,\n damping: 32,\n }}\n className=\"flex items-center gap-1.5 whitespace-nowrap font-medium text-[12.5px]\"\n >\n <span className=\"h-3.5 w-3.5 shrink-0\" aria-hidden={true}>\n {badge.icon}\n </span>\n {badge.label}\n </motion.span>\n </AnimatePresence>\n </motion.div>\n );\n}\n","import type * as React from 'react';\nimport { cn } from '../lib/utils.js';\n\n/**\n * Soft emerald pill for money-saved callouts — the per-provider delta in the\n * estimate chart.\n *\n * The wording differs per call site, so the label stays in `children`; only the\n * pill treatment is shared.\n */\nexport function SavingsBadge({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n className={cn(\n 'rounded-full bg-emerald-500/15 px-2.5 py-0.5 font-numeric font-semibold text-[11px] text-emerald-500 tabular-nums',\n className,\n )}\n {...props}\n />\n );\n}\n","'use client';\n\nimport type { HTMLAttributes } from 'react';\nimport { cn, validCssVars } from '../lib/utils.js';\n\nexport interface ShineBorderProps extends HTMLAttributes<HTMLDivElement> {\n /** Width of the border in pixels. @default 1 */\n borderWidth?: number;\n /** Duration of the animation in seconds. @default 14 */\n duration?: number;\n /** Color of the border — single color or array of colors. @default \"#000000\" */\n shineColor?: string | string[];\n}\n\n/**\n * An animated background-border effect that sits absolutely on top of\n * its positioned parent. Add `relative` to the parent container.\n */\nexport function ShineBorder({\n borderWidth = 1,\n duration = 14,\n shineColor = '#000000',\n className,\n style,\n ...props\n}: ShineBorderProps) {\n return (\n <div\n style={validCssVars({\n '--border-width': `${borderWidth}px`,\n '--duration': `${duration}s`,\n backgroundImage: `radial-gradient(transparent,transparent, ${\n Array.isArray(shineColor) ? shineColor.join(',') : shineColor\n },transparent,transparent)`,\n backgroundSize: '300% 300%',\n mask: 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n WebkitMask: 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n WebkitMaskComposite: 'xor',\n maskComposite: 'exclude',\n padding: 'var(--border-width)',\n ...style,\n })}\n className={cn(\n 'pointer-events-none absolute inset-0 size-full rounded-[inherit] will-change-[background-position] motion-safe:animate-shine',\n className,\n )}\n {...props}\n />\n );\n}\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { type ReactNode, useEffect, useState } from 'react';\nimport { useMediaQuery } from '../lib/use-media-query.js';\nimport { cn } from '../lib/utils.js';\n\n/** Four-pointed star, drawn once and reused by every sparkle. */\nconst STAR_PATH =\n 'M9.82531 0.843845C10.0553 0.215178 10.9446 0.215178 11.1746 0.843845L11.8618 2.72026C12.4006 4.19229 12.3916 6.39157 13.5 7.5C14.6084 8.60843 16.8077 8.59935 18.2797 9.13822L20.1561 9.82534C20.7858 10.0553 20.7858 10.9447 20.1561 11.1747L18.2797 11.8618C16.8077 12.4007 14.6084 12.3916 13.5 13.5C12.3916 14.6084 12.4006 16.8077 11.8618 18.2798L11.1746 20.1562C10.9446 20.7858 10.0553 20.7858 9.82531 20.1562L9.13819 18.2798C8.59932 16.8077 8.60843 14.6084 7.5 13.5C6.39157 12.3916 4.19225 12.4007 2.72023 11.8618L0.843814 11.1747C0.215148 10.9447 0.215148 10.0553 0.843814 9.82534L2.72023 9.13822C4.19225 8.59935 6.39157 8.60843 7.5 7.5C8.60843 6.39157 8.59932 4.19229 9.13819 2.72026L9.82531 0.843845Z';\n\nconst DEFAULT_COLORS = {\n first: 'var(--color-accent-brand)',\n second: 'var(--color-accent-brand-soft)',\n};\n\ntype Sparkle = {\n /** Position within the text's box, as percentages. */\n x: string;\n y: string;\n color: string;\n /** Offsets the twinkle so the group never pulses in unison. */\n delay: number;\n scale: number;\n /** `performance.now()` timestamp after which this sparkle is replaced by a fresh one. */\n expiresAt: number;\n};\n\nfunction SparkleStar({ x, y, color, delay, scale }: Omit<Sparkle, 'expiresAt'>) {\n return (\n <motion.svg\n className=\"pointer-events-none absolute z-20\"\n initial={{ opacity: 0, left: x, top: y }}\n animate={{\n opacity: [0, 1, 0],\n scale: [0, scale, 0],\n rotate: [75, 120, 150],\n }}\n transition={{\n duration: 0.8,\n repeat: Number.POSITIVE_INFINITY,\n delay,\n }}\n width=\"21\"\n height=\"21\"\n viewBox=\"0 0 21 21\"\n aria-hidden={true}\n >\n <path d={STAR_PATH} fill={color} />\n </motion.svg>\n );\n}\n\nexport type SparklesTextProps = {\n /** The text to sparkle. Rendered inline, so it inherits the surrounding type. */\n children: ReactNode;\n className?: string;\n /** How many sparkles orbit the text at once. @default 10 */\n sparklesCount?: number;\n /** The two colors sparkles alternate between. */\n colors?: { first: string; second: string };\n};\n\n/**\n * Wraps a word or phrase in continuously respawning sparkles.\n *\n * Sparkles are generated on the client only — the exported HTML ships the bare\n * text, so nothing about the layout depends on JS having run. Readers who ask\n * for reduced motion get that same bare text.\n */\nexport function SparklesText({ children, className, sparklesCount = 10, colors = DEFAULT_COLORS }: SparklesTextProps) {\n const reducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)');\n const [sparkles, setSparkles] = useState<Sparkle[]>([]);\n const { first, second } = colors;\n\n // biome-ignore lint/plugin: spawns and retires sparkles on a timer — an imperative animation loop with no derived-state equivalent.\n useEffect(() => {\n if (reducedMotion) {\n setSparkles([]);\n return;\n }\n\n const spawn = (): Sparkle => ({\n x: `${Math.random() * 100}%`,\n y: `${Math.random() * 100}%`,\n color: Math.random() > 0.5 ? first : second,\n delay: Math.random() * 2,\n scale: Math.random() + 0.3,\n expiresAt: performance.now() + (Math.random() * 10 + 5) * 1000,\n });\n\n setSparkles(Array.from({ length: sparklesCount }, spawn));\n\n const interval = setInterval(() => {\n setSparkles((current) => {\n const now = performance.now();\n if (!current.some((sparkle) => sparkle.expiresAt <= now)) return current;\n return current.map((sparkle) => (sparkle.expiresAt <= now ? spawn() : sparkle));\n });\n }, 500);\n\n return () => clearInterval(interval);\n }, [first, second, sparklesCount, reducedMotion]);\n\n return (\n <span className={cn('relative inline-block', className)}>\n {sparkles.map((sparkle) => (\n <SparkleStar key={`${sparkle.x}-${sparkle.y}-${sparkle.expiresAt}`} {...sparkle} />\n ))}\n {children}\n </span>\n );\n}\n","'use client';\n\nimport { motion, useReducedMotion, useSpring, useTransform } from 'framer-motion';\nimport { type MouseEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport { cn } from '../lib/utils.js';\n\n/* ── Tabs ───────────────────────────────────────────────────────────────\n * A segmented control whose active pill slides between tabs and, while an\n * inactive tab is hovered, stretches (\"pulls\") toward the cursor for a\n * magnetic feel. A clipped, inverted duplicate of the labels stays glued to\n * the base labels underneath, so text flips colour exactly as the pill\n * passes over it — including the partial reveal during the pull.\n *\n * Single-select only: it switches one value, so the buttons carry\n * `aria-pressed` rather than the tab/tabpanel roles, which would promise\n * associated panels and arrow-key navigation this control doesn't provide.\n */\n\n/** One segment. `id` is the value handed back to `onChange`. */\nexport type Tab<T extends string = string> = {\n id: T;\n label: string;\n badge?: string;\n};\n\n// How far the pill reaches toward the hovered tab (fraction of the gap).\nconst PULL = 0.035;\n\ntype Rect = { left: number; width: number };\n\n// Target pill rect: the active tab at rest, or stretched toward a hovered\n// neighbour so its leading edge reaches partway across the gap.\nfunction pillTarget(activeIdx: number, hoverIdx: number | null, rects: Rect[], pull: number): Rect {\n const active = rects[activeIdx];\n if (!active) throw new Error(`No rect at index ${activeIdx}`);\n if (hoverIdx === null || hoverIdx === activeIdx) return active;\n\n const hover = rects[hoverIdx];\n if (!hover) return active;\n const activeRight = active.left + active.width;\n const hoverRight = hover.left + hover.width;\n\n const left = Math.min(active.left, active.left + (hover.left - active.left) * pull);\n const right = Math.max(activeRight, activeRight + (hoverRight - activeRight) * pull);\n return { left, width: right - left };\n}\n\n// Shared box so the base labels and the inverted duplicate measure identically.\nconst labelBox = 'flex items-center gap-2.5 px-5 py-1.5 font-semibold text-[13px]';\nconst badgeBox = 'font-bold text-(--color-accent-brand-soft) text-[11px] whitespace-nowrap';\n\nexport type TabsProps<T extends string> = {\n tabs: readonly Tab<T>[];\n value: T;\n onChange: (v: T) => void;\n /** Accessible name for the group, e.g. \"Billing period\". */\n label: string;\n className?: string;\n};\n\nexport function Tabs<T extends string>({ tabs, value, onChange, label, className }: TabsProps<T>) {\n const reduced = useReducedMotion();\n const pull = reduced ? 0 : PULL;\n\n const trackRef = useRef<HTMLDivElement>(null);\n\n const [rects, setRects] = useState<Rect[]>([]);\n const [trackWidth, setTrackWidth] = useState(0);\n const [hovered, setHovered] = useState<number | null>(null);\n const [ready, setReady] = useState(false);\n\n const foundIdx = tabs.findIndex((t) => t.id === value);\n const activeIdx = foundIdx === -1 ? 0 : foundIdx;\n\n const springConfig = reduced ? { stiffness: 700, damping: 60 } : { stiffness: 420, damping: 34, mass: 0.7 };\n const pillLeft = useSpring(0, springConfig);\n const pillWidth = useSpring(0, springConfig);\n const innerX = useTransform(pillLeft, (v) => -v);\n\n const measure = useCallback(() => {\n const track = trackRef.current;\n if (!track) return;\n setTrackWidth(track.offsetWidth);\n const btns = track.querySelectorAll<HTMLButtonElement>('button[data-index]');\n setRects(\n Array.from(btns, (el) => ({\n left: el.offsetLeft,\n width: el.offsetWidth,\n })),\n );\n }, []);\n\n // biome-ignore lint/plugin: measures live DOM layout under a ResizeObserver — post-render measurement, no render-time equivalent.\n useEffect(() => {\n measure();\n const track = trackRef.current;\n if (!track) return;\n const ro = new ResizeObserver(measure);\n ro.observe(track);\n return () => ro.disconnect();\n }, [measure]);\n\n // biome-ignore lint/plugin: imperatively drives the pill's spring motion values toward a layout-derived target.\n useEffect(() => {\n if (rects.length !== tabs.length) return;\n const target = pillTarget(activeIdx, hovered, rects, pull);\n if (ready) {\n pillLeft.set(target.left);\n pillWidth.set(target.width);\n } else {\n pillLeft.jump(target.left);\n pillWidth.jump(target.width);\n setReady(true);\n }\n }, [rects, tabs.length, activeIdx, hovered, pull, ready, pillLeft, pillWidth]);\n\n const handleClick = useCallback(\n (e: MouseEvent<HTMLButtonElement>) => onChange(tabs[Number(e.currentTarget.dataset.index)]!.id),\n [onChange, tabs],\n );\n const handleEnter = useCallback((e: MouseEvent<HTMLButtonElement>) => setHovered(Number(e.currentTarget.dataset.index)), []);\n const handleLeave = useCallback(() => setHovered(null), []);\n\n return (\n <fieldset\n aria-label={label}\n className={cn('inline-flex items-center rounded-full border border-(--color-border) bg-(--color-surface) p-1', className)}\n >\n <div ref={trackRef} className=\"relative inline-flex items-center\">\n {/* Base labels — muted at rest; hidden wherever the opaque pill sits over them. */}\n {tabs.map((tab, i) => (\n <button\n key={tab.id}\n type=\"button\"\n data-index={i}\n onClick={handleClick}\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n aria-pressed={value === tab.id}\n className={cn(labelBox, 'text-(--color-muted-foreground) hover:text-(--color-foreground)')}\n >\n {tab.label}\n {tab.badge ? <span className={badgeBox}>{tab.badge}</span> : null}\n </button>\n ))}\n\n {/* Sliding, pulling pill carrying a clipped inverted copy of the labels. */}\n <motion.div\n aria-hidden={true}\n className=\"pointer-events-none absolute inset-y-0 select-none overflow-hidden rounded-full bg-(--color-foreground)\"\n style={{ left: pillLeft, width: pillWidth, opacity: ready ? 1 : 0 }}\n >\n <motion.div className=\"absolute inset-y-0 left-0 flex items-center\" style={{ width: trackWidth, x: innerX }}>\n {tabs.map((tab) => (\n <span key={tab.id} className={cn(labelBox, 'text-(--color-surface)')}>\n {tab.label}\n {tab.badge ? <span className={badgeBox}>{tab.badge}</span> : null}\n </span>\n ))}\n </motion.div>\n </motion.div>\n </div>\n </fieldset>\n );\n}\n","'use client';\n\nimport { ActionSwapRollIcon, ActionSwapRollText } from './action-swap.js';\nimport { Button } from './button.js';\n\n/*\n * Controlled theme toggle: the parent owns the current theme and the flip\n * handler, so there's no next-themes, no hydration detection, and no\n * pre-hydration CSS fallback — the theme is always known and the roll renders\n * directly on first paint.\n */\n\n// Icon-only (navbar / footer) sits on the `sm` height; the labeled row (mobile\n// drawer) on `md`. The `w-8 p-0` / `gap-2 px-3 text-[13px]` overrides turn the\n// shared <Button> sizes into the toggle's square and labeled geometries.\nconst ICON_LAYOUT = 'w-8 p-0';\nconst LABELED_LAYOUT = 'gap-2 px-3 text-[13px]';\n\n/** Sun glyph — the icon shown while dark, i.e. the theme you switch *to*. */\nfunction SunIcon() {\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n >\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"1\" />\n <line x1=\"12\" y1=\"23\" x2=\"12\" y2=\"21\" />\n <line x1=\"3\" y1=\"12\" x2=\"1\" y2=\"12\" />\n <line x1=\"23\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"5\" y1=\"5\" x2=\"3.5\" y2=\"3.5\" />\n <line x1=\"20.5\" y1=\"20.5\" x2=\"19\" y2=\"19\" />\n <line x1=\"19\" y1=\"5\" x2=\"20.5\" y2=\"3.5\" />\n <line x1=\"4.5\" y1=\"20.5\" x2=\"3\" y2=\"19\" />\n </svg>\n );\n}\n\n/** Moon glyph — the icon shown while light, i.e. the theme you switch *to*. */\nfunction MoonIcon() {\n return (\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={true}\n >\n <path d=\"M21 12.8A9 9 0 1 1 11.2 3 7 7 0 0 0 21 12.8z\" />\n </svg>\n );\n}\n\nexport type ThemeToggleProps = {\n /** Current theme — drives which icon/label the roll shows. */\n theme: 'light' | 'dark';\n /** Flip handler; the parent persists the new theme. */\n onToggle: () => void;\n /** Render the labeled row (mobile drawer) instead of the icon-only square. */\n showLabel?: boolean;\n};\n\nexport function ThemeToggle({ theme, onToggle, showLabel = false }: ThemeToggleProps) {\n const size = showLabel ? 'md' : 'sm';\n const layoutClassName = showLabel ? LABELED_LAYOUT : ICON_LAYOUT;\n\n // The icon shows the theme you are switching *to*, matching the label.\n const isDark = theme === 'dark';\n const label = isDark ? 'Switch to light mode' : 'Switch to dark mode';\n\n return (\n <Button\n variant=\"filled\"\n size={size}\n actionOrLink={onToggle}\n className={layoutClassName}\n // The visible label rolls, so mid-swap both strings are briefly in the\n // tree. Naming the button explicitly keeps it unambiguous either way.\n aria-label={label}\n >\n <ActionSwapRollIcon value={theme} className=\"h-4 w-4\">\n {isDark ? <SunIcon /> : <MoonIcon />}\n </ActionSwapRollIcon>\n {showLabel ? <ActionSwapRollText value={theme}>{label}</ActionSwapRollText> : null}\n </Button>\n );\n}\n","import { useCallback, useSyncExternalStore } from 'react';\n\n/** Site breakpoints — `md` is 50rem here, not Tailwind's default 48rem. */\nexport const BREAKPOINTS = [\n ['xs', 30],\n ['sm', 40],\n ['md', 50],\n ['lg', 64],\n ['xl', 80],\n ['2xl', 96],\n] as const;\n\n/** `'base'` is the implicit below-`xs` band — the widths no `min-width` query claims. */\nexport type Breakpoint = 'base' | (typeof BREAKPOINTS)[number][0];\n\n/**\n * The current breakpoint, read straight from `matchMedia`. Use this over\n * `useBreakpoint` inside effects that need the *live* band: through the\n * hydration pass the rendered value is still the server's `'base'`, which is a\n * change away from the truth and will read as one.\n */\nexport function getBreakpoint(): Breakpoint {\n let current: Breakpoint = 'base';\n for (const [name, rem] of BREAKPOINTS) {\n if (globalThis.matchMedia(`(min-width: ${rem}rem)`).matches) current = name;\n }\n return current;\n}\n\n/**\n * Call `listener` whenever the viewport crosses a breakpoint. Returns the\n * unsubscribe.\n *\n * The imperative counterpart to `useBreakpoint`, for work that has to land in\n * the *same frame* as the layout change. Media-query change events fire during\n * the rendering steps, before `requestAnimationFrame` and before paint, so a\n * listener that writes to the DOM here is painted with the new layout rather\n * than one frame behind it. Going through React state instead costs a render\n * round-trip — the scheduler runs the update in a later task, and the layout\n * effect lands after the browser has already painted.\n */\nexport function onBreakpointChange(listener: () => void): () => void {\n const queries = BREAKPOINTS.map(([, rem]) => globalThis.matchMedia(`(min-width: ${rem}rem)`));\n for (const query of queries) query.addEventListener('change', listener);\n return () => {\n for (const query of queries) query.removeEventListener('change', listener);\n };\n}\n\nfunction getBreakpointServer(): Breakpoint {\n return 'base';\n}\n\n/**\n * The widest breakpoint the viewport currently satisfies, re-rendering only when\n * it crosses from one band into another — not on every pixel of a resize.\n *\n * This is for work that has to be *redone* when the layout changes shape, like\n * re-measuring something positioned against text that the gutters just moved. It\n * is not for choosing what to render: the exported HTML has to be correct at\n * every width before JS runs, so layout belongs in CSS breakpoints, and this\n * returns `'base'` during SSR and the first client paint regardless of viewport.\n */\nexport function useBreakpoint(): Breakpoint {\n const subscribe = useCallback(onBreakpointChange, []);\n return useSyncExternalStore(subscribe, getBreakpoint, getBreakpointServer);\n}\n"]}