@psnext/design-system 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +30 -124
  2. package/dist/Stack.cjs +64 -0
  3. package/dist/Stack.cjs.map +1 -0
  4. package/dist/Stack.js +54 -0
  5. package/dist/Stack.js.map +1 -0
  6. package/dist/ThemeProvider.cjs +1886 -0
  7. package/dist/ThemeProvider.cjs.map +1 -0
  8. package/dist/ThemeProvider.d.cts +85 -0
  9. package/dist/ThemeProvider.d.cts.map +1 -0
  10. package/dist/ThemeProvider.d.ts +85 -0
  11. package/dist/ThemeProvider.d.ts.map +1 -0
  12. package/dist/ThemeProvider.js +1508 -0
  13. package/dist/ThemeProvider.js.map +1 -0
  14. package/dist/contexts/index.cjs +0 -60
  15. package/dist/contexts/index.d.cts +1 -23
  16. package/dist/contexts/index.d.ts +1 -23
  17. package/dist/contexts/index.js +1 -58
  18. package/dist/index.cjs +147 -72
  19. package/dist/index.d.cts +1009 -432
  20. package/dist/index.d.cts.map +1 -1
  21. package/dist/index.d.ts +1014 -437
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +6 -7
  24. package/dist/index2.d.cts +4 -16
  25. package/dist/index2.d.ts +4 -16
  26. package/dist/layouts/index.cjs +100 -12
  27. package/dist/layouts/index.cjs.map +1 -0
  28. package/dist/layouts/index.d.cts +70 -127
  29. package/dist/layouts/index.d.cts.map +1 -1
  30. package/dist/layouts/index.d.ts +70 -127
  31. package/dist/layouts/index.d.ts.map +1 -1
  32. package/dist/layouts/index.js +92 -2
  33. package/dist/layouts/index.js.map +1 -0
  34. package/dist/patterns/index.cjs +1004 -7254
  35. package/dist/patterns/index.cjs.map +1 -1
  36. package/dist/patterns/index.d.cts +381 -389
  37. package/dist/patterns/index.d.cts.map +1 -1
  38. package/dist/patterns/index.d.ts +378 -386
  39. package/dist/patterns/index.d.ts.map +1 -1
  40. package/dist/patterns/index.js +970 -7225
  41. package/dist/patterns/index.js.map +1 -1
  42. package/dist/primitives/index.cjs +135 -55
  43. package/dist/primitives/index.d.cts +3 -2
  44. package/dist/primitives/index.d.ts +3 -2
  45. package/dist/primitives/index.js +3 -5
  46. package/dist/primitives.cjs +3961 -1274
  47. package/dist/primitives.cjs.map +1 -1
  48. package/dist/primitives.js +3551 -1001
  49. package/dist/primitives.js.map +1 -1
  50. package/dist/styles/base.css +43 -0
  51. package/dist/styles/glass.css +75 -0
  52. package/dist/styles/index.css +43 -23
  53. package/dist/styles/semantic.css +107 -0
  54. package/dist/styles/theme.css +42 -24
  55. package/dist/styles/tokens/alpha.css +39 -0
  56. package/dist/styles/tokens/border-radius.css +17 -0
  57. package/dist/styles/tokens/chart-colors-dark.css +18 -0
  58. package/dist/styles/tokens/chart-colors-light.css +18 -0
  59. package/dist/styles/tokens/colors.css +251 -0
  60. package/dist/styles/tokens/mode-dark.css +101 -0
  61. package/dist/styles/tokens/mode-light.css +101 -0
  62. package/dist/styles/tokens/shadows.css +14 -0
  63. package/dist/styles/tokens/spacing.css +44 -0
  64. package/dist/styles/tokens/theme-bodhi.css +35 -0
  65. package/dist/styles/tokens/theme-slingshot.css +35 -0
  66. package/dist/styles/tokens/theme-sustain.css +35 -0
  67. package/dist/styles/tokens/typography.css +83 -0
  68. package/dist/utils.cjs +67 -0
  69. package/dist/utils.cjs.map +1 -0
  70. package/dist/utils.js +27 -0
  71. package/dist/utils.js.map +1 -0
  72. package/package.json +15 -41
  73. package/dist/AiChatPanel.cjs +0 -1603
  74. package/dist/AiChatPanel.cjs.map +0 -1
  75. package/dist/AiChatPanel.js +0 -1526
  76. package/dist/AiChatPanel.js.map +0 -1
  77. package/dist/BodhiLogo.cjs +0 -240
  78. package/dist/BodhiLogo.cjs.map +0 -1
  79. package/dist/BodhiLogo.js +0 -194
  80. package/dist/BodhiLogo.js.map +0 -1
  81. package/dist/Skeleton.cjs +0 -19
  82. package/dist/Skeleton.cjs.map +0 -1
  83. package/dist/Skeleton.js +0 -14
  84. package/dist/Skeleton.js.map +0 -1
  85. package/dist/SustainLogo.cjs +0 -415
  86. package/dist/SustainLogo.cjs.map +0 -1
  87. package/dist/SustainLogo.js +0 -378
  88. package/dist/SustainLogo.js.map +0 -1
  89. package/dist/contexts/index.cjs.map +0 -1
  90. package/dist/contexts/index.d.cts.map +0 -1
  91. package/dist/contexts/index.d.ts.map +0 -1
  92. package/dist/contexts/index.js.map +0 -1
  93. package/dist/index2.d.cts.map +0 -1
  94. package/dist/index2.d.ts.map +0 -1
  95. package/dist/layouts.cjs +0 -3245
  96. package/dist/layouts.cjs.map +0 -1
  97. package/dist/layouts.js +0 -3180
  98. package/dist/layouts.js.map +0 -1
  99. package/dist/styles/base/colors.css +0 -300
  100. package/dist/styles/base/component-tokens.css +0 -240
  101. package/dist/styles/base/elevation.css +0 -7
  102. package/dist/styles/base/fonts.css +0 -14
  103. package/dist/styles/base/global.css +0 -305
  104. package/dist/styles/base/radius.css +0 -22
  105. package/dist/styles/base/semantic-aliases.css +0 -53
  106. package/dist/styles/base/spacing.css +0 -33
  107. package/dist/styles/base/typography.css +0 -48
  108. package/dist/styles/generated/bodhi-vars.css +0 -34
  109. package/dist/styles/generated/dark.css +0 -87
  110. package/dist/styles/generated/light.css +0 -87
  111. package/dist/styles/generated/slingshot-vars.css +0 -34
  112. package/dist/styles/generated/sustain-vars.css +0 -34
  113. package/dist/styles/themes/bodhi.css +0 -166
  114. package/dist/styles/themes/slingshot.css +0 -144
  115. package/dist/styles/themes/sustain.css +0 -130
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.cjs","names":["Loader2Icon","cn","Slot","cn","AvatarPrimitive","cn","cn","cn","CirclePlus","DropdownMenuPrimitive","cn","CheckIcon","CircleIcon","ChevronRightIcon","cn","cn","PopoverPrimitive","cn","cn","cn","cn","React"],"sources":["../src/primitives/Spinner/Spinner.tsx","../src/primitives/Button/Button.tsx","../src/primitives/Avatar/Avatar.tsx","../src/primitives/Card/Card.tsx","../src/primitives/Credits/Credits.tsx","../src/primitives/DropdownMenu/DropdownMenu.tsx","../src/primitives/Heading/Heading.tsx","../src/primitives/Input/Input.tsx","../src/primitives/Logo/marks/bodhi-icon.tsx","../src/primitives/Logo/marks/bodhi-logo.tsx","../src/primitives/Logo/marks/psai-logo.tsx","../src/primitives/Logo/marks/slingshot-icon.tsx","../src/primitives/Logo/marks/slingshot-logo.tsx","../src/primitives/Logo/marks/sustain-icon.tsx","../src/primitives/Logo/marks/sustain-logo.tsx","../src/primitives/Logo/Logo.tsx","../src/primitives/Popover/Popover.tsx","../src/primitives/Skeleton/Skeleton.tsx","../src/primitives/Table/Table.tsx","../src/primitives/Text/Text.tsx","../src/primitives/ThemeProvider/ThemeProvider.tsx"],"sourcesContent":["import { Loader2Icon } from \"lucide-react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Spinner({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n data-slot=\"spinner\"\n className={cn(\"size-4 animate-spin\", className)}\n {...props}\n />\n );\n}\n\nexport { Spinner };\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { Spinner } from \"@/primitives/Spinner\";\nimport { cn } from \"@/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium cursor-pointer transition-[background-color,color,border-color,box-shadow,opacity,transform] duration-150 ease-out active:scale-[0.97] disabled:pointer-events-none disabled:opacity-50 disabled:active:scale-100 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background text-foreground hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-7 gap-1 px-2.5 text-xs has-[>svg]:px-2\",\n sm: \"h-8 gap-1.5 px-3 has-[>svg]:px-2.5\",\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n lg: \"h-10 px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n // Default is a pill (Figma); `square` gives the standard rounded-md corner.\n shape: {\n default: \"rounded-full\",\n square: \"rounded-md\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n shape,\n asChild = false,\n loading = false,\n disabled,\n children,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n loading?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n data-loading={loading || undefined}\n className={cn(buttonVariants({ variant, size, shape, className }))}\n disabled={disabled || loading}\n {...props}\n >\n {/* asChild expects a single child, so only plain buttons get the spinner. */}\n {asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner /> : null}\n {children}\n </>\n )}\n </Comp>\n );\n}\n\nexport { Button, buttonVariants };\n","import { Avatar as AvatarPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Avatar({\n className,\n size = \"default\",\n shape = \"round\",\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"xs\" | \"xxs\";\n shape?: \"round\" | \"roundrect\";\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n data-shape={shape}\n className={cn(\n \"group/avatar relative flex size-10 shrink-0 overflow-hidden rounded-full select-none\",\n \"data-[size=sm]:size-8 data-[size=xs]:size-6 data-[size=xxs]:size-5\",\n \"data-[shape=roundrect]:rounded-lg\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full\", className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({\n className,\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"bg-muted flex size-full items-center justify-center rounded-full\",\n \"group-data-[shape=roundrect]/avatar:rounded-lg\",\n \"group-data-[size=sm]/avatar:text-sm group-data-[size=xs]/avatar:text-xs group-data-[size=xxs]/avatar:text-[10px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n \"absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none\",\n \"group-data-[size=default]/avatar:size-3 group-data-[size=default]/avatar:[&>svg]:size-2\",\n \"group-data-[size=sm]/avatar:size-2.5 group-data-[size=sm]/avatar:[&>svg]:size-2\",\n \"group-data-[size=xs]/avatar:size-2 group-data-[size=xs]/avatar:[&>svg]:size-1.5\",\n \"group-data-[size=xxs]/avatar:size-1.5 group-data-[size=xxs]/avatar:[&>svg]:size-1\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n \"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n \"relative flex size-10 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=sm]/avatar-group:size-8 [&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount };\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst cardVariants = cva(\"flex flex-col gap-6 rounded-xl border text-card-foreground\", {\n variants: {\n variant: {\n // Solid surface (default).\n default: \"bg-card\",\n // Translucent, backdrop-blurred glass surface — reads over a textured\n // background (e.g. PageBackground). `tint` picks the --glass-* token.\n glass: \"border-transparent backdrop-blur-[var(--glass-blur)]\",\n },\n tint: {\n subtle: \"\",\n light: \"\",\n medium: \"\",\n heavy: \"\",\n },\n },\n compoundVariants: [\n { variant: \"glass\", tint: \"subtle\", class: \"bg-[var(--glass-subtle)]\" },\n { variant: \"glass\", tint: \"light\", class: \"bg-[var(--glass-light)]\" },\n { variant: \"glass\", tint: \"medium\", class: \"bg-[var(--glass-medium)]\" },\n { variant: \"glass\", tint: \"heavy\", class: \"bg-[var(--glass-heavy)]\" },\n ],\n defaultVariants: {\n variant: \"default\",\n tint: \"light\",\n },\n});\n\ntype CardProps = React.ComponentProps<\"div\"> & VariantProps<typeof cardVariants>;\n\nfunction Card({ className, variant, tint, ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n data-variant={variant ?? \"default\"}\n className={cn(cardVariants({ variant, tint }), className)}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return <h4 data-slot=\"card-title\" className={cn(\"leading-none\", className)} {...props} />;\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <p data-slot=\"card-description\" className={cn(\"text-muted-foreground\", className)} {...props} />\n );\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(\"px-6 [&:last-child]:pb-6\", className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 pb-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n cardVariants,\n type CardProps,\n};\n","import { cva } from \"class-variance-authority\";\nimport { CirclePlus } from \"lucide-react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Credits — a pill showing a remaining-credits balance. Badge-like, but its own\n// primitive: the colour escalates with how low the balance is (Figma): neutral\n// when healthy, soft amber when low, soft red at zero. The variant is derived\n// from `value` (override with `variant`), and the value is formatted for display.\n\nexport type CreditsVariant = \"default\" | \"warning\" | \"critical\";\n\nconst creditsVariants = cva(\n \"inline-flex w-fit items-center gap-1 rounded-full px-2.5 py-0.5 text-sm font-medium tabular-nums whitespace-nowrap [&>svg]:size-3.5 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-muted text-foreground [&>svg]:text-muted-foreground\",\n warning: \"bg-[var(--bg-warning-subtle)] text-[var(--content-warning-bold)]\",\n critical: \"bg-[var(--bg-error-subtle)] text-[var(--content-error-bold)]\",\n },\n },\n defaultVariants: { variant: \"default\" },\n },\n);\n\n/** Escalate the variant as the balance drops. */\nfunction resolveVariant(value: number, lowThreshold: number): CreditsVariant {\n if (value <= 0) return \"critical\";\n if (value <= lowThreshold) return \"warning\";\n return \"default\";\n}\n\n/** Whole-number, thousands-separated (e.g. 9995.79 → \"9,995\"). */\nfunction formatCredits(value: number): string {\n return Math.floor(value).toLocaleString();\n}\n\ntype CreditsProps = Omit<React.ComponentProps<\"span\">, \"children\"> & {\n /** The numeric balance. */\n value: number;\n /** Force a variant; by default it is derived from `value`. */\n variant?: CreditsVariant;\n /** Balance at/below which the warning variant kicks in. Default 200. */\n lowThreshold?: number;\n /** Override the leading icon. */\n icon?: React.ReactNode;\n /** Override how the value is rendered. */\n format?: (value: number) => string;\n};\n\nfunction Credits({\n className,\n value,\n variant,\n lowThreshold = 200,\n icon,\n format = formatCredits,\n ...props\n}: CreditsProps) {\n const resolved = variant ?? resolveVariant(value, lowThreshold);\n return (\n <span\n data-slot=\"credits\"\n data-variant={resolved}\n className={cn(creditsVariants({ variant: resolved }), className)}\n {...props}\n >\n {icon ?? <CirclePlus aria-hidden=\"true\" />}\n {format(value)}\n </span>\n );\n}\n\nexport { Credits, creditsVariants, type CreditsProps };\n","import { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"ml-auto text-xs tracking-widest text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Heading — display/section titles using the design-system HEADING scale\n// (Outfit): the Figma \"heading 1–7\" steps (tokens in styles/tokens/typography.css).\n// `size` drives the visual step (font-size + line-height + the spec's per-step\n// weight: 1–4 Regular, 5–7 Medium); `as` controls the semantic level\n// independently; `gradient` enables the brand gradient text fill.\nconst headingVariants = cva(\"font-heading text-balance\", {\n variants: {\n size: {\n \"1\": \"text-[length:var(--heading-1-font-size)] leading-[var(--heading-1-line-height)] font-normal\",\n \"2\": \"text-[length:var(--heading-2-font-size)] leading-[var(--heading-2-line-height)] font-normal\",\n \"3\": \"text-[length:var(--heading-3-font-size)] leading-[var(--heading-3-line-height)] font-normal\",\n \"4\": \"text-[length:var(--heading-4-font-size)] leading-[var(--heading-4-line-height)] font-normal\",\n \"5\": \"text-[length:var(--heading-5-font-size)] leading-[var(--heading-5-line-height)] font-medium\",\n \"6\": \"text-[length:var(--heading-6-font-size)] leading-[var(--heading-6-line-height)] font-medium\",\n \"7\": \"text-[length:var(--heading-7-font-size)] leading-[var(--heading-7-line-height)] font-medium\",\n },\n // Optional override of the per-step default weight.\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n gradient: {\n true: \"bg-gradient-to-r from-[var(--gradient-heading-from)] to-[var(--gradient-heading-to)] bg-clip-text text-transparent\",\n false: \"text-foreground\",\n },\n },\n defaultVariants: {\n size: \"2\",\n gradient: false,\n },\n});\n\ntype HeadingProps = React.ComponentProps<\"h2\"> &\n VariantProps<typeof headingVariants> & {\n /** Semantic heading level/element. Defaults to `h2`. */\n as?: React.ElementType;\n };\n\nfunction Heading({ as, className, size, weight, align, gradient, ...props }: HeadingProps) {\n const Comp = as ?? \"h2\";\n return (\n <Comp\n data-slot=\"heading\"\n className={cn(headingVariants({ size, weight, align, gradient }), className)}\n {...props}\n />\n );\n}\n\nexport { Heading, headingVariants, type HeadingProps };\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst inputVariants = cva(\n cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input bg-input-background flex w-full min-w-0 border transition-[color,box-shadow] outline-none file:inline-flex file:border-0 file:bg-transparent file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n ),\n {\n variants: {\n // Sizes map to the Figma \"Input\" spec: Mini 24px / Small 32px / Regular 36px / Large 40px.\n size: {\n xs: \"h-6 px-2 py-0.5 text-xs file:h-5 file:text-xs\",\n sm: \"h-8 px-2.5 py-1 text-sm file:h-6 file:text-xs\",\n default: \"h-9 px-3 py-1 text-base md:text-sm file:h-7 file:text-sm\",\n lg: \"h-10 px-4 py-2 text-base file:h-8 file:text-sm\",\n },\n // Roundness: Default (rounded-md) and Round (pill).\n shape: {\n default: \"rounded-md\",\n round: \"rounded-full\",\n },\n },\n defaultVariants: {\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\nfunction Input({\n className,\n type,\n size,\n shape,\n ...props\n}: Omit<React.ComponentProps<\"input\">, \"size\"> & VariantProps<typeof inputVariants>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ size, shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Input, inputVariants };\n","import type * as React from \"react\";\n\nexport function BodhiIcon(props: React.ComponentProps<\"svg\">) {\n return (\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 64 64\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n style={{ fill: \"var(--red-500)\" }}\n >\n <path\n d=\"M63.3 32.5c0 17.32-14.06 32.05-31.4 32.05C14.55 64.55.5 49.82.5 32.5A31.4 31.4 0 0 1 31.9 1.13 31.4 31.4 0 0 1 63.3 32.5\"\n fill=\"white\"\n />\n <path d=\"M32 .55a32 32 0 0 1 2.64 63.9l-.79-11.57.4-1.01 8.6-8.79a2.38 2.38 0 0 0 4.42-.85l8.54-.87a2.39 2.39 0 1 0 2.74-2.9l.17-9.7c.9-.04 1.6-.75 1.6-1.68a1.69 1.69 0 0 0-2.59-1.42L52.1 18a2.28 2.28 0 0 0-3.36-3.09l-4.88-4.22q.1-.28.1-.59a1.69 1.69 0 0 0-3.17-.8l-6.55-1.27a1.69 1.69 0 0 0-3.32-.01l-6.6 1.29a1.7 1.7 0 0 0-3.08 1.38l-4.88 4.22q-.23-.24-.55-.42a2.29 2.29 0 0 0-2.8 3.51l-5.64 7.66a1.7 1.7 0 0 0-.91-.27 1.69 1.69 0 0 0-.08 3.37l.17 9.85a2.39 2.39 0 1 0 3.26 2.8l8.02.82a2.38 2.38 0 0 0 4.06 1.34l8.4 9.04-.78 11.86C13 63.2 0 50.24 0 32.56a32 32 0 0 1 32-32\" />\n <path d=\"M40.52 35.07a2.4 2.4 0 0 0 1.97.3l1.43 4.35c-.82.37-1.4 1.2-1.4 2.17v.07l-8.9 6.9-.2-7.96z\" />\n <path d=\"m30.84 40.87-.42 7.95-7.96-6.2a2.37 2.37 0 0 0-1.28-2.9l1.5-4.54c.62 0 1.2-.25 1.62-.65z\" />\n <path d=\"M12.55 33.23a2.6 2.6 0 0 0 2.65.18l3.71 6.47a2.4 2.4 0 0 0-1.1 2.13l-7.95-.81q.04-.2.04-.4c0-.95-.55-1.76-1.35-2.15z\" />\n <path d=\"M56.68 38.9a2.4 2.4 0 0 0-.91 2.25l-8.48.86v-.12c0-.85-.44-1.59-1.1-2.01l3.7-6.47a2.6 2.6 0 0 0 2.63-.16z\" />\n <path d=\"M39.82 31.79a2.4 2.4 0 0 0 .52 3.15l-6.93 5.69-.28-11.4q.49-.24.81-.64z\" />\n <path d=\"M30.6 28.93q.38.3.84.43l-.59 11.22-6.4-6.2a2.4 2.4 0 0 0 .47-2.36z\" />\n <path d=\"M20.28 32.92c.07 1.19 1 2.14 2.17 2.25l-1.47 4.47a2.4 2.4 0 0 0-1.88.13l-3.7-6.47q.57-.35.91-.94z\" />\n <path d=\"M48.78 32.36q.35.59.92.94L46 39.77a2 2 0 0 0-.8-.25l-.3-.02q-.4 0-.78.14L42.7 35.3c.89-.35 1.52-1.21 1.52-2.23v-.06z\" />\n <path d=\"M57.25 28.04c.28.4.73.68 1.25.72l-.17 9.66h-.2q-.68 0-1.21.32l-4.17-5.66a2.6 2.6 0 0 0 .84-2.84z\" />\n <path d=\"M11.5 30.24a2.6 2.6 0 0 0 .87 2.86l-4.02 5.47a2.4 2.4 0 0 0-1.59-.04l-.17-9.77c.52-.04.97-.32 1.25-.72z\" />\n <path d=\"M49.21 29.17a2.6 2.6 0 0 0-.53 2.99l-4.49.64a2.4 2.4 0 0 0-1.33-1.87l.85-8.06h.02q.5-.01.88-.25z\" />\n <path d=\"M20.49 22.62q.4.24.88.25h.02l.8 7.58a2.4 2.4 0 0 0-1.9 2.25l-3.87-.54a2.6 2.6 0 0 0-.53-3z\" />\n <path d=\"M29.83 26.32a2.4 2.4 0 0 0 .55 2.4l-5.57 3.04a2.4 2.4 0 0 0-2.41-1.34l-.8-7.57q.55-.08.93-.44z\" />\n <path d=\"M42.57 22.41q.38.37.93.45l-.84 7.98a2.4 2.4 0 0 0-2.54.57l-.18.2-5.87-3.2a2.4 2.4 0 0 0 .4-1.66z\" />\n <path d=\"M48.4 17.6a2.3 2.3 0 0 0 2.9.99l.2-.1q.25-.14.44-.33l5.62 7.63a1.7 1.7 0 0 0-.42 2.06l-3.62 2.18a2.64 2.64 0 0 0-4.15-1L44.8 22.5a1.7 1.7 0 0 0 .32-2.28z\" />\n <path d=\"M19.98 20.22a1.7 1.7 0 0 0 .33 2.28l-4.58 6.52a2.63 2.63 0 0 0-4.15 1.01l-3.62-2.18a1.7 1.7 0 0 0-.42-2.06l5.61-7.63q.2.18.45.32c1.1.61 2.48.22 3.1-.88z\" />\n <path d=\"m42.06 20.92-.02.27q.01.61.38 1.06l-8 4.28a2.4 2.4 0 0 0-1.91-1.81l.08-4.14c.83 0 1.51-.6 1.65-1.4z\" />\n <path d=\"M30.94 19.3c.16.67.73 1.19 1.44 1.27l-.08 4.12-.2-.01c-.98 0-1.82.6-2.19 1.44l-7.23-3.87a1.7 1.7 0 0 0 .36-1.3z\" />\n <path d=\"M21.33 10.9c.25.46.71.8 1.26.87l.23.02c.48 0 .9-.2 1.21-.51l7.42 6.37a1.7 1.7 0 0 0-.55 1.43L23 20.74a1.69 1.69 0 0 0-2.88-.69L16.8 17.4c.34-.78.21-1.68-.3-2.33z\" />\n <path d=\"M48.6 15.07c-.51.65-.64 1.54-.3 2.33l-3.32 2.65a1.68 1.68 0 0 0-2.87.66l-7.85-1.75v-.06q0-.54-.29-.96l7.15-6.61a1.68 1.68 0 0 0 2.65-.44z\" />\n <path d=\"M40.7 9.5a1.7 1.7 0 0 0 .27 1.67l-7.13 6.6c-.3-.32-.72-.54-1.19-.56L32.8 10c.83-.11 1.48-.82 1.48-1.68v-.06z\" />\n <path d=\"M30.89 8.32c0 .93.75 1.68 1.69 1.68l-.14 7.22q-.46.04-.82.29l-7.45-6.4a1.7 1.7 0 0 0 .23-1.6l6.5-1.27z\" />\n </svg>\n );\n}\n","import type * as React from \"react\";\n\nexport function BodhiLogo(props: React.ComponentProps<\"svg\">) {\n return (\n <svg\n width=\"101\"\n height=\"37\"\n viewBox=\"0 0 101 37\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n style={\n {\n \"--logo-circle-bg\": \"var(--background)\",\n \"--logo-icon-red\": \"var(--red-500)\",\n \"--logo-text-dark\": \"var(--foreground)\",\n } as React.CSSProperties\n }\n >\n <path\n d=\"M35.6 18.28c0 9.74-7.9 18.03-17.66 18.03S.28 28.02.28 18.28 8.18.64 17.94.64s17.67 7.9 17.67 17.64\"\n fill=\"var(--logo-circle-bg)\"\n />\n <path\n d=\"M18 .31a18 18 0 0 1 1.48 35.95l-.44-6.52.23-.56 4.83-4.95a1.34 1.34 0 0 0 2.49-.47l4.8-.5a1.34 1.34 0 1 0 1.55-1.63l.09-5.45c.5-.02.9-.42.9-.95a.95.95 0 0 0-1.46-.8l-3.17-4.3a1.28 1.28 0 0 0-1.89-1.74L24.67 6q.06-.15.06-.33a.95.95 0 0 0-1.79-.45l-3.68-.71a.95.95 0 0 0-1.87 0l-3.71.71a.95.95 0 0 0-1.73.78L9.2 8.4a1.29 1.29 0 0 0-1.89 1.74l-3.16 4.3a1 1 0 0 0-.52-.15.95.95 0 0 0-.04 1.9l.1 5.54a1.34 1.34 0 1 0 1.83 1.57l4.5.47a1.34 1.34 0 0 0 2.3.75l4.72 5.08-.44 6.68C7.3 35.55 0 28.26 0 18.3a18 18 0 0 1 18-18\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M22.8 19.73a1.3 1.3 0 0 0 1.1.16l.8 2.45c-.46.21-.78.68-.78 1.22v.04l-5.01 3.89L18.8 23z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"m17.35 22.99-.24 4.47-4.47-3.49a1.34 1.34 0 0 0-.73-1.63l.85-2.55q.54-.01.9-.37z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M7.06 18.7a1.5 1.5 0 0 0 1.5.1l2.08 3.63a1.3 1.3 0 0 0-.62 1.2l-4.47-.45.02-.23c0-.53-.31-.99-.76-1.2z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M31.88 21.88a1.3 1.3 0 0 0-.51 1.26l-4.77.5v-.08c0-.47-.25-.9-.62-1.13l2.09-3.64a1.5 1.5 0 0 0 1.47-.09z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M22.4 17.88a1.34 1.34 0 0 0 .3 1.78l-3.9 3.2-.16-6.42q.26-.13.45-.36z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M17.22 16.27q.2.17.46.25l-.33 6.3-3.6-3.48a1.3 1.3 0 0 0 .27-1.33z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M11.41 18.52c.04.67.56 1.2 1.22 1.26l-.83 2.52a1.3 1.3 0 0 0-1.06.07l-2.08-3.64q.32-.2.52-.53z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M27.44 18.2q.2.33.52.53l-2.09 3.64a1 1 0 0 0-.45-.14l-.16-.01q-.23 0-.44.08l-.8-2.45c.5-.19.85-.68.85-1.25v-.03z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M32.2 15.77q.26.36.7.4l-.09 5.44h-.12q-.37 0-.67.18l-2.35-3.18a1.5 1.5 0 0 0 .47-1.6z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M6.47 17.01a1.5 1.5 0 0 0 .49 1.61L4.7 21.7a1.3 1.3 0 0 0-.9-.02l-.1-5.5q.47-.04.71-.4z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M27.68 16.4a1.5 1.5 0 0 0-.3 1.69l-2.52.36a1.3 1.3 0 0 0-.75-1.05l.48-4.53q.29-.01.5-.14z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M11.53 12.73q.2.13.49.14h.01l.45 4.26c-.6.12-1.05.64-1.07 1.27l-2.17-.31a1.5 1.5 0 0 0-.3-1.68z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M16.78 14.8a1.3 1.3 0 0 0 .31 1.36l-3.13 1.7a1.3 1.3 0 0 0-1.36-.75l-.45-4.25q.3-.05.52-.26z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M23.94 12.6q.23.21.53.26l-.48 4.49a1.3 1.3 0 0 0-1.43.32l-.1.11-3.3-1.8a1.3 1.3 0 0 0 .23-.93z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M27.23 9.9c.32.58 1.02.81 1.62.55l.12-.05q.14-.08.25-.18l3.16 4.29a.95.95 0 0 0-.24 1.16l-2.04 1.22a1.5 1.5 0 0 0-2.33-.57l-2.58-3.66a.95.95 0 0 0 .19-1.29z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M11.24 11.37a.95.95 0 0 0 .19 1.29l-2.58 3.66a1.48 1.48 0 0 0-2.33.57l-2.04-1.22a.94.94 0 0 0-.24-1.17l3.16-4.28q.11.1.25.18c.62.34 1.4.12 1.74-.5z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"m23.66 11.77-.01.15q0 .34.21.6l-4.5 2.4a1.3 1.3 0 0 0-1.07-1.01l.04-2.33c.47 0 .85-.35.93-.8z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M17.4 10.85c.1.38.41.67.81.72l-.04 2.32h-.11c-.55 0-1.03.33-1.23.8l-4.07-2.18a1 1 0 0 0 .2-.73z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M12 6.13c.14.26.4.45.7.5h.14q.4 0 .68-.29l4.17 3.59a1 1 0 0 0-.3.8l-4.46.93a.95.95 0 0 0-1.61-.38L9.45 9.79c.2-.44.12-.95-.17-1.31z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M27.34 8.48c-.3.36-.36.87-.17 1.3l-1.87 1.5a.95.95 0 0 0-1.61.37l-4.42-.99v-.03q0-.3-.16-.54l4.02-3.72a.95.95 0 0 0 1.49-.24z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M22.9 5.35a1 1 0 0 0 .15.94L19.03 10a1 1 0 0 0-.66-.32l.08-4.06a.95.95 0 0 0 .82-.94v-.04z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n d=\"M17.38 4.68c0 .52.42.95.94.95l-.07 4.05a1 1 0 0 0-.47.17l-4.18-3.6a1 1 0 0 0 .13-.9l3.65-.71z\"\n fill=\"var(--logo-icon-red)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.27 5.17a.5.5 0 0 0 .49-.5.5.5 0 0 0-.5-.5.5.5 0 0 0-.48.5c0 .28.22.5.49.5\"\n fill=\"var(--logo-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M65.88 12.73h.76V6.1h-.76z\"\n fill=\"var(--logo-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M50.72 9.4c0-1.38 1.06-2.5 2.37-2.5 1.3 0 2.37 1.12 2.37 2.5v.1c-.05 1.37-1.1 2.44-2.37 2.44-1.28 0-2.37-1.14-2.37-2.54m2.37 3.32c.92 0 1.77-.41 2.37-1.15v1.16h.76V6.1h-.76v1.14a3 3 0 0 0-2.37-1.14 3.2 3.2 0 0 0-3.13 3.3c0 1.8 1.4 3.31 3.13 3.31\"\n fill=\"var(--logo-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.35 11.94c-1.28 0-2.32-1.07-2.37-2.43v-.1c0-1.4 1.06-2.52 2.37-2.52 1.3 0 2.37 1.13 2.37 2.51 0 1.39-1.07 2.54-2.37 2.54m3.13-2.54c0-1.81-1.4-3.29-3.13-3.29-.93 0-1.78.41-2.37 1.14V6.1h-.76v9h.76v-3.53c.6.73 1.45 1.14 2.37 1.14 1.72 0 3.13-1.49 3.13-3.32\"\n fill=\"var(--logo-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M78.73 6.11c-.72 0-1.4.3-1.9.84V6.1h-.74v6.62h.73V8.8a1.95 1.95 0 0 1 1.9-1.93c1.03 0 1.9.86 1.9 1.93v3.92h.75V8.8c0-1.49-1.19-2.7-2.64-2.7\"\n fill=\"var(--logo-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"m85.3 11.97-.07.02q-.11.04-.37.05-.44.02-.44-.67v-4.5h.9V6.1h-.9V3.89h-.78V6.1h-.9v.76h.9v4.53q0 .74.28 1.01.27.3.77.31.37 0 .61-.1l.05-.01z\"\n fill=\"var(--logo-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M71.42 6.88c1.11 0 2.07.83 2.3 1.97h-4.65a2.4 2.4 0 0 1 2.34-1.97m1.98 3.94a2.3 2.3 0 0 1-1.99 1.14 2.46 2.46 0 0 1-2.39-2.36h5.14c.2 0 .37-.15.37-.35v-.06c-.13-1.75-1.47-3.08-3.12-3.08a3.24 3.24 0 0 0-3.14 3.32c0 1.83 1.41 3.3 3.14 3.3 1.06 0 2.04-.56 2.61-1.5z\"\n fill=\"var(--logo-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M48.2 9.53s-.2-.16-.41-.25c-.22-.09-.52-.2-1.16-.35q-.12-.04-.25-.06-.63-.17-1-.44-.33-.28-.3-.61.01-.39.4-.67.45-.34 1.18-.3c.54.02.95.3 1.39.62l.04.03.55-.53-.26-.2c-.44-.3-.97-.62-1.69-.65q-.95-.04-1.6.38c-.47.32-.77.79-.77 1.28-.01.37.07.72.43 1.08.43.43 1.1.65 1.72.77.53.1 1.02.3 1.26.51.3.28.4.48.4.77q-.02.42-.48.72c-.3.23-.73.35-1.18.33a3.2 3.2 0 0 1-1.82-.78l-.04-.04-.54.51.05.05q1.09.95 2.31 1.02a2.6 2.6 0 0 0 1.64-.46q.77-.54.81-1.32a1.7 1.7 0 0 0-.68-1.41\"\n fill=\"var(--logo-text-dark)\"\n />\n <path\n d=\"M53.33 27.23a2.75 2.75 0 1 0-5.5-.02 2.77 2.77 0 0 0 2.76 2.74 2.77 2.77 0 0 0 2.74-2.72m-7.96-12.08h2.76v8.42Q49.5 22 51.39 22c2.7 0 4.76 2.24 4.76 5.2 0 3.04-2.04 5.22-4.82 5.22a3.9 3.9 0 0 1-3.2-1.58v1.28h-2.76zm15.19 12.02a2.74 2.74 0 0 0 2.76 2.78 2.8 2.8 0 0 0 2.78-2.74 2.8 2.8 0 0 0-2.78-2.74 2.8 2.8 0 0 0-2.76 2.7m-2.84-.04c0-2.98 2.38-5.14 5.62-5.14s5.58 2.16 5.58 5.2c0 3.16-2.36 5.22-5.64 5.22-3.34 0-5.56-2.18-5.56-5.28m21.1.1a2.76 2.76 0 0 0-2.75-2.76 2.76 2.76 0 0 0-2.74 2.74c0 1.5 1.24 2.74 2.74 2.74a2.8 2.8 0 0 0 2.74-2.72m-.3-3.66v-8.42h2.75v16.96h-2.76v-1.28a3.9 3.9 0 0 1-3.2 1.58c-2.76 0-4.82-2.22-4.82-5.22 0-2.92 2.06-5.2 4.76-5.2q1.92.01 3.26 1.58m5.34 8.54V15.15h2.76v8.44a3.6 3.6 0 0 1 3.06-1.6c1.4 0 2.3.52 2.96 1.34.52.66.68 1.54.68 2.62v6.16h-2.76v-5.38c0-1.74-.5-2.4-1.86-2.4q-2.09 0-2.08 2.76v5.02zm12.01-9.8h2.76v9.8h-2.76zm-.26-4.14c0-.9.74-1.64 1.64-1.64s1.64.74 1.64 1.64-.74 1.64-1.64 1.64-1.64-.74-1.64-1.64\"\n fill=\"var(--logo-text-dark)\"\n />\n </svg>\n );\n}\n\nexport default BodhiLogo;\n","import type * as React from \"react\";\n\nexport function PSAILogo(props: React.ComponentProps<\"svg\">) {\n return (\n <svg\n width=\"151\"\n height=\"38\"\n viewBox=\"0 0 151 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n style={\n {\n \"--psai-primary-red\": \"var(--red-500)\",\n \"--psai-accent-white\": \"var(--logo-accent)\",\n \"--psai-text-dark\": \"var(--foreground)\",\n } as React.CSSProperties\n }\n >\n <path\n d=\"M18.08 0C8.11 0 0 8.29 0 18.47s8.11 18.47 18.08 18.47 18.08-8.28 18.08-18.47S28.06 0 18.08 0\"\n fill=\"var(--psai-primary-red)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M31.58 24.2c-.27.66-1.02.97-1.67.7a1.3 1.3 0 0 1-.69-1.7 1.27 1.27 0 0 1 1.67-.7c.65.27.96 1.03.69 1.7\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M23.66 32.26c-.65.28-1.4-.04-1.66-.7-.27-.67.04-1.43.69-1.7.65-.28 1.4.04 1.66.7.27.67-.04 1.43-.69 1.7\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.48 32.26a1.3 1.3 0 0 1-.7-1.7 1.27 1.27 0 0 1 1.67-.71c.65.28.96 1.04.7 1.7-.28.67-1.02.98-1.67.7\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.57 24.17c-.26-.67.05-1.43.7-1.7.65-.28 1.4.04 1.66.7.27.67-.04 1.43-.7 1.7-.64.28-1.39-.04-1.66-.7\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.59 12.74a1.27 1.27 0 0 1 1.66-.7c.65.28.96 1.04.7 1.7-.28.67-1.02.98-1.67.7a1.3 1.3 0 0 1-.7-1.7\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.5 4.67c.65-.27 1.4.04 1.67.7.27.67-.04 1.43-.7 1.7-.64.28-1.39-.03-1.66-.7s.04-1.42.7-1.7\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M23.69 4.68c.65.28.95 1.04.68 1.7-.27.67-1.01.98-1.66.7a1.3 1.3 0 0 1-.69-1.7 1.27 1.27 0 0 1 1.67-.7\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M31.59 12.77c.27.67-.04 1.43-.7 1.7-.64.28-1.39-.04-1.66-.7-.27-.67.04-1.43.7-1.7.65-.28 1.39.04 1.66.7\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19.42 20.97c-1 1.39-1.7 3.64-.39 4.98.89.91.22 2.42-.98 2.42s-1.87-1.5-.98-2.42c1.31-1.34.6-3.59-.39-4.98a9 9 0 0 0-1.04-1.14c-1.37-1-3.58-1.73-4.89-.39-.88.9-2.36.22-2.36-1 0-1.23 1.48-1.91 2.36-1 1.31 1.34 3.52.62 4.89-.4.23-.17.95-.84 1.1-1.07 1-1.4 1.7-3.64.39-4.98-.89-.91-.22-2.42.98-2.42s1.87 1.5.98 2.42c-1.31 1.34-.6 3.59.39 4.98.17.25.82.97 1.04 1.13 1.37 1.02 3.57 1.74 4.89.4.88-.9 2.36-.22 2.36 1 0 1.23-1.48 1.91-2.36 1-1.31-1.34-3.52-.62-4.89.4-.23.17-.95.84-1.1 1.07\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M25.04 11.37c.74.76.74 2 0 2.77-.75.76-1.97.76-2.72 0-.74-.77-.74-2 0-2.77a1.9 1.9 0 0 1 2.72 0\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M25.04 25.57c-.75.77-1.97.77-2.72 0-.74-.76-.74-2 0-2.76a1.9 1.9 0 0 1 2.72 0c.74.76.74 2 0 2.76\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11.13 25.57c-.75-.76-.75-2 0-2.76a1.9 1.9 0 0 1 2.7 0c.76.76.76 2 0 2.76-.74.77-1.95.77-2.7 0\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11.13 11.37a1.9 1.9 0 0 1 2.7 0c.76.76.76 2 0 2.77-.74.76-1.95.76-2.7 0-.75-.77-.75-2 0-2.77\"\n fill=\"var(--psai-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.37 5.64a.5.5 0 0 0 .48-.5.5.5 0 0 0-.48-.5.5.5 0 0 0-.5.5c0 .28.23.5.5.5\"\n fill=\"var(--psai-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M65.98 13.2h.76V6.58h-.76z\"\n fill=\"var(--psai-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M50.82 9.87c0-1.38 1.06-2.5 2.37-2.5 1.3 0 2.37 1.12 2.37 2.5v.1c-.06 1.37-1.1 2.44-2.37 2.44-1.28 0-2.37-1.14-2.37-2.54m2.37 3.32c.92 0 1.77-.41 2.36-1.14v1.15h.77V6.58h-.77v1.14a3 3 0 0 0-2.36-1.14 3.2 3.2 0 0 0-3.14 3.3c0 1.8 1.4 3.31 3.14 3.31\"\n fill=\"var(--psai-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.45 12.41c-1.28 0-2.32-1.07-2.37-2.43v-.1c0-1.4 1.06-2.52 2.37-2.52 1.3 0 2.36 1.13 2.36 2.51 0 1.39-1.06 2.54-2.36 2.54m3.13-2.54c0-1.81-1.4-3.29-3.13-3.29-.93 0-1.78.41-2.37 1.14V6.58h-.77v9h.77v-3.53c.6.73 1.44 1.14 2.37 1.14 1.72 0 3.13-1.49 3.13-3.32\"\n fill=\"var(--psai-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M78.83 6.58c-.73 0-1.41.3-1.9.84v-.84h-.74v6.62h.73V9.28a1.95 1.95 0 0 1 1.9-1.93c1.03 0 1.9.86 1.9 1.93v3.92h.75V9.28c0-1.49-1.19-2.7-2.64-2.7\"\n fill=\"var(--psai-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"m85.4 12.44-.07.02q-.11.04-.37.05-.45.02-.44-.67v-4.5h.9v-.76h-.9V4.36h-.78v2.22h-.9v.76h.9v4.53q0 .74.28 1.01.27.3.76.31.38 0 .62-.1l.04-.01z\"\n fill=\"var(--psai-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M71.51 7.35c1.12 0 2.08.83 2.3 1.97h-4.64a2.4 2.4 0 0 1 2.34-1.97m1.99 3.94a2.3 2.3 0 0 1-1.99 1.14 2.46 2.46 0 0 1-2.39-2.36h5.14c.2 0 .37-.15.37-.35v-.06c-.13-1.75-1.47-3.08-3.12-3.08a3.24 3.24 0 0 0-3.14 3.32c0 1.83 1.4 3.3 3.14 3.3 1.06 0 2.04-.56 2.61-1.5z\"\n fill=\"var(--psai-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M48.3 10s-.2-.16-.41-.25c-.22-.09-.52-.2-1.16-.35q-.12-.04-.25-.06a3 3 0 0 1-1-.44q-.34-.28-.3-.61.01-.39.4-.67.45-.34 1.18-.3c.53.02.94.3 1.38.62l.05.03.55-.53-.27-.2c-.43-.3-.97-.62-1.68-.65q-.95-.04-1.61.38c-.47.32-.76.79-.77 1.28 0 .38.07.72.44 1.08.43.43 1.1.65 1.72.77.53.1 1.02.3 1.26.51.3.28.4.48.4.77q-.03.42-.49.72c-.3.23-.73.35-1.17.33q-.9-.05-1.82-.78l-.04-.04-.55.51.06.05q1.08.95 2.31 1.02a2.6 2.6 0 0 0 1.64-.46q.77-.54.8-1.32A1.7 1.7 0 0 0 48.3 10\"\n fill=\"var(--psai-text-dark)\"\n />\n <path\n d=\"M53.26 27.7a2.76 2.76 0 0 0-2.74-2.76 2.7 2.7 0 0 0-2.74 2.74c0 1.52 1.2 2.74 2.74 2.74a2.8 2.8 0 0 0 2.74-2.72m-.3-3.66v-1.26h2.76v9.8h-2.76V31.3a3.9 3.9 0 0 1-3.2 1.58c-2.76 0-4.82-2.26-4.82-5.22 0-2.92 2.04-5.2 4.76-5.2q1.92.01 3.26 1.58m5.32-1.26h2.76v9.8h-2.76zm-.26-4.14c0-.9.74-1.64 1.64-1.64s1.64.74 1.64 1.64-.74 1.64-1.64 1.64-1.64-.74-1.64-1.64m17.5 9.06a2.75 2.75 0 1 0-5.5-.02 2.77 2.77 0 0 0 2.76 2.74c1.5 0 2.74-1.26 2.74-2.72m-5.2 3.6v6.5h-2.76V22.78h2.76v1.26a4 4 0 0 1 3.2-1.58c2.76 0 4.82 2.28 4.82 5.22 0 2.96-2.08 5.2-4.76 5.2a4.1 4.1 0 0 1-3.26-1.58m10.11 1.28v-9.8h2.76v1.48q1.02-1.8 2.84-1.8.57 0 1.2.24l-.38 2.58a3 3 0 0 0-1.32-.34q-2.34 0-2.34 2.94v4.7zm10.43-4.94a2.74 2.74 0 0 0 2.76 2.78 2.8 2.8 0 0 0 2.78-2.74 2.8 2.8 0 0 0-2.78-2.74 2.8 2.8 0 0 0-2.76 2.7m-2.84-.04c0-2.98 2.38-5.14 5.62-5.14s5.58 2.16 5.58 5.2c0 3.16-2.36 5.22-5.64 5.22-3.34 0-5.56-2.18-5.56-5.28m21.1.1a2.76 2.76 0 0 0-2.75-2.76 2.76 2.76 0 0 0-2.74 2.74c0 1.5 1.24 2.74 2.74 2.74a2.8 2.8 0 0 0 2.74-2.72m-.3-3.66v-8.42h2.75v16.96h-2.76V31.3a3.9 3.9 0 0 1-3.2 1.58c-2.76 0-4.82-2.22-4.82-5.22 0-2.92 2.06-5.2 4.76-5.2q1.92.01 3.26 1.58m5.34-1.26h2.76v5.56q0 2.22 1.98 2.22 2 0 2-2.22v-5.56h2.74v6.02c0 2.62-1.7 4.08-4.74 4.08s-4.74-1.46-4.74-4.08zm19.43.28v2.7a3.6 3.6 0 0 0-2.24-.82 2.7 2.7 0 0 0-2.8 2.74c0 1.6 1.2 2.74 2.8 2.74q1.2 0 2.24-.82v2.7q-1.26.57-2.52.58a5.22 5.22 0 1 1 .04-10.42q1.35 0 2.48.6m2.1 2.08h-1.08v-2.36h1.08v-3.34h2.76v3.34h1.92v2.36h-1.92v2.92c0 1.52.18 2.4 1.2 2.4q.28 0 .5-.04v2.4c-.3.04-.86.06-1.16.06-2.14 0-3.3-1.58-3.3-3.84zm13.16-1.68-1.36 1.6a2.7 2.7 0 0 0-1.62-.64c-.6 0-1.06.36-1.06.82 0 .48.26.64 1.56 1.1 2.28.8 2.98 1.48 2.98 3.04 0 2.06-1.7 3.52-4.1 3.52a4.8 4.8 0 0 1-3.72-1.62l1.42-1.68q1.14 1.15 2.32 1.16c.7 0 1.24-.46 1.24-1.08 0-.54-.22-.78-1.5-1.24-2.38-.84-2.86-1.48-2.86-2.9 0-1.9 1.54-3.12 3.5-3.12q1.8 0 3.2 1.04\"\n fill=\"var(--psai-text-dark)\"\n />\n </svg>\n );\n}\n\nexport default PSAILogo;\n","import type * as React from \"react\";\n\nexport function SlingshotIcon(props: React.ComponentProps<\"svg\">) {\n return (\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 64 64\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n style={{ fill: \"var(--red-500)\" }}\n >\n <path d=\"M32 0C14.35 0 0 14.35 0 32s14.35 32 32 32 32-14.35 32-32S49.64 0 32 0\" />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M55.88 41.92a2.25 2.25 0 1 1-4.15-1.72 2.25 2.25 0 0 1 4.15 1.72\"\n fill=\"white\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M41.87 55.9a2.26 2.26 0 1 1-1.72-4.18 2.26 2.26 0 0 1 1.72 4.18\"\n fill=\"white\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M22.08 55.88a2.26 2.26 0 1 1 1.74-4.16 2.26 2.26 0 0 1-1.74 4.16\"\n fill=\"white\"\n />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.1 41.87\" fill=\"white\" />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8.12 22.08a2.25 2.25 0 1 1 1.22 2.94 2.26 2.26 0 0 1-1.22-2.94\"\n fill=\"white\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M22.13 8.1a2.26 2.26 0 1 1-1.22 2.94 2.26 2.26 0 0 1 1.22-2.95\"\n fill=\"white\"\n />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M41.92 8.12\" fill=\"white\" />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M55.9 22.13a2.26 2.26 0 1 1-2.95-1.22 2.26 2.26 0 0 1 2.95 1.22\"\n fill=\"white\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M34.36 36.32c-1.75 2.42-3 6.33-.68 8.64 1.57 1.58.38 4.19-1.74 4.19s-3.3-2.61-1.73-4.19c2.32-2.32 1.07-6.22-.69-8.64-.3-.42-1.46-1.68-1.85-1.96-2.42-1.75-6.32-3-8.64-.68-1.57 1.57-4.18.39-4.18-1.73s2.61-3.31 4.18-1.74c2.32 2.32 6.23 1.07 8.64-.68.42-.3 1.68-1.47 1.96-1.86 1.76-2.41 3-6.31.69-8.64-1.58-1.57-.4-4.18 1.73-4.18s3.3 2.61 1.73 4.18c-2.31 2.32-1.07 6.23.69 8.64.3.42 1.46 1.68 1.85 1.96 2.42 1.76 6.32 3 8.64.69 1.57-1.58 4.18-.39 4.18 1.73s-2.6 3.31-4.18 1.74c-2.32-2.32-6.22-1.07-8.64.68-.42.3-1.68 1.47-1.96 1.85\"\n fill=\"white\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M44.3 19.7a3.39 3.39 0 1 1-4.78 4.8 3.39 3.39 0 0 1 4.78-4.8\"\n fill=\"white\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M44.3 44.3a3.4 3.4 0 1 1-4.79-4.79 3.4 3.4 0 0 1 4.8 4.8\"\n fill=\"white\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19.7 44.3a3.39 3.39 0 1 1 4.78-4.79 3.39 3.39 0 0 1-4.79 4.8\"\n fill=\"white\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19.7 19.7a3.39 3.39 0 1 1 4.79 4.78 3.39 3.39 0 0 1-4.8-4.78\"\n fill=\"white\"\n />\n </svg>\n );\n}\n","import type * as React from \"react\";\n\nexport function SlingshotLogo(props: React.ComponentProps<\"svg\">) {\n return (\n <svg\n width=\"133\"\n height=\"36\"\n viewBox=\"0 0 133 36\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n style={\n {\n \"--slingshot-primary-red\": \"var(--red-500)\",\n \"--slingshot-accent-white\": \"var(--logo-accent)\",\n \"--slingshot-text-dark\": \"var(--foreground)\",\n } as React.CSSProperties\n }\n >\n <path\n d=\"M18 0C8.07 0 0 8.07 0 18s8.07 18 18 18 18-8.07 18-18S27.92 0 18 0\"\n fill=\"var(--slingshot-primary-red)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M31.43 23.58a1.27 1.27 0 1 1-2.33-.97 1.27 1.27 0 0 1 2.33.97\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M23.55 31.44a1.27 1.27 0 1 1-.96-2.35 1.27 1.27 0 0 1 .96 2.35\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.42 31.43a1.27 1.27 0 1 1 .98-2.34 1.27 1.27 0 0 1-.98 2.34\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.55 23.55\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.57 12.42a1.27 1.27 0 1 1 .69 1.66 1.27 1.27 0 0 1-.7-1.66\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.45 4.55a1.27 1.27 0 1 1-.7 1.66c-.26-.65.05-1.39.7-1.66\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M23.58 4.57\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M31.45 12.45a1.27 1.27 0 1 1-1.66-.7c.65-.26 1.39.05 1.66.7\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19.33 20.43c-.99 1.36-1.7 3.56-.39 4.86.89.89.22 2.35-.97 2.35-1.2 0-1.86-1.46-.98-2.35 1.3-1.3.6-3.5-.38-4.86a9 9 0 0 0-1.04-1.1c-1.37-.99-3.56-1.69-4.86-.39-.89.89-2.36.22-2.36-.97 0-1.2 1.47-1.86 2.36-.98 1.3 1.3 3.5.6 4.86-.38.23-.17.94-.82 1.1-1.04.98-1.36 1.69-3.56.38-4.86-.88-.89-.22-2.36.98-2.36s1.86 1.47.97 2.36c-1.3 1.3-.6 3.5.39 4.86.17.23.82.94 1.04 1.1 1.36.99 3.55 1.69 4.86.38.89-.88 2.35-.21 2.35.98 0 1.2-1.46 1.86-2.35.98-1.3-1.3-3.5-.6-4.86.38-.24.17-.94.82-1.1 1.04\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M24.92 11.08a1.9 1.9 0 1 1-2.7 2.7 1.9 1.9 0 0 1 2.7-2.7\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M24.92 24.92a1.9 1.9 0 1 1-2.7-2.7 1.9 1.9 0 0 1 2.7 2.7\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11.08 24.92a1.9 1.9 0 1 1 2.69-2.7 1.9 1.9 0 0 1-2.7 2.7\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M11.08 11.08a1.9 1.9 0 1 1 2.7 2.69 1.9 1.9 0 0 1-2.7-2.69\"\n fill=\"var(--slingshot-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.2 2.12a.5.5 0 0 0 .49-.5.5.5 0 0 0-.49-.5.5.5 0 0 0-.49.5c0 .28.22.5.5.5\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M65.81 9.68h.77V3.06h-.77z\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M50.65 6.35c0-1.38 1.06-2.51 2.37-2.51 1.3 0 2.37 1.13 2.37 2.51v.1c-.05 1.37-1.1 2.44-2.37 2.44-1.28 0-2.37-1.14-2.37-2.54m2.37 3.32c.92 0 1.77-.42 2.37-1.15v1.16h.76V3.06h-.76V4.2a3 3 0 0 0-2.37-1.14 3.2 3.2 0 0 0-3.13 3.3c0 1.8 1.4 3.31 3.13 3.31\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.28 8.9c-1.28 0-2.32-1.08-2.37-2.44v-.1c0-1.4 1.06-2.52 2.37-2.52 1.3 0 2.37 1.13 2.37 2.51 0 1.39-1.06 2.54-2.37 2.54m3.13-2.55c0-1.81-1.4-3.29-3.13-3.29-.92 0-1.78.41-2.37 1.14V3.06h-.76v9h.76V8.52c.6.74 1.45 1.15 2.37 1.15 1.73 0 3.13-1.49 3.13-3.32\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M78.66 3.06c-.72 0-1.4.3-1.9.83v-.83h-.74v6.62h.74V5.76a1.95 1.95 0 0 1 1.9-1.93c1.03 0 1.9.86 1.9 1.93v3.92h.74V5.76c0-1.49-1.18-2.7-2.64-2.7\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"m85.24 8.92-.08.02q-.11.04-.37.05-.44.02-.43-.67v-4.5h.9v-.76h-.9V.84h-.78v2.22h-.9v.76h.9v4.52q0 .74.27 1.02.27.3.77.31.38 0 .62-.1l.04-.01z\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M71.35 3.83c1.12 0 2.07.82 2.3 1.97h-4.64a2.4 2.4 0 0 1 2.34-1.97m1.98 3.94a2.3 2.3 0 0 1-1.98 1.14 2.46 2.46 0 0 1-2.4-2.36h5.14c.21 0 .38-.15.38-.35v-.06c-.14-1.75-1.48-3.08-3.12-3.08a3.24 3.24 0 0 0-3.15 3.32c0 1.83 1.41 3.3 3.15 3.3 1.06 0 2.03-.56 2.6-1.5z\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M48.13 6.48s-.2-.16-.4-.25c-.22-.09-.53-.2-1.16-.36q-.13-.02-.25-.06-.64-.16-1-.43-.34-.28-.31-.61.01-.39.4-.67.46-.34 1.18-.3c.54.02.95.3 1.39.62l.04.03.55-.53-.26-.2c-.44-.3-.97-.62-1.69-.65q-.94-.04-1.6.38c-.47.32-.77.79-.77 1.28 0 .37.07.72.43 1.08.43.42 1.1.65 1.72.77.53.1 1.02.3 1.27.51.3.28.4.48.4.76q-.04.43-.5.73c-.3.23-.72.35-1.17.33a3 3 0 0 1-1.81-.78l-.05-.04-.54.51.05.05q1.09.95 2.32 1.02A2.6 2.6 0 0 0 48 9.21q.76-.54.8-1.32a1.7 1.7 0 0 0-.68-1.41\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n d=\"M127.12 20.6h-1.22v-2.7h1.22v-3.84h3.1v3.83h2.15v2.71h-2.16v3.35c0 1.74.2 2.75 1.35 2.75l.56-.04v2.75c-.33.04-.96.07-1.3.07-2.4 0-3.7-1.82-3.7-4.4z\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n d=\"M116.04 23.47a3.1 3.1 0 0 0 3.1 3.19 3.14 3.14 0 0 0 0-6.28c-1.71 0-3.1 1.44-3.1 3.1m-2.85-.04c0-3.02 2.33-5.9 5.97-5.9a5.84 5.84 0 0 1 5.92 5.96 5.8 5.8 0 0 1-5.99 5.99c-3.68 0-5.9-3.04-5.9-6.05\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n d=\"m98.89 18.68-1.53 1.83a3 3 0 0 0-1.82-.73c-.67 0-1.19.41-1.19.94s.3.73 1.75 1.26c2.56.92 3.35 1.7 3.35 3.49 0 2.36-1.9 4.03-4.6 4.03a5.4 5.4 0 0 1-4.18-1.86l1.6-1.92q1.28 1.32 2.6 1.33c.78 0 1.4-.53 1.4-1.24 0-.62-.26-.9-1.7-1.42-2.66-.97-3.2-1.7-3.2-3.33 0-2.18 1.73-3.57 3.93-3.57q2-.01 3.59 1.19\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n d=\"M65.46 29.14V17.9h3.1v1.4a4.2 4.2 0 0 1 3.43-1.77c2.22 0 4.09 1.3 4.09 4.34v7.27h-3.1v-6.17c0-1.88-.52-2.76-2.09-2.76s-2.33 1-2.33 3.1v5.83z\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n d=\"M60.17 17.9h3.1v11.23h-3.1zm-.29-3.45c0-1.03.83-1.88 1.84-1.88s1.84.85 1.84 1.88-.83 1.88-1.84 1.88a1.87 1.87 0 0 1-1.84-1.88\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n d=\"m52.22 18.68-1.53 1.83a3 3 0 0 0-1.82-.73c-.67 0-1.19.41-1.19.94s.3.73 1.75 1.26c2.56.92 3.35 1.7 3.35 3.49 0 2.36-1.9 4.03-4.6 4.03A5.4 5.4 0 0 1 44 27.64l1.6-1.92q1.28 1.32 2.6 1.33c.78 0 1.39-.53 1.39-1.24 0-.62-.25-.9-1.68-1.42-2.68-.97-3.21-1.7-3.21-3.33 0-2.18 1.72-3.57 3.92-3.57q2.02-.01 3.6 1.19\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n d=\"M57.17 23.6c0 1.75.3 2.76 1.44 2.76q.2 0 .43-.05v2.75c-.34.05-.74.07-1.04.07-2.74 0-3.92-1.95-3.92-4.54V12.7h3.1z\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n d=\"M104.03 19.36a4 4 0 0 1 3.43-1.83c1.58 0 2.59.6 3.33 1.53.58.76.76 1.77.76 3v7.07h-3.1v-6.17c0-2-.56-2.75-2.09-2.75q-2.34 0-2.33 3.17v5.75h-3.1V12.57h3.1z\"\n fill=\"var(--slingshot-text-dark)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"m89.41 28-.03 1.78q-.08 1.21-.3 1.85c-.7 2.09-2.88 3.53-5.55 3.53-3.19 0-5.61-2.04-5.86-4.7h3.32q.49 2.03 2.6 2.02c1.63 0 2.57-.86 2.72-2.63v-1.77c-4.29 2.94-8.66-.68-8.66-4.59a5.5 5.5 0 0 1 4.98-5.64c1.46 0 2.74.25 3.68 1.47v-1.47h3.1zm-6.04-7.67a3.14 3.14 0 0 0-3.07 3.12 3.1 3.1 0 0 0 3.07 3.16 3.15 3.15 0 0 0 0-6.28\"\n fill=\"var(--slingshot-text-dark)\"\n />\n </svg>\n );\n}\n\nexport default SlingshotLogo;\n","import type * as React from \"react\";\n\nexport function SustainIcon(props: React.ComponentProps<\"svg\">) {\n return (\n <svg\n width=\"65\"\n height=\"65\"\n viewBox=\"0 0 65 65\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n style={{ fill: \"var(--red-500)\" }}\n >\n <path\n d=\"M63.3 32.5c0 17.32-14.06 32.05-31.4 32.05C14.55 64.55.5 49.82.5 32.5A31.4 31.4 0 0 1 31.9 1.13 31.4 31.4 0 0 1 63.3 32.5\"\n fill=\"white\"\n />\n <path d=\"M58.8 33.3q2.7 0 5.2.53-.15 3.15-.86 6.1-2.09-.46-4.36-.48v.18a2.05 2.05 0 0 0-3.85.95 2.05 2.05 0 0 0 3.98.66q1.93 0 3.75.43a33 33 0 0 1-2.01 5.09q-.91-.15-1.87-.15a12.65 12.65 0 0 0-12.63 12.62v1.94a32 32 0 0 1-4.94 1.94q-.3-1.32-.37-2.72c.6-.36 1-1.01 1-1.77 0-1.13-.9-2.04-2.04-2.04-1.13 0-2.04.91-2.04 2.04 0 1.14.55 1.62 1.31 1.92q.12 1.54.43 3.05-2.95.71-6.1.85a25.96 25.96 0 0 1 25.4-31.12zm-53.66 0a25.96 25.96 0 0 1 25.41 31.12q-3.15-.14-6.1-.86.33-1.45.43-2.97a2.04 2.04 0 0 0 1.44-1.97c0-1.13-.91-2.04-2.05-2.04s-2.04.91-2.04 2.04c0 .7.36 1.31.89 1.7q-.09 1.42-.38 2.76a31 31 0 0 1-5.1-2.04q.12-.9.13-1.81c0-6.96-5.67-12.62-12.63-12.62H3.3a32 32 0 0 1-1.95-4.97q1.78-.39 3.63-.4a2.05 2.05 0 1 0 1.94-2.7c-1.14 0-1.41.4-1.77 1.01v-.1q-2.2.02-4.28.48-.71-2.96-.86-6.07a27 27 0 0 1 5.12-.5zm41.13 27.8c-.07.48-.1 3.35-.11.07zM5.14 48.38c5.98 0 10.87 4.86 10.87 10.86s0 .6-.05.9a32 32 0 0 1-11.7-11.71c.3 0 .58-.05.88-.05m53.67 0q.48-.01.96.05a32 32 0 0 1-11.78 11.77q-.04-.48-.05-.96c0-5.97 4.87-10.86 10.87-10.86M31.99 11.98a27.8 27.8 0 0 0 21 20.16 27.8 27.8 0 0 0-21 20.16 27.8 27.8 0 0 0-21-20.16 27.8 27.8 0 0 0 21-20.16M3.34 46.71c-.44-.06-3.5-.1-.05-.1zm28.67-23.06a8.8 8.8 0 0 1-8.77 8.77 8.8 8.8 0 0 1 8.77 8.8 8.8 8.8 0 0 1 8.78-8.8A8.8 8.8 0 0 1 32 23.65M30.68.45q.41 2.23.4 4.6A26.07 26.07 0 0 1 5.04 31.01c-4.87 0-4.52-.18-4.99-.53q.2-3.11.96-6.05 1.96.42 4.03.43c.3.73 1.04 1.23 1.9 1.23 1.13 0 2.03-.9 2.03-2.04 0-1.13-.9-2.04-2.04-2.04-1.13 0-1.43.43-1.79 1.06a17 17 0 0 1-3.63-.38 30 30 0 0 1 2.15-5.09q.75.09 1.5.1c6.96 0 12.64-5.67 12.64-12.62V3.76q2.42-1.2 5.06-2 .25 1.32.3 2.71c-.55.38-.9.99-.9 1.7 0 1.13.9 2.03 2.04 2.03a2.04 2.04 0 0 0 .63-3.98q-.06-1.49-.35-2.92c1.96-.45 4-.76 6.07-.83zm2.62 0q3.13.12 6.07.82-.29 1.47-.35 3a2 2 0 0 0-1.29 1.9c0 .85.91 2.03 2.05 2.03a2.03 2.03 0 0 0 1-3.8q.05-1.35.3-2.67 2.7.8 5.15 2.01-.08.64-.08 1.31c0 6.96 5.68 12.63 12.63 12.63h1.64a33 33 0 0 1 2.1 4.99q-1.82.37-3.71.37A2.1 2.1 0 0 0 56.99 22c-1.13 0-2.04.9-2.04 2.04a2.06 2.06 0 0 0 3.93.8q2.13 0 4.14-.45.76 2.95.96 6.07-2.51.51-5.17.53A25.96 25.96 0 0 1 33.27.44zm27.08 17.14c.41.04 3.87.08.04.08zm-44.4-12.5.03-.03c0 5.97-4.87 10.86-10.87 10.86H4.6a32.5 32.5 0 0 1 11.4-11.2zm31.99-.44a32 32 0 0 1 11.47 11.22h-.63A10.9 10.9 0 0 1 47.94 5v-.37z\" />\n </svg>\n );\n}\n","import type * as React from \"react\";\n\nexport function SustainLogo(props: React.ComponentProps<\"svg\">) {\n return (\n <svg\n width=\"113\"\n height=\"37\"\n viewBox=\"0 0 113 37\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n style={\n {\n \"--sustain-circle-bg\": \"var(--background)\",\n \"--sustain-primary-red\": \"var(--red-500)\",\n \"--sustain-accent-white\": \"var(--foreground)\",\n \"--sustain-text-dark\": \"var(--foreground)\",\n } as React.CSSProperties\n }\n >\n <path\n d=\"M35.6 18.28c0 9.74-7.9 18.03-17.66 18.03S.28 28.02.28 18.28 8.18.64 17.94.64s17.67 7.9 17.67 17.64\"\n fill=\"var(--sustain-circle-bg)\"\n />\n <path\n d=\"M33.08 18.73q1.5 0 2.92.3a18 18 0 0 1-.48 3.43q-1.19-.26-2.45-.27v.1a1.15 1.15 0 0 0-2.17.54c0 .64.5 1.15 1.14 1.15.51 0 .94-.33 1.1-.78q1.09 0 2.1.24-.44 1.48-1.13 2.86-.52-.09-1.04-.08a7.1 7.1 0 0 0-7.1 7.1c0 3.9.02.7.08 1.04a18 18 0 0 1-2.87 1.14q-.16-.74-.21-1.53c.34-.2.57-.57.57-1 0-.63-.51-1.14-1.15-1.14s-1.15.5-1.15 1.15c0 .63.31.9.74 1.07q.06.87.24 1.72-1.66.4-3.43.48-.3-1.43-.3-2.92a14.6 14.6 0 0 1 14.59-14.58z\"\n fill=\"var(--sustain-primary-red)\"\n />\n <path\n d=\"M2.9 18.73a14.6 14.6 0 0 1 14.28 17.5 18 18 0 0 1-3.43-.48q.19-.8.24-1.67c.47-.14.81-.58.81-1.1 0-.64-.5-1.15-1.15-1.15-.63 0-1.14.5-1.14 1.15 0 .4.2.73.5.95q-.05.79-.22 1.55-1.49-.45-2.86-1.14.07-.51.07-1.02c0-3.92-3.2-7.1-7.1-7.1-3.92 0-.69.02-1.01.07Q1.2 24.92.75 23.42a10 10 0 0 1 2.04-.22 1.15 1.15 0 1 0 1.1-1.52c-.64 0-.8.23-1 .57v-.06q-1.24 0-2.4.27A18 18 0 0 1 0 19.04q1.41-.27 2.88-.28z\"\n fill=\"var(--sustain-primary-red)\"\n />\n <path\n d=\"M33.08 27.2q.26-.01.54.04A18 18 0 0 1 27 33.85q-.03-.27-.03-.53c0-3.36 2.73-6.11 6.1-6.11\"\n fill=\"var(--sustain-primary-red)\"\n />\n <path\n d=\"M2.9 27.2A6.1 6.1 0 0 1 9 33.33c0 3.37 0 .34-.02.5a18 18 0 0 1-6.58-6.58q.24-.02.5-.03\"\n fill=\"var(--sustain-primary-red)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M18 6.74a15.7 15.7 0 0 0 11.8 11.34A15.6 15.6 0 0 0 18 29.42 15.6 15.6 0 0 0 6.17 18.08 15.6 15.6 0 0 0 18 6.74m0 6.56a4.94 4.94 0 0 1-4.93 4.94 4.94 4.94 0 0 1 4.94 4.94 4.96 4.96 0 0 1 4.93-4.94 4.94 4.94 0 0 1-4.93-4.94\"\n fill=\"var(--sustain-primary-red)\"\n />\n <path\n d=\"M18.73.25q1.76.07 3.42.47a11 11 0 0 0-.2 1.68c-.43.17-.72.59-.72 1.07s.5 1.15 1.14 1.15a1.14 1.14 0 0 0 .57-2.14q.02-.77.17-1.5 1.5.44 2.9 1.13-.05.36-.05.73c0 3.92 3.2 7.1 7.1 7.1 3.92 0 .6-.02.9-.05q.72 1.36 1.2 2.86-1.02.21-2.08.21c-.2-.35-.58-.6-1.02-.6-.64 0-1.15.52-1.15 1.16s.51 1.14 1.15 1.14c.48 0 .88-.28 1.06-.69q1.2 0 2.33-.26.42 1.66.54 3.42-1.42.28-2.91.3A14.6 14.6 0 0 1 18.72.25z\"\n fill=\"var(--sustain-primary-red)\"\n />\n <path\n d=\"M17.26.25q.22 1.25.22 2.6c0 8.03-6.6 14.6-14.64 14.6-2.74 0-2.55-.11-2.81-.3q.1-1.77.54-3.4 1.1.23 2.27.23c.17.41.58.7 1.06.7.64 0 1.15-.51 1.15-1.15s-.51-1.15-1.15-1.15-.8.24-1 .6q-1.05 0-2.05-.21.47-1.5 1.2-2.87.43.05.86.06c3.91 0 7.1-3.19 7.1-7.1s0-.48-.04-.72q1.38-.69 2.89-1.15.14.74.17 1.53a1.14 1.14 0 0 0 .64 2.1 1.15 1.15 0 0 0 .35-2.24q-.03-.85-.2-1.65a18 18 0 0 1 3.42-.47z\"\n fill=\"var(--sustain-primary-red)\"\n />\n <path\n d=\"M9 2.84C9 6.2 6.27 8.95 2.9 8.95h-.32A18 18 0 0 1 9 2.65v.2z\"\n fill=\"var(--sustain-primary-red)\"\n />\n <path\n d=\"M26.98 2.62a18 18 0 0 1 6.45 6.3h-.35a6.1 6.1 0 0 1-6.11-6.1V2.6z\"\n fill=\"var(--sustain-primary-red)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.27 5.17a.5.5 0 0 0 .49-.5.5.5 0 0 0-.5-.5.5.5 0 0 0-.48.5c0 .28.22.5.49.5\"\n fill=\"var(--sustain-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M65.88 12.73h.76V6.1h-.76z\"\n fill=\"var(--sustain-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M50.72 9.4c0-1.38 1.06-2.5 2.37-2.5 1.3 0 2.37 1.12 2.37 2.5v.1c-.05 1.37-1.1 2.44-2.37 2.44-1.28 0-2.37-1.14-2.37-2.54m2.37 3.32c.92 0 1.77-.41 2.37-1.15v1.16h.76V6.1h-.76v1.14a3 3 0 0 0-2.37-1.14 3.2 3.2 0 0 0-3.13 3.3c0 1.8 1.4 3.31 3.13 3.31\"\n fill=\"var(--sustain-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.35 11.94c-1.28 0-2.32-1.07-2.37-2.43v-.1c0-1.4 1.06-2.52 2.37-2.52 1.3 0 2.37 1.13 2.37 2.51 0 1.39-1.07 2.54-2.37 2.54m3.13-2.54c0-1.81-1.4-3.29-3.13-3.29-.93 0-1.78.41-2.37 1.14V6.1h-.76v9h.76v-3.53c.6.73 1.45 1.14 2.37 1.14 1.72 0 3.13-1.49 3.13-3.32\"\n fill=\"var(--sustain-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M78.73 6.11c-.72 0-1.4.3-1.9.84V6.1h-.74v6.62h.73V8.8a1.95 1.95 0 0 1 1.9-1.93c1.03 0 1.9.86 1.9 1.93v3.92h.75V8.8c0-1.49-1.19-2.7-2.64-2.7\"\n fill=\"var(--sustain-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"m85.3 11.97-.07.02q-.11.04-.37.05-.44.02-.44-.67v-4.5h.9V6.1h-.9V3.89h-.78V6.1h-.9v.76h.9v4.53q0 .74.28 1.01.27.3.77.31.37 0 .61-.1l.05-.01z\"\n fill=\"var(--sustain-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M71.42 6.88c1.11 0 2.07.83 2.3 1.97h-4.65a2.4 2.4 0 0 1 2.34-1.97m1.98 3.94a2.3 2.3 0 0 1-1.99 1.14 2.46 2.46 0 0 1-2.39-2.36h5.14c.2 0 .37-.15.37-.35v-.06c-.13-1.75-1.47-3.08-3.12-3.08a3.24 3.24 0 0 0-3.14 3.32c0 1.83 1.41 3.3 3.14 3.3 1.06 0 2.04-.56 2.61-1.5z\"\n fill=\"var(--sustain-accent-white)\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M48.2 9.53s-.2-.16-.41-.25c-.22-.09-.52-.2-1.16-.35q-.12-.04-.25-.06-.63-.17-1-.44-.33-.28-.3-.61.01-.39.4-.67.45-.34 1.18-.3c.54.02.95.3 1.39.62l.04.03.55-.53-.26-.2c-.44-.3-.97-.62-1.69-.65q-.95-.04-1.6.38c-.47.32-.77.79-.77 1.28-.01.37.07.72.43 1.08.43.43 1.1.65 1.72.77.53.1 1.02.3 1.26.51.3.28.4.48.4.77q-.02.42-.48.72c-.3.23-.73.35-1.18.33a3.2 3.2 0 0 1-1.82-.78l-.04-.04-.54.51.05.05q1.09.95 2.31 1.02a2.6 2.6 0 0 0 1.64-.46q.77-.54.81-1.32a1.7 1.7 0 0 0-.68-1.41\"\n fill=\"var(--sustain-accent-white)\"\n />\n <path\n d=\"m52.1 23-1.35 1.6a2.7 2.7 0 0 0-1.62-.65c-.6 0-1.06.36-1.06.82 0 .48.26.64 1.56 1.1 2.28.8 2.98 1.48 2.98 3.04 0 2.06-1.7 3.52-4.1 3.52a4.8 4.8 0 0 1-3.72-1.62l1.42-1.68q1.15 1.15 2.32 1.16c.7 0 1.24-.46 1.24-1.08 0-.54-.22-.78-1.5-1.24-2.38-.84-2.86-1.48-2.86-2.9 0-1.9 1.54-3.12 3.5-3.12q1.8 0 3.2 1.04m2.43-.69h2.76v5.56q0 2.22 1.98 2.22 2 0 2-2.22v-5.56H64v6.02c0 2.62-1.7 4.08-4.74 4.08s-4.74-1.46-4.74-4.08zm18.8.68-1.35 1.6a2.7 2.7 0 0 0-1.62-.64c-.6 0-1.06.36-1.06.82 0 .48.26.64 1.56 1.1 2.28.8 2.98 1.48 2.98 3.04 0 2.06-1.7 3.52-4.1 3.52a4.8 4.8 0 0 1-3.72-1.62l1.42-1.68q1.15 1.15 2.32 1.16c.7 0 1.24-.46 1.24-1.08 0-.54-.22-.78-1.5-1.24-2.38-.84-2.86-1.48-2.86-2.9 0-1.9 1.54-3.12 3.5-3.12q1.8 0 3.2 1.04m2.45 1.68H74.7v-2.36h1.08v-3.34h2.76v3.34h1.92v2.36h-1.92v2.92c0 1.52.18 2.4 1.2 2.4q.28 0 .5-.04v2.4c-.3.04-.86.06-1.16.06-2.14 0-3.3-1.58-3.3-3.84zM90 27.23a2.76 2.76 0 0 0-2.74-2.76 2.7 2.7 0 0 0-2.74 2.74c0 1.52 1.2 2.74 2.74 2.74A2.8 2.8 0 0 0 90 27.23m-.3-3.66v-1.26h2.76v9.8H89.7v-1.28a3.9 3.9 0 0 1-3.2 1.58c-2.76 0-4.82-2.26-4.82-5.22 0-2.92 2.04-5.2 4.76-5.2q1.91.01 3.26 1.58m5.31-1.26h2.76v9.8h-2.76zm-.26-4.14c0-.9.74-1.64 1.64-1.64s1.64.74 1.64 1.64-.74 1.64-1.64 1.64-1.64-.74-1.64-1.64m5.58 13.94v-9.8h2.76v1.22a3.7 3.7 0 0 1 3.06-1.54c1.98 0 3.64 1.14 3.64 3.78v6.34h-2.76v-5.38c0-1.64-.46-2.4-1.86-2.4-1.38 0-2.08.86-2.08 2.7v5.08z\"\n fill=\"var(--sustain-accent-white)\"\n />\n </svg>\n );\n}\n\nexport default SustainLogo;\n","import type * as React from \"react\";\n\nimport { BodhiIcon } from \"./marks/bodhi-icon\";\nimport { BodhiLogo } from \"./marks/bodhi-logo\";\nimport { PSAILogo } from \"./marks/psai-logo\";\nimport { SlingshotIcon } from \"./marks/slingshot-icon\";\nimport { SlingshotLogo } from \"./marks/slingshot-logo\";\nimport { SustainIcon } from \"./marks/sustain-icon\";\nimport { SustainLogo } from \"./marks/sustain-logo\";\n\ntype LogoBrand = \"bodhi\" | \"slingshot\" | \"sustain\" | \"psai\";\ntype LogoVariant = \"logo\" | \"icon\";\n\ntype Mark = (props: React.ComponentProps<\"svg\">) => React.JSX.Element;\n\n// PS AI has no dedicated icon mark yet → its `icon` falls back to the full logo.\nconst MARKS: Record<LogoBrand, Record<LogoVariant, Mark>> = {\n bodhi: { logo: BodhiLogo, icon: BodhiIcon },\n slingshot: { logo: SlingshotLogo, icon: SlingshotIcon },\n sustain: { logo: SustainLogo, icon: SustainIcon },\n psai: { logo: PSAILogo, icon: PSAILogo },\n};\n\nfunction Logo({\n brand,\n variant = \"logo\",\n ...props\n}: React.ComponentProps<\"svg\"> & {\n /** Which product the mark belongs to. */\n brand: LogoBrand;\n /** `logo` is the full wordmark; `icon` is the compact symbol. */\n variant?: LogoVariant;\n}) {\n const Mark = MARKS[brand][variant];\n return <Mark data-slot=\"logo\" data-brand={brand} data-variant={variant} {...props} />;\n}\n\nexport { Logo, type LogoBrand, type LogoVariant };\n","import { Popover as PopoverPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-card p-4 text-card-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return <div data-slot=\"popover-title\" className={cn(\"font-medium\", className)} {...props} />;\n}\n\nfunction PopoverDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n};\n","import { cn } from \"@/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"skeleton\" className={cn(\"skeleton-shimmer rounded-md\", className)} {...props} />\n );\n}\n\nfunction SkeletonAvatar({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <Skeleton\n data-slot=\"skeleton-avatar\"\n className={cn(\"size-10 rounded-full\", className)}\n {...props}\n />\n );\n}\n\nfunction SkeletonLine({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <Skeleton\n data-slot=\"skeleton-line\"\n className={cn(\"h-4 w-full rounded-full\", className)}\n {...props}\n />\n );\n}\n\nfunction SkeletonObject({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <Skeleton\n data-slot=\"skeleton-object\"\n className={cn(\"h-24 w-full rounded-md\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton, SkeletonAvatar, SkeletonLine, SkeletonObject };\n","import type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nfunction Table({\n className,\n striped = false,\n ...props\n}: React.ComponentProps<\"table\"> & { striped?: boolean }) {\n return (\n <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\">\n <table\n data-slot=\"table\"\n data-striped={striped || undefined}\n className={cn(\n \"w-full caption-bottom text-sm\",\n // Zebra striping (Figma odd/even rows).\n striped && \"[&_tbody_tr:nth-child(even)]:bg-muted/50\",\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return <thead data-slot=\"table-header\" className={cn(\"[&_tr]:border-b\", className)} {...props} />;\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\", className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Text — the typography primitive. Renders any element via `as` and drives\n// size/line-height from the design-system BODY type scale (Inter): the Figma\n// \"paragraph large/regular/small/mini\" + caption steps (tokens in\n// styles/tokens/typography.css). Inline links compose as children.\nconst textVariants = cva(\"\", {\n variants: {\n // Body scale — font-size + line-height come straight from the type tokens.\n size: {\n large:\n \"text-[length:var(--paragraph-large-font-size)] leading-[var(--paragraph-large-line-height)]\",\n regular:\n \"text-[length:var(--paragraph-regular-font-size)] leading-[var(--paragraph-regular-line-height)]\",\n small:\n \"text-[length:var(--paragraph-small-font-size)] leading-[var(--paragraph-small-line-height)]\",\n mini: \"text-[length:var(--paragraph-mini-font-size)] leading-[var(--paragraph-mini-line-height)]\",\n caption:\n \"text-[length:var(--caption-font-size)] leading-[var(--caption-line-height)] tracking-[var(--caption-letter-spacing)] uppercase\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n variant: {\n default: \"text-foreground\",\n muted: \"text-muted-foreground\",\n primary: \"text-primary\",\n destructive: \"text-destructive\",\n success: \"text-[var(--content-success)]\",\n },\n font: {\n body: \"font-sans\",\n heading: \"font-heading\",\n mono: \"font-mono\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n truncate: {\n true: \"truncate\",\n },\n },\n defaultVariants: {\n size: \"regular\",\n weight: \"normal\",\n variant: \"default\",\n font: \"body\",\n },\n});\n\ntype TextProps = Omit<React.ComponentProps<\"p\">, \"color\"> &\n VariantProps<typeof textVariants> & {\n /** Element/component to render. Defaults to `p`. */\n as?: React.ElementType;\n };\n\nfunction Text({\n as,\n className,\n size,\n weight,\n variant,\n font,\n align,\n truncate,\n ...props\n}: TextProps) {\n const Comp = as ?? \"p\";\n return (\n <Comp\n data-slot=\"text\"\n className={cn(textVariants({ size, weight, variant, font, align, truncate }), className)}\n {...props}\n />\n );\n}\n\nexport { Text, textVariants, type TextProps };\n","\"use client\";\n\nimport * as React from \"react\";\n\n// ThemeProvider — owns the two global appearance choices for an app and persists\n// them together (one localStorage entry, no extra variables):\n// - `theme` : light | dark → toggles the `.dark` class on <html>\n// - `product` : which brand → toggles `.theme-{product}` on <html> (drives\n// the Logo + PageBackground) and is the default\n// logo shown by the Header.\n// Apps wrap their tree in <ThemeProvider>; components read state via useTheme().\n\nexport type ThemeMode = \"light\" | \"dark\";\nexport type ThemeProduct = \"slingshot\" | \"sustain\" | \"bodhi\" | \"psai\";\n\nconst PRODUCTS: ThemeProduct[] = [\"slingshot\", \"sustain\", \"bodhi\", \"psai\"];\n\ntype ThemePreferences = { theme: ThemeMode; product: ThemeProduct };\n\ntype ThemeContextValue = ThemePreferences & {\n /** Set the colour mode explicitly. */\n setTheme: (theme: ThemeMode) => void;\n /** Flip between light and dark. */\n toggleTheme: () => void;\n /** Switch the active product (logo + background + future customisations). */\n setProduct: (product: ThemeProduct) => void;\n};\n\nconst ThemeContext = React.createContext<ThemeContextValue | null>(null);\n\nconst DEFAULT_STORAGE_KEY = \"ds-theme-preferences\";\n\nfunction readStored(storageKey: string): Partial<ThemePreferences> {\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as Partial<ThemePreferences>;\n return {\n theme: parsed.theme === \"dark\" || parsed.theme === \"light\" ? parsed.theme : undefined,\n product: PRODUCTS.includes(parsed.product as ThemeProduct) ? parsed.product : undefined,\n };\n } catch {\n return {};\n }\n}\n\nfunction prefersDark(): boolean {\n try {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n } catch {\n return false;\n }\n}\n\nfunction applyToDocument({ theme, product }: ThemePreferences): void {\n const root = document.documentElement;\n root.classList.toggle(\"dark\", theme === \"dark\");\n for (const p of PRODUCTS) root.classList.toggle(`theme-${p}`, p === product);\n}\n\nfunction ThemeProvider({\n children,\n defaultTheme = \"light\",\n defaultProduct = \"slingshot\",\n storageKey = DEFAULT_STORAGE_KEY,\n}: {\n children: React.ReactNode;\n /** Colour mode used when nothing is stored (system preference still wins on first load). */\n defaultTheme?: ThemeMode;\n /** Product used when nothing is stored. */\n defaultProduct?: ThemeProduct;\n /** localStorage key for the persisted `{ theme, product }`. */\n storageKey?: string;\n}) {\n // Lazy init from storage → system preference → defaults (runs once, client-side).\n const [prefs, setPrefs] = React.useState<ThemePreferences>(() => {\n if (typeof window === \"undefined\") return { theme: defaultTheme, product: defaultProduct };\n const stored = readStored(storageKey);\n return {\n theme: stored.theme ?? (prefersDark() ? \"dark\" : defaultTheme),\n product: stored.product ?? defaultProduct,\n };\n });\n\n // Reflect to <html> and persist on every change.\n React.useEffect(() => {\n applyToDocument(prefs);\n try {\n localStorage.setItem(storageKey, JSON.stringify(prefs));\n } catch {\n // storage unavailable (private mode) — degrade silently\n }\n }, [prefs, storageKey]);\n\n const value = React.useMemo<ThemeContextValue>(\n () => ({\n ...prefs,\n setTheme: (theme) => setPrefs((p) => ({ ...p, theme })),\n toggleTheme: () => setPrefs((p) => ({ ...p, theme: p.theme === \"dark\" ? \"light\" : \"dark\" })),\n setProduct: (product) => setPrefs((p) => ({ ...p, product })),\n }),\n [prefs],\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nfunction useTheme(): ThemeContextValue {\n const ctx = React.useContext(ThemeContext);\n if (!ctx) {\n throw new Error(\"useTheme must be used within a <ThemeProvider>.\");\n }\n return ctx;\n}\n\nexport { ThemeProvider, useTheme, ThemeContext };\n"],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import * as react_jsx_runtime164 from "react/jsx-runtime";
2
+ import * as class_variance_authority_types11 from "class-variance-authority/types";
3
+ import { VariantProps } from "class-variance-authority";
4
+ import * as React from "react";
5
+
6
+ //#region src/primitives/Heading/Heading.d.ts
7
+ declare const headingVariants: (props?: ({
8
+ size?: "1" | "2" | "3" | "4" | "5" | "6" | "7" | null | undefined;
9
+ weight?: "medium" | "normal" | "semibold" | null | undefined;
10
+ align?: "left" | "center" | "right" | null | undefined;
11
+ gradient?: boolean | null | undefined;
12
+ } & class_variance_authority_types11.ClassProp) | undefined) => string;
13
+ type HeadingProps = React.ComponentProps<"h2"> & VariantProps<typeof headingVariants> & {
14
+ /** Semantic heading level/element. Defaults to `h2`. */
15
+ as?: React.ElementType;
16
+ };
17
+ declare function Heading({
18
+ as,
19
+ className,
20
+ size,
21
+ weight,
22
+ align,
23
+ gradient,
24
+ ...props
25
+ }: HeadingProps): react_jsx_runtime164.JSX.Element;
26
+ //#endregion
27
+ //#region src/primitives/Text/Text.d.ts
28
+ declare const textVariants: (props?: ({
29
+ size?: "large" | "regular" | "small" | "mini" | "caption" | null | undefined;
30
+ weight?: "medium" | "normal" | "semibold" | null | undefined;
31
+ variant?: "default" | "destructive" | "success" | "muted" | "primary" | null | undefined;
32
+ font?: "body" | "heading" | "mono" | null | undefined;
33
+ align?: "left" | "center" | "right" | null | undefined;
34
+ truncate?: boolean | null | undefined;
35
+ } & class_variance_authority_types11.ClassProp) | undefined) => string;
36
+ type TextProps = Omit<React.ComponentProps<"p">, "color"> & VariantProps<typeof textVariants> & {
37
+ /** Element/component to render. Defaults to `p`. */
38
+ as?: React.ElementType;
39
+ };
40
+ declare function Text({
41
+ as,
42
+ className,
43
+ size,
44
+ weight,
45
+ variant,
46
+ font,
47
+ align,
48
+ truncate,
49
+ ...props
50
+ }: TextProps): react_jsx_runtime164.JSX.Element;
51
+ //#endregion
52
+ //#region src/primitives/ThemeProvider/ThemeProvider.d.ts
53
+ type ThemeMode = "light" | "dark";
54
+ type ThemeProduct = "slingshot" | "sustain" | "bodhi" | "psai";
55
+ type ThemePreferences = {
56
+ theme: ThemeMode;
57
+ product: ThemeProduct;
58
+ };
59
+ type ThemeContextValue = ThemePreferences & {
60
+ /** Set the colour mode explicitly. */
61
+ setTheme: (theme: ThemeMode) => void;
62
+ /** Flip between light and dark. */
63
+ toggleTheme: () => void;
64
+ /** Switch the active product (logo + background + future customisations). */
65
+ setProduct: (product: ThemeProduct) => void;
66
+ };
67
+ declare const ThemeContext: React.Context<ThemeContextValue | null>;
68
+ declare function ThemeProvider({
69
+ children,
70
+ defaultTheme,
71
+ defaultProduct,
72
+ storageKey
73
+ }: {
74
+ children: React.ReactNode;
75
+ /** Colour mode used when nothing is stored (system preference still wins on first load). */
76
+ defaultTheme?: ThemeMode;
77
+ /** Product used when nothing is stored. */
78
+ defaultProduct?: ThemeProduct;
79
+ /** localStorage key for the persisted `{ theme, product }`. */
80
+ storageKey?: string;
81
+ }): react_jsx_runtime164.JSX.Element;
82
+ declare function useTheme(): ThemeContextValue;
83
+ //#endregion
84
+ export { useTheme as a, textVariants as c, headingVariants as d, ThemeProvider as i, Heading as l, ThemeMode as n, Text as o, ThemeProduct as r, TextProps as s, ThemeContext as t, HeadingProps as u };
85
+ //# sourceMappingURL=ThemeProvider.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.cts","names":[],"sources":["../src/primitives/Heading/Heading.tsx","../src/primitives/Text/Text.tsx","../src/primitives/ThemeProvider/ThemeProvider.tsx"],"mappings":";;;;;;cAUM,uBAiCW;;;;EAjCX,QAAA,CAAA,EAAA,OA+BJ,GAAA,IAAA,GAAA,SAAA;IAAA,gCAAA,CAAA,SAEe,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;KAAZ,YAAA,GAAe,KAAA,CAAM,cAAT,CAAA,IAAA,CAAA,GACf,YADe,CAAA,OACK,eADL,CAAA,GAAA;;KACK,EAEb,KAAA,CAAM,WAFO;;iBAKb,OAAA,CAHM;EAAA,EAAA;EAAA,SAAA;EAAA,IAAA;EAAA,MAAA;EAAA,KAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAG8D,YAH9D,CAAA,EAG0E,oBAAA,CAAA,GAAA,CAAA,OAH1E;;;cCrCT,oBDkCoB;;;;EAjCpB,IAAA,CAAA,EAAA,MAAA,GAAA,SA+BJ,GAAA,MAAA,GAAA,IAAA,GAAA,SAAA;EAEG,KAAA,CAAA,EAAA,MAAA,GAAY,QAAA,GAAA,OAAA,GAAA,IAAA,GAAA,SAAA;EAAA,QAAA,CAAA,EAAA,OAAA,GAAA,IAAA,GAAA,SAAA;ICYf,gCAAA,CAAA,SDZwB,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;KCcrB,SAAA,GAAY,IDbK,CCaA,KAAA,CAAM,cDbN,CAAA,GAAA,CAAA,EAAA,OAAA,CAAA,GCcpB,YDdoB,CAAA,OCcA,YDdA,CAAA,GAAA;;KAEb,ECcA,KAAA,CAAM,WDdA;AAAW,CAAA;AAAA,iBCiBjB,IAAA,CDdO;EAAA,EAAA;EAAA,SAAA;EAAA,IAAA;EAAA,MAAA;EAAA,OAAA;EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,ECwBb,SDxBa,CAAA,ECwBJ,oBAAA,CAAA,GAAA,CAAA,ODxBI;;;KErCJ,SAAA;KACA,YAAA;KAIP,gBAAA;SAA4B;WAAoB;AFhBjB,CAAA;KEkB/B,iBAAA,GAAoB,gBFwBR,GAAA;EAAA;UAAG,EAAM,CAAA,KAAA,EEtBN,SFsBM,EAAA,GAAA,IAAA;;aACxB,EAAA,GAAA,GAAA,IAAA;;EAEwB,UAAA,EAAA,CAAA,OAAA,EErBF,YFqBE,EAAA,GAAA,IAAA;AAAA,CAAA;cElBpB,YFqBU,EErBE,KAAA,CAAA,OFqBF,CErBE,iBFqBF,GAAA,IAAA,CAAA;iBEWP,aAAA,CFXU;EAAA,QAAA;EAAA,YAAA;EAAA,cAAA;EAAA;AAAsE,CAAtE,EAAA;UAAI,EEiBX,KAAA,CAAM,SFjBK;;cAAiB,CAAA,EEmBvB,SFnBuB;;gBAAe,CAAA,EEqBpC,YFrBoC;;YAAkC,CAAA,EAAA,MAAA;AAAA,CAAA,CAAA,EEwBxF,oBAAA,CAAA,GAAA,CAAA,OFxBwF;iBE0DhF,QAAA,CAAA,GAAY"}
@@ -0,0 +1,85 @@
1
+ import * as React from "react";
2
+ import * as react_jsx_runtime164 from "react/jsx-runtime";
3
+ import { VariantProps } from "class-variance-authority";
4
+ import * as class_variance_authority_types12 from "class-variance-authority/types";
5
+
6
+ //#region src/primitives/Heading/Heading.d.ts
7
+ declare const headingVariants: (props?: ({
8
+ size?: "1" | "2" | "3" | "4" | "5" | "6" | "7" | null | undefined;
9
+ weight?: "medium" | "normal" | "semibold" | null | undefined;
10
+ align?: "center" | "left" | "right" | null | undefined;
11
+ gradient?: boolean | null | undefined;
12
+ } & class_variance_authority_types12.ClassProp) | undefined) => string;
13
+ type HeadingProps = React.ComponentProps<"h2"> & VariantProps<typeof headingVariants> & {
14
+ /** Semantic heading level/element. Defaults to `h2`. */
15
+ as?: React.ElementType;
16
+ };
17
+ declare function Heading({
18
+ as,
19
+ className,
20
+ size,
21
+ weight,
22
+ align,
23
+ gradient,
24
+ ...props
25
+ }: HeadingProps): react_jsx_runtime164.JSX.Element;
26
+ //#endregion
27
+ //#region src/primitives/Text/Text.d.ts
28
+ declare const textVariants: (props?: ({
29
+ size?: "caption" | "small" | "large" | "regular" | "mini" | null | undefined;
30
+ weight?: "medium" | "normal" | "semibold" | null | undefined;
31
+ variant?: "default" | "destructive" | "success" | "muted" | "primary" | null | undefined;
32
+ font?: "body" | "heading" | "mono" | null | undefined;
33
+ align?: "center" | "left" | "right" | null | undefined;
34
+ truncate?: boolean | null | undefined;
35
+ } & class_variance_authority_types12.ClassProp) | undefined) => string;
36
+ type TextProps = Omit<React.ComponentProps<"p">, "color"> & VariantProps<typeof textVariants> & {
37
+ /** Element/component to render. Defaults to `p`. */
38
+ as?: React.ElementType;
39
+ };
40
+ declare function Text({
41
+ as,
42
+ className,
43
+ size,
44
+ weight,
45
+ variant,
46
+ font,
47
+ align,
48
+ truncate,
49
+ ...props
50
+ }: TextProps): react_jsx_runtime164.JSX.Element;
51
+ //#endregion
52
+ //#region src/primitives/ThemeProvider/ThemeProvider.d.ts
53
+ type ThemeMode = "light" | "dark";
54
+ type ThemeProduct = "slingshot" | "sustain" | "bodhi" | "psai";
55
+ type ThemePreferences = {
56
+ theme: ThemeMode;
57
+ product: ThemeProduct;
58
+ };
59
+ type ThemeContextValue = ThemePreferences & {
60
+ /** Set the colour mode explicitly. */
61
+ setTheme: (theme: ThemeMode) => void;
62
+ /** Flip between light and dark. */
63
+ toggleTheme: () => void;
64
+ /** Switch the active product (logo + background + future customisations). */
65
+ setProduct: (product: ThemeProduct) => void;
66
+ };
67
+ declare const ThemeContext: React.Context<ThemeContextValue | null>;
68
+ declare function ThemeProvider({
69
+ children,
70
+ defaultTheme,
71
+ defaultProduct,
72
+ storageKey
73
+ }: {
74
+ children: React.ReactNode;
75
+ /** Colour mode used when nothing is stored (system preference still wins on first load). */
76
+ defaultTheme?: ThemeMode;
77
+ /** Product used when nothing is stored. */
78
+ defaultProduct?: ThemeProduct;
79
+ /** localStorage key for the persisted `{ theme, product }`. */
80
+ storageKey?: string;
81
+ }): react_jsx_runtime164.JSX.Element;
82
+ declare function useTheme(): ThemeContextValue;
83
+ //#endregion
84
+ export { useTheme as a, textVariants as c, headingVariants as d, ThemeProvider as i, Heading as l, ThemeMode as n, Text as o, ThemeProduct as r, TextProps as s, ThemeContext as t, HeadingProps as u };
85
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","names":[],"sources":["../src/primitives/Heading/Heading.tsx","../src/primitives/Text/Text.tsx","../src/primitives/ThemeProvider/ThemeProvider.tsx"],"mappings":";;;;;;cAUM,uBAiCW;;;;EAjCX,QAAA,CAAA,EAAA,OA+BJ,GAAA,IAAA,GAAA,SAAA;IAAA,gCAAA,CAAA,SAEe,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;KAAZ,YAAA,GAAe,KAAA,CAAM,cAAT,CAAA,IAAA,CAAA,GACf,YADe,CAAA,OACK,eADL,CAAA,GAAA;;KACK,EAEb,KAAA,CAAM,WAFO;;iBAKb,OAAA,CAHM;EAAA,EAAA;EAAA,SAAA;EAAA,IAAA;EAAA,MAAA;EAAA,KAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EAG8D,YAH9D,CAAA,EAG0E,oBAAA,CAAA,GAAA,CAAA,OAH1E;;;cCrCT,oBDkCoB;;;;EAjCpB,IAAA,CAAA,EAAA,MAAA,GAAA,SA+BJ,GAAA,MAAA,GAAA,IAAA,GAAA,SAAA;EAEG,KAAA,CAAA,EAAA,QAAY,GAAA,MAAA,GAAA,OAAA,GAAA,IAAA,GAAA,SAAA;EAAA,QAAA,CAAA,EAAA,OAAA,GAAA,IAAA,GAAA,SAAA;ICYf,gCAAA,CAAA,SDZwB,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;KCcrB,SAAA,GAAY,IDbK,CCaA,KAAA,CAAM,cDbN,CAAA,GAAA,CAAA,EAAA,OAAA,CAAA,GCcpB,YDdoB,CAAA,OCcA,YDdA,CAAA,GAAA;;KAEb,ECcA,KAAA,CAAM,WDdA;AAAW,CAAA;AAAA,iBCiBjB,IAAA,CDdO;EAAA,EAAA;EAAA,SAAA;EAAA,IAAA;EAAA,MAAA;EAAA,OAAA;EAAA,IAAA;EAAA,KAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,ECwBb,SDxBa,CAAA,ECwBJ,oBAAA,CAAA,GAAA,CAAA,ODxBI;;;KErCJ,SAAA;KACA,YAAA;KAIP,gBAAA;SAA4B;WAAoB;AFhBjB,CAAA;KEkB/B,iBAAA,GAAoB,gBFwBR,GAAA;EAAA;UAAG,EAAM,CAAA,KAAA,EEtBN,SFsBM,EAAA,GAAA,IAAA;;aACxB,EAAA,GAAA,GAAA,IAAA;;EAEwB,UAAA,EAAA,CAAA,OAAA,EErBF,YFqBE,EAAA,GAAA,IAAA;AAAA,CAAA;cElBpB,YFqBU,EErBE,KAAA,CAAA,OFqBF,CErBE,iBFqBF,GAAA,IAAA,CAAA;iBEWP,aAAA,CFXU;EAAA,QAAA;EAAA,YAAA;EAAA,cAAA;EAAA;AAAsE,CAAtE,EAAA;UAAI,EEiBX,KAAA,CAAM,SFjBK;;cAAiB,CAAA,EEmBvB,SFnBuB;;gBAAe,CAAA,EEqBpC,YFrBoC;;YAAkC,CAAA,EAAA,MAAA;AAAA,CAAA,CAAA,EEwBxF,oBAAA,CAAA,GAAA,CAAA,OFxBwF;iBE0DhF,QAAA,CAAA,GAAY"}