@orangecheck/design 0.29.1 → 0.30.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tokens/cn.ts","../src/composites/help-hint.tsx","../src/composites/section-header.tsx","../src/composites/empty-state.tsx","../src/composites/stat-grid.tsx","../src/primitives/stat-block.tsx","../src/composites/stat-card.tsx","../src/composites/callout.tsx","../src/composites/definition-list.tsx","../src/composites/data-row.tsx","../src/composites/panel.tsx","../src/composites/marketing-heading.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/input.tsx","../src/primitives/alert.tsx","../src/primitives/confirm-dialog.tsx","../src/primitives/prompt-dialog.tsx","../src/primitives/accordion.tsx","../src/primitives/surface.tsx","../src/primitives/icon-badge.tsx","../src/composites/feature-card.tsx","../src/composites/section.tsx","../src/composites/comparison-table.tsx","../src/composites/numbered-step.tsx","../src/composites/faq.tsx","../src/composites/email-capture.tsx","../src/composites/check-list.tsx","../src/composites/accent-note.tsx","../src/composites/verified-chip.tsx"],"names":["jsxs","jsx","TONE_CLASS","cva","X","Check"],"mappings":"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","file":"composites.mjs","sourcesContent":["import type { ClassValue } from 'clsx';\n\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Canonical class-name merge for the OrangeCheck family.\n * `clsx` for conditional composition, `tailwind-merge` to resolve\n * conflicting Tailwind utilities (last-wins by property).\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","'use client';\n\nimport * as Popover from '@radix-ui/react-popover';\nimport { HelpCircle } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface HelpHintProps {\n /** The help body — short prose (1–3 sentences) explaining a term/control. */\n children: ReactNode;\n /** Optional bold \"§ \"-prefixed heading inside the popover. */\n title?: string;\n /** Which side the popover prefers to open toward. Default `top`. */\n side?: 'top' | 'right' | 'bottom' | 'left';\n /** `xs` tightens the icon for dense label rows; `sm` (default) suits most. */\n size?: 'xs' | 'sm';\n /** `subtle` mutes the \"?\" icon when it sits in a description / muted row;\n * `default` is primary-tinted for active labels. */\n tone?: 'default' | 'subtle';\n /** Accessible label for the trigger (defaults to \"what is this?\"). */\n label?: string;\n className?: string;\n}\n\n/**\n * HelpHint — the canonical inline \"?\" affordance for term-level guidance.\n * Click/focus reveals a small popover (Radix) with optional title + prose;\n * works on touch (not a hover tooltip). Lifted from oc-me-web's richer\n * `me/ui/HelpHint` (with `size`/`tone`), now the single source. Also the\n * keystone behind `SectionHeader`'s optional `hint`.\n */\nexport function HelpHint({\n children,\n title,\n side = 'top',\n size = 'sm',\n tone = 'default',\n label = 'what is this?',\n className,\n}: HelpHintProps) {\n const iconSize = size === 'xs' ? 12 : 14;\n return (\n <Popover.Root>\n <Popover.Trigger\n aria-label={label}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n 'focus-visible:ring-primary/60 inline-flex shrink-0 items-center justify-center rounded-full transition-colors outline-none focus-visible:ring-2',\n tone === 'subtle'\n ? 'text-muted-foreground/60 hover:text-foreground/80'\n : 'text-primary/70 hover:text-primary',\n className\n )}\n >\n <HelpCircle size={iconSize} aria-hidden />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side={side}\n sideOffset={6}\n collisionPadding={12}\n className=\"border-border bg-popover text-popover-foreground 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 z-50 max-w-xs rounded-md border p-3 text-xs leading-relaxed shadow-md outline-none\"\n >\n {title && <div className=\"label-mono text-primary mb-1.5\">§ {title}</div>}\n <div className=\"text-foreground/90\">{children}</div>\n <Popover.Arrow className=\"fill-popover\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { HelpHint } from './help-hint';\n\nexport interface SectionHeaderProps {\n /** Plain section name — rendered after a \"§ \" glyph in label-mono. */\n label: string;\n /** Optional right-side string (count, \"most recent first\"). */\n meta?: ReactNode;\n /** When provided, renders an inline HelpHint \"?\" next to the label. */\n hint?: { title?: string; body: ReactNode; side?: 'top' | 'bottom' | 'left' | 'right' };\n tone?: 'primary' | 'muted' | 'warning' | 'success' | 'destructive';\n className?: string;\n}\n\nconst TONE_CLASS = {\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n warning: 'text-warning',\n success: 'text-success',\n destructive: 'text-destructive',\n} as const;\n\n/**\n * SectionHeader — the canonical \"§ x\" section header used across every\n * /me, /vault, and /fleet dashboard surface. Lifted from oc-me-web's\n * `me/ui/SectionHeader` so the visual contract stays single-source.\n *\n * Pattern is `label-mono text-primary mb-3` with a \"§ \" glyph followed by\n * the label, plus an optional muted/uppercase right-side meta string.\n */\nexport function SectionHeader({\n label,\n meta,\n hint,\n tone = 'primary',\n className = '',\n}: SectionHeaderProps) {\n return (\n <div className={`mb-3 flex items-baseline justify-between gap-2 ${className}`}>\n <div className=\"flex items-center gap-1.5\">\n <div className={`label-mono ${TONE_CLASS[tone]}`}>§ {label}</div>\n {hint && (\n <HelpHint title={hint.title} side={hint.side ?? 'bottom'}>\n {hint.body}\n </HelpHint>\n )}\n </div>\n {meta && (\n <span className=\"text-muted-foreground/70 font-mono text-[10px] tracking-widest uppercase\">\n {meta}\n </span>\n )}\n </div>\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nexport interface EmptyStateCta {\n label: string;\n href: string;\n /** External links open in a new tab and get a ↗ glyph. */\n external?: boolean;\n}\n\nexport interface EmptyStateProps {\n /** Short heading — one mono-uppercased label like \"no entries yet\". */\n label: string;\n /** Body — short prose explaining what would appear here and how. */\n children: ReactNode;\n cta?: EmptyStateCta;\n secondary?: EmptyStateCta;\n tone?: 'info' | 'warning' | 'muted';\n className?: string;\n}\n\nconst TONE_CLASS = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n muted: 'border-border bg-muted/20',\n} as const;\n\nconst LABEL_TONE_CLASS = {\n info: 'text-primary',\n warning: 'text-warning',\n muted: 'text-muted-foreground',\n} as const;\n\n/**\n * EmptyState — the canonical empty-state card used across every /me,\n * /vault, and /fleet dashboard. Empty states should *teach*: explain what\n * would appear, and how to make it appear. Lifted from oc-me-web's\n * `me/ui/EmptyState`.\n */\nexport function EmptyState({\n label,\n children,\n cta,\n secondary,\n tone = 'info',\n className = '',\n}: EmptyStateProps) {\n return (\n <div className={`border p-5 md:p-6 ${TONE_CLASS[tone]} ${className}`}>\n <div className={`label-mono mb-2 ${LABEL_TONE_CLASS[tone]}`}>§ {label}</div>\n <div className=\"text-foreground/85 max-w-2xl text-sm leading-relaxed\">{children}</div>\n {(cta || secondary) && (\n <div className=\"mt-4 flex flex-wrap gap-3\">\n {cta && <CtaLink {...cta} variant=\"primary\" />}\n {secondary && <CtaLink {...secondary} variant=\"secondary\" />}\n </div>\n )}\n </div>\n );\n}\n\nfunction CtaLink({\n label,\n href,\n external,\n variant,\n}: EmptyStateCta & { variant: 'primary' | 'secondary' }) {\n const cls =\n variant === 'primary'\n ? 'bg-primary text-primary-foreground hover:bg-primary/90 inline-flex h-9 items-center justify-center rounded-md px-4 font-mono text-[11px] font-semibold tracking-widest uppercase'\n : 'text-muted-foreground hover:text-foreground border-input hover:bg-accent inline-flex h-9 items-center justify-center rounded-md border px-4 font-mono text-[11px] tracking-widest uppercase';\n const text = external ? `${label} ↗` : label;\n if (external) {\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className={cls}>\n {text}\n </a>\n );\n }\n return (\n <Link href={href} className={cls}>\n {text}\n </Link>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface StatItem {\n /** Short uppercased label rendered in mono. */\n label: string;\n /** Primary value · already formatted as a string. */\n value: string;\n /** Optional secondary line · USD conversion, \"last 30 days\", etc. */\n sub?: string;\n /** When true, value is rendered in primary tone (use for headline metric). */\n accent?: boolean;\n /** Optional tone for the value (overrides accent). */\n tone?: 'default' | 'primary' | 'success' | 'warning' | 'destructive' | 'muted';\n}\n\nexport interface StatGridProps {\n items: StatItem[];\n columns?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nconst TONE_CLASS = {\n default: '',\n primary: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n} as const;\n\nconst COL_CLASS = {\n 1: '',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n} as const;\n\n/**\n * StatGrid — the canonical stats row used across family dashboards.\n * Lifted from oc-me-web's `me/ui/StatGrid`. Grid of equal-width tiles\n * separated by 1px borders. Always pre-format the value string —\n * the component does no number formatting.\n */\nexport function StatGrid({ items, columns = 3, className = '' }: StatGridProps) {\n return (\n <div className={`oc-stat-grid bg-border grid gap-px border ${COL_CLASS[columns]} ${className}`}>\n {items.map((it, i) => (\n <Tile key={`${it.label}-${i}`} item={it} />\n ))}\n </div>\n );\n}\n\nfunction Tile({ item }: { item: StatItem }) {\n const tone = item.tone ?? (item.accent ? 'primary' : 'default');\n return (\n <div className=\"oc-stat-tile bg-background p-5\">\n <div className=\"text-muted-foreground/80 font-mono text-[10px] tracking-widest uppercase\">\n {item.label}\n </div>\n <div\n className={`font-display mt-1 text-2xl font-bold tabular-nums tracking-tight ${TONE_CLASS[tone]}`}\n >\n {item.value}\n </div>\n {item.sub && (\n <div className=\"text-muted-foreground/70 mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {item.sub}\n </div>\n )}\n </div>\n );\n}\n\nexport function StatTile({ children, ...item }: StatItem & { children?: ReactNode }) {\n return (\n <div>\n <Tile item={item} />\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface StatBlockProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional \"vs prior period\" delta — arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n className?: string;\n}\n\n/**\n * A single labelled value cell — the building block for every counter grid in a\n * dashboard. Optional delta arrow + colour for period-over-period deltas.\n * (Richer than StatTile: carries a delta. Use StatGrid for laid-out grids.)\n */\nexport function StatBlock({ label, value, sub, delta, tone = 'default', className }: StatBlockProps) {\n const toneClass =\n tone === 'success'\n ? 'text-success'\n : tone === 'warning'\n ? 'text-warning'\n : tone === 'destructive'\n ? 'text-destructive'\n : 'text-foreground';\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <span className=\"label-mono text-muted-foreground text-[10px]\">{label}</span>\n <span\n className={cn(\n 'font-display text-2xl font-bold tracking-tight tabular-nums',\n toneClass\n )}\n >\n {value}\n </span>\n <div className=\"flex items-baseline gap-2\">\n {sub && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide lowercase\">\n {sub}\n </span>\n )}\n {delta && (\n <span\n className={cn(\n 'font-mono text-[11px] tracking-wide',\n delta.value > 0\n ? 'text-success'\n : delta.value < 0\n ? 'text-destructive'\n : 'text-muted-foreground'\n )}\n >\n {delta.value > 0 ? '▲' : delta.value < 0 ? '▼' : '·'}{' '}\n {Math.abs(delta.value).toFixed(1)}\n {delta.suffix ?? '%'}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { StatBlock } from '../primitives/stat-block';\nimport { cn } from '../tokens/cn';\n\nexport interface StatCardProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional period-over-period delta arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n /** Padding density — `sm` for dense grids, `default` for standalone cards. */\n pad?: 'sm' | 'default';\n className?: string;\n}\n\n/**\n * StatCard — a single stat in a bordered `bg-card` frame. The standalone\n * counterpart to StatBlock (the bare cell) and StatGrid (a laid-out grid):\n * this is the \"one stat in its own card\" shape that fleet (`dashboard/Stat`)\n * and me (`StatCell`, `ParticipationFeeCard` tiles, etc.) each hand-roll.\n * Wraps StatBlock so the inner cell stays single-source.\n */\nexport function StatCard({ pad = 'default', className, ...stat }: StatCardProps) {\n return (\n <div className={cn('oc-stat-card border bg-card', pad === 'sm' ? 'p-3 md:p-4' : 'p-5', className)}>\n <StatBlock {...stat} />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport type CalloutTone = 'info' | 'warning' | 'destructive' | 'success' | 'muted';\n\nexport interface CalloutProps {\n tone?: CalloutTone;\n /** Optional \"§ \"-prefixed mono header. */\n label?: string;\n /** Optional leading icon, sized by the caller (e.g. lucide `size-4`). */\n icon?: ReactNode;\n /** Body content. */\n children: ReactNode;\n /** Optional trailing action (button / link) pinned to the bottom. */\n action?: ReactNode;\n className?: string;\n}\n\nconst FRAME: Record<CalloutTone, string> = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n destructive: 'border-destructive/40 bg-destructive/5',\n success: 'border-success/40 bg-success/5',\n muted: 'border-border bg-muted/20',\n};\n\nconst LABEL: Record<CalloutTone, string> = {\n info: 'text-primary',\n warning: 'text-warning',\n destructive: 'text-destructive',\n success: 'text-success',\n muted: 'text-muted-foreground',\n};\n\n/**\n * Callout — the canonical toned panel (`border-{tone}/40 bg-{tone}/5` + an\n * optional `label-mono` header) reimplemented across stamp, pledge, vote,\n * analytics, and me (HealthBanner / SimulationBanner / FrozenBanner /\n * DangerZone, etc.). One component, five tones. For empty-states with CTAs use\n * EmptyState; for inline term help use HelpHint; this is the general\n * notice/banner frame.\n */\nexport function Callout({ tone = 'info', label, icon, children, action, className }: CalloutProps) {\n return (\n <div className={cn('border p-4 md:p-5', FRAME[tone], className)}>\n {label && (\n <div className={cn('label-mono mb-2 flex items-center gap-1.5', LABEL[tone])}>\n {icon}\n <span>§ {label}</span>\n </div>\n )}\n <div className=\"text-foreground/85 text-sm leading-relaxed\">\n {!label && icon ? (\n <span className={cn('mr-2 inline-flex align-middle', LABEL[tone])}>{icon}</span>\n ) : null}\n {children}\n </div>\n {action && <div className=\"mt-3 flex flex-wrap gap-3\">{action}</div>}\n </div>\n );\n}\n","import { Fragment, type ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface DefinitionItem {\n label: ReactNode;\n value: ReactNode;\n}\n\nexport interface DefinitionListProps {\n items: DefinitionItem[];\n className?: string;\n}\n\n/**\n * DefinitionList — the mono-label / value `<dl>` grid reimplemented in agent's\n * inspector, vote's reveal page, and me (BondAnchorCard, OperatorIdentityCard,\n * FrozenBanner). Labels render in uppercase mono; values align in a second\n * column on wider viewports, stacking on narrow ones. Long values (hashes,\n * addresses) wrap via `break-all`.\n */\nexport function DefinitionList({ items, className }: DefinitionListProps) {\n return (\n <dl\n className={cn(\n 'oc-deflist grid gap-x-5 gap-y-2 text-sm sm:grid-cols-[auto_1fr] sm:items-baseline',\n className\n )}\n >\n {items.map((item, i) => (\n <Fragment key={i}>\n <dt className=\"label-mono text-muted-foreground text-[10px]\">{item.label}</dt>\n <dd className=\"text-foreground font-mono text-xs break-all\">{item.value}</dd>\n </Fragment>\n ))}\n </dl>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface DataRowProps {\n /** Primary content (left-aligned, grows to fill). */\n children: ReactNode;\n /** Trailing metadata pinned right (timestamp, count, status pill). */\n meta?: ReactNode;\n /** Optional action(s) rendered after the meta (button, link). */\n action?: ReactNode;\n /** Element to render as — `li` inside a list, `div` otherwise. */\n as?: ElementType;\n className?: string;\n}\n\n/**\n * DataRow — the \"content left, meta right, optional action\" list row\n * reimplemented across me (federations, incidents, grants, distributions,\n * fee entries) and other dashboards. Pair inside a `divide-y border` list.\n * On narrow viewports content and meta stack; from `sm` up they sit on one\n * baseline-aligned line.\n */\nexport function DataRow({ children, meta, action, as, className }: DataRowProps) {\n const Tag = (as ?? 'div') as ElementType;\n return (\n <Tag\n className={cn(\n 'oc-data-row flex flex-col gap-1 py-3 sm:flex-row sm:items-baseline sm:justify-between sm:gap-4',\n className\n )}\n >\n <div className=\"min-w-0 flex-1\">{children}</div>\n {(meta || action) && (\n <div className=\"flex shrink-0 items-center gap-3 sm:justify-end\">\n {meta && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide\">\n {meta}\n </span>\n )}\n {action}\n </div>\n )}\n </Tag>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface PanelProps {\n /** Mono kicker shown above the title (e.g. \"attestations\"). Rendered uppercase. */\n label?: ReactNode;\n /** Section title. */\n title?: ReactNode;\n /** Optional trailing control (a button, link, count) pinned right of the header. */\n action?: ReactNode;\n /** Drop the top divider (use for the first panel in a stack). */\n flush?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\n/**\n * Panel (DataSection) — the titled section that carries a chunk of a\n * data-dense / technical page (telemetry blocks, API sections, dashboard\n * groups). THEME-ADAPTIVE by design: under the cypherpunk skins it is a\n * flat full-width `border-t` divider section (terminal voice); under ember\n * the `.oc-panel` class promotes it to a discrete soft, warm, rounded card\n * (see the data-dense treatments in themes/ember.css). Compose these instead\n * of hand-rolling `border-t py-8` sections so subpages re-skin per theme.\n */\nexport function Panel({ label, title, action, flush, className, children }: PanelProps) {\n const hasHeader = label || title || action;\n return (\n <section className={cn('oc-panel py-8', !flush && 'border-t', className)}>\n {hasHeader && (\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n {label && <div className=\"label-mono text-primary mb-1\">{label}</div>}\n {title && (\n <h2 className=\"font-display text-lg font-bold tracking-tight\">{title}</h2>\n )}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n )}\n {children}\n </section>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * marketing-heading — the two-tone display heading used across consumer\n * landing sections. TwoToneHeading renders a solid lead clause followed by a\n * recoloured muted clause at the same size/weight; MarketingHeading wraps it\n * with an optional mono eyebrow and body paragraph. Use onBrand when it sits\n * on a brand/dark band.\n */\n\nexport interface TwoToneHeadingProps {\n lead: ReactNode;\n muted?: ReactNode;\n as?: ElementType;\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport function TwoToneHeading({\n lead,\n muted,\n as,\n tone = 'default',\n className,\n}: TwoToneHeadingProps) {\n const Tag = as ?? 'h2';\n const leadColor = tone === 'onBrand' ? 'text-primary-foreground' : 'text-foreground';\n // Lighter, cleaner muted clause so the two-tone contrast reads (matches the\n // designer's light-gray second phrase, not a heavy taupe). On a brand band\n // /60 fell below AA-large (~2.5:1); /75 keeps the two-tone read while staying\n // legible on terracotta.\n const mutedColor = tone === 'onBrand' ? 'text-primary-foreground/75' : 'text-foreground/40';\n return (\n <Tag\n className={cn(\n 'font-extrabold tracking-[-0.02em] leading-[1.0] text-balance',\n 'text-3xl sm:text-4xl md:text-5xl',\n leadColor,\n className,\n )}\n >\n <span>{lead}</span>\n {muted ? <span className={mutedColor}> {muted}</span> : null}\n </Tag>\n );\n}\n\nexport interface MarketingHeadingProps {\n eyebrow?: string;\n lead: ReactNode;\n muted?: ReactNode;\n body?: ReactNode;\n align?: 'start' | 'center';\n tone?: 'default' | 'onBrand';\n as?: ElementType;\n className?: string;\n}\n\nexport function MarketingHeading({\n eyebrow,\n lead,\n muted,\n body,\n align = 'start',\n tone = 'default',\n as,\n className,\n}: MarketingHeadingProps) {\n const centered = align === 'center';\n return (\n <div className={cn('flex flex-col', centered && 'items-center text-center', className)}>\n {eyebrow && (\n <p\n className={cn(\n 'label-mono mb-3',\n tone === 'onBrand' ? 'text-primary-foreground/80' : 'text-primary',\n )}\n >\n {eyebrow}\n </p>\n )}\n <TwoToneHeading\n lead={lead}\n muted={muted}\n as={as}\n tone={tone}\n className={cn('max-w-4xl', centered && 'mx-auto')}\n />\n {body && (\n <p\n className={cn(\n 'mt-4 max-w-2xl text-base sm:text-lg',\n tone === 'onBrand' ? 'text-primary-foreground/80' : 'text-muted-foreground',\n centered && 'mx-auto',\n )}\n >\n {body}\n </p>\n )}\n </div>\n );\n}\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',\n outline:\n 'bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs',\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 // For CTAs placed ON a saturated brand band or a dark section\n // (e.g. a terracotta hero / footer / a forced-dark block) where\n // the surface is dark+light-text in either mode. A neutral white\n // pill + a translucent-white ghost read on any such surface;\n // hardcoded white is deliberate (cf. destructive's text-white).\n onBrand: 'bg-white text-neutral-900 shadow-sm hover:bg-white/90',\n onBrandOutline:\n 'border border-white/40 bg-transparent text-white hover:bg-white/10',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst badgeVariants = cva(\n 'focus-visible:border-ring focus-visible:ring-ring/50 inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3',\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent',\n secondary:\n 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent',\n destructive:\n 'bg-destructive text-destructive-foreground [a&]:hover:bg-destructive/90 border-transparent',\n warning:\n 'bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent',\n success:\n 'bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent',\n info: 'bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent',\n brand: 'bg-brand-soft text-accent-foreground border-transparent',\n neutral:\n 'bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent',\n outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'span';\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\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 className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst alertVariants = cva(\n 'relative grid w-full grid-cols-[0_1fr] items-start gap-x-0 gap-y-0.5 rounded-md border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive:\n 'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',\n success:\n 'text-success bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-success/90',\n warning:\n 'text-warning bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { AlertTriangle } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\n\n/**\n * Promise-based replacement for `window.confirm` in the house design language.\n * Call `confirm({...})` from anywhere; a single mounted `<ConfirmHost />` renders\n * it. Async (resolves to a boolean) and provider-less by design.\n */\n\nexport interface ConfirmOptions {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n}\n\ninterface PendingConfirm extends ConfirmOptions {\n resolve: (ok: boolean) => void;\n}\n\n// Read NODE_ENV without depending on @types/node (this is a browser package).\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingConfirm | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\nexport function confirm(opts: ConfirmOptions): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[ConfirmDialog] confirm() called but no <ConfirmHost /> is mounted');\n }\n });\n}\n\n/** Singleton dialog host. Mount once at the app root. */\nexport function ConfirmHost() {\n const [state, setState] = useState<PendingConfirm | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn(\n '[ConfirmDialog] multiple <ConfirmHost /> instances mounted — the last one wins'\n );\n }\n notifyHost = () => setState(pending);\n if (pending) setState(pending);\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (ok: boolean) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(ok);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(false)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\">\n <div className=\"terminal-title\">\n <span\n className={\n 'flex items-center gap-1.5 ' +\n (state.destructive ? 'text-destructive' : 'text-primary')\n }\n >\n <AlertTriangle className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap [overflow-wrap:anywhere]\">\n {state.message}\n </div>\n </Dialog.Description>\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(false)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button\n onClick={() => close(true)}\n className={\n 'font-display tracking-wide uppercase ' +\n (state.destructive\n ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90'\n : '')\n }\n >\n {state.confirmLabel ?? 'confirm'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { Pencil } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Label } from './label';\n\n/**\n * Promise-based replacement for `window.prompt`, in the house design language.\n * Call `prompt({...})`; mount one `<PromptHost />` at the app root (alongside\n * `<ConfirmHost />`). Supports a masked `secret` input, a matching\n * `confirmField` (\"choose a passphrase, twice\"), and a `validate` hook.\n */\n\nexport interface PromptOptions {\n title: string;\n message?: string;\n label?: string;\n placeholder?: string;\n defaultValue?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n /** Mask the input. */\n secret?: boolean;\n /** Show a second input that must match the first. Implies validation. */\n confirmField?: boolean;\n /** Minimum accepted length. */\n minLength?: number;\n /** Return an error string to block submission, or null to allow it. */\n validate?: (value: string) => string | null;\n}\n\ninterface PendingPrompt extends PromptOptions {\n resolve: (value: string | null) => void;\n}\n\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingPrompt | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\n/** Open a prompt dialog. Resolves to the entered string, or null if cancelled. */\nexport function prompt(opts: PromptOptions): Promise<string | null> {\n return new Promise<string | null>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[PromptDialog] prompt() called but no <PromptHost /> is mounted');\n }\n });\n}\n\nexport function PromptHost() {\n const [state, setState] = useState<PendingPrompt | null>(null);\n const [value, setValue] = useState('');\n const [confirmValue, setConfirmValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn('[PromptDialog] multiple <PromptHost /> instances mounted');\n }\n notifyHost = () => {\n setValue(pending?.defaultValue ?? '');\n setConfirmValue('');\n setError(null);\n setState(pending);\n };\n if (pending) notifyHost();\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (result: string | null) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(result);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n const submit = useCallback(() => {\n if (!state) return;\n const v = value;\n if (state.minLength && v.length < state.minLength) {\n setError(`must be at least ${state.minLength} characters`);\n return;\n }\n if (state.confirmField && v !== confirmValue) {\n setError('the two entries do not match');\n return;\n }\n if (state.validate) {\n const msg = state.validate(v);\n if (msg) {\n setError(msg);\n return;\n }\n }\n close(v);\n }, [state, value, confirmValue, close]);\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(null)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content\n className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n }}\n >\n <div className=\"terminal-title\">\n <span className=\"text-primary flex items-center gap-1.5\">\n <Pencil className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n {state.message && (\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap\">\n {state.message}\n </div>\n </Dialog.Description>\n )}\n <div>\n {state.label && <Label>{state.label}</Label>}\n <Input\n autoFocus\n type={state.secret ? 'password' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n placeholder={state.placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={\n (state.label ? 'mt-2 ' : '') + (state.secret ? 'font-mono' : '')\n }\n />\n </div>\n {state.confirmField && (\n <div>\n <Label>confirm</Label>\n <Input\n type={state.secret ? 'password' : 'text'}\n value={confirmValue}\n onChange={(e) => {\n setConfirmValue(e.target.value);\n setError(null);\n }}\n placeholder=\"re-enter to confirm\"\n autoComplete=\"off\"\n spellCheck={false}\n className={'mt-2 ' + (state.secret ? 'font-mono' : '')}\n />\n </div>\n )}\n {error && <p className=\"text-destructive font-mono text-xs\">{error}</p>}\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(null)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button onClick={submit} className=\"font-display tracking-wide uppercase\">\n {state.confirmLabel ?? 'ok'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown, Plus } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn('border-b', className)} {...props} />\n));\nAccordionItem.displayName = 'AccordionItem';\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> & {\n /** Toggle glyph: a rotating chevron (default) or a marketing plus that\n * turns into an ✕ on open, tinted with the brand. */\n icon?: 'chevron' | 'plusMinus';\n }\n>(({ className, children, icon = 'chevron', ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline',\n icon === 'chevron'\n ? '[&[data-state=open]>svg]:rotate-180'\n : '[&[data-state=open]>svg]:rotate-45',\n className\n )}\n {...props}\n >\n {children}\n {icon === 'chevron' ? (\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n ) : (\n <Plus className=\"text-primary h-5 w-5 shrink-0 transition-transform duration-200\" />\n )}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst surfaceVariants = cva('rounded-xl transition-colors', {\n variants: {\n tone: {\n /* Crisp panel floating on the page — the default soft card. */\n default: 'bg-card text-card-foreground',\n /* Warm-gray recessed panel. */\n muted: 'bg-muted text-foreground',\n /* Solid brand fill — small terracotta panel; inverts child text. */\n brand: 'bg-brand text-brand-foreground',\n /* High-contrast neutral panel (near-black in light, near-white in dark). */\n contrast: 'bg-foreground text-background',\n /* Translucent lightened tile for cards sitting ON a brand band. */\n onBrand:\n 'text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]',\n /* Frame only, transparent fill. */\n outline: 'bg-transparent text-foreground',\n },\n elevation: {\n none: 'shadow-none',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n },\n bordered: {\n true: 'border',\n false: '',\n },\n pad: {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-5 sm:p-6',\n lg: 'p-6 sm:p-8',\n },\n },\n defaultVariants: {\n tone: 'default',\n elevation: 'sm',\n bordered: true,\n pad: 'md',\n },\n});\n\nexport interface SurfaceProps\n extends Omit<React.ComponentProps<'div'>, 'color'>,\n VariantProps<typeof surfaceVariants> {}\n\n/**\n * Surface — the soft, large-radius, elevated panel that the warm theme sits on.\n *\n * The package `Card` is a TERMINAL-window frame (mono title strip, terminal\n * dots) for dashboards; Surface is its plain marketing/consumer counterpart —\n * a bg-card panel with token-routed radius + soft elevation and no chrome.\n * Re-skins per skin via the radius + shadow tokens. Use this for feature cards,\n * sign-in cards, trust chips — anything that is NOT a terminal panel.\n */\nexport function Surface({\n className,\n tone,\n elevation,\n bordered,\n pad,\n ...props\n}: SurfaceProps) {\n return (\n <div\n data-slot=\"surface\"\n className={cn(surfaceVariants({ tone, elevation, bordered, pad }), className)}\n {...props}\n />\n );\n}\n\nexport { surfaceVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst iconBadgeVariants = cva(\n 'inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none',\n {\n variants: {\n tone: {\n /* The signature peach tile — soft accent fill, terracotta glyph.\n Auto-swaps to warm-dark + light-peach in dark mode via tokens. */\n peach: 'bg-accent text-accent-foreground',\n /* Inverted near-black tile, light glyph (\"never do\" promises). */\n dark: 'bg-foreground text-background',\n /* Solid brand tile. */\n brand: 'bg-primary text-primary-foreground',\n /* White tile on a brand band, terracotta glyph (numbered steps). */\n onBrand: 'bg-brand-foreground text-primary',\n /* Quiet neutral tile. */\n muted: 'bg-muted text-foreground',\n /* Crisp white (card-colored) tile with a terracotta glyph and a\n soft lift — the elevated icon chip on muted/colored cards. */\n surface: 'bg-card text-primary shadow-sm',\n },\n size: {\n sm: 'size-9 text-xs [&_svg]:size-4',\n md: 'size-11 text-sm [&_svg]:size-5',\n lg: 'size-12 text-base [&_svg]:size-6',\n xl: 'size-14 text-lg [&_svg]:size-7',\n },\n },\n defaultVariants: { tone: 'peach', size: 'md' },\n }\n);\n\nexport interface IconBadgeProps\n extends Omit<React.ComponentProps<'span'>, 'color'>,\n VariantProps<typeof iconBadgeVariants> {}\n\n/**\n * IconBadge — a rounded-square tile holding a lucide icon OR a number/short\n * label. The theme's most-reused decorative atom (feature-card icons, numbered\n * steps, the verified chip). Distinct from the text `Badge` pill: this is a\n * fixed-size square tile. Tones map to skin tokens so the same markup recolours\n * across skins and light/dark (peach ↔ warm-dark).\n *\n * <IconBadge tone=\"peach\"><Lock /></IconBadge>\n * <IconBadge tone=\"onBrand\" size=\"sm\">1</IconBadge>\n */\nexport function IconBadge({ className, tone, size, children, ...props }: IconBadgeProps) {\n return (\n <span\n data-slot=\"icon-badge\"\n className={cn(iconBadgeVariants({ tone, size }), className)}\n {...props}\n >\n {children}\n </span>\n );\n}\n\nexport { iconBadgeVariants };\n","import type { ReactNode } from 'react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface FeatureCardProps {\n /** Optional leading glyph — a lucide icon sized by IconBadge. */\n icon?: ReactNode;\n iconTone?: 'peach' | 'dark' | 'brand' | 'onBrand' | 'muted' | 'surface';\n title: ReactNode;\n children?: ReactNode;\n orientation?: 'vertical' | 'horizontal';\n align?: 'start' | 'center';\n tone?: 'default' | 'muted' | 'onBrand';\n elevation?: 'none' | 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * FeatureCard — the soft Surface tile that carries a feature: an IconBadge, a\n * title, and a line of body copy. The marketing-grid workhorse. Stack them\n * vertically in a feature grid, or go horizontal for a tighter list row.\n */\nexport function FeatureCard({\n icon,\n iconTone = 'peach',\n title,\n children,\n orientation = 'vertical',\n align = 'start',\n tone = 'default',\n elevation = 'sm',\n className,\n}: FeatureCardProps) {\n const horizontal = orientation === 'horizontal';\n const centered = !horizontal && align === 'center';\n\n return (\n <Surface\n tone={tone}\n elevation={elevation}\n pad={horizontal ? 'md' : 'lg'}\n className={cn(\n 'flex h-full',\n horizontal ? 'flex-row gap-4' : 'flex-col',\n centered && 'items-center text-center',\n className\n )}\n >\n {icon && (\n <IconBadge\n tone={iconTone}\n size=\"lg\"\n className={cn(horizontal ? 'shrink-0' : 'mb-4')}\n >\n {icon}\n </IconBadge>\n )}\n <div className={cn(horizontal && 'min-w-0')}>\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {children && (\n <p className=\"text-muted-foreground mt-1.5 text-sm leading-relaxed\">\n {children}\n </p>\n )}\n </div>\n </Surface>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface SectionProps {\n /** Background band: neutral page, recessed gray, brand fill, or a forced-dark band on a light page. */\n tone?: 'default' | 'muted' | 'brand' | 'dark';\n /** Inner width: centered container, wide max-w-screen-2xl, or full-bleed. */\n width?: 'default' | 'wide' | 'full';\n /** Diagonal texture overlay; defaults on only for tone='brand'. */\n diagonal?: boolean;\n id?: string;\n className?: string;\n innerClassName?: string;\n children: ReactNode;\n}\n\nconst TONE: Record<NonNullable<SectionProps['tone']>, string> = {\n default: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n brand: 'bg-brand text-brand-foreground',\n // `dark` activates the .dark variant locally so descendant package\n // components render their dark arm even on an otherwise light page.\n dark: 'dark bg-background text-foreground',\n};\n\nconst WIDTH: Record<NonNullable<SectionProps['width']>, string> = {\n default: 'container',\n wide: 'mx-auto w-full max-w-screen-2xl px-4 sm:px-6 lg:px-8',\n full: '',\n};\n\n/**\n * Section — the full-bleed marketing band: a tone-routed background stripe with\n * vertical rhythm and a width-capped inner. Stack these to build a landing page;\n * use tone='dark' to force a dark band on a light page. BrandBand is the\n * brand-tone shorthand.\n */\nexport function Section({\n tone = 'default',\n width = 'default',\n diagonal,\n id,\n className,\n innerClassName,\n children,\n}: SectionProps) {\n const showDiagonal = diagonal ?? tone === 'brand';\n return (\n <div\n id={id}\n className={cn('w-full', TONE[tone], showDiagonal && 'oc-diagonal', className)}\n >\n <div className={cn('py-16 sm:py-20 md:py-24', WIDTH[width], innerClassName)}>\n {children}\n </div>\n </div>\n );\n}\n\n/** BrandBand — Section pinned to the brand tone. */\nexport function BrandBand(props: SectionProps) {\n return <Section tone=\"brand\" {...props} />;\n}\n","import type { ReactNode } from 'react';\n\nimport { Check, X } from 'lucide-react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface ComparisonRow {\n label: ReactNode;\n theirs: ReactNode;\n ours: ReactNode;\n}\n\nexport interface ComparisonTableProps {\n rows: ComparisonRow[];\n columns?: { feature?: string; theirs: string; ours: string };\n className?: string;\n}\n\n/**\n * ComparisonTable — a two-column \"them vs us\" feature matrix for marketing pages.\n * the ours column is tinted (bg-accent/40) and its checks read text-primary; the\n * theirs column reads muted with X glyphs. skin-agnostic, scrolls on small screens.\n */\nexport function ComparisonTable({ rows, columns, className }: ComparisonTableProps) {\n const cols = { feature: '', theirs: 'A normal login', ours: 'OrangeCheck', ...columns };\n return (\n <div className={cn('overflow-hidden rounded-xl border', className)}>\n <div className=\"overflow-x-auto\">\n <div className=\"min-w-[32rem]\">\n <div className=\"grid grid-cols-[1.4fr_1fr_1fr]\">\n <div className=\"label-mono text-muted-foreground px-4 py-3.5 sm:px-6\">\n {cols.feature}\n </div>\n <div className=\"px-4 py-3.5 font-semibold text-foreground sm:px-6\">\n {cols.theirs}\n </div>\n <div className=\"bg-accent/60 border-border/60 border-l px-4 py-3.5 font-semibold text-primary sm:px-6\">\n {cols.ours}\n </div>\n </div>\n {rows.map((row, i) => (\n <div key={i} className=\"grid grid-cols-[1.4fr_1fr_1fr] border-t\">\n <div className=\"px-4 py-3.5 font-medium text-foreground sm:px-6\">\n {row.label}\n </div>\n <div className=\"text-muted-foreground flex items-center gap-2 px-4 py-3.5 sm:px-6\">\n <X className=\"text-muted-foreground/70 size-4\" />\n <span>{row.theirs}</span>\n </div>\n <div className=\"bg-accent/40 border-border/60 flex items-center gap-2 border-l px-4 py-3.5 text-foreground sm:px-6\">\n <Check className=\"size-4 text-primary\" />\n <span>{row.ours}</span>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\n/**\n * NumberedStep / StepList — the marketing \"how it works\" sequence: a peach\n * numbered tile, a title, and a short body, laid out in a responsive grid.\n * Use for 2–4 step walkthroughs on a landing page; pass tone='onBrand' when\n * the list sits on a terracotta band.\n */\n\nexport interface Step {\n title: ReactNode;\n children?: ReactNode;\n}\n\nexport interface NumberedStepProps {\n n: number;\n title: ReactNode;\n children?: ReactNode;\n tone?: 'default' | 'onBrand';\n card?: boolean;\n className?: string;\n}\n\nexport function NumberedStep({\n n,\n title,\n children,\n tone = 'default',\n card = false,\n className,\n}: NumberedStepProps) {\n const onBrand = tone === 'onBrand';\n const body = (\n <div className={cn(!card && className)}>\n <IconBadge tone={onBrand ? 'onBrand' : 'peach'} size=\"sm\">\n {n}\n </IconBadge>\n <div className=\"mt-4 text-lg font-semibold\">{title}</div>\n {children && (\n <div\n className={cn(\n 'mt-1.5 text-sm leading-relaxed',\n onBrand ? 'text-brand-foreground/80' : 'text-muted-foreground'\n )}\n >\n {children}\n </div>\n )}\n </div>\n );\n\n if (!card) return body;\n\n return (\n <Surface\n tone={onBrand ? 'onBrand' : 'default'}\n elevation={onBrand ? 'none' : 'sm'}\n pad=\"md\"\n className={className}\n >\n {body}\n </Surface>\n );\n}\n\nexport interface StepListProps {\n steps: Step[];\n variant?: 'bare' | 'card';\n tone?: 'default' | 'onBrand';\n columns?: 2 | 3 | 4;\n className?: string;\n}\n\nconst COLUMNS: Record<2 | 3 | 4, string> = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\n\nexport function StepList({\n steps,\n variant = 'bare',\n tone = 'default',\n columns = 3,\n className,\n}: StepListProps) {\n return (\n <div className={cn('grid gap-6 sm:grid-cols-2 sm:gap-8', COLUMNS[columns], className)}>\n {steps.map((step, index) => (\n <NumberedStep\n key={index}\n n={index + 1}\n title={step.title}\n tone={tone}\n card={variant === 'card'}\n >\n {step.children}\n </NumberedStep>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface FaqItem {\n q: ReactNode;\n a: ReactNode;\n}\n\nexport interface FaqProps {\n items: FaqItem[];\n /** Index of the item open on first render; omit for all collapsed. */\n defaultOpen?: number;\n className?: string;\n}\n\n/**\n * Faq — a plus/minus accordion list of question/answer pairs for the bottom of\n * a marketing page. single-open, collapsible. re-skins via the underlying\n * Accordion primitive.\n */\nexport function Faq({ items, defaultOpen, className }: FaqProps) {\n return (\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={defaultOpen != null ? String(defaultOpen) : undefined}\n className={cn('w-full', className)}\n >\n {items.map((item, i) => (\n <AccordionItem key={i} value={String(i)}>\n <AccordionTrigger\n icon=\"plusMinus\"\n className=\"text-foreground text-base font-semibold\"\n >\n {item.q}\n </AccordionTrigger>\n <AccordionContent className=\"text-muted-foreground leading-relaxed\">\n {item.a}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Button, Input } from '../primitives';\n\nexport interface EmailCaptureProps {\n /** Native form action (e.g. a serverless handler or list endpoint). */\n action?: string;\n /** Native form method. */\n method?: string;\n /** Client-side submit handler — preventDefault yourself if intercepting. */\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n /** Input name attribute. */\n name?: string;\n placeholder?: string;\n /** Submit button label. */\n cta?: ReactNode;\n /** Small reassurance line under the row (e.g. \"no spam, unsubscribe anytime\"). */\n note?: ReactNode;\n /** `onBrand` for placement on a terracotta/dark band. */\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\n/**\n * EmailCapture — the inline waitlist / newsletter row: a pill email field plus a\n * pill submit, with an optional fine-print note. drop it in a hero or footer\n * band; `tone='onBrand'` flips the field translucent + button white for dark\n * brand bands.\n */\nexport function EmailCapture({\n action,\n method,\n onSubmit,\n name = 'email',\n placeholder = 'you@email.com',\n cta = 'Join the waitlist',\n note,\n tone = 'default',\n className,\n}: EmailCaptureProps) {\n const onBrand = tone === 'onBrand';\n return (\n <form action={action} method={method} onSubmit={onSubmit} className={cn(className)}>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <Input\n type=\"email\"\n name={name}\n required\n placeholder={placeholder}\n className={cn(\n 'rounded-full text-base md:text-sm',\n onBrand &&\n '[background:color-mix(in_oklch,white_18%,transparent)] placeholder:text-primary-foreground/60 border-transparent text-primary-foreground'\n )}\n />\n <Button type=\"submit\" variant={onBrand ? 'onBrand' : 'default'} className=\"rounded-full\">\n {cta}\n </Button>\n </div>\n {note && (\n <p\n className={cn(\n 'mt-3 text-sm',\n onBrand ? 'text-primary-foreground/70' : 'text-muted-foreground'\n )}\n >\n {note}\n </p>\n )}\n </form>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Check } from 'lucide-react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface CheckListProps {\n /** Each item: a check glyph + this label. */\n items: ReactNode[];\n orientation?: 'horizontal' | 'vertical';\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\n/**\n * CheckList — a compact run of checkmarked points. use horizontal under a hero\n * or CTA for an inline \"what you get\" row; vertical for a small feature stack.\n * `tone=\"onBrand\"` when it sits on a brand/dark band.\n */\nexport function CheckList({\n items,\n orientation = 'horizontal',\n tone = 'default',\n className,\n}: CheckListProps) {\n const glyph = tone === 'onBrand' ? 'text-brand-foreground' : 'text-primary';\n const label = tone === 'onBrand' ? 'text-brand-foreground/90' : 'text-foreground';\n\n return (\n <ul\n className={cn(\n orientation === 'horizontal'\n ? 'flex flex-wrap gap-x-6 gap-y-2 text-sm'\n : 'flex flex-col gap-2 text-sm',\n className\n )}\n >\n {items.map((item, i) => (\n <li key={i} className={cn('inline-flex items-center gap-2', label)}>\n <Check className={cn('size-4 shrink-0', glyph)} />\n {item}\n </li>\n ))}\n </ul>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * AccentNote — a left-bar aside for a single emphasized line of copy. Use for a\n * caveat, footnote, or pull-quote beside body text. AccentList is the stepped\n * variant: a vertical stack of titled items with one \"active\" entry expanded.\n * Both are skin-agnostic — token colors only — and re-skin per skin + mode.\n */\n\nexport interface AccentNoteProps {\n /** Optional bold lead phrase rendered inline before the body. */\n lead?: ReactNode;\n children: ReactNode;\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport function AccentNote({ lead, children, tone = 'default', className }: AccentNoteProps) {\n const onBrand = tone === 'onBrand';\n return (\n <div\n className={cn(\n 'border-l-2 pl-4 text-sm leading-relaxed',\n onBrand\n ? 'border-primary-foreground/60 text-primary-foreground/80'\n : 'border-primary text-muted-foreground',\n className,\n )}\n >\n {lead && (\n <strong\n className={cn(\n 'mr-1.5 font-semibold',\n onBrand ? 'text-primary-foreground' : 'text-foreground',\n )}\n >\n {lead}\n </strong>\n )}\n {children}\n </div>\n );\n}\n\nexport interface AccentListItem {\n title: ReactNode;\n children?: ReactNode;\n active?: boolean;\n}\n\nexport interface AccentListProps {\n items: AccentListItem[];\n className?: string;\n}\n\nexport function AccentList({ items, className }: AccentListProps) {\n return (\n <div className={cn('flex flex-col', className)}>\n {items.map((item, i) => (\n <div\n key={i}\n className={cn('border-l-2 py-2 pl-5', item.active ? 'border-primary' : 'border-border')}\n >\n <div\n className={cn(\n 'font-semibold',\n item.active ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n {item.title}\n </div>\n {item.active && item.children && (\n <div className=\"text-muted-foreground mt-1 text-sm leading-relaxed\">\n {item.children}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Check } from 'lucide-react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface VerifiedChipProps {\n /** Leading glyph; defaults to a lucide Check. */\n icon?: ReactNode;\n /** Tone of the icon tile. */\n iconTone?: 'peach' | 'dark' | 'brand' | 'onBrand' | 'muted';\n /** Short trust phrase, e.g. \"verified on bitcoin\". */\n label: ReactNode;\n className?: string;\n}\n\n/**\n * VerifiedChip — a small floating trust chip (icon tile + short label) on a soft\n * elevated pill. drop it over a hero or card edge to mark something as verified.\n */\nexport function VerifiedChip({ icon, iconTone = 'peach', label, className }: VerifiedChipProps) {\n return (\n <Surface\n elevation=\"lg\"\n pad=\"none\"\n className={cn('inline-flex items-center gap-3 rounded-full px-3 py-2', className)}\n >\n <IconBadge tone={iconTone} size=\"sm\">\n {icon ?? <Check />}\n </IconBadge>\n <span className=\"pr-2 text-sm font-semibold text-foreground\">{label}</span>\n </Surface>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/tokens/cn.ts","../src/composites/help-hint.tsx","../src/composites/section-header.tsx","../src/primitives/button.tsx","../src/composites/error-page.tsx","../src/composites/empty-state.tsx","../src/composites/stat-grid.tsx","../src/primitives/stat-block.tsx","../src/composites/stat-card.tsx","../src/composites/callout.tsx","../src/composites/definition-list.tsx","../src/composites/data-row.tsx","../src/composites/panel.tsx","../src/composites/marketing-heading.tsx","../src/primitives/badge.tsx","../src/primitives/input.tsx","../src/primitives/alert.tsx","../src/primitives/confirm-dialog.tsx","../src/primitives/prompt-dialog.tsx","../src/primitives/accordion.tsx","../src/primitives/surface.tsx","../src/primitives/icon-badge.tsx","../src/composites/feature-card.tsx","../src/composites/section.tsx","../src/composites/comparison-table.tsx","../src/composites/numbered-step.tsx","../src/composites/faq.tsx","../src/composites/email-capture.tsx","../src/composites/check-list.tsx","../src/composites/accent-note.tsx","../src/composites/verified-chip.tsx"],"names":["jsxs","jsx","TONE_CLASS","Link","cva","X","Check"],"mappings":"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","file":"composites.mjs","sourcesContent":["import type { ClassValue } from 'clsx';\n\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Canonical class-name merge for the OrangeCheck family.\n * `clsx` for conditional composition, `tailwind-merge` to resolve\n * conflicting Tailwind utilities (last-wins by property).\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","'use client';\n\nimport * as Popover from '@radix-ui/react-popover';\nimport { HelpCircle } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface HelpHintProps {\n /** The help body — short prose (1–3 sentences) explaining a term/control. */\n children: ReactNode;\n /** Optional bold \"§ \"-prefixed heading inside the popover. */\n title?: string;\n /** Which side the popover prefers to open toward. Default `top`. */\n side?: 'top' | 'right' | 'bottom' | 'left';\n /** `xs` tightens the icon for dense label rows; `sm` (default) suits most. */\n size?: 'xs' | 'sm';\n /** `subtle` mutes the \"?\" icon when it sits in a description / muted row;\n * `default` is primary-tinted for active labels. */\n tone?: 'default' | 'subtle';\n /** Accessible label for the trigger (defaults to \"what is this?\"). */\n label?: string;\n className?: string;\n}\n\n/**\n * HelpHint — the canonical inline \"?\" affordance for term-level guidance.\n * Click/focus reveals a small popover (Radix) with optional title + prose;\n * works on touch (not a hover tooltip). Lifted from oc-me-web's richer\n * `me/ui/HelpHint` (with `size`/`tone`), now the single source. Also the\n * keystone behind `SectionHeader`'s optional `hint`.\n */\nexport function HelpHint({\n children,\n title,\n side = 'top',\n size = 'sm',\n tone = 'default',\n label = 'what is this?',\n className,\n}: HelpHintProps) {\n const iconSize = size === 'xs' ? 12 : 14;\n return (\n <Popover.Root>\n <Popover.Trigger\n aria-label={label}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n 'focus-visible:ring-primary/60 inline-flex shrink-0 items-center justify-center rounded-full transition-colors outline-none focus-visible:ring-2',\n tone === 'subtle'\n ? 'text-muted-foreground/60 hover:text-foreground/80'\n : 'text-primary/70 hover:text-primary',\n className\n )}\n >\n <HelpCircle size={iconSize} aria-hidden />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side={side}\n sideOffset={6}\n collisionPadding={12}\n className=\"border-border bg-popover text-popover-foreground 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 z-50 max-w-xs rounded-md border p-3 text-xs leading-relaxed shadow-md outline-none\"\n >\n {title && <div className=\"label-mono text-primary mb-1.5\">§ {title}</div>}\n <div className=\"text-foreground/90\">{children}</div>\n <Popover.Arrow className=\"fill-popover\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { HelpHint } from './help-hint';\n\nexport interface SectionHeaderProps {\n /** Plain section name — rendered after a \"§ \" glyph in label-mono. */\n label: string;\n /** Optional right-side string (count, \"most recent first\"). */\n meta?: ReactNode;\n /** When provided, renders an inline HelpHint \"?\" next to the label. */\n hint?: { title?: string; body: ReactNode; side?: 'top' | 'bottom' | 'left' | 'right' };\n tone?: 'primary' | 'muted' | 'warning' | 'success' | 'destructive';\n className?: string;\n}\n\nconst TONE_CLASS = {\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n warning: 'text-warning',\n success: 'text-success',\n destructive: 'text-destructive',\n} as const;\n\n/**\n * SectionHeader — the canonical \"§ x\" section header used across every\n * /me, /vault, and /fleet dashboard surface. Lifted from oc-me-web's\n * `me/ui/SectionHeader` so the visual contract stays single-source.\n *\n * Pattern is `label-mono text-primary mb-3` with a \"§ \" glyph followed by\n * the label, plus an optional muted/uppercase right-side meta string.\n */\nexport function SectionHeader({\n label,\n meta,\n hint,\n tone = 'primary',\n className = '',\n}: SectionHeaderProps) {\n return (\n <div className={`mb-3 flex items-baseline justify-between gap-2 ${className}`}>\n <div className=\"flex items-center gap-1.5\">\n <div className={`label-mono ${TONE_CLASS[tone]}`}>§ {label}</div>\n {hint && (\n <HelpHint title={hint.title} side={hint.side ?? 'bottom'}>\n {hint.body}\n </HelpHint>\n )}\n </div>\n {meta && (\n <span className=\"text-muted-foreground/70 font-mono text-[10px] tracking-widest uppercase\">\n {meta}\n </span>\n )}\n </div>\n );\n}\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',\n outline:\n 'bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs',\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 // For CTAs placed ON a saturated brand band or a dark section\n // (e.g. a terracotta hero / footer / a forced-dark block) where\n // the surface is dark+light-text in either mode. A neutral white\n // pill + a translucent-white ghost read on any such surface;\n // hardcoded white is deliberate (cf. destructive's text-white).\n onBrand: 'bg-white text-neutral-900 shadow-sm hover:bg-white/90',\n onBrandOutline:\n 'border border-white/40 bg-transparent text-white hover:bg-white/10',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import { ArrowLeft, Home, RefreshCw } from 'lucide-react';\nimport Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../primitives/button';\n\nexport type OcErrorVariant = 'not-found' | 'server-error';\n\nexport interface OcErrorPageProps {\n /**\n * Picks the defaults. `not-found` is the 404 shape (primary tone, a \"go\n * back\" affordance); `server-error` is the 500 shape (destructive tone, a\n * retry affordance and a what-to-do list).\n */\n variant?: OcErrorVariant;\n /** Override the big numeral. Defaults to 404 / 500 from the variant. */\n code?: number | string;\n /** Override the headline. Lowercase, per the family voice. */\n title?: string;\n /** Override the `//` prose line under the headline. */\n detail?: string;\n /**\n * A short \"what can you do\" list, rendered as the bordered mono panel.\n * Defaults to the server-error list; pass `[]` to suppress it.\n *\n * Items are nodes, not just strings, so one can carry a link — attest's\n * original 500 ended its list with \"persisting? report it on github\", and\n * a shared component that could not express that would have been a\n * downgrade for the site it was lifted from.\n */\n actions?: ReactNode[];\n /** Where \"go home\" points. A site with a app-scoped root can change it. */\n homeHref?: string;\n /** Extra content below the buttons — a report link, a status page, a hint. */\n children?: ReactNode;\n className?: string;\n}\n\nconst VARIANTS = {\n 'not-found': {\n code: 404,\n title: 'no such route',\n detail: \"the page you're looking for doesn't exist, or has been moved.\",\n tone: 'text-primary',\n label: 'not found',\n actions: [] as ReactNode[],\n },\n 'server-error': {\n code: 500,\n title: 'internal error',\n detail: 'something went wrong on our end.',\n tone: 'text-destructive',\n label: 'server error',\n actions: [\n 'try refreshing the page',\n 'wait a few minutes, try again',\n 'return home and start over',\n ] as ReactNode[],\n },\n} as const;\n\n/**\n * OcErrorPage — the family's 404 / 500 body.\n *\n * Nine of thirteen family sites had no error page at all and fell through to\n * Next's unstyled default: no header, no footer, no theme, none of the chrome\n * every other page on the site has. It is the one page a visitor is guaranteed\n * to reach eventually, and it was the only one that looked like a different\n * product.\n *\n * Lifted from `oc-attest-web`, which was the only site with a good one. It\n * lives here rather than being copied nine times because a copied page drifts —\n * that is the lesson of the family's `isFamilyUrl` predicate, where 14 of 15\n * hand-copied versions shared a flaw the 15th had already fixed.\n *\n * `Seo` stays with the consumer: the page's title and `noindex` are site\n * concerns and the design package has no business owning them. So a site's\n * `404.tsx` is its `<Seo>` plus `<OcErrorPage variant=\"not-found\" />`.\n *\n * The \"go back\" button uses `window.history.back()`, which needs a client\n * component — the consumer page carries `'use client'`, as Next requires for\n * any page with an interactive handler.\n */\nexport function OcErrorPage({\n variant = 'not-found',\n code,\n title,\n detail,\n actions,\n homeHref = '/',\n children,\n className = '',\n}: OcErrorPageProps) {\n const v = VARIANTS[variant];\n const shownCode = code ?? v.code;\n const shownActions = actions ?? [...v.actions];\n const isServerError = variant === 'server-error';\n\n return (\n <div\n className={`container flex min-h-[60vh] flex-col items-center justify-center ${className}`}\n >\n <div className=\"w-full max-w-xl\">\n <div className={`label-mono mb-4 ${v.tone}`}>\n § {shownCode} // {v.label}\n </div>\n <h1\n className={`font-display text-7xl font-bold tracking-tight tabular-nums sm:text-8xl ${v.tone}`}\n >\n {shownCode}\n </h1>\n <h2 className=\"font-display mt-2 text-2xl font-bold tracking-tight sm:text-3xl\">\n {title ?? v.title}\n </h2>\n <p className=\"text-muted-foreground mt-3 font-mono text-xs\">\n {'// '}\n {detail ?? v.detail}\n </p>\n\n {shownActions.length > 0 && (\n <div className=\"mt-8 border\">\n <div className=\"border-b px-4 py-2 font-mono text-[11px] tracking-widest uppercase\">\n what can you do\n </div>\n <ul className=\"divide-y font-mono text-xs\">\n {shownActions.map((a, i) => (\n // Index keys: items are nodes and the list is\n // static per variant, so there is nothing\n // better to key on and nothing reorders.\n <li key={i} className=\"px-4 py-2\">\n {'>> '}\n {a}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n <div className=\"mt-8 flex flex-wrap gap-3\">\n <Button asChild className=\"font-mono\">\n <Link href={homeHref}>\n <Home className=\"mr-2 h-3 w-3\" />\n <span className=\"text-[11px] tracking-widest uppercase\">go home</span>\n </Link>\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => {\n if (typeof window === 'undefined') return;\n if (isServerError) window.location.reload();\n else window.history.back();\n }}\n className=\"font-mono\"\n >\n {isServerError ? (\n <RefreshCw className=\"mr-2 h-3 w-3\" />\n ) : (\n <ArrowLeft className=\"mr-2 h-3 w-3\" />\n )}\n <span className=\"text-[11px] tracking-widest uppercase\">\n {isServerError ? 'retry' : 'go back'}\n </span>\n </Button>\n </div>\n\n {children && <div className=\"mt-6\">{children}</div>}\n </div>\n </div>\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nexport interface EmptyStateCta {\n label: string;\n href: string;\n /** External links open in a new tab and get a ↗ glyph. */\n external?: boolean;\n}\n\nexport interface EmptyStateProps {\n /** Short heading — one mono-uppercased label like \"no entries yet\". */\n label: string;\n /** Body — short prose explaining what would appear here and how. */\n children: ReactNode;\n cta?: EmptyStateCta;\n secondary?: EmptyStateCta;\n tone?: 'info' | 'warning' | 'muted';\n className?: string;\n}\n\nconst TONE_CLASS = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n muted: 'border-border bg-muted/20',\n} as const;\n\nconst LABEL_TONE_CLASS = {\n info: 'text-primary',\n warning: 'text-warning',\n muted: 'text-muted-foreground',\n} as const;\n\n/**\n * EmptyState — the canonical empty-state card used across every /me,\n * /vault, and /fleet dashboard. Empty states should *teach*: explain what\n * would appear, and how to make it appear. Lifted from oc-me-web's\n * `me/ui/EmptyState`.\n */\nexport function EmptyState({\n label,\n children,\n cta,\n secondary,\n tone = 'info',\n className = '',\n}: EmptyStateProps) {\n return (\n <div className={`border p-5 md:p-6 ${TONE_CLASS[tone]} ${className}`}>\n <div className={`label-mono mb-2 ${LABEL_TONE_CLASS[tone]}`}>§ {label}</div>\n <div className=\"text-foreground/85 max-w-2xl text-sm leading-relaxed\">{children}</div>\n {(cta || secondary) && (\n <div className=\"mt-4 flex flex-wrap gap-3\">\n {cta && <CtaLink {...cta} variant=\"primary\" />}\n {secondary && <CtaLink {...secondary} variant=\"secondary\" />}\n </div>\n )}\n </div>\n );\n}\n\nfunction CtaLink({\n label,\n href,\n external,\n variant,\n}: EmptyStateCta & { variant: 'primary' | 'secondary' }) {\n const cls =\n variant === 'primary'\n ? 'bg-primary text-primary-foreground hover:bg-primary/90 inline-flex h-9 items-center justify-center rounded-md px-4 font-mono text-[11px] font-semibold tracking-widest uppercase'\n : 'text-muted-foreground hover:text-foreground border-input hover:bg-accent inline-flex h-9 items-center justify-center rounded-md border px-4 font-mono text-[11px] tracking-widest uppercase';\n const text = external ? `${label} ↗` : label;\n if (external) {\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className={cls}>\n {text}\n </a>\n );\n }\n return (\n <Link href={href} className={cls}>\n {text}\n </Link>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface StatItem {\n /** Short uppercased label rendered in mono. */\n label: string;\n /** Primary value · already formatted as a string. */\n value: string;\n /** Optional secondary line · USD conversion, \"last 30 days\", etc. */\n sub?: string;\n /** When true, value is rendered in primary tone (use for headline metric). */\n accent?: boolean;\n /** Optional tone for the value (overrides accent). */\n tone?: 'default' | 'primary' | 'success' | 'warning' | 'destructive' | 'muted';\n}\n\nexport interface StatGridProps {\n items: StatItem[];\n columns?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nconst TONE_CLASS = {\n default: '',\n primary: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n} as const;\n\nconst COL_CLASS = {\n 1: '',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n} as const;\n\n/**\n * StatGrid — the canonical stats row used across family dashboards.\n * Lifted from oc-me-web's `me/ui/StatGrid`. Grid of equal-width tiles\n * separated by 1px borders. Always pre-format the value string —\n * the component does no number formatting.\n */\nexport function StatGrid({ items, columns = 3, className = '' }: StatGridProps) {\n return (\n <div className={`oc-stat-grid bg-border grid gap-px border ${COL_CLASS[columns]} ${className}`}>\n {items.map((it, i) => (\n <Tile key={`${it.label}-${i}`} item={it} />\n ))}\n </div>\n );\n}\n\nfunction Tile({ item }: { item: StatItem }) {\n const tone = item.tone ?? (item.accent ? 'primary' : 'default');\n return (\n <div className=\"oc-stat-tile bg-background p-5\">\n <div className=\"text-muted-foreground/80 font-mono text-[10px] tracking-widest uppercase\">\n {item.label}\n </div>\n <div\n className={`font-display mt-1 text-2xl font-bold tabular-nums tracking-tight ${TONE_CLASS[tone]}`}\n >\n {item.value}\n </div>\n {item.sub && (\n <div className=\"text-muted-foreground/70 mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {item.sub}\n </div>\n )}\n </div>\n );\n}\n\nexport function StatTile({ children, ...item }: StatItem & { children?: ReactNode }) {\n return (\n <div>\n <Tile item={item} />\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface StatBlockProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional \"vs prior period\" delta — arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n className?: string;\n}\n\n/**\n * A single labelled value cell — the building block for every counter grid in a\n * dashboard. Optional delta arrow + colour for period-over-period deltas.\n * (Richer than StatTile: carries a delta. Use StatGrid for laid-out grids.)\n */\nexport function StatBlock({ label, value, sub, delta, tone = 'default', className }: StatBlockProps) {\n const toneClass =\n tone === 'success'\n ? 'text-success'\n : tone === 'warning'\n ? 'text-warning'\n : tone === 'destructive'\n ? 'text-destructive'\n : 'text-foreground';\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <span className=\"label-mono text-muted-foreground text-[10px]\">{label}</span>\n <span\n className={cn(\n 'font-display text-2xl font-bold tracking-tight tabular-nums',\n toneClass\n )}\n >\n {value}\n </span>\n <div className=\"flex items-baseline gap-2\">\n {sub && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide lowercase\">\n {sub}\n </span>\n )}\n {delta && (\n <span\n className={cn(\n 'font-mono text-[11px] tracking-wide',\n delta.value > 0\n ? 'text-success'\n : delta.value < 0\n ? 'text-destructive'\n : 'text-muted-foreground'\n )}\n >\n {delta.value > 0 ? '▲' : delta.value < 0 ? '▼' : '·'}{' '}\n {Math.abs(delta.value).toFixed(1)}\n {delta.suffix ?? '%'}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { StatBlock } from '../primitives/stat-block';\nimport { cn } from '../tokens/cn';\n\nexport interface StatCardProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional period-over-period delta arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n /** Padding density — `sm` for dense grids, `default` for standalone cards. */\n pad?: 'sm' | 'default';\n className?: string;\n}\n\n/**\n * StatCard — a single stat in a bordered `bg-card` frame. The standalone\n * counterpart to StatBlock (the bare cell) and StatGrid (a laid-out grid):\n * this is the \"one stat in its own card\" shape that fleet (`dashboard/Stat`)\n * and me (`StatCell`, `ParticipationFeeCard` tiles, etc.) each hand-roll.\n * Wraps StatBlock so the inner cell stays single-source.\n */\nexport function StatCard({ pad = 'default', className, ...stat }: StatCardProps) {\n return (\n <div className={cn('oc-stat-card border bg-card', pad === 'sm' ? 'p-3 md:p-4' : 'p-5', className)}>\n <StatBlock {...stat} />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport type CalloutTone = 'info' | 'warning' | 'destructive' | 'success' | 'muted';\n\nexport interface CalloutProps {\n tone?: CalloutTone;\n /** Optional \"§ \"-prefixed mono header. */\n label?: string;\n /** Optional leading icon, sized by the caller (e.g. lucide `size-4`). */\n icon?: ReactNode;\n /** Body content. */\n children: ReactNode;\n /** Optional trailing action (button / link) pinned to the bottom. */\n action?: ReactNode;\n className?: string;\n}\n\nconst FRAME: Record<CalloutTone, string> = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n destructive: 'border-destructive/40 bg-destructive/5',\n success: 'border-success/40 bg-success/5',\n muted: 'border-border bg-muted/20',\n};\n\nconst LABEL: Record<CalloutTone, string> = {\n info: 'text-primary',\n warning: 'text-warning',\n destructive: 'text-destructive',\n success: 'text-success',\n muted: 'text-muted-foreground',\n};\n\n/**\n * Callout — the canonical toned panel (`border-{tone}/40 bg-{tone}/5` + an\n * optional `label-mono` header) reimplemented across stamp, pledge, vote,\n * analytics, and me (HealthBanner / SimulationBanner / FrozenBanner /\n * DangerZone, etc.). One component, five tones. For empty-states with CTAs use\n * EmptyState; for inline term help use HelpHint; this is the general\n * notice/banner frame.\n */\nexport function Callout({ tone = 'info', label, icon, children, action, className }: CalloutProps) {\n return (\n <div className={cn('border p-4 md:p-5', FRAME[tone], className)}>\n {label && (\n <div className={cn('label-mono mb-2 flex items-center gap-1.5', LABEL[tone])}>\n {icon}\n <span>§ {label}</span>\n </div>\n )}\n <div className=\"text-foreground/85 text-sm leading-relaxed\">\n {!label && icon ? (\n <span className={cn('mr-2 inline-flex align-middle', LABEL[tone])}>{icon}</span>\n ) : null}\n {children}\n </div>\n {action && <div className=\"mt-3 flex flex-wrap gap-3\">{action}</div>}\n </div>\n );\n}\n","import { Fragment, type ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface DefinitionItem {\n label: ReactNode;\n value: ReactNode;\n}\n\nexport interface DefinitionListProps {\n items: DefinitionItem[];\n className?: string;\n}\n\n/**\n * DefinitionList — the mono-label / value `<dl>` grid reimplemented in agent's\n * inspector, vote's reveal page, and me (BondAnchorCard, OperatorIdentityCard,\n * FrozenBanner). Labels render in uppercase mono; values align in a second\n * column on wider viewports, stacking on narrow ones. Long values (hashes,\n * addresses) wrap via `break-all`.\n */\nexport function DefinitionList({ items, className }: DefinitionListProps) {\n return (\n <dl\n className={cn(\n 'oc-deflist grid gap-x-5 gap-y-2 text-sm sm:grid-cols-[auto_1fr] sm:items-baseline',\n className\n )}\n >\n {items.map((item, i) => (\n <Fragment key={i}>\n <dt className=\"label-mono text-muted-foreground text-[10px]\">{item.label}</dt>\n <dd className=\"text-foreground font-mono text-xs break-all\">{item.value}</dd>\n </Fragment>\n ))}\n </dl>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface DataRowProps {\n /** Primary content (left-aligned, grows to fill). */\n children: ReactNode;\n /** Trailing metadata pinned right (timestamp, count, status pill). */\n meta?: ReactNode;\n /** Optional action(s) rendered after the meta (button, link). */\n action?: ReactNode;\n /** Element to render as — `li` inside a list, `div` otherwise. */\n as?: ElementType;\n className?: string;\n}\n\n/**\n * DataRow — the \"content left, meta right, optional action\" list row\n * reimplemented across me (federations, incidents, grants, distributions,\n * fee entries) and other dashboards. Pair inside a `divide-y border` list.\n * On narrow viewports content and meta stack; from `sm` up they sit on one\n * baseline-aligned line.\n */\nexport function DataRow({ children, meta, action, as, className }: DataRowProps) {\n const Tag = (as ?? 'div') as ElementType;\n return (\n <Tag\n className={cn(\n 'oc-data-row flex flex-col gap-1 py-3 sm:flex-row sm:items-baseline sm:justify-between sm:gap-4',\n className\n )}\n >\n <div className=\"min-w-0 flex-1\">{children}</div>\n {(meta || action) && (\n <div className=\"flex shrink-0 items-center gap-3 sm:justify-end\">\n {meta && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide\">\n {meta}\n </span>\n )}\n {action}\n </div>\n )}\n </Tag>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface PanelProps {\n /** Mono kicker shown above the title (e.g. \"attestations\"). Rendered uppercase. */\n label?: ReactNode;\n /** Section title. */\n title?: ReactNode;\n /** Optional trailing control (a button, link, count) pinned right of the header. */\n action?: ReactNode;\n /** Drop the top divider (use for the first panel in a stack). */\n flush?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\n/**\n * Panel (DataSection) — the titled section that carries a chunk of a\n * data-dense / technical page (telemetry blocks, API sections, dashboard\n * groups). THEME-ADAPTIVE by design: under the cypherpunk skins it is a\n * flat full-width `border-t` divider section (terminal voice); under ember\n * the `.oc-panel` class promotes it to a discrete soft, warm, rounded card\n * (see the data-dense treatments in themes/ember.css). Compose these instead\n * of hand-rolling `border-t py-8` sections so subpages re-skin per theme.\n */\nexport function Panel({ label, title, action, flush, className, children }: PanelProps) {\n const hasHeader = label || title || action;\n return (\n <section className={cn('oc-panel py-8', !flush && 'border-t', className)}>\n {hasHeader && (\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n {label && <div className=\"label-mono text-primary mb-1\">{label}</div>}\n {title && (\n <h2 className=\"font-display text-lg font-bold tracking-tight\">{title}</h2>\n )}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n )}\n {children}\n </section>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * marketing-heading — the two-tone display heading used across consumer\n * landing sections. TwoToneHeading renders a solid lead clause followed by a\n * recoloured muted clause at the same size/weight; MarketingHeading wraps it\n * with an optional mono eyebrow and body paragraph. Use onBrand when it sits\n * on a brand/dark band.\n */\n\nexport interface TwoToneHeadingProps {\n lead: ReactNode;\n muted?: ReactNode;\n as?: ElementType;\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport function TwoToneHeading({\n lead,\n muted,\n as,\n tone = 'default',\n className,\n}: TwoToneHeadingProps) {\n const Tag = as ?? 'h2';\n const leadColor = tone === 'onBrand' ? 'text-primary-foreground' : 'text-foreground';\n // Lighter, cleaner muted clause so the two-tone contrast reads (matches the\n // designer's light-gray second phrase, not a heavy taupe). On a brand band\n // /60 fell below AA-large (~2.5:1); /75 keeps the two-tone read while staying\n // legible on terracotta.\n const mutedColor = tone === 'onBrand' ? 'text-primary-foreground/75' : 'text-foreground/40';\n return (\n <Tag\n className={cn(\n 'font-extrabold tracking-[-0.02em] leading-[1.0] text-balance',\n 'text-3xl sm:text-4xl md:text-5xl',\n leadColor,\n className,\n )}\n >\n <span>{lead}</span>\n {muted ? <span className={mutedColor}> {muted}</span> : null}\n </Tag>\n );\n}\n\nexport interface MarketingHeadingProps {\n eyebrow?: string;\n lead: ReactNode;\n muted?: ReactNode;\n body?: ReactNode;\n align?: 'start' | 'center';\n tone?: 'default' | 'onBrand';\n as?: ElementType;\n className?: string;\n}\n\nexport function MarketingHeading({\n eyebrow,\n lead,\n muted,\n body,\n align = 'start',\n tone = 'default',\n as,\n className,\n}: MarketingHeadingProps) {\n const centered = align === 'center';\n return (\n <div className={cn('flex flex-col', centered && 'items-center text-center', className)}>\n {eyebrow && (\n <p\n className={cn(\n 'label-mono mb-3',\n tone === 'onBrand' ? 'text-primary-foreground/80' : 'text-primary',\n )}\n >\n {eyebrow}\n </p>\n )}\n <TwoToneHeading\n lead={lead}\n muted={muted}\n as={as}\n tone={tone}\n className={cn('max-w-4xl', centered && 'mx-auto')}\n />\n {body && (\n <p\n className={cn(\n 'mt-4 max-w-2xl text-base sm:text-lg',\n tone === 'onBrand' ? 'text-primary-foreground/80' : 'text-muted-foreground',\n centered && 'mx-auto',\n )}\n >\n {body}\n </p>\n )}\n </div>\n );\n}\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst badgeVariants = cva(\n 'focus-visible:border-ring focus-visible:ring-ring/50 inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3',\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent',\n secondary:\n 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent',\n destructive:\n 'bg-destructive text-destructive-foreground [a&]:hover:bg-destructive/90 border-transparent',\n warning:\n 'bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent',\n success:\n 'bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent',\n info: 'bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent',\n brand: 'bg-brand-soft text-accent-foreground border-transparent',\n neutral:\n 'bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent',\n outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'span';\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\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 className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst alertVariants = cva(\n 'relative grid w-full grid-cols-[0_1fr] items-start gap-x-0 gap-y-0.5 rounded-md border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive:\n 'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',\n success:\n 'text-success bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-success/90',\n warning:\n 'text-warning bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { AlertTriangle } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\n\n/**\n * Promise-based replacement for `window.confirm` in the house design language.\n * Call `confirm({...})` from anywhere; a single mounted `<ConfirmHost />` renders\n * it. Async (resolves to a boolean) and provider-less by design.\n */\n\nexport interface ConfirmOptions {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n}\n\ninterface PendingConfirm extends ConfirmOptions {\n resolve: (ok: boolean) => void;\n}\n\n// Read NODE_ENV without depending on @types/node (this is a browser package).\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingConfirm | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\nexport function confirm(opts: ConfirmOptions): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[ConfirmDialog] confirm() called but no <ConfirmHost /> is mounted');\n }\n });\n}\n\n/** Singleton dialog host. Mount once at the app root. */\nexport function ConfirmHost() {\n const [state, setState] = useState<PendingConfirm | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn(\n '[ConfirmDialog] multiple <ConfirmHost /> instances mounted — the last one wins'\n );\n }\n notifyHost = () => setState(pending);\n if (pending) setState(pending);\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (ok: boolean) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(ok);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(false)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\">\n <div className=\"terminal-title\">\n <span\n className={\n 'flex items-center gap-1.5 ' +\n (state.destructive ? 'text-destructive' : 'text-primary')\n }\n >\n <AlertTriangle className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap [overflow-wrap:anywhere]\">\n {state.message}\n </div>\n </Dialog.Description>\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(false)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button\n onClick={() => close(true)}\n className={\n 'font-display tracking-wide uppercase ' +\n (state.destructive\n ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90'\n : '')\n }\n >\n {state.confirmLabel ?? 'confirm'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { Pencil } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Label } from './label';\n\n/**\n * Promise-based replacement for `window.prompt`, in the house design language.\n * Call `prompt({...})`; mount one `<PromptHost />` at the app root (alongside\n * `<ConfirmHost />`). Supports a masked `secret` input, a matching\n * `confirmField` (\"choose a passphrase, twice\"), and a `validate` hook.\n */\n\nexport interface PromptOptions {\n title: string;\n message?: string;\n label?: string;\n placeholder?: string;\n defaultValue?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n /** Mask the input. */\n secret?: boolean;\n /** Show a second input that must match the first. Implies validation. */\n confirmField?: boolean;\n /** Minimum accepted length. */\n minLength?: number;\n /** Return an error string to block submission, or null to allow it. */\n validate?: (value: string) => string | null;\n}\n\ninterface PendingPrompt extends PromptOptions {\n resolve: (value: string | null) => void;\n}\n\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingPrompt | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\n/** Open a prompt dialog. Resolves to the entered string, or null if cancelled. */\nexport function prompt(opts: PromptOptions): Promise<string | null> {\n return new Promise<string | null>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[PromptDialog] prompt() called but no <PromptHost /> is mounted');\n }\n });\n}\n\nexport function PromptHost() {\n const [state, setState] = useState<PendingPrompt | null>(null);\n const [value, setValue] = useState('');\n const [confirmValue, setConfirmValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn('[PromptDialog] multiple <PromptHost /> instances mounted');\n }\n notifyHost = () => {\n setValue(pending?.defaultValue ?? '');\n setConfirmValue('');\n setError(null);\n setState(pending);\n };\n if (pending) notifyHost();\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (result: string | null) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(result);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n const submit = useCallback(() => {\n if (!state) return;\n const v = value;\n if (state.minLength && v.length < state.minLength) {\n setError(`must be at least ${state.minLength} characters`);\n return;\n }\n if (state.confirmField && v !== confirmValue) {\n setError('the two entries do not match');\n return;\n }\n if (state.validate) {\n const msg = state.validate(v);\n if (msg) {\n setError(msg);\n return;\n }\n }\n close(v);\n }, [state, value, confirmValue, close]);\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(null)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content\n className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n }}\n >\n <div className=\"terminal-title\">\n <span className=\"text-primary flex items-center gap-1.5\">\n <Pencil className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n {state.message && (\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap\">\n {state.message}\n </div>\n </Dialog.Description>\n )}\n <div>\n {state.label && <Label>{state.label}</Label>}\n <Input\n autoFocus\n type={state.secret ? 'password' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n placeholder={state.placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={\n (state.label ? 'mt-2 ' : '') + (state.secret ? 'font-mono' : '')\n }\n />\n </div>\n {state.confirmField && (\n <div>\n <Label>confirm</Label>\n <Input\n type={state.secret ? 'password' : 'text'}\n value={confirmValue}\n onChange={(e) => {\n setConfirmValue(e.target.value);\n setError(null);\n }}\n placeholder=\"re-enter to confirm\"\n autoComplete=\"off\"\n spellCheck={false}\n className={'mt-2 ' + (state.secret ? 'font-mono' : '')}\n />\n </div>\n )}\n {error && <p className=\"text-destructive font-mono text-xs\">{error}</p>}\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(null)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button onClick={submit} className=\"font-display tracking-wide uppercase\">\n {state.confirmLabel ?? 'ok'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown, Plus } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn('border-b', className)} {...props} />\n));\nAccordionItem.displayName = 'AccordionItem';\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> & {\n /** Toggle glyph: a rotating chevron (default) or a marketing plus that\n * turns into an ✕ on open, tinted with the brand. */\n icon?: 'chevron' | 'plusMinus';\n }\n>(({ className, children, icon = 'chevron', ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline',\n icon === 'chevron'\n ? '[&[data-state=open]>svg]:rotate-180'\n : '[&[data-state=open]>svg]:rotate-45',\n className\n )}\n {...props}\n >\n {children}\n {icon === 'chevron' ? (\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n ) : (\n <Plus className=\"text-primary h-5 w-5 shrink-0 transition-transform duration-200\" />\n )}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst surfaceVariants = cva('rounded-xl transition-colors', {\n variants: {\n tone: {\n /* Crisp panel floating on the page — the default soft card. */\n default: 'bg-card text-card-foreground',\n /* Warm-gray recessed panel. */\n muted: 'bg-muted text-foreground',\n /* Solid brand fill — small terracotta panel; inverts child text. */\n brand: 'bg-brand text-brand-foreground',\n /* High-contrast neutral panel (near-black in light, near-white in dark). */\n contrast: 'bg-foreground text-background',\n /* Translucent lightened tile for cards sitting ON a brand band. */\n onBrand:\n 'text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]',\n /* Frame only, transparent fill. */\n outline: 'bg-transparent text-foreground',\n },\n elevation: {\n none: 'shadow-none',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n },\n bordered: {\n true: 'border',\n false: '',\n },\n pad: {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-5 sm:p-6',\n lg: 'p-6 sm:p-8',\n },\n },\n defaultVariants: {\n tone: 'default',\n elevation: 'sm',\n bordered: true,\n pad: 'md',\n },\n});\n\nexport interface SurfaceProps\n extends Omit<React.ComponentProps<'div'>, 'color'>,\n VariantProps<typeof surfaceVariants> {}\n\n/**\n * Surface — the soft, large-radius, elevated panel that the warm theme sits on.\n *\n * The package `Card` is a TERMINAL-window frame (mono title strip, terminal\n * dots) for dashboards; Surface is its plain marketing/consumer counterpart —\n * a bg-card panel with token-routed radius + soft elevation and no chrome.\n * Re-skins per skin via the radius + shadow tokens. Use this for feature cards,\n * sign-in cards, trust chips — anything that is NOT a terminal panel.\n */\nexport function Surface({\n className,\n tone,\n elevation,\n bordered,\n pad,\n ...props\n}: SurfaceProps) {\n return (\n <div\n data-slot=\"surface\"\n className={cn(surfaceVariants({ tone, elevation, bordered, pad }), className)}\n {...props}\n />\n );\n}\n\nexport { surfaceVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst iconBadgeVariants = cva(\n 'inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none',\n {\n variants: {\n tone: {\n /* The signature peach tile — soft accent fill, terracotta glyph.\n Auto-swaps to warm-dark + light-peach in dark mode via tokens. */\n peach: 'bg-accent text-accent-foreground',\n /* Inverted near-black tile, light glyph (\"never do\" promises). */\n dark: 'bg-foreground text-background',\n /* Solid brand tile. */\n brand: 'bg-primary text-primary-foreground',\n /* White tile on a brand band, terracotta glyph (numbered steps). */\n onBrand: 'bg-brand-foreground text-primary',\n /* Quiet neutral tile. */\n muted: 'bg-muted text-foreground',\n /* Crisp white (card-colored) tile with a terracotta glyph and a\n soft lift — the elevated icon chip on muted/colored cards. */\n surface: 'bg-card text-primary shadow-sm',\n },\n size: {\n sm: 'size-9 text-xs [&_svg]:size-4',\n md: 'size-11 text-sm [&_svg]:size-5',\n lg: 'size-12 text-base [&_svg]:size-6',\n xl: 'size-14 text-lg [&_svg]:size-7',\n },\n },\n defaultVariants: { tone: 'peach', size: 'md' },\n }\n);\n\nexport interface IconBadgeProps\n extends Omit<React.ComponentProps<'span'>, 'color'>,\n VariantProps<typeof iconBadgeVariants> {}\n\n/**\n * IconBadge — a rounded-square tile holding a lucide icon OR a number/short\n * label. The theme's most-reused decorative atom (feature-card icons, numbered\n * steps, the verified chip). Distinct from the text `Badge` pill: this is a\n * fixed-size square tile. Tones map to skin tokens so the same markup recolours\n * across skins and light/dark (peach ↔ warm-dark).\n *\n * <IconBadge tone=\"peach\"><Lock /></IconBadge>\n * <IconBadge tone=\"onBrand\" size=\"sm\">1</IconBadge>\n */\nexport function IconBadge({ className, tone, size, children, ...props }: IconBadgeProps) {\n return (\n <span\n data-slot=\"icon-badge\"\n className={cn(iconBadgeVariants({ tone, size }), className)}\n {...props}\n >\n {children}\n </span>\n );\n}\n\nexport { iconBadgeVariants };\n","import type { ReactNode } from 'react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface FeatureCardProps {\n /** Optional leading glyph — a lucide icon sized by IconBadge. */\n icon?: ReactNode;\n iconTone?: 'peach' | 'dark' | 'brand' | 'onBrand' | 'muted' | 'surface';\n title: ReactNode;\n children?: ReactNode;\n orientation?: 'vertical' | 'horizontal';\n align?: 'start' | 'center';\n tone?: 'default' | 'muted' | 'onBrand';\n elevation?: 'none' | 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * FeatureCard — the soft Surface tile that carries a feature: an IconBadge, a\n * title, and a line of body copy. The marketing-grid workhorse. Stack them\n * vertically in a feature grid, or go horizontal for a tighter list row.\n */\nexport function FeatureCard({\n icon,\n iconTone = 'peach',\n title,\n children,\n orientation = 'vertical',\n align = 'start',\n tone = 'default',\n elevation = 'sm',\n className,\n}: FeatureCardProps) {\n const horizontal = orientation === 'horizontal';\n const centered = !horizontal && align === 'center';\n\n return (\n <Surface\n tone={tone}\n elevation={elevation}\n pad={horizontal ? 'md' : 'lg'}\n className={cn(\n 'flex h-full',\n horizontal ? 'flex-row gap-4' : 'flex-col',\n centered && 'items-center text-center',\n className\n )}\n >\n {icon && (\n <IconBadge\n tone={iconTone}\n size=\"lg\"\n className={cn(horizontal ? 'shrink-0' : 'mb-4')}\n >\n {icon}\n </IconBadge>\n )}\n <div className={cn(horizontal && 'min-w-0')}>\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {children && (\n <p className=\"text-muted-foreground mt-1.5 text-sm leading-relaxed\">\n {children}\n </p>\n )}\n </div>\n </Surface>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface SectionProps {\n /** Background band: neutral page, recessed gray, brand fill, or a forced-dark band on a light page. */\n tone?: 'default' | 'muted' | 'brand' | 'dark';\n /** Inner width: centered container, wide max-w-screen-2xl, or full-bleed. */\n width?: 'default' | 'wide' | 'full';\n /** Diagonal texture overlay; defaults on only for tone='brand'. */\n diagonal?: boolean;\n id?: string;\n className?: string;\n innerClassName?: string;\n children: ReactNode;\n}\n\nconst TONE: Record<NonNullable<SectionProps['tone']>, string> = {\n default: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n brand: 'bg-brand text-brand-foreground',\n // `dark` activates the .dark variant locally so descendant package\n // components render their dark arm even on an otherwise light page.\n dark: 'dark bg-background text-foreground',\n};\n\nconst WIDTH: Record<NonNullable<SectionProps['width']>, string> = {\n default: 'container',\n wide: 'mx-auto w-full max-w-screen-2xl px-4 sm:px-6 lg:px-8',\n full: '',\n};\n\n/**\n * Section — the full-bleed marketing band: a tone-routed background stripe with\n * vertical rhythm and a width-capped inner. Stack these to build a landing page;\n * use tone='dark' to force a dark band on a light page. BrandBand is the\n * brand-tone shorthand.\n */\nexport function Section({\n tone = 'default',\n width = 'default',\n diagonal,\n id,\n className,\n innerClassName,\n children,\n}: SectionProps) {\n const showDiagonal = diagonal ?? tone === 'brand';\n return (\n <div\n id={id}\n className={cn('w-full', TONE[tone], showDiagonal && 'oc-diagonal', className)}\n >\n <div className={cn('py-16 sm:py-20 md:py-24', WIDTH[width], innerClassName)}>\n {children}\n </div>\n </div>\n );\n}\n\n/** BrandBand — Section pinned to the brand tone. */\nexport function BrandBand(props: SectionProps) {\n return <Section tone=\"brand\" {...props} />;\n}\n","import type { ReactNode } from 'react';\n\nimport { Check, X } from 'lucide-react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface ComparisonRow {\n label: ReactNode;\n theirs: ReactNode;\n ours: ReactNode;\n}\n\nexport interface ComparisonTableProps {\n rows: ComparisonRow[];\n columns?: { feature?: string; theirs: string; ours: string };\n className?: string;\n}\n\n/**\n * ComparisonTable — a two-column \"them vs us\" feature matrix for marketing pages.\n * the ours column is tinted (bg-accent/40) and its checks read text-primary; the\n * theirs column reads muted with X glyphs. skin-agnostic, scrolls on small screens.\n */\nexport function ComparisonTable({ rows, columns, className }: ComparisonTableProps) {\n const cols = { feature: '', theirs: 'A normal login', ours: 'OrangeCheck', ...columns };\n return (\n <div className={cn('overflow-hidden rounded-xl border', className)}>\n <div className=\"overflow-x-auto\">\n <div className=\"min-w-[32rem]\">\n <div className=\"grid grid-cols-[1.4fr_1fr_1fr]\">\n <div className=\"label-mono text-muted-foreground px-4 py-3.5 sm:px-6\">\n {cols.feature}\n </div>\n <div className=\"px-4 py-3.5 font-semibold text-foreground sm:px-6\">\n {cols.theirs}\n </div>\n <div className=\"bg-accent/60 border-border/60 border-l px-4 py-3.5 font-semibold text-primary sm:px-6\">\n {cols.ours}\n </div>\n </div>\n {rows.map((row, i) => (\n <div key={i} className=\"grid grid-cols-[1.4fr_1fr_1fr] border-t\">\n <div className=\"px-4 py-3.5 font-medium text-foreground sm:px-6\">\n {row.label}\n </div>\n <div className=\"text-muted-foreground flex items-center gap-2 px-4 py-3.5 sm:px-6\">\n <X className=\"text-muted-foreground/70 size-4\" />\n <span>{row.theirs}</span>\n </div>\n <div className=\"bg-accent/40 border-border/60 flex items-center gap-2 border-l px-4 py-3.5 text-foreground sm:px-6\">\n <Check className=\"size-4 text-primary\" />\n <span>{row.ours}</span>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\n/**\n * NumberedStep / StepList — the marketing \"how it works\" sequence: a peach\n * numbered tile, a title, and a short body, laid out in a responsive grid.\n * Use for 2–4 step walkthroughs on a landing page; pass tone='onBrand' when\n * the list sits on a terracotta band.\n */\n\nexport interface Step {\n title: ReactNode;\n children?: ReactNode;\n}\n\nexport interface NumberedStepProps {\n n: number;\n title: ReactNode;\n children?: ReactNode;\n tone?: 'default' | 'onBrand';\n card?: boolean;\n className?: string;\n}\n\nexport function NumberedStep({\n n,\n title,\n children,\n tone = 'default',\n card = false,\n className,\n}: NumberedStepProps) {\n const onBrand = tone === 'onBrand';\n const body = (\n <div className={cn(!card && className)}>\n <IconBadge tone={onBrand ? 'onBrand' : 'peach'} size=\"sm\">\n {n}\n </IconBadge>\n <div className=\"mt-4 text-lg font-semibold\">{title}</div>\n {children && (\n <div\n className={cn(\n 'mt-1.5 text-sm leading-relaxed',\n onBrand ? 'text-brand-foreground/80' : 'text-muted-foreground'\n )}\n >\n {children}\n </div>\n )}\n </div>\n );\n\n if (!card) return body;\n\n return (\n <Surface\n tone={onBrand ? 'onBrand' : 'default'}\n elevation={onBrand ? 'none' : 'sm'}\n pad=\"md\"\n className={className}\n >\n {body}\n </Surface>\n );\n}\n\nexport interface StepListProps {\n steps: Step[];\n variant?: 'bare' | 'card';\n tone?: 'default' | 'onBrand';\n columns?: 2 | 3 | 4;\n className?: string;\n}\n\nconst COLUMNS: Record<2 | 3 | 4, string> = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\n\nexport function StepList({\n steps,\n variant = 'bare',\n tone = 'default',\n columns = 3,\n className,\n}: StepListProps) {\n return (\n <div className={cn('grid gap-6 sm:grid-cols-2 sm:gap-8', COLUMNS[columns], className)}>\n {steps.map((step, index) => (\n <NumberedStep\n key={index}\n n={index + 1}\n title={step.title}\n tone={tone}\n card={variant === 'card'}\n >\n {step.children}\n </NumberedStep>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface FaqItem {\n q: ReactNode;\n a: ReactNode;\n}\n\nexport interface FaqProps {\n items: FaqItem[];\n /** Index of the item open on first render; omit for all collapsed. */\n defaultOpen?: number;\n className?: string;\n}\n\n/**\n * Faq — a plus/minus accordion list of question/answer pairs for the bottom of\n * a marketing page. single-open, collapsible. re-skins via the underlying\n * Accordion primitive.\n */\nexport function Faq({ items, defaultOpen, className }: FaqProps) {\n return (\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={defaultOpen != null ? String(defaultOpen) : undefined}\n className={cn('w-full', className)}\n >\n {items.map((item, i) => (\n <AccordionItem key={i} value={String(i)}>\n <AccordionTrigger\n icon=\"plusMinus\"\n className=\"text-foreground text-base font-semibold\"\n >\n {item.q}\n </AccordionTrigger>\n <AccordionContent className=\"text-muted-foreground leading-relaxed\">\n {item.a}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Button, Input } from '../primitives';\n\nexport interface EmailCaptureProps {\n /** Native form action (e.g. a serverless handler or list endpoint). */\n action?: string;\n /** Native form method. */\n method?: string;\n /** Client-side submit handler — preventDefault yourself if intercepting. */\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n /** Input name attribute. */\n name?: string;\n placeholder?: string;\n /** Submit button label. */\n cta?: ReactNode;\n /** Small reassurance line under the row (e.g. \"no spam, unsubscribe anytime\"). */\n note?: ReactNode;\n /** `onBrand` for placement on a terracotta/dark band. */\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\n/**\n * EmailCapture — the inline waitlist / newsletter row: a pill email field plus a\n * pill submit, with an optional fine-print note. drop it in a hero or footer\n * band; `tone='onBrand'` flips the field translucent + button white for dark\n * brand bands.\n */\nexport function EmailCapture({\n action,\n method,\n onSubmit,\n name = 'email',\n placeholder = 'you@email.com',\n cta = 'Join the waitlist',\n note,\n tone = 'default',\n className,\n}: EmailCaptureProps) {\n const onBrand = tone === 'onBrand';\n return (\n <form action={action} method={method} onSubmit={onSubmit} className={cn(className)}>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <Input\n type=\"email\"\n name={name}\n required\n placeholder={placeholder}\n className={cn(\n 'rounded-full text-base md:text-sm',\n onBrand &&\n '[background:color-mix(in_oklch,white_18%,transparent)] placeholder:text-primary-foreground/60 border-transparent text-primary-foreground'\n )}\n />\n <Button type=\"submit\" variant={onBrand ? 'onBrand' : 'default'} className=\"rounded-full\">\n {cta}\n </Button>\n </div>\n {note && (\n <p\n className={cn(\n 'mt-3 text-sm',\n onBrand ? 'text-primary-foreground/70' : 'text-muted-foreground'\n )}\n >\n {note}\n </p>\n )}\n </form>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Check } from 'lucide-react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface CheckListProps {\n /** Each item: a check glyph + this label. */\n items: ReactNode[];\n orientation?: 'horizontal' | 'vertical';\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\n/**\n * CheckList — a compact run of checkmarked points. use horizontal under a hero\n * or CTA for an inline \"what you get\" row; vertical for a small feature stack.\n * `tone=\"onBrand\"` when it sits on a brand/dark band.\n */\nexport function CheckList({\n items,\n orientation = 'horizontal',\n tone = 'default',\n className,\n}: CheckListProps) {\n const glyph = tone === 'onBrand' ? 'text-brand-foreground' : 'text-primary';\n const label = tone === 'onBrand' ? 'text-brand-foreground/90' : 'text-foreground';\n\n return (\n <ul\n className={cn(\n orientation === 'horizontal'\n ? 'flex flex-wrap gap-x-6 gap-y-2 text-sm'\n : 'flex flex-col gap-2 text-sm',\n className\n )}\n >\n {items.map((item, i) => (\n <li key={i} className={cn('inline-flex items-center gap-2', label)}>\n <Check className={cn('size-4 shrink-0', glyph)} />\n {item}\n </li>\n ))}\n </ul>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * AccentNote — a left-bar aside for a single emphasized line of copy. Use for a\n * caveat, footnote, or pull-quote beside body text. AccentList is the stepped\n * variant: a vertical stack of titled items with one \"active\" entry expanded.\n * Both are skin-agnostic — token colors only — and re-skin per skin + mode.\n */\n\nexport interface AccentNoteProps {\n /** Optional bold lead phrase rendered inline before the body. */\n lead?: ReactNode;\n children: ReactNode;\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport function AccentNote({ lead, children, tone = 'default', className }: AccentNoteProps) {\n const onBrand = tone === 'onBrand';\n return (\n <div\n className={cn(\n 'border-l-2 pl-4 text-sm leading-relaxed',\n onBrand\n ? 'border-primary-foreground/60 text-primary-foreground/80'\n : 'border-primary text-muted-foreground',\n className,\n )}\n >\n {lead && (\n <strong\n className={cn(\n 'mr-1.5 font-semibold',\n onBrand ? 'text-primary-foreground' : 'text-foreground',\n )}\n >\n {lead}\n </strong>\n )}\n {children}\n </div>\n );\n}\n\nexport interface AccentListItem {\n title: ReactNode;\n children?: ReactNode;\n active?: boolean;\n}\n\nexport interface AccentListProps {\n items: AccentListItem[];\n className?: string;\n}\n\nexport function AccentList({ items, className }: AccentListProps) {\n return (\n <div className={cn('flex flex-col', className)}>\n {items.map((item, i) => (\n <div\n key={i}\n className={cn('border-l-2 py-2 pl-5', item.active ? 'border-primary' : 'border-border')}\n >\n <div\n className={cn(\n 'font-semibold',\n item.active ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n {item.title}\n </div>\n {item.active && item.children && (\n <div className=\"text-muted-foreground mt-1 text-sm leading-relaxed\">\n {item.children}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Check } from 'lucide-react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface VerifiedChipProps {\n /** Leading glyph; defaults to a lucide Check. */\n icon?: ReactNode;\n /** Tone of the icon tile. */\n iconTone?: 'peach' | 'dark' | 'brand' | 'onBrand' | 'muted';\n /** Short trust phrase, e.g. \"verified on bitcoin\". */\n label: ReactNode;\n className?: string;\n}\n\n/**\n * VerifiedChip — a small floating trust chip (icon tile + short label) on a soft\n * elevated pill. drop it over a hero or card edge to mark something as verified.\n */\nexport function VerifiedChip({ icon, iconTone = 'peach', label, className }: VerifiedChipProps) {\n return (\n <Surface\n elevation=\"lg\"\n pad=\"none\"\n className={cn('inline-flex items-center gap-3 rounded-full px-3 py-2', className)}\n >\n <IconBadge tone={iconTone} size=\"sm\">\n {icon ?? <Check />}\n </IconBadge>\n <span className=\"pr-2 text-sm font-semibold text-foreground\">{label}</span>\n </Surface>\n );\n}\n"]}
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { AppearanceControls, DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_GLYPHS, OC_GLYPH_CANVAS, OC_MOTION_COOKIE, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcAppearanceMenuProps, OcAurora, OcAuroraProps, OcGlyphSlug, OcMotion, OcSceneRGB, OcSceneTokens, OcSigil, OcSigilProps, OcTheme, OcThemeBridge, OcThemeId, OcThemePicker, OcThemePickerProps, OcThemeProvider, OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, normalizeHue, readOcSceneTokens, resolveTheme, subscribeOcTheme, useOcMotion, useOcSkin } from './tokens.mjs';
2
2
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithActionProps, AlertWithCountdown, AlertWithCountdownProps, Badge, Bar, BarProps, BitcoinAddress, BitcoinAddressProps, Button, Card, CardProps, Checkbox, ConfirmHost, ConfirmOptions, CopyButton, CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, IconBadge, IconBadgeProps, Input, Label, Modal, ModalProps, Pagination, PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, PromptOptions, QrCode, QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SkeletonProps, Sparkline, SparklineProps, StatBlock, StatBlockProps, StatusPill, StatusPillProps, StatusPillSpec, StatusPillVariant, StatusTone, Surface, SurfaceProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Tooltip, TooltipProps, Working, WorkingPanel, WorkingProps, badgeVariants, buttonVariants, confirm, iconBadgeVariants, makeStatusPill, prompt, surfaceVariants } from './primitives.mjs';
3
- export { AccentList, AccentListItem, AccentListProps, AccentNote, AccentNoteProps, BrandBand, Callout, CalloutProps, CalloutTone, CheckList, CheckListProps, ComparisonRow, ComparisonTable, ComparisonTableProps, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmailCapture, EmailCaptureProps, EmptyState, EmptyStateCta, EmptyStateProps, Faq, FaqItem, FaqProps, FeatureCard, FeatureCardProps, HelpHint, HelpHintProps, MarketingHeading, MarketingHeadingProps, NumberedStep, NumberedStepProps, Panel, PanelProps, Section, SectionHeader, SectionHeaderProps, SectionProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile, Step, StepList, StepListProps, TwoToneHeading, TwoToneHeadingProps, VerifiedChip, VerifiedChipProps } from './composites.mjs';
3
+ export { AccentList, AccentListItem, AccentListProps, AccentNote, AccentNoteProps, BrandBand, Callout, CalloutProps, CalloutTone, CheckList, CheckListProps, ComparisonRow, ComparisonTable, ComparisonTableProps, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmailCapture, EmailCaptureProps, EmptyState, EmptyStateCta, EmptyStateProps, Faq, FaqItem, FaqProps, FeatureCard, FeatureCardProps, HelpHint, HelpHintProps, MarketingHeading, MarketingHeadingProps, NumberedStep, NumberedStepProps, OcErrorPage, OcErrorPageProps, OcErrorVariant, Panel, PanelProps, Section, SectionHeader, SectionHeaderProps, SectionProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile, Step, StepList, StepListProps, TwoToneHeading, TwoToneHeadingProps, VerifiedChip, VerifiedChipProps } from './composites.mjs';
4
4
  export { AppShell, AppShellProps, EcosystemSlug, EcosystemSwitcher, EcosystemSwitcherProps, FAMILY_PROPERTIES, FamilyCategory, FamilyProperty, FooterColumn, FooterLink, LayoutSubHeader, LayoutSubHeaderProps, LayoutSubHeaderTag, OcAccountMenu, OcAccountMenuBuildInfo, OcAccountMenuItem, OcAccountMenuProps, OcAccountMenuSession, OcAccountMenuView, OcAccountMenuViewProps, OcAppBar, OcAppBarProps, OcDashboardHub, OcDashboardHubProps, OcDashboardShell, OcDashboardShellProps, OcDashboardTool, OcFamilyFooter, OcFamilyFooterBrand, OcFamilyFooterProps, OcLogoDropdown, OcLogoDropdownProps, OcPrimaryNav, OcPrimaryNavLink, OcPrimaryNavProps, SITE_STATE_LABEL, SiteState, findFamilyProperty } from './chrome.mjs';
5
5
  export { ExplorerNetwork, ExplorerTarget, REFERENCE_BTC_USD, SpotPrice, UseSpotPriceOptions, asOf, explorerUrl, formatSats, formatSatsCompact, priceBoth, relativeTime, satsToUsd, shortenAddress, usdToSats, useSpotPrice } from './format.mjs';
6
6
  import 'clsx';
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { AppearanceControls, DEFAULT_OC_THEME, OC_DEFAULT_ACCENT, OC_GLYPHS, OC_GLYPH_CANVAS, OC_MOTION_COOKIE, OC_SKIN_COOKIE, OC_THEMES, OcAppearanceMenu, OcAppearanceMenuProps, OcAurora, OcAuroraProps, OcGlyphSlug, OcMotion, OcSceneRGB, OcSceneTokens, OcSigil, OcSigilProps, OcTheme, OcThemeBridge, OcThemeId, OcThemePicker, OcThemePickerProps, OcThemeProvider, OcThemeProviderProps, accentFor, cn, getOcThemeInitScript, isKnownTheme, normalizeHue, readOcSceneTokens, resolveTheme, subscribeOcTheme, useOcMotion, useOcSkin } from './tokens.js';
2
2
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AlertWithAction, AlertWithActionProps, AlertWithCountdown, AlertWithCountdownProps, Badge, Bar, BarProps, BitcoinAddress, BitcoinAddressProps, Button, Card, CardProps, Checkbox, ConfirmHost, ConfirmOptions, CopyButton, CopyButtonProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, ErrorBoundary, IconBadge, IconBadgeProps, Input, Label, Modal, ModalProps, Pagination, PaginationProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PromptHost, PromptOptions, QrCode, QrCodeProps, RadioGroup, RadioGroupItem, SatsAmount, SatsAmountProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SkeletonProps, Sparkline, SparklineProps, StatBlock, StatBlockProps, StatusPill, StatusPillProps, StatusPillSpec, StatusPillVariant, StatusTone, Surface, SurfaceProps, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, ThemeToggleLink, Toaster, Tooltip, TooltipProps, Working, WorkingPanel, WorkingProps, badgeVariants, buttonVariants, confirm, iconBadgeVariants, makeStatusPill, prompt, surfaceVariants } from './primitives.js';
3
- export { AccentList, AccentListItem, AccentListProps, AccentNote, AccentNoteProps, BrandBand, Callout, CalloutProps, CalloutTone, CheckList, CheckListProps, ComparisonRow, ComparisonTable, ComparisonTableProps, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmailCapture, EmailCaptureProps, EmptyState, EmptyStateCta, EmptyStateProps, Faq, FaqItem, FaqProps, FeatureCard, FeatureCardProps, HelpHint, HelpHintProps, MarketingHeading, MarketingHeadingProps, NumberedStep, NumberedStepProps, Panel, PanelProps, Section, SectionHeader, SectionHeaderProps, SectionProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile, Step, StepList, StepListProps, TwoToneHeading, TwoToneHeadingProps, VerifiedChip, VerifiedChipProps } from './composites.js';
3
+ export { AccentList, AccentListItem, AccentListProps, AccentNote, AccentNoteProps, BrandBand, Callout, CalloutProps, CalloutTone, CheckList, CheckListProps, ComparisonRow, ComparisonTable, ComparisonTableProps, DataRow, DataRowProps, DefinitionItem, DefinitionList, DefinitionListProps, EmailCapture, EmailCaptureProps, EmptyState, EmptyStateCta, EmptyStateProps, Faq, FaqItem, FaqProps, FeatureCard, FeatureCardProps, HelpHint, HelpHintProps, MarketingHeading, MarketingHeadingProps, NumberedStep, NumberedStepProps, OcErrorPage, OcErrorPageProps, OcErrorVariant, Panel, PanelProps, Section, SectionHeader, SectionHeaderProps, SectionProps, StatCard, StatCardProps, StatGrid, StatGridProps, StatItem, StatTile, Step, StepList, StepListProps, TwoToneHeading, TwoToneHeadingProps, VerifiedChip, VerifiedChipProps } from './composites.js';
4
4
  export { AppShell, AppShellProps, EcosystemSlug, EcosystemSwitcher, EcosystemSwitcherProps, FAMILY_PROPERTIES, FamilyCategory, FamilyProperty, FooterColumn, FooterLink, LayoutSubHeader, LayoutSubHeaderProps, LayoutSubHeaderTag, OcAccountMenu, OcAccountMenuBuildInfo, OcAccountMenuItem, OcAccountMenuProps, OcAccountMenuSession, OcAccountMenuView, OcAccountMenuViewProps, OcAppBar, OcAppBarProps, OcDashboardHub, OcDashboardHubProps, OcDashboardShell, OcDashboardShellProps, OcDashboardTool, OcFamilyFooter, OcFamilyFooterBrand, OcFamilyFooterProps, OcLogoDropdown, OcLogoDropdownProps, OcPrimaryNav, OcPrimaryNavLink, OcPrimaryNavProps, SITE_STATE_LABEL, SiteState, findFamilyProperty } from './chrome.js';
5
5
  export { ExplorerNetwork, ExplorerTarget, REFERENCE_BTC_USD, SpotPrice, UseSpotPriceOptions, asOf, explorerUrl, formatSats, formatSatsCompact, priceBoth, relativeTime, satsToUsd, shortenAddress, usdToSats, useSpotPrice } from './format.js';
6
6
  import 'clsx';