@orangecheck/app-design 0.5.12 → 0.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tokens/index.ts","../src/lib/cn.ts","../src/primitives/feedback.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/card.tsx","../src/primitives/form.tsx","../src/primitives/overlay.tsx","../src/primitives/scroll-fade.tsx","../src/primitives/tabs.tsx","../src/brand/mark.tsx","../src/brand/portrait-tone.ts","../src/brand/halftone-canvas.tsx","../src/brand/sphere.tsx","../src/brand/iso-check.tsx","../src/brand/crowd.tsx","../src/components/typography.tsx","../src/components/motion.tsx","../src/components/section.tsx","../src/components/hero.tsx","../src/components/steps.tsx","../src/lib/shell-context.ts","../src/components/data.tsx","../src/components/code-card.tsx","../src/components/split-bar.tsx","../src/components/truth-table.tsx","../src/components/money.tsx","../src/components/frames.tsx","../src/components/monogram.tsx","../src/components/error-boundary.tsx","../src/chrome/site.tsx","../src/chrome/app-shell.tsx"],"names":["extendTailwindMerge","clsx","jsxs","jsx","useState","useEffect","forwardRef","Separator","SeparatorPrimitive","SonnerToaster","cva","Button","Slot","Fragment","Card","Input","Textarea","Label","LabelPrimitive","useId","isValidElement","cloneElement","SelectPrimitive","SelectTrigger","ChevronDown","SelectContent","SelectItem","Check","Checkbox","CheckboxPrimitive","Switch","SwitchPrimitive","RadioGroup","RadioGroupPrimitive","RadioGroupItem","DialogPrimitive","DialogContent","X","DialogTitle","DialogDescription","SheetContent","PopoverPrimitive","PopoverContent","TooltipPrimitive","TooltipContent","DropdownMenuPrimitive","DropdownMenuContent","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","useRef","useCallback","createContext","Tabs","TabsPrimitive","TabsList","useContext","TabsTrigger","TabsContent","createElement","Children","Copy","Component","Link","Menu","useMemo","ChevronRight","useTheme","Icon","Sun","Moon","SunMoon"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * The ochk.app palette as data, for places CSS variables cannot reach: OG\n * images, canvas, charts, email. Must match styles/tokens.css; the contrast\n * check reads both.\n */\nexport const APP_ATTRIBUTE = 'data-oc-app';\nexport const APP_ID = 'ochk';\n\nexport const appColors = {\n light: {\n background: '#FAFAFA',\n foreground: '#0A0A0A',\n card: '#FFFFFF',\n muted: '#F2F2F2',\n mutedForeground: '#54585E',\n subtleForeground: '#686C72',\n border: '#ECECEC',\n hairlineStrong: '#DADADA',\n accentDisplay: '#F55819',\n accentInk: '#C73F09',\n },\n dark: {\n background: '#0A0A0A',\n foreground: '#FAFAFA',\n card: '#161616',\n muted: '#1E1E1E',\n mutedForeground: '#A3A6AA',\n subtleForeground: '#8B8E93',\n border: '#262626',\n hairlineStrong: '#333333',\n accentDisplay: '#F66D36',\n accentInk: '#F0835A',\n },\n brand: {\n orange: '#F66D36',\n orangeLight: '#FB933C',\n orangeDeep: '#EA580B',\n peach: '#FED8AB',\n ink: '#0A0A0A',\n inkCard: '#1E1E1E',\n },\n} as const;\n\nexport const appFonts = {\n sans: \"'OCA Inter', 'OCA Inter Fallback', ui-sans-serif, system-ui, sans-serif\",\n mono: \"'OCA JetBrains Mono', 'OCA JetBrains Mono Fallback', ui-monospace, monospace\",\n} as const;\n","import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n// tailwind-merge would treat `oca-display-1` and `text-foreground` as the same\n// group and drop one; teach it the package's own type utilities.\nconst merge = extendTailwindMerge<'oca-type'>({\n extend: {\n classGroups: {\n 'oca-type': [\n 'oca-display-1',\n 'oca-display-2',\n 'oca-display-3',\n 'oca-title',\n 'oca-title-sm',\n 'oca-eyebrow',\n 'oca-lead',\n 'oca-body',\n 'oca-numeral',\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]): string {\n return merge(clsx(inputs));\n}\n","import * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner';\n\nimport { cn } from '../lib/cn';\n\nexport function Spinner({ className, label }: { className?: string; label?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn('size-4 animate-spin', className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.2\" strokeWidth=\"2.5\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** A placeholder bar, visible on the canvas and on a card in both modes. */\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-ui=\"skeleton\"\n className={cn('animate-pulse rounded-lg bg-[var(--oca-skeleton)]', className)}\n {...props}\n />\n );\n}\n\n/**\n * True once `active` has stayed true for `ms`. A loading state that never\n * ends reads as a broken page; pass this to show a way out instead.\n */\nexport function useTimedOut(active: boolean, ms = 12_000): boolean {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n if (!active) {\n setTimedOut(false);\n return;\n }\n const t = setTimeout(() => setTimedOut(true), ms);\n return () => clearTimeout(t);\n }, [active, ms]);\n return timedOut;\n}\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = 'horizontal', decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className\n )}\n {...props}\n />\n );\n});\n\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border bg-card px-1.5 font-mono text-[11px] text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Live-region status dot: a calm pulse for \"running\", solid otherwise. */\nexport function StatusDot({\n tone = 'neutral',\n pulse = false,\n className,\n}: {\n tone?: 'neutral' | 'success' | 'warning' | 'danger' | 'brand';\n pulse?: boolean;\n className?: string;\n}) {\n const color = {\n neutral: 'bg-oca-subtle',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n brand: 'bg-brand',\n }[tone];\n return (\n <span\n aria-hidden\n className={cn('inline-block size-2 shrink-0 rounded-full', color, pulse && 'oca-animate-pulse-dot', className)}\n />\n );\n}\n\n/** Toasts in the system's type and surfaces. Mount once. */\nexport function Toaster(props: ToasterProps) {\n return (\n <SonnerToaster\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast: 'oca-toast rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg font-sans',\n title: 'text-[0.9375rem] font-medium',\n description: 'text-sm text-muted-foreground',\n actionButton: 'rounded-full bg-primary text-primary-foreground',\n cancelButton: 'rounded-full bg-muted text-foreground',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from 'sonner';\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Spinner } from './feedback';\n\n/*\n * Pills, as the deck draws them: the black filled pill leads, the white\n * outlined pill follows. `brand` is for the orange band only; `onInk` and\n * `onInkOutline` are the same pair inverted for dark bands.\n */\nexport const buttonVariants = cva(\n [\n 'inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-150',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'active:translate-y-px disabled:pointer-events-none',\n // Disabled is one look for every variant: a quiet grey pill, never a\n // faded black or orange slab that reads as broken.\n 'disabled:border disabled:border-border disabled:bg-muted disabled:text-oca-subtle disabled:shadow-none',\n '[&_svg]:pointer-events-none [&_svg]:size-[1.1em] [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85',\n secondary:\n 'border border-border bg-secondary text-secondary-foreground hover:border-oca-hairline-strong hover:bg-accent',\n brand: 'bg-brand text-brand-foreground hover:bg-oca-orange-deep',\n ghost: 'text-foreground hover:bg-accent',\n danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'h-auto rounded-none px-0 text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground',\n onInk: 'bg-white text-oca-ink hover:bg-white/90',\n onInkOutline: 'border border-white/20 text-white hover:bg-white/10',\n },\n size: {\n sm: 'h-9 px-4 text-sm',\n md: 'h-11 px-5 text-[0.9375rem]',\n lg: 'h-14 px-7 text-[1.0625rem]',\n icon: 'size-10',\n 'icon-sm': 'size-8',\n },\n },\n compoundVariants: [{ variant: 'link', className: 'h-auto px-0' }],\n defaultVariants: { variant: 'primary', size: 'md' },\n }\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Render the child element (a Link, an <a>) with the button's styles. */\n asChild?: boolean;\n /** Shows a spinner and disables the button. */\n loading?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { className, variant, size, asChild = false, loading = false, disabled, children, type, ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n data-ui=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={asChild ? undefined : disabled || loading}\n aria-busy={loading || undefined}\n type={asChild ? undefined : (type ?? 'button')}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner className=\"size-[1.1em]\" /> : null}\n {children}\n </>\n )}\n </Comp>\n );\n});\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The small white pill from the deck (\"in testing\", \"on the path\"). Three tones\n * carry meaning: neutral, the orange accent for attention, and red for a real\n * error. Text stays on the token that clears 4.5:1 against its tint.\n */\nconst GOOD_DOT =\n \"border-border bg-card text-foreground before:size-1.5 before:shrink-0 before:rounded-full before:bg-success before:content-['']\";\n\nexport const badgeVariants = cva(\n 'inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2.5 text-[0.8125rem] font-medium leading-none',\n {\n variants: {\n tone: {\n neutral: 'border-border bg-card text-foreground',\n muted: 'border-transparent bg-muted text-muted-foreground',\n brand: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_12%,var(--card))] text-oca-accent-ink',\n danger: 'border-transparent bg-[color-mix(in_oklab,var(--destructive)_12%,var(--card))] text-destructive',\n // A good state is a neutral pill with a green dot, not a green pill.\n success: GOOD_DOT,\n // Aliases kept so older call sites keep compiling: attention is\n // the brand accent, information is neutral.\n warning: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_12%,var(--card))] text-oca-accent-ink',\n info: 'border-border bg-card text-foreground',\n // Inverted in dark mode, where ink would sit on a card of nearly its own colour.\n ink: 'border-transparent bg-oca-ink text-oca-ink-foreground dark:bg-foreground dark:text-background',\n onInk: 'border-white/15 bg-white/5 text-white/90',\n },\n },\n defaultVariants: { tone: 'neutral' },\n }\n);\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {}\n\nexport function Badge({ className, tone, ...props }: BadgeProps) {\n return <span data-ui=\"badge\" className={cn(badgeVariants({ tone }), className)} {...props} />;\n}\n\n/** A pill with a live dot: where something stands right now (\"In testing · payouts start after\"). */\nexport function StatusPill({\n className,\n children,\n pulse = true,\n ...props\n}: HTMLAttributes<HTMLSpanElement> & { pulse?: boolean }) {\n return (\n <span\n data-ui=\"status-pill\"\n className={cn(\n 'inline-flex min-h-8 w-fit items-center gap-2.5 rounded-full border border-border bg-card py-1 pl-3 pr-3.5 text-[0.875rem] leading-snug text-foreground',\n className\n )}\n {...props}\n >\n <span aria-hidden className=\"relative flex size-2 shrink-0\">\n {pulse ? (\n <span className=\"absolute inset-0 rounded-full bg-oca-orange opacity-50 motion-safe:animate-ping\" />\n ) : null}\n <span className=\"relative size-2 rounded-full bg-oca-orange\" />\n </span>\n {children}\n </span>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * White on the canvas with one hairline and a generous radius; no shadow. The\n * `ink` card is the deck's #1E1E1E panel, dark in both modes.\n */\nexport const cardVariants = cva('relative rounded-[1.25rem] border', {\n variants: {\n tone: {\n default: 'border-border bg-card text-card-foreground',\n sunken: 'border-transparent bg-muted text-foreground',\n ink: 'border-oca-ink-line bg-oca-ink-card text-oca-ink-foreground',\n outline: 'border-border bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-5',\n md: 'p-6 md:p-8',\n lg: 'p-8 md:p-10',\n },\n interactive: {\n true: 'transition-colors hover:border-oca-hairline-strong focus-within:border-oca-hairline-strong',\n false: '',\n },\n },\n defaultVariants: { tone: 'default', padding: 'md', interactive: false },\n});\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, tone, padding, interactive, ...props },\n ref\n) {\n return (\n <div ref={ref} data-ui=\"card\" className={cn(cardVariants({ tone, padding, interactive }), className)} {...props} />\n );\n});\n\nexport function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\n/** The small \"01\" above a card title. */\nexport function CardNumeral({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('oca-numeral block', className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={cn('oca-title flex flex-wrap items-center gap-2.5', className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-body', className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-5', className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-6 flex flex-wrap items-center gap-3', className)} {...props} />;\n}\n","import * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport { Check, ChevronDown } from 'lucide-react';\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n useId,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type InputHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from 'react';\n\nimport { cn } from '../lib/cn';\n\n/* Fields: 44px tall, a hairline that darkens on focus with a soft orange halo,\n 16px text on phones so iOS never zooms. */\nconst fieldBase = [\n 'w-full rounded-xl border border-input bg-card text-foreground placeholder:text-oca-subtle',\n 'text-base md:text-[0.9375rem] outline-none transition-[border-color,box-shadow]',\n 'focus:border-foreground/35 focus:ring-4 focus:ring-[color-mix(in_oklab,var(--oca-orange)_16%,transparent)]',\n 'disabled:cursor-not-allowed disabled:opacity-55',\n 'aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-[color-mix(in_oklab,var(--destructive)_14%,transparent)]',\n];\n\nexport const Input = forwardRef<HTMLInputElement, InputHTMLAttributes<HTMLInputElement>>(function Input(\n { className, type = 'text', ...props },\n ref\n) {\n return <input ref={ref} type={type} data-ui=\"input\" className={cn(fieldBase, 'h-11 px-3.5', className)} {...props} />;\n});\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaHTMLAttributes<HTMLTextAreaElement>>(\n function Textarea({ className, ...props }, ref) {\n return (\n <textarea\n ref={ref}\n data-ui=\"textarea\"\n className={cn(fieldBase, 'min-h-28 px-3.5 py-3 leading-relaxed', className)}\n {...props}\n />\n );\n }\n);\n\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(function Label({ className, ...props }, ref) {\n return (\n <LabelPrimitive.Root\n ref={ref}\n className={cn('text-sm font-medium leading-none text-foreground', className)}\n {...props}\n />\n );\n});\n\nexport interface FieldProps {\n label: ReactNode;\n /** Help under the control. It sits below, so paired fields stay level. */\n hint?: ReactNode;\n /** Mark the field optional beside its label, rather than in a hint. */\n optional?: boolean;\n /** Shown in place of nothing; marks the control invalid. */\n error?: ReactNode;\n /** The control. Receives id, aria-describedby and aria-invalid. */\n children: ReactElement;\n className?: string;\n /** Render the label visually hidden (it is still the accessible name). */\n hideLabel?: boolean;\n /** A button that acts on the control, set beside it (below it on a phone). */\n action?: ReactNode;\n}\n\n/** Label, hint, control and error, wired together by id. */\nexport function Field({ label, hint, optional, error, children, className, hideLabel, action }: FieldProps) {\n const id = useId();\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined;\n const control = isValidElement(children)\n ? cloneElement(children as ReactElement<Record<string, unknown>>, {\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': error ? true : undefined,\n })\n : children;\n const hintNode = hint ? (\n <p id={hintId} className=\"text-[0.8125rem] leading-snug text-muted-foreground\">\n {hint}\n </p>\n ) : null;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <Label htmlFor={id} className={hideLabel ? 'sr-only' : 'flex items-baseline gap-2'}>\n {label}\n {optional ? <span className=\"text-[0.8125rem] font-normal text-muted-foreground\">Optional</span> : null}\n </Label>\n {action ? (\n // The hint belongs to the input, so it sits under the input, not under the button.\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-2 [&>input]:w-full\">\n {control}\n {hintNode}\n </div>\n <div className=\"shrink-0\">{action}</div>\n </div>\n ) : (\n <>\n {control}\n {hintNode}\n </>\n )}\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] leading-snug text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/* ── Select ───────────────────────────────────────────────────────────── */\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectGroup = SelectPrimitive.Group;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(function SelectTrigger({ className, children, ...props }, ref) {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(fieldBase, 'flex h-11 items-center justify-between gap-2 px-3.5 text-left', className)}\n {...props}\n >\n <span className=\"truncate\">{children}</span>\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"size-4 shrink-0 text-muted-foreground\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(function SelectContent({ className, children, position = 'popper', ...props }, ref) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={6}\n className={cn(\n 'oca-animate-fade z-50 max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[var(--radix-select-trigger-width)] overflow-hidden rounded-xl border border-border bg-popover p-1 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n >\n <SelectPrimitive.Viewport>{children}</SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n});\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(function SelectItem({ className, children, ...props }, ref) {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex h-10 cursor-default select-none items-center rounded-lg pl-3 pr-9 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"absolute right-3\">\n <Check className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n});\n\n/* ── Checkbox, Switch, Radio ──────────────────────────────────────────── */\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(function Checkbox({ className, ...props }, ref) {\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex size-5 shrink-0 items-center justify-center rounded-[6px] border border-input bg-card',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator>\n <Check className=\"size-3.5\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n});\n\nexport const Switch = forwardRef<\n ElementRef<typeof SwitchPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\n>(function Switch({ className, ...props }, ref) {\n return (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex h-6 w-11 shrink-0 items-center rounded-full border border-transparent bg-input p-0.5',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:bg-brand disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"pointer-events-none block size-5 rounded-full bg-white shadow-sm transition-transform data-[state=checked]:translate-x-5\" />\n </SwitchPrimitive.Root>\n );\n});\n\nexport const RadioGroup = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Root>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(function RadioGroup({ className, ...props }, ref) {\n return <RadioGroupPrimitive.Root ref={ref} className={cn('grid gap-3', className)} {...props} />;\n});\n\nexport const RadioGroupItem = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Item>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(function RadioGroupItem({ className, ...props }, ref) {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n 'inline-flex size-5 shrink-0 items-center justify-center rounded-full border border-input bg-card',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:border-primary disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"block size-2.5 rounded-full bg-primary\" />\n </RadioGroupPrimitive.Item>\n );\n});\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { X } from 'lucide-react';\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/* ── Dialog ───────────────────────────────────────────────────────────── */\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nconst overlayClass =\n 'oca-animate-fade fixed inset-0 z-50 bg-[rgb(10_10_10/0.38)] backdrop-blur-[2px] data-[state=closed]:opacity-0';\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { hideClose?: boolean }\n>(function DialogContent({ className, children, hideClose, ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-rise fixed left-1/2 top-1/2 z-50 w-[min(92vw,34rem)] -translate-x-1/2 -translate-y-1/2',\n 'max-h-[88vh] overflow-y-auto rounded-[1.5rem] border border-border bg-popover p-6 text-popover-foreground shadow-xl md:p-8',\n 'outline-none',\n className\n )}\n {...props}\n >\n {children}\n {hideClose ? null : (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mb-5 flex flex-col gap-2 pr-8', className)} {...props} />;\n}\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-7 flex flex-col-reverse gap-3 sm:flex-row sm:justify-end', className)} {...props} />;\n}\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-[1.5rem] font-normal leading-tight tracking-[-0.02em]', className)}\n {...props}\n />\n );\n});\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return <DialogPrimitive.Description ref={ref} className={cn('oca-body', className)} {...props} />;\n});\n\n/* ── Sheet: a dialog from an edge ────────────────────────────────────── */\n\nexport const Sheet = DialogPrimitive.Root;\nexport const SheetTrigger = DialogPrimitive.Trigger;\nexport const SheetClose = DialogPrimitive.Close;\nexport const SheetTitle = DialogTitle;\nexport const SheetDescription = DialogDescription;\n\nconst sheetSide = {\n right: 'inset-y-0 right-0 h-full w-[min(88vw,24rem)] border-l',\n left: 'inset-y-0 left-0 h-full w-[min(88vw,24rem)] border-r',\n bottom: 'inset-x-0 bottom-0 max-h-[88vh] rounded-t-[1.5rem] border-t',\n} as const;\n\nexport const SheetContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { side?: keyof typeof sheetSide }\n>(function SheetContent({ className, children, side = 'right', ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-fade fixed z-50 flex flex-col gap-4 overflow-y-auto border-border bg-popover p-6 text-popover-foreground shadow-xl outline-none',\n sheetSide[side],\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\n/* ── Popover ──────────────────────────────────────────────────────────── */\n\nexport const Popover = PopoverPrimitive.Root;\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport const PopoverContent = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(function PopoverContent({ className, align = 'center', sideOffset = 8, ...props }, ref) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 w-72 rounded-2xl border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n});\n\n/* ── Tooltip: ink, small, quick ───────────────────────────────────────── */\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(function TooltipContent({ className, sideOffset = 6, ...props }, ref) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 max-w-xs rounded-lg bg-oca-ink px-2.5 py-1.5 text-[0.8125rem] leading-snug text-oca-ink-foreground',\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n );\n});\n\n/* ── Menu ─────────────────────────────────────────────────────────────── */\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, sideOffset = 8, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 min-w-56 overflow-hidden rounded-2xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { destructive?: boolean }\n>(function DropdownMenuItem({ className, destructive, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'flex h-10 cursor-default select-none items-center gap-2.5 rounded-xl px-3 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-muted-foreground',\n destructive && 'text-destructive [&_svg]:text-destructive',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(function DropdownMenuLabel({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-3 pb-1.5 pt-2 text-[0.8125rem] text-muted-foreground', className)}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return <DropdownMenuPrimitive.Separator ref={ref} className={cn('my-1.5 h-px bg-border', className)} {...props} />;\n});\n","import { useCallback, useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A horizontal scroller that says when there is more. Content that is wider\n * than its box scrolls instead of being clipped, and a soft edge appears on\n * whichever side hides something. Tables, code and tab bars all use it.\n */\nexport interface ScrollFadeProps extends HTMLAttributes<HTMLDivElement> {\n /** The colour under the scroller, as a CSS value; the edge fades to it. */\n fade?: string;\n /** Classes for the scrolling element itself. */\n innerClassName?: string;\n}\n\nexport function ScrollFade({ fade = 'var(--card)', className, innerClassName, children, ...props }: ScrollFadeProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [edges, setEdges] = useState({ left: false, right: false });\n const measure = useCallback(() => {\n const el = ref.current;\n if (!el) return;\n const left = el.scrollLeft > 1;\n const right = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n setEdges((e) => (e.left === left && e.right === right ? e : { left, right }));\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n measure();\n // Without ResizeObserver (old engines, jsdom) the edges still follow scrolling.\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n if (el.firstElementChild) ro.observe(el.firstElementChild);\n return () => ro.disconnect();\n }, [measure]);\n return (\n <div className={cn('relative min-w-0', className)} {...props}>\n <div\n ref={ref}\n onScroll={measure}\n // While it hides something, a keyboard can reach it to scroll.\n tabIndex={edges.left || edges.right ? 0 : undefined}\n className={cn(\n 'overflow-x-auto overscroll-x-contain rounded-[inherit] outline-none focus-visible:ring-2 focus-visible:ring-ring',\n innerClassName\n )}\n >\n {children}\n </div>\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 left-0 w-8 transition-opacity duration-150',\n edges.left ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to right, ${fade}, transparent)` }}\n />\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 right-0 w-10 transition-opacity duration-150',\n edges.right ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to left, ${fade}, transparent)` }}\n />\n </div>\n );\n}\n","import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { createContext, forwardRef, useContext, type ComponentPropsWithoutRef, type ElementRef } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from './scroll-fade';\n\n/*\n * Two looks for one behaviour: `pill` is a segmented control for switching a\n * view in place; `line` is page-level navigation between sections.\n */\ntype TabsLook = 'pill' | 'line';\nconst LookContext = createContext<TabsLook>('pill');\n\nexport const Tabs = forwardRef<\n ElementRef<typeof TabsPrimitive.Root>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Root> & { look?: TabsLook }\n>(function Tabs({ look = 'pill', ...props }, ref) {\n return (\n <LookContext.Provider value={look}>\n <TabsPrimitive.Root ref={ref} {...props} />\n </LookContext.Provider>\n );\n});\n\nexport const TabsList = forwardRef<\n ElementRef<typeof TabsPrimitive.List>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(function TabsList({ className, ...props }, ref) {\n const look = useContext(LookContext);\n // More tabs than fit a phone scroll sideways, with an edge that says so.\n return (\n <ScrollFade fade=\"var(--background)\" className={look === 'pill' ? 'w-fit max-w-full' : 'w-full'}>\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n look === 'pill'\n ? 'inline-flex w-max items-center gap-1 rounded-full bg-muted p-1'\n : 'flex w-max min-w-full items-center gap-6 border-b border-border',\n className\n )}\n {...props}\n />\n </ScrollFade>\n );\n});\n\nexport const TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(function TabsTrigger({ className, ...props }, ref) {\n const look = useContext(LookContext);\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap text-[0.9375rem] outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n look === 'pill'\n ? 'h-9 rounded-full px-4 text-muted-foreground hover:text-foreground data-[state=active]:bg-card data-[state=active]:text-foreground data-[state=active]:shadow-sm'\n : '-mb-px h-11 border-b-2 border-transparent text-muted-foreground hover:text-foreground data-[state=active]:border-foreground data-[state=active]:text-foreground',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(function TabsContent({ className, ...props }, ref) {\n return <TabsPrimitive.Content ref={ref} className={cn('mt-6 outline-none', className)} {...props} />;\n});\n","import type { SVGProps } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The isometric check, measured from Sou's deck (slide 9) onto a 16×8 grid:\n * a chevron with a 3-unit short arm and a 5-unit long arm, one unit thick,\n * extruded two units. Three faces, three oranges.\n */\n\nconst TOP = '0,3 2,2 6,4 14,0 16,1 6,6';\nconst LEFT = '0,3 6,6 6,8 0,5';\nconst RIGHT = '6,6 16,1 16,3 6,8';\n\nexport const MARK_FACES = { top: '#FED8AB', left: '#FB933C', right: '#EA580B' } as const;\n\nexport interface MarkProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n /** Accessible name. Omit to render the mark as decoration. */\n title?: string;\n /** Rendered width in px; height follows the 2:1 grid. */\n size?: number;\n}\n\nexport function Mark({ title, size, className, ...rest }: MarkProps) {\n return (\n <svg\n viewBox=\"0 0 16 8\"\n width={size}\n height={size ? size / 2 : undefined}\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n className={cn('shrink-0', className)}\n {...rest}\n >\n {title ? <title>{title}</title> : null}\n <polygon points={LEFT} fill={MARK_FACES.left} />\n <polygon points={RIGHT} fill={MARK_FACES.right} />\n <polygon points={TOP} fill={MARK_FACES.top} />\n </svg>\n );\n}\n\nexport interface AppIconProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n title?: string;\n size?: number;\n}\n\n/** The app icon: the mark on an ink squircle, as in the deck's lockup. */\nexport function AppIcon({ title, size = 32, className, ...rest }: AppIconProps) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n className={cn('shrink-0', className)}\n {...rest}\n >\n {title ? <title>{title}</title> : null}\n <rect\n width=\"24\"\n height=\"24\"\n rx=\"6.25\"\n style={{ fill: 'var(--oca-icon-tile, #0A0A0A)', stroke: 'var(--oca-icon-ring, transparent)' }}\n strokeWidth=\"0.5\"\n />\n <g transform=\"translate(4.25 8.1) scale(0.97)\">\n <polygon points={LEFT} fill={MARK_FACES.left} />\n <polygon points={RIGHT} fill={MARK_FACES.right} />\n <polygon points={TOP} fill={MARK_FACES.top} />\n </g>\n </svg>\n );\n}\n\nexport interface LockupProps {\n /** The word beside the icon. */\n name?: string;\n /** Icon size in px; the word scales with it. */\n size?: number;\n className?: string;\n}\n\n/** Icon and wordmark, lowercase, as the deck sets it. */\nexport function Lockup({ name = 'orangecheck', size = 28, className }: LockupProps) {\n return (\n <span\n className={cn('inline-flex items-center font-medium tracking-[-0.01em]', className)}\n style={{ gap: size * 0.32, fontSize: size * 0.56 }}\n >\n <AppIcon size={size} />\n <span>{name}</span>\n </span>\n );\n}\n","/*\n * The deck portrait as ink, 128 × 128, one byte per cell (0 = paper, 255 = full\n * ink), read from the red channel so the orange ground is paper. Generated from\n * the deck's sphere by scripts/halftone.py's tone step; HalftoneCanvas screens\n * it live.\n */\nexport const PORTRAIT_TONE_SIZE = 128;\nexport const PORTRAIT_TONE_B64 =\n 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAADCKz/v//9lYBgAAAAAAAAAAAAAAFUJqiaTD5/PdnFJZqub/////////6beKXzoFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkEGl+dzPP/6XksDAAAAAAAAAAAAAABGjJTgavFzcyyhIrS////////////5serj0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABggiVXWMv/vsj0YlDAAAAAAAAAAAAAAMHTVejKWwwr+1x/n/////////////7t/Vp00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDCdFSlWU6fGrXy4eFgAAAAAAAAAAAAsZLlB5oLrQ3Of///////////////////7hnTkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwABGTAzP3bK78yGOiErIQUAAAAAAAAACRYsWIa63fH/////////////////////+d2/fCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAVMD1NdbXu6q9NGRoeGQ0AAAAAAAAJHTJbneH////////////////////////v0L+rcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGCR4zP09ync3uwlwYBgkQHCQgEAULGig8VYfP///////////////////////////v5NewYRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAYMGSEkMFJ1pebdgSUAAAAIHTI9P0lieIyq3f//////////////////////////////9s2lVgEAAAAAAAAAAAAGBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgsRGBAROni19v+1RgAAAAAGIT9efqfM5///////////////////////////////////2a9yIQAAAAAAAAAAABUcDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwULGB0lEgQoecf0/995FAAAAAAJKV+az/3////////////////////////////////////coGowAAAAAAAAAAAAHD0pAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBA0hLzwhARxlq9n77JIkAAAAAAAVUJrV////////////////////+fT///nm+f//////+dKfaCkAAAAAAAAAAA0iRjwHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgEAAR5HZ0IUM3Wnz+/djS4AAAAAAAcwa6Xd///////////////////z4f7/39Lu///////76b9rDgAAAAAAAAAdPSkwMA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkAAAAJ3uiZSlFg7DP4s+ENgcAAAAABhQvXJ3q//////////////////Pn//jQyM/X6v//+OfqqzcAAAAAAAAAABI6MDAzHgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB4IAA1Gq7trNUZ5r8O/p2EoEAQFBwkRESFPlez/////////////////9Pb//9/Mt6qvx+bMpZRMAAAAAAAAAAAAABY1UmRJHgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDBglNV+tt3VMXJK7r5R7SSEQCw4RFiAkQoTP//////////////////////////HQqIyg2ch/MwAAAAAAAAAAAAAABihfnZRKFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAFHTY/aJ+YZUZntcCRe21HKBoSEBQaJUaM3P//////////////////////+Pn76dS9p6/V2n4JAAAAAAAAAAAAAAQLKG3H1Yc5DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcJxElOkOPx5JKMGjCuIeGeUonHhwVEhUrddL////////////////////////4+em6r8/fzcqzWAAAAAAAAAAAAAAAFCRMkdDSom82DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSkhES5MZb30t1k5eMfHsreXWTUhGRUSHU2o+P//////////////////////////77OkzdzFolgLAAAAAAAAAAAAAAASRXKdx8+7q3gyCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGgAAHEJ+zfTDbUl4x+Lf2qhlQigYFBo5gd3////////////////////////////2xaqdnJJSAgAAAAAHDgAABAAAAAVHdpjN6eLcu2spDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEAAAMMo3d36BrXIrV6ubqvWo3JCAgL1+y/////////////////////////+/7//TVs3tlTQsAAAAAAA0SAAcoBQAAAC5llcjm7vnvqFwkBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZHAAAAAkvkdzDf1xnr/bz6f7ffz0kHSdFidn/////////////////////////+fjmwKqSakYNAAAAAAAHDQQAABQEAAAAGEl2pc3s///IeTAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs1AAAAEU2q1bt8TFy1///5/+mkYjIeL16o7v//////////////////////////9qtrXFVPLwAAAAAAAAQGAAAAAAAAAAAMNV6RwOz//9mUQBUJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJLykBAAw2ku75z4dTZaj0///51bOHRSc9drv2///////++//////////////////5nEozQ0kVAAAAAAAAAAAAAAAAAAAAAA5Ccpe44v303a9YGgcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATk8DAAAGF7H///afkZcoPb///bMspRWLkaHwPH//////fH2//////////////////6/bzc3MgAAAAAAAAAAAAAAAAAAAAAAHluVs7q7yNfPt3MuDAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjIAAAAQcN///8dbKUqt//////bcuoFJXqDP+f/////c7P///////////////////+azazIAAAAAAAAAAAAAAAAAAAAAAAY3eL3ZvZSfx8jCoFkhCwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCwAAAByM+f//tVIuSrX////////4unh5sOr//////+T0/////////////////////+yyWAAAAAAAAAAAAAAAAAAAAAAAJG239P3DkaTDwNDQgSwOCwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOFAgAAAAAPbX///+1WSs/q//////////FhmqN5P///////////////////////////////9+EDAAAAAAAAAAAAAAAAAAABilkre7//+mvpLC62e6qRhYLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEvGgYAAA5cx////8BYHD2z////////86VqSWjZ////////////////////////////////33wLAAAAAAAAAAAAAAAAAA09g7/n/////+GomLPQ58hqJQwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNTkiEQAAK5fs////6n4sUMX////////sklI6Z9r////////////////////////////////UWwAAAAAAAAAAAAAAAAUpWJXh////////9r+Xp7e1q20rDQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCckHUJrUiEVAgBNz///////rVJhwv////////ONPzBq3P///////////////////////////////81AAAAAAAAAAAAAAAAWRoHD+P////////npzaWPkZGRazISBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ4oPzc1Ypp2LxkFCXb5///////CeXan3P//////6oc2ImHZ////////////////////////////////0jYAAAAAAAAAAAAAFk2U1////////////vHisnlyhJR1OhkHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABonKT1JQEZojHtPLxUwq////////+e/p6Cy0vP////qj0MhVdD////////////////////////////////VNgAAAAAAAAAAABVJhtf////////////77tyvg3WGon88FggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJCkyTFhHTG9+dnNWP2/d///////////it6Sgw/////+qTSdTvf///////////////////////////////7gpAAAAAAAAAAAHPYTF////////////89XIyrqqkpi1j0IVBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESkvKS4/Rz1GfpqGfHh1pfv////////////QlHaa5P///8hcN2rD///////////////////////////////UfBIAAAAAAAAAABllu+7////////////pxcrh2bqdp7OVVhwGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgMjozKScvPGGlyKKBeITC//////////////61hInC////5oxomuf/////////////////////////////2nk8BAAAAAAAAAAAKXCrwtz//////////uzn8/TcsJylmoRTHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFiszOjopIS9NkdnduKKJkeT///////////////vFp8r////+u4+1+f////////////////////////////+RPy8VAAAAAAAAAAAwW2pigdL///jm///v6f3/9uTNvauKb0AUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkhLzMzOTowP3K44ce3w7rN///////////////////q/f/////KlLf/////////////////////////////vVZAXkUAAAAAAAAAACA2MydMr///9Ob///Hk8/356tzHnW9VMg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhwhLi4yQDZNmNDMr7ja5v7//////////////////////////9SfwP///////////////////////////9ptNVmVcwkAAAAAAAAADBESGkOk+///////+O7x+PHawK+SYUMpCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYcHiApLjM8L0Wc2tC7x+r/////////////////////////////5sDa////////////////////////////qzMhZbOdIgAAAAAAAAcOEBkoPZHz//////nc2urx8eHHuKdvPyACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFScrKCEoPUVGZ7js5Nzh+//////////////////////////////cw+T///////////////////b///////+gIhRbtbI6AAAAAAAQICgrOkVDe9z/////3MC6x9ns9unStYFHGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZKC4uIS5JT2Kl6vju5ub//////////////////////////////8iz4f/////////////////+7P///////5EcAi91diwAAAAADBooPU1ZX1Nwx////+fQ1biaq8/v++a/lFUWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRkkKSwvQFBTarDk2tnHv+/////////////////////////////cu8jv////////7+z////////////////ngRkAByQiDAYNERQdKC85RVVcU2S4////7+LfrYOcv9Xv58CSTREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJHCgvLzM8P0xtorunp6Cf1///////////////////////////5Kqy5P//+/b7+/nfx+///////////////+qYKAAABwcCDhUWGSEwPDo/TU9JWar/////9M+il623wuHcvYxFDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsZLj01LiwsTYmvsJKGhIa/////////////////5+bz//////TIrcr5/+fF1///6cWy3P//////////////+btGAgACBQcSFhgcITJFRUlVT0ZZqv7////0yqiyt6i94te1fjYFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAkNTMuJyVQoMzQuqSJeK3////////////25LqNg5i/3NC4sr/X8//z0Lvi///cu8rq/v/////////////9z2QNAAUIDBIWGBocJzk9P1BSSVuk9v///+e9pKuklLXm3bBtJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGDR0nJyQhJ0qNyunq2reSqvP//////////8+ddVxYebXNqIOY1fbx2sfM3////+/V3O/////////////////neRQABgcICw0OERQWJzA3SkxHVYPH////5rudkoNtj9XapFsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYVJygcGBooQ3W78f722rKw5P//////////uGhMXHCYzMeakr/k1K2Uj7Da/f///+/Q2v////////////////+KHQUGBQcHBwYMGB0pNT1NTE1VapTH8f/uyqKJdVZ1w8eDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECEvLCEgIig3a8L////kysDX8f////////uaR0BniaKrl4y44cWKb2t1oMjS5Pv/78DF////////////////8YQhCAcGDRAMBw4cHCU2P0ZPW15faHyo1Nq9mpSKZXawqmcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkWJCUoLzU2LCxivf////bm0Mrm////////xWUuM1iRqJqJjauvf15hc4mour/a+f/nv8X////////////////hiSgFAgcYHRQQFRkSFik2MjpVXFlTUnOan4p7h41vcI+ESQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxAZHSUvNj0sKWHC////9vPqz+H//////+6JNR4rT5/IvbCceWJWW3CNmpKSuOr9///q9P///////////////+qoOgUCCxYVDA4WFhASISwrNUlQUFZea3NrYmuDh3JeZVglAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDRQdJyUiJyEpZM3////5///XyOr/////wGIsJzdfr+HawI1PP1l1jY97c4G77/v//////////////////////bdFDAwNDAgGCA4UEhQiLDA6QkdHWHNrUExWcoyBZUpALwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYSGSElIRgWITZyyP///////9e63P///9d/Qi4vQG2w19SiXzlDc5+leVt7qs/U2fT///////////////7////5lCsIDQwJBwYGDBkYFBkgLDpARlBkc1Y2OlZ8jGpHMyEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAVGBwdGRgnR4zU/v//////1cLs////rVUnHCdAb6rIx6d2ZXiqv5RcZaDMv4+UyPj///js/////+rIwvP//9pbDQQICQkEAAANIiQcGRglNTpFXHBhPCkwUHh5UzIaBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDA4SGBYUGSQ9eLPU/f///93F0Pn//8d1NxoWKDxeotXSuq2wsr2wg3CNq6qMZG+w5v//2bfS38zCr4N+ref/wkAFBAYLDAQAAAshJyEeHCIuMjlPW0wvICA8ZGVHJQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICxIeHR0lJCg9Xn+q2unHq7jQ5+m7bTUZFB0pMlOn5NnAzenXqIqXuruchHl2irjp//+6e3yDcG1wU0dVeauVMAAAAQkNBQAABRUeHBIWKDIzLCw1NSkeHDBVVjoUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIFCIoLzcrISIwRVt/lIaHpbKwlGE3IRESHSIvW6jc4uz//+6rncXhu42Ej6vCyOH+0G81LjInJzUsJykvRkANAAAABwsCAAACDh0hGRknKyskGSElIBwYITk3HgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYZJzA8TEY3OTw3MDxDR1t1f2dDLB0VERggIjBZn9f4/////tDN18ir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';\n","import { useEffect, useRef, useState, type CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { PORTRAIT_TONE_B64, PORTRAIT_TONE_SIZE } from './portrait-tone';\n\n/*\n * The deck's halftone, screened live. The portrait's ink is a small tone grid;\n * this draws it as dots on a 45° screen that grow in from the centre, breathe,\n * and part under the pointer like a lens. One path fill per frame; it sleeps\n * when offscreen or hidden, and draws once, still, under reduced motion.\n */\n\nexport interface Tone {\n size: number;\n data: Uint8Array;\n}\n\nlet portrait: Tone | null = null;\n/** The deck portrait's ink, decoded once. */\nexport function portraitTone(): Tone {\n if (!portrait) {\n const bin = atob(PORTRAIT_TONE_B64);\n const data = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) data[i] = bin.charCodeAt(i);\n portrait = { size: PORTRAIT_TONE_SIZE, data };\n }\n return portrait;\n}\n\nexport interface HalftoneCanvasProps {\n /** Ink to screen; the deck portrait by default. */\n tone?: Tone;\n /** Dots across the diameter. */\n density?: number;\n /** Swell and part the dots under the pointer. */\n lens?: boolean;\n /** Grow the dots in from the centre on first view. */\n intro?: boolean;\n /** A slow wave through the dots. */\n breathe?: boolean;\n /** Dot colour. */\n ink?: string;\n /** Shown before the canvas runs, and without script. */\n fallbackSrc?: string;\n alt: string;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction sample(tone: Tone, u: number, v: number): number {\n const n = tone.size;\n const x = Math.min(n - 1.001, Math.max(0, u * n - 0.5));\n const y = Math.min(n - 1.001, Math.max(0, v * n - 0.5));\n const x0 = Math.floor(x);\n const y0 = Math.floor(y);\n const fx = x - x0;\n const fy = y - y0;\n const d = tone.data;\n const a = d[y0 * n + x0]! * (1 - fx) + d[y0 * n + x0 + 1]! * fx;\n const b = d[(y0 + 1) * n + x0]! * (1 - fx) + d[(y0 + 1) * n + x0 + 1]! * fx;\n return (a * (1 - fy) + b * fy) / 255;\n}\n\nconst easeOut = (k: number) => 1 - Math.pow(1 - k, 3);\n\nexport function HalftoneCanvas({\n tone,\n density = 86,\n lens = true,\n intro = true,\n breathe = true,\n ink = '#0d0a08',\n fallbackSrc,\n alt,\n className,\n style,\n}: HalftoneCanvasProps) {\n const wrap = useRef<HTMLDivElement>(null);\n const canvas = useRef<HTMLCanvasElement>(null);\n const [live, setLive] = useState(false);\n\n useEffect(() => {\n const el = wrap.current;\n const cv = canvas.current;\n if (!el || !cv) return;\n const ctx = cv.getContext('2d');\n if (!ctx) return;\n const t = tone ?? portraitTone();\n const still = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n let size = 0;\n let dots = new Float32Array(0); // x, y, r, delay per dot\n let count = 0;\n const pointer = { x: 0, y: 0, tx: 0, ty: 0, k: 0, on: false };\n let start = 0;\n let raf = 0;\n let visible = true;\n\n function layout() {\n const s = el!.clientWidth;\n if (!s || s === size) return;\n size = s;\n const dpr = Math.min(2, window.devicePixelRatio || 1);\n cv!.width = Math.round(s * dpr);\n cv!.height = Math.round(s * dpr);\n ctx!.setTransform(dpr, 0, 0, dpr, 0, 0);\n const pitch = s / density;\n const c = s / 2;\n const ca = Math.SQRT1_2;\n const span = Math.ceil((s * 0.75) / pitch) + 1;\n const out: number[] = [];\n for (let i = -span; i <= span; i++) {\n for (let j = -span; j <= span; j++) {\n const u = i * pitch;\n const v = j * pitch;\n const x = c + (u - v) * ca;\n const y = c + (u + v) * ca;\n const dc = Math.hypot(x - c, y - c);\n if (dc > c - pitch * 0.6) continue;\n const inkv = sample(t, x / s, y / s);\n if (inkv < 0.1) continue;\n const r = pitch * Math.sqrt(inkv / Math.PI) * 1.1;\n out.push(x, y, r, (dc / c) * 1100);\n }\n }\n dots = Float32Array.from(out);\n count = out.length / 4;\n }\n\n function frame(now: number) {\n if (!start) start = now;\n const el2 = now - start;\n pointer.x += (pointer.tx - pointer.x) * 0.18;\n pointer.y += (pointer.ty - pointer.y) * 0.18;\n pointer.k += ((pointer.on ? 1 : 0) - pointer.k) * 0.12;\n const L = size * 0.22;\n ctx!.clearRect(0, 0, size, size);\n ctx!.fillStyle = ink;\n ctx!.beginPath();\n const wave = breathe && !still;\n const sec = now / 1000;\n for (let n = 0; n < count; n++) {\n let x = dots[n * 4]!;\n let y = dots[n * 4 + 1]!;\n let r = dots[n * 4 + 2]!;\n if (intro && !still) {\n const k = Math.min(1, Math.max(0, (el2 - dots[n * 4 + 3]!) / 650));\n if (k <= 0) continue;\n r *= easeOut(k);\n }\n if (wave) r *= 1 + 0.05 * Math.sin(sec * 1.1 + ((x + y) / size) * 6);\n if (pointer.k > 0.01) {\n const dx = x - pointer.x;\n const dy = y - pointer.y;\n const d = Math.hypot(dx, dy);\n if (d < L) {\n // A clearing, like a finger drawn through sand: dots\n // shrink toward the pointer and part around it.\n const f = (1 - d / L) * pointer.k;\n r *= 1 - 0.75 * f * f;\n if (d > 0.001) {\n const push = f * (size / density) * 2.6;\n x += (dx / d) * push;\n y += (dy / d) * push;\n }\n }\n }\n ctx!.moveTo(x + r, y);\n ctx!.arc(x, y, r, 0, Math.PI * 2);\n }\n ctx!.fill();\n const introDone = !intro || still || el2 > 1900;\n const busy = wave || pointer.k > 0.01 || !introDone;\n raf = busy && visible && !document.hidden ? requestAnimationFrame(frame) : 0;\n }\n\n const kick = () => {\n if (!raf && visible && !document.hidden) raf = requestAnimationFrame(frame);\n };\n\n layout();\n setLive(true);\n kick();\n\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(() => (layout(), kick())) : null;\n ro?.observe(el);\n const io =\n typeof IntersectionObserver !== 'undefined'\n ? new IntersectionObserver(([e]) => {\n visible = Boolean(e?.isIntersecting);\n kick();\n })\n : null;\n io?.observe(el);\n const onVis = () => kick();\n document.addEventListener('visibilitychange', onVis);\n\n const move = (e: PointerEvent) => {\n const b = el.getBoundingClientRect();\n pointer.tx = e.clientX - b.left;\n pointer.ty = e.clientY - b.top;\n if (!pointer.on) {\n pointer.x = pointer.tx;\n pointer.y = pointer.ty;\n }\n pointer.on = true;\n kick();\n };\n const leave = () => {\n pointer.on = false;\n kick();\n };\n if (lens && !still) {\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n }\n return () => {\n cancelAnimationFrame(raf);\n ro?.disconnect();\n io?.disconnect();\n document.removeEventListener('visibilitychange', onVis);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n };\n }, [tone, density, lens, intro, breathe, ink]);\n\n return (\n <div ref={wrap} className={cn('relative aspect-square w-full', className)} style={style} data-live={live || undefined}>\n {fallbackSrc ? (\n // eslint-disable-next-line @next/next/no-img-element -- the still screen, until the live one draws\n <img\n src={fallbackSrc}\n alt=\"\"\n aria-hidden\n className={cn('absolute inset-0 size-full select-none transition-opacity duration-300', live && 'opacity-0')}\n draggable={false}\n />\n ) : null}\n {/* alt=\"\" marks it decorative: hidden, rather than an image with no name. */}\n <canvas\n ref={canvas}\n {...(alt ? { role: 'img', 'aria-label': alt } : { 'aria-hidden': true })}\n className=\"absolute inset-0 size-full\"\n />\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { HalftoneCanvas } from './halftone-canvas';\n\n/*\n * The deck's photograph: a halftone portrait on an orange ball, lit from the\n * upper left, with a hairline stadium behind it. The dot layer is an image of\n * black dots on transparent, made by scripts/halftone.py, so the ball stays CSS\n * and the dots stay crisp at any size.\n */\n\nexport const SPHERE_GRADIENT =\n 'radial-gradient(86% 86% at 36% 32%, #fff7f0 0%, #ffdec8 14%, #ffa069 34%, #ff7030 56%, #f65210 78%, #de4006 100%)';\n\nconst SPHERE_DEPTH = 'inset -14px -22px 44px rgb(150 40 0 / 0.16), 0 36px 70px -34px rgb(234 88 11 / 0.45)';\n\nexport interface HalftoneSphereProps {\n /** The dot layer (black dots on transparent, already circular). */\n src: string;\n /** Describe the person or subject; empty string marks it decorative. */\n alt: string;\n /** Draw the hairline stadium behind the sphere, as the hero does. */\n stadium?: boolean;\n /** Let the sphere drift a few pixels. Off under reduced motion. */\n float?: boolean;\n /** Screen the portrait live (draw-in, breathing, pointer lens); `src` stays the still fallback. */\n live?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\n// A soft light on the upper left and a floor shadow, so the ball reads as an object.\nconst SPHERE_GLOSS = 'radial-gradient(38% 30% at 33% 22%, rgb(255 255 255 / 0.55), transparent 72%)';\n\nfunction Ball({ src, alt, float, live }: { src: string; alt: string; float: boolean; live: boolean }) {\n return (\n <div className={cn('relative size-full', float && 'oca-animate-float')}>\n <div\n aria-hidden\n className=\"absolute inset-x-[14%] -bottom-[7%] h-[10%] rounded-[50%] bg-[rgb(234_88_11/0.28)] blur-2xl\"\n />\n <div\n className=\"relative size-full overflow-hidden rounded-full\"\n style={{ background: SPHERE_GRADIENT, boxShadow: SPHERE_DEPTH }}\n >\n {live ? (\n <HalftoneCanvas fallbackSrc={src} alt={alt} />\n ) : (\n // eslint-disable-next-line @next/next/no-img-element -- a static dot layer, sized by CSS\n <img src={src} alt={alt} className=\"absolute inset-0 size-full select-none\" draggable={false} />\n )}\n <div\n aria-hidden\n className=\"pointer-events-none absolute inset-0 rounded-full mix-blend-soft-light\"\n style={{ background: SPHERE_GLOSS }}\n />\n </div>\n </div>\n );\n}\n\nexport function HalftoneSphere({\n src,\n alt,\n stadium = false,\n float = false,\n live = false,\n className,\n style,\n}: HalftoneSphereProps) {\n if (!stadium) {\n return (\n <div className={cn('relative aspect-square w-full', className)} style={style}>\n <Ball src={src} alt={alt} float={float} live={live} />\n </div>\n );\n }\n // Measured from the deck's title slide against the ball's width S: the stadium\n // starts 0.255 S left of and 0.127 S above the ball, is 1.11 S wide, and ends\n // level with its foot. Both live inside this box, so nothing reaches the text.\n return (\n <div className={cn('relative aspect-[1.255/1.127] w-full', className)} style={style}>\n <div aria-hidden className=\"oca-stadium pointer-events-none absolute left-0 top-0 h-full w-[88.4%] rounded-[32%]\" />\n <div className=\"absolute bottom-0 right-0 aspect-square w-[79.7%]\">\n <Ball src={src} alt={alt} float={float} live={live} />\n </div>\n </div>\n );\n}\n","import { useEffect, useRef } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Mark } from './mark';\n\nexport interface IsoCheckProps {\n /** Width in px; the check keeps its 2:1 grid. */\n size?: number;\n /** Drop it into place on first paint, the deck's closing gesture. */\n settle?: boolean;\n /** A soft floor shadow, so it reads as an object on the canvas. */\n shadow?: boolean;\n /** Turn a few degrees toward the pointer, with a warm light behind it. */\n tilt?: boolean;\n title?: string;\n className?: string;\n}\n\n/** The isometric check as an object: the deck's closing illustration. */\nexport function IsoCheck({ size = 360, settle = false, shadow = true, tilt = false, title, className }: IsoCheckProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = ref.current;\n if (!el || !tilt || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n let raf = 0;\n let tx = 0;\n let ty = 0;\n let x = 0;\n let y = 0;\n const step = () => {\n x += (tx - x) * 0.08;\n y += (ty - y) * 0.08;\n el.style.setProperty('--rx', `${(-y * 10).toFixed(2)}deg`);\n el.style.setProperty('--ry', `${(x * 14).toFixed(2)}deg`);\n raf = Math.abs(tx - x) + Math.abs(ty - y) > 0.001 ? requestAnimationFrame(step) : 0;\n };\n const move = (e: PointerEvent) => {\n const b = el.getBoundingClientRect();\n tx = Math.max(-1, Math.min(1, (e.clientX - (b.left + b.width / 2)) / (window.innerWidth / 2)));\n ty = Math.max(-1, Math.min(1, (e.clientY - (b.top + b.height / 2)) / (window.innerHeight / 2)));\n if (!raf) raf = requestAnimationFrame(step);\n };\n window.addEventListener('pointermove', move, { passive: true });\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('pointermove', move);\n };\n }, [tilt]);\n\n return (\n <div\n ref={ref}\n className={cn('relative inline-block', settle && 'oca-animate-settle', className)}\n style={{ width: size, perspective: tilt ? 900 : undefined }}\n >\n {tilt ? (\n <div\n aria-hidden\n className=\"absolute left-1/2 top-1/2 -z-0 aspect-square w-[120%] -translate-x-1/2 -translate-y-1/2 rounded-full opacity-70 blur-3xl\"\n style={{ background: 'radial-gradient(closest-side, rgb(255 140 70 / 0.35), transparent)' }}\n />\n ) : null}\n <div\n className=\"relative z-10 transition-transform duration-300 ease-out\"\n style={tilt ? { transform: 'rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg))', transformStyle: 'preserve-3d' } : undefined}\n >\n <Mark size={size} title={title} className=\"block\" />\n </div>\n {shadow ? (\n <div\n aria-hidden\n className=\"absolute left-[8%] right-[8%] rounded-[50%] opacity-60 blur-xl\"\n style={{ height: size * 0.08, bottom: -size * 0.04, background: 'rgb(234 88 11 / 0.18)' }}\n />\n ) : null}\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * \"A bot farm can pretend to be a crowd\": a crowd of identical figures in\n * perspective, nearer rows larger, with a few real ones in orange. Identical on\n * purpose: copies are what a bot farm is. Positions come from a fixed seed so\n * server and client draw the same crowd.\n */\n\nexport interface CrowdProps {\n cols?: number;\n rows?: number;\n /** How many figures are real (orange). */\n real?: number;\n seed?: number;\n /** Ground it sits on: figures are light on ink, dark on canvas. */\n tone?: 'ink' | 'canvas';\n /** Spoken by screen readers. */\n label?: string;\n /**\n * Let the copies leave as an ancestor's `--p` (0 to 1, set by ScrollStory)\n * rises: each fake falls away at its own moment and the real ones grow.\n */\n story?: boolean;\n className?: string;\n}\n\nconst CELL_W = 22;\nconst CELL_H = 27;\n\nfunction picks(count: number, total: number, seed: number): Set<number> {\n let s = seed >>> 0;\n const out = new Set<number>();\n while (out.size < Math.min(count, total)) {\n s = (Math.imul(s, 1664525) + 1013904223) >>> 0;\n out.add(s % total);\n }\n return out;\n}\n\nexport function Crowd({\n cols = 26,\n rows = 9,\n real = 7,\n seed = 21,\n tone = 'ink',\n label = 'A crowd of identical accounts. Only a few are real.',\n story = false,\n className,\n}: CrowdProps) {\n const width = cols * CELL_W;\n const scales = Array.from({ length: rows }, (_, r) => 0.5 + 0.5 * (r / Math.max(1, rows - 1)));\n const height = scales.reduce((h, s) => h + CELL_H * s, 0);\n // Real figures only in the nearer half, where they are big enough to see.\n const nearFrom = Math.floor(rows / 2) * cols;\n const realSet = new Set([...picks(real, rows * cols - nearFrom, seed)].map((i) => i + nearFrom));\n const bot = tone === 'ink' ? '#ffffff' : '#0a0a0a';\n // When each copy leaves, from a fixed seed: nearer rows go a little later.\n let lcg = (seed * 7919) >>> 0;\n const leaveAt = () => {\n lcg = (Math.imul(lcg, 1664525) + 1013904223) >>> 0;\n return 0.12 + (lcg / 2 ** 32) * 0.6;\n };\n let y = 0;\n return (\n <svg\n role=\"img\"\n aria-label={label}\n viewBox={`0 0 ${width} ${Math.ceil(height)}`}\n className={cn('block h-auto w-full overflow-visible', className)}\n >\n {story ? (\n <defs>\n <radialGradient id=\"oca-crowd-glow\">\n <stop offset=\"0\" stopColor=\"#ff7a3d\" stopOpacity=\"0.55\" />\n <stop offset=\"1\" stopColor=\"#ff7a3d\" stopOpacity=\"0\" />\n </radialGradient>\n </defs>\n ) : null}\n {scales.map((s, r) => {\n const rowY = y;\n y += CELL_H * s;\n const rowW = cols * CELL_W * s;\n const x0 = (width - rowW) / 2;\n return Array.from({ length: cols }, (_, c) => {\n const i = r * cols + c;\n const isReal = realSet.has(i);\n const t = leaveAt();\n return (\n <g key={i} transform={`translate(${x0 + c * CELL_W * s} ${rowY}) scale(${s})`}>\n {isReal && story ? (\n <circle className=\"oca-crowd-halo\" cx={11} cy={14} r={13} fill=\"url(#oca-crowd-glow)\" />\n ) : null}\n <g\n className={story ? (isReal ? 'oca-crowd-real' : 'oca-crowd-bot') : undefined}\n style={story && !isReal ? ({ '--t': t.toFixed(3) } as CSSProperties) : undefined}\n fill={isReal ? 'var(--oca-orange)' : bot}\n fillOpacity={isReal ? 1 : 0.1 + 0.16 * s}\n >\n <circle cx={11} cy={8} r={4.4} />\n <path d=\"M3 25a8 8.5 0 0 1 16 0Z\" />\n </g>\n </g>\n );\n });\n })}\n </svg>\n );\n}\n","import { createElement, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/** The small orange line above a heading (\"How it works\", \"The honest version\"). */\nexport function Eyebrow({ className, onInk, ...props }: HTMLAttributes<HTMLParagraphElement> & { onInk?: boolean }) {\n return <p className={cn('oca-eyebrow', onInk && 'text-oca-ink-eyebrow', className)} {...props} />;\n}\n\ntype DisplayLevel = 1 | 2 | 3;\n\nexport interface DisplayProps extends HTMLAttributes<HTMLHeadingElement> {\n /** Visual size. The element follows unless `as` says otherwise. */\n level?: DisplayLevel;\n as?: 'h1' | 'h2' | 'h3' | 'p';\n}\n\n/** Headlines: regular weight, tight, balanced. */\nexport function Display({ level = 2, as, className, ...props }: DisplayProps) {\n const tag = as ?? (`h${level}` as const);\n return createElement(tag, { className: cn(`oca-display-${level}`, className), ...props });\n}\n\n/** The one orange word (\"cost something *real*.\"). Display sizes only: as small\n * text this orange would fail contrast. */\nexport function Accent({ children, className }: { children: ReactNode; className?: string }) {\n return <span className={cn('text-oca-accent-display', className)}>{children}</span>;\n}\n\nexport function Lead({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-lead max-w-[40rem]', className)} {...props} />;\n}\n\n/** Fine print under a section (\"Who holds what today: …\"). */\nexport function Footnote({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('text-[0.9375rem] text-muted-foreground', className)} {...props} />;\n}\n\n/**\n * Body copy for long-form pages: measured line length, calm rhythm. The\n * spacing rules skip anything inside `.not-prose`, so a Notice or card set in\n * the text keeps its own layout.\n */\nexport function Prose({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n 'max-w-[42rem] text-[1.0625rem] leading-[1.7] text-muted-foreground',\n '[&_h2:not(.not-prose_h2)]:oca-display-3 [&_h2:not(.not-prose_h2)]:mb-4 [&_h2:not(.not-prose_h2)]:mt-14 [&_h2]:scroll-mt-24 [&_h2]:text-foreground',\n '[&_h3:not(.not-prose_h3)]:oca-title [&_h3:not(.not-prose_h3)]:mb-3 [&_h3:not(.not-prose_h3)]:mt-10 [&_h3]:text-foreground',\n '[&_p:not(.not-prose_p)]:my-4 [&_strong]:font-medium [&_strong]:text-foreground',\n '[&_a]:text-foreground [&_a]:underline [&_a]:decoration-foreground/35 [&_a]:underline-offset-4 hover:[&_a]:decoration-foreground',\n '[&_ul:not(.not-prose_ul)]:my-4 [&_ul:not(.not-prose_ul)]:list-disc [&_ul:not(.not-prose_ul)]:pl-5 [&_li:not(.not-prose_li)]:my-1.5 [&_code]:text-foreground',\n className\n )}\n {...props}\n />\n );\n}\n","import {\n createElement,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ElementType,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Motion that tells the story and then gets out of the way. Everything here is\n * off under prefers-reduced-motion, does nothing without script, and costs\n * nothing while offscreen.\n */\n\nfunction prefersStill(): boolean {\n return typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/** True once the element has been on screen (or immediately without an observer). */\nexport function useInView<T extends Element>(rootMargin = '0px 0px -12% 0px') {\n const ref = useRef<T>(null);\n const [seen, setSeen] = useState(false);\n useEffect(() => {\n const el = ref.current;\n if (!el || seen) return;\n if (typeof IntersectionObserver === 'undefined') {\n setSeen(true);\n return;\n }\n const io = new IntersectionObserver(\n ([e]) => {\n if (e?.isIntersecting) {\n setSeen(true);\n io.disconnect();\n }\n },\n { rootMargin }\n );\n io.observe(el);\n return () => io.disconnect();\n }, [rootMargin, seen]);\n return [ref, seen] as const;\n}\n\n/**\n * Rise into place the first time it scrolls into view. Content already on\n * screen at load is left alone, so nothing above the fold flashes.\n */\nexport function Reveal({\n as = 'div',\n delay = 0,\n className,\n style,\n children,\n}: {\n as?: ElementType;\n /** Milliseconds, for staggering siblings. */\n delay?: number;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}) {\n const ref = useRef<HTMLElement>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el || prefersStill() || typeof IntersectionObserver === 'undefined') return;\n if (el.getBoundingClientRect().top < window.innerHeight * 0.92) return;\n el.dataset.reveal = 'pending';\n const io = new IntersectionObserver(\n ([e]) => {\n if (e?.isIntersecting) {\n el.dataset.reveal = 'shown';\n io.disconnect();\n }\n },\n { rootMargin: '0px 0px -10% 0px' }\n );\n io.observe(el);\n return () => io.disconnect();\n }, []);\n return createElement(\n as,\n { ref, className, style: { ...style, '--reveal-delay': `${delay}ms` } as CSSProperties },\n children\n );\n}\n\n/**\n * A tall section whose content stays pinned while you scroll through it, and\n * sets `--p` from 0 to 1 on the way. Children read the variable in CSS, so the\n * scroll never re-renders React. Without script or with reduced motion, `--p`\n * stays 0 and the section is an ordinary block.\n */\nexport function ScrollStory({\n length = 2,\n className,\n innerClassName,\n children,\n}: {\n /** Height in viewports; the pinned part plays over (length − 1) of them. */\n length?: number;\n className?: string;\n innerClassName?: string;\n children: ReactNode;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const [pinned, setPinned] = useState(false);\n useEffect(() => {\n const el = ref.current;\n if (!el || prefersStill()) return;\n setPinned(true);\n let raf = 0;\n const update = () => {\n raf = 0;\n const r = el.getBoundingClientRect();\n const travel = r.height - window.innerHeight;\n const p = travel > 0 ? Math.min(1, Math.max(0, -r.top / travel)) : 0;\n el.style.setProperty('--p', p.toFixed(4));\n };\n const on = () => {\n if (!raf) raf = requestAnimationFrame(update);\n };\n update();\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n };\n }, []);\n return (\n <div ref={ref} className={cn('relative', className)} style={pinned ? { height: `${length * 100}svh` } : undefined}>\n <div className={cn(pinned && 'sticky top-0 flex min-h-svh items-center', innerClassName)}>{children}</div>\n </div>\n );\n}\n\n/** A number that counts up to its value the first time it is seen. */\nexport function Ticker({\n value,\n duration = 1200,\n format = (n) => Math.round(n).toLocaleString('en-US'),\n className,\n}: {\n value: number;\n duration?: number;\n format?: (n: number) => string;\n className?: string;\n}) {\n const [ref, seen] = useInView<HTMLSpanElement>();\n const [shown, setShown] = useState(value);\n // Count only a number that starts below the fold; one already on screen\n // keeps its value rather than flashing it, then zero, then counting.\n const animate = useRef<boolean | null>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el || animate.current !== null) return;\n animate.current = !prefersStill() && el.getBoundingClientRect().top > window.innerHeight * 0.9;\n if (animate.current) setShown(0);\n }, [ref]);\n useEffect(() => {\n if (!seen) return;\n if (!animate.current) {\n setShown(value);\n return;\n }\n let raf = 0;\n const t0 = performance.now();\n const step = (now: number) => {\n const k = Math.min(1, (now - t0) / duration);\n setShown(value * (1 - Math.pow(1 - k, 3)));\n if (k < 1) raf = requestAnimationFrame(step);\n };\n raf = requestAnimationFrame(step);\n return () => cancelAnimationFrame(raf);\n }, [seen, value, duration]);\n return (\n <span ref={ref} className={cn('oca-tabular', className)}>\n {format(shown)}\n </span>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Reveal } from './motion';\n\n/*\n * The deck alternates three grounds: the light canvas, the ink band and the\n * orange band. A section owns its ground edge to edge and its content sits in\n * the container. On the orange band text is ink, never white (2.9:1).\n */\n// overflow-x: clip, not hidden: decoration may not widen the page, and a sticky\n// child still sticks.\nexport const sectionVariants = cva('relative w-full overflow-x-clip', {\n variants: {\n tone: {\n canvas: 'bg-background text-foreground',\n card: 'bg-card text-card-foreground',\n // The band line is transparent in light; in dark it keeps the ink\n // band from melting into the canvas.\n ink: 'border-y border-[var(--oca-band-line)] bg-oca-ink text-oca-ink-foreground',\n brand: 'bg-brand text-brand-foreground',\n },\n space: {\n none: '',\n sm: 'py-12 md:py-16',\n md: 'oca-section',\n lg: 'py-24 md:py-40',\n },\n },\n defaultVariants: { tone: 'canvas', space: 'md' },\n});\n\nexport interface SectionProps extends HTMLAttributes<HTMLElement>, VariantProps<typeof sectionVariants> {\n /** Put children in the standard container. Default true. */\n contained?: boolean;\n}\n\nexport function Section({ tone, space, contained = true, className, children, ...props }: SectionProps) {\n return (\n <section className={cn(sectionVariants({ tone, space }), className)} {...props}>\n {contained ? <div className=\"oca-container\">{children}</div> : children}\n </section>\n );\n}\n\nexport function Container({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('oca-container', className)} {...props} />;\n}\n\n/**\n * Eyebrow + headline + lead, the opening of every deck slide. It rises into\n * place the first time it scrolls into view (`reveal={false}` to keep it still).\n */\nexport function SectionIntro({\n className,\n align = 'start',\n reveal = true,\n children,\n style,\n}: Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'children'> & {\n align?: 'start' | 'center';\n reveal?: boolean;\n}) {\n const cls = cn('flex flex-col gap-4 md:gap-5', align === 'center' && 'mx-auto items-center text-center', className);\n return reveal ? (\n <Reveal className={cls} style={style}>\n {children}\n </Reveal>\n ) : (\n <div className={cls} style={style}>\n {children}\n </div>\n );\n}\n","import { useEffect, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Section } from './section';\n\n/*\n * The top of every public page. Two shapes:\n *\n * - `page` (default): the home page's register. Eyebrow, a display headline,\n * one line of lead, actions, and optional art beside it.\n * - `document`: for pages that are read top to bottom (privacy, terms,\n * security, changelog). A centred column with the same eyebrow and a\n * display headline that is always larger than the document's own h2s.\n */\nexport interface PageHeroProps {\n eyebrow?: ReactNode;\n title: ReactNode;\n /** One or two sentences. */\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the text from md up; below it on a phone. `page` only. */\n art?: ReactNode;\n /** A line of fine print under the lead (\"Updated 15 October 2026\"). */\n meta?: ReactNode;\n /** Anything else under the actions: a status pill, a stat row. */\n children?: ReactNode;\n variant?: 'page' | 'document';\n /** `xl` is the home page's size; content pages default to `lg`. `page` only. */\n size?: 'lg' | 'xl';\n className?: string;\n}\n\nexport function PageHero({\n eyebrow,\n title,\n lead,\n actions,\n art,\n meta,\n children,\n variant = 'page',\n size = 'lg',\n className,\n}: PageHeroProps) {\n if (variant === 'document') {\n return (\n <Section space=\"none\" className={cn('pb-12 pt-12 md:pb-16 md:pt-20', className)}>\n <DocHeader className=\"mx-auto max-w-[42rem]\" {...{ eyebrow, title, lead, meta, actions }}>\n {children}\n </DocHeader>\n </Section>\n );\n }\n return (\n <Section space=\"none\" className={cn('pb-14 pt-12 md:pb-20 md:pt-20', className)}>\n <div className={cn('grid grid-cols-1 gap-10', art && 'items-center md:grid-cols-12')}>\n <div className={cn('flex flex-col items-start gap-6', art ? 'md:col-span-7' : 'max-w-[52rem]')}>\n {eyebrow ? <p className=\"oca-eyebrow oca-enter\">{eyebrow}</p> : null}\n <h1 className={cn(size === 'xl' ? 'oca-display-1' : 'oca-display-2', 'oca-enter [--enter-delay:70ms]')}>\n {title}\n </h1>\n {lead ? <p className=\"oca-lead oca-enter max-w-[38rem] [--enter-delay:150ms]\">{lead}</p> : null}\n {meta ? <p className=\"oca-enter text-[0.875rem] text-muted-foreground [--enter-delay:190ms]\">{meta}</p> : null}\n {actions ? <div className=\"oca-enter flex flex-wrap gap-3 [--enter-delay:230ms]\">{actions}</div> : null}\n {children ? <div className=\"oca-enter w-full [--enter-delay:270ms]\">{children}</div> : null}\n </div>\n {art ? <div className=\"oca-enter md:col-span-5 [--enter-delay:120ms]\">{art}</div> : null}\n </div>\n </Section>\n );\n}\n\n/**\n * A document's title block. PageHero's `document` variant wraps it in a band;\n * DocLayout's `header` takes it bare, so it lines up with the text below.\n */\nexport function DocHeader({\n eyebrow,\n title,\n lead,\n meta,\n actions,\n children,\n className,\n}: Pick<PageHeroProps, 'eyebrow' | 'title' | 'lead' | 'meta' | 'actions' | 'children' | 'className'>) {\n return (\n <div className={cn('flex flex-col gap-5', className)}>\n {eyebrow ? <p className=\"oca-eyebrow oca-enter\">{eyebrow}</p> : null}\n <h1 className=\"oca-display-2 oca-enter [--enter-delay:70ms]\">{title}</h1>\n {lead ? <p className=\"oca-lead\">{lead}</p> : null}\n {meta ? <p className=\"text-[0.875rem] text-muted-foreground\">{meta}</p> : null}\n {actions ? <div className=\"mt-1 flex flex-wrap gap-3\">{actions}</div> : null}\n {children}\n </div>\n );\n}\n\nexport interface TocItem {\n id: string;\n label: ReactNode;\n}\n\nfunction useActiveHeading(ids: string[]): string | undefined {\n const [active, setActive] = useState<string | undefined>(ids[0]);\n const key = ids.join('|');\n useEffect(() => {\n const els = key\n .split('|')\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el !== null);\n if (els.length === 0 || typeof IntersectionObserver === 'undefined') return;\n const io = new IntersectionObserver(\n (entries) => {\n const hit = entries.filter((e) => e.isIntersecting).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top)[0];\n if (hit) setActive(hit.target.id);\n },\n { rootMargin: '-80px 0px -65% 0px' }\n );\n els.forEach((el) => io.observe(el));\n return () => io.disconnect();\n }, [key]);\n return active;\n}\n\n/**\n * A readable column for a long document, with its table of contents: a sticky\n * list beside it on desktop, a folded \"On this page\" above it on a phone. The\n * ids are the ids of the document's h2s. Pass the title as `header` (a\n * DocHeader) so it sits on the same column as the text.\n */\nexport function DocLayout({\n toc,\n header,\n children,\n className,\n}: {\n toc?: TocItem[];\n header?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n const active = useActiveHeading(toc?.map((t) => t.id) ?? []);\n const links = () =>\n toc?.map((t) => (\n <li key={t.id}>\n <a\n href={`#${t.id}`}\n aria-current={active === t.id ? 'location' : undefined}\n className={cn(\n 'block border-l py-1.5 pl-4 text-[0.875rem] leading-snug transition-colors',\n active === t.id\n ? 'border-foreground text-foreground'\n : 'border-border text-muted-foreground hover:text-foreground'\n )}\n >\n {t.label}\n </a>\n </li>\n ));\n const hasToc = !!toc && toc.length > 0;\n return (\n <div className={cn('oca-container pb-24', header ? 'pt-12 md:pt-20' : null, className)}>\n <div\n className={cn(\n 'mx-auto grid grid-cols-1 gap-8',\n hasToc\n ? 'max-w-[42rem] lg:max-w-[64rem] lg:grid-cols-[13rem_minmax(0,42rem)] lg:gap-x-16 lg:gap-y-10'\n : 'max-w-[42rem]'\n )}\n >\n {header ? <div className={cn(hasToc && 'lg:col-start-2', 'pb-4')}>{header}</div> : null}\n {hasToc ? (\n <>\n <nav\n aria-label=\"On this page\"\n className={cn('sticky top-24 hidden self-start lg:block', header && 'lg:row-start-2')}\n >\n <p className=\"mb-3 text-[0.875rem] font-medium\">On this page</p>\n <ul>{links()}</ul>\n </nav>\n <details className=\"group rounded-2xl border border-border bg-card px-4 py-3 lg:hidden\">\n <summary className=\"cursor-pointer list-none text-[0.9375rem] font-medium marker:hidden\">\n On this page\n </summary>\n <ul className=\"mt-3\">{links()}</ul>\n </details>\n </>\n ) : null}\n <div className={cn('min-w-0', hasToc && 'lg:col-start-2', hasToc && header && 'lg:row-start-2')}>\n {children}\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Badge } from '../primitives/badge';\nimport { Card, CardNumeral, CardTitle } from '../primitives/card';\n\nexport interface StepItem {\n title: ReactNode;\n body: ReactNode;\n /** A small pill beside the title (\"in testing\", \"on the path\"). */\n badge?: ReactNode;\n /** Overrides the automatic 01, 02, 03. */\n numeral?: ReactNode;\n}\n\nexport interface StepGridProps {\n items: StepItem[];\n /**\n * `cards` (white cards, \"Sign in. Earn. Own.\"), `plain` (open columns,\n * \"Ask for something a bot can't fake cheaply.\") or `ink` (dark cards,\n * \"Why partner now\"). Numerals are dropped on `ink`, as the deck does.\n */\n look?: 'cards' | 'plain' | 'ink';\n className?: string;\n}\n\nconst pad = (n: number) => String(n + 1).padStart(2, '0');\n\nexport function StepGrid({ items, look = 'cards', className }: StepGridProps) {\n const cols = items.length >= 3 ? 'md:grid-cols-3' : items.length === 2 ? 'md:grid-cols-2' : '';\n return (\n <ol className={cn('grid gap-4 md:gap-5', cols, className)}>\n {items.map((it, i) =>\n look === 'plain' ? (\n <li key={i} className=\"flex flex-col gap-3 pr-4\">\n <CardNumeral>{it.numeral ?? pad(i)}</CardNumeral>\n <CardTitle className=\"oca-title-sm\">\n {it.title}\n {it.badge ? <Badge>{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"oca-body text-[0.9375rem]\">{it.body}</div>\n </li>\n ) : look === 'ink' ? (\n <li key={i}>\n <Card tone=\"ink\" padding=\"md\" className=\"h-full\">\n <CardTitle className=\"text-oca-ink-title\">\n {it.title}\n {it.badge ? <Badge tone=\"onInk\">{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"mt-3 text-[1rem] leading-relaxed text-oca-ink-muted\">{it.body}</div>\n </Card>\n </li>\n ) : (\n <li key={i}>\n <Card padding=\"md\" className=\"flex h-full flex-col gap-3\">\n <CardNumeral>{it.numeral ?? pad(i)}</CardNumeral>\n <CardTitle>\n {it.title}\n {it.badge ? <Badge>{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"oca-body\">{it.body}</div>\n </Card>\n </li>\n )\n )}\n </ol>\n );\n}\n","import { createContext, useContext } from 'react';\n\n/** Where the viewer is inside the signed-in shell: its section and page. */\nexport interface ShellPlace {\n section?: string;\n page?: string;\n}\n\nexport const ShellContext = createContext<ShellPlace>({});\n\nexport function useShellPlace(): ShellPlace {\n return useContext(ShellContext);\n}\n","import { Check, Copy } from 'lucide-react';\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../lib/cn';\nimport { useShellPlace } from '../lib/shell-context';\nimport { Button } from '../primitives/button';\nimport { Skeleton, useTimedOut } from '../primitives/feedback';\nimport { ScrollFade } from '../primitives/scroll-fade';\n\n/* ── Page header ─────────────────────────────────────────────────────── */\n\n/**\n * The top of a signed-in page: section, page title, one sentence, actions.\n * Inside AppShell the eyebrow defaults to the current section, so every page\n * in a section opens at the same height. Pass `eyebrow={null}` to omit it.\n * Public pages use PageHero.\n */\nexport function PageHeader({\n eyebrow,\n title,\n description,\n actions,\n className,\n}: {\n eyebrow?: ReactNode;\n title: ReactNode;\n /** One sentence. Longer explanation belongs in the docs, not the header. */\n description?: ReactNode;\n actions?: ReactNode;\n className?: string;\n}) {\n const place = useShellPlace();\n const eb = eyebrow === undefined ? place.section : eyebrow;\n return (\n <header className={cn('flex flex-col gap-5 md:flex-row md:items-end md:justify-between', className)}>\n <div className=\"flex min-w-0 max-w-[44rem] flex-col gap-2.5\">\n {eb ? <p className=\"oca-eyebrow\">{eb}</p> : null}\n <h1 className=\"oca-display-3\">{title}</h1>\n {description ? <p className=\"oca-body max-w-[40rem] text-[1.0625rem]\">{description}</p> : null}\n </div>\n {actions ? <div className=\"flex flex-wrap items-center gap-2.5 md:shrink-0 md:justify-end\">{actions}</div> : null}\n </header>\n );\n}\n\n/* ── Stats ───────────────────────────────────────────────────────────── */\n\nconst InStatGrid = createContext(false);\n\nexport interface StatCardProps {\n label: ReactNode;\n value: ReactNode;\n hint?: ReactNode;\n /**\n * The number behind `value`, when there is one. StatGrid reads it: a grid\n * whose every `raw` is 0 or null shows one empty line instead of zeros.\n */\n raw?: number | null;\n className?: string;\n}\n\nexport function StatCard({ label, value, hint, className }: StatCardProps) {\n const inGrid = useContext(InStatGrid);\n return (\n <div\n data-ui=\"stat\"\n className={cn(\n 'rounded-[1.25rem] border border-border bg-card p-5 md:p-6',\n // In a grid, label, value and hint each share a row with their\n // neighbours, so values line up whatever wraps above them.\n inGrid ? 'row-span-3 grid grid-rows-subgrid gap-1.5' : 'flex flex-col gap-2',\n className\n )}\n >\n <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{label}</span>\n {/* Bottom-aligned within a grid row; a lone card keeps it under its label. */}\n <span\n className={cn(\n 'break-words oca-tabular text-[1.5rem] leading-tight tracking-[-0.02em] md:text-[1.75rem]',\n inGrid && 'self-end'\n )}\n >\n {value}\n </span>\n {hint ? (\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{hint}</span>\n ) : inGrid ? (\n <span aria-hidden />\n ) : null}\n </div>\n );\n}\n\nconst MD_COLS: Record<number, string> = {\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\nconst LG_COLS: Record<number, string> = {\n 1: 'lg:grid-cols-1',\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n 5: 'lg:grid-cols-5',\n};\nconst MD_SPAN: Record<number, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n};\nconst LG_SPAN: Record<number, string> = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n};\n\n/** Columns for n tiles: as few ragged rows as possible, never more than five. */\nfunction statColumns(n: number): number {\n if (n <= 5) return Math.max(1, n);\n if (n % 4 === 0) return 4;\n if (n % 3 === 0) return 3;\n return 4;\n}\n\n/** How wide the last tile must be to fill its row of `cols`. */\nfunction lastSpan(n: number, cols: number): number {\n const rest = n % cols;\n return rest === 0 ? 1 : cols - rest + 1;\n}\n\n/** One quiet line where a group of numbers would all be zero. */\nexport function EmptyLine({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <p\n className={cn(\n 'rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-5 py-4 text-[0.9375rem] text-muted-foreground',\n className\n )}\n >\n {children}\n </p>\n );\n}\n\nexport interface StatGridProps extends HTMLAttributes<HTMLDivElement> {\n /** Columns from md up. Default: the count up to 4, then 3 or 4. */\n columns?: 1 | 2 | 3 | 4 | 5;\n /** Shown instead of the tiles when the group is empty. */\n empty?: ReactNode;\n /** Force the empty line. Default: every child's `raw` is 0 or null. */\n isEmpty?: boolean;\n}\n\n/**\n * Stat tiles, two to a row on a phone. The last tile stretches to fill its row,\n * so a grid never ends in a hole, and a group of zeros becomes one line.\n */\nexport function StatGrid({ columns, empty, isEmpty, className, children, ...props }: StatGridProps) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<StatCardProps>[];\n const n = items.length;\n const allZero =\n n > 0 && items.every((el) => 'raw' in el.props && (el.props.raw === 0 || el.props.raw === null));\n if (isEmpty ?? allZero) return <EmptyLine className={className}>{empty ?? 'Nothing here yet.'}</EmptyLine>;\n const lg = columns ?? statColumns(n);\n // Five across is a desk-width row; a tablet gets three.\n const md = lg > 4 ? 3 : lg;\n const mdSpan = lastSpan(n, md);\n const lgSpan = lastSpan(n, lg);\n return (\n <InStatGrid.Provider value>\n <div\n className={cn(\n 'grid gap-3 md:gap-4',\n n === 1 ? 'grid-cols-1' : 'grid-cols-2',\n MD_COLS[md],\n LG_COLS[lg],\n className\n )}\n {...props}\n >\n {items.map((el, i) => {\n if (i !== n - 1) return el;\n const span = cn(\n n % 2 === 1 && n > 1 && 'max-md:col-span-2',\n (mdSpan > 1 || lgSpan > 1) && MD_SPAN[mdSpan],\n (mdSpan > 1 || lgSpan > 1) && LG_SPAN[lgSpan]\n );\n return span ? cloneElement(el, { className: cn(el.props.className, span) }) : el;\n })}\n </div>\n </InStatGrid.Provider>\n );\n}\n\n/* ── Key / value ─────────────────────────────────────────────────────── */\n\nexport interface KeyValueItem {\n label: ReactNode;\n value: ReactNode;\n mono?: boolean;\n}\n\nexport function KeyValueList({ items, className }: { items: KeyValueItem[]; className?: string }) {\n return (\n <dl className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((it, i) => (\n <div key={i} className=\"flex flex-col gap-1 px-5 py-3.5 sm:flex-row sm:items-baseline sm:gap-6\">\n <dt className=\"shrink-0 text-[0.875rem] text-muted-foreground sm:w-48\">{it.label}</dt>\n <dd className={cn('min-w-0 break-words text-[0.9375rem]', it.mono && 'font-mono text-[0.875rem]')}>\n {it.value}\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\n/* ── Table ───────────────────────────────────────────────────────────── */\n\nexport interface Column<T> {\n key: string;\n header: ReactNode;\n cell: (row: T) => ReactNode;\n align?: 'start' | 'end';\n /** A number: right-aligned, tabular, never wrapped. */\n numeric?: boolean;\n /** Hide below md in the table (the phone card list still shows it). */\n wide?: boolean;\n /** A CSS width for the column, e.g. '12rem' or '30%'. */\n width?: string;\n /** The narrowest it may get before the table scrolls instead. */\n minWidth?: string;\n /** Cut long content to one line (put the full value in a title or HashChip). */\n truncate?: boolean;\n /** The phone card's title. Defaults to the first column. */\n primary?: boolean;\n /** Leave out of the phone card list. */\n hideOnPhone?: boolean;\n}\n\n/**\n * Rows of data. Wider than its box, the table scrolls with an edge that says\n * so; under 640px it becomes a list of cards that keep every column's label.\n */\nexport function DataTable<T>({\n columns,\n rows,\n rowKey,\n empty,\n caption,\n phone = 'cards',\n className,\n}: {\n columns: Column<T>[];\n rows: T[];\n rowKey: (row: T, i: number) => string;\n empty?: ReactNode;\n caption?: string;\n /** Under 640px: a card per row (default), or the same table scrolling. */\n phone?: 'cards' | 'scroll';\n className?: string;\n}) {\n if (rows.length === 0 && empty) return <>{empty}</>;\n const primary = columns.find((c) => c.primary) ?? columns[0];\n const right = (c: Column<T>) => c.numeric || c.align === 'end';\n const table = (\n <div\n className={cn(\n 'overflow-hidden rounded-[1.25rem] border border-border bg-card',\n phone === 'cards' && 'max-sm:hidden',\n className\n )}\n >\n <ScrollFade fade=\"var(--card)\">\n <table className=\"w-full border-collapse text-left text-[0.9375rem]\">\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead>\n <tr className=\"border-b border-border\">\n {columns.map((c) => (\n <th\n key={c.key}\n scope=\"col\"\n style={{ width: c.width, minWidth: c.minWidth }}\n className={cn(\n 'whitespace-nowrap px-5 py-3 text-[0.8125rem] font-medium text-muted-foreground',\n right(c) && 'text-right',\n c.wide && 'hidden md:table-cell'\n )}\n >\n {c.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {rows.map((r, i) => (\n <tr key={rowKey(r, i)} className=\"transition-colors hover:bg-accent/60\">\n {columns.map((c) => (\n <td\n key={c.key}\n style={{ minWidth: c.minWidth }}\n className={cn(\n 'px-5 py-3.5 align-middle',\n right(c) && 'text-right',\n c.numeric && 'whitespace-nowrap oca-tabular',\n c.wide && 'hidden md:table-cell'\n )}\n >\n {c.truncate ? (\n <div className=\"truncate\" style={{ maxWidth: c.width ?? '16rem' }}>\n {c.cell(r)}\n </div>\n ) : (\n c.cell(r)\n )}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </ScrollFade>\n </div>\n );\n if (phone !== 'cards') return table;\n const rest = columns.filter((c) => c !== primary && !c.hideOnPhone);\n return (\n <>\n {table}\n <ul\n aria-label={caption}\n className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card sm:hidden', className)}\n >\n {rows.map((r, i) => (\n <li key={rowKey(r, i)} className=\"flex flex-col gap-2.5 px-4 py-4\">\n <div className=\"min-w-0 break-words text-[0.9375rem] font-medium\">{primary?.cell(r)}</div>\n {rest.length > 0 ? (\n <dl className=\"grid grid-cols-[minmax(5.5rem,auto)_minmax(0,1fr)] gap-x-4 gap-y-1.5 text-[0.875rem]\">\n {rest.map((c) => (\n <div key={c.key} className=\"contents\">\n <dt className=\"text-muted-foreground\">{c.header}</dt>\n <dd className={cn('min-w-0 break-words', c.numeric && 'oca-tabular')}>{c.cell(r)}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n </li>\n ))}\n </ul>\n </>\n );\n}\n\n/* ── Empty, notice ───────────────────────────────────────────────────── */\n\nexport function EmptyState({\n title,\n children,\n action,\n icon,\n className,\n}: {\n title: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n /** An icon that says what is missing. None by default: the words carry it. */\n icon?: ReactNode;\n className?: string;\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-3 rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-6 py-10 text-center',\n className\n )}\n >\n {icon ? (\n <span className=\"mb-1 flex size-11 items-center justify-center rounded-full bg-muted text-muted-foreground [&_svg]:size-5\">\n {icon}\n </span>\n ) : null}\n <h3 className=\"oca-title-sm\">{title}</h3>\n {children ? <div className=\"oca-body max-w-md text-[0.9375rem]\">{children}</div> : null}\n {action ? <div className=\"mt-2 flex flex-wrap justify-center gap-3\">{action}</div> : null}\n </div>\n );\n}\n\n/*\n * Three kinds of notice: neutral, the orange accent for something that needs\n * attention, and red for a real error. The old tone names still compile and\n * land on one of the three, so no page can add a fourth colour.\n */\ntype NoticeTone = 'neutral' | 'brand' | 'danger' | 'info' | 'success' | 'warning';\n\nconst NOTICE_KIND: Record<NoticeTone, 'neutral' | 'brand' | 'danger'> = {\n neutral: 'neutral',\n info: 'neutral',\n success: 'neutral',\n brand: 'brand',\n warning: 'brand',\n danger: 'danger',\n};\n\nexport function Notice({\n tone = 'neutral',\n title,\n children,\n action,\n className,\n}: {\n tone?: NoticeTone;\n title?: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n className?: string;\n}) {\n const kind = NOTICE_KIND[tone];\n return (\n <div\n role={tone === 'danger' || tone === 'warning' ? 'alert' : 'note'}\n data-tone={kind}\n className={cn(\n 'flex flex-col gap-3 rounded-2xl border border-border bg-card px-5 py-4 sm:flex-row sm:items-start sm:justify-between',\n kind === 'danger' && 'border-[color-mix(in_oklab,var(--destructive)_40%,var(--border))]',\n className\n )}\n >\n <div className=\"flex min-w-0 gap-3\">\n {kind !== 'neutral' ? (\n <span\n aria-hidden\n className={cn(\n 'mt-[0.45rem] size-2 shrink-0 rounded-full',\n kind === 'brand' ? 'bg-oca-orange' : 'bg-destructive'\n )}\n />\n ) : null}\n <div className=\"flex min-w-0 flex-col gap-1\">\n {title ? (\n <p className={cn('text-[0.9375rem] font-medium', kind === 'danger' && 'text-destructive')}>\n {title}\n </p>\n ) : null}\n {children ? <div className=\"text-[0.9375rem] leading-relaxed text-muted-foreground\">{children}</div> : null}\n </div>\n </div>\n {action ? <div className=\"shrink-0\">{action}</div> : null}\n </div>\n );\n}\n\n/**\n * Placeholder rows while something loads, and a way out if it never does:\n * after `timeoutMs` the skeleton turns into a message with a retry.\n */\nexport function LoadingBlock({\n rows = 3,\n timeoutMs = 12_000,\n onRetry,\n label = 'Loading',\n className,\n}: {\n rows?: number;\n timeoutMs?: number;\n onRetry?: () => void;\n label?: string;\n className?: string;\n}) {\n const timedOut = useTimedOut(true, timeoutMs);\n if (timedOut) {\n return (\n <Notice\n className={className}\n title=\"This is taking longer than it should.\"\n action={\n <Button size=\"sm\" variant=\"secondary\" onClick={onRetry ?? (() => window.location.reload())}>\n Try again\n </Button>\n }\n >\n Check your connection, then try again.\n </Notice>\n );\n }\n return (\n <div role=\"status\" aria-label={label} className={cn('flex flex-col gap-3', className)}>\n {Array.from({ length: rows }, (_, i) => (\n <Skeleton key={i} className=\"h-16 rounded-2xl\" />\n ))}\n </div>\n );\n}\n\n/* ── Hashes, addresses, ids ──────────────────────────────────────────── */\n\nfunction middle(v: string, head: number, tail: number) {\n return v.length <= head + tail + 1 ? v : `${v.slice(0, head)}…${v.slice(-tail)}`;\n}\n\nexport function useCopy(timeoutMs = 1600) {\n const [copied, setCopied] = useState(false);\n const t = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => () => {\n if (t.current) clearTimeout(t.current);\n }, []);\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n if (t.current) clearTimeout(t.current);\n t.current = setTimeout(() => setCopied(false), timeoutMs);\n } catch {\n setCopied(false);\n }\n },\n [timeoutMs]\n );\n return { copied, copy };\n}\n\nexport function CopyButton({ value, label = 'Copy', className }: { value: string; label?: string; className?: string }) {\n const { copied, copy } = useCopy();\n return (\n <button\n type=\"button\"\n onClick={() => void copy(value)}\n aria-label={copied ? 'Copied' : label}\n className={cn(\n 'inline-flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n {copied ? <Check className=\"size-4 text-success\" /> : <Copy className=\"size-4\" />}\n <span aria-live=\"polite\" className=\"sr-only\">\n {copied ? 'Copied' : ''}\n </span>\n </button>\n );\n}\n\n/** A long identifier shown as head…tail in mono, with copy. The full value is\n * the title and the copied text, never lost to the truncation. */\nexport function HashChip({\n value,\n head = 8,\n tail = 6,\n copy = true,\n href,\n className,\n}: {\n value: string;\n head?: number;\n tail?: number;\n copy?: boolean;\n href?: string;\n className?: string;\n}) {\n const shown = middle(value, head, tail);\n const text = (\n <span title={value} className=\"font-mono text-[0.875rem]\">\n {shown}\n </span>\n );\n return (\n <span className={cn('inline-flex max-w-full items-center gap-1', className)}>\n {href ? (\n <a href={href} className=\"underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\">\n {text}\n </a>\n ) : (\n text\n )}\n {copy ? <CopyButton value={value} label=\"Copy full value\" /> : null}\n </span>\n );\n}\n\n/* ── Progress ────────────────────────────────────────────────────────── */\n\nexport type StepState = 'done' | 'current' | 'upcoming' | 'blocked';\n\nexport interface ProgressStep {\n label: ReactNode;\n hint?: ReactNode;\n state: StepState;\n}\n\nexport function ProgressSteps({ steps, className }: { steps: ProgressStep[]; className?: string }) {\n return (\n <ol className={cn('flex flex-col gap-0', className)}>\n {steps.map((s, i) => {\n const last = i === steps.length - 1;\n return (\n <li key={i} className=\"relative flex gap-4 pb-6 last:pb-0\" aria-current={s.state === 'current' ? 'step' : undefined}>\n {!last ? (\n <span\n aria-hidden\n className={cn(\n 'absolute left-[11px] top-7 h-[calc(100%-1.5rem)] w-px',\n s.state === 'done' ? 'bg-foreground/30' : 'bg-border'\n )}\n />\n ) : null}\n <span\n className={cn(\n 'relative z-10 mt-0.5 flex size-6 shrink-0 items-center justify-center rounded-full border text-[0.75rem] oca-tabular',\n s.state === 'done' && 'border-primary bg-primary text-primary-foreground',\n s.state === 'current' && 'border-brand bg-card text-oca-accent-ink',\n s.state === 'upcoming' && 'border-border bg-card text-muted-foreground',\n s.state === 'blocked' && 'border-destructive bg-card text-destructive'\n )}\n >\n {s.state === 'done' ? <Check className=\"size-3.5\" strokeWidth={3} /> : String(i + 1).padStart(2, '0')}\n </span>\n <div className=\"flex min-w-0 flex-col gap-1\">\n <span className={cn('text-[0.9375rem]', s.state === 'upcoming' ? 'text-muted-foreground' : 'font-medium')}>\n {s.label}\n </span>\n {s.hint ? <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{s.hint}</span> : null}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n\n/* ── Activity ────────────────────────────────────────────────────────── */\n\nexport interface ActivityItem {\n id: string;\n title: ReactNode;\n meta?: ReactNode;\n /** A small mark before the text, such as a Monogram. */\n leading?: ReactNode;\n trailing?: ReactNode;\n href?: string;\n}\n\nexport function ActivityList({ items, empty, className }: { items: ActivityItem[]; empty?: ReactNode; className?: string }) {\n if (items.length === 0 && empty) return <>{empty}</>;\n return (\n <ul className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((it) => {\n const body = (\n <div className=\"flex items-center justify-between gap-4 px-5 py-4\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {it.leading ? <div className=\"shrink-0\">{it.leading}</div> : null}\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem]\">{it.title}</span>\n {it.meta ? <span className=\"truncate text-[0.8125rem] text-muted-foreground\">{it.meta}</span> : null}\n </div>\n </div>\n {it.trailing ? <div className=\"shrink-0 text-right\">{it.trailing}</div> : null}\n </div>\n );\n return (\n <li key={it.id}>\n {it.href ? (\n <a href={it.href} className=\"block transition-colors hover:bg-accent/60\">\n {body}\n </a>\n ) : (\n body\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n","import { useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { CopyButton } from './data';\n\n/*\n * The deck's \"What you get\" panel: a dark card of packages, each a peach title,\n * a coloured identifier and a // comment. The identifier's colour says what it\n * is, the way an editor would: a package, a component tag, a licence link.\n */\nexport interface PackageItem {\n title: ReactNode;\n /** The thing itself: an npm name, a JSX tag, a licence line. */\n code: ReactNode;\n kind?: 'package' | 'tag' | 'link';\n /** Rendered after `// `. */\n note?: ReactNode;\n href?: string;\n}\n\nconst KIND = {\n package: 'text-oca-code-package',\n tag: 'text-oca-code-tag',\n link: 'text-oca-code-link',\n} as const;\n\nexport function PackageCard({ items, className }: { items: PackageItem[]; className?: string }) {\n return (\n <div\n className={cn(\n 'grid gap-x-10 gap-y-7 rounded-[1.25rem] border border-oca-ink-line bg-oca-ink-card p-6 text-oca-ink-foreground md:grid-cols-2 md:p-9',\n className\n )}\n >\n {items.map((it, i) => {\n // Sou sets identifiers in the text face, not mono: they read as names here.\n const code = <span className={cn('text-[0.9375rem]', KIND[it.kind ?? 'package'])}>{it.code}</span>;\n return (\n <div key={i} className=\"flex min-w-0 flex-col gap-1.5\">\n <h3 className=\"text-[1.125rem] font-semibold tracking-[-0.01em] text-oca-ink-title\">{it.title}</h3>\n {it.href ? (\n <a href={it.href} className=\"w-fit underline decoration-transparent underline-offset-4 hover:decoration-current\">\n {code}\n </a>\n ) : (\n code\n )}\n {it.note ? (\n <p className=\"text-[0.9375rem] leading-relaxed text-oca-ink-subtle\">\n <span aria-hidden>{'// '}</span>\n {it.note}\n </p>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n}\n\n/**\n * A block of code: a header with its name and a copy button, then the code on\n * a dark well that scrolls sideways (with an edge that says so) rather than\n * cutting a line off. Past `maxLines` it folds, with a button to show the rest.\n */\nexport function CodeBlock({\n code,\n caption,\n copy = true,\n maxLines,\n className,\n}: {\n code: string;\n /** The file, language or purpose. Defaults to \"Code\". */\n caption?: ReactNode;\n copy?: boolean;\n maxLines?: number;\n className?: string;\n}) {\n const lines = code.split('\\n').length;\n const foldable = maxLines !== undefined && lines > maxLines + 2;\n const [open, setOpen] = useState(false);\n const folded = foldable && !open;\n return (\n <figure\n className={cn(\n 'overflow-hidden rounded-[1.25rem] border border-[var(--oca-code-line)] bg-[var(--oca-code-surface)]',\n className\n )}\n >\n <figcaption className=\"flex h-11 items-center justify-between gap-3 border-b border-[var(--oca-code-line)] pl-5 pr-2\">\n <span className=\"truncate text-[0.8125rem] text-oca-ink-subtle\">{caption ?? 'Code'}</span>\n {copy ? (\n <CopyButton\n value={code}\n label=\"Copy code\"\n className=\"text-oca-ink-subtle hover:bg-white/10 hover:text-white\"\n />\n ) : null}\n </figcaption>\n <div className=\"relative\">\n <div\n className={cn(folded && 'overflow-hidden')}\n style={folded ? { maxHeight: `calc(${maxLines} * 1.625em + 2.5rem)` } : undefined}\n >\n <ScrollFade fade=\"var(--oca-code-surface)\">\n <pre className=\"w-max min-w-full p-5 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]\">\n <code>{code}</code>\n </pre>\n </ScrollFade>\n </div>\n {foldable ? (\n <div\n className={cn(\n 'flex justify-center px-5 pb-4',\n folded && 'absolute inset-x-0 bottom-0 pt-16'\n )}\n style={\n folded\n ? { background: 'linear-gradient(to top, var(--oca-code-surface) 40%, transparent)' }\n : undefined\n }\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"rounded-full border border-white/20 px-4 py-1.5 text-[0.8125rem] text-white transition-colors hover:bg-white/10\"\n >\n {open ? 'Show less' : `Show all ${lines} lines`}\n </button>\n </div>\n ) : null}\n </div>\n </figure>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Where a payment goes, as one bar: each segment's width is its share. Made for\n * the orange band (\"What it costs\"), where ink and white both clear contrast.\n */\nexport interface SplitSegment {\n pct: number;\n label: ReactNode;\n tone?: 'ink' | 'card';\n}\n\nexport function SplitBar({\n segments,\n caption,\n className,\n}: {\n segments: SplitSegment[];\n caption?: ReactNode;\n className?: string;\n}) {\n return (\n <figure className={cn('flex flex-col gap-5', className)}>\n {caption ? <figcaption className=\"text-[0.9375rem]\">{caption}</figcaption> : null}\n <div className=\"flex h-16 w-full gap-1.5 overflow-hidden rounded-[1.25rem] md:h-20\">\n {segments.map((s, i) => (\n <div\n key={i}\n className={cn(\n 'flex min-w-[4.25rem] items-end rounded-[1rem] px-3 pb-2.5 md:px-4 md:pb-3',\n s.tone === 'card' ? 'bg-white text-oca-ink' : 'bg-oca-ink text-white'\n )}\n style={{ flexBasis: `${s.pct}%` }}\n >\n <span\n // One size for every figure, so they sit on one line; it fits a segment at its min width.\n className=\"oca-tabular text-[1.125rem] leading-none tracking-[-0.02em] md:text-[1.5rem]\"\n >\n {s.pct}%\n </span>\n </div>\n ))}\n </div>\n <dl className=\"grid gap-x-8 gap-y-2 sm:grid-cols-2\">\n {segments.map((s, i) => (\n <div key={i} className=\"flex items-baseline gap-2.5\">\n <dt className=\"sr-only\">{s.pct}%</dt>\n <span\n aria-hidden\n className={cn(\n 'inline-block size-2.5 shrink-0 translate-y-[-1px] rounded-full',\n s.tone === 'card' ? 'bg-white' : 'bg-oca-ink'\n )}\n />\n <dd className=\"text-[0.9375rem] leading-snug\">{s.label}</dd>\n </div>\n ))}\n </dl>\n </figure>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * \"What's true today.\" A two-column table: a status and what it covers. Sou's\n * note on the slide is the brief for this component: say it plainly; being\n * clear about what isn't done yet is part of the pitch. So the statuses are\n * fixed words, never icons, and a row cannot be written without one.\n */\nexport type TruthStatus = 'yes' | 'testing' | 'not-yet' | 'no';\n\nconst LABEL: Record<TruthStatus, string> = {\n yes: 'Yes',\n testing: 'In testing',\n 'not-yet': 'Not yet',\n no: 'No',\n};\n\nconst TONE: Record<TruthStatus, string> = {\n yes: 'text-oca-accent-ink',\n testing: 'text-foreground',\n 'not-yet': 'text-muted-foreground',\n no: 'text-muted-foreground',\n};\n\nexport interface TruthRow {\n status: TruthStatus;\n what: ReactNode;\n}\n\nexport function TruthTable({\n rows,\n statusHeading = 'Status',\n whatHeading = 'What',\n className,\n}: {\n rows: TruthRow[];\n statusHeading?: string;\n whatHeading?: string;\n className?: string;\n}) {\n return (\n <>\n {/* Under 640px a two-column table squeezes the text to a few words a\n line, so each row becomes a status over its sentence. */}\n <ul\n className={cn(\n 'divide-y divide-oca-hairline-strong overflow-hidden rounded-xl border border-oca-hairline-strong bg-card sm:hidden',\n className\n )}\n >\n {rows.map((r, i) => (\n <li key={i} className=\"flex flex-col gap-1.5 px-4 py-3.5\">\n <span className={cn('text-[0.875rem] font-medium', TONE[r.status])}>{LABEL[r.status]}</span>\n <span className=\"text-[0.9375rem] leading-relaxed\">{r.what}</span>\n </li>\n ))}\n </ul>\n <div className={cn('overflow-hidden rounded-xl border border-oca-hairline-strong max-sm:hidden', className)}>\n <table className=\"w-full border-collapse text-left text-[0.9375rem] md:text-[1rem]\">\n <thead className=\"bg-oca-table-head\">\n <tr>\n <th scope=\"col\" className=\"w-[30%] border-b border-oca-hairline-strong px-4 py-3 font-semibold md:w-[22%]\">\n {statusHeading}\n </th>\n <th scope=\"col\" className=\"border-b border-l border-oca-hairline-strong px-4 py-3 font-semibold\">\n {whatHeading}\n </th>\n </tr>\n </thead>\n <tbody className=\"bg-card\">\n {rows.map((r, i) => (\n <tr key={i} className=\"align-top\">\n <td\n className={cn(\n 'border-t border-oca-hairline-strong px-4 py-3 font-medium',\n i === 0 && 'border-t-0',\n TONE[r.status]\n )}\n >\n {LABEL[r.status]}\n </td>\n <td\n className={cn(\n 'border-l border-t border-oca-hairline-strong px-4 py-3 leading-relaxed',\n i === 0 && 'border-t-0'\n )}\n >\n {r.what}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </>\n );\n}\n","import type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Sats, always as whole integers with tabular figures. An amount nobody has\n * measured renders as \"—\" with \"unknown\" for screen readers, never as 0: a\n * missing balance shown as zero is a false statement about someone's money.\n */\n\nconst INT = new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 });\nconst COMPACT = new Intl.NumberFormat('en-US', { notation: 'compact', maximumFractionDigits: 1 });\n\nexport interface SatsTextOptions {\n /** Append \" sats\" (default) or nothing. */\n unit?: 'sats' | 'none';\n /** 1.2K, 3.4M. For dense tables and charts only. */\n compact?: boolean;\n /** Prefix + for positive amounts (credits). */\n signed?: boolean;\n}\n\n/** A sats amount as text. Returns null for an unknown amount. */\nexport function satsText(value: number | null | undefined, opts: SatsTextOptions = {}): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const whole = Math.trunc(value);\n const body = (opts.compact ? COMPACT : INT).format(Math.abs(whole));\n const sign = whole < 0 ? '−' : opts.signed && whole > 0 ? '+' : '';\n const unit = opts.unit === 'none' ? '' : whole === 1 || whole === -1 ? ' sat' : ' sats';\n return `${sign}${body}${unit}`;\n}\n\nexport interface SatsProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'>, SatsTextOptions {\n value: number | null | undefined;\n /** What to show for an unknown amount. */\n unknown?: string;\n}\n\nexport function Sats({ value, unit, compact, signed, unknown = '—', className, ...props }: SatsProps) {\n const text = satsText(value, { unit, compact, signed });\n if (text === null) {\n return (\n <span className={cn('oca-tabular text-muted-foreground', className)} {...props}>\n <span aria-hidden>{unknown}</span>\n <span className=\"sr-only\">unknown</span>\n </span>\n );\n }\n return (\n <span className={cn('oca-tabular whitespace-nowrap', className)} {...props}>\n {text}\n </span>\n );\n}\n\n/** \"≈ $12.34\" beside an amount, when a price is known. Renders nothing otherwise. */\nexport function UsdApprox({\n sats,\n usdPerBtc,\n className,\n}: {\n sats: number | null | undefined;\n usdPerBtc: number | null | undefined;\n className?: string;\n}) {\n if (sats == null || usdPerBtc == null || !Number.isFinite(sats) || !Number.isFinite(usdPerBtc)) return null;\n const usd = (sats / 1e8) * usdPerBtc;\n // Cents, never fractions of one: under half a cent says so instead of \"$0.0012\".\n const text =\n usd > 0 && usd < 0.005\n ? '< $0.01'\n : new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(usd);\n return <span className={cn('oca-tabular text-muted-foreground', className)}>≈ {text}</span>;\n}\n\n/** A large figure with its label: balances, totals. */\nexport function SatsFigure({\n label,\n value,\n hint,\n size = 'md',\n className,\n}: {\n label: string;\n value: number | null | undefined;\n hint?: React.ReactNode;\n /** lg: the figure a page leads with, well above the tiles beneath it. */\n size?: 'md' | 'lg';\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n <span className=\"text-[0.9375rem] text-muted-foreground\">{label}</span>\n <span\n className={cn(\n 'oca-tabular',\n size === 'lg'\n ? 'text-[clamp(3rem,2.2rem+3vw,4.75rem)] leading-[0.95] tracking-[-0.045em] [font-family:var(--oc-font-display)]'\n : 'oca-display-3'\n )}\n >\n <Sats value={value} unit=\"none\" />\n <span className=\"ml-2 text-[0.5em] tracking-normal text-muted-foreground\">sats</span>\n </span>\n {hint ? <span className=\"text-[0.875rem] text-muted-foreground\">{hint}</span> : null}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The product shown as an object: a phone, a browser window, a card floating\n * beside them. They hold real-looking UI drawn from the system's own parts, so\n * a page shows what a person will see instead of describing it.\n */\n\n/** A phone with an ink bezel and a rounded screen. Children are the screen. */\nexport function PhoneFrame({ className, style, children }: { className?: string; style?: CSSProperties; children: ReactNode }) {\n return (\n <div\n className={cn(\n // A lighter bezel in dark mode, or the phone dissolves into the page.\n 'relative w-[17.5rem] shrink-0 rounded-[2.9rem] bg-[#0b0b0c] p-[0.6rem] dark:bg-[#2a2a2d]',\n 'shadow-[0_50px_100px_-40px_rgb(10_10_10/0.55),0_0_0_1px_rgb(255_255_255/0.06)_inset]',\n className\n )}\n style={style}\n >\n <div className=\"relative aspect-[9/19.2] overflow-hidden rounded-[2.35rem] bg-background\">\n <div aria-hidden className=\"absolute left-1/2 top-2.5 z-10 h-[1.35rem] w-[5.6rem] -translate-x-1/2 rounded-full bg-[#0b0b0c]\" />\n {children}\n </div>\n </div>\n );\n}\n\n/** A browser window with its address. Children are the page. */\nexport function BrowserFrame({\n url = 'ochk.app',\n className,\n style,\n children,\n}: {\n url?: string;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}) {\n return (\n <div\n className={cn(\n 'overflow-hidden rounded-[1.1rem] border border-border bg-card',\n 'shadow-[0_40px_90px_-40px_rgb(10_10_10/0.45)]',\n className\n )}\n style={style}\n >\n <div className=\"flex h-10 items-center gap-3 border-b border-border px-4\">\n <div aria-hidden className=\"flex gap-1.5\">\n <span className=\"size-2.5 rounded-full bg-[#ff5f57]\" />\n <span className=\"size-2.5 rounded-full bg-[#febc2e]\" />\n <span className=\"size-2.5 rounded-full bg-[#28c840]\" />\n </div>\n <div className=\"mx-auto flex h-6 min-w-0 max-w-[60%] flex-1 items-center justify-center rounded-md bg-muted px-3 text-[0.75rem] text-muted-foreground\">\n <span className=\"truncate\">{url}</span>\n </div>\n <span aria-hidden className=\"w-[2.6rem]\" />\n </div>\n <div className=\"relative\">{children}</div>\n </div>\n );\n}\n\n/** A small card that floats beside a picture: one fact, with an icon. */\nexport function FloatChip({\n icon,\n title,\n detail,\n delay = 0,\n className,\n style,\n}: {\n icon?: ReactNode;\n title: ReactNode;\n detail?: ReactNode;\n /** Seconds to offset the drift, so neighbours do not move in step. */\n delay?: number;\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <div\n className={cn(\n 'oca-animate-drift flex items-center gap-3 rounded-2xl border border-border bg-card/90 py-2.5 pl-2.5 pr-4 backdrop-blur-md',\n 'shadow-[0_24px_50px_-24px_rgb(10_10_10/0.35)]',\n className\n )}\n style={{ animationDelay: `${-delay}s`, ...style }}\n >\n {icon ? (\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-xl bg-muted text-foreground [&_svg]:size-4\">\n {icon}\n </span>\n ) : null}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"text-[0.875rem] font-medium leading-tight\">{title}</span>\n {detail ? <span className=\"text-[0.8125rem] leading-tight text-muted-foreground\">{detail}</span> : null}\n </span>\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A project, app or site as a tile: its first letter on one of the deck's three\n * grounds, under a faint dot screen. The ground is picked from the seed, so the\n * same thing keeps the same tile everywhere it appears.\n */\n\nconst GROUNDS = [\n {\n className: 'text-oca-ink',\n background: 'linear-gradient(145deg, var(--oca-orange-light), var(--oca-orange-deep))',\n dot: 'rgb(10 10 10 / 0.22)',\n },\n {\n // Lifted at the top edge so the tile keeps its shape on a dark card.\n className: 'text-white ring-1 ring-inset ring-white/15',\n background: 'linear-gradient(145deg, #3d3d3d, #0d0d0d 70%)',\n dot: 'rgb(255 255 255 / 0.16)',\n },\n {\n className: 'text-oca-ink',\n background: 'linear-gradient(145deg, #fff1df, var(--oca-peach))',\n dot: 'rgb(234 88 11 / 0.22)',\n },\n] as const;\n\nconst SIZES = {\n sm: 'size-9 rounded-[0.7rem] text-[0.9375rem]',\n md: 'size-11 rounded-[0.85rem] text-[1.125rem]',\n lg: 'size-14 rounded-[1.05rem] text-[1.5rem]',\n} as const;\n\n/** The letter a name is known by: its first letter or digit, upper-cased. */\nexport function monogramLetter(name: string): string {\n const match = name.match(/[\\p{L}\\p{N}]/u);\n return match ? match[0].toLocaleUpperCase() : '·';\n}\n\n/** Which ground a seed lands on: FNV-1a, so it is stable across renders and builds. */\nexport function monogramGround(seed: string): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < seed.length; i++) {\n h ^= seed.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0) % GROUNDS.length;\n}\n\nexport function Monogram({\n name,\n seed,\n size = 'md',\n className,\n style,\n}: {\n name: string;\n /** What keeps the tile stable, such as a project key or a domain. Defaults to the name. */\n seed?: string;\n size?: keyof typeof SIZES;\n className?: string;\n style?: CSSProperties;\n}) {\n const ground = GROUNDS[monogramGround(seed ?? name)] ?? GROUNDS[0];\n return (\n <span\n aria-hidden\n className={cn(\n 'relative inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold leading-none tracking-[-0.02em]',\n SIZES[size],\n ground.className,\n className\n )}\n style={{ background: ground.background, ...style }}\n >\n <span\n className=\"absolute inset-0\"\n style={{\n backgroundImage: `radial-gradient(circle, ${ground.dot} 0.9px, transparent 1.2px)`,\n backgroundSize: '6px 6px',\n maskImage: 'radial-gradient(90% 90% at 100% 100%, black, transparent 75%)',\n }}\n />\n <span className=\"relative\">{monogramLetter(name)}</span>\n </span>\n );\n}\n","'use client';\n\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\n\nimport { Button } from '../primitives/button';\nimport { EmptyState } from './data';\n\ninterface Props {\n children: ReactNode;\n /** Changing it clears a caught error, so the next page renders afresh. Pass the route. */\n resetKey?: unknown;\n /** Told about each caught error, for logging. */\n onError?: (error: Error, info: ErrorInfo) => void;\n /** Replaces the default message. */\n fallback?: (reset: () => void) => ReactNode;\n}\n\ninterface State {\n failed: boolean;\n key: unknown;\n}\n\n/**\n * Keeps one broken part of a page from blanking the whole page. The default\n * says so in a sentence and offers a retry and a reload.\n */\nexport class ErrorBoundary extends Component<Props, State> {\n state: State = { failed: false, key: this.props.resetKey };\n\n static getDerivedStateFromError(): Partial<State> {\n return { failed: true };\n }\n\n static getDerivedStateFromProps(props: Props, state: State): Partial<State> | null {\n return props.resetKey === state.key ? null : { failed: false, key: props.resetKey };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n this.props.onError?.(error, info);\n }\n\n reset = (): void => this.setState({ failed: false });\n\n render(): ReactNode {\n if (!this.state.failed) return this.props.children;\n if (this.props.fallback) return this.props.fallback(this.reset);\n return (\n <div className=\"oca-container py-16\">\n <EmptyState\n title=\"Something on this page broke.\"\n action={\n <>\n <Button onClick={this.reset}>Try again</Button>\n <Button variant=\"secondary\" onClick={() => window.location.reload()}>\n Reload the page\n </Button>\n </>\n }\n >\n Nothing you saved is affected. If it keeps happening, tell us at hello@ochk.io.\n </EmptyState>\n </div>\n );\n }\n}\n","import { Menu } from 'lucide-react';\nimport Link from 'next/link';\nimport { useState, type ReactNode } from 'react';\n\nimport { Lockup, Mark } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { Sheet, SheetContent, SheetTitle, SheetTrigger } from '../primitives/overlay';\n\nexport interface NavItem {\n href: string;\n label: ReactNode;\n /** Marks the current section for styling and aria-current. */\n active?: boolean;\n external?: boolean;\n}\n\nfunction NavLink({ item, className, onNavigate }: { item: NavItem; className?: string; onNavigate?: () => void }) {\n const cls = cn(\n 'rounded-full px-3 py-2 text-[0.9375rem] transition-colors',\n item.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground',\n className\n );\n if (item.external) {\n return (\n <a href={item.href} className={cls} rel=\"noreferrer\" onClick={onNavigate}>\n {item.label}\n </a>\n );\n }\n return (\n <Link href={item.href} className={cls} aria-current={item.active ? 'page' : undefined} onClick={onNavigate}>\n {item.label}\n </Link>\n );\n}\n\n/**\n * The public header: lockup, a few words of navigation, actions on the right.\n * Below md the navigation moves into a sheet; the actions stay.\n */\nexport function SiteHeader({\n home = '/',\n brand,\n nav = [],\n actions,\n className,\n}: {\n home?: string;\n brand?: ReactNode;\n nav?: NavItem[];\n actions?: ReactNode;\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n return (\n <header\n className={cn(\n 'sticky top-0 z-40 w-full border-b border-transparent bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/70',\n className\n )}\n >\n <div\n className={cn(\n 'oca-container flex h-16 items-center justify-between gap-4 md:h-[4.5rem]',\n // Three columns, the outer two each at least their content: the\n // navigation stays centred whatever the actions hold, so it does\n // not shift when they change (signed out to signed in).\n nav.length > 0 &&\n 'md:grid md:grid-cols-[minmax(max-content,1fr)_auto_minmax(max-content,1fr)]'\n )}\n >\n <Link href={home} className=\"-ml-1 justify-self-start rounded-lg p-1\">\n {brand ?? <Lockup size={28} />}\n {/* Read as \"orangecheck home\": the name starts with what the link shows. */}\n <span className=\"sr-only\"> home</span>\n </Link>\n {nav.length > 0 ? (\n <nav aria-label=\"Main\" className=\"hidden items-center gap-1 md:flex\">\n {nav.map((n) => (\n <NavLink key={n.href} item={n} />\n ))}\n </nav>\n ) : null}\n <div className=\"flex items-center gap-2 justify-self-end\">\n {actions}\n {nav.length > 0 ? (\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger\n className=\"inline-flex size-10 items-center justify-center rounded-full text-foreground hover:bg-accent md:hidden\"\n aria-label=\"Open menu\"\n >\n <Menu className=\"size-5\" />\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"pt-16\">\n <SheetTitle className=\"sr-only\">Menu</SheetTitle>\n <nav aria-label=\"Main\" className=\"flex flex-col\">\n {nav.map((n) => (\n <NavLink\n key={n.href}\n item={n}\n className=\"rounded-xl px-3 py-3 text-[1.0625rem]\"\n onNavigate={() => setOpen(false)}\n />\n ))}\n </nav>\n </SheetContent>\n </Sheet>\n ) : null}\n </div>\n </div>\n </header>\n );\n}\n\nexport interface FooterColumn {\n heading: string;\n links: NavItem[];\n}\n\n/**\n * The footer, in the deck's register: a line of fine print, the support credit,\n * and a few columns of links. Links are 44px tall on phones.\n */\nexport function SiteFooter({\n columns = [],\n fineprint,\n meta,\n signature = true,\n className,\n}: {\n columns?: FooterColumn[];\n fineprint?: ReactNode;\n meta?: ReactNode;\n /** The mark and wordmark at display size, closing the page. */\n signature?: boolean;\n className?: string;\n}) {\n return (\n <footer className={cn('border-t border-border bg-background', className)}>\n <div className=\"oca-container grid grid-cols-2 gap-x-6 gap-y-10 py-14 md:grid-cols-[1.3fr_repeat(3,1fr)] md:py-16\">\n <div className=\"col-span-2 flex flex-col gap-4 md:col-span-1\">\n <Lockup size={26} />\n {fineprint ? <p className=\"max-w-xs text-[0.9375rem] leading-relaxed text-muted-foreground\">{fineprint}</p> : null}\n </div>\n {columns.map((col, i) => {\n // On a phone an odd last column takes the whole row, its links in two\n // columns, instead of sitting alone beside an empty half.\n const spans = columns.length % 2 === 1 && i === columns.length - 1;\n return (\n <div\n key={col.heading}\n className={cn('flex min-w-0 flex-col gap-1', spans && 'col-span-2 md:col-span-1')}\n >\n <p className=\"mb-2 text-[0.875rem] font-medium\">{col.heading}</p>\n <div className={cn('flex flex-col gap-1', spans && 'grid grid-cols-2 gap-x-6 md:flex md:flex-col')}>\n {col.links.map((l) => (\n <NavLink\n key={l.href}\n item={l}\n className=\"-mx-3 py-2.5 text-[0.9375rem] md:py-1.5\"\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n {signature ? (\n <div aria-hidden className=\"oca-container select-none overflow-hidden pb-8 md:pb-12\">\n <div className=\"flex items-end gap-[0.18em] text-[clamp(3rem,11.5vw,10rem)] leading-[0.78] tracking-[-0.065em] [font-family:var(--oc-font-display)]\">\n <span className=\"mb-[0.06em] inline-block w-[1.1em] shrink-0\">\n <Mark className=\"block h-auto w-full\" />\n </span>\n <span>orangecheck</span>\n </div>\n </div>\n ) : null}\n {meta ? (\n <div className=\"oca-container\">\n {/* The rule spans the content, not the gutters. */}\n <div className=\"border-t border-border py-6 text-[0.875rem] text-muted-foreground\">{meta}</div>\n </div>\n ) : null}\n </footer>\n );\n}\n","import { ChevronRight, Menu, Moon, Sun, SunMoon } from 'lucide-react';\nimport Link from 'next/link';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useMemo, useState, type ReactNode } from 'react';\n\nimport { Lockup } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { ShellContext } from '../lib/shell-context';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Sheet,\n SheetContent,\n SheetTitle,\n SheetTrigger,\n} from '../primitives/overlay';\n\nexport interface ShellNavItem {\n href: string;\n label: string;\n icon?: ReactNode;\n active?: boolean;\n /** A count or a dot beside the label (unread, needs attention). */\n badge?: ReactNode;\n}\n\nexport interface ShellNavGroup {\n /** Omit for the first, unlabeled group. */\n label?: string;\n items: ShellNavItem[];\n}\n\n/**\n * A part of the app with its own pages: \"You\", \"Build\", \"Operate\", \"Admin\".\n * The sidebar lists one section's pages at a time, under a switcher.\n */\nexport interface ShellSection {\n id: string;\n /** Short, for the switcher: one word. */\n label: string;\n /** The section's eyebrow on its pages; defaults to `label`. */\n title?: string;\n /** Where the switcher goes: the section's first page. */\n href: string;\n groups: ShellNavGroup[];\n}\n\nfunction SideNav({ groups, onNavigate }: { groups: ShellNavGroup[]; onNavigate?: () => void }) {\n return (\n <nav aria-label=\"Pages\" className=\"flex flex-col gap-5\">\n {groups.map((g, gi) => (\n <div key={g.label ?? gi} className=\"flex flex-col gap-0.5\">\n {g.label ? <p className=\"px-3 pb-1 text-[0.8125rem] text-muted-foreground\">{g.label}</p> : null}\n {g.items.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n onClick={onNavigate}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex h-9 items-center gap-3 rounded-xl px-3 text-[0.9375rem] transition-colors',\n '[&_svg]:size-[1.0625rem] [&_svg]:shrink-0',\n it.active\n ? 'bg-card text-foreground shadow-sm ring-1 ring-border [&_svg]:text-foreground'\n : 'text-muted-foreground hover:bg-accent hover:text-foreground'\n )}\n >\n {it.icon}\n <span className=\"min-w-0 flex-1 truncate\">{it.label}</span>\n {it.badge ? <span className=\"shrink-0\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n ))}\n </nav>\n );\n}\n\nfunction SectionSwitch({\n sections,\n current,\n onNavigate,\n}: {\n sections: ShellSection[];\n current: ShellSection;\n onNavigate?: () => void;\n}) {\n // Up to three fit one row of the sidebar; four go two by two, so no label\n // is ever cut short.\n const cols = sections.length <= 3 ? sections.length : 2;\n return (\n <nav\n aria-label=\"Sections\"\n className={cn('grid gap-1 bg-muted p-1', cols === sections.length ? 'rounded-full' : 'rounded-[1.25rem]')}\n style={{ gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))` }}\n >\n {sections.map((sec) => {\n const on = sec.id === current.id;\n return (\n <Link\n key={sec.id}\n href={sec.href}\n onClick={onNavigate}\n aria-current={on ? 'true' : undefined}\n className={cn(\n 'flex h-8 min-w-0 items-center justify-center rounded-full px-1.5 text-[0.8125rem] font-medium transition-colors',\n on ? 'bg-card text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span className=\"truncate\">{sec.label}</span>\n </Link>\n );\n })}\n </nav>\n );\n}\n\nconst activeItem = (groups: ShellNavGroup[]) => groups.flatMap((g) => g.items).find((it) => it.active);\n\n// Bundlers replace process.env.NODE_ENV; the typeof guard covers one that doesn't.\ndeclare const process: { env: { NODE_ENV?: string } } | undefined;\n\nconst warned = new Set<string>();\n\nfunction warnDuplicateLabels(groups: ShellNavGroup[]) {\n if (typeof process === 'undefined' || process.env.NODE_ENV === 'production') return;\n const seen = new Set<string>();\n for (const it of groups.flatMap((g) => g.items)) {\n if (seen.has(it.label) && !warned.has(it.label)) {\n warned.add(it.label);\n console.warn(`AppShell: two pages are labelled \"${it.label}\"; give each its own name.`);\n }\n seen.add(it.label);\n }\n}\n\n/**\n * The signed-in frame: a quiet sidebar on the canvas, content on the right.\n *\n * Give it `sections` and the sidebar shows a switcher (only when there is more\n * than one) and the current section's pages, so it never outgrows the screen;\n * `persistent` groups (Account) follow every section. The section is the one\n * holding an active item, or `activeSection`. On phones a top bar carries the\n * wordmark and the account, a strip under it names the section and page, and\n * the sidebar opens as a sheet. `nav` (flat groups) still works for a simple\n * app. Pages get the section through context: PageHeader uses it as its\n * eyebrow. The account control and any banner are slots.\n */\nexport function AppShell({\n nav,\n sections,\n activeSection,\n page: pageOverride,\n persistent = [],\n home = '/',\n account,\n banner,\n footer,\n children,\n className,\n}: {\n /** Flat groups, for an app without sections. */\n nav?: ShellNavGroup[];\n sections?: ShellSection[];\n activeSection?: string;\n /** The page's name for the place strip, when it is not a nav item of its own. */\n page?: string;\n /** Groups shown under every section, after its own. */\n persistent?: ShellNavGroup[];\n home?: string;\n account?: ReactNode;\n banner?: ReactNode;\n footer?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n const current =\n sections && sections.length > 0\n ? (sections.find((sec) => sec.id === activeSection) ??\n sections.find((sec) => activeItem(sec.groups)) ??\n sections[0]!)\n : undefined;\n const groups = current ? [...current.groups, ...persistent] : [...(nav ?? []), ...persistent];\n warnDuplicateLabels(groups);\n const page = activeItem(groups);\n const place = useMemo(\n () => ({\n section: current ? (current.title ?? current.label) : undefined,\n page: pageOverride ?? page?.label,\n }),\n [current, page?.label, pageOverride]\n );\n const switcher =\n sections && current && sections.length > 1 ? (\n <SectionSwitch sections={sections} current={current} onNavigate={() => setOpen(false)} />\n ) : null;\n return (\n <ShellContext.Provider value={place}>\n <div className={cn('min-h-dvh bg-background', className)}>\n <div className=\"sticky top-0 z-40 border-b border-border bg-background/90 backdrop-blur-md lg:hidden\">\n <div className=\"flex h-14 items-center gap-2 px-3\">\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger\n className=\"inline-flex size-10 items-center justify-center rounded-full hover:bg-accent\"\n aria-label=\"Open navigation\"\n >\n <Menu className=\"size-5\" />\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"flex flex-col gap-6 overflow-y-auto p-4 pt-16\">\n <SheetTitle className=\"sr-only\">Navigation</SheetTitle>\n {switcher}\n <SideNav groups={groups} onNavigate={() => setOpen(false)} />\n {footer ? <div className=\"mt-auto flex flex-col gap-3\">{footer}</div> : null}\n </SheetContent>\n </Sheet>\n <Link href={home} aria-label=\"Home\" className=\"rounded-lg p-1\">\n <Lockup size={22} />\n </Link>\n <div className=\"ml-auto flex items-center\">{account}</div>\n </div>\n {place.page ? (\n <div className=\"flex h-9 items-center gap-1.5 border-t border-border px-4 text-[0.875rem]\">\n {place.section ? (\n <>\n <span className=\"shrink-0 text-muted-foreground\">{place.section}</span>\n <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-muted-foreground\" />\n </>\n ) : null}\n <span className=\"truncate font-medium\">{place.page}</span>\n </div>\n ) : null}\n </div>\n <div className=\"mx-auto flex w-full max-w-[90rem]\">\n <aside className=\"sticky top-0 hidden h-dvh w-[17rem] shrink-0 flex-col gap-6 overflow-y-auto px-4 py-6 lg:flex\">\n <Link href={home} className=\"px-2\" aria-label=\"Home\">\n <Lockup size={26} />\n </Link>\n {switcher}\n <SideNav groups={groups} />\n <div className=\"mt-auto flex flex-col gap-3\">{footer}</div>\n </aside>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"hidden h-[4.5rem] items-center justify-end gap-3 px-8 lg:flex\">{account}</div>\n {banner ? <div className=\"px-4 pb-2 pt-4 md:px-8 lg:pt-0\">{banner}</div> : null}\n <main id=\"main-content\" className=\"flex-1 px-4 pb-16 pt-6 md:px-8 lg:pt-2\">\n {/* One width for every signed-in page. */}\n <div className=\"mx-auto w-full max-w-[72rem]\">{children}</div>\n </main>\n </div>\n </div>\n </div>\n </ShellContext.Provider>\n );\n}\n\nexport interface AccountMenuItem {\n label: string;\n href?: string;\n onSelect?: () => void;\n icon?: ReactNode;\n destructive?: boolean;\n}\n\n/** The account button: initial + short id, a menu of items. */\nexport function AccountMenu({\n name,\n detail,\n items,\n}: {\n name: string;\n /** A second line: the short did, an address. */\n detail?: string;\n items: (AccountMenuItem | 'separator')[];\n}) {\n const initial = name.trim().charAt(0).toUpperCase() || '·';\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className=\"inline-flex h-10 items-center gap-2.5 rounded-full border border-border bg-card pl-1 pr-1 text-[0.9375rem] outline-none transition-colors hover:border-oca-hairline-strong focus-visible:ring-2 focus-visible:ring-ring sm:pr-3.5\"\n aria-label={`Account: ${name}`}\n >\n <span className=\"flex size-8 items-center justify-center rounded-full bg-foreground text-[0.8125rem] font-medium text-background\">\n {initial}\n </span>\n <span className=\"max-w-[10rem] truncate max-sm:hidden\">{name}</span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64\">\n <DropdownMenuLabel className=\"flex flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem] font-medium text-foreground\">{name}</span>\n {detail ? <span className=\"truncate font-mono text-[0.75rem]\">{detail}</span> : null}\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {items.map((it, i) =>\n it === 'separator' ? (\n <DropdownMenuSeparator key={`sep-${i}`} />\n ) : it.href ? (\n <DropdownMenuItem key={it.label} asChild destructive={it.destructive}>\n <Link href={it.href}>\n {it.icon}\n {it.label}\n </Link>\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem key={it.label} onSelect={it.onSelect} destructive={it.destructive}>\n {it.icon}\n {it.label}\n </DropdownMenuItem>\n )\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n/** Light, dark, or follow the system: one button that cycles. */\nexport function ThemeToggle({ className }: { className?: string }) {\n const { theme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n const current = mounted ? (theme ?? 'system') : 'system';\n const next = current === 'light' ? 'dark' : current === 'dark' ? 'system' : 'light';\n const Icon = current === 'light' ? Sun : current === 'dark' ? Moon : SunMoon;\n return (\n <button\n type=\"button\"\n onClick={() => setTheme(next)}\n aria-label={`Theme: ${current}. Switch to ${next}`}\n title={`Theme: ${current}`}\n className={cn(\n 'inline-flex size-10 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n <Icon className=\"size-[1.125rem]\" />\n </button>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/tokens/index.ts","../src/lib/cn.ts","../src/primitives/feedback.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/card.tsx","../src/primitives/form.tsx","../src/primitives/overlay.tsx","../src/primitives/scroll-fade.tsx","../src/primitives/tabs.tsx","../src/brand/mark.tsx","../src/brand/portrait-tone.ts","../src/brand/halftone-canvas.tsx","../src/brand/sphere.tsx","../src/brand/iso-check.tsx","../src/brand/crowd.tsx","../src/components/typography.tsx","../src/components/motion.tsx","../src/components/section.tsx","../src/components/hero.tsx","../src/components/steps.tsx","../src/lib/shell-context.ts","../src/components/data.tsx","../src/components/code-card.tsx","../src/components/split-bar.tsx","../src/components/truth-table.tsx","../src/components/money.tsx","../src/components/frames.tsx","../src/components/monogram.tsx","../src/components/error-boundary.tsx","../src/chrome/site.tsx","../src/chrome/app-shell.tsx"],"names":["extendTailwindMerge","clsx","jsxs","jsx","useState","useEffect","forwardRef","Separator","SeparatorPrimitive","SonnerToaster","cva","Button","Slot","Fragment","Card","Input","Textarea","Label","LabelPrimitive","useId","isValidElement","cloneElement","SelectPrimitive","SelectTrigger","ChevronDown","SelectContent","SelectItem","Check","Checkbox","CheckboxPrimitive","Switch","SwitchPrimitive","RadioGroup","RadioGroupPrimitive","RadioGroupItem","DialogPrimitive","DialogContent","X","DialogTitle","DialogDescription","SheetContent","PopoverPrimitive","PopoverContent","TooltipPrimitive","TooltipContent","DropdownMenuPrimitive","DropdownMenuContent","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","useRef","useCallback","createContext","Tabs","TabsPrimitive","TabsList","useContext","TabsTrigger","TabsContent","createElement","Children","Copy","Component","Link","Menu","useMemo","ChevronRight","useTheme","Icon","Sun","Moon","SunMoon"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * The ochk.app palette as data, for places CSS variables cannot reach: OG\n * images, canvas, charts, email. Must match styles/tokens.css; the contrast\n * check reads both.\n */\nexport const APP_ATTRIBUTE = 'data-oc-app';\nexport const APP_ID = 'ochk';\n\nexport const appColors = {\n light: {\n background: '#FAFAFA',\n foreground: '#0A0A0A',\n card: '#FFFFFF',\n muted: '#F2F2F2',\n mutedForeground: '#54585E',\n subtleForeground: '#686C72',\n border: '#ECECEC',\n hairlineStrong: '#DADADA',\n accentDisplay: '#F55819',\n accentInk: '#C73F09',\n },\n dark: {\n background: '#0A0A0A',\n foreground: '#FAFAFA',\n card: '#161616',\n muted: '#1E1E1E',\n mutedForeground: '#A3A6AA',\n subtleForeground: '#8B8E93',\n border: '#262626',\n hairlineStrong: '#333333',\n accentDisplay: '#F66D36',\n accentInk: '#F0835A',\n },\n brand: {\n orange: '#F66D36',\n orangeLight: '#FB933C',\n orangeDeep: '#EA580B',\n peach: '#FED8AB',\n ink: '#0A0A0A',\n inkCard: '#1E1E1E',\n },\n} as const;\n\nexport const appFonts = {\n sans: \"'OCA Inter', 'OCA Inter Fallback', ui-sans-serif, system-ui, sans-serif\",\n mono: \"'OCA JetBrains Mono', 'OCA JetBrains Mono Fallback', ui-monospace, monospace\",\n} as const;\n","import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\n// tailwind-merge would treat `oca-display-1` and `text-foreground` as the same\n// group and drop one; teach it the package's own type utilities.\nconst merge = extendTailwindMerge<'oca-type'>({\n extend: {\n classGroups: {\n 'oca-type': [\n 'oca-display-1',\n 'oca-display-2',\n 'oca-display-3',\n 'oca-title',\n 'oca-title-sm',\n 'oca-eyebrow',\n 'oca-lead',\n 'oca-body',\n 'oca-numeral',\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]): string {\n return merge(clsx(inputs));\n}\n","import * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner';\n\nimport { cn } from '../lib/cn';\n\nexport function Spinner({ className, label }: { className?: string; label?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn('size-4 animate-spin', className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.2\" strokeWidth=\"2.5\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** A placeholder bar, visible on the canvas and on a card in both modes. */\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-ui=\"skeleton\"\n className={cn('animate-pulse rounded-lg bg-[var(--oca-skeleton)]', className)}\n {...props}\n />\n );\n}\n\n/**\n * True once `active` has stayed true for `ms`. A loading state that never\n * ends reads as a broken page; pass this to show a way out instead.\n */\nexport function useTimedOut(active: boolean, ms = 12_000): boolean {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n if (!active) {\n setTimedOut(false);\n return;\n }\n const t = setTimeout(() => setTimedOut(true), ms);\n return () => clearTimeout(t);\n }, [active, ms]);\n return timedOut;\n}\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = 'horizontal', decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className\n )}\n {...props}\n />\n );\n});\n\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border bg-card px-1.5 font-mono text-[11px] text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Live-region status dot: a calm pulse for \"running\", solid otherwise. */\nexport function StatusDot({\n tone = 'neutral',\n pulse = false,\n className,\n}: {\n tone?: 'neutral' | 'success' | 'warning' | 'danger' | 'brand';\n pulse?: boolean;\n className?: string;\n}) {\n const color = {\n neutral: 'bg-oca-subtle',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n brand: 'bg-brand',\n }[tone];\n return (\n <span\n aria-hidden\n className={cn('inline-block size-2 shrink-0 rounded-full', color, pulse && 'oca-animate-pulse-dot', className)}\n />\n );\n}\n\n/** Toasts in the system's type and surfaces. Mount once. */\nexport function Toaster(props: ToasterProps) {\n return (\n <SonnerToaster\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast: 'oca-toast rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg font-sans',\n title: 'text-[0.9375rem] font-medium',\n description: 'text-sm text-muted-foreground',\n actionButton: 'rounded-full bg-primary text-primary-foreground',\n cancelButton: 'rounded-full bg-muted text-foreground',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from 'sonner';\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Spinner } from './feedback';\n\n/*\n * Pills, as the deck draws them: the black filled pill leads, the white\n * outlined pill follows. `brand` is for the orange band only; `onInk` and\n * `onInkOutline` are the same pair inverted for dark bands.\n */\nexport const buttonVariants = cva(\n [\n 'inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-150',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'active:translate-y-px disabled:pointer-events-none',\n // Disabled is one look for every variant: a quiet grey pill, never a\n // faded black or orange slab that reads as broken.\n 'disabled:border disabled:border-border disabled:bg-muted disabled:text-oca-subtle disabled:shadow-none',\n '[&_svg]:pointer-events-none [&_svg]:size-[1.1em] [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85',\n secondary:\n 'border border-border bg-secondary text-secondary-foreground hover:border-oca-hairline-strong hover:bg-accent',\n brand: 'bg-brand text-brand-foreground hover:bg-oca-orange-deep',\n ghost: 'text-foreground hover:bg-accent',\n danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'h-auto rounded-none px-0 text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground',\n onInk: 'bg-white text-oca-ink hover:bg-white/90',\n onInkOutline: 'border border-white/20 text-white hover:bg-white/10',\n },\n size: {\n sm: 'h-9 px-4 text-sm',\n md: 'h-11 px-5 text-[0.9375rem]',\n lg: 'h-14 px-7 text-[1.0625rem]',\n icon: 'size-10',\n 'icon-sm': 'size-8',\n },\n },\n compoundVariants: [{ variant: 'link', className: 'h-auto px-0' }],\n defaultVariants: { variant: 'primary', size: 'md' },\n }\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Render the child element (a Link, an <a>) with the button's styles. */\n asChild?: boolean;\n /** Shows a spinner and disables the button. */\n loading?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { className, variant, size, asChild = false, loading = false, disabled, children, type, ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n data-ui=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={asChild ? undefined : disabled || loading}\n aria-busy={loading || undefined}\n type={asChild ? undefined : (type ?? 'button')}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner className=\"size-[1.1em]\" /> : null}\n {children}\n </>\n )}\n </Comp>\n );\n});\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The small white pill from the deck (\"in testing\", \"on the path\"). Three tones\n * carry meaning: neutral, the orange accent for attention, and red for a real\n * error. Text stays on the token that clears 4.5:1 against its tint.\n */\nconst GOOD_DOT =\n \"border-border bg-card text-foreground before:size-1.5 before:shrink-0 before:rounded-full before:bg-success before:content-['']\";\n\nexport const badgeVariants = cva(\n 'inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2.5 text-[0.8125rem] font-medium leading-none',\n {\n variants: {\n tone: {\n neutral: 'border-border bg-card text-foreground',\n muted: 'border-transparent bg-muted text-muted-foreground',\n brand: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_12%,var(--card))] text-oca-accent-ink',\n danger: 'border-transparent bg-[color-mix(in_oklab,var(--destructive)_12%,var(--card))] text-destructive',\n // A good state is a neutral pill with a green dot, not a green pill.\n success: GOOD_DOT,\n // Aliases kept so older call sites keep compiling: attention is\n // the brand accent, information is neutral.\n warning: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_12%,var(--card))] text-oca-accent-ink',\n info: 'border-border bg-card text-foreground',\n // Inverted in dark mode, where ink would sit on a card of nearly its own colour.\n ink: 'border-transparent bg-oca-ink text-oca-ink-foreground dark:bg-foreground dark:text-background',\n onInk: 'border-white/15 bg-white/5 text-white/90',\n },\n },\n defaultVariants: { tone: 'neutral' },\n }\n);\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {}\n\nexport function Badge({ className, tone, ...props }: BadgeProps) {\n return <span data-ui=\"badge\" className={cn(badgeVariants({ tone }), className)} {...props} />;\n}\n\n/** A pill with a live dot: where something stands right now (\"In testing · payouts start after\"). */\nexport function StatusPill({\n className,\n children,\n pulse = true,\n ...props\n}: HTMLAttributes<HTMLSpanElement> & { pulse?: boolean }) {\n return (\n <span\n data-ui=\"status-pill\"\n className={cn(\n 'inline-flex min-h-8 w-fit items-center gap-2.5 rounded-full border border-border bg-card py-1 pl-3 pr-3.5 text-[0.875rem] leading-snug text-foreground',\n className\n )}\n {...props}\n >\n <span aria-hidden className=\"relative flex size-2 shrink-0\">\n {pulse ? (\n <span className=\"absolute inset-0 rounded-full bg-oca-orange opacity-50 motion-safe:animate-ping\" />\n ) : null}\n <span className=\"relative size-2 rounded-full bg-oca-orange\" />\n </span>\n {children}\n </span>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * White on the canvas with one hairline and a generous radius; no shadow. The\n * `ink` card is the deck's #1E1E1E panel, dark in both modes.\n */\nexport const cardVariants = cva('relative rounded-[1.25rem] border', {\n variants: {\n tone: {\n default: 'border-border bg-card text-card-foreground',\n sunken: 'border-transparent bg-muted text-foreground',\n ink: 'border-oca-ink-line bg-oca-ink-card text-oca-ink-foreground',\n outline: 'border-border bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-5',\n md: 'p-6 md:p-8',\n lg: 'p-8 md:p-10',\n },\n interactive: {\n true: 'transition-colors hover:border-oca-hairline-strong focus-within:border-oca-hairline-strong',\n false: '',\n },\n },\n defaultVariants: { tone: 'default', padding: 'md', interactive: false },\n});\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n { className, tone, padding, interactive, ...props },\n ref\n) {\n return (\n <div ref={ref} data-ui=\"card\" className={cn(cardVariants({ tone, padding, interactive }), className)} {...props} />\n );\n});\n\nexport function CardHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\n/** The small \"01\" above a card title. */\nexport function CardNumeral({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('oca-numeral block', className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={cn('oca-title flex flex-wrap items-center gap-2.5', className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-body', className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-5', className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-6 flex flex-wrap items-center gap-3', className)} {...props} />;\n}\n","import * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport { Check, ChevronDown } from 'lucide-react';\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n useId,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type InputHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from 'react';\n\nimport { cn } from '../lib/cn';\n\n/* Fields: 44px tall, a hairline that darkens on focus with a soft orange halo,\n 16px text on phones so iOS never zooms. */\nconst fieldBase = [\n 'w-full rounded-xl border border-input bg-card text-foreground placeholder:text-oca-subtle',\n 'text-base md:text-[0.9375rem] outline-none transition-[border-color,box-shadow]',\n 'focus:border-foreground/35 focus:ring-4 focus:ring-[color-mix(in_oklab,var(--oca-orange)_16%,transparent)]',\n 'disabled:cursor-not-allowed disabled:opacity-55',\n 'aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-[color-mix(in_oklab,var(--destructive)_14%,transparent)]',\n];\n\nexport const Input = forwardRef<HTMLInputElement, InputHTMLAttributes<HTMLInputElement>>(function Input(\n { className, type = 'text', ...props },\n ref\n) {\n return <input ref={ref} type={type} data-ui=\"input\" className={cn(fieldBase, 'h-11 px-3.5', className)} {...props} />;\n});\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaHTMLAttributes<HTMLTextAreaElement>>(\n function Textarea({ className, ...props }, ref) {\n return (\n <textarea\n ref={ref}\n data-ui=\"textarea\"\n className={cn(fieldBase, 'min-h-28 px-3.5 py-3 leading-relaxed', className)}\n {...props}\n />\n );\n }\n);\n\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(function Label({ className, ...props }, ref) {\n return (\n <LabelPrimitive.Root\n ref={ref}\n className={cn('text-sm font-medium leading-none text-foreground', className)}\n {...props}\n />\n );\n});\n\nexport interface FieldProps {\n label: ReactNode;\n /** Help under the control. It sits below, so paired fields stay level. */\n hint?: ReactNode;\n /** Mark the field optional beside its label, rather than in a hint. */\n optional?: boolean;\n /** Shown in place of nothing; marks the control invalid. */\n error?: ReactNode;\n /** The control. Receives id, aria-describedby and aria-invalid. */\n children: ReactElement;\n className?: string;\n /** Render the label visually hidden (it is still the accessible name). */\n hideLabel?: boolean;\n /** A button that acts on the control, set beside it (below it on a phone). */\n action?: ReactNode;\n}\n\n/** Label, hint, control and error, wired together by id. */\nexport function Field({ label, hint, optional, error, children, className, hideLabel, action }: FieldProps) {\n const id = useId();\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined;\n const control = isValidElement(children)\n ? cloneElement(children as ReactElement<Record<string, unknown>>, {\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': error ? true : undefined,\n })\n : children;\n const hintNode = hint ? (\n <p id={hintId} className=\"text-[0.8125rem] leading-snug text-muted-foreground\">\n {hint}\n </p>\n ) : null;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <Label htmlFor={id} className={hideLabel ? 'sr-only' : 'flex items-baseline gap-2'}>\n {label}\n {optional ? <span className=\"text-[0.8125rem] font-normal text-muted-foreground\">Optional</span> : null}\n </Label>\n {action ? (\n // The hint belongs to the input, so it sits under the input, not under the button.\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-2 [&>input]:w-full\">\n {control}\n {hintNode}\n </div>\n <div className=\"shrink-0\">{action}</div>\n </div>\n ) : (\n <>\n {control}\n {hintNode}\n </>\n )}\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] leading-snug text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/* ── Select ───────────────────────────────────────────────────────────── */\n\nexport const Select = SelectPrimitive.Root;\nexport const SelectGroup = SelectPrimitive.Group;\nexport const SelectValue = SelectPrimitive.Value;\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(function SelectTrigger({ className, children, ...props }, ref) {\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(fieldBase, 'flex h-11 items-center justify-between gap-2 px-3.5 text-left', className)}\n {...props}\n >\n <span className=\"truncate\">{children}</span>\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"size-4 shrink-0 text-muted-foreground\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n});\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(function SelectContent({ className, children, position = 'popper', ...props }, ref) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={6}\n className={cn(\n 'oca-animate-fade z-50 max-h-[min(24rem,var(--radix-select-content-available-height))] min-w-[var(--radix-select-trigger-width)] overflow-hidden rounded-xl border border-border bg-popover p-1 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n >\n <SelectPrimitive.Viewport>{children}</SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n});\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(function SelectItem({ className, children, ...props }, ref) {\n return (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex h-10 cursor-default select-none items-center rounded-lg pl-3 pr-9 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator className=\"absolute right-3\">\n <Check className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n );\n});\n\n/* ── Checkbox, Switch, Radio ──────────────────────────────────────────── */\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(function Checkbox({ className, ...props }, ref) {\n return (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex size-5 shrink-0 items-center justify-center rounded-[6px] border border-input bg-card',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator>\n <Check className=\"size-3.5\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n});\n\nexport const Switch = forwardRef<\n ElementRef<typeof SwitchPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>\n>(function Switch({ className, ...props }, ref) {\n return (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex h-6 w-11 shrink-0 items-center rounded-full border border-transparent bg-input p-0.5',\n 'outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:bg-brand disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"pointer-events-none block size-5 rounded-full bg-white shadow-sm transition-transform data-[state=checked]:translate-x-5\" />\n </SwitchPrimitive.Root>\n );\n});\n\nexport const RadioGroup = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Root>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(function RadioGroup({ className, ...props }, ref) {\n return <RadioGroupPrimitive.Root ref={ref} className={cn('grid gap-3', className)} {...props} />;\n});\n\nexport const RadioGroupItem = forwardRef<\n ElementRef<typeof RadioGroupPrimitive.Item>,\n ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(function RadioGroupItem({ className, ...props }, ref) {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n 'inline-flex size-5 shrink-0 items-center justify-center rounded-full border border-input bg-card',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'data-[state=checked]:border-primary disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"block size-2.5 rounded-full bg-primary\" />\n </RadioGroupPrimitive.Item>\n );\n});\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { X } from 'lucide-react';\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/* ── Dialog ───────────────────────────────────────────────────────────── */\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nconst overlayClass =\n 'oca-animate-fade fixed inset-0 z-50 bg-[rgb(10_10_10/0.38)] backdrop-blur-[2px] data-[state=closed]:opacity-0';\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { hideClose?: boolean }\n>(function DialogContent({ className, children, hideClose, ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-rise fixed left-1/2 top-1/2 z-50 w-[min(92vw,34rem)] -translate-x-1/2 -translate-y-1/2',\n 'max-h-[88vh] overflow-y-auto rounded-[1.5rem] border border-border bg-popover p-6 text-popover-foreground shadow-xl md:p-8',\n 'outline-none',\n className\n )}\n {...props}\n >\n {children}\n {hideClose ? null : (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mb-5 flex flex-col gap-2 pr-8', className)} {...props} />;\n}\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-7 flex flex-col-reverse gap-3 sm:flex-row sm:justify-end', className)} {...props} />;\n}\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-[1.5rem] font-normal leading-tight tracking-[-0.02em]', className)}\n {...props}\n />\n );\n});\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return <DialogPrimitive.Description ref={ref} className={cn('oca-body', className)} {...props} />;\n});\n\n/* ── Sheet: a dialog from an edge ────────────────────────────────────── */\n\nexport const Sheet = DialogPrimitive.Root;\nexport const SheetTrigger = DialogPrimitive.Trigger;\nexport const SheetClose = DialogPrimitive.Close;\nexport const SheetTitle = DialogTitle;\nexport const SheetDescription = DialogDescription;\n\nconst sheetSide = {\n right: 'inset-y-0 right-0 h-full w-[min(88vw,24rem)] border-l',\n left: 'inset-y-0 left-0 h-full w-[min(88vw,24rem)] border-r',\n bottom: 'inset-x-0 bottom-0 max-h-[88vh] rounded-t-[1.5rem] border-t',\n} as const;\n\nexport const SheetContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { side?: keyof typeof sheetSide }\n>(function SheetContent({ className, children, side = 'right', ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-fade fixed z-50 flex flex-col gap-4 overflow-y-auto border-border bg-popover p-6 text-popover-foreground shadow-xl outline-none',\n sheetSide[side],\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\n/* ── Popover ──────────────────────────────────────────────────────────── */\n\nexport const Popover = PopoverPrimitive.Root;\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport const PopoverContent = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(function PopoverContent({ className, align = 'center', sideOffset = 8, ...props }, ref) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 w-72 rounded-2xl border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n});\n\n/* ── Tooltip: ink, small, quick ───────────────────────────────────────── */\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(function TooltipContent({ className, sideOffset = 6, ...props }, ref) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 max-w-xs rounded-lg bg-oca-ink px-2.5 py-1.5 text-[0.8125rem] leading-snug text-oca-ink-foreground',\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n );\n});\n\n/* ── Menu ─────────────────────────────────────────────────────────────── */\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, sideOffset = 8, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 min-w-56 overflow-hidden rounded-2xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { destructive?: boolean }\n>(function DropdownMenuItem({ className, destructive, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'flex h-10 cursor-default select-none items-center gap-2.5 rounded-xl px-3 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-muted-foreground',\n destructive && 'text-destructive [&_svg]:text-destructive',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(function DropdownMenuLabel({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-3 pb-1.5 pt-2 text-[0.8125rem] text-muted-foreground', className)}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return <DropdownMenuPrimitive.Separator ref={ref} className={cn('my-1.5 h-px bg-border', className)} {...props} />;\n});\n","import { useCallback, useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A horizontal scroller that says when there is more. Content that is wider\n * than its box scrolls instead of being clipped, and a soft edge appears on\n * whichever side hides something. Tables, code and tab bars all use it.\n */\nexport interface ScrollFadeProps extends HTMLAttributes<HTMLDivElement> {\n /** The colour under the scroller, as a CSS value; the edge fades to it. */\n fade?: string;\n /** Classes for the scrolling element itself. */\n innerClassName?: string;\n}\n\nexport function ScrollFade({ fade = 'var(--card)', className, innerClassName, children, ...props }: ScrollFadeProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [edges, setEdges] = useState({ left: false, right: false });\n const measure = useCallback(() => {\n const el = ref.current;\n if (!el) return;\n const left = el.scrollLeft > 1;\n const right = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;\n setEdges((e) => (e.left === left && e.right === right ? e : { left, right }));\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n measure();\n // Without ResizeObserver (old engines, jsdom) the edges still follow scrolling.\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(measure);\n ro.observe(el);\n if (el.firstElementChild) ro.observe(el.firstElementChild);\n return () => ro.disconnect();\n }, [measure]);\n return (\n <div className={cn('relative min-w-0', className)} {...props}>\n <div\n ref={ref}\n onScroll={measure}\n // While it hides something, a keyboard can reach it to scroll.\n tabIndex={edges.left || edges.right ? 0 : undefined}\n className={cn(\n 'overflow-x-auto overscroll-x-contain rounded-[inherit] outline-none focus-visible:ring-2 focus-visible:ring-ring',\n innerClassName\n )}\n >\n {children}\n </div>\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 left-0 w-8 transition-opacity duration-150',\n edges.left ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to right, ${fade}, transparent)` }}\n />\n <span\n aria-hidden\n className={cn(\n 'pointer-events-none absolute inset-y-0 right-0 w-10 transition-opacity duration-150',\n edges.right ? 'opacity-100' : 'opacity-0'\n )}\n style={{ background: `linear-gradient(to left, ${fade}, transparent)` }}\n />\n </div>\n );\n}\n","import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { createContext, forwardRef, useContext, type ComponentPropsWithoutRef, type ElementRef } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from './scroll-fade';\n\n/*\n * Two looks for one behaviour: `pill` is a segmented control for switching a\n * view in place; `line` is page-level navigation between sections.\n */\ntype TabsLook = 'pill' | 'line';\nconst LookContext = createContext<TabsLook>('pill');\n\nexport const Tabs = forwardRef<\n ElementRef<typeof TabsPrimitive.Root>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Root> & { look?: TabsLook }\n>(function Tabs({ look = 'pill', ...props }, ref) {\n return (\n <LookContext.Provider value={look}>\n <TabsPrimitive.Root ref={ref} {...props} />\n </LookContext.Provider>\n );\n});\n\nexport const TabsList = forwardRef<\n ElementRef<typeof TabsPrimitive.List>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(function TabsList({ className, ...props }, ref) {\n const look = useContext(LookContext);\n // More tabs than fit a phone scroll sideways, with an edge that says so.\n return (\n <ScrollFade fade=\"var(--background)\" className={look === 'pill' ? 'w-fit max-w-full' : 'w-full'}>\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n look === 'pill'\n ? 'inline-flex w-max items-center gap-1 rounded-full bg-muted p-1'\n : 'flex w-max min-w-full items-center gap-6 border-b border-border',\n className\n )}\n {...props}\n />\n </ScrollFade>\n );\n});\n\nexport const TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(function TabsTrigger({ className, ...props }, ref) {\n const look = useContext(LookContext);\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap text-[0.9375rem] outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n look === 'pill'\n ? 'h-9 rounded-full px-4 text-muted-foreground hover:text-foreground data-[state=active]:bg-card data-[state=active]:text-foreground data-[state=active]:shadow-sm'\n : '-mb-px h-11 border-b-2 border-transparent text-muted-foreground hover:text-foreground data-[state=active]:border-foreground data-[state=active]:text-foreground',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(function TabsContent({ className, ...props }, ref) {\n return <TabsPrimitive.Content ref={ref} className={cn('mt-6 outline-none', className)} {...props} />;\n});\n","import type { SVGProps } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The isometric check, measured from Sou's deck (slide 9) onto a 16×8 grid:\n * a chevron with a 3-unit short arm and a 5-unit long arm, one unit thick,\n * extruded two units. Three faces, three oranges.\n */\n\nconst TOP = '0,3 2,2 6,4 14,0 16,1 6,6';\nconst LEFT = '0,3 6,6 6,8 0,5';\nconst RIGHT = '6,6 16,1 16,3 6,8';\n\nexport const MARK_FACES = { top: '#FED8AB', left: '#FB933C', right: '#EA580B' } as const;\n\nexport interface MarkProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n /** Accessible name. Omit to render the mark as decoration. */\n title?: string;\n /** Rendered width in px; height follows the 2:1 grid. */\n size?: number;\n}\n\nexport function Mark({ title, size, className, ...rest }: MarkProps) {\n return (\n <svg\n viewBox=\"0 0 16 8\"\n width={size}\n height={size ? size / 2 : undefined}\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n className={cn('shrink-0', className)}\n {...rest}\n >\n {title ? <title>{title}</title> : null}\n <polygon points={LEFT} fill={MARK_FACES.left} />\n <polygon points={RIGHT} fill={MARK_FACES.right} />\n <polygon points={TOP} fill={MARK_FACES.top} />\n </svg>\n );\n}\n\nexport interface AppIconProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n title?: string;\n size?: number;\n}\n\n/** The app icon: the mark on an ink squircle, as in the deck's lockup. */\nexport function AppIcon({ title, size = 32, className, ...rest }: AppIconProps) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n className={cn('shrink-0', className)}\n {...rest}\n >\n {title ? <title>{title}</title> : null}\n <rect\n width=\"24\"\n height=\"24\"\n rx=\"6.25\"\n style={{ fill: 'var(--oca-icon-tile, #0A0A0A)', stroke: 'var(--oca-icon-ring, transparent)' }}\n strokeWidth=\"0.5\"\n />\n <g transform=\"translate(4.25 8.1) scale(0.97)\">\n <polygon points={LEFT} fill={MARK_FACES.left} />\n <polygon points={RIGHT} fill={MARK_FACES.right} />\n <polygon points={TOP} fill={MARK_FACES.top} />\n </g>\n </svg>\n );\n}\n\nexport interface LockupProps {\n /** The word beside the icon. */\n name?: string;\n /** Icon size in px; the word scales with it. */\n size?: number;\n className?: string;\n}\n\n/** Icon and wordmark, lowercase, as the deck sets it. */\nexport function Lockup({ name = 'orangecheck', size = 28, className }: LockupProps) {\n return (\n <span\n className={cn('inline-flex items-center font-medium tracking-[-0.01em]', className)}\n style={{ gap: size * 0.32, fontSize: size * 0.56 }}\n >\n <AppIcon size={size} />\n <span>{name}</span>\n </span>\n );\n}\n","/*\n * The deck portrait as ink, 128 × 128, one byte per cell (0 = paper, 255 = full\n * ink), read from the red channel so the orange ground is paper. Generated from\n * the deck's sphere by scripts/halftone.py's tone step; HalftoneCanvas screens\n * it live.\n */\nexport const PORTRAIT_TONE_SIZE = 128;\nexport const PORTRAIT_TONE_B64 =\n 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAADCKz/v//9lYBgAAAAAAAAAAAAAAFUJqiaTD5/PdnFJZqub/////////6beKXzoFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkEGl+dzPP/6XksDAAAAAAAAAAAAAABGjJTgavFzcyyhIrS////////////5serj0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABggiVXWMv/vsj0YlDAAAAAAAAAAAAAAMHTVejKWwwr+1x/n/////////////7t/Vp00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDCdFSlWU6fGrXy4eFgAAAAAAAAAAAAsZLlB5oLrQ3Of///////////////////7hnTkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwABGTAzP3bK78yGOiErIQUAAAAAAAAACRYsWIa63fH/////////////////////+d2/fCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAVMD1NdbXu6q9NGRoeGQ0AAAAAAAAJHTJbneH////////////////////////v0L+rcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGCR4zP09ync3uwlwYBgkQHCQgEAULGig8VYfP///////////////////////////v5NewYRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAYMGSEkMFJ1pebdgSUAAAAIHTI9P0lieIyq3f//////////////////////////////9s2lVgEAAAAAAAAAAAAGBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgsRGBAROni19v+1RgAAAAAGIT9efqfM5///////////////////////////////////2a9yIQAAAAAAAAAAABUcDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwULGB0lEgQoecf0/995FAAAAAAJKV+az/3////////////////////////////////////coGowAAAAAAAAAAAAHD0pAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBA0hLzwhARxlq9n77JIkAAAAAAAVUJrV////////////////////+fT///nm+f//////+dKfaCkAAAAAAAAAAA0iRjwHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgEAAR5HZ0IUM3Wnz+/djS4AAAAAAAcwa6Xd///////////////////z4f7/39Lu///////76b9rDgAAAAAAAAAdPSkwMA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkAAAAJ3uiZSlFg7DP4s+ENgcAAAAABhQvXJ3q//////////////////Pn//jQyM/X6v//+OfqqzcAAAAAAAAAABI6MDAzHgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB4IAA1Gq7trNUZ5r8O/p2EoEAQFBwkRESFPlez/////////////////9Pb//9/Mt6qvx+bMpZRMAAAAAAAAAAAAABY1UmRJHgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDBglNV+tt3VMXJK7r5R7SSEQCw4RFiAkQoTP//////////////////////////HQqIyg2ch/MwAAAAAAAAAAAAAABihfnZRKFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAFHTY/aJ+YZUZntcCRe21HKBoSEBQaJUaM3P//////////////////////+Pn76dS9p6/V2n4JAAAAAAAAAAAAAAQLKG3H1Yc5DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcJxElOkOPx5JKMGjCuIeGeUonHhwVEhUrddL////////////////////////4+em6r8/fzcqzWAAAAAAAAAAAAAAAFCRMkdDSom82DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSkhES5MZb30t1k5eMfHsreXWTUhGRUSHU2o+P//////////////////////////77OkzdzFolgLAAAAAAAAAAAAAAASRXKdx8+7q3gyCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGgAAHEJ+zfTDbUl4x+Lf2qhlQigYFBo5gd3////////////////////////////2xaqdnJJSAgAAAAAHDgAABAAAAAVHdpjN6eLcu2spDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEAAAMMo3d36BrXIrV6ubqvWo3JCAgL1+y/////////////////////////+/7//TVs3tlTQsAAAAAAA0SAAcoBQAAAC5llcjm7vnvqFwkBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZHAAAAAkvkdzDf1xnr/bz6f7ffz0kHSdFidn/////////////////////////+fjmwKqSakYNAAAAAAAHDQQAABQEAAAAGEl2pc3s///IeTAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs1AAAAEU2q1bt8TFy1///5/+mkYjIeL16o7v//////////////////////////9qtrXFVPLwAAAAAAAAQGAAAAAAAAAAAMNV6RwOz//9mUQBUJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJLykBAAw2ku75z4dTZaj0///51bOHRSc9drv2///////++//////////////////5nEozQ0kVAAAAAAAAAAAAAAAAAAAAAA5Ccpe44v303a9YGgcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATk8DAAAGF7H///afkZcoPb///bMspRWLkaHwPH//////fH2//////////////////6/bzc3MgAAAAAAAAAAAAAAAAAAAAAAHluVs7q7yNfPt3MuDAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjIAAAAQcN///8dbKUqt//////bcuoFJXqDP+f/////c7P///////////////////+azazIAAAAAAAAAAAAAAAAAAAAAAAY3eL3ZvZSfx8jCoFkhCwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCwAAAByM+f//tVIuSrX////////4unh5sOr//////+T0/////////////////////+yyWAAAAAAAAAAAAAAAAAAAAAAAJG239P3DkaTDwNDQgSwOCwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOFAgAAAAAPbX///+1WSs/q//////////FhmqN5P///////////////////////////////9+EDAAAAAAAAAAAAAAAAAAABilkre7//+mvpLC62e6qRhYLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEvGgYAAA5cx////8BYHD2z////////86VqSWjZ////////////////////////////////33wLAAAAAAAAAAAAAAAAAA09g7/n/////+GomLPQ58hqJQwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNTkiEQAAK5fs////6n4sUMX////////sklI6Z9r////////////////////////////////UWwAAAAAAAAAAAAAAAAUpWJXh////////9r+Xp7e1q20rDQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCckHUJrUiEVAgBNz///////rVJhwv////////ONPzBq3P///////////////////////////////81AAAAAAAAAAAAAAAAWRoHD+P////////npzaWPkZGRazISBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ4oPzc1Ypp2LxkFCXb5///////CeXan3P//////6oc2ImHZ////////////////////////////////0jYAAAAAAAAAAAAAFk2U1////////////vHisnlyhJR1OhkHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABonKT1JQEZojHtPLxUwq////////+e/p6Cy0vP////qj0MhVdD////////////////////////////////VNgAAAAAAAAAAABVJhtf////////////77tyvg3WGon88FggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJCkyTFhHTG9+dnNWP2/d///////////it6Sgw/////+qTSdTvf///////////////////////////////7gpAAAAAAAAAAAHPYTF////////////89XIyrqqkpi1j0IVBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESkvKS4/Rz1GfpqGfHh1pfv////////////QlHaa5P///8hcN2rD///////////////////////////////UfBIAAAAAAAAAABllu+7////////////pxcrh2bqdp7OVVhwGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgMjozKScvPGGlyKKBeITC//////////////61hInC////5oxomuf/////////////////////////////2nk8BAAAAAAAAAAAKXCrwtz//////////uzn8/TcsJylmoRTHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFiszOjopIS9NkdnduKKJkeT///////////////vFp8r////+u4+1+f////////////////////////////+RPy8VAAAAAAAAAAAwW2pigdL///jm///v6f3/9uTNvauKb0AUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkhLzMzOTowP3K44ce3w7rN///////////////////q/f/////KlLf/////////////////////////////vVZAXkUAAAAAAAAAACA2MydMr///9Ob///Hk8/356tzHnW9VMg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhwhLi4yQDZNmNDMr7ja5v7//////////////////////////9SfwP///////////////////////////9ptNVmVcwkAAAAAAAAADBESGkOk+///////+O7x+PHawK+SYUMpCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYcHiApLjM8L0Wc2tC7x+r/////////////////////////////5sDa////////////////////////////qzMhZbOdIgAAAAAAAAcOEBkoPZHz//////nc2urx8eHHuKdvPyACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFScrKCEoPUVGZ7js5Nzh+//////////////////////////////cw+T///////////////////b///////+gIhRbtbI6AAAAAAAQICgrOkVDe9z/////3MC6x9ns9unStYFHGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZKC4uIS5JT2Kl6vju5ub//////////////////////////////8iz4f/////////////////+7P///////5EcAi91diwAAAAADBooPU1ZX1Nwx////+fQ1biaq8/v++a/lFUWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRkkKSwvQFBTarDk2tnHv+/////////////////////////////cu8jv////////7+z////////////////ngRkAByQiDAYNERQdKC85RVVcU2S4////7+LfrYOcv9Xv58CSTREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJHCgvLzM8P0xtorunp6Cf1///////////////////////////5Kqy5P//+/b7+/nfx+///////////////+qYKAAABwcCDhUWGSEwPDo/TU9JWar/////9M+il623wuHcvYxFDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsZLj01LiwsTYmvsJKGhIa/////////////////5+bz//////TIrcr5/+fF1///6cWy3P//////////////+btGAgACBQcSFhgcITJFRUlVT0ZZqv7////0yqiyt6i94te1fjYFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAkNTMuJyVQoMzQuqSJeK3////////////25LqNg5i/3NC4sr/X8//z0Lvi///cu8rq/v/////////////9z2QNAAUIDBIWGBocJzk9P1BSSVuk9v///+e9pKuklLXm3bBtJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGDR0nJyQhJ0qNyunq2reSqvP//////////8+ddVxYebXNqIOY1fbx2sfM3////+/V3O/////////////////neRQABgcICw0OERQWJzA3SkxHVYPH////5rudkoNtj9XapFsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYVJygcGBooQ3W78f722rKw5P//////////uGhMXHCYzMeakr/k1K2Uj7Da/f///+/Q2v////////////////+KHQUGBQcHBwYMGB0pNT1NTE1VapTH8f/uyqKJdVZ1w8eDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECEvLCEgIig3a8L////kysDX8f////////uaR0BniaKrl4y44cWKb2t1oMjS5Pv/78DF////////////////8YQhCAcGDRAMBw4cHCU2P0ZPW15faHyo1Nq9mpSKZXawqmcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkWJCUoLzU2LCxivf////bm0Mrm////////xWUuM1iRqJqJjauvf15hc4mour/a+f/nv8X////////////////hiSgFAgcYHRQQFRkSFik2MjpVXFlTUnOan4p7h41vcI+ESQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxAZHSUvNj0sKWHC////9vPqz+H//////+6JNR4rT5/IvbCceWJWW3CNmpKSuOr9///q9P///////////////+qoOgUCCxYVDA4WFhASISwrNUlQUFZea3NrYmuDh3JeZVglAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDRQdJyUiJyEpZM3////5///XyOr/////wGIsJzdfr+HawI1PP1l1jY97c4G77/v//////////////////////bdFDAwNDAgGCA4UEhQiLDA6QkdHWHNrUExWcoyBZUpALwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYSGSElIRgWITZyyP///////9e63P///9d/Qi4vQG2w19SiXzlDc5+leVt7qs/U2fT///////////////7////5lCsIDQwJBwYGDBkYFBkgLDpARlBkc1Y2OlZ8jGpHMyEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAVGBwdGRgnR4zU/v//////1cLs////rVUnHCdAb6rIx6d2ZXiqv5RcZaDMv4+UyPj///js/////+rIwvP//9pbDQQICQkEAAANIiQcGRglNTpFXHBhPCkwUHh5UzIaBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDA4SGBYUGSQ9eLPU/f///93F0Pn//8d1NxoWKDxeotXSuq2wsr2wg3CNq6qMZG+w5v//2bfS38zCr4N+ref/wkAFBAYLDAQAAAshJyEeHCIuMjlPW0wvICA8ZGVHJQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICxIeHR0lJCg9Xn+q2unHq7jQ5+m7bTUZFB0pMlOn5NnAzenXqIqXuruchHl2irjp//+6e3yDcG1wU0dVeauVMAAAAQkNBQAABRUeHBIWKDIzLCw1NSkeHDBVVjoUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIFCIoLzcrISIwRVt/lIaHpbKwlGE3IRESHSIvW6jc4uz//+6rncXhu42Ej6vCyOH+0G81LjInJzUsJykvRkANAAAABwsCAAACDh0hGRknKyskGSElIBwYITk3HgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYZJzA8TEY3OTw3MDxDR1t1f2dDLB0VERggIjBZn9f4/////tDN18ir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';\n","import { useEffect, useRef, useState, type CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { PORTRAIT_TONE_B64, PORTRAIT_TONE_SIZE } from './portrait-tone';\n\n/*\n * The deck's halftone, screened live. The portrait's ink is a small tone grid;\n * this draws it as dots on a 45° screen that grow in from the centre, breathe,\n * and part under the pointer like a lens. One path fill per frame; it sleeps\n * when offscreen or hidden, and draws once, still, under reduced motion.\n */\n\nexport interface Tone {\n size: number;\n data: Uint8Array;\n}\n\nlet portrait: Tone | null = null;\n/** The deck portrait's ink, decoded once. */\nexport function portraitTone(): Tone {\n if (!portrait) {\n const bin = atob(PORTRAIT_TONE_B64);\n const data = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) data[i] = bin.charCodeAt(i);\n portrait = { size: PORTRAIT_TONE_SIZE, data };\n }\n return portrait;\n}\n\nexport interface HalftoneCanvasProps {\n /** Ink to screen; the deck portrait by default. */\n tone?: Tone;\n /** Dots across the diameter. */\n density?: number;\n /** Swell and part the dots under the pointer. */\n lens?: boolean;\n /** Grow the dots in from the centre on first view. */\n intro?: boolean;\n /** A slow wave through the dots. */\n breathe?: boolean;\n /** Dot colour. */\n ink?: string;\n /** Shown before the canvas runs, and without script. */\n fallbackSrc?: string;\n alt: string;\n className?: string;\n style?: CSSProperties;\n}\n\nfunction sample(tone: Tone, u: number, v: number): number {\n const n = tone.size;\n const x = Math.min(n - 1.001, Math.max(0, u * n - 0.5));\n const y = Math.min(n - 1.001, Math.max(0, v * n - 0.5));\n const x0 = Math.floor(x);\n const y0 = Math.floor(y);\n const fx = x - x0;\n const fy = y - y0;\n const d = tone.data;\n const a = d[y0 * n + x0]! * (1 - fx) + d[y0 * n + x0 + 1]! * fx;\n const b = d[(y0 + 1) * n + x0]! * (1 - fx) + d[(y0 + 1) * n + x0 + 1]! * fx;\n return (a * (1 - fy) + b * fy) / 255;\n}\n\nconst easeOut = (k: number) => 1 - Math.pow(1 - k, 3);\n\nexport function HalftoneCanvas({\n tone,\n density = 86,\n lens = true,\n intro = true,\n breathe = true,\n ink = '#0d0a08',\n fallbackSrc,\n alt,\n className,\n style,\n}: HalftoneCanvasProps) {\n const wrap = useRef<HTMLDivElement>(null);\n const canvas = useRef<HTMLCanvasElement>(null);\n const [live, setLive] = useState(false);\n\n useEffect(() => {\n const el = wrap.current;\n const cv = canvas.current;\n if (!el || !cv) return;\n const ctx = cv.getContext('2d');\n if (!ctx) return;\n const t = tone ?? portraitTone();\n const still = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n let size = 0;\n let dots = new Float32Array(0); // x, y, r, delay per dot\n let count = 0;\n const pointer = { x: 0, y: 0, tx: 0, ty: 0, k: 0, on: false };\n let start = 0;\n let raf = 0;\n let visible = true;\n\n function layout() {\n const s = el!.clientWidth;\n if (!s || s === size) return;\n size = s;\n const dpr = Math.min(2, window.devicePixelRatio || 1);\n cv!.width = Math.round(s * dpr);\n cv!.height = Math.round(s * dpr);\n ctx!.setTransform(dpr, 0, 0, dpr, 0, 0);\n const pitch = s / density;\n const c = s / 2;\n const ca = Math.SQRT1_2;\n const span = Math.ceil((s * 0.75) / pitch) + 1;\n const out: number[] = [];\n for (let i = -span; i <= span; i++) {\n for (let j = -span; j <= span; j++) {\n const u = i * pitch;\n const v = j * pitch;\n const x = c + (u - v) * ca;\n const y = c + (u + v) * ca;\n const dc = Math.hypot(x - c, y - c);\n if (dc > c - pitch * 0.6) continue;\n const inkv = sample(t, x / s, y / s);\n if (inkv < 0.1) continue;\n const r = pitch * Math.sqrt(inkv / Math.PI) * 1.1;\n out.push(x, y, r, (dc / c) * 1100);\n }\n }\n dots = Float32Array.from(out);\n count = out.length / 4;\n }\n\n function frame(now: number) {\n if (!start) start = now;\n const el2 = now - start;\n pointer.x += (pointer.tx - pointer.x) * 0.18;\n pointer.y += (pointer.ty - pointer.y) * 0.18;\n pointer.k += ((pointer.on ? 1 : 0) - pointer.k) * 0.12;\n const L = size * 0.22;\n ctx!.clearRect(0, 0, size, size);\n ctx!.fillStyle = ink;\n ctx!.beginPath();\n const wave = breathe && !still;\n const sec = now / 1000;\n for (let n = 0; n < count; n++) {\n let x = dots[n * 4]!;\n let y = dots[n * 4 + 1]!;\n let r = dots[n * 4 + 2]!;\n if (intro && !still) {\n const k = Math.min(1, Math.max(0, (el2 - dots[n * 4 + 3]!) / 650));\n if (k <= 0) continue;\n r *= easeOut(k);\n }\n if (wave) r *= 1 + 0.05 * Math.sin(sec * 1.1 + ((x + y) / size) * 6);\n if (pointer.k > 0.01) {\n const dx = x - pointer.x;\n const dy = y - pointer.y;\n const d = Math.hypot(dx, dy);\n if (d < L) {\n // A clearing, like a finger drawn through sand: dots\n // shrink toward the pointer and part around it.\n const f = (1 - d / L) * pointer.k;\n r *= 1 - 0.75 * f * f;\n if (d > 0.001) {\n const push = f * (size / density) * 2.6;\n x += (dx / d) * push;\n y += (dy / d) * push;\n }\n }\n }\n ctx!.moveTo(x + r, y);\n ctx!.arc(x, y, r, 0, Math.PI * 2);\n }\n ctx!.fill();\n const introDone = !intro || still || el2 > 1900;\n const busy = wave || pointer.k > 0.01 || !introDone;\n raf = busy && visible && !document.hidden ? requestAnimationFrame(frame) : 0;\n }\n\n const kick = () => {\n if (!raf && visible && !document.hidden) raf = requestAnimationFrame(frame);\n };\n\n layout();\n setLive(true);\n kick();\n\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(() => (layout(), kick())) : null;\n ro?.observe(el);\n const io =\n typeof IntersectionObserver !== 'undefined'\n ? new IntersectionObserver(([e]) => {\n visible = Boolean(e?.isIntersecting);\n kick();\n })\n : null;\n io?.observe(el);\n const onVis = () => kick();\n document.addEventListener('visibilitychange', onVis);\n\n const move = (e: PointerEvent) => {\n const b = el.getBoundingClientRect();\n pointer.tx = e.clientX - b.left;\n pointer.ty = e.clientY - b.top;\n if (!pointer.on) {\n pointer.x = pointer.tx;\n pointer.y = pointer.ty;\n }\n pointer.on = true;\n kick();\n };\n const leave = () => {\n pointer.on = false;\n kick();\n };\n if (lens && !still) {\n el.addEventListener('pointermove', move);\n el.addEventListener('pointerleave', leave);\n }\n return () => {\n cancelAnimationFrame(raf);\n ro?.disconnect();\n io?.disconnect();\n document.removeEventListener('visibilitychange', onVis);\n el.removeEventListener('pointermove', move);\n el.removeEventListener('pointerleave', leave);\n };\n }, [tone, density, lens, intro, breathe, ink]);\n\n return (\n <div ref={wrap} className={cn('relative aspect-square w-full', className)} style={style} data-live={live || undefined}>\n {fallbackSrc ? (\n // eslint-disable-next-line @next/next/no-img-element -- the still screen, until the live one draws\n <img\n src={fallbackSrc}\n alt=\"\"\n aria-hidden\n className={cn('absolute inset-0 size-full select-none transition-opacity duration-300', live && 'opacity-0')}\n draggable={false}\n />\n ) : null}\n {/* alt=\"\" marks it decorative: hidden, rather than an image with no name. */}\n <canvas\n ref={canvas}\n {...(alt ? { role: 'img', 'aria-label': alt } : { 'aria-hidden': true })}\n className=\"absolute inset-0 size-full\"\n />\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { HalftoneCanvas } from './halftone-canvas';\n\n/*\n * The deck's photograph: a halftone portrait on an orange ball, lit from the\n * upper left, with a hairline stadium behind it. The dot layer is an image of\n * black dots on transparent, made by scripts/halftone.py, so the ball stays CSS\n * and the dots stay crisp at any size.\n */\n\nexport const SPHERE_GRADIENT =\n 'radial-gradient(86% 86% at 36% 32%, #fff7f0 0%, #ffdec8 14%, #ffa069 34%, #ff7030 56%, #f65210 78%, #de4006 100%)';\n\nconst SPHERE_DEPTH = 'inset -14px -22px 44px rgb(150 40 0 / 0.16), 0 36px 70px -34px rgb(234 88 11 / 0.45)';\n\nexport interface HalftoneSphereProps {\n /** The dot layer (black dots on transparent, already circular). */\n src: string;\n /** Describe the person or subject; empty string marks it decorative. */\n alt: string;\n /** Draw the hairline stadium behind the sphere, as the hero does. */\n stadium?: boolean;\n /** Let the sphere drift a few pixels. Off under reduced motion. */\n float?: boolean;\n /** Screen the portrait live (draw-in, breathing, pointer lens); `src` stays the still fallback. */\n live?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\n// A soft light on the upper left and a floor shadow, so the ball reads as an object.\nconst SPHERE_GLOSS = 'radial-gradient(38% 30% at 33% 22%, rgb(255 255 255 / 0.55), transparent 72%)';\n\nfunction Ball({ src, alt, float, live }: { src: string; alt: string; float: boolean; live: boolean }) {\n return (\n <div className={cn('relative size-full', float && 'oca-animate-float')}>\n <div\n aria-hidden\n className=\"absolute inset-x-[14%] -bottom-[7%] h-[10%] rounded-[50%] bg-[rgb(234_88_11/0.28)] blur-2xl\"\n />\n <div\n className=\"relative size-full overflow-hidden rounded-full\"\n style={{ background: SPHERE_GRADIENT, boxShadow: SPHERE_DEPTH }}\n >\n {live ? (\n <HalftoneCanvas fallbackSrc={src} alt={alt} />\n ) : (\n // eslint-disable-next-line @next/next/no-img-element -- a static dot layer, sized by CSS\n <img src={src} alt={alt} className=\"absolute inset-0 size-full select-none\" draggable={false} />\n )}\n <div\n aria-hidden\n className=\"pointer-events-none absolute inset-0 rounded-full mix-blend-soft-light\"\n style={{ background: SPHERE_GLOSS }}\n />\n </div>\n </div>\n );\n}\n\nexport function HalftoneSphere({\n src,\n alt,\n stadium = false,\n float = false,\n live = false,\n className,\n style,\n}: HalftoneSphereProps) {\n if (!stadium) {\n return (\n <div className={cn('relative aspect-square w-full', className)} style={style}>\n <Ball src={src} alt={alt} float={float} live={live} />\n </div>\n );\n }\n // Measured from the deck's title slide against the ball's width S: the stadium\n // starts 0.255 S left of and 0.127 S above the ball, is 1.11 S wide, and ends\n // level with its foot. Both live inside this box, so nothing reaches the text.\n return (\n <div className={cn('relative aspect-[1.255/1.127] w-full', className)} style={style}>\n <div aria-hidden className=\"oca-stadium pointer-events-none absolute left-0 top-0 h-full w-[88.4%] rounded-[32%]\" />\n <div className=\"absolute bottom-0 right-0 aspect-square w-[79.7%]\">\n <Ball src={src} alt={alt} float={float} live={live} />\n </div>\n </div>\n );\n}\n","import { useEffect, useRef } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Mark } from './mark';\n\nexport interface IsoCheckProps {\n /** Width in px; the check keeps its 2:1 grid. */\n size?: number;\n /** Drop it into place on first paint, the deck's closing gesture. */\n settle?: boolean;\n /** A soft floor shadow, so it reads as an object on the canvas. */\n shadow?: boolean;\n /** Turn a few degrees toward the pointer, with a warm light behind it. */\n tilt?: boolean;\n title?: string;\n className?: string;\n}\n\n/** The isometric check as an object: the deck's closing illustration. */\nexport function IsoCheck({ size = 360, settle = false, shadow = true, tilt = false, title, className }: IsoCheckProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = ref.current;\n if (!el || !tilt || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n let raf = 0;\n let tx = 0;\n let ty = 0;\n let x = 0;\n let y = 0;\n const step = () => {\n x += (tx - x) * 0.08;\n y += (ty - y) * 0.08;\n el.style.setProperty('--rx', `${(-y * 10).toFixed(2)}deg`);\n el.style.setProperty('--ry', `${(x * 14).toFixed(2)}deg`);\n raf = Math.abs(tx - x) + Math.abs(ty - y) > 0.001 ? requestAnimationFrame(step) : 0;\n };\n const move = (e: PointerEvent) => {\n const b = el.getBoundingClientRect();\n tx = Math.max(-1, Math.min(1, (e.clientX - (b.left + b.width / 2)) / (window.innerWidth / 2)));\n ty = Math.max(-1, Math.min(1, (e.clientY - (b.top + b.height / 2)) / (window.innerHeight / 2)));\n if (!raf) raf = requestAnimationFrame(step);\n };\n window.addEventListener('pointermove', move, { passive: true });\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('pointermove', move);\n };\n }, [tilt]);\n\n return (\n <div\n ref={ref}\n className={cn('relative inline-block', settle && 'oca-animate-settle', className)}\n style={{ width: size, perspective: tilt ? 900 : undefined }}\n >\n {tilt ? (\n <div\n aria-hidden\n className=\"absolute left-1/2 top-1/2 -z-0 aspect-square w-[120%] -translate-x-1/2 -translate-y-1/2 rounded-full opacity-70 blur-3xl\"\n style={{ background: 'radial-gradient(closest-side, rgb(255 140 70 / 0.35), transparent)' }}\n />\n ) : null}\n <div\n className=\"relative z-10 transition-transform duration-300 ease-out\"\n style={tilt ? { transform: 'rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg))', transformStyle: 'preserve-3d' } : undefined}\n >\n <Mark size={size} title={title} className=\"block\" />\n </div>\n {shadow ? (\n <div\n aria-hidden\n className=\"absolute left-[8%] right-[8%] rounded-[50%] opacity-60 blur-xl\"\n style={{ height: size * 0.08, bottom: -size * 0.04, background: 'rgb(234 88 11 / 0.18)' }}\n />\n ) : null}\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * \"A bot farm can pretend to be a crowd\": a crowd of identical figures in\n * perspective, nearer rows larger, with a few real ones in orange. Identical on\n * purpose: copies are what a bot farm is. Positions come from a fixed seed so\n * server and client draw the same crowd.\n */\n\nexport interface CrowdProps {\n cols?: number;\n rows?: number;\n /** How many figures are real (orange). */\n real?: number;\n seed?: number;\n /** Ground it sits on: figures are light on ink, dark on canvas. */\n tone?: 'ink' | 'canvas';\n /** Spoken by screen readers. */\n label?: string;\n /**\n * Let the copies leave as an ancestor's `--p` (0 to 1, set by ScrollStory)\n * rises: each fake falls away at its own moment and the real ones grow.\n */\n story?: boolean;\n className?: string;\n}\n\nconst CELL_W = 22;\nconst CELL_H = 27;\n\nfunction picks(count: number, total: number, seed: number): Set<number> {\n let s = seed >>> 0;\n const out = new Set<number>();\n while (out.size < Math.min(count, total)) {\n s = (Math.imul(s, 1664525) + 1013904223) >>> 0;\n out.add(s % total);\n }\n return out;\n}\n\nexport function Crowd({\n cols = 26,\n rows = 9,\n real = 7,\n seed = 21,\n tone = 'ink',\n label = 'A crowd of identical accounts. Only a few are real.',\n story = false,\n className,\n}: CrowdProps) {\n const width = cols * CELL_W;\n const scales = Array.from({ length: rows }, (_, r) => 0.5 + 0.5 * (r / Math.max(1, rows - 1)));\n const height = scales.reduce((h, s) => h + CELL_H * s, 0);\n // Real figures only in the nearer half, where they are big enough to see.\n const nearFrom = Math.floor(rows / 2) * cols;\n const realSet = new Set([...picks(real, rows * cols - nearFrom, seed)].map((i) => i + nearFrom));\n const bot = tone === 'ink' ? '#ffffff' : '#0a0a0a';\n // When each copy leaves, from a fixed seed: nearer rows go a little later.\n let lcg = (seed * 7919) >>> 0;\n const leaveAt = () => {\n lcg = (Math.imul(lcg, 1664525) + 1013904223) >>> 0;\n return 0.12 + (lcg / 2 ** 32) * 0.6;\n };\n let y = 0;\n return (\n <svg\n role=\"img\"\n aria-label={label}\n viewBox={`0 0 ${width} ${Math.ceil(height)}`}\n className={cn('block h-auto w-full overflow-visible', className)}\n >\n {story ? (\n <defs>\n <radialGradient id=\"oca-crowd-glow\">\n <stop offset=\"0\" stopColor=\"#ff7a3d\" stopOpacity=\"0.55\" />\n <stop offset=\"1\" stopColor=\"#ff7a3d\" stopOpacity=\"0\" />\n </radialGradient>\n </defs>\n ) : null}\n {scales.map((s, r) => {\n const rowY = y;\n y += CELL_H * s;\n const rowW = cols * CELL_W * s;\n const x0 = (width - rowW) / 2;\n return Array.from({ length: cols }, (_, c) => {\n const i = r * cols + c;\n const isReal = realSet.has(i);\n const t = leaveAt();\n return (\n <g key={i} transform={`translate(${x0 + c * CELL_W * s} ${rowY}) scale(${s})`}>\n {isReal && story ? (\n <circle className=\"oca-crowd-halo\" cx={11} cy={14} r={13} fill=\"url(#oca-crowd-glow)\" />\n ) : null}\n <g\n className={story ? (isReal ? 'oca-crowd-real' : 'oca-crowd-bot') : undefined}\n style={story && !isReal ? ({ '--t': t.toFixed(3) } as CSSProperties) : undefined}\n fill={isReal ? 'var(--oca-orange)' : bot}\n fillOpacity={isReal ? 1 : 0.1 + 0.16 * s}\n >\n <circle cx={11} cy={8} r={4.4} />\n <path d=\"M3 25a8 8.5 0 0 1 16 0Z\" />\n </g>\n </g>\n );\n });\n })}\n </svg>\n );\n}\n","import { createElement, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/** The small orange line above a heading (\"How it works\", \"The honest version\"). */\nexport function Eyebrow({ className, onInk, ...props }: HTMLAttributes<HTMLParagraphElement> & { onInk?: boolean }) {\n return <p className={cn('oca-eyebrow', onInk && 'text-oca-ink-eyebrow', className)} {...props} />;\n}\n\ntype DisplayLevel = 1 | 2 | 3;\n\nexport interface DisplayProps extends HTMLAttributes<HTMLHeadingElement> {\n /** Visual size. The element follows unless `as` says otherwise. */\n level?: DisplayLevel;\n as?: 'h1' | 'h2' | 'h3' | 'p';\n}\n\n/** Headlines: regular weight, tight, balanced. */\nexport function Display({ level = 2, as, className, ...props }: DisplayProps) {\n const tag = as ?? (`h${level}` as const);\n return createElement(tag, { className: cn(`oca-display-${level}`, className), ...props });\n}\n\n/** The one orange word (\"cost something *real*.\"). Display sizes only: as small\n * text this orange would fail contrast. */\nexport function Accent({ children, className }: { children: ReactNode; className?: string }) {\n return <span className={cn('text-oca-accent-display', className)}>{children}</span>;\n}\n\nexport function Lead({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('oca-lead max-w-[40rem]', className)} {...props} />;\n}\n\n/** Fine print under a section (\"Who holds what today: …\"). */\nexport function Footnote({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) {\n return <p className={cn('text-[0.9375rem] text-muted-foreground', className)} {...props} />;\n}\n\n/**\n * Body copy for long-form pages: measured line length, calm rhythm. The\n * spacing rules skip anything inside `.not-prose`, so a Notice or card set in\n * the text keeps its own layout.\n */\nexport function Prose({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n 'max-w-[42rem] text-[1.0625rem] leading-[1.7] text-muted-foreground',\n '[&_h2:not(.not-prose_h2)]:oca-display-3 [&_h2:not(.not-prose_h2)]:mb-4 [&_h2:not(.not-prose_h2)]:mt-14 [&_h2]:scroll-mt-24 [&_h2]:text-foreground',\n '[&_h3:not(.not-prose_h3)]:oca-title [&_h3:not(.not-prose_h3)]:mb-3 [&_h3:not(.not-prose_h3)]:mt-10 [&_h3]:text-foreground',\n '[&_p:not(.not-prose_p)]:my-4 [&_strong]:font-medium [&_strong]:text-foreground',\n '[&_a]:text-foreground [&_a]:underline [&_a]:decoration-foreground/35 [&_a]:underline-offset-4 hover:[&_a]:decoration-foreground',\n '[&_ul:not(.not-prose_ul)]:my-4 [&_ul:not(.not-prose_ul)]:list-disc [&_ul:not(.not-prose_ul)]:pl-5 [&_li:not(.not-prose_li)]:my-1.5 [&_code]:text-foreground',\n className\n )}\n {...props}\n />\n );\n}\n","import {\n createElement,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ElementType,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Motion that tells the story and then gets out of the way. Everything here is\n * off under prefers-reduced-motion, does nothing without script, and costs\n * nothing while offscreen.\n */\n\nfunction prefersStill(): boolean {\n return typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/** True once the element has been on screen (or immediately without an observer). */\nexport function useInView<T extends Element>(rootMargin = '0px 0px -12% 0px') {\n const ref = useRef<T>(null);\n const [seen, setSeen] = useState(false);\n useEffect(() => {\n const el = ref.current;\n if (!el || seen) return;\n if (typeof IntersectionObserver === 'undefined') {\n setSeen(true);\n return;\n }\n const io = new IntersectionObserver(\n ([e]) => {\n if (e?.isIntersecting) {\n setSeen(true);\n io.disconnect();\n }\n },\n { rootMargin }\n );\n io.observe(el);\n return () => io.disconnect();\n }, [rootMargin, seen]);\n return [ref, seen] as const;\n}\n\n/**\n * Rise into place the first time it scrolls into view. Content already on\n * screen at load is left alone, so nothing above the fold flashes.\n */\nexport function Reveal({\n as = 'div',\n delay = 0,\n className,\n style,\n children,\n}: {\n as?: ElementType;\n /** Milliseconds, for staggering siblings. */\n delay?: number;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}) {\n const ref = useRef<HTMLElement>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el || prefersStill() || typeof IntersectionObserver === 'undefined') return;\n if (el.getBoundingClientRect().top < window.innerHeight * 0.92) return;\n el.dataset.reveal = 'pending';\n const io = new IntersectionObserver(\n ([e]) => {\n if (e?.isIntersecting) {\n el.dataset.reveal = 'shown';\n io.disconnect();\n }\n },\n { rootMargin: '0px 0px -10% 0px' }\n );\n io.observe(el);\n return () => io.disconnect();\n }, []);\n return createElement(\n as,\n { ref, className, style: { ...style, '--reveal-delay': `${delay}ms` } as CSSProperties },\n children\n );\n}\n\n/**\n * A tall section whose content stays pinned while you scroll through it, and\n * sets `--p` from 0 to 1 on the way. Children read the variable in CSS, so the\n * scroll never re-renders React. Without script or with reduced motion, `--p`\n * stays 0 and the section is an ordinary block.\n */\nexport function ScrollStory({\n length = 2,\n className,\n innerClassName,\n children,\n}: {\n /** Height in viewports; the pinned part plays over (length − 1) of them. */\n length?: number;\n className?: string;\n innerClassName?: string;\n children: ReactNode;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const [pinned, setPinned] = useState(false);\n useEffect(() => {\n const el = ref.current;\n if (!el || prefersStill()) return;\n setPinned(true);\n let raf = 0;\n const update = () => {\n raf = 0;\n const r = el.getBoundingClientRect();\n const travel = r.height - window.innerHeight;\n const p = travel > 0 ? Math.min(1, Math.max(0, -r.top / travel)) : 0;\n el.style.setProperty('--p', p.toFixed(4));\n };\n const on = () => {\n if (!raf) raf = requestAnimationFrame(update);\n };\n update();\n window.addEventListener('scroll', on, { passive: true });\n window.addEventListener('resize', on);\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('scroll', on);\n window.removeEventListener('resize', on);\n };\n }, []);\n return (\n <div ref={ref} className={cn('relative', className)} style={pinned ? { height: `${length * 100}svh` } : undefined}>\n <div className={cn(pinned && 'sticky top-0 flex min-h-svh items-center', innerClassName)}>{children}</div>\n </div>\n );\n}\n\n/** A number that counts up to its value the first time it is seen. */\nexport function Ticker({\n value,\n duration = 1200,\n format = (n) => Math.round(n).toLocaleString('en-US'),\n className,\n}: {\n value: number;\n duration?: number;\n format?: (n: number) => string;\n className?: string;\n}) {\n const [ref, seen] = useInView<HTMLSpanElement>();\n const [shown, setShown] = useState(value);\n // Count only a number that starts below the fold; one already on screen\n // keeps its value rather than flashing it, then zero, then counting.\n const animate = useRef<boolean | null>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el || animate.current !== null) return;\n animate.current = !prefersStill() && el.getBoundingClientRect().top > window.innerHeight * 0.9;\n if (animate.current) setShown(0);\n }, [ref]);\n useEffect(() => {\n if (!seen) return;\n if (!animate.current) {\n setShown(value);\n return;\n }\n let raf = 0;\n const t0 = performance.now();\n const step = (now: number) => {\n const k = Math.min(1, (now - t0) / duration);\n setShown(value * (1 - Math.pow(1 - k, 3)));\n if (k < 1) raf = requestAnimationFrame(step);\n };\n raf = requestAnimationFrame(step);\n return () => cancelAnimationFrame(raf);\n }, [seen, value, duration]);\n return (\n <span ref={ref} className={cn('oca-tabular', className)}>\n {format(shown)}\n </span>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Reveal } from './motion';\n\n/*\n * The deck alternates three grounds: the light canvas, the ink band and the\n * orange band. A section owns its ground edge to edge and its content sits in\n * the container. On the orange band text is ink, never white (2.9:1).\n */\n// overflow-x: clip, not hidden: decoration may not widen the page, and a sticky\n// child still sticks.\nexport const sectionVariants = cva('relative w-full overflow-x-clip', {\n variants: {\n tone: {\n canvas: 'bg-background text-foreground',\n card: 'bg-card text-card-foreground',\n // The band line is transparent in light; in dark it keeps the ink\n // band from melting into the canvas.\n ink: 'border-y border-[var(--oca-band-line)] bg-oca-ink text-oca-ink-foreground',\n brand: 'bg-brand text-brand-foreground',\n },\n space: {\n none: '',\n sm: 'py-12 md:py-16',\n md: 'oca-section',\n lg: 'py-24 md:py-40',\n },\n },\n defaultVariants: { tone: 'canvas', space: 'md' },\n});\n\nexport interface SectionProps extends HTMLAttributes<HTMLElement>, VariantProps<typeof sectionVariants> {\n /** Put children in the standard container. Default true. */\n contained?: boolean;\n}\n\nexport function Section({ tone, space, contained = true, className, children, ...props }: SectionProps) {\n return (\n <section className={cn(sectionVariants({ tone, space }), className)} {...props}>\n {contained ? <div className=\"oca-container\">{children}</div> : children}\n </section>\n );\n}\n\nexport function Container({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('oca-container', className)} {...props} />;\n}\n\n/**\n * Eyebrow + headline + lead, the opening of every deck slide. It rises into\n * place the first time it scrolls into view (`reveal={false}` to keep it still).\n */\nexport function SectionIntro({\n className,\n align = 'start',\n reveal = true,\n children,\n style,\n}: Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'children'> & {\n align?: 'start' | 'center';\n reveal?: boolean;\n}) {\n const cls = cn('flex flex-col gap-4 md:gap-5', align === 'center' && 'mx-auto items-center text-center', className);\n return reveal ? (\n <Reveal className={cls} style={style}>\n {children}\n </Reveal>\n ) : (\n <div className={cls} style={style}>\n {children}\n </div>\n );\n}\n","import { useEffect, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Section } from './section';\n\n/*\n * The top of every public page. Two shapes:\n *\n * - `page` (default): the home page's register. Eyebrow, a display headline,\n * one line of lead, actions, and optional art beside it.\n * - `document`: for pages that are read top to bottom (privacy, terms,\n * security, changelog). A centred column with the same eyebrow and a\n * display headline that is always larger than the document's own h2s.\n */\nexport interface PageHeroProps {\n eyebrow?: ReactNode;\n title: ReactNode;\n /** One or two sentences. */\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the text from md up; below it on a phone. `page` only. */\n art?: ReactNode;\n /** A line of fine print under the lead (\"Updated 15 October 2026\"). */\n meta?: ReactNode;\n /** Anything else under the actions: a status pill, a stat row. */\n children?: ReactNode;\n variant?: 'page' | 'document';\n /** `xl` is the home page's size; content pages default to `lg`. `page` only. */\n size?: 'lg' | 'xl';\n className?: string;\n}\n\nexport function PageHero({\n eyebrow,\n title,\n lead,\n actions,\n art,\n meta,\n children,\n variant = 'page',\n size = 'lg',\n className,\n}: PageHeroProps) {\n if (variant === 'document') {\n return (\n <Section space=\"none\" className={cn('pb-12 pt-12 md:pb-16 md:pt-20', className)}>\n <DocHeader className=\"mx-auto max-w-[42rem]\" {...{ eyebrow, title, lead, meta, actions }}>\n {children}\n </DocHeader>\n </Section>\n );\n }\n return (\n <Section space=\"none\" className={cn('pb-14 pt-12 md:pb-20 md:pt-20', className)}>\n <div className={cn('grid grid-cols-1 gap-10', art && 'items-center md:grid-cols-12')}>\n <div className={cn('flex flex-col items-start gap-6', art ? 'md:col-span-7' : 'max-w-[52rem]')}>\n {eyebrow ? <p className=\"oca-eyebrow oca-enter\">{eyebrow}</p> : null}\n <h1 className={cn(size === 'xl' ? 'oca-display-1' : 'oca-display-2', 'oca-enter [--enter-delay:70ms]')}>\n {title}\n </h1>\n {lead ? <p className=\"oca-lead oca-enter max-w-[38rem] [--enter-delay:150ms]\">{lead}</p> : null}\n {meta ? <p className=\"oca-enter text-[0.875rem] text-muted-foreground [--enter-delay:190ms]\">{meta}</p> : null}\n {actions ? <div className=\"oca-enter flex flex-wrap gap-3 [--enter-delay:230ms]\">{actions}</div> : null}\n {children ? <div className=\"oca-enter w-full [--enter-delay:270ms]\">{children}</div> : null}\n </div>\n {art ? <div className=\"oca-enter md:col-span-5 [--enter-delay:120ms]\">{art}</div> : null}\n </div>\n </Section>\n );\n}\n\n/**\n * A document's title block. PageHero's `document` variant wraps it in a band;\n * DocLayout's `header` takes it bare, so it lines up with the text below.\n */\nexport function DocHeader({\n eyebrow,\n title,\n lead,\n meta,\n actions,\n children,\n className,\n}: Pick<PageHeroProps, 'eyebrow' | 'title' | 'lead' | 'meta' | 'actions' | 'children' | 'className'>) {\n return (\n <div className={cn('flex flex-col gap-5', className)}>\n {eyebrow ? <p className=\"oca-eyebrow oca-enter\">{eyebrow}</p> : null}\n <h1 className=\"oca-display-2 oca-enter [--enter-delay:70ms]\">{title}</h1>\n {lead ? <p className=\"oca-lead\">{lead}</p> : null}\n {meta ? <p className=\"text-[0.875rem] text-muted-foreground\">{meta}</p> : null}\n {actions ? <div className=\"mt-1 flex flex-wrap gap-3\">{actions}</div> : null}\n {children}\n </div>\n );\n}\n\nexport interface TocItem {\n id: string;\n label: ReactNode;\n}\n\nfunction useActiveHeading(ids: string[]): string | undefined {\n const [active, setActive] = useState<string | undefined>(ids[0]);\n const key = ids.join('|');\n useEffect(() => {\n const els = key\n .split('|')\n .map((id) => document.getElementById(id))\n .filter((el): el is HTMLElement => el !== null);\n if (els.length === 0 || typeof IntersectionObserver === 'undefined') return;\n const io = new IntersectionObserver(\n (entries) => {\n const hit = entries.filter((e) => e.isIntersecting).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top)[0];\n if (hit) setActive(hit.target.id);\n },\n { rootMargin: '-80px 0px -65% 0px' }\n );\n els.forEach((el) => io.observe(el));\n return () => io.disconnect();\n }, [key]);\n return active;\n}\n\n/**\n * A readable column for a long document, with its table of contents: a sticky\n * list beside it on desktop, a folded \"On this page\" above it on a phone. The\n * ids are the ids of the document's h2s. Pass the title as `header` (a\n * DocHeader) so it sits on the same column as the text.\n */\nexport function DocLayout({\n toc,\n header,\n children,\n className,\n}: {\n toc?: TocItem[];\n header?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n const active = useActiveHeading(toc?.map((t) => t.id) ?? []);\n const links = () =>\n toc?.map((t) => (\n <li key={t.id}>\n <a\n href={`#${t.id}`}\n aria-current={active === t.id ? 'location' : undefined}\n className={cn(\n 'block border-l py-1.5 pl-4 text-[0.875rem] leading-snug transition-colors',\n active === t.id\n ? 'border-foreground text-foreground'\n : 'border-border text-muted-foreground hover:text-foreground'\n )}\n >\n {t.label}\n </a>\n </li>\n ));\n const hasToc = !!toc && toc.length > 0;\n return (\n <div className={cn('oca-container pb-24', header ? 'pt-12 md:pt-20' : null, className)}>\n <div\n className={cn(\n 'mx-auto grid grid-cols-1 gap-8',\n hasToc\n ? 'max-w-[42rem] lg:max-w-[64rem] lg:grid-cols-[13rem_minmax(0,42rem)] lg:gap-x-16 lg:gap-y-10'\n : 'max-w-[42rem]'\n )}\n >\n {header ? <div className={cn(hasToc && 'lg:col-start-2', 'pb-4')}>{header}</div> : null}\n {hasToc ? (\n <>\n <nav\n aria-label=\"On this page\"\n className={cn('sticky top-24 hidden self-start lg:block', header && 'lg:row-start-2')}\n >\n <p className=\"mb-3 text-[0.875rem] font-medium\">On this page</p>\n <ul>{links()}</ul>\n </nav>\n <details className=\"group rounded-2xl border border-border bg-card px-4 py-3 lg:hidden\">\n <summary className=\"cursor-pointer list-none text-[0.9375rem] font-medium marker:hidden\">\n On this page\n </summary>\n <ul className=\"mt-3\">{links()}</ul>\n </details>\n </>\n ) : null}\n <div className={cn('min-w-0', hasToc && 'lg:col-start-2', hasToc && header && 'lg:row-start-2')}>\n {children}\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Badge } from '../primitives/badge';\nimport { Card, CardNumeral, CardTitle } from '../primitives/card';\n\nexport interface StepItem {\n title: ReactNode;\n body: ReactNode;\n /** A small pill beside the title (\"in testing\", \"on the path\"). */\n badge?: ReactNode;\n /** Overrides the automatic 01, 02, 03. */\n numeral?: ReactNode;\n}\n\nexport interface StepGridProps {\n items: StepItem[];\n /**\n * `cards` (white cards, \"Sign in. Earn. Own.\"), `plain` (open columns,\n * \"Ask for something a bot can't fake cheaply.\") or `ink` (dark cards,\n * \"Why partner now\"). Numerals are dropped on `ink`, as the deck does.\n */\n look?: 'cards' | 'plain' | 'ink';\n className?: string;\n}\n\nconst pad = (n: number) => String(n + 1).padStart(2, '0');\n\nexport function StepGrid({ items, look = 'cards', className }: StepGridProps) {\n const cols = items.length >= 3 ? 'md:grid-cols-3' : items.length === 2 ? 'md:grid-cols-2' : '';\n return (\n <ol className={cn('grid gap-4 md:gap-5', cols, className)}>\n {items.map((it, i) =>\n look === 'plain' ? (\n <li key={i} className=\"flex flex-col gap-3 pr-4\">\n <CardNumeral>{it.numeral ?? pad(i)}</CardNumeral>\n <CardTitle className=\"oca-title-sm\">\n {it.title}\n {it.badge ? <Badge>{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"oca-body text-[0.9375rem]\">{it.body}</div>\n </li>\n ) : look === 'ink' ? (\n <li key={i}>\n <Card tone=\"ink\" padding=\"md\" className=\"h-full\">\n <CardTitle className=\"text-oca-ink-title\">\n {it.title}\n {it.badge ? <Badge tone=\"onInk\">{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"mt-3 text-[1rem] leading-relaxed text-oca-ink-muted\">{it.body}</div>\n </Card>\n </li>\n ) : (\n <li key={i}>\n <Card padding=\"md\" className=\"flex h-full flex-col gap-3\">\n <CardNumeral>{it.numeral ?? pad(i)}</CardNumeral>\n <CardTitle>\n {it.title}\n {it.badge ? <Badge>{it.badge}</Badge> : null}\n </CardTitle>\n <div className=\"oca-body\">{it.body}</div>\n </Card>\n </li>\n )\n )}\n </ol>\n );\n}\n","import { createContext, useContext } from 'react';\n\n/** Where the viewer is inside the signed-in shell: its section and page. */\nexport interface ShellPlace {\n section?: string;\n page?: string;\n}\n\nexport const ShellContext = createContext<ShellPlace>({});\n\nexport function useShellPlace(): ShellPlace {\n return useContext(ShellContext);\n}\n","import { Check, Copy } from 'lucide-react';\nimport {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../lib/cn';\nimport { useShellPlace } from '../lib/shell-context';\nimport { Button } from '../primitives/button';\nimport { Skeleton, useTimedOut } from '../primitives/feedback';\nimport { ScrollFade } from '../primitives/scroll-fade';\n\n/* ── Page header ─────────────────────────────────────────────────────── */\n\n/**\n * The top of a signed-in page: section, page title, one sentence, actions.\n * Inside AppShell the eyebrow defaults to the current section, so every page\n * in a section opens at the same height. Pass `eyebrow={null}` to omit it.\n * Public pages use PageHero.\n */\nexport function PageHeader({\n eyebrow,\n title,\n description,\n actions,\n className,\n}: {\n eyebrow?: ReactNode;\n title: ReactNode;\n /** One sentence. Longer explanation belongs in the docs, not the header. */\n description?: ReactNode;\n actions?: ReactNode;\n className?: string;\n}) {\n const place = useShellPlace();\n const eb = eyebrow === undefined ? place.section : eyebrow;\n return (\n <header className={cn('flex flex-col gap-5 md:flex-row md:items-end md:justify-between', className)}>\n <div className=\"flex min-w-0 max-w-[44rem] flex-col gap-2.5\">\n {eb ? <p className=\"oca-eyebrow\">{eb}</p> : null}\n <h1 className=\"oca-display-3\">{title}</h1>\n {description ? <p className=\"oca-body max-w-[40rem] text-[1.0625rem]\">{description}</p> : null}\n </div>\n {actions ? <div className=\"flex flex-wrap items-center gap-2.5 md:shrink-0 md:justify-end\">{actions}</div> : null}\n </header>\n );\n}\n\n/* ── Stats ───────────────────────────────────────────────────────────── */\n\nconst InStatGrid = createContext(false);\n\nexport interface StatCardProps {\n label: ReactNode;\n value: ReactNode;\n hint?: ReactNode;\n /**\n * The number behind `value`, when there is one. StatGrid reads it: a grid\n * whose every `raw` is 0 or null shows one empty line instead of zeros.\n */\n raw?: number | null;\n className?: string;\n}\n\nexport function StatCard({ label, value, hint, className }: StatCardProps) {\n const inGrid = useContext(InStatGrid);\n return (\n <div\n data-ui=\"stat\"\n className={cn(\n 'rounded-[1.25rem] border border-border bg-card p-5 md:p-6',\n // In a grid, label, value and hint each share a row with their\n // neighbours, so values line up whatever wraps above them.\n inGrid ? 'row-span-3 grid grid-rows-subgrid gap-1.5' : 'flex flex-col gap-2',\n className\n )}\n >\n <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{label}</span>\n {/* Bottom-aligned within a grid row; a lone card keeps it under its label. */}\n <span\n className={cn(\n 'break-words oca-tabular text-[1.5rem] leading-tight tracking-[-0.02em] md:text-[1.75rem]',\n inGrid && 'self-end'\n )}\n >\n {value}\n </span>\n {hint ? (\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{hint}</span>\n ) : inGrid ? (\n <span aria-hidden />\n ) : null}\n </div>\n );\n}\n\nconst MD_COLS: Record<number, string> = {\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\nconst LG_COLS: Record<number, string> = {\n 1: 'lg:grid-cols-1',\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n 5: 'lg:grid-cols-5',\n};\nconst MD_SPAN: Record<number, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n};\nconst LG_SPAN: Record<number, string> = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n};\n\n/** Columns for n tiles: as few ragged rows as possible, never more than five. */\nfunction statColumns(n: number): number {\n if (n <= 5) return Math.max(1, n);\n if (n % 4 === 0) return 4;\n if (n % 3 === 0) return 3;\n return 4;\n}\n\n/** How wide the last tile must be to fill its row of `cols`. */\nfunction lastSpan(n: number, cols: number): number {\n const rest = n % cols;\n return rest === 0 ? 1 : cols - rest + 1;\n}\n\n/** One quiet line where a group of numbers would all be zero. */\nexport function EmptyLine({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <p\n className={cn(\n 'rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-5 py-4 text-[0.9375rem] text-muted-foreground',\n className\n )}\n >\n {children}\n </p>\n );\n}\n\nexport interface StatGridProps extends HTMLAttributes<HTMLDivElement> {\n /** Columns from md up. Default: the count up to 4, then 3 or 4. */\n columns?: 1 | 2 | 3 | 4 | 5;\n /** Shown instead of the tiles when the group is empty. */\n empty?: ReactNode;\n /** Force the empty line. Default: every child's `raw` is 0 or null. */\n isEmpty?: boolean;\n}\n\n/**\n * Stat tiles, two to a row on a phone. The last tile stretches to fill its row,\n * so a grid never ends in a hole, and a group of zeros becomes one line.\n */\nexport function StatGrid({ columns, empty, isEmpty, className, children, ...props }: StatGridProps) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<StatCardProps>[];\n const n = items.length;\n const allZero =\n n > 0 && items.every((el) => 'raw' in el.props && (el.props.raw === 0 || el.props.raw === null));\n if (isEmpty ?? allZero) return <EmptyLine className={className}>{empty ?? 'Nothing here yet.'}</EmptyLine>;\n const lg = columns ?? statColumns(n);\n // Five across is a desk-width row; a tablet gets three.\n const md = lg > 4 ? 3 : lg;\n const mdSpan = lastSpan(n, md);\n const lgSpan = lastSpan(n, lg);\n return (\n <InStatGrid.Provider value>\n <div\n className={cn(\n 'grid gap-3 md:gap-4',\n n === 1 ? 'grid-cols-1' : 'grid-cols-2',\n MD_COLS[md],\n LG_COLS[lg],\n className\n )}\n {...props}\n >\n {items.map((el, i) => {\n if (i !== n - 1) return el;\n const span = cn(\n n % 2 === 1 && n > 1 && 'max-md:col-span-2',\n (mdSpan > 1 || lgSpan > 1) && MD_SPAN[mdSpan],\n (mdSpan > 1 || lgSpan > 1) && LG_SPAN[lgSpan]\n );\n return span ? cloneElement(el, { className: cn(el.props.className, span) }) : el;\n })}\n </div>\n </InStatGrid.Provider>\n );\n}\n\n/* ── Key / value ─────────────────────────────────────────────────────── */\n\nexport interface KeyValueItem {\n label: ReactNode;\n value: ReactNode;\n mono?: boolean;\n}\n\nexport function KeyValueList({ items, className }: { items: KeyValueItem[]; className?: string }) {\n return (\n <dl className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((it, i) => (\n <div key={i} className=\"flex flex-col gap-1 px-5 py-3.5 sm:flex-row sm:items-baseline sm:gap-6\">\n <dt className=\"shrink-0 text-[0.875rem] text-muted-foreground sm:w-48\">{it.label}</dt>\n <dd className={cn('min-w-0 break-words text-[0.9375rem]', it.mono && 'font-mono text-[0.875rem]')}>\n {it.value}\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\n/* ── Table ───────────────────────────────────────────────────────────── */\n\nexport interface Column<T> {\n key: string;\n header: ReactNode;\n cell: (row: T) => ReactNode;\n align?: 'start' | 'end';\n /** A number: right-aligned, tabular, never wrapped. */\n numeric?: boolean;\n /** Hide below md in the table (the phone card list still shows it). */\n wide?: boolean;\n /** A CSS width for the column, e.g. '12rem' or '30%'. */\n width?: string;\n /** The narrowest it may get before the table scrolls instead. */\n minWidth?: string;\n /** Cut long content to one line (put the full value in a title or HashChip). */\n truncate?: boolean;\n /** The phone card's title. Defaults to the first column. */\n primary?: boolean;\n /** Leave out of the phone card list. */\n hideOnPhone?: boolean;\n}\n\n/**\n * Rows of data. Wider than its box, the table scrolls with an edge that says\n * so; under 640px it becomes a list of cards that keep every column's label.\n */\nexport function DataTable<T>({\n columns,\n rows,\n rowKey,\n empty,\n caption,\n phone = 'cards',\n className,\n}: {\n columns: Column<T>[];\n rows: T[];\n rowKey: (row: T, i: number) => string;\n empty?: ReactNode;\n caption?: string;\n /** Under 640px: a card per row (default), or the same table scrolling. */\n phone?: 'cards' | 'scroll';\n className?: string;\n}) {\n if (rows.length === 0 && empty) return <>{empty}</>;\n const primary = columns.find((c) => c.primary) ?? columns[0];\n const right = (c: Column<T>) => c.numeric || c.align === 'end';\n const table = (\n <div\n className={cn(\n 'overflow-hidden rounded-[1.25rem] border border-border bg-card',\n phone === 'cards' && 'max-sm:hidden',\n className\n )}\n >\n <ScrollFade fade=\"var(--card)\">\n <table className=\"w-full border-collapse text-left text-[0.9375rem]\">\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead>\n <tr className=\"border-b border-border\">\n {columns.map((c) => (\n <th\n key={c.key}\n scope=\"col\"\n style={{ width: c.width, minWidth: c.minWidth }}\n className={cn(\n 'whitespace-nowrap px-5 py-3 text-[0.8125rem] font-medium text-muted-foreground',\n right(c) && 'text-right',\n c.wide && 'hidden md:table-cell'\n )}\n >\n {c.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {rows.map((r, i) => (\n <tr key={rowKey(r, i)} className=\"transition-colors hover:bg-accent/60\">\n {columns.map((c) => (\n <td\n key={c.key}\n style={{ minWidth: c.minWidth }}\n className={cn(\n 'px-5 py-3.5 align-middle',\n right(c) && 'text-right',\n c.numeric && 'whitespace-nowrap oca-tabular',\n c.wide && 'hidden md:table-cell'\n )}\n >\n {c.truncate ? (\n <div className=\"truncate\" style={{ maxWidth: c.width ?? '16rem' }}>\n {c.cell(r)}\n </div>\n ) : (\n c.cell(r)\n )}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </ScrollFade>\n </div>\n );\n if (phone !== 'cards') return table;\n const rest = columns.filter((c) => c !== primary && !c.hideOnPhone);\n return (\n <>\n {table}\n <ul\n aria-label={caption}\n className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card sm:hidden', className)}\n >\n {rows.map((r, i) => (\n <li key={rowKey(r, i)} className=\"flex flex-col gap-2.5 px-4 py-4\">\n <div className=\"min-w-0 break-words text-[0.9375rem] font-medium\">{primary?.cell(r)}</div>\n {rest.length > 0 ? (\n <dl className=\"grid grid-cols-[minmax(5.5rem,auto)_minmax(0,1fr)] gap-x-4 gap-y-1.5 text-[0.875rem]\">\n {rest.map((c) => (\n <div key={c.key} className=\"contents\">\n <dt className=\"text-muted-foreground\">{c.header}</dt>\n <dd className={cn('min-w-0 break-words', c.numeric && 'oca-tabular')}>{c.cell(r)}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n </li>\n ))}\n </ul>\n </>\n );\n}\n\n/* ── Empty, notice ───────────────────────────────────────────────────── */\n\nexport function EmptyState({\n title,\n children,\n action,\n icon,\n className,\n}: {\n title: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n /** An icon that says what is missing. None by default: the words carry it. */\n icon?: ReactNode;\n className?: string;\n}) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center gap-3 rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-6 py-10 text-center',\n className\n )}\n >\n {icon ? (\n <span className=\"mb-1 flex size-11 items-center justify-center rounded-full bg-muted text-muted-foreground [&_svg]:size-5\">\n {icon}\n </span>\n ) : null}\n <h3 className=\"oca-title-sm\">{title}</h3>\n {children ? <div className=\"oca-body max-w-md text-[0.9375rem]\">{children}</div> : null}\n {action ? <div className=\"mt-2 flex flex-wrap justify-center gap-3\">{action}</div> : null}\n </div>\n );\n}\n\n/*\n * Three kinds of notice: neutral, the orange accent for something that needs\n * attention, and red for a real error. The old tone names still compile and\n * land on one of the three, so no page can add a fourth colour.\n */\ntype NoticeTone = 'neutral' | 'brand' | 'danger' | 'info' | 'success' | 'warning';\n\nconst NOTICE_KIND: Record<NoticeTone, 'neutral' | 'brand' | 'danger'> = {\n neutral: 'neutral',\n info: 'neutral',\n success: 'neutral',\n brand: 'brand',\n warning: 'brand',\n danger: 'danger',\n};\n\nexport function Notice({\n tone = 'neutral',\n title,\n children,\n action,\n className,\n}: {\n tone?: NoticeTone;\n title?: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n className?: string;\n}) {\n const kind = NOTICE_KIND[tone];\n return (\n <div\n role={tone === 'danger' || tone === 'warning' ? 'alert' : 'note'}\n data-tone={kind}\n className={cn(\n 'flex flex-col gap-3 rounded-2xl border border-border bg-card px-5 py-4 sm:flex-row sm:items-start sm:justify-between',\n kind === 'danger' && 'border-[color-mix(in_oklab,var(--destructive)_40%,var(--border))]',\n className\n )}\n >\n <div className=\"flex min-w-0 gap-3\">\n {kind !== 'neutral' ? (\n <span\n aria-hidden\n className={cn(\n 'mt-[0.45rem] size-2 shrink-0 rounded-full',\n kind === 'brand' ? 'bg-oca-orange' : 'bg-destructive'\n )}\n />\n ) : null}\n <div className=\"flex min-w-0 flex-col gap-1\">\n {title ? (\n <p className={cn('text-[0.9375rem] font-medium', kind === 'danger' && 'text-destructive')}>\n {title}\n </p>\n ) : null}\n {children ? <div className=\"text-[0.9375rem] leading-relaxed text-muted-foreground\">{children}</div> : null}\n </div>\n </div>\n {action ? <div className=\"shrink-0\">{action}</div> : null}\n </div>\n );\n}\n\n/**\n * Placeholder rows while something loads, and a way out if it never does:\n * after `timeoutMs` the skeleton turns into a message with a retry.\n */\nexport function LoadingBlock({\n rows = 3,\n timeoutMs = 12_000,\n onRetry,\n label = 'Loading',\n className,\n}: {\n rows?: number;\n timeoutMs?: number;\n onRetry?: () => void;\n label?: string;\n className?: string;\n}) {\n const timedOut = useTimedOut(true, timeoutMs);\n if (timedOut) {\n return (\n <Notice\n className={className}\n title=\"This is taking longer than it should.\"\n action={\n <Button size=\"sm\" variant=\"secondary\" onClick={onRetry ?? (() => window.location.reload())}>\n Try again\n </Button>\n }\n >\n Check your connection, then try again.\n </Notice>\n );\n }\n return (\n <div role=\"status\" aria-label={label} className={cn('flex flex-col gap-3', className)}>\n {Array.from({ length: rows }, (_, i) => (\n <Skeleton key={i} className=\"h-16 rounded-2xl\" />\n ))}\n </div>\n );\n}\n\n/* ── Hashes, addresses, ids ──────────────────────────────────────────── */\n\nfunction middle(v: string, head: number, tail: number) {\n return v.length <= head + tail + 1 ? v : `${v.slice(0, head)}…${v.slice(-tail)}`;\n}\n\nexport function useCopy(timeoutMs = 1600) {\n const [copied, setCopied] = useState(false);\n const t = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => () => {\n if (t.current) clearTimeout(t.current);\n }, []);\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n if (t.current) clearTimeout(t.current);\n t.current = setTimeout(() => setCopied(false), timeoutMs);\n } catch {\n setCopied(false);\n }\n },\n [timeoutMs]\n );\n return { copied, copy };\n}\n\nexport function CopyButton({ value, label = 'Copy', className }: { value: string; label?: string; className?: string }) {\n const { copied, copy } = useCopy();\n return (\n <button\n type=\"button\"\n onClick={() => void copy(value)}\n aria-label={copied ? 'Copied' : label}\n className={cn(\n 'inline-flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n {copied ? <Check className=\"size-4 text-success\" /> : <Copy className=\"size-4\" />}\n <span aria-live=\"polite\" className=\"sr-only\">\n {copied ? 'Copied' : ''}\n </span>\n </button>\n );\n}\n\n/** A long identifier shown as head…tail in mono, with copy. The full value is\n * the title and the copied text, never lost to the truncation. */\nexport function HashChip({\n value,\n head = 8,\n tail = 6,\n copy = true,\n href,\n className,\n}: {\n value: string;\n head?: number;\n tail?: number;\n copy?: boolean;\n href?: string;\n className?: string;\n}) {\n const shown = middle(value, head, tail);\n const text = (\n <span title={value} className=\"font-mono text-[0.875rem]\">\n {shown}\n </span>\n );\n return (\n <span className={cn('inline-flex max-w-full items-center gap-1', className)}>\n {href ? (\n <a href={href} className=\"underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\">\n {text}\n </a>\n ) : (\n text\n )}\n {copy ? <CopyButton value={value} label=\"Copy full value\" /> : null}\n </span>\n );\n}\n\n/* ── Progress ────────────────────────────────────────────────────────── */\n\nexport type StepState = 'done' | 'current' | 'upcoming' | 'blocked';\n\nexport interface ProgressStep {\n label: ReactNode;\n hint?: ReactNode;\n state: StepState;\n}\n\nexport function ProgressSteps({ steps, className }: { steps: ProgressStep[]; className?: string }) {\n return (\n <ol className={cn('flex flex-col gap-0', className)}>\n {steps.map((s, i) => {\n const last = i === steps.length - 1;\n return (\n <li key={i} className=\"relative flex gap-4 pb-6 last:pb-0\" aria-current={s.state === 'current' ? 'step' : undefined}>\n {!last ? (\n <span\n aria-hidden\n className={cn(\n 'absolute left-[11px] top-7 h-[calc(100%-1.5rem)] w-px',\n s.state === 'done' ? 'bg-foreground/30' : 'bg-border'\n )}\n />\n ) : null}\n <span\n className={cn(\n 'relative z-10 mt-0.5 flex size-6 shrink-0 items-center justify-center rounded-full border text-[0.75rem] oca-tabular',\n s.state === 'done' && 'border-primary bg-primary text-primary-foreground',\n s.state === 'current' && 'border-brand bg-card text-oca-accent-ink',\n s.state === 'upcoming' && 'border-border bg-card text-muted-foreground',\n s.state === 'blocked' && 'border-destructive bg-card text-destructive'\n )}\n >\n {s.state === 'done' ? <Check className=\"size-3.5\" strokeWidth={3} /> : String(i + 1).padStart(2, '0')}\n </span>\n <div className=\"flex min-w-0 flex-col gap-1\">\n <span className={cn('text-[0.9375rem]', s.state === 'upcoming' ? 'text-muted-foreground' : 'font-medium')}>\n {s.label}\n </span>\n {s.hint ? <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{s.hint}</span> : null}\n </div>\n </li>\n );\n })}\n </ol>\n );\n}\n\n/* ── Activity ────────────────────────────────────────────────────────── */\n\nexport interface ActivityItem {\n id: string;\n title: ReactNode;\n meta?: ReactNode;\n /** A small mark before the text, such as a Monogram. */\n leading?: ReactNode;\n trailing?: ReactNode;\n href?: string;\n}\n\nexport function ActivityList({ items, empty, className }: { items: ActivityItem[]; empty?: ReactNode; className?: string }) {\n if (items.length === 0 && empty) return <>{empty}</>;\n return (\n <ul className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((it) => {\n const body = (\n <div className=\"flex items-center justify-between gap-4 px-5 py-4\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {it.leading ? <div className=\"shrink-0\">{it.leading}</div> : null}\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem]\">{it.title}</span>\n {it.meta ? <span className=\"truncate text-[0.8125rem] text-muted-foreground\">{it.meta}</span> : null}\n </div>\n </div>\n {it.trailing ? <div className=\"shrink-0 text-right\">{it.trailing}</div> : null}\n </div>\n );\n return (\n <li key={it.id}>\n {it.href ? (\n <a href={it.href} className=\"block transition-colors hover:bg-accent/60\">\n {body}\n </a>\n ) : (\n body\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n","import { useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { CopyButton } from './data';\n\n/*\n * The deck's \"What you get\" panel: a dark card of packages, each a peach title,\n * a coloured identifier and a // comment. The identifier's colour says what it\n * is, the way an editor would: a package, a component tag, a licence link.\n */\nexport interface PackageItem {\n title: ReactNode;\n /** The thing itself: an npm name, a JSX tag, a licence line. */\n code: ReactNode;\n kind?: 'package' | 'tag' | 'link';\n /** Rendered after `// `. */\n note?: ReactNode;\n href?: string;\n}\n\nconst KIND = {\n package: 'text-oca-code-package',\n tag: 'text-oca-code-tag',\n link: 'text-oca-code-link',\n} as const;\n\nexport function PackageCard({ items, className }: { items: PackageItem[]; className?: string }) {\n return (\n <div\n className={cn(\n 'grid gap-x-10 gap-y-7 rounded-[1.25rem] border border-oca-ink-line bg-oca-ink-card p-6 text-oca-ink-foreground md:grid-cols-2 md:p-9',\n className\n )}\n >\n {items.map((it, i) => {\n // Sou sets identifiers in the text face, not mono: they read as names here.\n const code = <span className={cn('text-[0.9375rem]', KIND[it.kind ?? 'package'])}>{it.code}</span>;\n return (\n <div key={i} className=\"flex min-w-0 flex-col gap-1.5\">\n <h3 className=\"text-[1.125rem] font-semibold tracking-[-0.01em] text-oca-ink-title\">{it.title}</h3>\n {it.href ? (\n <a href={it.href} className=\"w-fit underline decoration-transparent underline-offset-4 hover:decoration-current\">\n {code}\n </a>\n ) : (\n code\n )}\n {it.note ? (\n <p className=\"text-[0.9375rem] leading-relaxed text-oca-ink-subtle\">\n <span aria-hidden>{'// '}</span>\n {it.note}\n </p>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n}\n\n/**\n * A block of code: a header with its name and a copy button, then the code on\n * a dark well that scrolls sideways (with an edge that says so) rather than\n * cutting a line off. Past `maxLines` it folds, with a button to show the rest.\n */\nexport function CodeBlock({\n code,\n caption,\n copy = true,\n maxLines,\n className,\n}: {\n code: string;\n /** The file, language or purpose. Defaults to \"Code\". */\n caption?: ReactNode;\n copy?: boolean;\n maxLines?: number;\n className?: string;\n}) {\n const lines = code.split('\\n').length;\n const foldable = maxLines !== undefined && lines > maxLines + 2;\n const [open, setOpen] = useState(false);\n const folded = foldable && !open;\n return (\n <figure\n className={cn(\n 'overflow-hidden rounded-[1.25rem] border border-[var(--oca-code-line)] bg-[var(--oca-code-surface)]',\n className\n )}\n >\n <figcaption className=\"flex h-11 items-center justify-between gap-3 border-b border-[var(--oca-code-line)] pl-5 pr-2\">\n <span className=\"truncate text-[0.8125rem] text-oca-ink-subtle\">{caption ?? 'Code'}</span>\n {copy ? (\n <CopyButton\n value={code}\n label=\"Copy code\"\n className=\"text-oca-ink-subtle hover:bg-white/10 hover:text-white\"\n />\n ) : null}\n </figcaption>\n <div className=\"relative\">\n <div\n className={cn(folded && 'overflow-hidden')}\n style={folded ? { maxHeight: `calc(${maxLines} * 1.625em + 2.5rem)` } : undefined}\n >\n <ScrollFade fade=\"var(--oca-code-surface)\">\n <pre className=\"w-max min-w-full p-5 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]\">\n <code>{code}</code>\n </pre>\n </ScrollFade>\n </div>\n {foldable ? (\n <div\n className={cn(\n 'flex justify-center px-5 pb-4',\n folded && 'absolute inset-x-0 bottom-0 pt-16'\n )}\n style={\n folded\n ? { background: 'linear-gradient(to top, var(--oca-code-surface) 40%, transparent)' }\n : undefined\n }\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"rounded-full border border-white/20 px-4 py-1.5 text-[0.8125rem] text-white transition-colors hover:bg-white/10\"\n >\n {open ? 'Show less' : `Show all ${lines} lines`}\n </button>\n </div>\n ) : null}\n </div>\n </figure>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Where a payment goes, as one bar: each segment's width is its share. Made for\n * the orange band (\"What it costs\"), where ink and white both clear contrast.\n */\nexport interface SplitSegment {\n pct: number;\n label: ReactNode;\n tone?: 'ink' | 'card';\n}\n\nexport function SplitBar({\n segments,\n caption,\n className,\n}: {\n segments: SplitSegment[];\n caption?: ReactNode;\n className?: string;\n}) {\n return (\n <figure className={cn('flex flex-col gap-5', className)}>\n {caption ? <figcaption className=\"text-[0.9375rem]\">{caption}</figcaption> : null}\n <div className=\"flex h-16 w-full gap-1.5 overflow-hidden rounded-[1.25rem] md:h-20\">\n {segments.map((s, i) => (\n <div\n key={i}\n className={cn(\n 'flex min-w-[4.25rem] items-end rounded-[1rem] px-3 pb-2.5 md:px-4 md:pb-3',\n s.tone === 'card' ? 'bg-white text-oca-ink' : 'bg-oca-ink text-white'\n )}\n style={{ flexBasis: `${s.pct}%` }}\n >\n <span\n // One size for every figure, so they sit on one line; it fits a segment at its min width.\n className=\"oca-tabular text-[1.125rem] leading-none tracking-[-0.02em] md:text-[1.5rem]\"\n >\n {s.pct}%\n </span>\n </div>\n ))}\n </div>\n <dl className=\"grid gap-x-8 gap-y-2 sm:grid-cols-2\">\n {segments.map((s, i) => (\n <div key={i} className=\"flex items-baseline gap-2.5\">\n <dt className=\"sr-only\">{s.pct}%</dt>\n <span\n aria-hidden\n className={cn(\n 'inline-block size-2.5 shrink-0 translate-y-[-1px] rounded-full',\n s.tone === 'card' ? 'bg-white' : 'bg-oca-ink'\n )}\n />\n <dd className=\"text-[0.9375rem] leading-snug\">{s.label}</dd>\n </div>\n ))}\n </dl>\n </figure>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * \"What's true today.\" A two-column table: a status and what it covers. Sou's\n * note on the slide is the brief for this component: say it plainly; being\n * clear about what isn't done yet is part of the pitch. So the statuses are\n * fixed words, never icons, and a row cannot be written without one.\n */\nexport type TruthStatus = 'yes' | 'testing' | 'not-yet' | 'no';\n\nconst LABEL: Record<TruthStatus, string> = {\n yes: 'Yes',\n testing: 'In testing',\n 'not-yet': 'Not yet',\n no: 'No',\n};\n\nconst TONE: Record<TruthStatus, string> = {\n yes: 'text-oca-accent-ink',\n testing: 'text-foreground',\n 'not-yet': 'text-muted-foreground',\n no: 'text-muted-foreground',\n};\n\nexport interface TruthRow {\n status: TruthStatus;\n what: ReactNode;\n}\n\nexport function TruthTable({\n rows,\n statusHeading = 'Status',\n whatHeading = 'What',\n className,\n}: {\n rows: TruthRow[];\n statusHeading?: string;\n whatHeading?: string;\n className?: string;\n}) {\n return (\n <>\n {/* Under 640px a two-column table squeezes the text to a few words a\n line, so each row becomes a status over its sentence. */}\n <ul\n className={cn(\n 'divide-y divide-oca-hairline-strong overflow-hidden rounded-xl border border-oca-hairline-strong bg-card sm:hidden',\n className\n )}\n >\n {rows.map((r, i) => (\n <li key={i} className=\"flex flex-col gap-1.5 px-4 py-3.5\">\n <span className={cn('text-[0.875rem] font-medium', TONE[r.status])}>{LABEL[r.status]}</span>\n <span className=\"text-[0.9375rem] leading-relaxed\">{r.what}</span>\n </li>\n ))}\n </ul>\n <div className={cn('overflow-hidden rounded-xl border border-oca-hairline-strong max-sm:hidden', className)}>\n <table className=\"w-full border-collapse text-left text-[0.9375rem] md:text-[1rem]\">\n <thead className=\"bg-oca-table-head\">\n <tr>\n <th scope=\"col\" className=\"w-[30%] border-b border-oca-hairline-strong px-4 py-3 font-semibold md:w-[22%]\">\n {statusHeading}\n </th>\n <th scope=\"col\" className=\"border-b border-l border-oca-hairline-strong px-4 py-3 font-semibold\">\n {whatHeading}\n </th>\n </tr>\n </thead>\n <tbody className=\"bg-card\">\n {rows.map((r, i) => (\n <tr key={i} className=\"align-top\">\n <td\n className={cn(\n 'border-t border-oca-hairline-strong px-4 py-3 font-medium',\n i === 0 && 'border-t-0',\n TONE[r.status]\n )}\n >\n {LABEL[r.status]}\n </td>\n <td\n className={cn(\n 'border-l border-t border-oca-hairline-strong px-4 py-3 leading-relaxed',\n i === 0 && 'border-t-0'\n )}\n >\n {r.what}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </>\n );\n}\n","import type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Sats, always as whole integers with tabular figures. An amount nobody has\n * measured renders as \"—\" with \"unknown\" for screen readers, never as 0: a\n * missing balance shown as zero is a false statement about someone's money.\n */\n\nconst INT = new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 });\nconst COMPACT = new Intl.NumberFormat('en-US', { notation: 'compact', maximumFractionDigits: 1 });\n\nexport interface SatsTextOptions {\n /** Append \" sats\" (default) or nothing. */\n unit?: 'sats' | 'none';\n /** 1.2K, 3.4M. For dense tables and charts only. */\n compact?: boolean;\n /** Prefix + for positive amounts (credits). */\n signed?: boolean;\n}\n\n/** A sats amount as text. Returns null for an unknown amount. */\nexport function satsText(value: number | null | undefined, opts: SatsTextOptions = {}): string | null {\n if (value == null || !Number.isFinite(value)) return null;\n const whole = Math.trunc(value);\n const body = (opts.compact ? COMPACT : INT).format(Math.abs(whole));\n const sign = whole < 0 ? '−' : opts.signed && whole > 0 ? '+' : '';\n const unit = opts.unit === 'none' ? '' : whole === 1 || whole === -1 ? ' sat' : ' sats';\n return `${sign}${body}${unit}`;\n}\n\nexport interface SatsProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'>, SatsTextOptions {\n value: number | null | undefined;\n /** What to show for an unknown amount. */\n unknown?: string;\n}\n\nexport function Sats({ value, unit, compact, signed, unknown = '—', className, ...props }: SatsProps) {\n const text = satsText(value, { unit, compact, signed });\n if (text === null) {\n return (\n <span className={cn('oca-tabular text-muted-foreground', className)} {...props}>\n <span aria-hidden>{unknown}</span>\n <span className=\"sr-only\">unknown</span>\n </span>\n );\n }\n return (\n <span className={cn('oca-tabular whitespace-nowrap', className)} {...props}>\n {text}\n </span>\n );\n}\n\n/** \"≈ $12.34\" beside an amount, when a price is known. Renders nothing otherwise. */\nexport function UsdApprox({\n sats,\n usdPerBtc,\n className,\n}: {\n sats: number | null | undefined;\n usdPerBtc: number | null | undefined;\n className?: string;\n}) {\n if (sats == null || usdPerBtc == null || !Number.isFinite(sats) || !Number.isFinite(usdPerBtc)) return null;\n const usd = (sats / 1e8) * usdPerBtc;\n // Cents, never fractions of one: under half a cent says so instead of \"$0.0012\".\n const text =\n usd > 0 && usd < 0.005\n ? '< $0.01'\n : new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(usd);\n return <span className={cn('oca-tabular text-muted-foreground', className)}>≈ {text}</span>;\n}\n\n/** A large figure with its label: balances, totals. */\nexport function SatsFigure({\n label,\n value,\n hint,\n size = 'md',\n className,\n}: {\n label: string;\n value: number | null | undefined;\n hint?: React.ReactNode;\n /** lg: the figure a page leads with, well above the tiles beneath it. */\n size?: 'md' | 'lg';\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col gap-1.5', className)}>\n <span className=\"text-[0.9375rem] text-muted-foreground\">{label}</span>\n <span\n className={cn(\n 'oca-tabular',\n size === 'lg'\n ? 'text-[clamp(3rem,2.2rem+3vw,4.75rem)] leading-[0.95] tracking-[-0.045em] [font-family:var(--oc-font-display)]'\n : 'oca-display-3'\n )}\n >\n <Sats value={value} unit=\"none\" />\n <span className=\"ml-2 text-[0.5em] tracking-normal text-muted-foreground\">sats</span>\n </span>\n {hint ? <span className=\"text-[0.875rem] text-muted-foreground\">{hint}</span> : null}\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The product shown as an object: a phone, a browser window, a card floating\n * beside them. They hold real-looking UI drawn from the system's own parts, so\n * a page shows what a person will see instead of describing it.\n */\n\n/** A phone with an ink bezel and a rounded screen. Children are the screen. */\nexport function PhoneFrame({ className, style, children }: { className?: string; style?: CSSProperties; children: ReactNode }) {\n return (\n <div\n className={cn(\n // A lighter bezel in dark mode, or the phone dissolves into the page.\n 'relative w-[17.5rem] shrink-0 rounded-[2.9rem] bg-[#0b0b0c] p-[0.6rem] dark:bg-[#2a2a2d]',\n 'shadow-[0_50px_100px_-40px_rgb(10_10_10/0.55),0_0_0_1px_rgb(255_255_255/0.06)_inset]',\n className\n )}\n style={style}\n >\n <div className=\"relative aspect-[9/19.2] overflow-hidden rounded-[2.35rem] bg-background\">\n <div aria-hidden className=\"absolute left-1/2 top-2.5 z-10 h-[1.35rem] w-[5.6rem] -translate-x-1/2 rounded-full bg-[#0b0b0c]\" />\n {children}\n </div>\n </div>\n );\n}\n\n/** A browser window with its address. Children are the page. */\nexport function BrowserFrame({\n url = 'ochk.app',\n className,\n style,\n children,\n}: {\n url?: string;\n className?: string;\n style?: CSSProperties;\n children: ReactNode;\n}) {\n return (\n <div\n className={cn(\n 'overflow-hidden rounded-[1.1rem] border border-border bg-card',\n 'shadow-[0_40px_90px_-40px_rgb(10_10_10/0.45)]',\n className\n )}\n style={style}\n >\n <div className=\"flex h-10 items-center gap-3 border-b border-border px-4\">\n <div aria-hidden className=\"flex gap-1.5\">\n <span className=\"size-2.5 rounded-full bg-[#ff5f57]\" />\n <span className=\"size-2.5 rounded-full bg-[#febc2e]\" />\n <span className=\"size-2.5 rounded-full bg-[#28c840]\" />\n </div>\n <div className=\"mx-auto flex h-6 min-w-0 max-w-[60%] flex-1 items-center justify-center rounded-md bg-muted px-3 text-[0.75rem] text-muted-foreground\">\n <span className=\"truncate\">{url}</span>\n </div>\n <span aria-hidden className=\"w-[2.6rem]\" />\n </div>\n <div className=\"relative\">{children}</div>\n </div>\n );\n}\n\n/** A small card that floats beside a picture: one fact, with an icon. */\nexport function FloatChip({\n icon,\n title,\n detail,\n delay = 0,\n className,\n style,\n}: {\n icon?: ReactNode;\n title: ReactNode;\n detail?: ReactNode;\n /** Seconds to offset the drift, so neighbours do not move in step. */\n delay?: number;\n className?: string;\n style?: CSSProperties;\n}) {\n return (\n <div\n className={cn(\n 'oca-animate-drift flex items-center gap-3 rounded-2xl border border-border bg-card/90 py-2.5 pl-2.5 pr-4 backdrop-blur-md',\n 'shadow-[0_24px_50px_-24px_rgb(10_10_10/0.35)]',\n className\n )}\n style={{ animationDelay: `${-delay}s`, ...style }}\n >\n {icon ? (\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-xl bg-muted text-foreground [&_svg]:size-4\">\n {icon}\n </span>\n ) : null}\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"text-[0.875rem] font-medium leading-tight\">{title}</span>\n {detail ? <span className=\"text-[0.8125rem] leading-tight text-muted-foreground\">{detail}</span> : null}\n </span>\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * A project, app or site as a tile: its first letter on one of the deck's three\n * grounds, under a faint dot screen. The ground is picked from the seed, so the\n * same thing keeps the same tile everywhere it appears.\n */\n\nconst GROUNDS = [\n {\n className: 'text-oca-ink',\n background: 'linear-gradient(145deg, var(--oca-orange-light), var(--oca-orange-deep))',\n dot: 'rgb(10 10 10 / 0.22)',\n },\n {\n // Lifted at the top edge so the tile keeps its shape on a dark card.\n className: 'text-white ring-1 ring-inset ring-white/15',\n background: 'linear-gradient(145deg, #3d3d3d, #0d0d0d 70%)',\n dot: 'rgb(255 255 255 / 0.16)',\n },\n {\n className: 'text-oca-ink',\n background: 'linear-gradient(145deg, #fff1df, var(--oca-peach))',\n dot: 'rgb(234 88 11 / 0.22)',\n },\n] as const;\n\nconst SIZES = {\n sm: 'size-9 rounded-[0.7rem] text-[0.9375rem]',\n md: 'size-11 rounded-[0.85rem] text-[1.125rem]',\n lg: 'size-14 rounded-[1.05rem] text-[1.5rem]',\n} as const;\n\n/** The letter a name is known by: its first letter or digit, upper-cased. */\nexport function monogramLetter(name: string): string {\n const match = name.match(/[\\p{L}\\p{N}]/u);\n return match ? match[0].toLocaleUpperCase() : '·';\n}\n\n/** Which ground a seed lands on: FNV-1a, so it is stable across renders and builds. */\nexport function monogramGround(seed: string): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < seed.length; i++) {\n h ^= seed.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0) % GROUNDS.length;\n}\n\nexport function Monogram({\n name,\n seed,\n size = 'md',\n className,\n style,\n}: {\n name: string;\n /** What keeps the tile stable, such as a project key or a domain. Defaults to the name. */\n seed?: string;\n size?: keyof typeof SIZES;\n className?: string;\n style?: CSSProperties;\n}) {\n const ground = GROUNDS[monogramGround(seed ?? name)] ?? GROUNDS[0];\n return (\n <span\n aria-hidden\n className={cn(\n 'relative inline-flex shrink-0 select-none items-center justify-center overflow-hidden font-semibold leading-none tracking-[-0.02em]',\n SIZES[size],\n ground.className,\n className\n )}\n style={{ background: ground.background, ...style }}\n >\n <span\n className=\"absolute inset-0\"\n style={{\n backgroundImage: `radial-gradient(circle, ${ground.dot} 0.9px, transparent 1.2px)`,\n backgroundSize: '6px 6px',\n maskImage: 'radial-gradient(90% 90% at 100% 100%, black, transparent 75%)',\n }}\n />\n <span className=\"relative\">{monogramLetter(name)}</span>\n </span>\n );\n}\n","'use client';\n\nimport { Component, type ErrorInfo, type ReactNode } from 'react';\n\nimport { Button } from '../primitives/button';\nimport { EmptyState } from './data';\n\ninterface Props {\n children: ReactNode;\n /** Changing it clears a caught error, so the next page renders afresh. Pass the route. */\n resetKey?: unknown;\n /** Told about each caught error, for logging. */\n onError?: (error: Error, info: ErrorInfo) => void;\n /** Replaces the default message. */\n fallback?: (reset: () => void) => ReactNode;\n}\n\ninterface State {\n failed: boolean;\n key: unknown;\n}\n\n/**\n * Keeps one broken part of a page from blanking the whole page. The default\n * says so in a sentence and offers a retry and a reload.\n */\nexport class ErrorBoundary extends Component<Props, State> {\n state: State = { failed: false, key: this.props.resetKey };\n\n static getDerivedStateFromError(): Partial<State> {\n return { failed: true };\n }\n\n static getDerivedStateFromProps(props: Props, state: State): Partial<State> | null {\n return props.resetKey === state.key ? null : { failed: false, key: props.resetKey };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n this.props.onError?.(error, info);\n }\n\n reset = (): void => this.setState({ failed: false });\n\n render(): ReactNode {\n if (!this.state.failed) return this.props.children;\n if (this.props.fallback) return this.props.fallback(this.reset);\n return (\n <div className=\"oca-container py-16\">\n <EmptyState\n title=\"Something on this page broke.\"\n action={\n <>\n <Button onClick={this.reset}>Try again</Button>\n <Button variant=\"secondary\" onClick={() => window.location.reload()}>\n Reload the page\n </Button>\n </>\n }\n >\n Nothing you saved is affected. If it keeps happening, tell us at hello@ochk.io.\n </EmptyState>\n </div>\n );\n }\n}\n","import { Menu } from 'lucide-react';\nimport Link from 'next/link';\nimport { useState, type ReactNode } from 'react';\n\nimport { Lockup, Mark } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { Sheet, SheetContent, SheetTitle, SheetTrigger } from '../primitives/overlay';\n\nexport interface NavItem {\n href: string;\n label: ReactNode;\n /** Marks the current section for styling and aria-current. */\n active?: boolean;\n external?: boolean;\n}\n\nfunction NavLink({ item, className, onNavigate }: { item: NavItem; className?: string; onNavigate?: () => void }) {\n const cls = cn(\n 'rounded-full px-3 py-2 text-[0.9375rem] transition-colors',\n item.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground',\n className\n );\n if (item.external) {\n return (\n <a href={item.href} className={cls} rel=\"noreferrer\" onClick={onNavigate}>\n {item.label}\n </a>\n );\n }\n return (\n <Link href={item.href} className={cls} aria-current={item.active ? 'page' : undefined} onClick={onNavigate}>\n {item.label}\n </Link>\n );\n}\n\n/**\n * The public header: lockup, a few words of navigation, actions on the right.\n * Below md the navigation moves into a sheet; the actions stay.\n */\nexport function SiteHeader({\n home = '/',\n brand,\n nav = [],\n actions,\n className,\n}: {\n home?: string;\n brand?: ReactNode;\n nav?: NavItem[];\n actions?: ReactNode;\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n return (\n <header\n className={cn(\n 'sticky top-0 z-40 w-full border-b border-transparent bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/70',\n className\n )}\n >\n <div\n className={cn(\n 'oca-container flex h-16 items-center justify-between gap-4 md:h-[4.5rem]',\n // Three columns, the outer two each at least their content: the\n // navigation stays centred whatever the actions hold, so it does\n // not shift when they change (signed out to signed in).\n nav.length > 0 &&\n 'md:grid md:grid-cols-[minmax(max-content,1fr)_auto_minmax(max-content,1fr)]'\n )}\n >\n <Link href={home} className=\"-ml-1 justify-self-start rounded-lg p-1\">\n {brand ?? <Lockup size={28} />}\n {/* Read as \"orangecheck home\": the name starts with what the link shows. */}\n <span className=\"sr-only\"> home</span>\n </Link>\n {nav.length > 0 ? (\n <nav aria-label=\"Main\" className=\"hidden items-center gap-1 md:flex\">\n {nav.map((n) => (\n <NavLink key={n.href} item={n} />\n ))}\n </nav>\n ) : null}\n <div className=\"flex items-center gap-2 justify-self-end\">\n {actions}\n {nav.length > 0 ? (\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger\n className=\"inline-flex size-10 items-center justify-center rounded-full text-foreground hover:bg-accent md:hidden\"\n aria-label=\"Open menu\"\n >\n <Menu className=\"size-5\" />\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"pt-16\">\n <SheetTitle className=\"sr-only\">Menu</SheetTitle>\n <nav aria-label=\"Main\" className=\"flex flex-col\">\n {nav.map((n) => (\n <NavLink\n key={n.href}\n item={n}\n className=\"rounded-xl px-3 py-3 text-[1.0625rem]\"\n onNavigate={() => setOpen(false)}\n />\n ))}\n </nav>\n </SheetContent>\n </Sheet>\n ) : null}\n </div>\n </div>\n </header>\n );\n}\n\nexport interface FooterColumn {\n heading: string;\n links: NavItem[];\n}\n\n/**\n * The footer, in the deck's register: a line of fine print, the support credit,\n * and a few columns of links. Links are 44px tall on phones.\n */\nexport function SiteFooter({\n columns = [],\n fineprint,\n meta,\n signature = true,\n className,\n}: {\n columns?: FooterColumn[];\n fineprint?: ReactNode;\n meta?: ReactNode;\n /** The mark and wordmark at display size, closing the page. */\n signature?: boolean;\n className?: string;\n}) {\n return (\n <footer className={cn('border-t border-border bg-background', className)}>\n <div className=\"oca-container grid grid-cols-2 gap-x-6 gap-y-10 py-14 md:grid-cols-[1.3fr_repeat(3,1fr)] md:py-16\">\n <div className=\"col-span-2 flex flex-col gap-4 md:col-span-1\">\n <Lockup size={26} />\n {fineprint ? <p className=\"max-w-xs text-[0.9375rem] leading-relaxed text-muted-foreground\">{fineprint}</p> : null}\n </div>\n {columns.map((col, i) => {\n // On a phone an odd last column takes the whole row, its links in two\n // columns, instead of sitting alone beside an empty half.\n const spans = columns.length % 2 === 1 && i === columns.length - 1;\n return (\n <div\n key={col.heading}\n className={cn('flex min-w-0 flex-col gap-1', spans && 'col-span-2 md:col-span-1')}\n >\n <p className=\"mb-2 text-[0.875rem] font-medium\">{col.heading}</p>\n <div className={cn('flex flex-col gap-1', spans && 'grid grid-cols-2 gap-x-6 md:flex md:flex-col')}>\n {col.links.map((l) => (\n <NavLink\n key={l.href}\n item={l}\n className=\"-mx-3 py-2.5 text-[0.9375rem] md:py-1.5\"\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n {signature ? (\n <div aria-hidden className=\"oca-container select-none overflow-hidden pb-8 md:pb-12\">\n <div className=\"flex items-end gap-[0.18em] text-[clamp(3rem,11.5vw,10rem)] leading-[0.78] tracking-[-0.065em] [font-family:var(--oc-font-display)]\">\n <span className=\"mb-[0.06em] inline-block w-[1.1em] shrink-0\">\n <Mark className=\"block h-auto w-full\" />\n </span>\n <span>orangecheck</span>\n </div>\n </div>\n ) : null}\n {meta ? (\n <div className=\"oca-container\">\n {/* The rule spans the content, not the gutters. */}\n <div className=\"border-t border-border py-6 text-[0.875rem] text-muted-foreground\">{meta}</div>\n </div>\n ) : null}\n </footer>\n );\n}\n","import { ChevronRight, Menu, Moon, Sun, SunMoon } from 'lucide-react';\nimport Link from 'next/link';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useMemo, useState, type ReactNode } from 'react';\n\nimport { Lockup } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { ShellContext } from '../lib/shell-context';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Sheet,\n SheetContent,\n SheetTitle,\n SheetTrigger,\n} from '../primitives/overlay';\n\nexport interface ShellNavItem {\n href: string;\n label: string;\n icon?: ReactNode;\n active?: boolean;\n /** A count or a dot beside the label (unread, needs attention). */\n badge?: ReactNode;\n}\n\nexport interface ShellNavGroup {\n /** Omit for the first, unlabeled group. */\n label?: string;\n items: ShellNavItem[];\n}\n\n/**\n * A part of the app with its own pages: \"You\", \"Build\", \"Operate\", \"Admin\".\n * The sidebar lists one section's pages at a time, under a switcher.\n */\nexport interface ShellSection {\n id: string;\n /** Short, for the switcher: one word. */\n label: string;\n /** The section's eyebrow on its pages; defaults to `label`. */\n title?: string;\n /** Where the switcher goes: the section's first page. */\n href: string;\n groups: ShellNavGroup[];\n}\n\nfunction SideNav({ groups, onNavigate }: { groups: ShellNavGroup[]; onNavigate?: () => void }) {\n return (\n <nav aria-label=\"Pages\" className=\"flex flex-col gap-5\">\n {groups.map((g, gi) => (\n <div key={g.label ?? gi} className=\"flex flex-col gap-0.5\">\n {g.label ? <p className=\"px-3 pb-1 text-[0.8125rem] text-muted-foreground\">{g.label}</p> : null}\n {g.items.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n onClick={onNavigate}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex h-9 items-center gap-3 rounded-xl px-3 text-[0.9375rem] transition-colors',\n '[&_svg]:size-[1.0625rem] [&_svg]:shrink-0',\n it.active\n ? 'bg-card text-foreground shadow-sm ring-1 ring-border [&_svg]:text-foreground'\n : 'text-muted-foreground hover:bg-accent hover:text-foreground'\n )}\n >\n {it.icon}\n <span className=\"min-w-0 flex-1 truncate\">{it.label}</span>\n {it.badge ? <span className=\"shrink-0\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n ))}\n </nav>\n );\n}\n\nfunction SectionSwitch({\n sections,\n current,\n onNavigate,\n}: {\n sections: ShellSection[];\n current: ShellSection;\n onNavigate?: () => void;\n}) {\n // Up to three fit one row of the sidebar; four go two by two, so no label\n // is ever cut short.\n const cols = sections.length <= 3 ? sections.length : 2;\n return (\n <nav\n aria-label=\"Sections\"\n className={cn('grid gap-1 bg-muted p-1', cols === sections.length ? 'rounded-full' : 'rounded-[1.25rem]')}\n style={{ gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))` }}\n >\n {sections.map((sec) => {\n const on = sec.id === current.id;\n return (\n <Link\n key={sec.id}\n href={sec.href}\n onClick={onNavigate}\n aria-current={on ? 'true' : undefined}\n className={cn(\n 'flex h-8 min-w-0 items-center justify-center rounded-full px-1.5 text-[0.8125rem] font-medium transition-colors',\n on ? 'bg-card text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span className=\"truncate\">{sec.label}</span>\n </Link>\n );\n })}\n </nav>\n );\n}\n\nconst activeItem = (groups: ShellNavGroup[]) => groups.flatMap((g) => g.items).find((it) => it.active);\n\n// Bundlers replace process.env.NODE_ENV; the typeof guard covers one that doesn't.\ndeclare const process: { env: { NODE_ENV?: string } } | undefined;\n\nconst warned = new Set<string>();\n\nfunction warnDuplicateLabels(groups: ShellNavGroup[]) {\n if (typeof process === 'undefined' || process.env.NODE_ENV === 'production') return;\n const seen = new Set<string>();\n for (const it of groups.flatMap((g) => g.items)) {\n if (seen.has(it.label) && !warned.has(it.label)) {\n warned.add(it.label);\n console.warn(`AppShell: two pages are labelled \"${it.label}\"; give each its own name.`);\n }\n seen.add(it.label);\n }\n}\n\n/**\n * The signed-in frame: a quiet sidebar on the canvas, content on the right.\n *\n * Give it `sections` and the sidebar shows a switcher (only when there is more\n * than one) and the current section's pages, so it never outgrows the screen;\n * `persistent` groups (Account) follow every section. The section is the one\n * holding an active item, or `activeSection`. On phones a top bar carries the\n * wordmark and the account, a strip under it names the section and page, and\n * the sidebar opens as a sheet. `nav` (flat groups) still works for a simple\n * app. Pages get the section through context: PageHeader uses it as its\n * eyebrow. The account control and any banner are slots.\n */\nexport function AppShell({\n nav,\n sections,\n activeSection,\n page: pageOverride,\n persistent = [],\n home = '/',\n account,\n banner,\n footer,\n children,\n className,\n}: {\n /** Flat groups, for an app without sections. */\n nav?: ShellNavGroup[];\n sections?: ShellSection[];\n activeSection?: string;\n /** The page's name for the place strip, when it is not a nav item of its own. */\n page?: string;\n /** Groups shown under every section, after its own. */\n persistent?: ShellNavGroup[];\n home?: string;\n account?: ReactNode;\n banner?: ReactNode;\n footer?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n const current =\n sections && sections.length > 0\n ? (sections.find((sec) => sec.id === activeSection) ??\n sections.find((sec) => activeItem(sec.groups)) ??\n sections[0]!)\n : undefined;\n const groups = current ? [...current.groups, ...persistent] : [...(nav ?? []), ...persistent];\n warnDuplicateLabels(groups);\n const page = activeItem(groups);\n const place = useMemo(\n () => ({\n section: current ? (current.title ?? current.label) : undefined,\n page: pageOverride ?? page?.label,\n }),\n [current, page?.label, pageOverride]\n );\n const switcher =\n sections && current && sections.length > 1 ? (\n <SectionSwitch sections={sections} current={current} onNavigate={() => setOpen(false)} />\n ) : null;\n return (\n <ShellContext.Provider value={place}>\n <div className={cn('min-h-dvh bg-background', className)}>\n <div className=\"sticky top-0 z-40 border-b border-border bg-background/90 backdrop-blur-md lg:hidden\">\n <div className=\"flex h-14 items-center gap-2 px-3\">\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger\n className=\"inline-flex size-10 items-center justify-center rounded-full hover:bg-accent\"\n aria-label=\"Open navigation\"\n >\n <Menu className=\"size-5\" />\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"flex flex-col gap-6 overflow-y-auto p-4 pt-16\">\n <SheetTitle className=\"sr-only\">Navigation</SheetTitle>\n {switcher}\n <SideNav groups={groups} onNavigate={() => setOpen(false)} />\n {footer ? <div className=\"mt-auto flex flex-col gap-3\">{footer}</div> : null}\n </SheetContent>\n </Sheet>\n <Link href={home} aria-label=\"Home\" className=\"rounded-lg p-1\">\n <Lockup size={22} />\n </Link>\n <div className=\"ml-auto flex items-center\">{account}</div>\n </div>\n {place.page ? (\n <div className=\"flex h-9 items-center gap-1.5 border-t border-border px-4 text-[0.875rem]\">\n {place.section ? (\n <>\n <span className=\"shrink-0 text-muted-foreground\">{place.section}</span>\n <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-muted-foreground\" />\n </>\n ) : null}\n <span className=\"truncate font-medium\">{place.page}</span>\n </div>\n ) : null}\n </div>\n <div className=\"mx-auto flex w-full max-w-[90rem]\">\n <aside className=\"sticky top-0 hidden h-dvh w-[17rem] shrink-0 flex-col gap-6 overflow-y-auto px-4 py-6 lg:flex\">\n <Link href={home} className=\"px-2\" aria-label=\"Home\">\n <Lockup size={26} />\n </Link>\n {switcher}\n <SideNav groups={groups} />\n <div className=\"mt-auto flex flex-col gap-3\">{footer}</div>\n </aside>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"hidden h-[4.5rem] items-center justify-end gap-3 px-8 lg:flex\">{account}</div>\n {banner ? <div className=\"px-4 pb-2 pt-4 md:px-8 lg:pt-0\">{banner}</div> : null}\n <main id=\"main-content\" className=\"flex-1 px-4 pb-16 pt-6 md:px-8 lg:pt-2\">\n {/* One width for every signed-in page. */}\n <div className=\"mx-auto w-full max-w-[72rem]\">{children}</div>\n </main>\n </div>\n </div>\n </div>\n </ShellContext.Provider>\n );\n}\n\nexport interface AccountMenuItem {\n label: string;\n href?: string;\n onSelect?: () => void;\n icon?: ReactNode;\n destructive?: boolean;\n}\n\n/** The account button: initial + short id, a menu of items. */\nexport function AccountMenu({\n name,\n detail,\n items,\n nameFrom = 'sm',\n}: {\n name: string;\n /** A second line: the short did, an address. */\n detail?: string;\n items: (AccountMenuItem | 'separator')[];\n /** The width from which the name shows beside the initial. A header with\n * navigation beside it needs the room until lg. */\n nameFrom?: 'sm' | 'lg';\n}) {\n const initial = name.trim().charAt(0).toUpperCase() || '·';\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className={cn(\n 'inline-flex h-10 items-center gap-2.5 rounded-full border border-border bg-card pl-1 pr-1 text-[0.9375rem] outline-none transition-colors hover:border-oca-hairline-strong focus-visible:ring-2 focus-visible:ring-ring',\n nameFrom === 'lg' ? 'lg:pr-3.5' : 'sm:pr-3.5'\n )}\n aria-label={`Account: ${name}`}\n >\n <span className=\"flex size-8 items-center justify-center rounded-full bg-foreground text-[0.8125rem] font-medium text-background\">\n {initial}\n </span>\n <span className={cn('max-w-[10rem] truncate', nameFrom === 'lg' ? 'max-lg:hidden' : 'max-sm:hidden')}>\n {name}\n </span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64\">\n <DropdownMenuLabel className=\"flex flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem] font-medium text-foreground\">{name}</span>\n {detail ? <span className=\"truncate font-mono text-[0.75rem]\">{detail}</span> : null}\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {items.map((it, i) =>\n it === 'separator' ? (\n <DropdownMenuSeparator key={`sep-${i}`} />\n ) : it.href ? (\n <DropdownMenuItem key={it.label} asChild destructive={it.destructive}>\n <Link href={it.href}>\n {it.icon}\n {it.label}\n </Link>\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem key={it.label} onSelect={it.onSelect} destructive={it.destructive}>\n {it.icon}\n {it.label}\n </DropdownMenuItem>\n )\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n/** Light, dark, or follow the system: one button that cycles. */\nexport function ThemeToggle({ className }: { className?: string }) {\n const { theme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n const current = mounted ? (theme ?? 'system') : 'system';\n const next = current === 'light' ? 'dark' : current === 'dark' ? 'system' : 'light';\n const Icon = current === 'light' ? Sun : current === 'dark' ? Moon : SunMoon;\n return (\n <button\n type=\"button\"\n onClick={() => setTheme(next)}\n aria-label={`Theme: ${current}. Switch to ${next}`}\n title={`Theme: ${current}`}\n className={cn(\n 'inline-flex size-10 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n <Icon className=\"size-[1.125rem]\" />\n </button>\n );\n}\n"]}