{"version":3,"sources":["../src/lib/utils.ts","../src/components/ui/button/button.tsx","../src/components/ui/input/input.tsx","../src/components/ui/label/label.tsx","../src/components/ui/textarea/textarea.tsx","../src/components/ui/badge/badge.tsx","../src/components/ui/card/card.tsx","../src/components/ui/separator/separator.tsx","../src/components/ui/skeleton/skeleton.tsx","../src/components/ui/tooltip/tooltip.tsx","../src/components/ui/avatar/avatar.tsx","../src/components/ui/review-card/review-card.tsx","../src/components/ui/feature-card/feature-card.tsx","../src/components/ui/checkbox/checkbox.tsx","../src/components/ui/switch/switch.tsx","../src/components/ui/radio-group/radio-group.tsx","../src/components/ui/select/select.tsx","../src/components/ui/dialog/dialog.tsx","../src/components/ui/alert/alert.tsx","../src/components/ui/progress/progress.tsx","../src/components/ui/typography/typography.tsx","../src/components/ui/logo/logo.tsx"],"names":["twMerge","clsx","cva","Slot","jsxs","jsx","Loader2","Slottable","React","React2","LabelPrimitive","React3","React4","React5","SeparatorPrimitive","TooltipPrimitive","React6","React7","AvatarPrimitive","Star","React8","React9","React10","CheckboxPrimitive","CheckIcon","React11","SwitchPrimitive","React12","RadioGroupPrimitive","CircleIcon","SelectPrimitive","React13","ChevronDownIcon","ChevronUpIcon","DialogPrimitive","React14","XIcon","React15","React16","ProgressPrimitive","React17"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n","import { Slot, Slottable } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Loader2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-semibold transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-40 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 cursor-pointer\",\n  {\n    variants: {\n      variant: {\n        default: [\n          //main styles\n          \"bg-gradient-to-b from-primary-500 to-primary-600 text-white\",\n          //borders\n          \"border border-primary-400\",\n          //hover styles\n          \"hover:from-primary-600 hover:to-primary-600 hover:border-primary-500/50\",\n        ],\n        secondary: [\n          // main styles\n          \"bg-gradient-to-b from-secondary-500 to-secondary-600 text-secondary-foreground\",\n          // borders\n          \"border border-secondary-400\",\n          // hover styles\n          \"hover:from-secondary-600 hover:to-secondary-600 hover:border-secondary-500/50\",\n        ],\n        outline: [\n          // main styles\n          \"bg-transparent text-primary-500\",\n          // borders\n          \"border border-primary-500\",\n          // hover styles\n          \"hover:border-primary-600 hover:text-primary-600\",\n        ],\n        ghost: [\n          // main styles\n          \"bg-transparent text-muted-foreground\",\n          // hover styles\n          \"hover:bg-elevated hover:text-foreground\",\n        ],\n        destructive: [\n          // main styles\n          \"bg-gradient-to-b from-red-500 to-red-600 text-white\",\n          // borders\n          \"border border-red-400\",\n          // hover styles\n          \"hover:from-red-600 hover:to-red-600 hover:border-red-500/50\",\n        ],\n        link: [\n          // main styles\n          \"text-primary underline-offset-4\",\n          // hover styles\n          \"hover:underline\",\n        ],\n      },\n      size: {\n        default: \"h-9 px-4 py-2 text-sm\",\n        sm: \"h-7 px-3 text-xs\",\n        lg: \"h-11 px-6 text-sm\",\n        icon: \"h-9 w-9\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n);\n\nexport type ButtonProps = React.ComponentProps<\"button\"> &\n  VariantProps<typeof buttonVariants> & {\n    asChild?: boolean;\n    /** Shows a spinner and disables interaction. Sets aria-busy automatically. */\n    loading?: boolean;\n  };\n\n/**\n * # Button\n *\n * The primary interactive element in the Commit Design System.\n * Renders a semantic `<button>` by default, with full support for icon composition,\n * async loading states, and rendering as any element via `asChild`.\n *\n * @see {@link https://storybook.commitpt.com/?path=/docs/ui-button--docs Storybook documentation}\n *\n * ---\n *\n * ## Variants\n *\n * | Variant       | Token family        | When to use                                                        |\n * |---------------|---------------------|--------------------------------------------------------------------|\n * | `default`     | `primary` (blue)    | The single most important action in a view. Use at most once.      |\n * | `secondary`   | `secondary` (purple)| Supporting actions alongside a primary CTA (e.g. \"Save draft\").   |\n * | `outline`     | `primary` border    | Lower-emphasis actions that still need clear visual affordance.    |\n * | `ghost`       | Transparent         | Toolbar actions, table row controls, nav items.                    |\n * | `destructive` | Red semantic        | Irreversible actions. Always pair with a confirmation step.        |\n * | `link`        | `primary` text      | Inline navigation-style actions.                                   |\n *\n * ---\n *\n * ## Sizes\n *\n * | Size      | Height | Use case                                              |\n * |-----------|--------|-------------------------------------------------------|\n * | `sm`      | 28px   | Compact toolbars, inline table actions, form fields.  |\n * | `default` | 36px   | The right choice for 95% of product UI.               |\n * | `lg`      | 44px   | Hero sections, onboarding flows, mobile CTAs.         |\n * | `icon`    | 36×36px| Square icon-only buttons. Always set `aria-label`.    |\n *\n * ---\n *\n * ## Usage\n *\n * ### Basic\n * ```tsx\n * <Button>Save changes</Button>\n * <Button variant=\"outline\">Cancel</Button>\n * <Button variant=\"destructive\">Delete account</Button>\n * ```\n *\n * ### With icons\n * ```tsx\n * // Icon on the left — reinforces the label before it's read\n * <Button><Plus /> Create project</Button>\n *\n * // Icon on the right — implies directionality or consequence\n * <Button>Continue <ArrowRight /></Button>\n *\n * // Icon only — must have aria-label\n * <Button size=\"icon\" aria-label=\"Create new item\"><Plus /></Button>\n * ```\n *\n * ### Loading state\n * ```tsx\n * // Automatically disables the button and sets aria-busy\n * <Button loading>Saving…</Button>\n * ```\n *\n * ### Render as a router link (asChild)\n * ```tsx\n * <Button asChild>\n *   <Link href=\"/dashboard\">Go to dashboard</Link>\n * </Button>\n * ```\n *\n * ---\n *\n * ## Accessibility\n *\n * - Focus ring uses `focus-visible` — only appears during keyboard navigation, never on mouse click.\n * - `loading` automatically sets `disabled` and `aria-busy=\"true\"`. Do not set these manually alongside `loading`.\n * - Icon-only buttons (`size=\"icon\"`) **must** have an `aria-label`. Without it, screen readers announce only \"button\" with no context.\n * - `size=\"default\"` (36px) meets the WCAG 2.5.5 minimum touch target. For mobile-critical actions, prefer `size=\"lg\"`.\n * - Disabled buttons are removed from the tab order by the browser. If a tooltip is needed to explain why the button is disabled, use `aria-disabled` instead and handle clicks manually.\n *\n * ---\n *\n * ## Design tokens\n *\n * Colors are driven by the Commit theme tokens defined in `src/styles/theme.css`.\n * Override tokens after importing the theme CSS to customise for a specific product:\n *\n * ```css\n * @import \"@commitpt/design-system/styles\";\n *\n * @theme {\n *   --color-primary: oklch(...);\n * }\n * ```\n */\nfunction Button({\n  className,\n  variant,\n  size,\n  asChild = false,\n  loading = false,\n  disabled,\n  children,\n  ...props\n}: ButtonProps) {\n  const Comp = asChild ? Slot : \"button\";\n\n  return (\n    <Comp\n      data-slot=\"button\"\n      aria-busy={loading || undefined}\n      disabled={disabled || loading}\n      className={cn(buttonVariants({ variant, size, className }))}\n      {...props}\n    >\n      {loading && <Loader2 className=\"animate-spin\" />}\n      <Slottable>{children}</Slottable>\n    </Comp>\n  );\n}\n\nexport { Button, buttonVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface InputProps extends React.ComponentProps<\"input\"> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n  ({ className, type, ...props }, ref) => {\n    return (\n      <input\n        type={type}\n        className={cn(\n          \"flex h-9 w-full rounded-md border border-border bg-input px-3 py-1 text-sm text-foreground shadow-none transition-colors placeholder:text-muted-foreground/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-primary disabled:cursor-not-allowed disabled:opacity-40 file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n          className\n        )}\n        ref={ref}\n        {...props}\n      />\n    );\n  }\n);\nInput.displayName = \"Input\";\n\nexport { Input };\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface LabelProps extends React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {}\n\nconst Label = React.forwardRef<React.ElementRef<typeof LabelPrimitive.Root>, LabelProps>(\n  ({ className, ...props }, ref) => (\n    <LabelPrimitive.Root\n      ref={ref}\n      className={cn(\n        \"text-sm font-medium text-foreground leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n        className\n      )}\n      {...props}\n    />\n  )\n);\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface TextareaProps extends React.ComponentProps<\"textarea\"> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n  ({ className, ...props }, ref) => {\n    return (\n      <textarea\n        className={cn(\n          \"flex min-h-[80px] w-full rounded-md border border-border bg-input px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-primary disabled:cursor-not-allowed disabled:opacity-40 resize-none transition-colors\",\n          className\n        )}\n        ref={ref}\n        {...props}\n      />\n    );\n  }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n\nconst badgeVariants = cva(\n  [\n    // layout\n    \"inline-flex items-center gap-1\",\n    // shape & typography\n    \"rounded-md px-2 py-0.5 text-xs font-medium\",\n    // icon — icon-xxs (12px = size-3) per Brand Identity scale for badge/chip contexts\n    \"[&_svg]:size-3 [&_svg]:shrink-0\",\n    // transition\n    \"transition-colors\",\n  ],\n  {\n    variants: {\n      variant: {\n        primary: [\n          // background\n          \"bg-gradient-to-br from-primary-900 to-primary-800\",\n          // text & icon\n          \"text-primary-400\",\n          // border\n          \"border border-primary-400/20\",\n        ],\n        secondary: [\n          // background\n          \"bg-gradient-to-br from-secondary-900 to-secondary-800\",\n          // text & icon\n          \"text-secondary-400\",\n          // border\n          \"border border-secondary-400/20\",\n        ],\n        outline: [\n          // background\n          \"bg-transparent\",\n          // text & icon\n          \"text-foreground\",\n          // border\n          \"border border-border\",\n        ],\n        destructive: [\n          // background\n          \"bg-destructive/10\",\n          // text & icon\n          \"text-destructive\",\n          // border\n          \"border border-destructive/20\",\n        ],\n      },\n    },\n    defaultVariants: {\n      variant: \"primary\",\n    },\n  }\n);\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface BadgeProps\n  extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * # Badge\n *\n * Elemento inline de classificação ou estado. Suporta ícone à esquerda ou\n * à direita passado como children, quatro variantes e composição livre.\n *\n * @see {@link https://storybook.commitpt.com/?path=/docs/base-components-badge--docs Storybook documentation}\n *\n * ---\n *\n * ## Variantes\n *\n * | Variant       | Fundo                          | Texto           | Quando usar                              |\n * |---------------|--------------------------------|-----------------|------------------------------------------|\n * | `primary`     | `primary-900 → 800` (gradient) | `primary-400`   | Estado activo, categorias, tags normais  |\n * | `secondary`   | `secondary-900 → 800` (gradient)| `secondary-400`| Badges premium, papéis, funcionalidades  |\n * | `outline`     | Transparente                   | `foreground`    | Neutros, filtros, etiquetas sem destaque |\n * | `destructive` | `destructive/10`               | `destructive`   | Erros, avisos, estados críticos          |\n *\n * ---\n *\n * ## Ícones\n *\n * Os ícones são passados como `children` e dimensionados automaticamente a\n * `12px` (`--icon-xxs`) — escala micro adequada ao contexto denso do badge.\n * Coloca o ícone antes ou depois do texto conforme o significado:\n *\n * ```tsx\n * // Ícone à esquerda — reforça o significado antes de ler\n * <Badge variant=\"primary\"><CheckCircle />Activo</Badge>\n *\n * // Ícone à direita — indica consequência ou direcção\n * <Badge variant=\"outline\">Em revisão<Clock /></Badge>\n * ```\n *\n * ---\n *\n * ## Usage\n *\n * ```tsx\n * <Badge>Novo</Badge>\n * <Badge variant=\"secondary\">Pro</Badge>\n * <Badge variant=\"outline\">Rascunho</Badge>\n * <Badge variant=\"destructive\">Erro</Badge>\n * ```\n *\n * ---\n *\n * ## Acessibilidade\n *\n * - O badge é um `div` — não é interactivo por defeito. Se for clicável,\n *   usa `role=\"button\"` e `tabIndex={0}`.\n * - Os ícones passados como children devem ter `aria-hidden=\"true\"` quando\n *   são puramente decorativos e o texto do badge já comunica o significado.\n *\n * ---\n *\n * ## Design tokens\n *\n * | Token                    | Onde é aplicado                          |\n * |--------------------------|------------------------------------------|\n * | `--color-primary-900/800`| Fundo variant `primary`                  |\n * | `--color-secondary-900/800` | Fundo variant `secondary`             |\n * | `--color-destructive`    | Texto e fundo (10%) variant `destructive`|\n * | `--color-border`         | Borda variant `outline`                  |\n * | `--icon-xxs`             | Tamanho do ícone (12px)                  |\n */\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n  return <div className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n\nexport { Badge, badgeVariants };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\nexport interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\nexport interface CardContentProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface CardFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Família de componentes de cartão do Commit Design System. Inclui o container\n * base e os sub-componentes de layout: `CardHeader`, `CardTitle`,\n * `CardDescription`, `CardContent` e `CardFooter`.\n *\n * @see {@link https://storybook.commitpt.com/?path=/docs/ui-card--docs Storybook documentation}\n *\n * ---\n *\n * ## Escala tipográfica\n *\n * | Classe                                          | Tamanho | Onde é usado                    |\n * |-------------------------------------------------|---------|---------------------------------|\n * | `h6` — `text-base font-semibold tracking-tight` | 16px    | `CardTitle`, título `CardIconFeature` |\n * | `muted` — `text-sm leading-5`                   | 14px    | `CardDescription`, descrição    |\n *\n * ---\n *\n * ## Bordas\n *\n * | Token           | Onde é usado  |\n * |-----------------|---------------|\n * | `border-border` | `Card` base   |\n *\n * ---\n *\n * ## Espaçamento\n *\n * | Token    | Valor | Uso típico                                           |\n * |----------|-------|------------------------------------------------------|\n * | `p-6`    | 24px  | padding de `CardHeader`, `CardContent`, `CardFooter` |\n * | `mb-2.5` | 10px  | espaço entre título e descrição                      |\n *\n * ---\n *\n * ## Usage\n *\n * ```tsx\n * <Card>\n *   <CardHeader>\n *     <CardTitle>Título</CardTitle>\n *     <CardDescription>Descrição</CardDescription>\n *   </CardHeader>\n *   <CardContent>Conteúdo</CardContent>\n *   <CardFooter>\n *     <Button variant=\"outline\" size=\"sm\">Cancelar</Button>\n *     <Button size=\"sm\">Guardar</Button>\n *   </CardFooter>\n * </Card>\n * ```\n */\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\"rounded-lg border border-border bg-card text-card-foreground\", className)}\n    {...props}\n  />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n  ({ className, ...props }, ref) => (\n    <div ref={ref} className={cn(\"flex flex-col space-y-1 p-6\", className)} {...props} />\n  )\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n  ({ className, ...props }, ref) => (\n    <h3\n      ref={ref}\n      className={cn(\n        \"text-base font-semibold text-foreground leading-none tracking-tight\",\n        className\n      )}\n      {...props}\n    />\n  )\n);\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, CardDescriptionProps>(\n  ({ className, ...props }, ref) => (\n    <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n  )\n);\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n  ({ className, ...props }, ref) => (\n    <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n  )\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n  ({ className, ...props }, ref) => (\n    <div ref={ref} className={cn(\"flex items-center p-6 pt-0 gap-2\", className)} {...props} />\n  )\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import * as React from \"react\";\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface SeparatorProps extends React.ComponentPropsWithoutRef<\n  typeof SeparatorPrimitive.Root\n> {}\n\nconst Separator = React.forwardRef<\n  React.ElementRef<typeof SeparatorPrimitive.Root>,\n  SeparatorProps\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n  <SeparatorPrimitive.Root\n    ref={ref}\n    decorative={decorative}\n    orientation={orientation}\n    className={cn(\n      \"shrink-0 bg-border/60\",\n      orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n      className\n    )}\n    {...props}\n  />\n));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nfunction Skeleton({ className, ...props }: SkeletonProps) {\n  return <div className={cn(\"animate-pulse rounded-md bg-elevated\", className)} {...props} />;\n}\n\nexport { Skeleton };\n","import * as React from \"react\";\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface TooltipProps extends React.ComponentPropsWithoutRef<\n  typeof TooltipPrimitive.Root\n> {}\nexport interface TooltipTriggerProps extends React.ComponentPropsWithoutRef<\n  typeof TooltipPrimitive.Trigger\n> {}\nexport interface TooltipContentProps extends React.ComponentPropsWithoutRef<\n  typeof TooltipPrimitive.Content\n> {}\n\nconst TooltipProvider = TooltipPrimitive.Provider;\nconst Tooltip = TooltipPrimitive.Root;\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Content>,\n  TooltipContentProps\n>(({ className, sideOffset = 4, ...props }, ref) => (\n  <TooltipPrimitive.Portal>\n    <TooltipPrimitive.Content\n      ref={ref}\n      sideOffset={sideOffset}\n      className={cn(\n        \"z-50 overflow-hidden rounded-md border border-border bg-elevated px-3 py-1.5 text-xs text-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n        className\n      )}\n      {...props}\n    />\n  </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipProvider,\n  TooltipTrigger,\n} from \"@/components/ui/tooltip/tooltip\";\nimport { cn } from \"@/lib/utils\";\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n\nconst avatarVariants = cva(\"relative flex shrink-0 overflow-hidden rounded-full\", {\n  variants: {\n    variant: {\n      default: [],\n      primary: [\n        // gradient shows through as an inset border via padding\n        \"p-px bg-linear-to-b from-primary-300 to-primary-400\",\n      ],\n      secondary: [\"p-px bg-linear-to-b from-secondary-300 to-secondary-400\"],\n    },\n    size: {\n      sm: \"size-7 text-[10px]\",\n      default: \"size-9 text-xs\",\n      lg: \"size-12 text-sm\",\n      xl: \"size-16 text-base\",\n    },\n  },\n  defaultVariants: {\n    variant: \"default\",\n    size: \"default\",\n  },\n});\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type AvatarProps = React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> &\n  VariantProps<typeof avatarVariants> & {\n    /** Text shown in a Tooltip on hover. Omit to disable the tooltip entirely. */\n    tooltip?: React.ReactNode;\n    /** Side the tooltip appears on. Passed through to TooltipContent. */\n    tooltipSide?: React.ComponentPropsWithoutRef<typeof TooltipContent>[\"side\"];\n  };\n\nexport type AvatarImageProps = React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>;\nexport type AvatarFallbackProps = React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>;\n\n// ─── Sub-components ───────────────────────────────────────────────────────────\n\nconst AvatarImage = React.forwardRef<\n  React.ElementRef<typeof AvatarPrimitive.Image>,\n  AvatarImageProps\n>(({ className, ...props }, ref) => (\n  <AvatarPrimitive.Image\n    ref={ref}\n    className={cn(\"aspect-square h-full w-full rounded-full object-cover\", className)}\n    {...props}\n  />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n  React.ElementRef<typeof AvatarPrimitive.Fallback>,\n  AvatarFallbackProps\n>(({ className, ...props }, ref) => (\n  <AvatarPrimitive.Fallback\n    ref={ref}\n    className={cn(\n      \"flex h-full w-full items-center justify-center rounded-full bg-elevated font-medium text-muted-foreground shrink-0\",\n      className\n    )}\n    {...props}\n  />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\n\n/**\n * # Avatar\n *\n * Displays a user or entity's profile image with an optional text fallback,\n * border variant (primary / secondary brand colours), and hover tooltip.\n * Built on top of `@radix-ui/react-avatar` and the design system's Tooltip.\n *\n * @see {@link https://storybook.commitpt.com/?path=/docs/ui-avatar--docs Storybook documentation}\n *\n * ---\n *\n * ## Variants\n *\n * | Variant     | Border                        | When to use                                              |\n * |-------------|-------------------------------|----------------------------------------------------------|\n * | `default`   | None                          | Most product contexts — lists, tables, cards             |\n * | `primary`   | `primary-500 → 600` gradient inset border  | Highlight the current user or a selected/active member   |\n * | `secondary` | `secondary-500 → 600` gradient inset border | Highlight team leads, special roles, or featured members |\n *\n * ---\n *\n * ## Sizes\n *\n * | Size      | Dimensions | Use case                                                    |\n * |-----------|------------|-------------------------------------------------------------|\n * | `sm`      | 28×28px    | Compact lists, comment threads, table rows                  |\n * | `default` | 36×36px    | The right choice for most UI — nav, cards, member lists     |\n * | `lg`      | 48×48px    | Profile headers, dialog triggers, featured user sections    |\n * | `xl`      | 64×64px    | Account settings, user profile pages, onboarding steps      |\n *\n * ---\n *\n * ## Usage\n *\n * ### With image\n * ```tsx\n * <Avatar>\n *   <AvatarImage src=\"/avatars/jane.png\" alt=\"Jane Doe\" />\n *   <AvatarFallback>JD</AvatarFallback>\n * </Avatar>\n * ```\n *\n * ### Fallback only\n * ```tsx\n * <Avatar>\n *   <AvatarFallback>BM</AvatarFallback>\n * </Avatar>\n * ```\n *\n * ### Primary border (current user)\n * ```tsx\n * <Avatar variant=\"primary\">\n *   <AvatarImage src=\"/me.png\" alt=\"You\" />\n *   <AvatarFallback>ME</AvatarFallback>\n * </Avatar>\n * ```\n *\n * ### With tooltip\n * ```tsx\n * <Avatar tooltip=\"Jane Doe\">\n *   <AvatarImage src=\"/avatars/jane.png\" alt=\"Jane Doe\" />\n *   <AvatarFallback>JD</AvatarFallback>\n * </Avatar>\n * ```\n *\n * ### Avatar group (stacked)\n * ```tsx\n * <div className=\"flex -space-x-2\">\n *   <Avatar className=\"ring-2 ring-background\">…</Avatar>\n *   <Avatar className=\"ring-2 ring-background\">…</Avatar>\n * </div>\n * ```\n *\n * ---\n *\n * ## Accessibility\n *\n * - Always pass a meaningful `alt` on `<AvatarImage>`. Screen readers announce the image\n *   description — \"JD\" is not sufficient on its own.\n * - `<AvatarFallback>` is announced as text by screen readers when the image fails to load.\n *   Use initials (2 characters max) to keep announcements concise.\n * - The `tooltip` prop wraps the avatar in a Radix `Tooltip`. The tooltip text is surfaced\n *   via `aria-label` on the trigger, so screen reader users get the name even without hover.\n * - For avatar groups, add a wrapping `<ul>` with `aria-label=\"Team members\"` and render\n *   each avatar inside an `<li>` to give screen readers list context.\n *\n * ---\n *\n * ## Design tokens\n *\n * | Token                    | Used by                        |\n * |--------------------------|--------------------------------|\n * | `--color-primary-500`    | `variant=\"primary\"` outline    |\n * | `--color-secondary-500`  | `variant=\"secondary\"` outline  |\n * | `--color-elevated`       | Fallback background            |\n * | `--color-muted-foreground` | Fallback text color          |\n * | `--color-background`     | Stack ring (`ring-background`) |\n */\nconst Avatar = React.forwardRef<React.ElementRef<typeof AvatarPrimitive.Root>, AvatarProps>(\n  ({ className, variant, size, tooltip, tooltipSide = \"top\", children, ...props }, ref) => {\n    const root = (\n      <AvatarPrimitive.Root\n        ref={ref}\n        className={cn(avatarVariants({ variant, size }), className)}\n        {...props}\n      >\n        {children}\n      </AvatarPrimitive.Root>\n    );\n\n    if (!tooltip) return root;\n\n    return (\n      <TooltipProvider>\n        <Tooltip>\n          <TooltipTrigger asChild>{root}</TooltipTrigger>\n          <TooltipContent side={tooltipSide}>{tooltip}</TooltipContent>\n        </Tooltip>\n      </TooltipProvider>\n    );\n  }\n);\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nexport { Avatar, AvatarFallback, AvatarImage, avatarVariants };\n","import { cva } from \"class-variance-authority\";\nimport { Star } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar/avatar\";\nimport { Card, CardContent, CardFooter, CardHeader } from \"@/components/ui/card/card\";\nimport { cn } from \"@/lib/utils\";\n\n// ─── Star rating ──────────────────────────────────────────────────────────────\n\nfunction StarRating({ rating }: { rating: number }) {\n  const clamped = Math.min(5, Math.max(0, Math.round(rating)));\n  return (\n    <div className=\"flex items-center gap-0.5\" role=\"img\" aria-label={`${clamped} de 5 estrelas`}>\n      {/* gradient definition — zero-size so it doesn't affect layout */}\n      <svg width=\"0\" height=\"0\" className=\"absolute overflow-hidden\">\n        <defs>\n          <linearGradient id=\"star-gradient\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n            <stop offset=\"0%\" stopColor=\"#FDE047\" /> {/* yellow-300 */}\n            <stop offset=\"100%\" stopColor=\"#D97706\" /> {/* amber-600 */}\n          </linearGradient>\n        </defs>\n      </svg>\n      {Array.from({ length: 5 }, (_, i) =>\n        i < clamped ? (\n          <Star\n            key={i}\n            className=\"icon-xs\"\n            style={{ fill: \"url(#star-gradient)\", stroke: \"url(#star-gradient)\" }}\n          />\n        ) : (\n          <Star key={i} className=\"icon-xs fill-transparent text-muted-foreground/30\" />\n        )\n      )}\n    </div>\n  );\n}\n\n// ─── Initials helper ─────────────────────────────────────────────────────────\n\nfunction getInitials(name: string): string {\n  const parts = name.trim().split(/\\s+/);\n  if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n  return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n\nconst reviewCardVariants = cva([\n  // layout — @container enables child container queries\n  \"flex flex-col @container\",\n  // surface — overrides Card's bg-card with the darker surface tone\n  \"bg-surface\",\n  // elevation\n  \"shadow-lg shadow-black/30\",\n]);\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface ReviewCardProps extends React.HTMLAttributes<HTMLDivElement> {\n  /** URL da foto de perfil do reviewer. Quando omitida mostra as iniciais do nome. */\n  avatarSrc?: string;\n  /** Nome completo do reviewer. Usado no cabeçalho e para gerar as iniciais do fallback. */\n  name: string;\n  /** Data de adesão à plataforma, já formatada (ex: \"Membro desde Jan 2023\"). */\n  memberSince: string;\n  /** Título opcional da review. */\n  title?: string;\n  /** Texto da review. */\n  review: string;\n  /** Classificação de 1 a 5 estrelas. Valores fora do intervalo são fixados automaticamente. */\n  rating: number;\n  /** Data em que a review foi publicada, já formatada (ex: \"14 Jan 2025\"). */\n  reviewDate: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * # ReviewCard\n *\n * Exibe a avaliação de um utilizador: foto de perfil, nome, data de adesão,\n * texto da review, classificação por estrelas e data da publicação.\n *\n * @see {@link https://storybook.commitpt.com/?path=/docs/ui-reviewcard--docs Storybook documentation}\n *\n * ---\n *\n * ## Anatomia\n *\n * | Zona         | Conteúdo                                              |\n * |--------------|-------------------------------------------------------|\n * | Header       | `Avatar` (foto ou iniciais) + nome + data de adesão   |\n * | Content      | Texto da review                                       |\n * | Footer       | Estrelas (`rating` / 5) + data da review              |\n *\n * ---\n *\n * ## Escala tipográfica\n *\n * | Elemento        | Variant Typography equivalente | Classes                                      |\n * |-----------------|-------------------------------|----------------------------------------------|\n * | Nome            | `label`                       | `text-sm font-medium text-foreground`         |\n * | Data de adesão  | `caption`                     | `text-xs text-muted-foreground`               |\n * | Texto da review | `muted`                       | `text-sm leading-5 text-muted-foreground`     |\n * | Data da review  | `caption`                     | `text-xs text-muted-foreground`               |\n *\n * ---\n *\n * ## Usage\n *\n * ### Com foto\n * ```tsx\n * <ReviewCard\n *   avatarSrc=\"/avatars/ana.png\"\n *   name=\"Ana Kovač\"\n *   memberSince=\"Membro desde Jan 2023\"\n *   review=\"Excelente plataforma. O feedback das code reviews ajudou-me a crescer rapidamente.\"\n *   rating={5}\n *   reviewDate=\"14 Jan 2025\"\n * />\n * ```\n *\n * ### Sem foto (fallback automático com iniciais)\n * ```tsx\n * <ReviewCard\n *   name=\"Bruno Moisão\"\n *   memberSince=\"Membro desde Mar 2024\"\n *   review=\"As sessões semanais ao vivo são o ponto alto da semana.\"\n *   rating={4}\n *   reviewDate=\"2 Fev 2025\"\n * />\n * ```\n *\n * ---\n *\n * ## Acessibilidade\n *\n * - As estrelas têm `role=\"img\"` e `aria-label=\"N de 5 estrelas\"` para leitores de ecrã.\n * - O `Avatar` deve ter `alt` definido via `avatarSrc` — o componente passa o `name` como\n *   `alt` automaticamente.\n * - A data de adesão e a data da review são texto visível; não usam `aria-label` adicional.\n *\n * ---\n *\n * ## Design tokens\n *\n * | Token                      | Onde é aplicado                            |\n * |----------------------------|--------------------------------------------|\n * | `--color-card`             | Fundo do card                              |\n * | `--color-border`           | Borda do card                              |\n * | `--color-primary-500`      | Estrelas preenchidas                       |\n * | `--color-muted-foreground` | Texto de suporte e estrelas vazias         |\n * | `--icon-xs`                | Tamanho das estrelas (16px)                |\n */\nconst ReviewCard = React.forwardRef<HTMLDivElement, ReviewCardProps>(\n  (\n    { className, avatarSrc, name, memberSince, title, review, rating, reviewDate, ...props },\n    ref\n  ) => (\n    <Card\n      ref={ref}\n      data-slot=\"review-card\"\n      className={cn(reviewCardVariants(), className)}\n      {...props}\n    >\n      <CardHeader className=\"flex flex-col gap-2 space-y-0 p-4 pb-3 @[20rem]:flex-row @[20rem]:items-center @[20rem]:justify-between\">\n        <div className=\"flex min-w-0 items-center gap-3\">\n          <Avatar size=\"default\" variant=\"secondary\">\n            {avatarSrc && <AvatarImage src={avatarSrc} alt={name} />}\n            <AvatarFallback>{getInitials(name)}</AvatarFallback>\n          </Avatar>\n          <div className=\"flex min-w-0 flex-col gap-0.5\">\n            <span className=\"truncate text-sm font-medium leading-none text-foreground\">\n              {name}\n            </span>\n            <span className=\"text-xs text-muted-foreground\">{memberSince}</span>\n          </div>\n        </div>\n        <div className=\"flex justify-start @[20rem]:justify-end\">\n          <StarRating rating={rating} />\n        </div>\n      </CardHeader>\n\n      <CardContent className=\"flex-1 px-4 pb-3 pt-0\">\n        {title && <p className=\"mb-2 text-sm font-bold text-foreground\">{title}</p>}\n        <p className=\"text-xs leading-5 text-gray-50\">{review}</p>\n      </CardContent>\n\n      <CardFooter className=\"px-4 pb-4 pt-0\">\n        <span className=\"text-xs text-muted-foreground\">{reviewDate}</span>\n      </CardFooter>\n    </Card>\n  )\n);\nReviewCard.displayName = \"ReviewCard\";\n\nexport { ReviewCard, reviewCardVariants };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { Card } from \"@/components/ui/card/card\";\nimport { cn } from \"@/lib/utils\";\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n\nconst featureCardVariants = cva(\n  [\n    // layout\n    \"flex flex-col @container\",\n    // surface — overrides Card's bg-card with the darker surface tone\n    \"bg-surface\",\n    // elevation\n    \"shadow-lg shadow-black/30\",\n  ],\n  {\n    variants: {\n      variant: {\n        primary: [\n          // icon color\n          \"[&_svg]:text-primary\",\n        ],\n        secondary: [\n          // icon color\n          \"[&_svg]:text-secondary\",\n        ],\n        destructive: [\n          // icon color\n          \"[&_svg]:text-destructive\",\n        ],\n      },\n    },\n    defaultVariants: {\n      variant: \"primary\",\n    },\n  }\n);\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface FeatureCardProps\n  extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof featureCardVariants> {\n  /** Ícone exibido no canto superior esquerdo. Usa a classe `.icon` (`--icon-md`, 24px). */\n  icon: React.ReactNode;\n  /** Título da funcionalidade. */\n  title: string;\n  /** Descrição da funcionalidade. */\n  description: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * # FeatureCard\n *\n * Apresenta uma funcionalidade ou benefício com ícone, título e descrição.\n * Disponível em três variantes — `primary`, `secondary` e `destructive` —\n * com hover animado (lift + shadow) e borda com gradiente.\n *\n * @see {@link https://storybook.commitpt.com/?path=/docs/ui-featurecard--docs Storybook documentation}\n *\n * ---\n *\n * ## Variantes\n *\n * | Variant       | Fundo             | Borda                        | Quando usar                              |\n * |---------------|-------------------|------------------------------|------------------------------------------|\n * | `primary`     | `primary-900`     | `--border-gradient-primary`  | Features principais, benefícios gerais   |\n * | `secondary`   | `secondary-900`   | `--border-gradient-secondary`| Features premium ou de destaque especial |\n * | `destructive` | `oklch(0.15 ...)` | `destructive → dark red`     | Avisos, limites, acções de risco         |\n *\n * ---\n *\n * ## Anatomia\n *\n * | Zona       | Conteúdo                                          |\n * |------------|---------------------------------------------------|\n * | Ícone      | `icon` — 24px via `.icon` (`--icon-md`), shrink-0 |\n * | Título     | `title` — `text-sm font-bold text-white`          |\n * | Descrição  | `description` — `text-xs leading-5 text-gray-50` |\n *\n * O layout interno é `flex items-center gap-3` — ícone à esquerda,\n * título e descrição empilhados à direita.\n *\n * ---\n *\n * ## Escala tipográfica\n *\n * | Elemento    | Variant Typography equivalente | Classes                             |\n * |-------------|-------------------------------|-------------------------------------|\n * | Título      | `h6`                          | `text-sm font-bold text-foreground` |\n * | Descrição   | `muted`                       | `text-xs leading-5 text-gray-50`    |\n *\n * ---\n *\n * ## Tamanho do ícone\n *\n * Usa sempre a classe `.icon` (`--icon-md`, 24px). A cor padrão é definida\n * pela variante via `[&_svg]:text-*` e pode ser sobreposta no ícone directamente.\n *\n * ---\n *\n * ## Espaçamento\n *\n * | Token   | Valor | Tier        | Uso                          |\n * |---------|-------|-------------|------------------------------|\n * | `p-4`   | 16px  | Comfortable | Padding exterior             |\n * | `gap-3` | 12px  | Tight       | Ícone ↔ bloco de texto       |\n * | `mb-1`  | 4px   | Micro       | Título → descrição           |\n *\n * ---\n *\n * ## Usage\n *\n * ```tsx\n * import { Zap } from \"lucide-react\";\n *\n * <FeatureCard\n *   icon={<Zap className=\"icon\" />}\n *   title=\"Deploy em segundos\"\n *   description=\"Liga o repositório e publica em cada push para main.\"\n * />\n *\n * <FeatureCard\n *   variant=\"secondary\"\n *   icon={<Crown className=\"icon\" />}\n *   title=\"Acesso premium\"\n *   description=\"Desbloqueia todas as funcionalidades avançadas.\"\n * />\n *\n * <FeatureCard\n *   variant=\"destructive\"\n *   icon={<ShieldAlert className=\"icon\" />}\n *   title=\"Limite atingido\"\n *   description=\"Atingiste o limite do plano gratuito.\"\n * />\n * ```\n *\n * ---\n *\n * ## Acessibilidade\n *\n * - O ícone é decorativo e está envolvido em `aria-hidden=\"true\"`.\n * - Se o card for clicável, envolve-o num `<button>` ou `<a>` e adiciona `aria-label`.\n * - A transição de hover é `ease-out 200ms` — abaixo do limiar de sensibilidade ao movimento.\n *\n * ---\n *\n * ## Design tokens\n *\n * | Token                         | Onde é aplicado                     |\n * |-------------------------------|-------------------------------------|\n * | `--color-primary-900`         | Fundo variant `primary`             |\n * | `--color-secondary-900`       | Fundo variant `secondary`           |\n * | `--border-gradient-primary`   | Borda variant `primary`             |\n * | `--border-gradient-secondary` | Borda variant `secondary`           |\n * | `--color-destructive`         | Borda e ícone variant `destructive` |\n * | `--icon-md`                   | Tamanho do ícone (24px)             |\n */\nconst FeatureCard = React.forwardRef<HTMLDivElement, FeatureCardProps>(\n  ({ className, variant, icon, title, description, ...props }, ref) => (\n    <Card\n      ref={ref}\n      data-slot=\"feature-card\"\n      className={cn(featureCardVariants({ variant }), className)}\n      {...props}\n    >\n      <div className=\"flex flex-col gap-2 p-4\">\n        <div className=\"flex items-center gap-2\">\n          <div className=\"shrink-0 [&_svg]:icon-sm\" aria-hidden=\"true\">\n            {icon}\n          </div>\n          <p className=\"text-sm font-bold text-white\">{title}</p>\n        </div>\n        <p className=\"text-xs leading-5 text-gray-50\">{description}</p>\n      </div>\n    </Card>\n  )\n);\nFeatureCard.displayName = \"FeatureCard\";\n\nexport { FeatureCard, featureCardVariants };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface CheckboxProps extends React.ComponentPropsWithoutRef<\n  typeof CheckboxPrimitive.Root\n> {}\n\nconst Checkbox = React.forwardRef<React.ElementRef<typeof CheckboxPrimitive.Root>, CheckboxProps>(\n  ({ className, ...props }, ref) => (\n    <CheckboxPrimitive.Root\n      ref={ref}\n      className={cn(\n        \"peer h-4 w-4 shrink-0 rounded-sm border border-border bg-input transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-40 data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground\",\n        className\n      )}\n      {...props}\n    >\n      <CheckboxPrimitive.Indicator className={cn(\"flex items-center justify-center text-current\")}>\n        <CheckIcon className=\"h-3.5 w-3.5\" />\n      </CheckboxPrimitive.Indicator>\n    </CheckboxPrimitive.Root>\n  )\n);\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> {}\n\nconst Switch = React.forwardRef<React.ElementRef<typeof SwitchPrimitive.Root>, SwitchProps>(\n  ({ className, ...props }, ref) => (\n    <SwitchPrimitive.Root\n      className={cn(\n        \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border border-border/50 bg-elevated transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-40 data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=unchecked]:bg-elevated\",\n        className\n      )}\n      {...props}\n      ref={ref}\n    >\n      <SwitchPrimitive.Thumb\n        className={cn(\n          \"pointer-events-none block h-4 w-4 rounded-full bg-muted-foreground shadow-sm ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=checked]:bg-white data-[state=unchecked]:translate-x-0\"\n        )}\n      />\n    </SwitchPrimitive.Root>\n  )\n);\nSwitch.displayName = SwitchPrimitive.Root.displayName;\n\nexport { Switch };\n","import * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\nimport { CircleIcon } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface RadioGroupProps extends React.ComponentPropsWithoutRef<\n  typeof RadioGroupPrimitive.Root\n> {}\nexport interface RadioGroupItemProps extends React.ComponentPropsWithoutRef<\n  typeof RadioGroupPrimitive.Item\n> {}\n\nconst RadioGroup = React.forwardRef<\n  React.ElementRef<typeof RadioGroupPrimitive.Root>,\n  RadioGroupProps\n>(({ className, ...props }, ref) => {\n  return <RadioGroupPrimitive.Root className={cn(\"grid gap-2\", className)} {...props} ref={ref} />;\n});\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n  React.ElementRef<typeof RadioGroupPrimitive.Item>,\n  RadioGroupItemProps\n>(({ className, ...props }, ref) => {\n  return (\n    <RadioGroupPrimitive.Item\n      ref={ref}\n      className={cn(\n        \"aspect-square h-4 w-4 rounded-full border border-border bg-input text-primary transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-40 data-[state=checked]:border-primary\",\n        className\n      )}\n      {...props}\n    >\n      <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n        <CircleIcon className=\"h-2 w-2 fill-primary\" />\n      </RadioGroupPrimitive.Indicator>\n    </RadioGroupPrimitive.Item>\n  );\n});\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface SelectProps extends React.ComponentPropsWithoutRef<typeof SelectPrimitive.Root> {}\nexport interface SelectTriggerProps extends React.ComponentPropsWithoutRef<\n  typeof SelectPrimitive.Trigger\n> {}\nexport interface SelectValueProps extends React.ComponentPropsWithoutRef<\n  typeof SelectPrimitive.Value\n> {}\nexport interface SelectContentProps extends React.ComponentPropsWithoutRef<\n  typeof SelectPrimitive.Content\n> {}\nexport interface SelectLabelProps extends React.ComponentPropsWithoutRef<\n  typeof SelectPrimitive.Label\n> {}\nexport interface SelectItemProps extends React.ComponentPropsWithoutRef<\n  typeof SelectPrimitive.Item\n> {}\nexport interface SelectSeparatorProps extends React.ComponentPropsWithoutRef<\n  typeof SelectPrimitive.Separator\n> {}\n\nconst Select = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Trigger>,\n  SelectTriggerProps\n>(({ className, children, ...props }, ref) => (\n  <SelectPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      \"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-border bg-input px-3 py-2 text-sm text-foreground shadow-none ring-offset-background placeholder:text-muted-foreground/50 focus:outline-none focus:ring-2 focus:ring-ring focus:border-primary disabled:cursor-not-allowed disabled:opacity-40 [&>span]:line-clamp-1 transition-colors\",\n      className\n    )}\n    {...props}\n  >\n    {children}\n    <SelectPrimitive.Icon asChild>\n      <ChevronDownIcon className=\"h-4 w-4 opacity-50\" />\n    </SelectPrimitive.Icon>\n  </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollUpButton\n    ref={ref}\n    className={cn(\n      \"flex cursor-default items-center justify-center py-1 text-muted-foreground\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronUpIcon className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollDownButton\n    ref={ref}\n    className={cn(\n      \"flex cursor-default items-center justify-center py-1 text-muted-foreground\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronDownIcon className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Content>,\n  SelectContentProps\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n  <SelectPrimitive.Portal>\n    <SelectPrimitive.Content\n      ref={ref}\n      className={cn(\n        \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-lg border border-border bg-card text-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n        position === \"popper\" &&\n          \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n        className\n      )}\n      position={position}\n      {...props}\n    >\n      <SelectScrollUpButton />\n      <SelectPrimitive.Viewport\n        className={cn(\n          \"p-1\",\n          position === \"popper\" &&\n            \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n        )}\n      >\n        {children}\n      </SelectPrimitive.Viewport>\n      <SelectScrollDownButton />\n    </SelectPrimitive.Content>\n  </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Label>,\n  SelectLabelProps\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={cn(\"px-2 py-1.5 text-xs font-semibold text-muted-foreground\", className)}\n    {...props}\n  />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<React.ElementRef<typeof SelectPrimitive.Item>, SelectItemProps>(\n  ({ className, children, ...props }, ref) => (\n    <SelectPrimitive.Item\n      ref={ref}\n      className={cn(\n        \"relative flex w-full cursor-default select-none items-center rounded-md py-1.5 pl-2 pr-8 text-sm outline-none text-foreground transition-colors focus:bg-elevated focus:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-40\",\n        className\n      )}\n      {...props}\n    >\n      <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n        <SelectPrimitive.ItemIndicator>\n          <CheckIcon className=\"h-4 w-4\" />\n        </SelectPrimitive.ItemIndicator>\n      </span>\n      <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n    </SelectPrimitive.Item>\n  )\n);\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Separator>,\n  SelectSeparatorProps\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={cn(\"-mx-1 my-1 h-px bg-border/60\", className)}\n    {...props}\n  />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectLabel,\n  SelectItem,\n  SelectSeparator,\n  SelectScrollUpButton,\n  SelectScrollDownButton,\n};\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface DialogProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Root> {}\nexport interface DialogTriggerProps extends React.ComponentPropsWithoutRef<\n  typeof DialogPrimitive.Trigger\n> {}\nexport interface DialogPortalProps extends React.ComponentPropsWithoutRef<\n  typeof DialogPrimitive.Portal\n> {}\nexport interface DialogOverlayProps extends React.ComponentPropsWithoutRef<\n  typeof DialogPrimitive.Overlay\n> {}\nexport interface DialogContentProps extends React.ComponentPropsWithoutRef<\n  typeof DialogPrimitive.Content\n> {}\nexport interface DialogHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface DialogFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\nexport interface DialogTitleProps extends React.ComponentPropsWithoutRef<\n  typeof DialogPrimitive.Title\n> {}\nexport interface DialogDescriptionProps extends React.ComponentPropsWithoutRef<\n  typeof DialogPrimitive.Description\n> {}\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Overlay>,\n  DialogOverlayProps\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Overlay\n    ref={ref}\n    className={cn(\n      \"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n      className\n    )}\n    {...props}\n  />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Content>,\n  DialogContentProps\n>(({ className, children, ...props }, ref) => (\n  <DialogPortal>\n    <DialogOverlay />\n    <DialogPrimitive.Content\n      ref={ref}\n      className={cn(\n        \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-card p-6 shadow-xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm text-muted-foreground opacity-70 ring-offset-background transition-opacity hover:opacity-100 hover:text-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\">\n        <XIcon className=\"h-4 w-4\" />\n        <span className=\"sr-only\">Close</span>\n      </DialogPrimitive.Close>\n    </DialogPrimitive.Content>\n  </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: DialogHeaderProps) => (\n  <div className={cn(\"flex flex-col space-y-1.5\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }: DialogFooterProps) => (\n  <div\n    className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:gap-2\", className)}\n    {...props}\n  />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Title>,\n  DialogTitleProps\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Title\n    ref={ref}\n    className={cn(\"text-base font-semibold leading-none text-foreground tracking-tight\", className)}\n    {...props}\n  />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n  React.ElementRef<typeof DialogPrimitive.Description>,\n  DialogDescriptionProps\n>(({ className, ...props }, ref) => (\n  <DialogPrimitive.Description\n    ref={ref}\n    className={cn(\"text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n  Dialog,\n  DialogPortal,\n  DialogOverlay,\n  DialogTrigger,\n  DialogClose,\n  DialogContent,\n  DialogHeader,\n  DialogFooter,\n  DialogTitle,\n  DialogDescription,\n};\n","import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\nconst alertVariants = cva(\n  \"relative w-full rounded-lg border border-border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-3.5 [&>svg]:text-muted-foreground [&>svg~*]:pl-7\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-card text-foreground\",\n        destructive:\n          \"border-destructive/30 bg-destructive/10 text-destructive [&>svg]:text-destructive\",\n        success: \"border-success/30 bg-success/10 text-success [&>svg]:text-success\",\n        warning: \"border-warning/30 bg-warning/10 text-warning [&>svg]:text-warning\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n);\n\nexport interface AlertProps\n  extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof alertVariants> {}\nexport interface AlertTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\nexport interface AlertDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(\n  ({ className, variant, ...props }, ref) => (\n    <div ref={ref} role=\"alert\" className={cn(alertVariants({ variant }), className)} {...props} />\n  )\n);\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<HTMLHeadingElement, AlertTitleProps>(\n  ({ className, ...props }, ref) => (\n    <h5\n      ref={ref}\n      className={cn(\"mb-1 font-semibold leading-none tracking-tight text-foreground\", className)}\n      {...props}\n    />\n  )\n);\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<HTMLParagraphElement, AlertDescriptionProps>(\n  ({ className, ...props }, ref) => (\n    <div\n      ref={ref}\n      className={cn(\"text-sm [&_p]:leading-relaxed opacity-90\", className)}\n      {...props}\n    />\n  )\n);\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertTitle, AlertDescription, alertVariants };\n","import * as React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface ProgressProps extends React.ComponentPropsWithoutRef<\n  typeof ProgressPrimitive.Root\n> {}\n\nconst Progress = React.forwardRef<React.ElementRef<typeof ProgressPrimitive.Root>, ProgressProps>(\n  ({ className, value, ...props }, ref) => (\n    <ProgressPrimitive.Root\n      ref={ref}\n      className={cn(\"relative h-1.5 w-full overflow-hidden rounded-full bg-elevated\", className)}\n      {...props}\n    >\n      <ProgressPrimitive.Indicator\n        className=\"h-full w-full flex-1 bg-primary transition-all duration-300 ease-in-out\"\n        style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n      />\n    </ProgressPrimitive.Root>\n  )\n);\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n\nconst typographyVariants = cva(\"\", {\n  variants: {\n    variant: {\n      // ── Headings\n      h1: \"scroll-m-20 text-4xl font-bold tracking-tight text-foreground\",\n      h2: \"scroll-m-20 text-3xl font-semibold tracking-tight text-foreground\",\n      h3: \"scroll-m-20 text-2xl font-semibold tracking-tight text-foreground\",\n      h4: \"scroll-m-20 text-xl font-semibold tracking-tight text-foreground\",\n      h5: \"scroll-m-20 text-lg font-semibold tracking-tight text-foreground\",\n      h6: \"scroll-m-20 text-base font-semibold tracking-tight text-foreground\",\n\n      // ── Body\n      p: \"text-base leading-7 text-foreground\",\n      lead: \"text-xl text-muted-foreground leading-7\",\n      large: \"text-lg font-medium text-foreground\",\n      small: \"text-sm text-foreground leading-5\",\n      muted: \"text-sm text-muted-foreground leading-5\",\n\n      // ── Utility text\n      label: \"text-sm font-medium text-foreground leading-none\",\n      caption: \"text-xs text-muted-foreground leading-4\",\n      overline: \"text-xs font-semibold uppercase tracking-widest text-muted-foreground\",\n\n      // ── Inline / special\n      code: \"relative rounded bg-elevated px-1.5 py-0.5 font-mono text-sm text-foreground\",\n      kbd: [\n        \"inline-flex items-center rounded border border-border bg-elevated\",\n        \"px-1.5 py-0.5 font-mono text-xs font-medium text-foreground\",\n        \"shadow-[0_2px_0_0_var(--color-border)]\",\n      ],\n      blockquote: \"border-l-2 border-primary pl-4 italic text-muted-foreground\",\n    },\n\n    color: {\n      default: \"\",\n      primary: \"text-primary\",\n      secondary: \"text-secondary\",\n      muted: \"text-muted-foreground\",\n      success: \"text-success\",\n      warning: \"text-warning\",\n      destructive: \"text-destructive\",\n      inherit: \"text-inherit\",\n    },\n\n    weight: {\n      normal: \"font-normal\",\n      medium: \"font-medium\",\n      semibold: \"font-semibold\",\n      bold: \"font-bold\",\n    },\n\n    align: {\n      left: \"text-left\",\n      center: \"text-center\",\n      right: \"text-right\",\n    },\n\n    truncate: {\n      true: \"truncate\",\n    },\n  },\n  defaultVariants: {\n    variant: \"p\",\n    color: \"default\",\n  },\n});\n\n// ─── Element map ──────────────────────────────────────────────────────────────\n\nconst variantElementMap: Record<\n  NonNullable<VariantProps<typeof typographyVariants>[\"variant\"]>,\n  keyof React.JSX.IntrinsicElements\n> = {\n  h1: \"h1\",\n  h2: \"h2\",\n  h3: \"h3\",\n  h4: \"h4\",\n  h5: \"h5\",\n  h6: \"h6\",\n  p: \"p\",\n  lead: \"p\",\n  large: \"p\",\n  small: \"p\",\n  muted: \"p\",\n  label: \"span\",\n  caption: \"span\",\n  overline: \"span\",\n  code: \"code\",\n  kbd: \"kbd\",\n  blockquote: \"blockquote\",\n};\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type TypographyProps = React.HTMLAttributes<HTMLElement> &\n  VariantProps<typeof typographyVariants> & {\n    /**\n     * Override the rendered HTML element. When omitted, each `variant` maps to\n     * its semantically appropriate element (e.g. `h1` → `<h1>`, `code` → `<code>`).\n     */\n    as?: keyof React.JSX.IntrinsicElements;\n  };\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * # Typography\n *\n * A single component for all text in the design system. It encodes the full\n * typographic scale — headings, body, utility text, and inline elements —\n * and handles semantic HTML element selection automatically.\n *\n * @see {@link https://storybook.commitpt.com/?path=/docs/ui-typography--docs Storybook documentation}\n *\n * ---\n *\n * ## Variants\n *\n * ### Headings\n * | Variant | Element | Size   | Weight   | Use case                              |\n * |---------|---------|--------|----------|---------------------------------------|\n * | `h1`    | `<h1>`  | 36px   | Bold     | Page title — one per page             |\n * | `h2`    | `<h2>`  | 30px   | Semibold | Major section heading                 |\n * | `h3`    | `<h3>`  | 24px   | Semibold | Sub-section heading                   |\n * | `h4`    | `<h4>`  | 20px   | Semibold | Card / panel heading                  |\n * | `h5`    | `<h5>`  | 18px   | Semibold | Group label inside a section          |\n * | `h6`    | `<h6>`  | 16px   | Semibold | Smallest heading, prefer `label` instead |\n *\n * ### Body\n * | Variant | Element | Size   | Use case                              |\n * |---------|---------|--------|---------------------------------------|\n * | `p`     | `<p>`   | 16px   | Default body copy                     |\n * | `lead`  | `<p>`   | 20px   | Introductory paragraph below a heading |\n * | `large` | `<p>`   | 18px   | Emphasised body; feature descriptions |\n * | `small` | `<p>`   | 14px   | Secondary body; supporting copy       |\n * | `muted` | `<p>`   | 14px   | De-emphasised copy, timestamps, hints |\n *\n * ### Utility text\n * | Variant    | Element  | Size   | Use case                              |\n * |------------|----------|--------|---------------------------------------|\n * | `label`    | `<span>` | 14px   | Form labels, control labels           |\n * | `caption`  | `<span>` | 12px   | Image captions, table annotations     |\n * | `overline` | `<span>` | 12px   | Section category tags, eyebrow text   |\n *\n * ### Inline / special\n * | Variant      | Element        | Use case                              |\n * |--------------|----------------|---------------------------------------|\n * | `code`       | `<code>`       | Inline code snippets                  |\n * | `kbd`        | `<kbd>`        | Keyboard shortcuts (e.g. ⌘K)         |\n * | `blockquote` | `<blockquote>` | Pull quotes, testimonials             |\n *\n * ---\n *\n * ## Props\n *\n * | Prop       | Values                                                    | Default     |\n * |------------|-----------------------------------------------------------|-------------|\n * | `variant`  | See tables above                                          | `\"p\"`       |\n * | `color`    | `default` `primary` `secondary` `muted` `success` `warning` `destructive` `inherit` | `\"default\"` |\n * | `weight`   | `normal` `medium` `semibold` `bold`                       | —           |\n * | `align`    | `left` `center` `right`                                   | —           |\n * | `truncate` | `true`                                                    | —           |\n * | `as`       | Any HTML tag string                                       | auto        |\n *\n * ---\n *\n * ## Usage\n *\n * ### Basic\n * ```tsx\n * <Typography variant=\"h1\">Page title</Typography>\n * <Typography variant=\"lead\">Introductory text below the heading.</Typography>\n * <Typography variant=\"p\">Body copy goes here.</Typography>\n * ```\n *\n * ### Color override\n * ```tsx\n * <Typography variant=\"small\" color=\"primary\">Active filter</Typography>\n * <Typography variant=\"muted\" color=\"destructive\">Required field</Typography>\n * ```\n *\n * ### Weight override\n * ```tsx\n * <Typography variant=\"p\" weight=\"semibold\">Important notice</Typography>\n * ```\n *\n * ### Truncation\n * ```tsx\n * <Typography variant=\"p\" truncate className=\"max-w-xs\">\n *   Very long text that should not wrap onto a second line...\n * </Typography>\n * ```\n *\n * ### Override element\n * ```tsx\n * // Render an h2 that looks like an h4\n * <Typography variant=\"h4\" as=\"h2\">Section title</Typography>\n * ```\n *\n * ### Inline code and keyboard shortcuts\n * ```tsx\n * <Typography variant=\"p\">\n *   Press <Typography variant=\"kbd\" as=\"kbd\">⌘K</Typography> to open the command palette.\n *   Use <Typography variant=\"code\" as=\"code\">npm run dev</Typography> to start the server.\n * </Typography>\n * ```\n *\n * ---\n *\n * ## Accessibility\n *\n * - Heading variants render semantic `<h1>`–`<h6>` elements by default. Never skip heading\n *   levels for visual effect — use the `as` prop to decouple visual size from semantic level.\n * - `variant=\"label\"` renders a `<span>`, not a `<label>`. For form controls, use the\n *   `<Label>` component instead so the `htmlFor` association is correct.\n * - `variant=\"kbd\"` renders a `<kbd>` element which assistive technology announces as a\n *   keyboard key. Always use real key symbols rather than verbose descriptions.\n *\n * ---\n *\n * ## Design tokens\n *\n * | Token                    | Used by                                              |\n * |--------------------------|------------------------------------------------------|\n * | `--color-foreground`     | Default text colour for headings and body            |\n * | `--color-muted-foreground` | `muted`, `lead`, `caption`, `overline`, `blockquote` |\n * | `--color-primary`        | `blockquote` left border; `color=\"primary\"`          |\n * | `--color-elevated`       | `code` and `kbd` background fill                     |\n * | `--color-border`         | `kbd` border and shadow                              |\n * | `--font-sans`            | All variants except `code` and `kbd`                 |\n * | `--font-mono`            | `code`, `kbd`                                        |\n */\nconst Typography = React.forwardRef<HTMLElement, TypographyProps>(\n  ({ className, variant = \"p\", color = \"default\", weight, align, truncate, as, ...props }, ref) => {\n    const Comp = (as ?? variantElementMap[variant!]) as React.ElementType;\n    return (\n      <Comp\n        ref={ref}\n        className={cn(typographyVariants({ variant, color, weight, align, truncate }), className)}\n        {...props}\n      />\n    );\n  }\n);\nTypography.displayName = \"Typography\";\n\nexport { Typography, typographyVariants };\n","import * as React from \"react\";\n\nimport commitIcon from \"@/assets/commit_icon.png\";\nimport { cn } from \"@/lib/utils\";\n\nexport type LogoProps = Omit<React.ComponentProps<\"img\">, \"src\" | \"width\" | \"height\"> & {\n  /**\n   * Size of the logo in pixels. Applied to both width and height to keep the\n   * logo square. Defaults to 40px.\n   */\n  size?: number;\n  /**\n   * Border radius applied to the logo container. Use a Tailwind class string\n   * (e.g. \"rounded-full\", \"rounded-lg\") or omit to use the default rounded-xl.\n   */\n  rounded?: string;\n};\n\n/**\n * # Logo\n *\n * Renders the commitpt brand mark — the `commit_icon.png` asset — as a square\n * image with a configurable size and border radius.\n *\n * @see {@link https://storybook.commitpt.com/?path=/docs/ui-logo--docs Storybook documentation}\n *\n * ---\n *\n * ## Size\n *\n * Pass any positive integer to `size`. The value is applied to both `width` and\n * `height` so the logo remains square at every scale.\n *\n * | Common value | Use case                                      |\n * |-------------|-----------------------------------------------|\n * | `24`        | Inline text, dense toolbars                   |\n * | `32`        | Compact nav bars, list items                  |\n * | `40`        | Default — app nav, headers (default)          |\n * | `64`        | Feature banners, settings pages               |\n * | `96`        | Splash screens, onboarding hero               |\n * | `128+`      | Marketing pages, large empty states           |\n *\n * ---\n *\n * ## Border radius\n *\n * Control rounding via the `rounded` prop — pass any Tailwind border-radius\n * class. The default (`rounded-xl`) gives the logo a soft, modern look that\n * matches the app icon convention on iOS/Android.\n *\n * | `rounded` value  | Result                             |\n * |------------------|------------------------------------|\n * | `\"rounded-sm\"`   | Slight rounding — almost square    |\n * | `\"rounded-lg\"`   | Moderate rounding                  |\n * | `\"rounded-md\"`   | Default — subtle, keeps it square-feeling |\n * | `\"rounded-2xl\"`  | Rounder, more playful              |\n * | `\"rounded-full\"` | Fully circular                     |\n *\n * ---\n *\n * ## Usage\n *\n * ### Basic (default size)\n * ```tsx\n * <Logo />\n * ```\n *\n * ### Custom size\n * ```tsx\n * <Logo size={64} />\n * ```\n *\n * ### Circular logo\n * ```tsx\n * <Logo size={48} rounded=\"rounded-full\" />\n * ```\n *\n * ### In a nav bar\n * ```tsx\n * <nav className=\"flex items-center gap-3\">\n *   <Logo size={32} />\n *   <span className=\"font-semibold\">commitpt</span>\n * </nav>\n * ```\n *\n * ---\n *\n * ## Accessibility\n *\n * - The `alt` prop defaults to `\"commitpt logo\"`. Override it when context\n *   requires a more specific description, or set `alt=\"\"` when the logo is\n *   purely decorative and a visible product name already labels it.\n * - The component renders a native `<img>` — it is discoverable by assistive\n *   technology without any extra ARIA attributes.\n * - There is no minimum touch target concern: the Logo is never interactive by\n *   default. If you make it clickable (e.g. link to home), wrap it in an\n *   anchor and ensure the anchor meets the 44×44 px WCAG touch target.\n *\n * ---\n *\n * ## Design tokens\n *\n * The Logo does not consume color tokens — it renders the PNG asset verbatim.\n * Border radius uses Tailwind utility classes rather than `--radius` tokens so\n * the shape can be overridden independently of the global radius scale.\n */\nfunction Logo({\n  size = 40,\n  rounded = \"rounded-md\",\n  className,\n  alt = \"commitpt logo\",\n  ...props\n}: LogoProps) {\n  return (\n    <img\n      data-slot=\"logo\"\n      src={commitIcon}\n      alt={alt}\n      width={size}\n      height={size}\n      style={{ width: size, height: size, minWidth: size, minHeight: size }}\n      className={cn(\"shrink-0 object-cover\", rounded, className)}\n      {...props}\n    />\n  );\n}\n\nexport { Logo };\n"]}