@orangecheck/app-design 0.6.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/brand.js.map +1 -1
- package/dist/brand.mjs.map +1 -1
- package/dist/chrome.d.mts +49 -15
- package/dist/chrome.d.ts +49 -15
- package/dist/chrome.js +619 -55
- package/dist/chrome.js.map +1 -1
- package/dist/chrome.mjs +617 -57
- package/dist/chrome.mjs.map +1 -1
- package/dist/components.d.mts +231 -1
- package/dist/components.d.ts +231 -1
- package/dist/components.js +1187 -2
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +1162 -5
- package/dist/components.mjs.map +1 -1
- package/dist/family.d.mts +2 -0
- package/dist/family.d.ts +2 -0
- package/dist/family.js +167 -0
- package/dist/family.js.map +1 -0
- package/dist/family.mjs +154 -0
- package/dist/family.mjs.map +1 -0
- package/dist/index-C6hDqOOS.d.mts +58 -0
- package/dist/index-C6hDqOOS.d.ts +58 -0
- package/dist/index.d.mts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +1619 -132
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1575 -134
- package/dist/index.mjs.map +1 -1
- package/dist/primitives.d.mts +52 -1
- package/dist/primitives.d.ts +52 -1
- package/dist/primitives.js +280 -3
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs +271 -6
- package/dist/primitives.mjs.map +1 -1
- package/dist/status-badge-BEOxeY9j.d.ts +13 -0
- package/dist/status-badge-DRwGhB0h.d.mts +13 -0
- package/dist/styles/fonts.css +1 -1
- package/dist/styles/tokens.css +4 -2
- package/dist/tokens.d.mts +3 -1
- package/dist/tokens.d.ts +3 -1
- package/dist/tokens.js +5 -3
- package/dist/tokens.js.map +1 -1
- package/dist/tokens.mjs +5 -3
- package/dist/tokens.mjs.map +1 -1
- package/package.json +9 -2
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\n/** The phone's way around a small app: every page one tap away, under the thumb. */\nfunction TabBar({ items }: { items: ShellNavItem[] }) {\n return (\n <nav\n aria-label=\"Pages\"\n data-oca-tabbar=\"\"\n className=\"fixed inset-x-0 bottom-0 z-40 border-t border-border bg-background/90 pb-[env(safe-area-inset-bottom)] backdrop-blur-md md:hidden\"\n >\n <div\n className=\"mx-auto grid h-14 max-w-[32rem] px-1.5\"\n style={{ gridTemplateColumns: `repeat(${items.length}, minmax(0, 1fr))` }}\n >\n {items.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex min-w-0 flex-col items-center justify-center gap-1 rounded-2xl text-[0.6875rem] leading-none outline-none transition-colors [-webkit-tap-highlight-color:transparent] focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n it.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span\n className={cn(\n 'relative flex h-7 w-12 items-center justify-center rounded-full transition-[background-color,box-shadow] duration-200',\n '[&_svg]:size-[1.125rem] [&_svg]:shrink-0',\n it.active ? 'bg-card shadow-sm ring-1 ring-border [&_svg]:stroke-2' : '[&_svg]:stroke-[1.75]'\n )}\n >\n {it.icon}\n {it.badge ? (\n <span aria-hidden className=\"absolute right-2.5 top-0.5 size-2 rounded-full bg-oca-orange ring-2 ring-background\" />\n ) : null}\n </span>\n <span className=\"max-w-full truncate px-0.5\">{it.label}</span>\n {it.badge ? <span className=\"sr-only\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n </nav>\n );\n}\n\n/** Two to five pages, each with an icon, fit a tab bar. More, or sections, keep the drawer. */\nfunction tabsFor(groups: ShellNavGroup[]): ShellNavItem[] | null {\n const items = groups.flatMap((g) => g.items);\n return items.length >= 2 && items.length <= 5 && items.every((it) => it.icon) ? items : null;\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, and when it holds two to five pages, each with an icon, phones get a\n * tab bar instead: the pages sit under the thumb, the strip and the menu\n * button go (the sheet stays for a `footer`, without the pages), and tablets\n * keep the sheet. Pages get the section through context: PageHeader uses it\n * as its 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 tabs = current ? null : tabsFor(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\n className={cn(\n 'min-h-dvh bg-background',\n tabs && 'max-md:pb-[calc(3.5rem_+_env(safe-area-inset-bottom))]',\n className\n )}\n >\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={cn(\n 'inline-flex size-10 items-center justify-center rounded-full hover:bg-accent',\n // The tab bar holds every page; the sheet is left for a footer.\n tabs && !footer && 'max-md:hidden'\n )}\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 <div className={tabs ? 'max-md:hidden' : undefined}>\n <SideNav groups={groups} onNavigate={() => setOpen(false)} />\n </div>\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\n className={cn(\n 'flex h-9 items-center gap-1.5 border-t border-border px-4 text-[0.875rem]',\n // The active tab already names the page.\n tabs && !pageOverride && 'max-md:hidden'\n )}\n >\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 {tabs ? <TabBar items={tabs} /> : null}\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"]}
|
|
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/status-badge.tsx","../src/primitives/card.tsx","../src/primitives/form.tsx","../src/primitives/overlay.tsx","../src/primitives/scroll-fade.tsx","../src/primitives/tabs.tsx","../src/primitives/accordion.tsx","../src/primitives/dialogs.tsx","../src/primitives/pagination.tsx","../src/primitives/qr-code.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/components/error-page.tsx","../src/components/blocks.tsx","../src/components/text-link.tsx","../src/components/legal.tsx","../src/family/index.ts","../src/components/family-grids.tsx","../src/components/protocol.tsx","../src/components/verify.tsx","../src/chrome/family-menu.tsx","../src/chrome/site.tsx","../src/chrome/sign-in-frame.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","useSyncExternalStore","ChevronLeft","ChevronRight","useMemo","QRCode","createElement","Children","Copy","TONE","Component","Link","LINK","pad","ArrowUpRight","protocol","current","CircleCheck","CircleX","Clock","CircleMinus","CircleDashed","Menu","useTheme","Icon","Sun","Moon","SunMoon"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * The palette as data, for places CSS variables cannot reach: OG images,\n * canvas, charts, email. Every value must equal its variable in\n * styles/tokens.css; scripts/check-mirror.mjs fails the build when one drifts.\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 ring: '#EA580B',\n },\n dark: {\n background: '#0A0A0A',\n foreground: '#FAFAFA',\n card: '#161616',\n muted: '#1E1E1E',\n mutedForeground: '#A3A6AA',\n subtleForeground: '#8B8E93',\n border: '#2A2A2A',\n hairlineStrong: '#333333',\n accentDisplay: '#F66D36',\n accentInk: '#F0835A',\n ring: '#F66D36',\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)_9%,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)_9%,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 type { HTMLAttributes } from 'react';\n\nimport type { SiteStatus } from '../family';\nimport { cn } from '../lib/cn';\nimport { Badge } from './badge';\n\n/*\n * Where something stands, in the family's fixed words. A site or feature is\n * live, in testing, not yet, or paused; a check on an artifact is good,\n * caution or refused. There is no free text: the words are the component, so\n * no page can invent \"LIVE · MAINNET\", \"BETA\" or \"PRO\" again.\n */\nexport type Statement = 'good' | 'caution' | 'refused';\nexport type Status = SiteStatus | Statement;\n\nconst WORD: Record<Status, string> = {\n live: 'Live',\n testing: 'In testing',\n 'not-yet': 'Not yet',\n paused: 'Paused',\n good: 'Good',\n caution: 'Caution',\n refused: 'Refused',\n};\n\nconst TONE = {\n live: 'success',\n testing: 'brand',\n 'not-yet': 'muted',\n paused: 'muted',\n good: 'success',\n caution: 'brand',\n refused: 'danger',\n} as const;\n\n/** The word for a status, for places that need it as text. */\nexport function statusWord(status: Status): string {\n return WORD[status];\n}\n\nexport interface StatusBadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n status: Status;\n}\n\nexport function StatusBadge({ status, className, ...props }: StatusBadgeProps) {\n return (\n <Badge tone={TONE[status]} data-status={status} className={cn(className)} {...props}>\n {WORD[status]}\n </Badge>\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 // The deep orange: the track is the state, so it must clear 3:1 on a card.\n 'data-[state=checked]:bg-oca-orange-deep 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 { ChevronDown } from 'lucide-react';\nimport { createContext, useContext, useId, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * Questions and sections that open in place. Built on <details>, so it works\n * before script loads, a browser's find-in-page opens the item that holds the\n * match, and a screen reader hears each title as a button that is expanded\n * or collapsed. `single` lets one item be open at a time.\n */\nconst GroupName = createContext<string | undefined>(undefined);\n\nexport function Accordion({\n single = false,\n children,\n className,\n}: {\n /** One item open at a time: opening one closes the others. */\n single?: boolean;\n children: ReactNode;\n className?: string;\n}) {\n const name = useId();\n return (\n <GroupName.Provider value={single ? name : undefined}>\n <div className={cn('divide-y divide-border overflow-hidden rounded-[1.25rem] border border-border bg-card', className)}>\n {children}\n </div>\n </GroupName.Provider>\n );\n}\n\nexport function AccordionItem({\n title,\n children,\n defaultOpen = false,\n id,\n className,\n}: {\n title: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n /** For a link straight to this item. */\n id?: string;\n className?: string;\n}) {\n const name = useContext(GroupName);\n return (\n <details id={id} name={name} open={defaultOpen || undefined} className={cn('group scroll-mt-24', className)}>\n <summary\n className={cn(\n 'flex min-h-14 cursor-pointer list-none items-center justify-between gap-4 px-5 py-4 text-[1rem] font-medium leading-snug md:px-6',\n // Inside the card's clip, so the ring is drawn within the row.\n 'transition-colors hover:bg-accent/60 focus-visible:outline-offset-[-2px] [&::-webkit-details-marker]:hidden'\n )}\n >\n {title}\n <ChevronDown\n aria-hidden\n className=\"size-4 shrink-0 text-muted-foreground transition-transform duration-200 group-open:rotate-180\"\n />\n </summary>\n <div className=\"oca-body px-5 pb-5 text-[0.9375rem] md:px-6 md:pb-6\">{children}</div>\n </details>\n );\n}\n","import { useState, useSyncExternalStore, type FormEvent, type ReactNode } from 'react';\n\nimport { Button } from './button';\nimport { Field, Input } from './form';\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from './overlay';\n\n/*\n * Ask and wait: `await confirm({...})` is true or false, `await prompt({...})`\n * is the text or null. Mount <DialogHost /> once, near the root; every call\n * queues there and they open one at a time. Without a host nothing is asked\n * and the answer is no (false, null), never a silent yes.\n */\n\nexport interface ConfirmOptions {\n title: ReactNode;\n /** One or two sentences: what happens, and whether it can be undone. */\n message?: ReactNode;\n /** The verb on the button: \"Revoke\", \"Delete stamp\". Defaults to \"Continue\". */\n confirmLabel?: string;\n cancelLabel?: string;\n /** The red button, for what cannot be undone. */\n destructive?: boolean;\n}\n\nexport interface PromptOptions extends ConfirmOptions {\n label?: ReactNode;\n placeholder?: string;\n defaultValue?: string;\n hint?: ReactNode;\n /** A password field: hidden as typed, never filled in by the browser. */\n secret?: boolean;\n minLength?: number;\n /** Return a sentence to refuse the value, or nothing to take it. */\n validate?: (value: string) => string | null | undefined;\n}\n\ntype Ask =\n | { id: number; kind: 'confirm'; options: ConfirmOptions; settle: (answer: boolean) => void }\n | { id: number; kind: 'prompt'; options: PromptOptions; settle: (answer: string | null) => void };\n\nlet queue: Ask[] = [];\nlet asked = 0;\nlet hosts = 0;\nconst listeners = new Set<() => void>();\nconst emit = () => listeners.forEach((l) => l());\n\nfunction ask(item: Ask) {\n queue = [...queue, { ...item, id: ++asked }];\n emit();\n}\n\nfunction done() {\n queue = queue.slice(1);\n emit();\n}\n\n/** Ask a yes-or-no question. True only when the person presses the confirm button. */\nexport function confirm(options: ConfirmOptions): Promise<boolean> {\n if (hosts === 0) {\n console.error('confirm(): no <DialogHost /> is mounted, so nothing was asked; treating it as no.');\n return Promise.resolve(false);\n }\n return new Promise((resolve) => ask({ id: 0, kind: 'confirm', options, settle: resolve }));\n}\n\n/** Ask for a line of text. The text, or null when the person cancels. */\nexport function prompt(options: PromptOptions): Promise<string | null> {\n if (hosts === 0) {\n console.error('prompt(): no <DialogHost /> is mounted, so nothing was asked; treating it as cancelled.');\n return Promise.resolve(null);\n }\n return new Promise((resolve) => ask({ id: 0, kind: 'prompt', options, settle: resolve }));\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n hosts++;\n return () => {\n listeners.delete(listener);\n hosts--;\n };\n}\n\nconst current = () => queue[0] ?? null;\nconst none = () => null;\n\nfunction PromptBody({ ask: a }: { ask: Extract<Ask, { kind: 'prompt' }> }) {\n const o = a.options;\n const [value, setValue] = useState(o.defaultValue ?? '');\n const [error, setError] = useState<ReactNode>(null);\n const submit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (o.minLength && value.length < o.minLength) {\n setError(`At least ${o.minLength} characters.`);\n return;\n }\n const refused = o.validate?.(value);\n if (refused) {\n setError(refused);\n return;\n }\n a.settle(value);\n done();\n };\n return (\n <form onSubmit={submit} noValidate>\n <Field label={o.label ?? 'Your answer'} hint={o.hint} error={error}>\n <Input\n autoFocus\n type={o.secret ? 'password' : 'text'}\n autoComplete={o.secret ? 'new-password' : 'off'}\n placeholder={o.placeholder}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n />\n </Field>\n <DialogFooter>\n <Button\n variant=\"secondary\"\n onClick={() => {\n a.settle(null);\n done();\n }}\n >\n {o.cancelLabel ?? 'Cancel'}\n </Button>\n <Button type=\"submit\" variant={o.destructive ? 'danger' : 'primary'}>\n {o.confirmLabel ?? 'Continue'}\n </Button>\n </DialogFooter>\n </form>\n );\n}\n\n/** Where confirm() and prompt() open. Mount it once. */\nexport function DialogHost() {\n const a = useSyncExternalStore(subscribe, current, none);\n const cancel = () => {\n if (!a) return;\n if (a.kind === 'confirm') a.settle(false);\n else a.settle(null);\n done();\n };\n return (\n <Dialog open={a !== null} onOpenChange={(open) => (open ? undefined : cancel())}>\n {a ? (\n <DialogContent\n // A question that needs an answer before anything else happens.\n role=\"alertdialog\"\n // With no message there is nothing to describe it; say so, or Radix warns.\n {...(a.options.message ? {} : { 'aria-describedby': undefined })}\n className=\"w-[min(92vw,28rem)]\"\n >\n <DialogHeader>\n <DialogTitle>{a.options.title}</DialogTitle>\n {a.options.message ? <DialogDescription>{a.options.message}</DialogDescription> : null}\n </DialogHeader>\n {a.kind === 'prompt' ? (\n // Keyed by the ask, so a second prompt starts empty.\n <PromptBody key={a.id} ask={a} />\n ) : (\n <DialogFooter>\n <Button variant=\"secondary\" onClick={cancel}>\n {a.options.cancelLabel ?? 'Cancel'}\n </Button>\n <Button\n variant={a.options.destructive ? 'danger' : 'primary'}\n onClick={() => {\n a.settle(true);\n done();\n }}\n >\n {a.options.confirmLabel ?? 'Continue'}\n </Button>\n </DialogFooter>\n )}\n </DialogContent>\n ) : null}\n </Dialog>\n );\n}\n","import { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { cn } from '../lib/cn';\nimport { Button } from './button';\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 N = new Intl.NumberFormat('en-US');\n\n/**\n * Which rows are showing, and the way to the next page and back. `pageIndex`\n * counts from 0: page one is 0, its rows are `pageIndex * pageSize` up to the\n * next page's first. One page or fewer shows nothing.\n */\nexport function Pagination({\n pageIndex,\n pageSize,\n total,\n onPage,\n label = 'Pages',\n className,\n}: {\n /** From 0. */\n pageIndex: number;\n pageSize: number;\n total: number;\n onPage: (pageIndex: number) => void;\n /** The navigation's name for a screen reader: \"Stamps, pages\". */\n label?: string;\n className?: string;\n}) {\n const pages = Math.max(1, Math.ceil(total / pageSize));\n const index = Math.min(Math.max(0, pageIndex), pages - 1);\n if (index !== pageIndex && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n console.warn(`Pagination: pageIndex ${pageIndex} is outside 0–${pages - 1}; it counts from 0.`);\n }\n if (total <= pageSize) return null;\n const from = index * pageSize + 1;\n const to = Math.min(total, (index + 1) * pageSize);\n return (\n <nav aria-label={label} className={cn('flex items-center justify-between gap-4', className)}>\n <p aria-live=\"polite\" className=\"oca-tabular text-[0.875rem] text-muted-foreground\">\n {N.format(from)}–{N.format(to)} of {N.format(total)}\n </p>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"secondary\" size=\"sm\" disabled={index === 0} onClick={() => onPage(index - 1)} className=\"pl-3\">\n <ChevronLeft aria-hidden />\n Previous\n </Button>\n <Button variant=\"secondary\" size=\"sm\" disabled={index >= pages - 1} onClick={() => onPage(index + 1)} className=\"pr-3\">\n Next\n <ChevronRight aria-hidden />\n </Button>\n </div>\n </nav>\n );\n}\n","import QRCode from 'qrcode';\nimport { useMemo } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/**\n * A QR code for an address, an invoice or a link: ink modules on a white\n * tile in both modes, since a scanner needs dark on light. Drawn as one SVG\n * path at render, so it is there in the server's HTML with no flash, and it\n * is an image with a name for a screen reader.\n */\nexport function QrCode({\n value,\n size = 200,\n label,\n className,\n}: {\n /** What it encodes: a BIP-21 URI, a Lightning invoice, an address, a link. */\n value: string;\n /** Rendered width and height in px, the white margin included. */\n size?: number;\n /** What a screen reader hears. Defaults to \"QR code for\" and the value's start. */\n label?: string;\n className?: string;\n}) {\n const matrix = useMemo(() => {\n try {\n return QRCode.create(value, { errorCorrectionLevel: 'M' }).modules;\n } catch {\n return null;\n }\n }, [value]);\n const path = useMemo(() => {\n if (!matrix) return '';\n let d = '';\n for (let y = 0; y < matrix.size; y++) {\n for (let x = 0; x < matrix.size; x++) {\n if (matrix.get(y, x)) d += `M${x} ${y}h1v1h-1z`;\n }\n }\n return d;\n }, [matrix]);\n const short = value.length > 28 ? `${value.slice(0, 28)}…` : value;\n return (\n <div\n role=\"img\"\n aria-label={matrix ? (label ?? `QR code for ${short}`) : 'Too long for a QR code'}\n className={cn('inline-block shrink-0 rounded-2xl bg-white p-3 ring-1 ring-border', className)}\n style={{ width: size, height: size }}\n >\n {matrix ? (\n <svg viewBox={`0 0 ${matrix.size} ${matrix.size}`} shapeRendering=\"crispEdges\" aria-hidden className=\"block size-full\">\n <path d={path} fill=\"#0a0a0a\" />\n </svg>\n ) : (\n <div aria-hidden className=\"flex size-full items-center justify-center text-center text-[0.8125rem] text-[#54585e]\">\n Too long for a QR code\n </div>\n )}\n </div>\n );\n}\n","import type { SVGProps } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The isometric check, measured from the ochk.app design (iteration 2, 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\n/**\n * The mark drawn in hairlines only: the check where a check is missing (an\n * error page). Decoration; the stroke stays the same width at any size.\n */\nexport function MarkOutline({ className }: { className?: string }) {\n return (\n <svg viewBox=\"-0.2 -0.2 16.4 8.4\" aria-hidden className={cn('shrink-0 overflow-visible', className)}>\n {[TOP, LEFT, RIGHT].map((points) => (\n <polygon\n key={points}\n points={points}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\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/////tDN18irorDF3NKttcWGKQUGCwsOGRUVISIcCQAAAAAFCAcJCQkSHCcyKR0aGBQSICEWFhASHhkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwaKDpYZ19VTzwgICcnNkNDMyEeGREYIikvN1ad6v///////+/PusXc5+HHl3B7km8iAAAECA0REBAYHQ4AAAAFBQgMEhUQERUWHSglFRAUGBkhJRkQCQsQBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJIDpYWEI8NiEdIBooLiUiISIcGSUwMzxKarX//////////9DQ5t/IoHVbU2eVjz0LCAcGBwwREhEMAQAABAkLDhARDQsRGRgUFRkUESAwKyIiFgUABAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABECIkGBgkJR4dICgpJB0gIhkYJzY6P1KE2v//////////8ermsHVSQkVSbaiwUxQLBAEGCxAVEQUAAAABBggLDAwGBhIeGBQZHSAoN0AwHRUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQFBwwMDiAsKyIhHRkZFRIiNjo6UpXz///////////+1bt+Py8zP1V2qLVeFgcBAAgQFBYRCAAAAAAECAYGDAwJEBYSFSAhKTxDOiALAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFHSwuJycnGRASGSgzMDVPlfn//////////9qrjVUrKTdCVnurwHIgCQQHERUVEBAMAAAAAAYNCAUJDBASEhEYHCEzQDMcBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQWIjM9NiIRDBUhKy4wP1iX+f//////////wJV4TzUyNTlJap3CfyIHBxEaGBUODQgAAAAFBgwLBgYJFhwVFh0eKTwyEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhUeNUpAHQkMGSUpKzVJc7j//////////++6h2RWRzYvMkNVfq1/JAUJDRAVFhAMAQAABAIBCAgFBxAYGhgZHCEsKA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFB4vQD0lDgkOHjAzM0eR6f//////////1aVtTE0/MjI1Qll8oocyCwwMCw4OBwcAAAAAAAEJCwcJFRkVGBYUGRwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMHCwzKyAQBgUWNUBDW6r////////////VoGJAMycsOj9CXHuVjUoYDRESDAcHCAEAAAAEBw4QCw0ZGRAUEQgLBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJHSIUDAgCBhg5T2iPx////////////+GkbUYwLjlNU0lQZ4qddjIJCAwLEBUVCAAABQkHDA0IDRIMBQYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALFAwIBwkaPV5yl8Dh///////////2yo1wWEI/QlJWQ01wlLCgUw4BBw4WHB4NAAAAAgUICAgJBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNERUYIUV+nZWqyuT//////////+aye15QQDlAUE0/U36Xs7VvHgYNEhYdHg0AAAAAAQQFBwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcRICkwSoekkZq33P//////////16hyRTU1QFhkWEpYe4+wzJU5GBQMEhgWEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsiMzlJa4qNlLLa/v///////+m/l2Q5KTJNa3VlUlhvfq/uwlMnGAgMERAOCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0hMkNVbX6Emq+/1OLx/fnv0p9wTTkuMD1KVlVTYW14sPTXZyQSDA0ODQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEh4uOUNKUGSElaSwuMK3g1M8LiUrLjA3RVZob3uo1895JAsNCwYGAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIGTI8QFBicHVeQiwdGSErNkVSU1BZcJWwtXsnBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFCw2Ny4gGRUVHSkyP0Y6Mj9WeIqKZCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBQRDAkNDQwQGh0gIB0eIjBJUE88EgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAcFBwsGCRYcHBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==';\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 // The design 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. The\n * design's 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 Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { MarkOutline } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { Button } from '../primitives/button';\nimport { Section } from './section';\n\nconst WORDS: Record<number, { name: string; title: string; detail: string }> = {\n 404: {\n name: 'Not found',\n title: 'This page isn’t here.',\n detail: 'The link may be old, or the address mistyped.',\n },\n 500: {\n name: 'Server error',\n title: 'Something broke on our side.',\n detail: 'Try again in a moment.',\n },\n};\n\n/**\n * A 404, a 500 or any other error, inside the site's own header and footer:\n * the code, one sentence, one line and a way on. A server error offers a\n * retry as well as the way home. Beside it on a wide screen, the check drawn\n * in hairlines: there, but not filled in.\n */\nexport function ErrorPage({\n code = 404,\n title,\n detail,\n actions,\n home = '/',\n art,\n className,\n}: {\n code?: number;\n title?: ReactNode;\n detail?: ReactNode;\n /** Replaces the default ways on. */\n actions?: ReactNode;\n home?: string;\n /** Beside the words from md up. Defaults to the outlined check; `null` leaves it out. */\n art?: ReactNode;\n className?: string;\n}) {\n const words = WORDS[code] ?? (code >= 500 ? WORDS[500]! : WORDS[404]!);\n const server = code >= 500;\n return (\n <Section space=\"none\" className={cn('flex min-h-[min(40rem,72dvh)] items-center py-16 md:py-24', className)}>\n <div className=\"grid grid-cols-1 items-center gap-12 md:grid-cols-12\">\n <div className=\"flex max-w-[40rem] flex-col items-start gap-6 md:col-span-7\">\n <p className=\"oca-eyebrow oca-enter\">\n <span className=\"oca-tabular\">{code}</span> · {WORDS[code]?.name ?? (server ? 'Error' : 'Not available')}\n </p>\n <h1 className=\"oca-display-2 oca-enter [--enter-delay:70ms]\">{title ?? words.title}</h1>\n <p className=\"oca-lead oca-enter [--enter-delay:150ms]\">{detail ?? words.detail}</p>\n <div className=\"oca-enter flex flex-wrap gap-3 [--enter-delay:230ms]\">\n {actions ?? (\n <>\n {server ? <Button onClick={() => window.location.reload()}>Try again</Button> : null}\n <Button asChild variant={server ? 'secondary' : 'primary'}>\n <Link href={home}>Go home</Link>\n </Button>\n </>\n )}\n </div>\n </div>\n {art !== null ? (\n <div aria-hidden className=\"oca-enter hidden justify-center md:col-span-5 md:flex [--enter-delay:120ms]\">\n {art ?? <MarkOutline className=\"w-full max-w-[20rem] text-oca-hairline-strong\" />}\n </div>\n ) : null}\n </div>\n </Section>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { IsoCheck } from '../brand/iso-check';\nimport { cn } from '../lib/cn';\nimport { Accordion, AccordionItem } from '../primitives/accordion';\nimport { Reveal } from './motion';\nimport { Section, SectionIntro } from './section';\nimport { Display, Eyebrow } from './typography';\n\n/**\n * A section's title on a public page: eyebrow, headline, one line. It rises\n * into place the first time it is seen (`reveal={false}` keeps it still).\n */\nexport function SectionHeading({\n eyebrow,\n title,\n lead,\n id,\n onInk = false,\n level = 2,\n as = 'h2',\n align = 'start',\n reveal = true,\n className,\n}: {\n eyebrow?: ReactNode;\n title: ReactNode;\n lead?: ReactNode;\n /** The heading's id, for a link to the section. */\n id?: string;\n /** On an ink band: the eyebrow and lead take the ink tones. */\n onInk?: boolean;\n /** Visual size. 3 for a block inside a section. */\n level?: 2 | 3;\n as?: 'h2' | 'h3';\n align?: 'start' | 'center';\n reveal?: boolean;\n className?: string;\n}) {\n return (\n <SectionIntro align={align} reveal={reveal} className={cn('max-w-3xl gap-4 md:gap-4', className)}>\n {eyebrow ? <Eyebrow onInk={onInk}>{eyebrow}</Eyebrow> : null}\n <Display level={level} as={as} id={id} className=\"scroll-mt-24\">\n {title}\n </Display>\n {lead ? <p className={cn('oca-lead', onInk && 'text-oca-ink-muted')}>{lead}</p> : null}\n </SectionIntro>\n );\n}\n\n/**\n * One titled block of facts, for pages where a reader checks a claim: a\n * heading, one or two sentences, a link or two beside the title saying where\n * the full number lives, then the facts.\n */\nexport function FactBlock({\n id,\n title,\n description,\n aside,\n children,\n className,\n}: {\n id?: string;\n title: ReactNode;\n description?: ReactNode;\n /** Links beside the title: the source, the raw data. */\n aside?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n return (\n <section id={id} className={cn('flex scroll-mt-24 flex-col gap-6', className)}>\n <div className=\"flex flex-col gap-3 md:flex-row md:items-end md:justify-between md:gap-8\">\n <div className=\"flex max-w-[44rem] flex-col gap-3\">\n <h2 className=\"oca-display-3\">{title}</h2>\n {description ? <div className=\"oca-body text-[1.0625rem]\">{description}</div> : null}\n </div>\n {aside ? <div className=\"flex shrink-0 flex-wrap gap-x-5 gap-y-2 text-[0.9375rem]\">{aside}</div> : null}\n </div>\n {children}\n </section>\n );\n}\n\nexport interface FactRow {\n key: string;\n title: ReactNode;\n /** A figure beside the title: a limit, a count. */\n figure?: ReactNode;\n fields: { label: ReactNode; value: ReactNode }[];\n}\n\n/**\n * A table that stays readable on a phone: one row per subject, each value\n * under its own label. Wide pages lay the values side by side.\n */\nexport function FactRows({\n rows,\n columns = 1,\n label,\n className,\n}: {\n rows: FactRow[];\n /** Two columns of fields from md up. */\n columns?: 1 | 2;\n /** The list's name for a screen reader. */\n label: string;\n className?: string;\n}) {\n return (\n <ul aria-label={label} className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {rows.map((r) => (\n <li key={r.key} className=\"flex flex-col gap-5 px-5 py-6 md:px-8 md:py-7\">\n {/* The figure keeps its own line end; a long title wraps beside it. */}\n <div className=\"flex items-baseline justify-between gap-x-6\">\n <h3 className=\"oca-title min-w-0 text-pretty\">{r.title}</h3>\n {r.figure ? (\n <span className=\"oca-tabular shrink-0 whitespace-nowrap text-[1.75rem] leading-none tracking-[-0.02em]\">\n {r.figure}\n </span>\n ) : null}\n </div>\n <dl className={columns === 2 ? 'grid grid-cols-1 gap-x-10 gap-y-4 md:grid-cols-2' : 'flex flex-col gap-4'}>\n {r.fields.map((f, i) => (\n <div key={i} className=\"flex min-w-0 flex-col gap-1\">\n <dt className=\"text-[0.875rem] font-medium text-muted-foreground\">{f.label}</dt>\n <dd className=\"break-words text-[1rem] leading-relaxed\">{f.value}</dd>\n </div>\n ))}\n </dl>\n </li>\n ))}\n </ul>\n );\n}\n\nexport interface Endpoint {\n href: string;\n /** What it returns, in a line. */\n description: ReactNode;\n /** Shown instead of the address (a path for a long URL). */\n label?: string;\n}\n\n/** Public endpoints and what each returns: the same numbers, for your own tooling. Each opens raw, in a new tab. */\nexport function EndpointList({ items, label, className }: { items: Endpoint[]; label?: string; className?: string }) {\n return (\n <ul aria-label={label} className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((a) => (\n <li key={a.href}>\n <a\n href={a.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"flex flex-col gap-1 px-5 py-3.5 transition-colors hover:bg-accent/60 sm:flex-row sm:items-baseline sm:justify-between sm:gap-6\"\n >\n <code className=\"break-all text-[0.875rem] text-foreground\">{a.label ?? a.href}</code>\n <span className=\"text-[0.875rem] text-muted-foreground sm:text-right\">\n {a.description}\n <span className=\"sr-only\"> (opens in a new tab)</span>\n </span>\n </a>\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * A row of short claims between two hairlines, under a hero: an icon in the\n * accent and a few words each. Two to a row on a phone, four on a desk.\n */\nexport function ProofStrip({ items, className }: { items: { icon?: ReactNode; label: ReactNode }[]; className?: string }) {\n return (\n <div className={cn('border-y border-border', className)}>\n <ul className=\"oca-container grid grid-cols-2 gap-x-6 gap-y-4 py-6 md:grid-cols-4\">\n {items.map((it, i) => (\n <li\n key={i}\n className=\"flex items-center gap-3 text-[0.9375rem] [&_svg]:size-[1.1rem] [&_svg]:shrink-0 [&_svg]:text-oca-accent-ink\"\n >\n {it.icon ? <span aria-hidden className=\"flex\">{it.icon}</span> : null}\n {it.label}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n/** The last band of a page: one large line, the actions, and the check settling beside them. */\nexport function Closing({\n title,\n lead,\n actions,\n art,\n className,\n}: {\n title: ReactNode;\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the words from md up. Defaults to the check; `null` leaves it out. */\n art?: ReactNode;\n className?: string;\n}) {\n return (\n <Section className={cn('overflow-hidden', className)}>\n <div className=\"grid grid-cols-1 items-center gap-12 md:grid-cols-12\">\n <Reveal className=\"flex flex-col items-start gap-8 md:col-span-7\">\n <div className=\"flex flex-col gap-5\">\n <h2 className=\"oca-display-1 text-[clamp(2.5rem,1.5rem+4vw,5rem)] leading-[1]\">{title}</h2>\n {lead ? <p className=\"oca-lead max-w-[34rem]\">{lead}</p> : null}\n </div>\n {actions ? <div className=\"flex flex-wrap gap-3\">{actions}</div> : null}\n </Reveal>\n {art !== null ? (\n // Room under the check on a phone, so its glow fades before the band ends.\n <div aria-hidden className=\"flex justify-center max-md:pb-16 md:col-span-5\">\n {art ?? <IsoCheck size={340} settle tilt className=\"max-w-full\" />}\n </div>\n ) : null}\n </div>\n </Section>\n );\n}\n\n/** Questions and their answers, one open at a time. One sentence an answer, where it can be. */\nexport function Faq({\n items,\n className,\n}: {\n items: { q: ReactNode; a: ReactNode; id?: string }[];\n className?: string;\n}) {\n return (\n <Accordion single className={className}>\n {items.map((it, i) => (\n <AccordionItem key={it.id ?? i} id={it.id} title={it.q}>\n {it.a}\n </AccordionItem>\n ))}\n </Accordion>\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\nconst LINK = 'text-foreground underline decoration-foreground/35 underline-offset-4 transition-colors hover:decoration-foreground';\n\n/**\n * A link in running text. A page of this site goes through the router; an\n * API or a /.well-known file is a plain anchor (the router would try to\n * render it); another site opens in a new tab, and says so to a screen reader.\n */\nexport function TextLink({\n href,\n children,\n external,\n className,\n}: {\n href: string;\n children: ReactNode;\n /** Force a new tab (true) or keep it in this one (false). Default: by the address. */\n external?: boolean;\n className?: string;\n}) {\n const internal = href.startsWith('/') && !href.startsWith('/api/') && !href.startsWith('/.well-known/');\n const offsite = external ?? /^https?:\\/\\//.test(href);\n if (internal && !offsite) {\n return (\n <Link href={href} className={cn(LINK, className)}>\n {children}\n </Link>\n );\n }\n return (\n <a href={href} className={cn(LINK, className)} {...(offsite ? { target: '_blank', rel: 'noreferrer' } : {})}>\n {children}\n {offsite ? <span className=\"sr-only\"> (opens in a new tab)</span> : null}\n </a>\n );\n}\n","import { Fragment, type ReactNode } from 'react';\n\nimport { DocHeader, DocLayout } from './hero';\nimport { Notice } from './data';\nimport { TextLink } from './text-link';\nimport { Prose } from './typography';\n\n/*\n * A document from @orangecheck/legal, the one source every site renders, set\n * in this system's Prose: sentence-case headings, its contents beside it on a\n * desk. The shapes below are @orangecheck/legal's, written out so a LegalDoc\n * passes straight in without this package depending on that one.\n */\n\nexport type LegalBlock =\n | { kind: 'para'; text: string }\n | { kind: 'subhead'; text: string }\n | { kind: 'bullets'; items: (string | { k: string; v: string })[] }\n | { kind: 'callout'; text: string; emphatic?: boolean }\n | { kind: 'stub'; text: string };\n\nexport interface LegalSource {\n eyebrow: string;\n title: string;\n description: string;\n effective: string;\n updated: string;\n preamble?: LegalBlock[];\n sections: { id: string; num?: string; heading: string; hint?: string; blocks: LegalBlock[] }[];\n summary?: string;\n}\n\n/** Words the legal source writes in lowercase that keep their own case in a heading. */\nconst PROPER: Record<string, string> = {\n kyc: 'KYC',\n pii: 'PII',\n ccpa: 'CCPA',\n cpra: 'CPRA',\n gdpr: 'GDPR',\n uk: 'UK',\n eu: 'EU',\n california: 'California',\n europe: 'Europe',\n united: 'United',\n kingdom: 'Kingdom',\n};\n\n/** The source writes headings in lowercase; a heading opens with a capital, the brand as OrangeCheck only there. */\nfunction headingCase(text: string): string {\n const words = text.replace(/\\b[a-z]+\\b/g, (w) => PROPER[w] ?? w);\n if (/^orangecheck\\b/.test(words)) return `OrangeCheck${words.slice('orangecheck'.length)}`;\n return words.length === 0 ? words : words[0]!.toUpperCase() + words.slice(1);\n}\n\nfunction sentencesCase(text: string): string {\n return text\n .split(/(?<=[.!?])\\s+/)\n .map((s) => headingCase(s))\n .join(' ');\n}\n\n/** A sentence after a bold lead-in opens with a capital, unless it opens with a name written lowercase on purpose. */\nfunction openSentence(text: string): string {\n const first = /^\\S+/.exec(text)?.[0] ?? '';\n if (!/^[a-z][a-z'’-]*,?$/.test(first)) return text;\n return text[0]!.toUpperCase() + text.slice(1);\n}\n\nconst INLINE = /(\\*\\*[^*]+\\*\\*|`[^`]+`|\\[[^\\]]+\\]\\([^)]+\\))/g;\nconst LINK = /^\\[([^\\]]+)\\]\\(([^)]+)\\)$/;\n\n/** The source's inline markup: **strong**, `code` and [label](href), split as its own renderer splits it. */\nfunction Inline({ text }: { text: string }): ReactNode {\n return (\n <>\n {text.split(INLINE).map((part, i) => {\n if (!part) return null;\n if (part.startsWith('**') && part.endsWith('**') && part.length > 4) {\n return (\n <strong key={i}>\n <Inline text={part.slice(2, -2)} />\n </strong>\n );\n }\n if (part.startsWith('`') && part.endsWith('`') && part.length > 2) return <code key={i}>{part.slice(1, -1)}</code>;\n const link = LINK.exec(part);\n if (link) {\n return (\n <TextLink key={i} href={link[2] ?? ''}>\n {link[1]}\n </TextLink>\n );\n }\n return <Fragment key={i}>{part}</Fragment>;\n })}\n </>\n );\n}\n\nfunction BlockView({ block }: { block: LegalBlock }): ReactNode {\n switch (block.kind) {\n case 'para':\n // A block can hold several paragraphs, separated by a blank line.\n return (\n <>\n {block.text.split(/\\n{2,}/).map((para, i) => (\n <p key={i}>\n <Inline text={para} />\n </p>\n ))}\n </>\n );\n case 'subhead':\n return (\n <h3>\n <Inline text={headingCase(block.text)} />\n </h3>\n );\n case 'bullets':\n return (\n <ul>\n {block.items.map((item, i) =>\n typeof item === 'string' ? (\n <li key={i}>\n <Inline text={item} />\n </li>\n ) : (\n <li key={i}>\n <strong>{headingCase(item.k)}.</strong> <Inline text={openSentence(item.v)} />\n </li>\n )\n )}\n </ul>\n );\n case 'callout':\n return (\n <div className=\"not-prose my-6\">\n <Notice tone={block.emphatic ? 'brand' : 'neutral'}>\n <Inline text={block.text} />\n </Notice>\n </div>\n );\n case 'stub':\n return (\n <div className=\"not-prose my-6\">\n <Notice tone=\"brand\" title=\"Pending counsel review\">\n <Inline text={block.text} />\n </Notice>\n </div>\n );\n }\n}\n\n/** A legal document as a page: its header, its contents, its sections, and the one-line summary. */\nexport function LegalDocument({ doc, className }: { doc: LegalSource; className?: string }) {\n return (\n <DocLayout\n className={className}\n header={\n <DocHeader\n eyebrow={headingCase(doc.eyebrow)}\n title={doc.title}\n lead={doc.description}\n meta={`Effective ${doc.effective} · last updated ${doc.updated}`}\n />\n }\n toc={doc.sections.map((s) => ({ id: s.id, label: headingCase(s.heading) }))}\n >\n <article className=\"min-w-0\">\n <Prose>\n {doc.preamble?.map((b, i) => <BlockView key={i} block={b} />)}\n {doc.sections.map((s) => (\n <section key={s.id}>\n <h2 id={s.id} className=\"scroll-mt-24\">\n {s.num ? <span className=\"oca-tabular text-muted-foreground\">{s.num} </span> : null}\n {headingCase(s.heading)}\n </h2>\n {s.hint ? <p className=\"text-[0.9375rem]\">{headingCase(s.hint)}</p> : null}\n {s.blocks.map((b, i) => (\n <BlockView key={i} block={b} />\n ))}\n </section>\n ))}\n {doc.summary ? (\n <p className=\"mt-14 border-t border-border pt-6 text-[0.9375rem]\">\n <strong>In short.</strong> {sentencesCase(doc.summary.replace(/^summary:\\s*/i, ''))}\n </p>\n ) : null}\n </Prose>\n </article>\n </DocLayout>\n );\n}\n","/*\n * The orangecheck family as data: every public site, its one line, its group\n * and its status. The family menu, the footer, the protocol grid and the app\n * grid all read it, so a site is added, renamed or retired here and nowhere\n * else. No React: OG renderers and server code import it too.\n *\n * Status is written here until the claims source exists; then it is read\n * from there. \"live\" shows no badge.\n */\nimport type { FooterColumn, NavItem } from '../lib/nav';\n\n/** The six protocols, in the family's fixed order. */\nexport type ProtocolSlug = 'attest' | 'lock' | 'vote' | 'stamp' | 'agent' | 'pledge';\n\n/** The same slugs as the classic system's, so a site's `current` carries over. */\nexport type FamilySlug =\n | 'home'\n | 'me'\n | 'docs'\n | ProtocolSlug\n | 'vault'\n | 'chat'\n | 'cosign'\n | 'me-demo'\n | 'globe'\n | 'btc';\n\nexport type FamilyGroup = 'orangecheck' | 'protocol' | 'app' | 'public-good';\n\n/** Where a site or feature stands, in the family's words. */\nexport type SiteStatus = 'live' | 'testing' | 'not-yet' | 'paused';\n\nexport interface FamilySite {\n slug: FamilySlug;\n /** The site's word, lowercase, as menus and lockups show it. */\n label: string;\n /** Where the family menu and footer send people. A protocol's is its page on ochk.io. */\n href: string;\n group: FamilyGroup;\n /** What it is, in one sentence. */\n line: string;\n status: SiteStatus;\n /** For an app: the protocols it shows. */\n protocols?: ProtocolSlug[];\n}\n\nexport interface ProtocolSite extends FamilySite {\n slug: ProtocolSlug;\n group: 'protocol';\n /** What it carries: identity, confidentiality, legitimacy, provenance, authority, commitment. */\n verb: string;\n /** The protocol's page on ochk.io. */\n pageHref: string;\n /** The tools, on the protocol's own host. */\n toolHref: string;\n /** The normative spec. */\n specHref: string;\n /** The Nostr event kinds it publishes. */\n kinds: string;\n}\n\nexport const OCHK_IO = 'https://ochk.io';\n/** The docs live under ochk.io; docs.ochk.io 308s here. */\nexport const DOCS_HREF = `${OCHK_IO}/docs`;\n\nfunction protocol(\n slug: ProtocolSlug,\n verb: string,\n line: string,\n kinds: string\n): ProtocolSite {\n return {\n slug,\n label: slug,\n href: `${OCHK_IO}/${slug}`,\n group: 'protocol',\n line,\n status: 'live',\n verb,\n pageHref: `${OCHK_IO}/${slug}`,\n toolHref: `https://${slug}.ochk.io`,\n specHref: `https://github.com/orangecheck/oc-${slug}-protocol`,\n kinds,\n };\n}\n\n/** Attest · Lock · Vote · Stamp · Agent · Pledge, everywhere. */\nexport const PROTOCOLS: readonly ProtocolSite[] = [\n protocol('attest', 'identity', 'Show that an address holds bitcoin, and for how long.', '30078'),\n protocol('lock', 'confidentiality', 'Encrypt to a Bitcoin address, so only its holder can open it.', '30078'),\n protocol('vote', 'legitimacy', 'Polls weighed in sats, that anyone can tally.', '30080–30082'),\n protocol('stamp', 'provenance', 'Prove who signed something, and when.', '30083'),\n protocol('agent', 'authority', 'Give software scoped, revocable permission to act for you.', '30083–30086'),\n protocol('pledge', 'commitment', 'Make a promise with bitcoin behind it, on a public record.', '30078'),\n];\n\nexport const PROTOCOL_ORDER: readonly ProtocolSlug[] = PROTOCOLS.map((p) => p.slug);\n\nexport const FAMILY: readonly FamilySite[] = [\n {\n slug: 'home',\n label: 'ochk.io',\n href: OCHK_IO,\n group: 'orangecheck',\n line: 'The open protocols, and the company behind them.',\n status: 'live',\n },\n {\n slug: 'me',\n label: 'ochk.app',\n href: 'https://ochk.app',\n group: 'orangecheck',\n line: 'One account, with Bitcoin behind it.',\n status: 'testing',\n },\n {\n slug: 'docs',\n label: 'docs',\n href: DOCS_HREF,\n group: 'orangecheck',\n line: 'Specs, SDKs and guides for every protocol.',\n status: 'live',\n },\n ...PROTOCOLS,\n {\n slug: 'vault',\n label: 'vault',\n href: 'https://vault.ochk.io',\n group: 'app',\n line: 'A password manager, encrypted in your browser.',\n status: 'live',\n protocols: ['lock'],\n },\n {\n slug: 'chat',\n label: 'chat',\n href: 'https://chat.ochk.io',\n group: 'app',\n line: 'Messages only the holder of a Bitcoin address can read.',\n status: 'testing',\n protocols: ['lock'],\n },\n {\n slug: 'cosign',\n label: 'cosign',\n href: 'https://cosign.ochk.io',\n group: 'app',\n line: 'Builders find co-founders and backers.',\n status: 'testing',\n protocols: ['attest'],\n },\n {\n slug: 'me-demo',\n // \"demo\", not the made-up app's own name, so nobody takes it for ours.\n label: 'demo',\n href: 'https://me-demo.ochk.io',\n group: 'app',\n line: 'Lumen Notes, a made-up app that signs in with orangecheck.',\n status: 'live',\n },\n {\n slug: 'globe',\n label: 'globe',\n href: 'https://globe.ochk.io',\n group: 'public-good',\n line: 'The Bitcoin network, live, on a globe.',\n status: 'live',\n },\n {\n slug: 'btc',\n label: 'btc',\n href: 'https://btc.ochk.io',\n group: 'public-good',\n line: 'A free desk for reading the Bitcoin market.',\n status: 'live',\n },\n];\n\nexport const FAMILY_GROUPS: readonly { id: FamilyGroup; label: string }[] = [\n { id: 'orangecheck', label: 'orangecheck' },\n { id: 'protocol', label: 'Protocols' },\n { id: 'app', label: 'Apps' },\n { id: 'public-good', label: 'Public goods' },\n];\n\nconst BY_SLUG = new Map(FAMILY.map((s) => [s.slug, s]));\n\nexport function familySite(slug: FamilySlug): FamilySite {\n return BY_SLUG.get(slug)!;\n}\n\nexport function protocolSite(slug: ProtocolSlug): ProtocolSite {\n return BY_SLUG.get(slug) as ProtocolSite;\n}\n\n/** The family in its groups, in order, for menus and footers. */\nexport function familyByGroup(): { id: FamilyGroup; label: string; sites: FamilySite[] }[] {\n return FAMILY_GROUPS.map((g) => ({ ...g, sites: FAMILY.filter((s) => s.group === g.id) }));\n}\n\n/** One fixed row on every footer, all on ochk.io. */\nexport const LEGAL_LINKS: readonly NavItem[] = [\n { href: `${OCHK_IO}/privacy`, label: 'Privacy' },\n { href: `${OCHK_IO}/terms`, label: 'Terms' },\n { href: `${OCHK_IO}/security`, label: 'Security' },\n { href: `${OCHK_IO}/trademark`, label: 'Trademarks' },\n { href: `${OCHK_IO}/contact`, label: 'Contact' },\n];\n\n/**\n * ochk.io's header navigation. oc-www and the docs (served under ochk.io/docs)\n * both draw it from here, so the two cannot drift. Absolute links work from\n * either; mark the active item where it is rendered.\n */\nexport const OCHK_IO_NAV: readonly NavItem[] = [\n {\n href: `${OCHK_IO}/protocols`,\n label: 'Protocols',\n children: PROTOCOLS.map((p) => ({ href: p.pageHref, label: p.label, description: p.line })),\n },\n { href: `${OCHK_IO}/apps`, label: 'Apps' },\n { href: DOCS_HREF, label: 'Docs' },\n { href: `${OCHK_IO}/trust`, label: 'Trust' },\n { href: `${OCHK_IO}/about`, label: 'About' },\n];\n\n/** ochk.io's own footer column; `SiteFooter family` adds the family's. */\nexport const OCHK_IO_FOOTER: readonly FooterColumn[] = [\n {\n heading: 'Company',\n links: [\n { href: `${OCHK_IO}/about`, label: 'About' },\n { href: `${OCHK_IO}/trust`, label: 'Trust' },\n { href: 'https://github.com/orangecheck', label: 'GitHub', external: true },\n ],\n },\n];\n","import { ArrowUpRight } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport {\n FAMILY,\n PROTOCOL_ORDER,\n protocolSite,\n type FamilyGroup,\n type FamilySlug,\n type ProtocolSlug,\n type SiteStatus,\n} from '../family';\nimport { cn } from '../lib/cn';\nimport { Badge } from '../primitives/badge';\nimport { StatusBadge } from '../primitives/status-badge';\n\n/*\n * A card that is one link: the title carries the link and stretches over the\n * card, so the name is what a screen reader hears, and the whole card shows\n * one focus ring when the keyboard reaches it.\n */\nconst CARD =\n 'group relative flex h-full flex-col rounded-[1.25rem] border border-border bg-card p-6 transition-colors hover:border-oca-hairline-strong md:p-7 ' +\n 'has-[a:focus-visible]:ring-2 has-[a:focus-visible]:ring-ring has-[a:focus-visible]:ring-offset-2 has-[a:focus-visible]:ring-offset-background';\nconst STRETCH = 'outline-none after:absolute after:inset-0 after:rounded-[1.25rem] after:content-[\"\"]';\n\nconst pad = (n: number) => String(n + 1).padStart(2, '0');\n\n/**\n * The six protocols as cards, from the registry, in the family's order: the\n * verb's word, what it carries, one line, its Nostr kinds. `link` picks the\n * protocol's page on ochk.io or its tools.\n */\nexport function ProtocolGrid({\n protocols = PROTOCOL_ORDER,\n link = 'page',\n className,\n}: {\n protocols?: readonly ProtocolSlug[];\n link?: 'page' | 'tool';\n className?: string;\n}) {\n return (\n <ul className={cn('grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 md:gap-5', className)}>\n {protocols.map((slug) => {\n const p = protocolSite(slug);\n const i = PROTOCOL_ORDER.indexOf(slug);\n return (\n <li key={slug}>\n <div className={cn(CARD, 'gap-4')}>\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"oca-numeral\">\n {pad(i)} <span className=\"ml-1.5 capitalize\">{p.verb}</span>\n </span>\n {p.status !== 'live' ? <StatusBadge status={p.status} /> : null}\n </div>\n <h3 className=\"oca-display-3\">\n <a href={link === 'tool' ? p.toolHref : p.pageHref} className={STRETCH}>\n {p.label}\n </a>\n </h3>\n <p className=\"oca-body\">{p.line}</p>\n <div className=\"mt-auto flex items-center justify-between gap-3 pt-2 text-[0.875rem] text-muted-foreground\">\n <span className=\"oca-tabular\">Nostr kind {p.kinds}</span>\n <ArrowUpRight\n aria-hidden\n className=\"size-4 transition-transform duration-200 group-hover:-translate-y-0.5 group-hover:translate-x-0.5 group-hover:text-foreground\"\n />\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n );\n}\n\nexport interface AppCardProps {\n name: ReactNode;\n line: ReactNode;\n href: string;\n /** The protocols it shows, as chips. */\n protocols?: readonly ProtocolSlug[];\n status?: SiteStatus;\n className?: string;\n}\n\n/** One app: its name, one line, the protocols it shows, and where it is. The card is the link. */\nexport function AppCard({ name, line, href, protocols = [], status = 'live', className }: AppCardProps) {\n return (\n <div className={cn(CARD, 'gap-3', className)}>\n <div className=\"flex items-start justify-between gap-3\">\n <h3 className=\"oca-title\">\n <a href={href} className={STRETCH}>\n {name}\n </a>\n </h3>\n {status !== 'live' ? <StatusBadge status={status} /> : null}\n </div>\n <p className=\"oca-body text-[0.9375rem]\">{line}</p>\n <div className=\"mt-auto flex items-end justify-between gap-3 pt-3\">\n {protocols.length > 0 ? (\n <p className=\"flex flex-wrap items-center gap-1.5 text-[0.8125rem] text-muted-foreground\">\n Shows\n {protocols.map((p) => (\n <Badge key={p} tone=\"muted\">\n {p}\n </Badge>\n ))}\n </p>\n ) : (\n <span />\n )}\n <span className=\"flex shrink-0 items-center gap-1 text-[0.875rem] text-muted-foreground transition-colors group-hover:text-foreground\">\n {href.replace(/^https?:\\/\\//, '')}\n <ArrowUpRight aria-hidden className=\"size-4\" />\n </span>\n </div>\n </div>\n );\n}\n\n/** The apps in a group, from the registry: `app` for the showcase apps, `public-good` for globe and btc. */\nexport function AppGrid({\n group = 'app',\n sites,\n className,\n}: {\n group?: Extract<FamilyGroup, 'app' | 'public-good'>;\n /** Pick and order the apps yourself instead. */\n sites?: readonly FamilySlug[];\n className?: string;\n}) {\n const list = sites\n ? sites.map((slug) => FAMILY.find((s) => s.slug === slug)).filter((s) => s !== undefined)\n : FAMILY.filter((s) => s.group === group);\n return (\n <ul className={cn('grid grid-cols-1 gap-4 sm:grid-cols-2 md:gap-5', className)}>\n {list.map((s) => (\n <li key={s.slug}>\n <AppCard name={s.label} line={s.line} href={s.href} protocols={s.protocols} status={s.status} />\n </li>\n ))}\n </ul>\n );\n}\n","import { ArrowUpRight } from 'lucide-react';\nimport { useState, type CSSProperties, type FormEvent, type ReactNode } from 'react';\n\nimport { PROTOCOLS, protocolSite, type ProtocolSlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { Button } from '../primitives/button';\nimport { Field, Input, Textarea } from '../primitives/form';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { StatusBadge } from '../primitives/status-badge';\nimport { PageHero } from './hero';\n\n/*\n * The parts of a protocol's page on ochk.io. Each takes the protocol's slug\n * and reads its word, verb, links and kinds from the registry, so the six\n * pages are the same page with different data and cannot drift.\n */\n\n/** The top of a protocol page: \"Protocol · provenance\", the title, one line, the ways in. */\nexport function ProtocolHero({\n protocol,\n title,\n lead,\n actions,\n art,\n children,\n className,\n}: {\n protocol: ProtocolSlug;\n title: ReactNode;\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the words from md up: the artifact itself, at size. */\n art?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n const p = protocolSite(protocol);\n return (\n <PageHero\n className={className}\n eyebrow={`Protocol · ${p.verb}`}\n title={title}\n lead={lead}\n actions={actions}\n art={art}\n >\n {p.status !== 'live' || children ? (\n <div className=\"flex flex-col items-start gap-4\">\n {p.status !== 'live' ? <StatusBadge status={p.status} /> : null}\n {children}\n </div>\n ) : null}\n </PageHero>\n );\n}\n\n/** The six protocols as a row of links, the current one underlined. Scrolls sideways on a phone. */\nexport function ProtocolNav({\n current,\n link = 'page',\n className,\n}: {\n current?: ProtocolSlug;\n link?: 'page' | 'tool';\n className?: string;\n}) {\n return (\n <nav aria-label=\"Protocols\" className={className}>\n <ScrollFade fade=\"var(--background)\">\n <ul className=\"flex w-max min-w-full items-center gap-6 border-b border-border\">\n {PROTOCOLS.map((p) => {\n const on = p.slug === current;\n return (\n <li key={p.slug}>\n <a\n href={link === 'tool' ? p.toolHref : p.pageHref}\n aria-current={on ? 'page' : undefined}\n className={cn(\n '-mb-px inline-flex h-11 items-center border-b-2 text-[0.9375rem] transition-colors',\n on\n ? 'border-foreground text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n {p.label}\n </a>\n </li>\n );\n })}\n </ul>\n </ScrollFade>\n </nav>\n );\n}\n\n/**\n * The spec, as a card: its repository, version, licence, kinds and test\n * vectors, and the way to read it. `sm` is one line, for a reference in\n * running text or a docs page.\n */\nexport function SpecCard({\n protocol,\n version,\n license,\n vectors,\n size = 'md',\n className,\n}: {\n protocol: ProtocolSlug;\n version: string;\n license?: string;\n /** How many test vectors ship with it. */\n vectors?: number;\n size?: 'md' | 'sm';\n className?: string;\n}) {\n const p = protocolSite(protocol);\n const repo = `oc-${p.slug}-protocol`;\n const facts: [string, ReactNode][] = [\n ['Version', version],\n ...(license ? ([['Licence', license]] as [string, ReactNode][]) : []),\n ['Nostr kind', p.kinds],\n ...(vectors !== undefined ? ([['Test vectors', String(vectors)]] as [string, ReactNode][]) : []),\n ];\n if (size === 'sm') {\n return (\n <a\n href={p.specHref}\n className={cn(\n 'group flex flex-wrap items-center gap-x-4 gap-y-1 rounded-2xl border border-border bg-card px-4 py-3 text-[0.875rem] transition-colors hover:border-oca-hairline-strong',\n className\n )}\n >\n <span className=\"font-mono text-[0.8125rem] text-foreground\">{repo}</span>\n <span className=\"text-muted-foreground\">\n {facts.map(([k, v]) => (k === 'Version' ? `v${v}` : k === 'Nostr kind' ? `kind ${v}` : v)).join(' · ')}\n </span>\n <span className=\"ml-auto flex items-center gap-1 text-muted-foreground group-hover:text-foreground\">\n Read the spec <ArrowUpRight aria-hidden className=\"size-4\" />\n </span>\n </a>\n );\n }\n return (\n <div className={cn('flex flex-col gap-6 rounded-[1.25rem] border border-border bg-card p-6 md:p-8', className)}>\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n <p className=\"text-[0.875rem] text-muted-foreground\">The spec</p>\n <h3 className=\"oca-title break-all font-mono text-[1.0625rem] tracking-normal\">{repo}</h3>\n </div>\n {p.status !== 'live' ? <StatusBadge status={p.status} /> : null}\n </div>\n <dl className=\"grid grid-cols-2 gap-x-6 gap-y-4 sm:grid-cols-4\">\n {facts.map(([k, v]) => (\n <div key={k} className=\"flex flex-col gap-1\">\n <dt className=\"text-[0.8125rem] text-muted-foreground\">{k}</dt>\n <dd className=\"oca-tabular text-[1.0625rem]\">{v}</dd>\n </div>\n ))}\n </dl>\n <div>\n <Button asChild variant=\"secondary\" size=\"sm\">\n <a href={p.specHref}>\n Read the spec <ArrowUpRight aria-hidden />\n </a>\n </Button>\n </div>\n </div>\n );\n}\n\n/**\n * Paste an id, an envelope or a link and go to the page that checks it.\n * Without `onVerify` it is a plain GET form to `action`, so it works before\n * any script has loaded.\n */\nexport function VerifyBox({\n action,\n param = 'q',\n title,\n description,\n label = 'Id, envelope or link',\n placeholder,\n hint,\n submitLabel = 'Verify',\n multiline = false,\n onVerify,\n className,\n}: {\n /** Where the form goes: the tool's verify page. */\n action: string;\n /** The query parameter that carries what was pasted. */\n param?: string;\n title?: ReactNode;\n description?: ReactNode;\n label?: ReactNode;\n placeholder?: string;\n hint?: ReactNode;\n submitLabel?: string;\n /** A textarea, for a whole envelope. */\n multiline?: boolean;\n /** Handle it here instead of navigating. */\n onVerify?: (value: string) => void;\n className?: string;\n}) {\n const [value, setValue] = useState('');\n const submit = (e: FormEvent<HTMLFormElement>) => {\n if (!onVerify) return;\n e.preventDefault();\n if (value.trim()) onVerify(value.trim());\n };\n const button = (\n <Button type=\"submit\" className={multiline ? undefined : 'w-full sm:w-auto'}>\n {submitLabel}\n </Button>\n );\n return (\n <form\n action={action}\n method=\"get\"\n onSubmit={submit}\n className={cn('flex flex-col gap-5 rounded-[1.25rem] border border-border bg-card p-6 md:p-8', className)}\n >\n {title || description ? (\n <div className=\"flex flex-col gap-2\">\n {title ? <h3 className=\"oca-title\">{title}</h3> : null}\n {description ? <p className=\"oca-body text-[0.9375rem]\">{description}</p> : null}\n </div>\n ) : null}\n {multiline ? (\n <>\n <Field label={label} hint={hint}>\n <Textarea\n name={param}\n required\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n spellCheck={false}\n className=\"min-h-32 font-mono text-base md:text-[0.8125rem]\"\n />\n </Field>\n <div>{button}</div>\n </>\n ) : (\n <Field label={label} hint={hint} action={button}>\n <Input\n name={param}\n required\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n spellCheck={false}\n autoComplete=\"off\"\n className=\"font-mono text-base md:text-[0.875rem]\"\n />\n </Field>\n )}\n </form>\n );\n}\n\nexport interface ComparisonColumn {\n key: string;\n label: ReactNode;\n /** The one column the page argues for: tinted, read first on a phone. At most one. */\n highlight?: boolean;\n}\n\nexport interface ComparisonRow {\n label: ReactNode;\n /** One line under the property. */\n note?: ReactNode;\n /** An answer per column key, in words: \"Yes\", \"No\", \"Only with an x509 chain\". */\n values: Record<string, ReactNode>;\n}\n\nconst TINT = 'bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--card))]';\n\n/**\n * Systems side by side, a property per row, answers in words (never ✓ ✗ ~).\n * One column is tinted. On a phone each property becomes a card: the tinted\n * answer first and full width, the others two by two, each under its name.\n * Four or more columns wait for a desk to sit side by side.\n */\nexport function ComparisonTable({\n columns,\n rows,\n label,\n propertyHeading = 'Property',\n className,\n}: {\n columns: ComparisonColumn[];\n rows: ComparisonRow[];\n /** The list's name for a screen reader. */\n label: string;\n propertyHeading?: ReactNode;\n className?: string;\n}) {\n const wide = columns.length > 3;\n // Static class names per breakpoint, so Tailwind can see them.\n const grid = wide ? 'lg:grid lg:grid-cols-[var(--oca-compare)]' : 'md:grid md:grid-cols-[var(--oca-compare)]';\n const desk = wide ? 'lg' : 'md';\n const style = {\n // The argued-for column gets a little more room: its answers carry the page.\n '--oca-compare': ['minmax(0, 1.4fr)', ...columns.map((c) => (c.highlight ? 'minmax(0, 1.3fr)' : 'minmax(0, 1fr)'))].join(' '),\n } as CSSProperties;\n const ordered = [...columns].sort((a, b) => Number(Boolean(b.highlight)) - Number(Boolean(a.highlight)));\n return (\n <ul aria-label={label} style={style} className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n <li\n aria-hidden\n className={cn(\n 'hidden gap-5 px-5 py-4 text-[0.875rem] font-medium text-muted-foreground',\n wide ? 'lg:grid lg:px-8' : 'md:grid md:px-8',\n grid\n )}\n >\n <span>{propertyHeading}</span>\n {columns.map((c) => (\n <span key={c.key} className={cn(c.highlight && cn(TINT, '-my-4 px-4 py-4 text-oca-accent-ink'))}>\n {c.label}\n </span>\n ))}\n </li>\n {rows.map((r, ri) => (\n <li key={ri} className={cn('grid grid-cols-1 gap-3 px-5 py-5', wide ? 'lg:items-start lg:gap-5 lg:px-8' : 'md:items-start md:gap-5 md:px-8', grid)}>\n <div className=\"flex min-w-0 flex-col gap-1\">\n <span className=\"oca-title-sm\">{r.label}</span>\n {r.note ? <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{r.note}</span> : null}\n </div>\n <div className={cn('grid grid-cols-2 gap-1', desk === 'lg' ? 'lg:contents' : 'md:contents')}>\n {columns.map((c) => {\n // On a phone the tinted answer leads; on a desk the columns keep their order.\n return (\n <div\n key={c.key}\n style={{ '--oca-order': ordered.indexOf(c) } as CSSProperties}\n className={cn(\n // Two rows of the pair's grid (name, answer), so answers line up\n // across a pair even when one name wraps.\n 'order-[var(--oca-order)] row-span-2 grid min-w-0 grid-rows-subgrid gap-1 rounded-xl px-3 py-2.5',\n desk === 'lg'\n ? 'lg:order-none lg:row-span-1 lg:flex lg:flex-col'\n : 'md:order-none md:row-span-1 md:flex md:flex-col',\n c.highlight\n ? cn(\n TINT,\n 'col-span-2',\n desk === 'lg'\n ? 'lg:col-span-1 lg:-my-5 lg:self-stretch lg:rounded-none lg:px-4 lg:py-5'\n : 'md:col-span-1 md:-my-5 md:self-stretch md:rounded-none md:px-4 md:py-5'\n )\n : desk === 'lg'\n ? 'lg:p-0'\n : 'md:p-0'\n )}\n >\n <span\n className={cn(\n 'text-[0.8125rem]',\n c.highlight ? 'text-oca-accent-ink' : 'text-muted-foreground',\n desk === 'lg' ? 'lg:sr-only' : 'md:sr-only'\n )}\n >\n {c.label}\n </span>\n <span className={cn('text-[0.9375rem]', c.highlight && 'font-medium')}>\n {r.values[c.key] ?? '—'}\n </span>\n </div>\n );\n })}\n </div>\n </li>\n ))}\n </ul>\n );\n}\n","import { CircleCheck, CircleDashed, CircleMinus, CircleX, Clock } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Button } from '../primitives/button';\nimport { Field, Textarea } from '../primitives/form';\nimport { StatusBadge, type Statement } from '../primitives/status-badge';\nimport { CodeBlock } from './code-card';\nimport { KeyValueList, type KeyValueItem } from './data';\n\nexport type CheckState = 'ok' | 'fail' | 'pending' | 'skipped' | 'unchecked';\n\nexport interface VerifyCheck {\n label: ReactNode;\n state: CheckState;\n /** What was found, in a line: the block, the address, why it failed. */\n note?: ReactNode;\n}\n\nconst CHECK: Record<CheckState, { word: string; icon: ReactNode; tone: string }> = {\n ok: { word: 'Passed', icon: <CircleCheck />, tone: 'text-success' },\n fail: { word: 'Failed', icon: <CircleX />, tone: 'text-destructive' },\n pending: { word: 'Pending', icon: <Clock />, tone: 'text-oca-accent-ink' },\n skipped: { word: 'Skipped', icon: <CircleMinus />, tone: 'text-muted-foreground' },\n unchecked: { word: 'Not checked', icon: <CircleDashed />, tone: 'text-oca-subtle' },\n};\n\n/**\n * What a check on an artifact found: the statement (good, caution or\n * refused) with a title and one line, each check and its result in words,\n * the facts read from the artifact, and what this check did not cover. One\n * shape for a stamp, a ballot, an envelope, a delegation or a pledge.\n */\nexport function VerifyReport({\n verdict,\n title,\n summary,\n checks,\n facts,\n notChecked,\n actions,\n className,\n}: {\n verdict: Statement;\n title: ReactNode;\n /** One line under the title. */\n summary?: ReactNode;\n checks: VerifyCheck[];\n facts?: KeyValueItem[];\n /** \"What this did not check\": every verb has something it cannot see. */\n notChecked?: ReactNode[];\n actions?: ReactNode;\n className?: string;\n}) {\n return (\n <section\n aria-label=\"Verification result\"\n className={cn('overflow-hidden rounded-[1.25rem] border border-border bg-card', className)}\n >\n <header className=\"flex flex-col items-start gap-3 p-6 md:p-8\">\n <StatusBadge status={verdict} />\n <h3 className=\"oca-display-3\">{title}</h3>\n {summary ? <p className=\"oca-body max-w-[40rem]\">{summary}</p> : null}\n </header>\n <ul aria-label=\"Checks\" className=\"divide-y divide-border border-t border-border\">\n {checks.map((c, i) => {\n const k = CHECK[c.state];\n return (\n <li key={i} className=\"flex items-start gap-3 px-6 py-3.5 md:px-8\">\n <span aria-hidden className={cn('mt-0.5 shrink-0 [&_svg]:size-[1.125rem]', k.tone)}>\n {k.icon}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5 sm:flex-row sm:items-baseline sm:justify-between sm:gap-6\">\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"text-[0.9375rem]\">{c.label}</span>\n {c.note ? (\n <span className=\"break-words text-[0.8125rem] leading-snug text-muted-foreground\">{c.note}</span>\n ) : null}\n </div>\n <span\n className={cn(\n 'shrink-0 text-[0.8125rem]',\n c.state === 'fail' ? 'text-destructive' : 'text-muted-foreground'\n )}\n >\n {k.word}\n </span>\n </div>\n </li>\n );\n })}\n </ul>\n {facts && facts.length > 0 ? (\n <KeyValueList items={facts} className=\"rounded-none border-x-0 border-b-0 bg-transparent [&>div]:px-6 md:[&>div]:px-8\" />\n ) : null}\n {notChecked && notChecked.length > 0 ? (\n <div className=\"flex flex-col gap-2 border-t border-border bg-muted/50 px-6 py-5 md:px-8\">\n <p className=\"text-[0.875rem] font-medium\">What this did not check</p>\n <ul className=\"flex list-disc flex-col gap-1 pl-5 text-[0.875rem] leading-relaxed text-muted-foreground\">\n {notChecked.map((n, i) => (\n <li key={i}>{n}</li>\n ))}\n </ul>\n </div>\n ) : null}\n {actions ? <div className=\"flex flex-wrap gap-3 border-t border-border px-6 py-5 md:px-8\">{actions}</div> : null}\n </section>\n );\n}\n\n/**\n * Sign a message with a Bitcoin address: a browser wallet signs it with one\n * press where there is one (`wallets`, the buttons a site renders), and any\n * wallet can sign the message by hand and paste the signature back. The\n * frame for sign-in by wallet, /sudo, and every tool's signing step.\n */\nexport function SignMessage({\n lead,\n address,\n message,\n wallets,\n busy = false,\n error,\n submitLabel = 'Confirm',\n secondary,\n onSignature,\n className,\n}: {\n lead?: ReactNode;\n /** The address that must sign. */\n address: string;\n message: string;\n /** Buttons that sign with a browser wallet. */\n wallets?: ReactNode;\n busy?: boolean;\n /** Why the last signature was refused. */\n error?: ReactNode;\n submitLabel?: string;\n /** Beside the submit button: Back, Cancel. */\n secondary?: ReactNode;\n onSignature: (signature: string) => void;\n className?: string;\n}) {\n const [pasted, setPasted] = useState('');\n return (\n <div className={cn('flex flex-col gap-5', className)}>\n {lead ? <p className=\"text-[0.9375rem] leading-relaxed\">{lead}</p> : null}\n {wallets ? (\n <>\n <div className=\"flex flex-wrap gap-2\">{wallets}</div>\n <div className=\"flex items-center gap-3 text-[0.8125rem] text-muted-foreground\">\n <span className=\"h-px flex-1 bg-border\" />\n or sign it in any wallet\n <span className=\"h-px flex-1 bg-border\" />\n </div>\n </>\n ) : null}\n <CodeBlock code={message} caption=\"Message to sign\" />\n <form\n className=\"flex flex-col gap-4\"\n onSubmit={(e) => {\n e.preventDefault();\n if (pasted.trim()) onSignature(pasted.trim());\n }}\n >\n <Field\n label=\"Signature\"\n error={error}\n hint={\n <>\n From your wallet’s “sign message” (BIP-322), signed by{' '}\n <span className=\"break-all font-mono\">{address}</span>.\n </>\n }\n >\n <Textarea\n value={pasted}\n onChange={(e) => setPasted(e.target.value)}\n rows={3}\n spellCheck={false}\n className=\"min-h-24 font-mono text-base md:text-[0.8125rem]\"\n />\n </Field>\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"submit\" loading={busy} disabled={!pasted.trim()}>\n {submitLabel}\n </Button>\n {secondary}\n </div>\n </form>\n </div>\n );\n}\n","import { ChevronDown } from 'lucide-react';\nimport { useId, useState } from 'react';\n\nimport { familyByGroup, type FamilySite, type FamilySlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { Popover, PopoverContent, PopoverTrigger } from '../primitives/overlay';\nimport { StatusBadge } from '../primitives/status-badge';\n\nfunction SiteRow({ site, here, onNavigate }: { site: FamilySite; here: boolean; onNavigate?: () => void }) {\n return (\n <li>\n <a\n href={site.href}\n onClick={onNavigate}\n aria-current={here ? 'page' : undefined}\n className={cn(\n 'flex flex-col gap-0.5 rounded-xl px-3 py-2 transition-colors hover:bg-accent',\n here && 'bg-muted hover:bg-muted dark:bg-white/[0.06]'\n )}\n >\n <span className=\"flex items-center gap-2 text-[0.9375rem] font-medium leading-6\">\n {site.label}\n {site.status !== 'live' ? <StatusBadge status={site.status} /> : null}\n {here ? <span className=\"sr-only\">(this site)</span> : null}\n </span>\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{site.line}</span>\n </a>\n </li>\n );\n}\n\n/* Where each group sits. On a tablet, two columns: orangecheck over the\n protocols, the apps over the public goods. On a desk, three: orangecheck,\n the protocols, then the apps with the public goods below them, so the panel\n fits a 1280×800 screen without scrolling. Reading order stays orangecheck,\n Protocols, Apps, Public goods. */\nconst PLACE: Record<string, string> = {\n orangecheck: 'sm:col-start-1 sm:row-start-1 lg:row-span-2',\n protocol: 'sm:col-start-1 sm:row-start-2 lg:col-start-2 lg:row-start-1 lg:row-span-2',\n app: 'sm:col-start-2 sm:row-start-1 lg:col-start-3',\n 'public-good': 'sm:col-start-2 sm:row-start-2 lg:col-start-3',\n};\n\n/**\n * Every public site in the family, in its groups, one line each. `stack`\n * lays the groups in one column (a phone's menu sheet).\n */\nexport function FamilyList({\n current,\n onNavigate,\n stack = false,\n className,\n}: {\n current?: FamilySlug;\n onNavigate?: () => void;\n stack?: boolean;\n className?: string;\n}) {\n const id = useId();\n return (\n <div\n className={cn(\n 'grid grid-cols-1 gap-x-2 gap-y-4',\n // The second desk row takes the slack, so the public goods sit right under the apps.\n !stack && 'sm:grid-cols-2 lg:grid-cols-3 lg:grid-rows-[auto_1fr]',\n className\n )}\n >\n {familyByGroup().map((g) => (\n <div key={g.id} className={cn('flex flex-col gap-1', !stack && PLACE[g.id])}>\n <p id={`${id}-${g.id}`} className=\"px-3 pt-1 text-[0.8125rem] text-muted-foreground\">\n {g.label}\n </p>\n <ul aria-labelledby={`${id}-${g.id}`} className=\"flex flex-col\">\n {g.sites.map((s) => (\n <SiteRow key={s.slug} site={s} here={s.slug === current} onNavigate={onNavigate} />\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * The way between the family's sites: a small chevron beside the lockup, so\n * the lockup itself stays a link home. It opens every site, grouped, with a\n * status only where one is not live. `current` marks the site you are on.\n */\nexport function FamilyMenu({ current, className }: { current?: FamilySlug; className?: string }) {\n const [open, setOpen] = useState(false);\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n aria-label=\"All orangecheck sites\"\n className={cn(\n 'group inline-flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors',\n 'hover:bg-accent hover:text-foreground data-[state=open]:bg-accent data-[state=open]:text-foreground',\n className\n )}\n >\n <ChevronDown aria-hidden className=\"size-4 transition-transform duration-200 group-data-[state=open]:rotate-180\" />\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n sideOffset={14}\n collisionPadding={16}\n className=\"max-h-[min(40rem,var(--radix-popover-content-available-height))] w-[min(calc(100vw-2rem),42rem)] overflow-y-auto p-3 lg:w-[min(calc(100vw-2rem),56rem)]\"\n >\n <FamilyList current={current} onNavigate={() => setOpen(false)} />\n </PopoverContent>\n </Popover>\n );\n}\n","import { ChevronDown, Menu } from 'lucide-react';\nimport Link from 'next/link';\nimport { useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { Lockup, Mark } from '../brand/mark';\nimport { familyByGroup, LEGAL_LINKS, OCHK_IO, PROTOCOLS, type FamilySlug } from '../family';\nimport { cn } from '../lib/cn';\nimport type { FooterColumn, NavItem } from '../lib/nav';\nimport { Popover, PopoverContent, PopoverTrigger, Sheet, SheetContent, SheetTitle, SheetTrigger } from '../primitives/overlay';\nimport { FamilyList, FamilyMenu } from './family-menu';\n\nexport type { FooterColumn, NavItem } from '../lib/nav';\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/** A link with its one line, as a dropdown lists them. */\nfunction NavRow({ item, onNavigate }: { item: NavItem; onNavigate?: () => void }) {\n const body = (\n <>\n <span className=\"text-[0.9375rem] font-medium leading-6 text-foreground\">{item.label}</span>\n {item.description ? (\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{item.description}</span>\n ) : null}\n </>\n );\n const cls = cn(\n 'flex flex-col gap-0.5 rounded-xl px-3 py-2 transition-colors hover:bg-accent',\n item.active && 'bg-muted hover:bg-muted dark:bg-white/[0.06]'\n );\n return item.external ? (\n <a href={item.href} className={cls} rel=\"noreferrer\" onClick={onNavigate}>\n {body}\n </a>\n ) : (\n <Link href={item.href} className={cls} aria-current={item.active ? 'page' : undefined} onClick={onNavigate}>\n {body}\n </Link>\n );\n}\n\n/** \"All protocols\" for a \"Protocols\" menu; a parent with a node for a label gets \"See all\". */\nconst seeAll = (item: NavItem) => (typeof item.label === 'string' ? `All ${item.label.toLowerCase()}` : 'See all');\n\n/** One level of links under a word in the header. */\nfunction NavDropdown({ item }: { item: NavItem }) {\n const [open, setOpen] = useState(false);\n const active = item.active || item.children?.some((c) => c.active);\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n className={cn(\n 'group inline-flex items-center gap-1 rounded-full py-2 pl-3 pr-2.5 text-[0.9375rem] transition-colors',\n active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground data-[state=open]:text-foreground'\n )}\n >\n {item.label}\n <ChevronDown aria-hidden className=\"size-3.5 transition-transform duration-200 group-data-[state=open]:rotate-180\" />\n </PopoverTrigger>\n <PopoverContent align=\"center\" sideOffset={10} className=\"w-[min(calc(100vw-2rem),26rem)] p-2\">\n <ul className=\"flex flex-col\">\n {item.children?.map((c) => (\n <li key={c.href}>\n <NavRow item={c} onNavigate={() => setOpen(false)} />\n </li>\n ))}\n </ul>\n <div className=\"mt-1.5 border-t border-border px-1 pt-1.5\">\n <NavLink\n item={{ ...item, label: seeAll(item), children: undefined }}\n className=\"block rounded-xl px-2 py-2 text-[0.875rem]\"\n onNavigate={() => setOpen(false)}\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport interface SiteHeaderProps {\n home?: string;\n /** Replaces the lockup (and the product word). */\n brand?: ReactNode;\n /** The site's own word beside the lockup: \"orangecheck | stamp\". */\n product?: string;\n /** Mount the family menu beside the lockup. Pass the site's slug to mark it. */\n family?: boolean | FamilySlug;\n nav?: readonly NavItem[];\n /** A search control, set before the actions. */\n search?: ReactNode;\n actions?: ReactNode;\n /**\n * `site`: a public page's header, the navigation centred. `tool`: 56px,\n * full width, a hairline under it, the navigation after the lockup.\n */\n variant?: 'site' | 'tool';\n className?: string;\n}\n\n/**\n * The header: lockup (and the site's word), navigation, search and actions.\n * Below md the navigation, and the family when it is on, move into one sheet;\n * the actions stay.\n */\nexport function SiteHeader({\n home = '/',\n brand,\n product,\n family,\n nav = [],\n search,\n actions,\n variant = 'site',\n className,\n}: SiteHeaderProps) {\n const [open, setOpen] = useState(false);\n const tool = variant === 'tool';\n const size = tool ? 24 : 28;\n const current = typeof family === 'string' ? family : undefined;\n const menu = nav.length > 0 || Boolean(family);\n const brandNode = brand ?? (\n <span className=\"inline-flex items-center\">\n <Lockup size={size} />\n {product ? (\n <>\n <span aria-hidden className=\"mx-3 h-5 w-px bg-oca-hairline-strong\" />\n <span className=\"font-medium tracking-[-0.01em]\" style={{ fontSize: size * 0.56 }}>\n {product}\n </span>\n </>\n ) : null}\n </span>\n );\n const navigation =\n nav.length > 0 ? (\n <nav aria-label=\"Main\" className=\"hidden items-center gap-1 md:flex\">\n {nav.map((n) => (n.children?.length ? <NavDropdown key={n.href} item={n} /> : <NavLink key={n.href} item={n} />))}\n </nav>\n ) : null;\n return (\n <header\n className={cn(\n 'sticky top-0 z-40 w-full border-b bg-background/95 backdrop-blur-md supports-[backdrop-filter]:bg-background/90',\n tool ? 'border-border' : 'border-transparent',\n className\n )}\n >\n <div\n className={cn(\n 'flex items-center justify-between gap-4',\n tool ? 'h-14 px-4 md:px-6' : 'oca-container h-16 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 !tool &&\n nav.length > 0 &&\n 'md:grid md:grid-cols-[minmax(max-content,1fr)_auto_minmax(max-content,1fr)]'\n )}\n >\n <div className={cn('flex min-w-0 items-center gap-1', tool ? 'md:gap-1' : 'justify-self-start')}>\n <Link href={home} className=\"-ml-1 min-w-0 rounded-lg p-1\">\n {brandNode}\n {/* Read as \"orangecheck home\": the name starts with what the link shows. */}\n <span className=\"sr-only\"> home</span>\n </Link>\n {family ? <FamilyMenu current={current} className=\"max-md:hidden\" /> : null}\n {tool && navigation ? <div className=\"ml-5\">{navigation}</div> : null}\n </div>\n {!tool ? navigation : null}\n <div className=\"flex items-center gap-2 justify-self-end\">\n {search}\n {actions}\n {menu ? (\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.length > 0 ? (\n <nav aria-label=\"Main\" className=\"flex flex-col\">\n {nav.map((n) =>\n n.children?.length ? (\n <div key={n.href} className=\"flex flex-col py-2\">\n <p className=\"px-3 pb-1 text-[0.8125rem] text-muted-foreground\">{n.label}</p>\n {n.children.map((c) => (\n <NavLink\n key={c.href}\n item={c}\n className=\"rounded-xl px-3 py-2.5 text-[1.0625rem]\"\n onNavigate={() => setOpen(false)}\n />\n ))}\n </div>\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 )}\n </nav>\n ) : null}\n {family ? (\n <details className={cn('group', nav.length > 0 && 'mt-2 border-t border-border pt-4')}>\n <summary className=\"flex cursor-pointer list-none items-center justify-between rounded-xl px-3 py-2.5 text-[1.0625rem] [&::-webkit-details-marker]:hidden\">\n All orangecheck sites\n <ChevronDown aria-hidden className=\"size-4 text-muted-foreground transition-transform group-open:rotate-180\" />\n </summary>\n <FamilyList current={current} onNavigate={() => setOpen(false)} stack className=\"mt-2\" />\n </details>\n ) : null}\n </SheetContent>\n </Sheet>\n ) : null}\n </div>\n </div>\n </header>\n );\n}\n\n/** The first thing a keyboard reaches: a way past the header to the page. */\nexport function SkipLink({ href = '#main-content', children = 'Skip to content' }: { href?: string; children?: ReactNode }) {\n return (\n <a\n href={href}\n className=\"sr-only focus:not-sr-only focus:fixed focus:left-4 focus:top-3 focus:z-50 focus:rounded-full focus:border focus:border-border focus:bg-card focus:px-4 focus:py-2 focus:text-[0.9375rem] focus:font-medium focus:text-foreground focus:shadow-md\"\n >\n {children}\n </a>\n );\n}\n\nconst BANNER_TONE = {\n neutral: 'border-border bg-muted',\n brand: 'border-[color-mix(in_oklab,var(--oca-orange)_30%,var(--border))] bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--background))]',\n danger: 'border-[color-mix(in_oklab,var(--destructive)_35%,var(--border))] bg-[color-mix(in_oklab,var(--destructive)_8%,var(--background))]',\n} as const;\n\n/**\n * One strip above the header: an outage, or a notice everyone must see. The\n * rule that shows it stays with each site; this is only how it looks. Three\n * tones, as a Notice has, and ink text on every one.\n */\nexport function SiteBanner({\n tone = 'neutral',\n children,\n action,\n className,\n}: {\n tone?: keyof typeof BANNER_TONE;\n children: ReactNode;\n /** A link to where the full story is (\"Status\"). */\n action?: ReactNode;\n className?: string;\n}) {\n return (\n <div role=\"status\" aria-live=\"polite\" data-tone={tone} className={cn('border-b text-[0.875rem]', BANNER_TONE[tone], className)}>\n <div className=\"oca-container flex flex-wrap items-center justify-between gap-x-4 gap-y-1 py-2.5\">\n <p className=\"flex min-w-0 items-baseline gap-2.5 leading-snug\">\n {tone !== 'neutral' ? (\n <span\n aria-hidden\n className={cn(\n 'size-2 shrink-0 translate-y-[-0.05em] rounded-full',\n tone === 'brand' ? 'bg-oca-orange' : 'bg-destructive'\n )}\n />\n ) : null}\n <span>{children}</span>\n </p>\n {/* On a phone the link wraps under the words, lined up with them, not the dot. */}\n {action ? <div className={cn('shrink-0 font-medium', tone !== 'neutral' && 'max-sm:pl-[1.125rem]')}>{action}</div> : null}\n </div>\n </div>\n );\n}\n\n/** A link in the footer's lists: 44px tall on phones. */\nconst FOOT_LINK = 'inline-flex min-h-11 items-center transition-colors hover:text-foreground md:min-h-0';\n\nfunction LegalRow() {\n return (\n <div className=\"flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:items-center sm:justify-between\">\n <nav aria-label=\"Legal\">\n <ul className=\"flex flex-wrap gap-x-5\">\n {LEGAL_LINKS.map((l) => (\n <li key={l.href}>\n <a href={l.href} className={FOOT_LINK}>\n {l.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n <p>© {new Date().getFullYear()} OrangeCheck</p>\n </div>\n );\n}\n\nexport interface SiteFooterProps {\n columns?: readonly FooterColumn[];\n /** Add the family's columns from the registry: orangecheck, Protocols, Apps, Public goods. */\n family?: boolean;\n /** The fixed legal row, all on ochk.io: Privacy, Terms, Security, Trademarks, Contact. */\n legal?: boolean;\n /** One row, for tools: the lockup, the protocols when `family`, legal and meta. */\n compact?: boolean;\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\n/**\n * The footer, in the deck's register: a line of fine print, columns of links,\n * the family when it is on, the legal row and the support credit. Any number\n * of columns: the lockup shares their row up to five, then takes its own.\n * Links are 44px tall on phones.\n */\nexport function SiteFooter({\n columns = [],\n family = false,\n legal = false,\n compact = false,\n fineprint,\n meta,\n signature = true,\n className,\n}: SiteFooterProps) {\n if (compact) {\n return (\n <footer className={cn('border-t border-border bg-background text-[0.875rem] text-muted-foreground', className)}>\n <div className=\"oca-container flex flex-col gap-x-8 gap-y-3 py-5 lg:flex-row lg:items-center lg:justify-between\">\n <div className=\"flex flex-wrap items-center gap-x-6 gap-y-1\">\n <a href={OCHK_IO} className=\"rounded-lg text-foreground\">\n <Lockup size={22} />\n </a>\n {family ? (\n <nav aria-label=\"Protocols\">\n <ul className=\"flex flex-wrap gap-x-4\">\n {PROTOCOLS.map((p) => (\n <li key={p.slug}>\n <a href={p.pageHref} className={FOOT_LINK}>\n {p.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n ) : null}\n </div>\n {legal || meta ? (\n <div className=\"flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:flex-wrap sm:items-center\">\n {legal ? <LegalRow /> : null}\n {meta}\n </div>\n ) : null}\n </div>\n </footer>\n );\n }\n const cols: FooterColumn[] = [\n ...columns,\n ...(family\n ? familyByGroup().map((g) => ({\n // The lockup above already says orangecheck.\n heading: g.id === 'orangecheck' ? 'Start here' : g.label,\n links: g.sites.map((s) => ({ href: s.href, label: s.label, external: true })),\n }))\n : []),\n ];\n const n = cols.length;\n const inline = n <= 5;\n const grid = {\n '--oca-footer-md': `repeat(${Math.max(1, Math.min(n, 4))}, minmax(0, 1fr))`,\n '--oca-footer-lg': inline\n ? `minmax(0, 1.3fr) repeat(${Math.max(1, n)}, minmax(0, 1fr))`\n : `repeat(${Math.min(n, 6)}, minmax(0, 1fr))`,\n } as CSSProperties;\n return (\n <footer className={cn('border-t border-border bg-background', className)}>\n <div\n style={grid}\n className=\"oca-container grid grid-cols-2 gap-x-6 gap-y-10 py-14 md:grid-cols-[var(--oca-footer-md)] md:py-16 lg:grid-cols-[var(--oca-footer-lg)]\"\n >\n <div className={cn('col-span-full flex flex-col gap-4', inline && 'lg: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 {cols.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 = n % 2 === 1 && i === n - 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 {legal || meta ? (\n <div className=\"oca-container\">\n {/* The rule spans the content, not the gutters. */}\n <div className=\"flex flex-col gap-3 border-t border-border py-6 text-[0.875rem] text-muted-foreground\">\n {legal ? <LegalRow /> : null}\n {meta}\n </div>\n </div>\n ) : null}\n </footer>\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { IsoCheck } from '../brand/iso-check';\nimport { Lockup } from '../brand/mark';\nimport { cn } from '../lib/cn';\n\n/**\n * The page a sign-in happens on: a form column with the lockup, a display\n * title, one line and the ceremony, and from lg an ink column with a picture.\n * The ceremony itself (OcSignIn, a SignMessage, a passkey prompt) is the\n * children; this is only the frame, so ochk.io's /signin and /sudo and every\n * tool's sign-in page look the same.\n */\nexport function SignInFrame({\n title = 'Sign in',\n lead,\n children,\n error,\n fineprint,\n brand,\n home = '/',\n back,\n art,\n caption,\n className,\n}: {\n title?: ReactNode;\n /** One line under the title. */\n lead?: ReactNode;\n /** The ceremony. */\n children: ReactNode;\n /** A failure the ceremony could not show itself. */\n error?: ReactNode;\n /** Small print under the ceremony: where the code goes, what is kept. */\n fineprint?: ReactNode;\n /** Replaces the lockup in the corner. */\n brand?: ReactNode;\n home?: string;\n /** The link opposite the lockup. Defaults to \"Back to home\"; `null` leaves it out. */\n back?: ReactNode;\n /** The picture in the ink column. Defaults to the check. */\n art?: ReactNode;\n /** A line at the foot of the ink column. */\n caption?: ReactNode;\n className?: string;\n}) {\n return (\n <main\n id=\"main-content\"\n className={cn('grid min-h-dvh grid-cols-1 bg-background text-foreground lg:grid-cols-2', className)}\n >\n <section className=\"flex flex-col px-4 pb-8 pt-5 sm:px-8 lg:px-14 lg:pt-8\">\n <header className=\"flex items-center justify-between gap-4\">\n <Link href={home} className=\"w-fit rounded-lg\">\n {brand ?? <Lockup size={28} />}\n <span className=\"sr-only\"> home</span>\n </Link>\n {back === undefined ? (\n <Link\n href={home}\n className=\"text-[0.9375rem] text-muted-foreground underline-offset-4 hover:text-foreground hover:underline\"\n >\n Back to home\n </Link>\n ) : (\n back\n )}\n </header>\n <div className=\"mx-auto flex w-full max-w-[25rem] flex-1 flex-col justify-center gap-9 py-12\">\n <div className=\"flex flex-col gap-3\">\n <h1 className=\"oca-display-2\">{title}</h1>\n {lead ? <p className=\"oca-lead\">{lead}</p> : null}\n </div>\n <div>{children}</div>\n {error ? (\n <p role=\"alert\" className=\"text-[0.9375rem] text-destructive\">\n {error}\n </p>\n ) : null}\n {fineprint ? <p className=\"text-[0.8125rem] leading-relaxed text-muted-foreground\">{fineprint}</p> : null}\n </div>\n </section>\n <aside\n aria-hidden\n className=\"relative hidden flex-col justify-between gap-10 overflow-hidden border-l border-[var(--oca-band-line)] bg-oca-ink p-14 text-oca-ink-foreground lg:flex\"\n >\n <div className=\"flex flex-1 items-center justify-center\">{art ?? <IsoCheck size={340} settle tilt className=\"max-w-full\" />}</div>\n {caption ? <div className=\"flex max-w-[24rem] flex-col gap-3\">{caption}</div> : null}\n </aside>\n </main>\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\n/** The phone's way around a small app: every page one tap away, under the thumb. */\nfunction TabBar({ items }: { items: ShellNavItem[] }) {\n return (\n <nav\n aria-label=\"Pages\"\n data-oca-tabbar=\"\"\n className=\"fixed inset-x-0 bottom-0 z-40 border-t border-border bg-background/90 pb-[env(safe-area-inset-bottom)] backdrop-blur-md md:hidden\"\n >\n <div\n className=\"mx-auto grid h-14 max-w-[32rem] px-1.5\"\n style={{ gridTemplateColumns: `repeat(${items.length}, minmax(0, 1fr))` }}\n >\n {items.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex min-w-0 flex-col items-center justify-center gap-1 rounded-2xl text-[0.6875rem] leading-none outline-none transition-colors [-webkit-tap-highlight-color:transparent] focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n it.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span\n className={cn(\n 'relative flex h-7 w-12 items-center justify-center rounded-full transition-[background-color,box-shadow] duration-200',\n '[&_svg]:size-[1.125rem] [&_svg]:shrink-0',\n it.active ? 'bg-card shadow-sm ring-1 ring-border [&_svg]:stroke-2' : '[&_svg]:stroke-[1.75]'\n )}\n >\n {it.icon}\n {it.badge ? (\n <span aria-hidden className=\"absolute right-2.5 top-0.5 size-2 rounded-full bg-oca-orange ring-2 ring-background\" />\n ) : null}\n </span>\n <span className=\"max-w-full truncate px-0.5\">{it.label}</span>\n {it.badge ? <span className=\"sr-only\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n </nav>\n );\n}\n\n/** Two to five pages, each with an icon, fit a tab bar. More, or sections, keep the drawer. */\nfunction tabsFor(groups: ShellNavGroup[]): ShellNavItem[] | null {\n const items = groups.flatMap((g) => g.items);\n return items.length >= 2 && items.length <= 5 && items.every((it) => it.icon) ? items : null;\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, and when it holds two to five pages, each with an icon, phones get a\n * tab bar instead: the pages sit under the thumb, the strip and the menu\n * button go (the sheet stays for a `footer`, without the pages), and tablets\n * keep the sheet. Pages get the section through context: PageHeader uses it\n * as its 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 tabs = current ? null : tabsFor(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\n className={cn(\n 'min-h-dvh bg-background',\n tabs && 'max-md:pb-[calc(3.5rem_+_env(safe-area-inset-bottom))]',\n className\n )}\n >\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={cn(\n 'inline-flex size-10 items-center justify-center rounded-full hover:bg-accent',\n // The tab bar holds every page; the sheet is left for a footer.\n tabs && !footer && 'max-md:hidden'\n )}\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 <div className={tabs ? 'max-md:hidden' : undefined}>\n <SideNav groups={groups} onNavigate={() => setOpen(false)} />\n </div>\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\n className={cn(\n 'flex h-9 items-center gap-1.5 border-t border-border px-4 text-[0.875rem]',\n // The active tab already names the page.\n tabs && !pageOverride && 'max-md:hidden'\n )}\n >\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 {tabs ? <TabBar items={tabs} /> : null}\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"]}
|