@orangecheck/app-design 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +3 -3
  2. package/dist/chrome.d.mts +11 -6
  3. package/dist/chrome.d.ts +11 -6
  4. package/dist/chrome.js +156 -130
  5. package/dist/chrome.js.map +1 -1
  6. package/dist/chrome.mjs +155 -131
  7. package/dist/chrome.mjs.map +1 -1
  8. package/dist/components.d.mts +40 -5
  9. package/dist/components.d.ts +40 -5
  10. package/dist/components.js +135 -13
  11. package/dist/components.js.map +1 -1
  12. package/dist/components.mjs +132 -14
  13. package/dist/components.mjs.map +1 -1
  14. package/dist/{docs-CFE5mU_6.d.mts → docs-B9G1BNXI.d.mts} +2 -2
  15. package/dist/{docs-ByUx4t-D.d.ts → docs-BWWnm5Jv.d.ts} +2 -2
  16. package/dist/family.d.mts +1 -1
  17. package/dist/family.d.ts +1 -1
  18. package/dist/family.js +7 -1
  19. package/dist/family.js.map +1 -1
  20. package/dist/family.mjs +5 -2
  21. package/dist/family.mjs.map +1 -1
  22. package/dist/{index-DmfyPYe5.d.mts → index-Bkl49Vgy.d.mts} +4 -1
  23. package/dist/{index-DmfyPYe5.d.ts → index-Bkl49Vgy.d.ts} +4 -1
  24. package/dist/index.d.mts +7 -7
  25. package/dist/index.d.ts +7 -7
  26. package/dist/index.js +197 -48
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +189 -49
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/mdx.d.mts +3 -3
  31. package/dist/mdx.d.ts +3 -3
  32. package/dist/mdx.js +5 -3
  33. package/dist/mdx.js.map +1 -1
  34. package/dist/mdx.mjs +5 -3
  35. package/dist/mdx.mjs.map +1 -1
  36. package/dist/primitives.d.mts +2 -2
  37. package/dist/primitives.d.ts +2 -2
  38. package/dist/primitives.js +2 -1
  39. package/dist/primitives.js.map +1 -1
  40. package/dist/primitives.mjs +2 -1
  41. package/dist/primitives.mjs.map +1 -1
  42. package/dist/session.d.mts +4 -4
  43. package/dist/session.d.ts +4 -4
  44. package/dist/session.js +122 -1
  45. package/dist/session.js.map +1 -1
  46. package/dist/session.mjs +122 -1
  47. package/dist/session.mjs.map +1 -1
  48. package/dist/{status-badge-BJ9Sdsx8.d.mts → status-badge-BBbCO6ZA.d.mts} +1 -1
  49. package/dist/{status-badge-Bt8x3RhO.d.ts → status-badge-CHHxtFkP.d.ts} +1 -1
  50. package/dist/styles/swagger.css +24 -1
  51. package/dist/styles/tokens.css +5 -0
  52. package/dist/{tool-shell-CQZNRUgH.d.mts → tool-shell-CnZ3NUSi.d.ts} +10 -4
  53. package/dist/{tool-shell-CRmceGrV.d.ts → tool-shell-DQFEMLLe.d.mts} +10 -4
  54. package/dist/{tools-Bg1gi2HO.d.mts → tools-CKO8IseL.d.mts} +2 -2
  55. package/dist/{tools-Bw7RhO92.d.ts → tools-CzjFPng4.d.ts} +2 -2
  56. package/package.json +5 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tokens/palette.ts","../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/lib/shared-context.ts","../src/lib/density.ts","../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/components/code-card.tsx","../src/code/highlight.ts","../src/format/index.ts","../src/lib/shell-context.ts","../src/components/data.tsx","../src/components/code-block.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/family/index.ts","../src/lib/site-home.ts","../src/components/error-page.tsx","../src/components/apps.tsx","../src/components/figures.tsx","../src/components/blocks.tsx","../src/components/text-link.tsx","../src/components/legal.tsx","../src/lib/docs-context.ts","../src/components/family-grids.tsx","../src/components/docs.tsx","../src/components/protocol.tsx","../src/components/verify.tsx","../src/components/search.tsx","../src/components/tools.tsx","../src/chrome/family-menu.tsx","../src/chrome/app-shell.tsx","../src/chrome/site.tsx","../src/chrome/sign-in-frame.tsx","../src/chrome/docs-shell.tsx","../src/chrome/tool-shell.tsx","../src/code/rehype.ts","../src/mdx/index.tsx"],"names":["Separator","SonnerToaster","forwardRef","Button","jsx","jsxs","cva","Card","Input","Textarea","Label","Fragment","SelectTrigger","useContext","SelectContent","SelectItem","Checkbox","Switch","RadioGroup","RadioGroupItem","DialogContent","DialogTitle","DialogDescription","SheetContent","PopoverContent","TooltipContent","DropdownMenuContent","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","useState","useEffect","createContext","Tabs","TabsList","TabsTrigger","TabsContent","useId","ChevronDown","useRef","createElement","emit","at","isValidElement","cloneElement","useCallback","done","Check","useMemo","subscribe","useSyncExternalStore","TabsPrimitive2","TONE","protocol","Link","highlight","pad","LINK","ChevronRight","ArrowRight","ArrowUpRight","Children","current","SearchButton","DialogPrimitive2","Lock","useTheme","Icon","Menu","useRouter"],"mappings":"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","file":"index.mjs","sourcesContent":["// Generated from styles/tokens.css by scripts/gen-palette.mjs. Do not edit: change tokens.css and run yarn build.\n\n/** Every colour token in light mode, resolved to its colour. */\nexport const lightPalette = {\n accent: '#f4f4f4',\n accentDisplay: '#f55819',\n accentForeground: '#0a0a0a',\n accentInk: '#c73f09',\n background: '#fafafa',\n border: '#ececec',\n brand: '#f66d36',\n brandForeground: '#0a0a0a',\n card: '#ffffff',\n cardForeground: '#0a0a0a',\n chart1: '#ea580b',\n chart2: '#2563eb',\n chart3: '#9d2b77',\n chart4: '#92400e',\n chartDown: '#c2262e',\n chartGrid: '#ececec',\n chartNeutral: '#8a8f96',\n chartUp: '#15803d',\n codeAdded: '#86d39b',\n codeAddedLine: '#1a2c20',\n codeComment: '#909397',\n codeFunction: '#9db4ec',\n codeKeyword: '#e3a8c2',\n codeLine: '#2a2a2a',\n codeLink: '#9db4ec',\n codeMark: '#232323',\n codeNumber: '#fcb781',\n codePackage: '#e99a8f',\n codeProperty: '#9db4ec',\n codePunctuation: '#d5d8dc',\n codeRemoved: '#f19a9a',\n codeRemovedLine: '#2f1c1c',\n codeString: '#e99a8f',\n codeSurface: '#161616',\n codeTag: '#e3a8c2',\n codeType: '#8fd0c2',\n destructive: '#c2262e',\n destructiveForeground: '#ffffff',\n foreground: '#0a0a0a',\n hairlineStrong: '#dadada',\n info: '#1d4ed8',\n infoForeground: '#ffffff',\n ink: '#0a0a0a',\n inkCard: '#1e1e1e',\n inkEyebrow: '#f0835a',\n inkForeground: '#ffffff',\n inkLine: '#2a2a2a',\n inkMuted: '#d5d8dc',\n inkSubtle: '#909397',\n inkTitle: '#fcb781',\n input: '#8f8f8f',\n muted: '#f2f2f2',\n mutedForeground: '#54585e',\n ocWalletReady: '#15803d',\n ocWalletSurface: '#ffffff',\n orange: '#f66d36',\n orangeDeep: '#ea580b',\n orangeLight: '#fb933c',\n outline: '#f2cfc3',\n peach: '#fed8ab',\n popover: '#ffffff',\n popoverForeground: '#0a0a0a',\n primary: '#0a0a0a',\n primaryForeground: '#ffffff',\n ring: '#ea580b',\n secondary: '#ffffff',\n secondaryForeground: '#0a0a0a',\n skeleton: '#e8e8e8',\n sphereFrom: '#ff6f33',\n sphereTo: '#ffd9c4',\n subtleForeground: '#686c72',\n success: '#15803d',\n successForeground: '#ffffff',\n tableHead: '#ededed',\n warning: '#a15c07',\n warningForeground: '#ffffff',\n} as const;\n\n/** Every colour token in dark mode, resolved to its colour. */\nexport const darkPalette = {\n accent: '#1e1e1e',\n accentDisplay: '#f66d36',\n accentForeground: '#fafafa',\n accentInk: '#f0835a',\n background: '#0a0a0a',\n bandLine: '#262626',\n border: '#2a2a2a',\n brand: '#f66d36',\n brandForeground: '#0a0a0a',\n card: '#161616',\n cardForeground: '#fafafa',\n chart1: '#f66d36',\n chart2: '#3b82f6',\n chart3: '#f9a8d4',\n chart4: '#fde047',\n chartDown: '#f87171',\n chartGrid: '#2a2a2a',\n chartNeutral: '#62676e',\n chartUp: '#4ade80',\n codeAdded: '#86d39b',\n codeAddedLine: '#132519',\n codeComment: '#909397',\n codeFunction: '#9db4ec',\n codeKeyword: '#e3a8c2',\n codeLine: '#2a2a2a',\n codeLink: '#9db4ec',\n codeMark: '#1b1b1b',\n codeNumber: '#fcb781',\n codePackage: '#e99a8f',\n codeProperty: '#9db4ec',\n codePunctuation: '#d5d8dc',\n codeRemoved: '#f19a9a',\n codeRemovedLine: '#271414',\n codeString: '#e99a8f',\n codeSurface: '#0e0e0e',\n codeTag: '#e3a8c2',\n codeType: '#8fd0c2',\n destructive: '#f87171',\n destructiveForeground: '#0a0a0a',\n foreground: '#fafafa',\n hairlineStrong: '#333333',\n iconRing: '#333333',\n iconTile: '#1e1e1e',\n info: '#93c5fd',\n infoForeground: '#0a0a0a',\n ink: '#171717',\n inkCard: '#1e1e1e',\n inkEyebrow: '#f0835a',\n inkForeground: '#ffffff',\n inkLine: '#2a2a2a',\n inkMuted: '#d5d8dc',\n inkSubtle: '#909397',\n inkTitle: '#fcb781',\n input: '#6a6a6a',\n muted: '#1e1e1e',\n mutedForeground: '#a3a6aa',\n ocWalletReady: '#4ade80',\n ocWalletSurface: '#161616',\n orange: '#f66d36',\n orangeDeep: '#ea580b',\n orangeLight: '#fb933c',\n outline: '#3a2a24',\n peach: '#fed8ab',\n popover: '#1a1a1a',\n popoverForeground: '#fafafa',\n primary: '#fafafa',\n primaryForeground: '#0a0a0a',\n ring: '#f66d36',\n secondary: '#1c1c1c',\n secondaryForeground: '#fafafa',\n skeleton: '#222222',\n sphereFrom: '#ff6f33',\n sphereTo: '#ffd9c4',\n subtleForeground: '#8b8e93',\n success: '#4ade80',\n successForeground: '#0a0a0a',\n tableHead: '#1e1e1e',\n warning: '#fbbf24',\n warningForeground: '#0a0a0a',\n} as const;\n","/*\n * The palette as data, for places CSS variables cannot reach: OG images,\n * canvas and WebGL, charts, email. Light and dark are generated from\n * styles/tokens.css; scripts/check-mirror.mjs fails the build when the\n * generated file or a brand value drifts.\n */\nimport { darkPalette, lightPalette } from './palette';\n\nexport { darkPalette, lightPalette } from './palette';\n\nexport const APP_ATTRIBUTE = 'data-oc-app';\nexport const APP_ID = 'ochk';\n\nexport const appColors = {\n /** Every colour token, generated from tokens.css (palette.ts): the chart series, code, ink and status colours too. */\n light: lightPalette,\n dark: darkPalette,\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 CSSProperties,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { useTheme } from 'next-themes';\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. */\n/*\n * sonner paints a toast from its own variables (white, or black in dark), and\n * they outrank a class. Set to the tokens, a toast is the popover in both modes.\n */\nconst TOAST_COLOURS = {\n '--normal-bg': 'var(--popover)',\n '--normal-text': 'var(--popover-foreground)',\n '--normal-border': 'var(--border)',\n} as CSSProperties;\n\n/** Toasts in the page's mode: it reads next-themes, so a site passes nothing for dark. */\nexport function Toaster({ style, ...props }: ToasterProps) {\n const { resolvedTheme } = useTheme();\n return (\n <SonnerToaster\n theme={resolvedTheme === 'dark' ? 'dark' : resolvedTheme === 'light' ? 'light' : 'system'}\n style={{ ...TOAST_COLOURS, ...style }}\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 { createContext, type Context } from 'react';\n\n/**\n * A context that is the same object in every entry. Each entry (./chrome,\n * ./components, ./primitives) is bundled on its own, so a plain\n * createContext in a shared module makes one context per entry, and a\n * provider from one entry is invisible to a reader from another. Keyed on\n * globalThis by name, there is one.\n */\nexport function sharedContext<T>(name: string, initial: T): Context<T> {\n const key = Symbol.for(`@orangecheck/app-design/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T> | undefined>;\n return (store[key] ??= createContext<T>(initial));\n}\n","import { createElement, useContext, type ReactNode } from 'react';\n\nimport { sharedContext } from './shared-context';\n\n/*\n * How tightly data and fields are set. A public page is `comfortable`; a\n * tool is `compact` (36px fields, 14px table text, smaller stat cards).\n * ToolShell sets it for everything inside, dialogs included (a React\n * context crosses a portal where a CSS scope would not); a prop on one\n * component still wins.\n */\nexport type Density = 'comfortable' | 'compact';\n\nconst DensityContext = sharedContext<Density>('density', 'comfortable');\n\nexport function DensityProvider({ density, children }: { density: Density; children: ReactNode }) {\n return createElement(DensityContext.Provider, { value: density }, children);\n}\n\nexport function useDensity(): Density {\n return useContext(DensityContext);\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 useContext,\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';\nimport { useDensity } from '../lib/density';\nimport { sharedContext } from '../lib/shared-context';\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\n/* `sm` is 36px for a tool's dense forms; the text stays 16px on phones. */\nconst FIELD_SIZE = {\n md: 'h-11 px-3.5',\n sm: 'h-9 rounded-[0.625rem] px-3 md:text-[0.875rem]',\n} as const;\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** `sm` (36px) for a tool's dense forms. Defaults to the density around it. */\n size?: 'md' | 'sm';\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { className, type = 'text', size, ...props },\n ref\n) {\n const density = useDensity();\n const s = size ?? (density === 'compact' ? 'sm' : 'md');\n return (\n <input\n ref={ref}\n type={type}\n data-ui=\"input\"\n data-size={s}\n className={cn(fieldBase, FIELD_SIZE[s], className)}\n {...props}\n />\n );\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\n/** What Field hands its control: the id its label names, its hint and error, whether it is invalid. */\nexport interface FieldControlProps {\n id: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: true;\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 /**\n * The control, which receives id, aria-describedby and aria-invalid. Or a\n * function given them, for a control inside a box of its own: an input\n * with a popover anchored under it, `(c) => <div className=\"relative\"><Input {...c} />{popover}</div>`.\n */\n children: ReactElement | ((control: FieldControlProps) => ReactNode);\n /** The control's id, when something else must know it. Default: a generated one. */\n id?: string;\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, id: fixedId, className, hideLabel, action }: FieldProps) {\n const generated = useId();\n const id = fixedId ?? generated;\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const wiring: FieldControlProps = {\n id,\n 'aria-describedby': [hintId, errorId].filter(Boolean).join(' ') || undefined,\n 'aria-invalid': error ? true : undefined,\n };\n const control =\n typeof children === 'function'\n ? children(wiring)\n : isValidElement(children)\n ? cloneElement(children as ReactElement<Record<string, unknown>>, { ...wiring })\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\n/*\n * Field wires its label to its child by id, and Select's root renders no\n * element of its own. So Select takes the field's id, description and\n * invalid state and hands them to its trigger, the element a label names.\n */\ninterface SelectWiring {\n id?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n}\nconst SelectFieldContext = sharedContext<SelectWiring | null>('select-field', null);\n\nexport function Select({\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': invalid,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Root> & SelectWiring) {\n return (\n <SelectFieldContext.Provider value={{ id, 'aria-describedby': describedBy, 'aria-invalid': invalid }}>\n <SelectPrimitive.Root {...props} />\n </SelectFieldContext.Provider>\n );\n}\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> & { size?: 'md' | 'sm' }\n>(function SelectTrigger({ className, children, size, ...props }, ref) {\n const density = useDensity();\n const field = useContext(SelectFieldContext);\n const s = size ?? (density === 'compact' ? 'sm' : 'md');\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n id={field?.id}\n aria-describedby={field?.['aria-describedby']}\n aria-invalid={field?.['aria-invalid']}\n className={cn(fieldBase, FIELD_SIZE[s], 'flex items-center justify-between gap-2 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 /** Ask for it twice (a passphrase): `true`, or the second field's label. Refuses until the two match. */\n confirmField?: boolean | ReactNode;\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 [again, setAgain] = useState('');\n const [error, setError] = useState<ReactNode>(null);\n const [mismatch, setMismatch] = useState(false);\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 if (o.confirmField && again !== value) {\n setMismatch(true);\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 setMismatch(false);\n }}\n />\n </Field>\n {o.confirmField ? (\n <Field\n label={o.confirmField === true ? 'Type it again' : o.confirmField}\n error={mismatch ? 'The two do not match.' : null}\n className=\"mt-4\"\n >\n <Input\n type={o.secret ? 'password' : 'text'}\n autoComplete={o.secret ? 'new-password' : 'off'}\n value={again}\n onChange={(e) => {\n setAgain(e.target.value);\n setMismatch(false);\n }}\n />\n </Field>\n ) : null}\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/////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 /** 3 for a sub-heading, set in under its h2. */\n level?: 2 | 3;\n}\n\n/** The id of the heading being read: the topmost one in the upper third of the screen. */\nexport function useActiveHeading(ids: string[]): string | undefined {\n const [active, setActive] = useState<string | undefined>(ids[0]);\n const key = ids.join('|');\n useEffect(() => {\n // A new page starts at its first heading, not wherever the last one was.\n setActive(key.split('|')[0] || undefined);\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 type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\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 * Syntax highlighting with no dependency and no async step, so code is\n * coloured in the server's HTML: at build time in the docs (rehypeCode), and\n * in a page's own render for code made at run time (an envelope, an install\n * line). It reads the languages the family writes: TypeScript and JavaScript\n * (with JSX), JSON, shell, Python, YAML and diffs. Anything else is shown as\n * plain text, never guessed at.\n *\n * Each token names a kind; the kind is a class, and the class is a colour in\n * tokens.css (--oca-code-*). One palette for every highlighter: the shiki\n * theme in ./theme maps TextMate scopes onto the same variables.\n */\n\nexport type TokenKind =\n | 'keyword'\n | 'string'\n | 'number'\n | 'function'\n | 'type'\n | 'property'\n | 'comment'\n | 'tag'\n | 'url';\n\nexport interface Token {\n text: string;\n kind?: TokenKind;\n}\n\n/** One line of code, as tokens. */\nexport type CodeLine = Token[];\n\n/** The class each kind is drawn with (styles/code.css). */\nexport const TOKEN_CLASS: Record<TokenKind, string> = {\n keyword: 'oca-k',\n string: 'oca-s',\n number: 'oca-n',\n function: 'oca-f',\n type: 'oca-y',\n property: 'oca-p',\n comment: 'oca-c',\n tag: 'oca-g',\n url: 'oca-u',\n};\n\ntype Grammar = 'js' | 'json' | 'shell' | 'python' | 'yaml' | 'diff' | 'plain';\n\nconst ALIASES: Record<string, Grammar> = {\n ts: 'js',\n typescript: 'js',\n tsx: 'js',\n js: 'js',\n javascript: 'js',\n jsx: 'js',\n mjs: 'js',\n cjs: 'js',\n json: 'json',\n jsonc: 'json',\n json5: 'json',\n bash: 'shell',\n sh: 'shell',\n shell: 'shell',\n zsh: 'shell',\n console: 'shell',\n terminal: 'shell',\n py: 'python',\n python: 'python',\n yaml: 'yaml',\n yml: 'yaml',\n diff: 'diff',\n};\n\n/** The languages read, by the names a code fence uses. */\nexport const CODE_LANGS: readonly string[] = Object.keys(ALIASES);\n\nexport function grammarOf(lang?: string | null): Grammar {\n return (lang && ALIASES[lang.toLowerCase()]) || 'plain';\n}\n\n/* ── Scanner ─────────────────────────────────────────────────────────── */\n\ntype Emit = (text: string, kind?: TokenKind) => void;\n\n/** Collects tokens, merging neighbours of one kind so the markup stays small. */\nfunction collector(): { emit: Emit; tokens: Token[] } {\n const tokens: Token[] = [];\n const emit: Emit = (text, kind) => {\n if (!text) return;\n const last = tokens[tokens.length - 1];\n if (last && last.kind === kind) last.text += text;\n else tokens.push(kind ? { text, kind } : { text });\n };\n return { emit, tokens };\n}\n\nfunction at(re: RegExp, src: string, i: number): string | null {\n re.lastIndex = i;\n const m = re.exec(src);\n return m ? m[0] : null;\n}\n\nconst WS = /[ \\t]+/y;\nconst NEWLINE = /\\r?\\n/y;\n\n/* ── JavaScript, TypeScript, JSX ─────────────────────────────────────── */\n\nconst JS_KEYWORDS = new Set(\n (\n 'abstract as async await break case catch class const continue debugger declare default delete do else enum export ' +\n 'extends finally for from function get if implements import in infer instanceof interface is keyof let module ' +\n 'namespace new of override private protected public readonly return satisfies set static super switch this throw ' +\n 'try type typeof unique var void while with yield'\n ).split(' ')\n);\nconst JS_CONSTANTS = new Set(['true', 'false', 'null', 'undefined', 'NaN', 'Infinity']);\nconst TS_PRIMITIVES = new Set(['string', 'number', 'boolean', 'bigint', 'symbol', 'object', 'unknown', 'any', 'never']);\n\n/* MAX_SATS, DOCS_HREF: a constant. JSON, URL: a namespace, read as a type. */\nconst isConstant = (m: string) => /^[A-Z][A-Z\\d_]+$/.test(m) && (m.includes('_') || m.length > 4);\n\nconst JS_LINE_COMMENT = /\\/\\/[^\\n]*/y;\nconst JS_BLOCK_COMMENT = /\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y;\nconst JS_TEMPLATE = /`(?:\\\\[\\s\\S]|[^\\\\`])*`?/y;\nconst JS_STRING = /'(?:\\\\.|[^\\\\'\\n])*'?|\"(?:\\\\.|[^\\\\\"\\n])*\"?/y;\nconst JS_NUMBER = /(?:0[xX][\\da-fA-F_]+|0[bB][01_]+|0[oO][0-7_]+|\\d[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+-]?\\d+)?|\\.\\d[\\d_]*(?:[eE][+-]?\\d+)?)n?/y;\nconst JS_IDENT = /[A-Za-z_$][\\w$]*/y;\nconst JS_DECORATOR = /@[A-Za-z_$][\\w$.]*/y;\nconst JS_CALL_AFTER = /\\s*(?:<[\\w$\\s,.[\\]|&'\"]*>)?\\s*\\(/y;\nconst JS_TAG = /<\\/?(?=[A-Za-z])/y;\nconst JS_TAG_NAME = /[A-Za-z][\\w$.:-]*/y;\nconst JS_PUNCT = /=>|\\.\\.\\.|[{}()[\\];,.<>=+\\-*/%!?:&|^~#]/y;\n/* Where a JSX tag can start: after one of these, or at the start of a line. */\nconst JSX_BEFORE = new Set(['(', ',', '=', '?', ':', '{', '[', ';', '>', '&&', '||', '=>', 'return']);\n\nfunction scanJs(src: string, emit: Emit, jsx: boolean) {\n let i = 0;\n let prev = ''; // the last significant token, for property access and JSX starts\n let tagDepth = 0; // inside <Tag …> before its >\n let braceInTag = 0; // a {…} expression inside a tag's attributes\n const sig = (t: string) => {\n prev = t;\n };\n while (i < src.length) {\n let m: string | null;\n if ((m = at(WS, src, i)) || (m = at(NEWLINE, src, i))) {\n emit(m);\n i += m.length;\n continue;\n }\n if ((m = at(JS_LINE_COMMENT, src, i)) || (m = at(JS_BLOCK_COMMENT, src, i))) {\n emit(m, 'comment');\n i += m.length;\n continue;\n }\n if ((m = at(JS_TEMPLATE, src, i)) || (m = at(JS_STRING, src, i))) {\n emit(m, 'string');\n i += m.length;\n sig('\"');\n continue;\n }\n if (jsx && tagDepth === 0 && (m = at(JS_TAG, src, i)) && (prev === '' || JSX_BEFORE.has(prev))) {\n const name = at(JS_TAG_NAME, src, i + m.length);\n if (name) {\n emit(m);\n emit(name, 'tag');\n i += m.length + name.length;\n tagDepth = 1;\n braceInTag = 0;\n sig('tag');\n continue;\n }\n }\n if (jsx && tagDepth > 0 && braceInTag === 0) {\n if (src.startsWith('/>', i) || src[i] === '>') {\n const close = src[i] === '>' ? '>' : '/>';\n emit(close);\n i += close.length;\n tagDepth = 0;\n sig('>');\n continue;\n }\n if ((m = at(JS_IDENT, src, i)) && /^\\s*=/.test(src.slice(i + m.length, i + m.length + 4))) {\n emit(m, 'property');\n i += m.length;\n continue;\n }\n if ((m = at(JS_IDENT, src, i))) {\n emit(m, 'property');\n i += m.length;\n continue;\n }\n if (src[i] === '{') braceInTag = 1;\n } else if (jsx && tagDepth > 0 && braceInTag > 0) {\n if (src[i] === '{') braceInTag++;\n else if (src[i] === '}') braceInTag--;\n }\n if ((m = at(JS_DECORATOR, src, i))) {\n emit(m, 'function');\n i += m.length;\n sig('@');\n continue;\n }\n if ((m = at(JS_IDENT, src, i))) {\n const end = i + m.length;\n let kind: TokenKind | undefined;\n if (prev !== '.' && JS_CONSTANTS.has(m)) kind = 'number';\n else if (prev !== '.' && JS_KEYWORDS.has(m)) kind = 'keyword';\n else if (at(JS_CALL_AFTER, src, end) !== null) kind = 'function';\n else if (prev !== '.' && TS_PRIMITIVES.has(m)) kind = 'type';\n else if (isConstant(m)) kind = 'number';\n else if (/^[A-Z]/.test(m)) kind = 'type';\n emit(m, kind);\n i = end;\n sig(kind === 'keyword' ? m : 'id');\n continue;\n }\n if ((m = at(JS_NUMBER, src, i))) {\n emit(m, 'number');\n i += m.length;\n sig('0');\n continue;\n }\n if ((m = at(JS_PUNCT, src, i))) {\n emit(m);\n i += m.length;\n sig(m === '.' ? '.' : m);\n continue;\n }\n emit(src[i]!);\n i++;\n }\n}\n\n/* ── JSON ────────────────────────────────────────────────────────────── */\n\nconst JSON_STRING = /\"(?:\\\\.|[^\\\\\"\\n])*\"?/y;\nconst JSON_KEY_AFTER = /\\s*:/y;\nconst JSON_NUMBER = /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/y;\nconst JSON_WORD = /true|false|null/y;\n\nfunction scanJson(src: string, emit: Emit) {\n let i = 0;\n while (i < src.length) {\n let m: string | null;\n if ((m = at(JS_LINE_COMMENT, src, i)) || (m = at(JS_BLOCK_COMMENT, src, i))) {\n emit(m, 'comment');\n } else if ((m = at(JSON_STRING, src, i))) {\n emit(m, at(JSON_KEY_AFTER, src, i + m.length) !== null ? 'property' : 'string');\n } else if ((m = at(JSON_NUMBER, src, i)) || (m = at(JSON_WORD, src, i))) {\n emit(m, 'number');\n } else {\n m = src[i]!;\n emit(m);\n }\n i += m.length;\n }\n}\n\n/* ── Shell ───────────────────────────────────────────────────────────── */\n\nconst SH_KEYWORDS = new Set(\n 'if then else elif fi for in do done case esac while until function return export local select time'.split(' ')\n);\nconst SH_PROMPT = /\\$ (?=\\S)/y;\nconst SH_COMMENT = /#[^\\n]*/y;\nconst SH_SINGLE = /'[^']*'?/y;\nconst SH_DOUBLE = /\"(?:\\\\.|[^\\\\\"])*\"?/y;\nconst SH_VAR = /\\$(?:\\{[^}\\n]*\\}?|[A-Za-z_][\\w]*|[@*#?$!\\d])/y;\nconst SH_URL = /https?:\\/\\/[^\\s'\"`)]+/y;\nconst SH_FLAG = /--?[A-Za-z][\\w-]*/y;\nconst SH_ASSIGN = /[A-Za-z_][\\w]*(?==)/y;\nconst SH_VALUE = /=[^\\s|&;()<>'\"`$]*/y;\nconst SH_WORD = /[^\\s|&;()<>'\"`$#]+/y;\nconst SH_OPERATOR = /\\|\\||&&|[|;&]|\\$\\(|[()<>]/y;\n\nfunction scanShell(src: string, emit: Emit) {\n let i = 0;\n let command = true; // the next word is a command\n let lineStart = true;\n while (i < src.length) {\n let m: string | null;\n if ((m = at(NEWLINE, src, i))) {\n emit(m);\n i += m.length;\n // A trailing backslash continues the command on the next line.\n command = !/\\\\\\s*$/.test(src.slice(0, i - m.length));\n lineStart = true;\n continue;\n }\n if ((m = at(WS, src, i))) {\n emit(m);\n i += m.length;\n continue;\n }\n if (lineStart && (m = at(SH_PROMPT, src, i))) {\n emit(m, 'comment');\n i += m.length;\n lineStart = false;\n continue;\n }\n lineStart = false;\n // A # starts a comment at the start of a word, not inside one (url#frag).\n if ((m = at(SH_COMMENT, src, i)) && (i === 0 || /\\s/.test(src[i - 1]!))) {\n emit(m, 'comment');\n i += m.length;\n continue;\n }\n if ((m = at(SH_SINGLE, src, i)) || (m = at(SH_DOUBLE, src, i))) {\n emit(m, 'string');\n i += m.length;\n command = false;\n continue;\n }\n if ((m = at(SH_OPERATOR, src, i))) {\n emit(m);\n i += m.length;\n command = m !== ')' && m !== '>' && m !== '<';\n continue;\n }\n if ((m = at(SH_VAR, src, i))) {\n emit(m, 'type');\n i += m.length;\n command = false;\n continue;\n }\n if ((m = at(SH_URL, src, i))) {\n emit(m, 'url');\n i += m.length;\n command = false;\n continue;\n }\n if (command && (m = at(SH_ASSIGN, src, i))) {\n // FOO=bar cmd: the name, then its value; the command comes after.\n emit(m, 'property');\n i += m.length;\n const v = at(SH_VALUE, src, i)!;\n emit(v);\n i += v.length;\n continue;\n }\n if ((m = at(SH_FLAG, src, i)) && !command) {\n emit(m, 'keyword');\n i += m.length;\n continue;\n }\n if ((m = at(SH_WORD, src, i))) {\n if (command && SH_KEYWORDS.has(m)) emit(m, 'keyword');\n else if (command) {\n emit(m, 'function');\n // `sudo npm …`, `npx tsx …`: the next word is the real command.\n command = m === 'sudo' || m === 'npx' || m === 'env' || m === 'time';\n i += m.length;\n continue;\n } else emit(m);\n i += m.length;\n continue;\n }\n emit(src[i]!);\n i++;\n }\n}\n\n/* ── Python ──────────────────────────────────────────────────────────── */\n\nconst PY_KEYWORDS = new Set(\n (\n 'and as assert async await break class continue def del elif else except finally for from global if import in is ' +\n 'lambda match case nonlocal not or pass raise return try while with yield self cls'\n ).split(' ')\n);\nconst PY_CONSTANTS = new Set(['True', 'False', 'None']);\nconst PY_TYPES = new Set(['int', 'str', 'bool', 'float', 'bytes', 'list', 'dict', 'tuple', 'set', 'object']);\nconst PY_COMMENT = /#[^\\n]*/y;\nconst PY_TRIPLE = /[rRbBuUfF]{0,2}(?:\"\"\"[\\s\\S]*?(?:\"\"\"|$)|'''[\\s\\S]*?(?:'''|$))/y;\nconst PY_STRING = /[rRbBuUfF]{0,2}(?:'(?:\\\\.|[^\\\\'\\n])*'?|\"(?:\\\\.|[^\\\\\"\\n])*\"?)/y;\nconst PY_NUMBER = /(?:0[xX][\\da-fA-F_]+|\\d[\\d_]*(?:\\.[\\d_]*)?(?:[eE][+-]?\\d+)?j?)/y;\nconst PY_IDENT = /[A-Za-z_]\\w*/y;\nconst PY_DECORATOR = /@[A-Za-z_][\\w.]*/y;\nconst PY_CALL_AFTER = /\\s*\\(/y;\n\nfunction scanPython(src: string, emit: Emit) {\n let i = 0;\n let prev = '';\n while (i < src.length) {\n let m: string | null;\n if ((m = at(WS, src, i)) || (m = at(NEWLINE, src, i))) {\n emit(m);\n i += m.length;\n continue;\n }\n if ((m = at(PY_COMMENT, src, i))) {\n emit(m, 'comment');\n } else if ((m = at(PY_TRIPLE, src, i)) || (m = at(PY_STRING, src, i))) {\n // An identifier like `f` or `rb` is only a prefix when a quote follows.\n if (/^[A-Za-z]+$/.test(m)) {\n emit(m);\n } else emit(m, 'string');\n prev = '\"';\n } else if ((m = at(PY_DECORATOR, src, i))) {\n emit(m, 'function');\n prev = '@';\n } else if ((m = at(PY_IDENT, src, i))) {\n let kind: TokenKind | undefined;\n if (PY_CONSTANTS.has(m)) kind = 'number';\n else if (prev !== '.' && PY_KEYWORDS.has(m)) kind = 'keyword';\n else if (prev === 'def' || at(PY_CALL_AFTER, src, i + m.length) !== null) kind = 'function';\n else if (prev === 'class' || /^[A-Z][a-z]/.test(m) || PY_TYPES.has(m)) kind = 'type';\n else if (isConstant(m)) kind = 'number';\n emit(m, kind);\n prev = kind === 'keyword' ? m : 'id';\n } else if ((m = at(PY_NUMBER, src, i))) {\n emit(m, 'number');\n prev = '0';\n } else {\n m = src[i]!;\n emit(m);\n prev = m;\n }\n i += m.length;\n }\n}\n\n/* ── YAML ────────────────────────────────────────────────────────────── */\n\nconst YAML_KEY = /[ \\t]*(?:- )?[\\w.$/-]+(?=[ \\t]*:(?:\\s|$))/y;\nconst YAML_VALUE_WORD = /(?:true|false|null|yes|no|~|-?\\d+(?:\\.\\d+)?)(?=\\s*(?:#|$))/y;\n\nfunction scanYaml(src: string, emit: Emit) {\n let i = 0;\n let lineStart = true;\n while (i < src.length) {\n let m: string | null;\n if ((m = at(NEWLINE, src, i))) {\n emit(m);\n i += m.length;\n lineStart = true;\n continue;\n }\n if (lineStart && (m = at(YAML_KEY, src, i))) {\n const dash = m.match(/^([ \\t]*(?:- )?)/)![1]!;\n emit(dash);\n emit(m.slice(dash.length), 'property');\n i += m.length;\n lineStart = false;\n continue;\n }\n lineStart = false;\n if ((m = at(SH_COMMENT, src, i)) && (i === 0 || /\\s/.test(src[i - 1]!))) emit(m, 'comment');\n else if ((m = at(SH_SINGLE, src, i)) || (m = at(JSON_STRING, src, i))) emit(m, 'string');\n else if ((m = at(YAML_VALUE_WORD, src, i))) emit(m, 'number');\n else if ((m = at(SH_URL, src, i))) emit(m, 'url');\n else {\n m = src[i]!;\n emit(m);\n }\n i += m.length;\n }\n}\n\n/* ── Lines ───────────────────────────────────────────────────────────── */\n\n/** Split tokens into lines; a token that spans lines (a block comment) is cut at each break. */\nfunction toLines(tokens: Token[]): CodeLine[] {\n const lines: CodeLine[] = [[]];\n for (const t of tokens) {\n const parts = t.text.split(/\\r?\\n/);\n parts.forEach((part, j) => {\n if (j > 0) lines.push([]);\n if (part) lines[lines.length - 1]!.push(t.kind ? { text: part, kind: t.kind } : { text: part });\n });\n }\n return lines;\n}\n\n/**\n * Highlight `code` written in `lang` (a fence name: ts, json, bash…). Returns\n * one array of tokens per line. An unknown language comes back as plain text.\n */\nexport function highlight(code: string, lang?: string | null): CodeLine[] {\n // A trailing newline (every fence has one) is not an extra empty line.\n const src = code.replace(/\\r?\\n$/, '');\n const grammar = grammarOf(lang);\n const { emit, tokens } = collector();\n const name = (lang ?? '').toLowerCase();\n switch (grammar) {\n case 'js':\n scanJs(src, emit, name === 'tsx' || name === 'jsx');\n break;\n case 'json':\n scanJson(src, emit);\n break;\n case 'shell':\n scanShell(src, emit);\n break;\n case 'python':\n scanPython(src, emit);\n break;\n case 'yaml':\n scanYaml(src, emit);\n break;\n default:\n emit(src);\n }\n return toLines(tokens);\n}\n\n/* ── Line marks: highlight, diff ─────────────────────────────────────── */\n\nexport type DiffMark = 'add' | 'remove';\n\nexport interface LineMarks {\n /** 1-based line numbers to mark as highlighted. */\n highlight?: ReadonlySet<number>;\n /** 1-based line numbers added or removed. */\n diff?: ReadonlyMap<number, DiffMark>;\n}\n\n/**\n * Read `+` and `-` at the start of each line as a diff, and return the code\n * without them and the marks. A line that starts with neither is context; a\n * single leading space (as `git diff` writes context) is dropped too.\n */\nexport function readDiff(code: string): { code: string; diff: Map<number, DiffMark> } {\n const diff = new Map<number, DiffMark>();\n const lines = code.replace(/\\r?\\n$/, '').split(/\\r?\\n/);\n const out = lines.map((line, i) => {\n const c = line[0];\n if (c === '+' || c === '-') {\n diff.set(i + 1, c === '+' ? 'add' : 'remove');\n return line.slice(1);\n }\n return c === ' ' ? line.slice(1) : line;\n });\n return { code: out.join('\\n'), diff };\n}\n\n/** \"1,3-5\" → {1, 3, 4, 5}. Out-of-order and repeated parts are fine. */\nexport function parseLineRanges(spec: string | readonly number[] | undefined | null): Set<number> {\n if (!spec) return new Set();\n if (typeof spec !== 'string') return new Set(spec);\n const out = new Set<number>();\n for (const part of spec.split(',')) {\n const m = part.trim().match(/^(\\d+)(?:\\s*-\\s*(\\d+))?$/);\n if (!m) continue;\n const a = Number(m[1]);\n const b = m[2] ? Number(m[2]) : a;\n for (let n = Math.min(a, b); n <= Math.max(a, b) && n - a < 10_000; n++) out.add(n);\n }\n return out;\n}\n\n/** What a fence's meta string says: ```ts title=\"gate.ts\" {2,4} diff showLineNumbers */\nexport interface CodeMeta {\n title?: string;\n highlight?: string;\n diff?: boolean;\n lineNumbers?: boolean;\n}\n\nexport function parseCodeMeta(meta?: string | null): CodeMeta {\n if (!meta) return {};\n const out: CodeMeta = {};\n const title = meta.match(/(?:title|filename)=(?:\"([^\"]*)\"|'([^']*)'|(\\S+))/);\n if (title) out.title = title[1] ?? title[2] ?? title[3];\n const lines = meta.match(/\\{([\\d,\\s-]+)\\}/);\n if (lines) out.highlight = lines[1]!.replace(/\\s+/g, '');\n const rest = meta.replace(/(?:title|filename)=(?:\"[^\"]*\"|'[^']*'|\\S+)/, '');\n if (/\\bdiff\\b/.test(rest)) out.diff = true;\n if (/\\b(?:showLineNumbers|lineNumbers|numbers)\\b/.test(rest)) out.lineNumbers = true;\n return out;\n}\n\n/* ── HTML ────────────────────────────────────────────────────────────── */\n\nconst ESCAPE: Record<string, string> = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' };\nexport function escapeHtml(s: string): string {\n return s.replace(/[&<>\"]/g, (c) => ESCAPE[c]!);\n}\n\n/**\n * Lines as markup for CodeBlock's `html`: one `<span data-line>` per line\n * (with `data-mark` or `data-diff` where marked), tokens as classed spans,\n * lines joined by newlines so selecting and copying keeps them.\n */\nexport function linesToHtml(lines: CodeLine[], marks: LineMarks = {}): string {\n return lines\n .map((line, i) => {\n const n = i + 1;\n const attrs = [\n 'data-line=\"\"',\n marks.highlight?.has(n) ? 'data-mark=\"\"' : '',\n marks.diff?.has(n) ? `data-diff=\"${marks.diff.get(n)}\"` : '',\n ]\n .filter(Boolean)\n .join(' ');\n const body = line\n .map((t) => (t.kind ? `<span class=\"${TOKEN_CLASS[t.kind]}\">${escapeHtml(t.text)}</span>` : escapeHtml(t.text)))\n .join('');\n return `<span ${attrs}>${body}</span>`;\n })\n .join('\\n');\n}\n\n/** Highlight and render in one step, reading `diff` and line ranges as CodeBlock does. */\nexport function highlightToHtml(\n code: string,\n lang?: string | null,\n opts: { highlight?: string | readonly number[]; diff?: boolean } = {}\n): string {\n const d = opts.diff ? readDiff(code) : null;\n return linesToHtml(highlight(d ? d.code : code, lang), {\n highlight: parseLineRanges(opts.highlight),\n diff: d?.diff,\n });\n}\n","/*\n * Formatting for the things the family shows over and over: Bitcoin\n * explorer links, shortened ids, block heights, the time to a block. No\n * React, so server code and OG renderers import it too.\n */\n\nexport type Network = 'mainnet' | 'testnet' | 'testnet4' | 'signet';\nexport type ExplorerKind = 'address' | 'tx' | 'block';\n\nconst EXPLORER = 'https://mempool.space';\n\n/** A mempool.space link for an address, a transaction, or a block (by height or hash). */\nexport function explorerUrl(kind: ExplorerKind, value: string | number, network: Network = 'mainnet'): string {\n const net = network === 'mainnet' ? '' : `/${network}`;\n return `${EXPLORER}${net}/${kind}/${encodeURIComponent(String(value))}`;\n}\n\n/** head…tail, leaving short values whole. */\nexport function shortenMiddle(value: string, head = 8, tail = 6): string {\n return value.length <= head + tail + 1 ? value : `${value.slice(0, head)}…${value.slice(-tail)}`;\n}\n\n/** 971632 → \"971,632\". */\nexport function formatBlockHeight(height: number): string {\n return Math.trunc(height).toLocaleString('en-US');\n}\n\n/**\n * How long a number of blocks takes at ten minutes each, in the largest two\n * units: \"about 40 minutes\", \"about 2 days 13 hours\". Blocks come when they\n * come, so it is always \"about\".\n */\nexport function blocksToDuration(blocks: number, minutesPerBlock = 10): string {\n const minutes = Math.max(0, Math.round(blocks * minutesPerBlock));\n if (minutes < 60) return `about ${minutes} minute${minutes === 1 ? '' : 's'}`;\n const units: [number, string][] = [\n [60 * 24 * 7, 'week'],\n [60 * 24, 'day'],\n [60, 'hour'],\n [1, 'minute'],\n ];\n const parts: string[] = [];\n let rest = minutes;\n for (const [size, word] of units) {\n const n = Math.floor(rest / size);\n if (n > 0 && parts.length < 2) {\n parts.push(`${n} ${word}${n === 1 ? '' : 's'}`);\n rest -= n * size;\n } else if (parts.length > 0) break;\n }\n return `about ${parts.join(' ')}`;\n}\n\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n/**\n * A moment in UTC, the same for every reader: \"20 Oct 2026, 09:14 UTC\".\n * Takes a Date, an ISO string, or unix seconds. `date: true` drops the time.\n */\nexport function formatUtc(at: Date | string | number, opts: { date?: boolean } = {}): string {\n const d = typeof at === 'number' ? new Date(at * 1000) : new Date(at);\n if (Number.isNaN(d.getTime())) return '—';\n const day = `${d.getUTCDate()} ${MONTHS[d.getUTCMonth()]} ${d.getUTCFullYear()}`;\n if (opts.date) return day;\n const hh = String(d.getUTCHours()).padStart(2, '0');\n const mm = String(d.getUTCMinutes()).padStart(2, '0');\n return `${day}, ${hh}:${mm} UTC`;\n}\n\n/** 482113 → \"471 KB\"; 1288490 → \"1.2 MB\". Binary steps, the way a file dialog counts. */\nexport function formatBytes(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) return '—';\n if (bytes < 1024) return `${bytes} B`;\n const units = ['KB', 'MB', 'GB', 'TB'];\n let v = bytes / 1024;\n let u = 0;\n while (v >= 1024 && u < units.length - 1) {\n v /= 1024;\n u++;\n }\n return `${v < 10 ? v.toFixed(1).replace(/\\.0$/, '') : Math.round(v)} ${units[u]}`;\n}\n","import { useContext } from 'react';\n\nimport { sharedContext } from './shared-context';\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 = sharedContext<ShellPlace>('shell-place', {});\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 { explorerUrl, shortenMiddle, type ExplorerKind, type Network } from '../format';\nimport { cn } from '../lib/cn';\nimport { useDensity } from '../lib/density';\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 /** `sm` for a tool page: tighter, a smaller figure. Defaults to the density around it. */\n size?: 'md' | 'sm';\n /**\n * The change beside the figure: `{ value: -2.4, suffix: '%' }`. Green when\n * it moves the good way (`good`, default up), red the other, quiet at 0.\n */\n delta?: { value: number; suffix?: string; good?: 'up' | 'down'; label?: string };\n className?: string;\n}\n\nfunction Delta({ value, suffix = '', good = 'up', label }: NonNullable<StatCardProps['delta']>) {\n const dir = value > 0 ? 'up' : value < 0 ? 'down' : 'flat';\n const tone = dir === 'flat' ? 'text-muted-foreground' : dir === good ? 'text-success' : 'text-destructive';\n const sign = value > 0 ? '+' : value < 0 ? '−' : '';\n return (\n <span className={cn('inline-flex items-baseline gap-1 text-[0.8125rem] font-normal tracking-normal oca-tabular', tone)}>\n <span aria-hidden>{dir === 'up' ? '↑' : dir === 'down' ? '↓' : '·'}</span>\n {sign}\n {Math.abs(value).toLocaleString('en-US', { maximumFractionDigits: 2 })}\n {suffix}\n {label ? <span className=\"text-muted-foreground\"> {label}</span> : null}\n </span>\n );\n}\n\nexport function StatCard({ label, value, hint, size, delta, className }: StatCardProps) {\n const inGrid = useContext(InStatGrid);\n const density = useDensity();\n const sm = (size ?? (density === 'compact' ? 'sm' : 'md')) === 'sm';\n return (\n <div\n data-ui=\"stat\"\n className={cn(\n 'border border-border bg-card',\n sm ? 'rounded-2xl p-4' : 'rounded-[1.25rem] 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={cn('leading-snug text-muted-foreground', sm ? 'text-[0.8125rem]' : 'text-[0.875rem]')}>{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 leading-tight tracking-[-0.02em]',\n sm ? 'text-[1.25rem]' : 'text-[1.5rem] md:text-[1.75rem]',\n inGrid && 'self-end',\n delta && 'flex flex-wrap items-baseline gap-x-2'\n )}\n >\n {value}\n {delta ? <Delta {...delta} /> : null}\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 const compact = useDensity() === 'compact';\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',\n compact ? 'gap-2.5 md:gap-3' : '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 /** After the value: what it means (\"Undervalued\", \"Above the 200-week mean\"). */\n note?: ReactNode;\n /** Colours the note, or the value when there is none. */\n tone?: ValueTone;\n}\n\n/** A reading's verdict, in words and colour: good, caution, bad, the accent, or quiet. */\nexport type ValueTone = 'good' | 'caution' | 'bad' | 'brand' | 'muted';\n\nconst TONE_TEXT: Record<ValueTone, string> = {\n good: 'text-success',\n caution: 'text-warning',\n bad: 'text-destructive',\n brand: 'text-oca-accent-ink',\n muted: 'text-muted-foreground',\n};\n\nexport function KeyValueList({\n items,\n dense,\n className,\n}: {\n items: KeyValueItem[];\n /** Tighter rows and smaller text, for a tool page. Defaults to the density around it. */\n dense?: boolean;\n className?: string;\n}) {\n const density = useDensity();\n const tight = dense ?? density === 'compact';\n return (\n // The rows go side by side when the list itself is wide enough, wherever it sits: a narrow card stacks them.\n <dl className={cn('@container divide-y divide-border border border-border bg-card', tight ? 'rounded-2xl' : 'rounded-[1.25rem]', className)}>\n {items.map((it, i) => (\n <div\n key={i}\n className={cn(\n 'flex flex-col gap-1 @md:flex-row @md:items-baseline',\n tight ? 'px-4 py-2.5 @md:gap-5' : 'px-5 py-3.5 @md:gap-6'\n )}\n >\n <dt className={cn('shrink-0 text-muted-foreground', tight ? 'text-[0.8125rem] @md:w-36' : 'text-[0.875rem] @md:w-48')}>\n {it.label}\n </dt>\n <dd\n className={cn(\n 'min-w-0 break-words',\n tight ? 'text-[0.875rem]' : 'text-[0.9375rem]',\n it.mono && (tight ? 'font-mono text-[0.8125rem]' : 'font-mono text-[0.875rem]'),\n it.tone && !it.note && TONE_TEXT[it.tone]\n )}\n >\n {it.value}\n {it.note ? (\n <span className={cn('ml-2 font-sans text-[0.8125rem]', TONE_TEXT[it.tone ?? 'muted'])}>{it.note}</span>\n ) : null}\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 dense,\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 /** Tighter rows and 14px text, for a tool page. Defaults to the density around it. */\n dense?: boolean;\n className?: string;\n}) {\n const density = useDensity();\n const tight = dense ?? density === 'compact';\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 border border-border bg-card',\n tight ? 'rounded-2xl' : 'rounded-[1.25rem]',\n phone === 'cards' && 'max-sm:hidden',\n className\n )}\n >\n <ScrollFade fade=\"var(--card)\">\n <table className={cn('w-full border-collapse text-left', tight ? 'text-[0.875rem]' : '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 text-[0.8125rem] font-medium text-muted-foreground',\n tight ? 'px-4 py-2.5' : 'px-5 py-3',\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 'align-middle',\n tight ? 'px-4 py-2' : 'px-5 py-3.5',\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(\n 'divide-y divide-border border border-border bg-card sm:hidden',\n tight ? 'rounded-2xl' : 'rounded-[1.25rem]',\n className\n )}\n >\n {rows.map((r, i) => (\n <li key={rowKey(r, i)} className={cn('flex flex-col gap-2.5 px-4', tight ? 'py-3' : '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 role,\n className,\n}: {\n tone?: NoticeTone;\n title?: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n /** Default: `alert` for danger and warning, which a screen reader announces. Text that is\n * simply part of the page (a docs callout) is a `note`. */\n role?: 'alert' | 'status' | 'note';\n className?: string;\n}) {\n const kind = NOTICE_KIND[tone];\n return (\n <div\n role={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\n/** Wipe the clipboard if it still holds `expected`, and only then. */\nasync function wipeIfUnchanged(expected: string): Promise<void> {\n try {\n if ((await navigator.clipboard.readText()) !== expected) return;\n } catch {\n // Reading needs a permission most browsers withhold; wiping does not.\n }\n try {\n await navigator.clipboard.writeText('');\n } catch {\n /* the clipboard is unavailable here */\n }\n}\n\nexport function useCopy(timeoutMs = 1600) {\n const [copied, setCopied] = useState(false);\n const t = useRef<ReturnType<typeof setTimeout> | null>(null);\n const wipe = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(\n () => () => {\n if (t.current) clearTimeout(t.current);\n },\n []\n );\n const copy = useCallback(\n async (text: string, opts: { clearAfter?: number } = {}): Promise<boolean> => {\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 if (opts.clearAfter && opts.clearAfter > 0) {\n // Outlives the component on purpose: the secret should go even if the page moves on.\n if (wipe.current) clearTimeout(wipe.current);\n wipe.current = setTimeout(() => void wipeIfUnchanged(text), opts.clearAfter);\n }\n return true;\n } catch {\n setCopied(false);\n return false;\n }\n },\n [timeoutMs]\n );\n return { copied, copy };\n}\n\nexport interface CopyButtonProps {\n /** The text, or a function that reads it at the moment of copying. */\n value: string | (() => string);\n label?: string;\n /**\n * Milliseconds after which the clipboard is wiped, if it still holds what\n * was copied (a secret, a recovery code). Unset: never.\n */\n clearAfter?: number;\n /** Called once the text is on the clipboard. */\n onCopied?: () => void;\n className?: string;\n}\n\nexport function CopyButton({ value, label = 'Copy', clearAfter, onCopied, className }: CopyButtonProps) {\n const { copied, copy } = useCopy();\n const done = copied ? (clearAfter ? `Copied. Cleared in ${Math.round(clearAfter / 1000)} seconds` : 'Copied') : '';\n return (\n <button\n type=\"button\"\n onClick={async () => {\n if (await copy(typeof value === 'function' ? value() : value, { clearAfter })) onCopied?.();\n }}\n aria-label={copied ? 'Copied' : label}\n title={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 {done}\n </span>\n </button>\n );\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. `explorer`\n * links an address, transaction or block to mempool.space.\n */\nexport function HashChip({\n value,\n head = 8,\n tail = 6,\n copy = true,\n href,\n explorer,\n network = 'mainnet',\n className,\n}: {\n value: string;\n head?: number;\n tail?: number;\n copy?: boolean;\n href?: string;\n /** What the value is, to link it on mempool.space. `href` wins when both are set. */\n explorer?: ExplorerKind;\n network?: Network;\n className?: string;\n}) {\n const shown = shortenMiddle(value, head, tail);\n const link = href ?? (explorer ? explorerUrl(explorer, value, network) : undefined);\n const offsite = !!link && /^https?:\\/\\//.test(link);\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 {link ? (\n <a\n href={link}\n {...(offsite ? { target: '_blank', rel: 'noreferrer' } : {})}\n className=\"underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\"\n >\n {text}\n {offsite ? <span className=\"sr-only\"> (opens in a new tab)</span> : null}\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 * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { useCallback, useMemo, useRef, useState, useSyncExternalStore, type ReactNode, type RefObject } from 'react';\n\nimport { grammarOf, highlight, linesToHtml, parseLineRanges, readDiff } from '../code/highlight';\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { CopyButton } from './data';\n\nconst LANG_NAME: Record<string, string> = {\n ts: 'TypeScript',\n typescript: 'TypeScript',\n tsx: 'TSX',\n js: 'JavaScript',\n javascript: 'JavaScript',\n jsx: 'JSX',\n mjs: 'JavaScript',\n json: 'JSON',\n jsonc: 'JSON',\n bash: 'Shell',\n sh: 'Shell',\n shell: 'Shell',\n zsh: 'Shell',\n console: 'Terminal',\n terminal: 'Terminal',\n python: 'Python',\n py: 'Python',\n yaml: 'YAML',\n yml: 'YAML',\n diff: 'Diff',\n text: 'Text',\n};\n\n/** \"TypeScript\" for ts, \"Shell\" for bash; the fence name itself for anything else. */\nexport function languageName(lang?: string): string | undefined {\n return lang ? (LANG_NAME[lang.toLowerCase()] ?? lang) : undefined;\n}\n\n/*\n * What a copy button puts on the clipboard: the code exactly as written,\n * final newline included, without removed lines and, for a shell transcript\n * with `$ ` prompts, only the commands, without their prompts.\n */\nfunction forClipboard(text: string, lang?: string): string {\n if (grammarOf(lang) !== 'shell') return text;\n const lines = text.split('\\n');\n if (!lines.some((l) => l.startsWith('$ '))) return text;\n return lines\n .filter((l) => l.startsWith('$ '))\n .map((l) => l.slice(2))\n .join('\\n');\n}\n\nfunction linesFromDom(pre: HTMLElement | null, newline: boolean): string | null {\n if (!pre) return null;\n const lines = pre.querySelectorAll('[data-line]');\n if (lines.length === 0) return pre.textContent ?? '';\n const text = Array.from(lines)\n .filter((l) => l.getAttribute('data-diff') !== 'remove')\n .map((l) => l.textContent ?? '')\n .join('\\n');\n return newline ? `${text}\\n` : text;\n}\n\ninterface Prepared {\n html: string;\n /** The code as a reader would copy it. */\n copy: string;\n lines: number;\n diff: boolean;\n}\n\nfunction prepare(code: string, lang: string | undefined, marks: string | readonly number[] | undefined, diff: boolean): Prepared {\n const d = diff ? readDiff(code) : null;\n const src = d ? d.code : code.replace(/\\r?\\n$/, '');\n const lines = highlight(src, lang === 'diff' ? undefined : lang);\n const kept = d ? src.split('\\n').filter((_, i) => d.diff.get(i + 1) !== 'remove') : null;\n return {\n html: linesToHtml(lines, { highlight: parseLineRanges(marks), diff: d?.diff }),\n // Byte for byte, the final newline too: a hash printed beside the code must match a copy of it.\n copy: kept ? kept.join('\\n') + (/\\n$/.test(code) ? '\\n' : '') : code,\n lines: lines.length,\n diff: !!d,\n };\n}\n\n/** The dark well: lines that scroll sideways, folding past `maxLines`. */\nfunction Well({\n preRef,\n html,\n children,\n lang,\n lines,\n maxLines,\n diff,\n lineNumbers,\n wrap,\n}: {\n preRef?: RefObject<HTMLPreElement | null>;\n html?: string;\n children?: ReactNode;\n lang?: string;\n lines: number;\n maxLines?: number;\n diff?: boolean;\n lineNumbers?: boolean;\n wrap?: boolean;\n}) {\n const foldable = maxLines !== undefined && lines > maxLines + 2;\n const [open, setOpen] = useState(false);\n const folded = foldable && !open;\n // Markup made of lines carries its own side padding, so a marked line runs edge to edge.\n const lined = html !== undefined;\n return (\n <div className=\"relative\">\n <div\n className={cn(folded && 'overflow-hidden')}\n style={folded ? { maxHeight: `calc(${maxLines} * 1.625em + 2rem)` } : undefined}\n >\n <ScrollFade fade=\"var(--oca-code-surface)\">\n <pre\n ref={preRef}\n data-diff={diff ? '' : undefined}\n data-line-numbers={lineNumbers ? '' : undefined}\n className={cn(\n 'oca-code py-4 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]',\n wrap ? 'whitespace-pre-wrap break-all' : 'w-max min-w-full',\n !lined && 'px-5'\n )}\n >\n {lined ? (\n <code className=\"block\" data-lang={lang} dangerouslySetInnerHTML={{ __html: html }} />\n ) : (\n <code className=\"block\" data-lang={lang}>\n {children}\n </code>\n )}\n </pre>\n </ScrollFade>\n </div>\n {foldable ? (\n <div\n className={cn('flex justify-center px-5 pb-4', folded && 'absolute inset-x-0 bottom-0 pt-16')}\n style={folded ? { background: 'linear-gradient(to top, var(--oca-code-surface) 40%, transparent)' } : undefined}\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\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 );\n}\n\nconst FRAME = 'overflow-hidden rounded-[1.25rem] border border-[var(--oca-code-line)] bg-[var(--oca-code-surface)]';\nconst COPY_ON_INK = 'text-oca-ink-subtle hover:bg-white/10 hover:text-white';\n\nexport interface CodeBlockProps {\n /** The source. Highlighted here, on the server too, when `lang` is one the package reads. */\n code?: string;\n /**\n * Highlighted markup made at build time (rehypeCode, highlightToHtml).\n * Trusted markup only: it is set as HTML.\n */\n html?: string;\n /** Highlighted nodes from another highlighter. */\n children?: ReactNode;\n /** With `html`: the source ended in a newline, and a copy keeps it (rehypeCode sets this). */\n trailingNewline?: boolean;\n /** The fence name: ts, tsx, json, bash, python, yaml, diff. */\n lang?: string;\n /** The file name or purpose. Defaults to the language's name, or \"Code\". */\n caption?: ReactNode;\n copy?: boolean;\n /** Wipe the clipboard this many milliseconds after a copy (a secret in code). */\n clearAfter?: number;\n /** Fold past this many lines, with a button for the rest. */\n maxLines?: number;\n /** Lines to mark, 1-based: \"2,4-6\" or [2, 4, 5, 6]. With `code`. */\n highlight?: string | readonly number[];\n /** Read `+` and `-` at the start of each line as added and removed. With `code`; `lang=\"diff\"` implies it. */\n diff?: boolean;\n /** Number the lines. */\n lineNumbers?: boolean;\n /**\n * Break long lines at any character instead of scrolling: a message to\n * sign, a 64-character id. Copying still takes the exact bytes.\n */\n wrap?: boolean;\n /** Beside the copy button: a download, a raw/pretty switch. */\n actions?: ReactNode;\n className?: string;\n}\n\n/**\n * A block of code: a header with its name and a copy button, then the code\n * on a dark well, highlighted, that scrolls sideways (with an edge that says\n * so) rather than cutting a line off. Lines can be marked, shown as a diff,\n * or numbered; the marks are drawn, so copying takes the code as written.\n * Past `maxLines` it folds.\n */\nexport function CodeBlock({\n code,\n html,\n children,\n trailingNewline = false,\n lang,\n caption,\n copy = true,\n clearAfter,\n maxLines,\n highlight: marks,\n diff,\n lineNumbers,\n wrap,\n actions,\n className,\n}: CodeBlockProps) {\n const preRef = useRef<HTMLPreElement>(null);\n const isDiff = diff || lang === 'diff';\n const markKey = typeof marks === 'string' ? marks : marks?.join(',');\n const prepared = useMemo(\n () => (html === undefined && children === undefined && code !== undefined ? prepare(code, lang, markKey, !!isDiff) : null),\n [code, html, children, lang, markKey, isDiff]\n );\n const markup = prepared?.html ?? html;\n const lines = prepared?.lines ?? (html !== undefined ? html.split('\\n').length : (code?.split('\\n').length ?? 0));\n const read = () => forClipboard(prepared?.copy ?? linesFromDom(preRef.current, trailingNewline) ?? code ?? '', lang);\n return (\n <figure className={cn(FRAME, className)}>\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 ?? languageName(lang) ?? 'Code'}</span>\n <span className=\"flex shrink-0 items-center gap-1\">\n {actions}\n {copy ? <CopyButton value={read} label=\"Copy code\" clearAfter={clearAfter} className={COPY_ON_INK} /> : null}\n </span>\n </figcaption>\n <Well\n preRef={preRef}\n html={markup}\n lang={lang}\n lines={lines}\n maxLines={maxLines}\n diff={prepared ? prepared.diff : isDiff}\n lineNumbers={lineNumbers}\n wrap={wrap}\n >\n {children}\n </Well>\n </figure>\n );\n}\n\n/* ── Tabs of code ────────────────────────────────────────────────────── */\n\nconst tabListeners = new Map<string, Set<() => void>>();\nconst tabMemory = new Map<string, string>();\nconst storeKey = (k: string) => `oca-code-tab:${k}`;\n\nfunction readTab(key: string): string | null {\n if (tabMemory.has(key)) return tabMemory.get(key)!;\n try {\n return window.localStorage.getItem(storeKey(key));\n } catch {\n return null;\n }\n}\n\nfunction writeTab(key: string, value: string) {\n tabMemory.set(key, value);\n try {\n window.localStorage.setItem(storeKey(key), value);\n } catch {\n /* private mode: the choice lasts for this page */\n }\n tabListeners.get(key)?.forEach((l) => l());\n}\n\n/** One choice shared by every CodeTabs with the same key, remembered in this browser. */\nfunction useSyncedTab(key: string | undefined): [string | null, (v: string) => void] {\n const subscribe = useCallback(\n (cb: () => void) => {\n if (!key) return () => {};\n const set = tabListeners.get(key) ?? new Set();\n set.add(cb);\n tabListeners.set(key, set);\n return () => {\n set.delete(cb);\n };\n },\n [key]\n );\n const value = useSyncExternalStore(\n subscribe,\n () => (key ? readTab(key) : null),\n () => null\n );\n return [value, (v: string) => key && writeTab(key, v)];\n}\n\nexport interface CodeTab {\n /** The tab's name, and what `syncKey` remembers: \"npm\", \"curl\", \"Python\". */\n label: string;\n code: string;\n lang?: string;\n}\n\n/**\n * The same thing in several forms (npm, yarn, pnpm; curl, Node, Python) in\n * one well, with tabs in its header and a copy button for the one shown.\n * Give every set the same `syncKey` and choosing \"pnpm\" once switches them\n * all, on this page and the next.\n */\nexport function CodeTabs({\n items,\n syncKey,\n defaultValue,\n maxLines,\n className,\n}: {\n items: CodeTab[];\n syncKey?: string;\n /** The label shown first. Default: the first item. */\n defaultValue?: string;\n maxLines?: number;\n className?: string;\n}) {\n const [synced, setSynced] = useSyncedTab(syncKey);\n const [local, setLocal] = useState<string | null>(null);\n const labels = items.map((it) => it.label);\n const pick = [local, synced, defaultValue].find((v): v is string => !!v && labels.includes(v)) ?? labels[0] ?? '';\n const active = items.find((it) => it.label === pick);\n const prepared = useMemo(() => items.map((it) => prepare(it.code, it.lang, undefined, it.lang === 'diff')), [items]);\n return (\n <TabsPrimitive.Root\n value={pick}\n onValueChange={(v) => {\n setLocal(v);\n setSynced(v);\n }}\n className={cn(FRAME, className)}\n >\n <div className=\"flex h-11 items-center justify-between gap-3 border-b border-[var(--oca-code-line)] pl-2 pr-2\">\n <ScrollFade fade=\"var(--oca-code-surface)\" className=\"min-w-0 flex-1\">\n <TabsPrimitive.List aria-label=\"Versions\" className=\"flex w-max items-center gap-0.5\">\n {items.map((it) => (\n <TabsPrimitive.Trigger\n key={it.label}\n value={it.label}\n className={cn(\n 'relative inline-flex h-11 items-center whitespace-nowrap px-3 text-[0.8125rem] text-oca-ink-subtle outline-none transition-colors',\n 'hover:text-white focus-visible:text-white focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n 'data-[state=active]:text-white',\n 'after:absolute after:inset-x-3 after:bottom-0 after:h-0.5 after:rounded-full after:bg-transparent data-[state=active]:after:bg-oca-orange'\n )}\n >\n {it.label}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n </ScrollFade>\n {active ? (\n <CopyButton\n value={() => forClipboard(prepared[items.indexOf(active)]?.copy ?? active.code, active.lang)}\n label={`Copy ${active.label}`}\n className={COPY_ON_INK}\n />\n ) : null}\n </div>\n {items.map((it, i) => (\n <TabsPrimitive.Content key={it.label} value={it.label} className=\"outline-none\" tabIndex={-1}>\n <Well\n html={prepared[i]!.html}\n lang={it.lang}\n lines={prepared[i]!.lines}\n maxLines={maxLines}\n diff={prepared[i]!.diff}\n />\n </TabsPrimitive.Content>\n ))}\n </TabsPrimitive.Root>\n );\n}\n\n/** `npm install`, `yarn add` and `pnpm add` for a package, in one remembered set of tabs. */\nexport function InstallTabs({ pkg, dev = false, className }: { pkg: string; dev?: boolean; className?: string }) {\n const items: CodeTab[] = [\n { label: 'npm', code: `npm install ${dev ? '--save-dev ' : ''}${pkg}`, lang: 'bash' },\n { label: 'yarn', code: `yarn add ${dev ? '--dev ' : ''}${pkg}`, lang: 'bash' },\n { label: 'pnpm', code: `pnpm add ${dev ? '--save-dev ' : ''}${pkg}`, lang: 'bash' },\n ];\n return <CodeTabs items={items} syncKey=\"package-manager\" className={className} />;\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","/*\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 // Signs in with an orangecheck account and a wallet; uses none of the six directly.\n protocols: [],\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 * The same row for a product that hosts its own documents (ochk.app, vault):\n * ochk.io's cover the free protocols, not a product that holds money, so its\n * privacy, terms, security and contact pages are its own. The trademarks are\n * the company's, on ochk.io.\n */\nexport const SELF_HOSTED_LEGAL_LINKS: readonly NavItem[] = [\n { href: '/privacy', label: 'Privacy' },\n { href: '/terms', label: 'Terms' },\n { href: '/security', label: 'Security' },\n { href: `${OCHK_IO}/trademark`, label: 'Trademarks' },\n { href: '/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 { useContext } from 'react';\n\nimport { sharedContext } from './shared-context';\n\n/** Set by ToolShell: where \"home\" is on a tool site, the protocol's page on ochk.io. Its own `/` redirects off-site. */\nexport const SiteHomeContext = sharedContext<string | undefined>('site-home', undefined);\n\nexport function useSiteHome(): string | undefined {\n return useContext(SiteHomeContext);\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { MarkOutline } from '../brand/mark';\nimport { OCHK_IO, protocolSite, type ProtocolSlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { useSiteHome } from '../lib/site-home';\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 protocol,\n art,\n className,\n}: {\n code?: number;\n title?: ReactNode;\n detail?: ReactNode;\n /** Replaces the default ways on. */\n actions?: ReactNode;\n /** Where \"Go home\" goes. Default: the protocol's page on ochk.io (inside a ToolShell, its protocol), else ochk.io. */\n home?: string;\n /** The protocol this site serves, when it is not inside a ToolShell. */\n protocol?: ProtocolSlug;\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 shellHome = useSiteHome();\n const homeHref = home ?? (protocol ? protocolSite(protocol).pageHref : (shellHome ?? OCHK_IO));\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={homeHref}>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 { Check, Lock } from 'lucide-react';\nimport { useSyncExternalStore, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Badge } from '../primitives/badge';\n\n/*\n * Parts the family's apps share: the ring a one-time code counts down on, a\n * plan's card, and the preview of what a sign-in or a plan unlocks.\n */\n\n/* ── CountdownRing ───────────────────────────────────────────────────── */\n\nfunction onSecond(tick: () => void) {\n const id = setInterval(tick, 1000);\n return () => clearInterval(id);\n}\nconst nowSeconds = () => Math.floor(Date.now() / 1000);\n\n/**\n * Seconds left in a cycle, as a ring that empties and the number beside it,\n * red for the last few. Given only `period` it follows the clock in windows\n * aligned to the epoch, as a TOTP code does; pass `remaining` to drive it.\n * The server draws the full ring with no number, so hydration matches.\n */\nexport function CountdownRing({\n period,\n remaining,\n warnAt = 5,\n size = 18,\n showSeconds = true,\n className,\n}: {\n /** Seconds in one cycle: 30 for most TOTP codes. */\n period: number;\n /** Seconds left. Default: from the clock. */\n remaining?: number;\n /** From here down it turns red. */\n warnAt?: number;\n /** The ring's diameter, in pixels. */\n size?: number;\n /** The \"12s\" beside the ring. */\n showSeconds?: boolean;\n className?: string;\n}) {\n const now = useSyncExternalStore(onSecond, nowSeconds, () => null);\n const left = remaining ?? (now === null ? null : period - (now % period));\n const share = left === null ? 1 : Math.max(0, Math.min(1, left / period));\n const warn = left !== null && left <= warnAt;\n const r = size / 2 - 1.5;\n const c = 2 * Math.PI * r;\n return (\n <span\n role=\"timer\"\n aria-label={left === null ? undefined : `${left} second${left === 1 ? '' : 's'} left`}\n className={cn('inline-flex items-center gap-1.5', warn ? 'text-destructive' : 'text-muted-foreground', className)}\n >\n <svg aria-hidden width={size} height={size} viewBox={`0 0 ${size} ${size}`} className=\"-rotate-90\">\n <circle cx={size / 2} cy={size / 2} r={r} fill=\"none\" stroke=\"var(--border)\" strokeWidth={2} />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeDasharray={c}\n strokeDashoffset={c * (1 - share)}\n // A new cycle refills at once rather than winding back over a second.\n className={cn(left !== null && left < period && 'transition-[stroke-dashoffset] duration-1000 ease-linear motion-reduce:transition-none')}\n />\n </svg>\n {showSeconds && left !== null ? <span className=\"text-[0.8125rem] oca-tabular\">{left}s</span> : null}\n </span>\n );\n}\n\n/* ── PlanCard ────────────────────────────────────────────────────────── */\n\n/**\n * One plan, for a pricing grid: its name and line, the price and what it is\n * per, what it includes, and the way to take it. `highlight` is the one the\n * page argues for; `badge` names a state (\"Your plan\", \"Recommended\").\n * Lay four out with `grid gap-4 sm:grid-cols-2 lg:grid-cols-4`; compare them\n * row by row in a ComparisonTable.\n */\nexport function PlanCard({\n name,\n subtitle,\n price,\n period,\n footnote,\n features = [],\n action,\n badge,\n badgeTone = 'neutral',\n highlight = false,\n className,\n}: {\n name: ReactNode;\n /** One line: who it is for. */\n subtitle?: ReactNode;\n /** The figure: <Sats value={…} />, \"Free\". */\n price: ReactNode;\n /** What the price is for: \"a month\", \"once\". */\n period?: ReactNode;\n /** Under the price: \"≈ $12\", \"billed yearly\". */\n footnote?: ReactNode;\n features?: ReactNode[];\n /** At the foot: the button. */\n action?: ReactNode;\n badge?: ReactNode;\n badgeTone?: 'neutral' | 'brand' | 'success' | 'muted';\n highlight?: boolean;\n className?: string;\n}) {\n return (\n <section\n className={cn(\n 'flex h-full flex-col gap-5 rounded-[1.25rem] border bg-card p-6',\n highlight ? 'border-foreground shadow-sm ring-1 ring-foreground' : 'border-border',\n className\n )}\n >\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-start justify-between gap-3\">\n <h3 className=\"text-[1.0625rem] font-medium leading-snug\">{name}</h3>\n {badge ? <Badge tone={badgeTone}>{badge}</Badge> : null}\n </div>\n {subtitle ? <p className=\"text-[0.875rem] leading-snug text-muted-foreground\">{subtitle}</p> : null}\n </div>\n <div className=\"flex flex-col gap-1\">\n <p className=\"flex flex-wrap items-baseline gap-x-1.5\">\n <span className=\"oca-display-3 oca-tabular\">{price}</span>\n {period ? <span className=\"text-[0.9375rem] text-muted-foreground\">{period}</span> : null}\n </p>\n {footnote ? <p className=\"text-[0.8125rem] text-muted-foreground\">{footnote}</p> : null}\n </div>\n {features.length > 0 ? (\n <ul className=\"flex flex-col gap-2.5 text-[0.9375rem]\">\n {features.map((f, i) => (\n <li key={i} className=\"flex items-start gap-2.5\">\n <Check aria-hidden className=\"mt-1 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0\">{f}</span>\n </li>\n ))}\n </ul>\n ) : null}\n {action ? <div className=\"mt-auto flex flex-col pt-1 [&>*]:w-full\">{action}</div> : null}\n </section>\n );\n}\n\n/* ── LockedPreview ───────────────────────────────────────────────────── */\n\n/**\n * What a sign-in or a plan unlocks: a real sample of it, faded, out of reach\n * of the pointer, the keyboard and a screen reader, with the way in over its\n * foot. With no sample, the card alone.\n */\nexport function LockedPreview({\n title,\n description,\n action,\n children,\n className,\n}: {\n /** What opens: \"Your watchlist\". */\n title: ReactNode;\n /** One line: what it takes (\"Sign in. It's free.\"). */\n description?: ReactNode;\n /** The way in: a button or a link. */\n action: ReactNode;\n /** The sample, drawn as it would be. */\n children?: ReactNode;\n className?: string;\n}) {\n return (\n <div className={cn('relative', className)}>\n {children ? (\n <div\n inert\n aria-hidden\n data-oca-locked=\"\"\n className=\"pointer-events-none max-h-[28rem] select-none overflow-hidden [mask-image:linear-gradient(to_bottom,#000_25%,transparent_85%)]\"\n >\n {children}\n </div>\n ) : null}\n <div className={cn('relative mx-auto flex max-w-md flex-col items-center gap-4 rounded-[1.25rem] border border-border bg-card px-6 py-7 text-center shadow-sm', children && '-mt-40')}>\n <span aria-hidden className=\"flex size-10 items-center justify-center rounded-full bg-muted text-foreground\">\n <Lock className=\"size-[1.125rem]\" />\n </span>\n <div className=\"flex flex-col gap-1.5\">\n <p className=\"text-[1.0625rem] font-medium leading-snug\">{title}</p>\n {description ? <p className=\"text-[0.9375rem] leading-snug text-muted-foreground\">{description}</p> : null}\n </div>\n <div className=\"flex flex-wrap justify-center gap-2\">{action}</div>\n </div>\n </div>\n );\n}\n","import { Info, Maximize2 } from 'lucide-react';\nimport { useId, useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../primitives/overlay';\n\n/*\n * Numbers and where they come from: a panel that opens to the full window,\n * the note that names a figure's source, the card that floats over a canvas,\n * and the parts of a hand-drawn chart. The series colours are tokens\n * (--oca-chart-1…4, -neutral, -up, -down, -grid); a chart library is not.\n */\n\n/* ── Chart colours and chrome ────────────────────────────────────────── */\n\nexport type ChartTone = 1 | 2 | 3 | 4 | 'neutral' | 'up' | 'down';\n\n/** The CSS colour for a series: `chartColor(0)` is orange, and indexes past four cycle. */\nexport function chartColor(series: number | ChartTone): string {\n if (typeof series === 'string') return `var(--oca-chart-${series})`;\n const n = series >= 1 && series <= 4 && Number.isInteger(series) ? series : (((series % 4) + 4) % 4) + 1;\n return `var(--oca-chart-${n})`;\n}\n\nexport interface LegendItem {\n label: ReactNode;\n /** A series number (1–4), neutral, up or down, or any CSS colour. */\n color: ChartTone | string;\n /** A dashed line in the chart: the swatch is dashed too. */\n dashed?: boolean;\n}\n\n/**\n * The frame for a chart drawn by hand in SVG: a legend above, the chart, a\n * caption. Inside it the chart takes the system's chrome by class:\n * `oca-chart-tick` (axis labels), `oca-chart-grid`, `oca-chart-axis`,\n * `oca-chart-zero`, `oca-chart-crosshair`, `oca-chart-marker`; a hover\n * card takes `oca-chart-tooltip`. Colour series with `chartColor(i)`.\n */\nexport function ChartFrame({\n legend,\n caption,\n children,\n className,\n}: {\n legend?: LegendItem[];\n /** Under the chart: what it shows, its window. A SourceNote fits here. */\n caption?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <figure className={cn('oca-chart flex min-w-0 flex-col gap-3', className)}>\n {legend && legend.length > 0 ? (\n <ul className=\"oca-chart-legend\" aria-label=\"Legend\">\n {legend.map((l, i) => {\n const c = typeof l.color === 'number' || ['neutral', 'up', 'down'].includes(String(l.color)) ? chartColor(l.color as ChartTone) : String(l.color);\n return (\n <li key={i}>\n <span aria-hidden data-swatch={l.dashed ? 'dashed' : ''} style={{ '--swatch': c } as CSSProperties} />\n {l.label}\n </li>\n );\n })}\n </ul>\n ) : null}\n <div className=\"relative min-w-0\">{children}</div>\n {caption ? <figcaption className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{caption}</figcaption> : null}\n </figure>\n );\n}\n\n/**\n * A small line for a trend, drawn from its numbers: no axes, no labels. It\n * stretches to its box (give it a width with `className`), and its name for\n * a screen reader says what it shows. `tone=\"trend\"` colours it up or down\n * by its last value against its first.\n */\nexport function Sparkline({\n values,\n label,\n tone = 'ink',\n area = false,\n width = 96,\n height = 24,\n className,\n}: {\n values: readonly number[];\n /** What it shows, read in place of the picture: \"Sign-ups per day, 30 days, 12 to 40\". */\n label: string;\n tone?: 'ink' | 'muted' | 'trend' | ChartTone;\n /** Fill under the line. */\n area?: boolean;\n width?: number;\n height?: number;\n className?: string;\n}) {\n const gradient = useId().replace(/[^a-zA-Z0-9]/g, '');\n const pts = values.filter((v) => Number.isFinite(v));\n const lo = Math.min(...pts);\n const hi = Math.max(...pts);\n const span = hi - lo || 1;\n const pad = 1.5;\n const x = (i: number) => (pts.length < 2 ? width / 2 : (i / (pts.length - 1)) * width);\n const y = (v: number) => pad + (1 - (v - lo) / span) * (height - pad * 2);\n const line = pts.map((v, i) => `${i === 0 ? 'M' : 'L'}${x(i).toFixed(2)},${y(v).toFixed(2)}`).join(' ');\n const color =\n tone === 'ink'\n ? 'var(--foreground)'\n : tone === 'muted'\n ? 'var(--muted-foreground)'\n : tone === 'trend'\n ? chartColor(pts.length > 1 && pts[pts.length - 1]! < pts[0]! ? 'down' : 'up')\n : chartColor(tone);\n return (\n <svg\n role=\"img\"\n aria-label={label}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n width={width}\n height={height}\n className={cn('block overflow-visible', className)}\n style={{ color }}\n >\n {pts.length > 0 ? (\n <>\n {area ? (\n <>\n <defs>\n <linearGradient id={gradient} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" stopColor=\"currentColor\" stopOpacity={0.22} />\n <stop offset=\"1\" stopColor=\"currentColor\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <path d={`${line} L${x(pts.length - 1).toFixed(2)},${height} L${x(0).toFixed(2)},${height} Z`} fill={`url(#${gradient})`} />\n </>\n ) : null}\n <path d={line} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinejoin=\"round\" strokeLinecap=\"round\" vectorEffect=\"non-scaling-stroke\" />\n </>\n ) : null}\n </svg>\n );\n}\n\n/* ── Where a number comes from ───────────────────────────────────────── */\n\nexport interface SourceNoteProps {\n /** Who: \"mempool.space\", \"Bitnodes\". */\n source: ReactNode;\n /** Its page or endpoint, linked. */\n href?: string;\n /** How it is read: the endpoint, the method, how to reproduce it. */\n detail?: ReactNode;\n /** When: \"Updated 2 min ago\", \"Every block\". */\n updated?: ReactNode;\n /**\n * `popover`: a small \"Source\" button that opens the note. `line`: the\n * note as one line of fine print, for a place a popover cannot open over\n * (a canvas in full screen) or a footer.\n */\n variant?: 'popover' | 'line';\n className?: string;\n}\n\n/** \"Where this number comes from\": the source named and linked, one press away (or always in view). */\nexport function SourceNote({ source, href, detail, updated, variant = 'popover', className }: SourceNoteProps) {\n const name = href ? (\n <a href={href} className=\"text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\" rel=\"noreferrer\" target=\"_blank\">\n {source}\n <span className=\"sr-only\"> (opens in a new tab)</span>\n </a>\n ) : (\n <span className=\"text-foreground\">{source}</span>\n );\n if (variant === 'line') {\n return (\n <p className={cn('text-[0.75rem] leading-snug text-muted-foreground', className)}>\n Source: {name}\n {updated ? <> · {updated}</> : null}\n </p>\n );\n }\n return (\n <Popover>\n <PopoverTrigger\n className={cn(\n 'inline-flex h-7 items-center gap-1 rounded-full px-2 text-[0.75rem] text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n <Info aria-hidden className=\"size-3.5\" />\n Source\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"flex w-[min(calc(100vw-2rem),20rem)] flex-col gap-2 p-4 text-[0.875rem]\">\n <p className=\"text-[0.75rem] text-muted-foreground\">Where this number comes from</p>\n <p className=\"font-medium\">{name}</p>\n {detail ? <div className=\"text-[0.8125rem] leading-snug text-muted-foreground [&_code]:font-mono\">{detail}</div> : null}\n {updated ? <p className=\"text-[0.8125rem] text-muted-foreground\">{updated}</p> : null}\n </PopoverContent>\n </Popover>\n );\n}\n\n/* ── Panel ───────────────────────────────────────────────────────────── */\n\n/**\n * A titled panel for a chart or a table: its title and one line, actions on\n * the right, the body, and its source at the foot. `expandable` adds a\n * button that opens the same body over the full window (Esc closes it). Give\n * `children` as a function to draw it bigger there: `(expanded) => <Chart\n * height={expanded ? 520 : 240} />`.\n */\nexport function Panel({\n title,\n description,\n actions,\n source,\n expandable = false,\n children,\n className,\n}: {\n title: ReactNode;\n description?: ReactNode;\n /** Beside the title: a range switch, a menu. */\n actions?: ReactNode;\n /** At the foot: a SourceNote. */\n source?: ReactNode;\n expandable?: boolean;\n children: ReactNode | ((expanded: boolean) => ReactNode);\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n const body = (expanded: boolean) => (typeof children === 'function' ? children(expanded) : children);\n const head = (expanded: boolean) => (\n <header className=\"flex flex-wrap items-start justify-between gap-x-4 gap-y-2\">\n <div className=\"flex min-w-0 flex-col gap-1\">\n {expanded ? (\n <DialogTitle className=\"text-[1.0625rem] font-medium leading-snug\">{title}</DialogTitle>\n ) : (\n <h3 className=\"text-[1rem] font-medium leading-snug\">{title}</h3>\n )}\n {description ? (\n expanded ? (\n <DialogDescription className=\"text-[0.875rem] leading-snug text-muted-foreground\">{description}</DialogDescription>\n ) : (\n <p className=\"text-[0.875rem] leading-snug text-muted-foreground\">{description}</p>\n )\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {actions}\n {expandable && !expanded ? (\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n aria-label=\"Open full screen\"\n className=\"inline-flex size-8 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n >\n <Maximize2 aria-hidden className=\"size-4\" />\n </button>\n ) : null}\n </div>\n </header>\n );\n return (\n <section className={cn('flex min-w-0 flex-col gap-4 rounded-[1.25rem] border border-border bg-card p-5 md:p-6', className)}>\n {head(false)}\n <div className=\"min-w-0\">{body(false)}</div>\n {source ? <div className=\"-mb-1 border-t border-border pt-3\">{source}</div> : null}\n {expandable ? (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent\n {...(description ? {} : { 'aria-describedby': undefined })}\n className=\"flex h-[min(92dvh,56rem)] w-[min(96vw,80rem)] max-w-none flex-col gap-4 overflow-y-auto\"\n >\n {head(true)}\n <div className=\"min-h-0 min-w-0 flex-1\">{open ? body(true) : null}</div>\n {source ? <div className=\"border-t border-border pt-3\">{source}</div> : null}\n </DialogContent>\n </Dialog>\n ) : null}\n </section>\n );\n}\n\n/* ── HudCard ─────────────────────────────────────────────────────────── */\n\n/**\n * A card that floats over a canvas (a globe, a map): translucent, blurred\n * behind, its eyebrow with a live dot, a headline, rows and a footnote. The\n * canvas sets where it sits. Text stays on the card's own background, so it\n * reads whatever the scene draws behind it.\n */\nexport function HudCard({\n eyebrow,\n live = false,\n title,\n children,\n footer,\n className,\n}: {\n /** Small, above: \"Next block\", \"Fees\". */\n eyebrow?: ReactNode;\n /** A pulsing dot beside the eyebrow: the figure updates by itself. */\n live?: boolean;\n /** The headline figure. */\n title?: ReactNode;\n children?: ReactNode;\n /** Under a rule: a SourceNote variant=\"line\". */\n footer?: ReactNode;\n className?: string;\n}) {\n return (\n <div\n data-oca-hud=\"\"\n className={cn(\n 'flex w-60 max-w-[calc(100vw-2rem)] flex-col gap-2 rounded-xl border border-border bg-background/85 p-3 text-[0.8125rem] shadow-sm backdrop-blur-md',\n className\n )}\n >\n {eyebrow ? (\n <p className=\"flex items-center gap-1.5 text-[0.75rem] text-muted-foreground\">\n {live ? <span aria-hidden className=\"size-1.5 rounded-full bg-oca-orange-deep motion-safe:animate-pulse\" /> : null}\n {eyebrow}\n </p>\n ) : null}\n {title ? <p className=\"text-[1.125rem] font-medium leading-tight oca-tabular\">{title}</p> : null}\n {children}\n {footer ? <div className=\"border-t border-border pt-2\">{footer}</div> : null}\n </div>\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 { useRouter } from 'next/compat/router';\nimport 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\nconst SCHEME = /^[a-z][a-z\\d+.-]*:/i;\n\n/**\n * `../README` or `VerifyOk`, as generated pages write them, against the page\n * it is on: `/sdk/stamp-core/README`. The router adds the base path. Outside\n * a router it stays as written.\n */\nfunction useResolved(href: string): string {\n const router = useRouter();\n if (!router || !href || href.startsWith('/') || href.startsWith('#') || href.startsWith('?') || SCHEME.test(href)) return href;\n const here = router.asPath.split(/[?#]/)[0] || '/';\n const url = new URL(href, `https://page.invalid${here}`);\n return url.pathname + url.search + url.hash;\n}\n\n/**\n * A link in running text. A page of this site goes through the router, a\n * relative one (`../README`) resolved against the page; an API or a\n * /.well-known file is a plain anchor (the router would try to render it);\n * another site opens in a new tab, and says so to a screen reader.\n */\nexport function TextLink({\n href: written,\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 href = useResolved(written);\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","import { useContext } from 'react';\n\nimport { sharedContext } from './shared-context';\n\n/** Set by DocsShell: inside the docs, a link to the docs is a page of this site, through the router. */\nexport const InDocsContext = sharedContext<boolean>('in-docs', false);\n\nexport function useInDocs(): boolean {\n return useContext(InDocsContext);\n}\n","import { ArrowRight, ArrowUpRight } from 'lucide-react';\nimport Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport {\n DOCS_HREF,\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 { useInDocs } from '../lib/docs-context';\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, its tools, or its docs.\n */\nexport function ProtocolGrid({\n protocols = PROTOCOL_ORDER,\n link = 'page',\n className,\n}: {\n protocols?: readonly ProtocolSlug[];\n link?: 'page' | 'tool' | 'docs';\n className?: string;\n}) {\n // Inside the docs, their pages are this site's: through the router, under its base path.\n const inDocs = useInDocs();\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 {link === 'docs' && inDocs ? (\n <Link href={`/${p.slug}`} className={STRETCH}>\n {p.label}\n </Link>\n ) : (\n <a\n href={link === 'tool' ? p.toolHref : link === 'docs' ? `${DOCS_HREF}/${p.slug}` : p.pageHref}\n className={STRETCH}\n >\n {p.label}\n </a>\n )}\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 {/* A tool is another site; a page or the docs are on ochk.io. */}\n {link === 'tool' ? (\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 ) : (\n <ArrowRight\n aria-hidden\n className=\"size-4 transition-transform duration-200 group-hover:translate-x-0.5 group-hover:text-foreground\"\n />\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 { ArrowLeft, ArrowRight, ArrowUpRight, ChevronRight } from 'lucide-react';\nimport Link from 'next/link';\nimport {\n Children,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type RefObject,\n type TableHTMLAttributes,\n} from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Badge } from '../primitives/badge';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { Skeleton } from '../primitives/feedback';\nimport { StatusBadge, type Status } from '../primitives/status-badge';\nimport { CodeBlock } from './code-block';\nimport { Notice } from './data';\nimport { useActiveHeading, type TocItem } from './hero';\n\n/*\n * The parts of a docs page: where you are (Breadcrumbs), where to go next\n * (DocsPager), what is on this page (OnThisPage), and the blocks MDX writes\n * with (Callout, Steps, LinkCard, ApiTable, MdxTable, Diagram). DocsShell\n * (chrome) puts them in place; mdxComponents (./mdx) maps markdown onto them.\n */\n\nconst isInternal = (href: string) => href.startsWith('/') || href.startsWith('#');\n\n/** A router link for this site's pages, a plain anchor for another site. */\nfunction DocLink({ href, className, children, ...rest }: { href: string; className?: string; children: ReactNode; 'aria-label'?: string }) {\n return isInternal(href) ? (\n <Link href={href} className={className} {...rest}>\n {children}\n </Link>\n ) : (\n <a href={href} className={className} {...rest}>\n {children}\n </a>\n );\n}\n\n/* ── Breadcrumbs ─────────────────────────────────────────────────────── */\n\nexport interface Crumb {\n label: ReactNode;\n /** Omit for the page you are on. */\n href?: string;\n}\n\n/** Where this page sits: docs › section › page, with room on the right for \"View source\". */\nexport function Breadcrumbs({ items, action, className }: { items: Crumb[]; action?: ReactNode; className?: string }) {\n return (\n <div className={cn('flex min-h-11 items-center justify-between gap-4 sm:min-h-0', className)}>\n <nav aria-label=\"Breadcrumb\" className=\"min-w-0\">\n <ol className=\"flex min-w-0 items-center gap-1.5 text-[0.875rem] text-muted-foreground\">\n {items.map((c, i) => {\n const last = i === items.length - 1;\n return (\n <li key={i} className={cn('flex items-center gap-1.5', last ? 'min-w-0' : 'shrink-0')}>\n {c.href && !last ? (\n <DocLink href={c.href} className=\"inline-flex min-h-11 items-center transition-colors hover:text-foreground sm:min-h-0\">\n {c.label}\n </DocLink>\n ) : (\n <span aria-current={last ? 'page' : undefined} className={cn('truncate', last && 'text-foreground')}>\n {c.label}\n </span>\n )}\n {!last ? <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-oca-subtle\" /> : null}\n </li>\n );\n })}\n </ol>\n </nav>\n {action ? <div className=\"shrink-0 text-[0.875rem]\">{action}</div> : null}\n </div>\n );\n}\n\n/* ── Previous / next ─────────────────────────────────────────────────── */\n\nexport interface PagerLink {\n href: string;\n label: ReactNode;\n /** The section it is in, when that differs from this page's. */\n section?: ReactNode;\n}\n\n/** The page before and after this one, as two cards at the foot of the page. */\nexport function DocsPager({ prev, next, className }: { prev?: PagerLink; next?: PagerLink; className?: string }) {\n if (!prev && !next) return null;\n const card = (l: PagerLink, dir: 'prev' | 'next') => (\n <DocLink\n href={l.href}\n className={cn(\n 'group flex min-h-20 flex-col justify-center gap-1 rounded-2xl border border-border bg-card px-5 py-4 transition-colors hover:border-oca-hairline-strong',\n dir === 'next' && 'items-end text-right sm:col-start-2'\n )}\n >\n <span className=\"flex items-center gap-1.5 text-[0.8125rem] text-muted-foreground\">\n {dir === 'prev' ? <ArrowLeft aria-hidden className=\"size-3.5\" /> : null}\n {dir === 'prev' ? 'Previous' : 'Next'}\n {l.section ? <span aria-hidden>·</span> : null}\n {l.section ? <span className=\"truncate\">{l.section}</span> : null}\n {dir === 'next' ? <ArrowRight aria-hidden className=\"size-3.5\" /> : null}\n </span>\n <span className=\"text-[1rem] font-medium leading-snug text-foreground\">{l.label}</span>\n </DocLink>\n );\n return (\n <nav aria-label=\"Previous and next page\" className={cn('grid grid-cols-1 gap-3 border-t border-border pt-8 sm:grid-cols-2', className)}>\n {prev ? card(prev, 'prev') : null}\n {next ? card(next, 'next') : null}\n </nav>\n );\n}\n\n/* ── On this page ────────────────────────────────────────────────────── */\n\n/**\n * The page's h2s and h3s with ids, read from the rendered page. `key` (the\n * path) reads them again after a client-side move to another page.\n */\nexport function useHeadings(selector = '#docs-content', key?: string): { items: TocItem[]; activeId?: string } {\n const [items, setItems] = useState<TocItem[]>([]);\n useEffect(() => {\n const read = () => {\n const root = document.querySelector(selector);\n if (!root) return setItems([]);\n setItems(\n Array.from(root.querySelectorAll<HTMLHeadingElement>('h2[id], h3[id]')).map((h) => ({\n id: h.id,\n // The anchor link's \"#\" is not part of the name.\n label: (h.querySelector('[data-heading-text]') ?? h).textContent?.trim() ?? '',\n level: h.tagName === 'H3' ? 3 : 2,\n }))\n );\n };\n // Once after paint, once more for late layout (fonts, images).\n const raf = requestAnimationFrame(read);\n const t = setTimeout(read, 80);\n return () => {\n cancelAnimationFrame(raf);\n clearTimeout(t);\n };\n }, [selector, key]);\n const activeId = useActiveHeading(items.map((i) => i.id));\n return { items, activeId };\n}\n\n/** The list of a page's sections, the one being read marked. h3s sit in under their h2. */\nexport function OnThisPage({\n items,\n activeId,\n title = 'On this page',\n onNavigate,\n className,\n}: {\n items: TocItem[];\n activeId?: string;\n /** `null` for no visible title. */\n title?: ReactNode;\n onNavigate?: () => void;\n className?: string;\n}) {\n const id = useId();\n if (items.length === 0) return null;\n return (\n // With no visible title (a folded list under its own summary) the name is still \"On this page\".\n <nav aria-labelledby={title ? id : undefined} aria-label={title ? undefined : 'On this page'} className={className}>\n {title ? (\n <p id={id} className=\"mb-3 text-[0.875rem] font-medium\">\n {title}\n </p>\n ) : null}\n <ul>\n {items.map((t) => {\n const on = t.id === activeId;\n return (\n <li key={t.id}>\n <a\n href={`#${t.id}`}\n onClick={onNavigate}\n aria-current={on ? 'location' : undefined}\n className={cn(\n 'block border-l py-1.5 text-[0.875rem] leading-snug transition-colors',\n t.level === 3 ? 'pl-7' : 'pl-4',\n on ? 'border-foreground text-foreground' : 'border-border text-muted-foreground hover:text-foreground'\n )}\n >\n {t.label}\n </a>\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n\n/* ── Blocks MDX writes with ──────────────────────────────────────────── */\n\nconst CALLOUT_TONE = { note: 'neutral', warning: 'brand', danger: 'danger' } as const;\n\n/**\n * A note set apart from the text: `note` (the default), `warning` for\n * something that costs you if missed, `danger` for something that breaks.\n * It is part of the page, so it is a note to a screen reader, never an alert.\n */\nexport function Callout({\n tone = 'note',\n title,\n children,\n className,\n}: {\n tone?: keyof typeof CALLOUT_TONE;\n title?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n return (\n <Notice\n tone={CALLOUT_TONE[tone]}\n title={title}\n role=\"note\"\n // Markdown paragraphs inside take the note's size, not the page's.\n className={cn('my-6 [&_p]:my-0 [&_p]:text-[0.9375rem] [&_p]:leading-relaxed [&_p+p]:mt-3', className)}\n >\n {children}\n </Notice>\n );\n}\n\n/** One step of a guide: a title and whatever it takes (text, code). */\nexport function Step({ title, id, children }: { title: ReactNode; id?: string; children?: ReactNode }) {\n return (\n <li className=\"relative pb-8 pl-11 last:pb-0 [counter-increment:oca-step]\">\n {/* The number, and the line down to the next one. */}\n <span\n aria-hidden\n className=\"absolute left-0 top-0 flex size-7 items-center justify-center rounded-full border border-oca-hairline-strong bg-card text-[0.8125rem] oca-tabular text-foreground before:content-[counter(oca-step)]\"\n />\n <span aria-hidden className=\"absolute bottom-1 left-[0.8125rem] top-9 w-px bg-border\" />\n <h3 id={id} className=\"scroll-mt-28 pt-0.5 text-[1.0625rem] font-medium leading-snug tracking-[-0.008em] text-foreground\">\n {title}\n </h3>\n <div className=\"mt-2 text-muted-foreground [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\">{children}</div>\n </li>\n );\n}\n\n/**\n * A guide's steps, numbered, each with its title and body. For instructions\n * a reader follows in order; ProgressSteps is for where something stands.\n */\nexport function Steps({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <ol className={cn('not-prose my-8 flex flex-col [counter-reset:oca-step] [&>li:last-child>span:nth-child(2)]:hidden', className)}>\n {children}\n </ol>\n );\n}\n\n/** A card that leads somewhere: a title, one line, an optional icon. */\nexport function LinkCard({\n href,\n title,\n description,\n icon,\n meta,\n className,\n}: {\n href: string;\n title: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n /** Top right, beside the arrow: a status, a count. */\n meta?: ReactNode;\n className?: string;\n}) {\n const Arrow = isInternal(href) ? ArrowRight : ArrowUpRight;\n return (\n <DocLink\n href={href}\n className={cn(\n 'group flex h-full flex-col gap-3 rounded-[1.25rem] border border-border bg-card p-5 transition-colors hover:border-oca-hairline-strong',\n className\n )}\n >\n <span className=\"flex items-start justify-between gap-3\">\n {icon ? (\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-xl bg-muted text-foreground [&_svg]:size-[1.125rem]\">\n {icon}\n </span>\n ) : (\n <span className=\"text-[1rem] font-medium leading-snug text-foreground\">{title}</span>\n )}\n <span className=\"flex shrink-0 items-center gap-2\">\n {meta}\n <Arrow aria-hidden className=\"size-4 text-muted-foreground transition-transform group-hover:translate-x-0.5 group-hover:text-foreground\" />\n </span>\n </span>\n {icon ? <span className=\"text-[1rem] font-medium leading-snug text-foreground\">{title}</span> : null}\n {description ? <span className=\"text-[0.9375rem] leading-relaxed text-muted-foreground\">{description}</span> : null}\n </DocLink>\n );\n}\n\n/** LinkCards in a grid: one column on a phone, two or three beside each other. */\nexport function CardGrid({ columns = 2, children, className }: { columns?: 2 | 3; children: ReactNode; className?: string }) {\n return (\n <div className={cn('not-prose my-6 grid grid-cols-1 gap-3 sm:grid-cols-2', columns === 3 && 'lg:grid-cols-3', className)}>\n {children}\n </div>\n );\n}\n\n/* ── Tables ──────────────────────────────────────────────────────────── */\n\n/**\n * A markdown table: hairline rules, a quiet header, and sideways scrolling\n * with an edge that says so when it is wider than the column. Code in a\n * cell drops its pill, so an API table reads as a list of names.\n */\nexport function MdxTable({ className, ...props }: TableHTMLAttributes<HTMLTableElement>) {\n return (\n <div className=\"not-prose my-6 overflow-hidden rounded-2xl border border-border bg-card\">\n <ScrollFade fade=\"var(--card)\">\n <table\n className={cn(\n 'w-full border-collapse text-left text-[0.875rem] leading-relaxed',\n '[&_th]:whitespace-nowrap [&_th]:border-b [&_th]:border-oca-hairline-strong [&_th]:bg-oca-table-head [&_th]:px-4 [&_th]:py-2.5 [&_th]:text-[0.8125rem] [&_th]:font-medium [&_th]:text-foreground',\n '[&_td]:border-t [&_td]:border-border [&_td]:px-4 [&_td]:py-2.5 [&_td]:align-top [&_td]:text-muted-foreground [&_tbody_tr:first-child_td]:border-t-0',\n '[&_td_code]:bg-transparent [&_td_code]:p-0 [&_td_code]:text-foreground [&_td:first-child]:text-foreground',\n '[&_[align=center]]:text-center [&_[align=right]]:text-right',\n // On a phone a cell keeps a readable width; the table scrolls instead of crushing it.\n 'max-sm:[&_td]:min-w-[9rem]',\n className\n )}\n {...props}\n />\n </ScrollFade>\n </div>\n );\n}\n\nexport interface ApiRow {\n name: string;\n /** The row's anchor: a link to `#id` lands on this row. */\n id?: string;\n type?: ReactNode;\n required?: boolean;\n default?: ReactNode;\n description?: ReactNode;\n /** Where it is defined: a link to the source line. Its column is named once, in the header. */\n source?: ReactNode;\n deprecated?: boolean;\n /** Where the member stands, when it is not simply live. */\n status?: Exclude<Status, 'live' | 'good' | 'caution' | 'refused'>;\n}\n\nconst said = (n: ReactNode) => n !== undefined && n !== null && n !== false && n !== '';\n\n/**\n * Parameters, props or fields: name and type in mono, required or default,\n * what it does and where it is defined. A table from sm up; on a phone each\n * row is a card with the name and type on top. One set of rows serves both,\n * so a row's `id` is a single anchor. A column nobody fills is left out.\n */\nexport function ApiTable({\n rows,\n caption,\n nameHeader = 'Name',\n className,\n}: {\n rows: ApiRow[];\n caption?: string;\n nameHeader?: string;\n className?: string;\n}) {\n const hasDefault = rows.some((r) => r.default !== undefined);\n const hasDescription = rows.some((r) => said(r.description));\n const hasSource = rows.some((r) => said(r.source));\n const cell = 'px-4 py-3 max-sm:p-0';\n return (\n <div className={cn('not-prose my-6 overflow-hidden rounded-2xl border border-border bg-card', className)}>\n <ScrollFade fade=\"var(--card)\">\n <table className=\"w-full border-collapse text-left text-[0.875rem] max-sm:block\">\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead className=\"max-sm:sr-only\">\n <tr className=\"border-b border-oca-hairline-strong bg-oca-table-head text-[0.8125rem]\">\n <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">{nameHeader}</th>\n <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Type</th>\n {hasDefault ? <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Default</th> : null}\n {hasDescription ? <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Description</th> : null}\n {hasSource ? <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Defined in</th> : null}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border max-sm:block\">\n {rows.map((r) => (\n <tr\n key={r.id ?? r.name}\n id={r.id}\n className=\"scroll-mt-28 align-top target:bg-muted max-sm:flex max-sm:flex-col max-sm:gap-1.5 max-sm:px-4 max-sm:py-3.5\"\n >\n <th scope=\"row\" className={cn(cell, 'text-left font-normal')}>\n <span className=\"flex flex-col items-start gap-1 max-sm:flex-row max-sm:flex-wrap max-sm:items-baseline max-sm:gap-x-2\">\n <code className={cn('font-mono text-[0.8125rem] text-foreground max-sm:text-[0.875rem]', r.deprecated && 'line-through decoration-oca-subtle')}>\n {r.name}\n </code>\n {r.required ? <span className=\"text-[0.75rem] text-oca-accent-ink\">Required</span> : null}\n {r.deprecated ? <Badge tone=\"muted\">Deprecated</Badge> : null}\n {r.status ? <StatusBadge status={r.status} /> : null}\n </span>\n </th>\n <td className={cn(cell, 'font-mono text-[0.8125rem] text-muted-foreground max-sm:break-all', !said(r.type) && 'max-sm:hidden')}>\n {r.type ?? '—'}\n </td>\n {hasDefault ? (\n <td className={cn(cell, 'font-mono text-[0.8125rem] text-muted-foreground max-sm:order-last', r.default === undefined && 'max-sm:hidden')}>\n <span className=\"font-sans sm:hidden\">Default </span>\n {r.default ?? '—'}\n </td>\n ) : null}\n {hasDescription ? (\n <td className={cn(cell, 'leading-relaxed text-muted-foreground', !said(r.description) && 'max-sm:hidden')}>\n {r.description}\n </td>\n ) : null}\n {hasSource ? (\n <td className={cn(cell, 'text-[0.8125rem] text-muted-foreground max-sm:order-last max-sm:break-all', !said(r.source) && 'max-sm:hidden')}>\n {r.source}\n </td>\n ) : null}\n </tr>\n ))}\n </tbody>\n </table>\n </ScrollFade>\n </div>\n );\n}\n\n/* ── Diagrams ────────────────────────────────────────────────────────── */\n\n/** The two calls Diagram makes on mermaid; the package does not depend on it. */\nexport interface MermaidLike {\n initialize(config: Record<string, unknown>): void;\n render(id: string, text: string): Promise<{ svg: string }>;\n}\n\nexport type MermaidLoader = () => Promise<MermaidLike | { default: MermaidLike }>;\n\nfunction useDarkMode(): boolean {\n const [dark, setDark] = useState(false);\n useEffect(() => {\n const root = document.documentElement;\n const read = () => setDark(root.classList.contains('dark'));\n read();\n const mo = new MutationObserver(read);\n mo.observe(root, { attributes: true, attributeFilter: ['class'] });\n return () => mo.disconnect();\n }, []);\n return dark;\n}\n\n/** Mermaid's palette from the tokens on the page, so a diagram follows light and dark. */\nfunction mermaidTheme(el: HTMLElement): Record<string, string> {\n const css = getComputedStyle(el);\n const v = (name: string) => css.getPropertyValue(name).trim();\n const card = v('--card');\n const muted = v('--muted');\n const text = v('--foreground');\n const subtle = v('--muted-foreground');\n const line = v('--input');\n const hair = v('--oca-hairline-strong');\n return {\n background: 'transparent',\n fontFamily: css.fontFamily,\n fontSize: '14px',\n textColor: text,\n mainBkg: card,\n primaryColor: card,\n primaryTextColor: text,\n primaryBorderColor: hair,\n secondaryColor: muted,\n secondaryTextColor: text,\n secondaryBorderColor: hair,\n tertiaryColor: muted,\n tertiaryTextColor: text,\n tertiaryBorderColor: hair,\n nodeBorder: hair,\n lineColor: line,\n edgeLabelBackground: card,\n clusterBkg: muted,\n clusterBorder: hair,\n titleColor: text,\n noteBkgColor: muted,\n noteTextColor: text,\n noteBorderColor: hair,\n actorBkg: card,\n actorBorder: hair,\n actorTextColor: text,\n actorLineColor: line,\n signalColor: text,\n signalTextColor: text,\n labelBoxBkgColor: card,\n labelBoxBorderColor: hair,\n labelTextColor: text,\n loopTextColor: subtle,\n activationBkgColor: muted,\n activationBorderColor: hair,\n sequenceNumberColor: card,\n };\n}\n\n/*\n * Mermaid draws at 100% width with its own size as a max-width, so a wide\n * diagram shrinks to fit and its labels with it. Give it its own width\n * instead, and read that width back: one up to a third wider than the\n * column scales down to fit (its 14px labels stay at 10.5px or more); a\n * wider one keeps its type size and scrolls sideways.\n */\nconst FIT = 4 / 3;\n\nfunction naturalSize(svg: string): { svg: string; width: number | null } {\n const w = svg.match(/viewBox=\"[\\d.-]+ [\\d.-]+ ([\\d.]+) [\\d.]+\"/)?.[1];\n if (!w) return { svg, width: null };\n const width = Math.ceil(Number(w));\n return {\n svg: svg.replace(/<svg([^>]*?)\\swidth=\"100%\"/, `<svg$1 width=\"${width}\"`).replace(/max-width:\\s*[\\d.]+px;?/, ''),\n width,\n };\n}\n\n/** The width a diagram has to fill: the figure, less the well's padding. */\nfunction useInnerWidth(ref: RefObject<HTMLElement | null>, padding: number): number | null {\n const [width, setWidth] = useState<number | null>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const ro = new ResizeObserver(() => setWidth(el.clientWidth - padding));\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref, padding]);\n return width;\n}\n\n/**\n * A mermaid diagram drawn in the page's own colours, again whenever the\n * page turns light or dark. Pass `load` (`() => import('mermaid')`) so\n * mermaid is fetched only on a page that draws one. If it cannot be drawn,\n * the source shows instead.\n */\nexport function Diagram({ chart, caption, load, className }: { chart: string; caption?: ReactNode; load: MermaidLoader; className?: string }) {\n const ref = useRef<HTMLDivElement>(null);\n const dark = useDarkMode();\n const raw = useId();\n const [drawn, setDrawn] = useState<{ svg: string; width: number | null } | null>(null);\n const [failed, setFailed] = useState(false);\n const room = useInnerWidth(ref, 48);\n const fits = drawn?.width != null && room != null && drawn.width <= room * FIT;\n useEffect(() => {\n let live = true;\n const el = ref.current;\n if (!el) return;\n (async () => {\n try {\n const mod = await load();\n const mermaid = 'default' in mod ? mod.default : mod;\n mermaid.initialize({ startOnLoad: false, securityLevel: 'strict', theme: 'base', themeVariables: mermaidTheme(el) });\n const { svg } = await mermaid.render(`oca-diagram-${raw.replace(/[^a-zA-Z0-9]/g, '')}-${dark ? 'd' : 'l'}`, chart);\n if (live) {\n setDrawn(naturalSize(svg));\n setFailed(false);\n }\n } catch {\n if (live) setFailed(true);\n }\n })();\n return () => {\n live = false;\n };\n }, [chart, dark, load, raw]);\n if (failed) return <CodeBlock code={chart} caption=\"Diagram (shown as its source)\" className={cn('my-6', className)} />;\n return (\n <figure ref={ref} className={cn('not-prose my-6 overflow-hidden rounded-[1.25rem] border border-border bg-card', className)}>\n {drawn ? (\n <ScrollFade fade=\"var(--card)\">\n <div\n data-fit={fits ? '' : undefined}\n className={cn(\n 'flex justify-center p-6 [&_svg]:h-auto',\n fits ? 'w-full [&_svg]:max-w-full' : 'w-max min-w-full [&_svg]:max-w-none'\n )}\n role=\"img\"\n aria-label={typeof caption === 'string' ? caption : 'Diagram'}\n dangerouslySetInnerHTML={{ __html: drawn.svg }}\n />\n </ScrollFade>\n ) : (\n <div role=\"status\" aria-label=\"Drawing the diagram\" className=\"p-6\">\n <Skeleton className=\"h-40 w-full rounded-xl\" />\n </div>\n )}\n {caption ? <figcaption className=\"border-t border-border px-5 py-3 text-[0.8125rem] text-muted-foreground\">{caption}</figcaption> : null}\n </figure>\n );\n}\n\n/* ── Headings with anchors ───────────────────────────────────────────── */\n\nconst HEADING = {\n h1: 'oca-display-3 mb-4 text-foreground',\n h2: 'mb-3 mt-12 text-[1.375rem] font-medium leading-tight tracking-[-0.015em] text-foreground md:text-[1.5rem]',\n h3: 'mb-2 mt-9 text-[1.125rem] font-medium leading-snug tracking-[-0.01em] text-foreground',\n h4: 'mb-2 mt-7 text-[1rem] font-medium leading-snug text-foreground',\n} as const;\n\n/**\n * A docs heading. With an id it carries a \"#\" link to itself, shown on\n * hover or focus, so a reader can copy a link to the section.\n */\nexport function DocsHeading({\n as: Tag,\n id,\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLHeadingElement> & { as: keyof typeof HEADING }) {\n return (\n <Tag id={id} className={cn('group scroll-mt-28', HEADING[Tag], className)} {...props}>\n <span data-heading-text=\"\">{children}</span>\n {id && Tag !== 'h1' ? (\n <a\n href={`#${id}`}\n className=\"ml-2 inline-block rounded-md px-1 align-baseline text-[0.85em] font-normal text-oca-subtle no-underline opacity-0 transition-opacity hover:text-foreground focus-visible:opacity-100 group-hover:opacity-100\"\n >\n <span aria-hidden>#</span>\n <span className=\"sr-only\">Link to this section</span>\n </a>\n ) : null}\n </Tag>\n );\n}\n\n/** Text of an MDX `<code>` child, which may arrive as a string or pieces of one. */\nexport function codeText(node: ReactNode): string {\n if (typeof node === 'string') return node;\n if (typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(codeText).join('');\n if (isValidElement(node)) return codeText((node as ReactElement<{ children?: ReactNode }>).props.children);\n return '';\n}\n\n/** The language of an MDX code fence, from its `language-xx` class. */\nexport function codeLang(node: ReactNode): string | undefined {\n const child = Children.toArray(node)[0];\n if (!isValidElement(child)) return undefined;\n const cls = (child as ReactElement<{ className?: string }>).props.className ?? '';\n return cls.match(/language-([\\w+-]+)/)?.[1];\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 { Callout } from './docs';\nimport { PageHero } from './hero';\nimport { TextLink } from './text-link';\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/** Which normative file a page summarises: its default file, title and sentence. */\nexport type SpecFileKind = 'spec' | 'security' | 'rationale';\n\nconst SPEC_FILE: Record<SpecFileKind, { file: string; title: string; note: string }> = {\n spec: {\n file: 'SPEC.md',\n title: 'Normative source',\n note: 'This page is a human-readable summary. The authoritative copy lives in the spec repo. If the two ever drift, the repo wins.',\n },\n security: {\n file: 'SECURITY.md',\n title: 'Normative threat model',\n note: 'This page is the short form. The authoritative, numbered threat model lives in the spec repo.',\n },\n rationale: {\n file: 'WHY.md',\n title: 'Design rationale',\n note: 'This page is the short version. The full rationale and the rejected-design log live in the spec repo.',\n },\n};\n\nexport type SpecCardProps =\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 repo?: never;\n }\n | {\n /** One file in any spec repo, `oc-chat-protocol` included: where a page's normative copy lives. */\n repo: string;\n /** Default: the kind's file (SPEC.md, SECURITY.md, WHY.md). */\n file?: string;\n kind?: SpecFileKind;\n version?: string;\n /** Replaces the kind's sentence. */\n note?: ReactNode;\n className?: string;\n protocol?: never;\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. Given a `repo` instead of a protocol, it is\n * a note naming one file in that repo as the normative copy of the page.\n */\nexport function SpecCard(props: SpecCardProps) {\n return props.repo !== undefined ? <SpecFileNote {...props} /> : <ProtocolSpecCard {...props} />;\n}\n\nfunction SpecFileNote({ repo, file, kind = 'spec', version, note, className }: Extract<SpecCardProps, { repo: string }>) {\n const d = SPEC_FILE[kind];\n const f = file ?? d.file;\n return (\n <Callout title={version ? `${d.title} · ${version}` : d.title} className={className}>\n <p>{note ?? d.note}</p>\n <p>\n <TextLink href={`https://github.com/orangecheck/${repo}/blob/main/${f}`} className=\"break-all font-mono text-[0.875rem]\">\n {`${repo}/${f}`}\n </TextLink>\n </p>\n </Callout>\n );\n}\n\nfunction ProtocolSpecCard({ protocol, version, license, vectors, size = 'md', className }: Extract<SpecCardProps, { protocol: ProtocolSlug }>) {\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, CircleSlash, 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-block';\nimport { KeyValueList, type KeyValueItem } from './data';\n\n/**\n * `none`: there is nothing to check, and that is a fact (no timestamp yet, no\n * stake bound). `unchecked`: there may be, but this check did not look.\n */\nexport type CheckState = 'ok' | 'fail' | 'pending' | 'none' | '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 none: { word: 'None', icon: <CircleSlash />, tone: 'text-muted-foreground' },\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 as: Heading = 'h2',\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 /** The title's level: h2 under the page's title (the default), h3 inside a section. */\n as?: 'h2' | 'h3';\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 {/* items-start sizes each line to its longest word: a Bitcoin address must be free to break. */}\n <header className=\"flex flex-col items-start gap-3 p-6 md:p-8\">\n <StatusBadge status={verdict} />\n <Heading className=\"oca-display-3 [overflow-wrap:anywhere]\">{title}</Heading>\n {summary ? <p className=\"oca-body max-w-[40rem] [overflow-wrap:anywhere]\">{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 scheme = 'bip322',\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 /** The signature the wallet is asked for: BIP-322, or a legacy (BIP-137) one. The hint names it. */\n scheme?: 'bip322' | 'legacy';\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 {/* SignMessage leads with its own words, so a wallet button's heading stays out. */}\n <div className=\"flex flex-wrap gap-2 [--oc-wallet-heading:none]\">{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 {/* A message is exact bytes and often one long id: it wraps here, and the copy keeps every byte. */}\n <CodeBlock code={message} caption=\"Message to sign\" wrap />\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&rsquo;s &ldquo;sign message&rdquo; ({scheme === 'legacy' ? 'legacy, BIP-137' : '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 * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { CornerDownLeft, Search } from 'lucide-react';\nimport { forwardRef, useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Kbd, Spinner } from '../primitives/feedback';\n\n/*\n * Search, as a dialog: a field, results in groups, and the keyboard\n * throughout (⌘K or / to open, arrows to move, Enter to open, Esc to\n * close). It knows nothing about the index: `onQuery` returns the results,\n * from Pagefind, an API or a list in memory.\n */\n\nexport interface SearchResult {\n id: string;\n /** Where it goes. A result with `run` instead is an action. */\n href?: string;\n /** An action (a command palette's \"Lock the vault\"): runs instead of following a link. */\n run?: () => void;\n /** Before the title: what kind of thing it is. */\n icon?: ReactNode;\n /** At the end of the row: a word (\"Action\", \"Login\"), a shortcut. */\n meta?: ReactNode;\n title: ReactNode;\n /** Where it sits: \"OC Stamp › Verify\". */\n section?: ReactNode;\n excerpt?: ReactNode;\n /** An excerpt with <mark> around the matched words, from your own index. Trusted markup only. */\n excerptHtml?: string;\n}\n\nexport interface SearchGroup {\n label: ReactNode;\n results: SearchResult[];\n}\n\nexport type SearchQuery = (query: string, signal: AbortSignal) => Promise<SearchGroup[]> | SearchGroup[];\n\nfunction useMacKeys(): boolean {\n const [mac, setMac] = useState(true);\n useEffect(() => {\n setMac(/Mac|iPhone|iPad/.test(navigator.platform || navigator.userAgent));\n }, []);\n return mac;\n}\n\nconst typing = (el: EventTarget | null) =>\n el instanceof HTMLElement && (el.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName));\n\n/** The header's way into search: a field-shaped button with its shortcut; an icon on a phone. */\nexport const SearchButton = forwardRef<HTMLButtonElement, { label?: string; onClick?: () => void; className?: string }>(function SearchButton(\n { label = 'Search', onClick, className },\n ref\n) {\n const mac = useMacKeys();\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n aria-keyshortcuts={mac ? 'Meta+K' : 'Control+K'}\n className={cn(\n 'inline-flex size-10 items-center justify-center gap-2 rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n 'md:h-10 md:w-56 md:justify-start md:border md:border-border md:bg-card md:pl-3.5 md:pr-2 md:hover:border-oca-hairline-strong md:hover:bg-card',\n className\n )}\n >\n <Search aria-hidden className=\"size-[1.125rem] shrink-0 md:size-4\" />\n {/* The word is the button's name at every width; a phone shows only the icon. */}\n <span className=\"sr-only flex-1 text-left text-[0.9375rem] md:not-sr-only\">{label}</span>\n <Kbd aria-hidden className=\"hidden md:inline-flex\">\n {mac ? '⌘K' : 'Ctrl K'}\n </Kbd>\n </button>\n );\n});\n\nexport interface SearchDialogProps {\n onQuery: SearchQuery;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onSelect?: (result: SearchResult) => void;\n /** Render the SearchButton that opens it. */\n button?: boolean;\n /** ⌘K / Ctrl+K and / open it. */\n hotkey?: boolean;\n label?: string;\n placeholder?: string;\n /** Shown before anything is typed: popular pages, a hint. */\n idle?: ReactNode;\n /** The query it opens with: a `?q=` from the address. */\n defaultQuery?: string;\n debounceMs?: number;\n className?: string;\n /** List before anything is typed: `onQuery('')` gives what to show first (recent items, actions). */\n browse?: boolean;\n}\n\n/**\n * Search the site. Uncontrolled it brings its own button (`button`), and\n * ⌘K or / opens it from anywhere on the page; pass `open` and\n * `onOpenChange` to drive it yourself. Choosing a result calls `onSelect`\n * (a router's push) or follows its link.\n */\nexport function SearchDialog({\n onQuery,\n open: openProp,\n onOpenChange,\n onSelect,\n button = true,\n hotkey = true,\n label = 'Search',\n placeholder = 'Search the docs',\n idle,\n defaultQuery = '',\n debounceMs = 120,\n browse = false,\n className,\n}: SearchDialogProps) {\n const [own, setOwn] = useState(false);\n const open = openProp ?? own;\n const setOpen = (v: boolean) => {\n if (openProp === undefined) setOwn(v);\n onOpenChange?.(v);\n };\n const [query, setQuery] = useState(defaultQuery);\n const [groups, setGroups] = useState<SearchGroup[]>([]);\n const [state, setState] = useState<'idle' | 'loading' | 'done' | 'error'>('idle');\n const [active, setActive] = useState(0);\n const listId = useId();\n const listRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n // Where focus was when it opened, to go back to on close.\n const returnTo = useRef<HTMLElement | null>(null);\n const flat = useMemo(() => groups.flatMap((g) => g.results), [groups]);\n // The latest props, for listeners and timers set up once.\n const latest = useRef({ open, setOpen, onQuery });\n latest.current = { open, setOpen, onQuery };\n\n useEffect(() => {\n if (!hotkey) return;\n const onKey = (e: KeyboardEvent) => {\n const { open: isOpen, setOpen: set } = latest.current;\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {\n e.preventDefault();\n set(!isOpen);\n } else if (e.key === '/' && !isOpen && !typing(e.target)) {\n e.preventDefault();\n set(true);\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [hotkey]);\n\n useEffect(() => {\n const q = query.trim();\n if (!q && !(browse && open)) {\n setGroups([]);\n setState('idle');\n return;\n }\n const ctl = new AbortController();\n setState('loading');\n const t = setTimeout(async () => {\n try {\n const out = await latest.current.onQuery(q, ctl.signal);\n if (ctl.signal.aborted) return;\n setGroups(out.filter((g) => g.results.length > 0));\n setActive(0);\n setState('done');\n } catch {\n if (!ctl.signal.aborted) setState('error');\n }\n }, debounceMs);\n return () => {\n clearTimeout(t);\n ctl.abort();\n };\n }, [query, debounceMs, browse, open]);\n\n useEffect(() => {\n listRef.current?.querySelector('[aria-selected=\"true\"]')?.scrollIntoView({ block: 'nearest' });\n }, [active]);\n\n const choose = (r: SearchResult) => {\n setOpen(false);\n if (r.run) r.run();\n else if (onSelect) onSelect(r);\n else if (r.href) window.location.assign(r.href);\n };\n const optionId = (i: number) => `${listId}-o${i}`;\n const showList = state === 'done' && flat.length > 0;\n let index = -1;\n\n return (\n <>\n {button ? <SearchButton ref={buttonRef} label={label} onClick={() => setOpen(true)} className={className} /> : null}\n <DialogPrimitive.Root open={open} onOpenChange={setOpen}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"oca-animate-fade fixed inset-0 z-50 bg-[rgb(10_10_10/0.38)] backdrop-blur-[2px]\" />\n <DialogPrimitive.Content\n aria-describedby={undefined}\n onOpenAutoFocus={() => {\n const el = document.activeElement;\n returnTo.current = el instanceof HTMLElement && el !== document.body ? el : null;\n }}\n // With no Dialog.Trigger, Radix would leave focus on the page's body.\n onCloseAutoFocus={(e) => {\n const back = returnTo.current?.isConnected ? returnTo.current : buttonRef.current;\n if (back) {\n e.preventDefault();\n back.focus();\n }\n }}\n className=\"oca-animate-rise fixed left-1/2 top-3 z-50 flex max-h-[calc(100dvh-1.5rem)] w-[calc(100vw-1.5rem)] -translate-x-1/2 flex-col overflow-hidden rounded-[1.5rem] border border-border bg-popover text-popover-foreground shadow-xl outline-none sm:top-[12vh] sm:max-h-[min(36rem,76vh)] sm:w-[min(92vw,40rem)]\"\n >\n <DialogPrimitive.Title className=\"sr-only\">{label}</DialogPrimitive.Title>\n <div className=\"flex h-14 shrink-0 items-center gap-3 border-b border-border pl-5 pr-3\">\n {state === 'loading' ? (\n <Spinner className=\"size-[1.125rem] text-muted-foreground\" />\n ) : (\n <Search aria-hidden className=\"size-[1.125rem] shrink-0 text-muted-foreground\" />\n )}\n <input\n autoFocus\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={(e) => {\n if (!showList) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const d = e.key === 'ArrowDown' ? 1 : -1;\n setActive((a) => (a + d + flat.length) % flat.length);\n } else if (e.key === 'Enter' && flat[active]) {\n e.preventDefault();\n choose(flat[active]!);\n }\n }}\n placeholder={placeholder}\n role=\"combobox\"\n aria-label={label}\n aria-expanded={showList}\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={showList ? optionId(active) : undefined}\n spellCheck={false}\n autoComplete=\"off\"\n className=\"h-full min-w-0 flex-1 bg-transparent text-base text-foreground outline-none placeholder:text-oca-subtle\"\n />\n <DialogPrimitive.Close className=\"inline-flex h-8 shrink-0 items-center rounded-md border border-border px-2 text-[0.75rem] text-muted-foreground transition-colors hover:text-foreground\">\n {/* A phone has no Esc key. */}\n <span className=\"sm:hidden\">Close</span>\n <span className=\"max-sm:hidden\" aria-hidden>\n Esc\n </span>\n <span className=\"sr-only max-sm:hidden\">Close search</span>\n </DialogPrimitive.Close>\n </div>\n <div ref={listRef} className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain p-2\">\n <div id={listId} role=\"listbox\" aria-label=\"Results\" className={cn(!showList && 'hidden')}>\n {groups.map((g, gi) => (\n <div key={gi} role=\"group\" aria-label={typeof g.label === 'string' ? g.label : undefined} className=\"pb-1\">\n <p aria-hidden className=\"px-3 pb-1.5 pt-3 text-[0.8125rem] text-muted-foreground\">\n {g.label}\n </p>\n {g.results.map((r) => {\n index++;\n const i = index;\n const on = i === active;\n // A place is a link (it opens in a new tab with a modifier); an action is not.\n const Option = r.href ? 'a' : 'div';\n return (\n <Option\n key={r.id}\n id={optionId(i)}\n {...(r.href ? { href: r.href } : {})}\n role=\"option\"\n aria-selected={on}\n tabIndex={-1}\n onMouseMove={() => setActive(i)}\n onClick={(e) => {\n if (r.href && (e.metaKey || e.ctrlKey || e.shiftKey)) return;\n e.preventDefault();\n choose(r);\n }}\n className={cn(\n 'flex items-start gap-3 rounded-xl px-3 py-2.5 transition-colors',\n on ? 'bg-accent' : 'hover:bg-accent',\n !r.href && 'cursor-pointer'\n )}\n >\n {r.icon ? (\n <span aria-hidden className=\"mt-0.5 flex size-5 shrink-0 items-center justify-center text-muted-foreground [&_svg]:size-[1.0625rem]\">\n {r.icon}\n </span>\n ) : null}\n <span className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem] font-medium text-foreground\">{r.title}</span>\n {r.section ? <span className=\"truncate text-[0.8125rem] text-muted-foreground\">{r.section}</span> : null}\n {r.excerptHtml ? (\n <span\n className=\"line-clamp-2 text-[0.875rem] leading-snug text-muted-foreground [&_mark]:rounded-sm [&_mark]:bg-[color-mix(in_oklab,var(--oca-orange)_22%,transparent)] [&_mark]:px-0.5 [&_mark]:text-foreground\"\n dangerouslySetInnerHTML={{ __html: r.excerptHtml }}\n />\n ) : r.excerpt ? (\n <span className=\"line-clamp-2 text-[0.875rem] leading-snug text-muted-foreground\">{r.excerpt}</span>\n ) : null}\n </span>\n {r.meta ? <span className=\"mt-0.5 shrink-0 text-[0.8125rem] text-muted-foreground\">{r.meta}</span> : null}\n <CornerDownLeft aria-hidden className={cn('mt-1 size-4 shrink-0 text-muted-foreground', !on && 'invisible')} />\n </Option>\n );\n })}\n </div>\n ))}\n </div>\n {state === 'idle' ? (\n <div className=\"px-3 py-6 text-[0.9375rem] text-muted-foreground\">\n {idle ?? 'Type a word: a protocol, a function, an error.'}\n </div>\n ) : null}\n {state === 'done' && flat.length === 0 ? (\n <p role=\"status\" className=\"px-3 py-6 text-[0.9375rem] text-muted-foreground\">\n {query.trim() ? <>No results for &ldquo;{query.trim()}&rdquo;.</> : 'Nothing here yet.'}\n </p>\n ) : null}\n {state === 'error' ? (\n <p role=\"status\" className=\"px-3 py-6 text-[0.9375rem] text-muted-foreground\">\n Search is not available right now. Try again in a moment.\n </p>\n ) : null}\n </div>\n <div aria-hidden className=\"hidden shrink-0 items-center gap-4 border-t border-border px-5 py-2.5 text-[0.75rem] text-muted-foreground sm:flex\">\n <span className=\"flex items-center gap-1.5\">\n <Kbd>↑</Kbd>\n <Kbd>↓</Kbd> to move\n </span>\n <span className=\"flex items-center gap-1.5\">\n <Kbd>↵</Kbd> to open\n </span>\n <span className=\"flex items-center gap-1.5\">\n <Kbd>esc</Kbd> to close\n </span>\n </div>\n <span aria-live=\"polite\" className=\"sr-only\">\n {state === 'done' ? `${flat.length} result${flat.length === 1 ? '' : 's'}` : ''}\n </span>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n </>\n );\n}\n\n/**\n * A command palette (⌘K): SearchDialog with its list open before anything is\n * typed, `onQuery('')` giving the recent items and common actions. A result\n * with `run` is an action; one with `href` is a place to go. No button of its\n * own: ⌘K opens it, or drive `open` from yours.\n */\nexport function CommandDialog({\n label = 'Commands',\n placeholder = 'Search, or run a command',\n ...props\n}: Omit<SearchDialogProps, 'browse' | 'button'>) {\n return <SearchDialog {...props} label={label} placeholder={placeholder} button={false} browse />;\n}\n","import { ArrowRight, Check, Download, FileText, Lock, Upload } from 'lucide-react';\nimport Link from 'next/link';\nimport { useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport {\n blocksToDuration,\n explorerUrl,\n formatBlockHeight,\n formatBytes,\n formatUtc,\n type Network,\n} from '../format';\nimport { cn } from '../lib/cn';\nimport { useDensity } from '../lib/density';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\nimport { Textarea } from '../primitives/form';\nimport { CodeBlock } from './code-block';\n\n/*\n * The parts of a protocol's tools: the artifact itself (ArtifactView), a\n * file to hash (DropZone), a numbered group of fields (FormSection), the\n * lifecycle word (StateBadge), Bitcoin time (AnchorStatus, BlockHeight,\n * BlockCountdown), a share of a total (Meter), filters (FilterChips) and the\n * dashboard's cards (ToolGrid).\n */\n\n/* ── ArtifactView ────────────────────────────────────────────────────── */\n\nfunction pretty(content: string): string | null {\n try {\n return JSON.stringify(JSON.parse(content), null, 2);\n } catch {\n return null;\n }\n}\n\nfunction download(content: string, filename: string, mime: string) {\n const url = URL.createObjectURL(new Blob([content], { type: mime }));\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n setTimeout(() => URL.revokeObjectURL(url), 0);\n}\n\nconst BAR_BUTTON =\n 'inline-flex h-7 items-center gap-1.5 rounded-full px-2.5 text-[0.75rem] text-oca-ink-subtle transition-colors hover:bg-white/10 hover:text-white';\n\n/**\n * An artifact as it is: an envelope, a ballot, a delegation. JSON shows\n * formatted, with a switch to the raw bytes exactly as they were signed;\n * copy takes what is shown, download always saves the raw bytes.\n */\nexport function ArtifactView({\n content,\n title,\n filename,\n mime,\n defaultView = 'formatted',\n maxLines = 28,\n className,\n}: {\n /** The artifact's bytes, as text. */\n content: string;\n /** What it is: \"Stamp envelope\". Defaults to the language. */\n title?: ReactNode;\n /** Offer a download under this name. */\n filename?: string;\n /** Default: application/json when it parses, text/plain otherwise. */\n mime?: string;\n defaultView?: 'formatted' | 'raw';\n maxLines?: number;\n className?: string;\n}) {\n const formatted = useMemo(() => pretty(content), [content]);\n const [view, setView] = useState<'formatted' | 'raw'>(formatted ? defaultView : 'raw');\n const shown = view === 'formatted' && formatted ? formatted : content;\n const json = formatted !== null;\n return (\n <CodeBlock\n code={shown}\n lang={json ? 'json' : undefined}\n caption={title}\n maxLines={maxLines}\n className={className}\n actions={\n <>\n {json ? (\n <span role=\"group\" aria-label=\"View\" className=\"mr-1 flex items-center rounded-full bg-white/[0.06] p-0.5\">\n {(['formatted', 'raw'] as const).map((v) => (\n <button\n key={v}\n type=\"button\"\n aria-pressed={view === v}\n onClick={() => setView(v)}\n className={cn(\n 'h-7 rounded-full px-2.5 text-[0.75rem] transition-colors',\n view === v ? 'bg-white/[0.12] text-white' : 'text-oca-ink-subtle hover:text-white'\n )}\n >\n {v === 'formatted' ? 'Formatted' : 'Raw'}\n </button>\n ))}\n </span>\n ) : null}\n {filename ? (\n <button\n type=\"button\"\n onClick={() => download(content, filename, mime ?? (json ? 'application/json' : 'text/plain'))}\n className={BAR_BUTTON}\n aria-label={`Download ${filename}`}\n >\n <Download aria-hidden className=\"size-3.5\" />\n <span className=\"max-sm:hidden\">Download</span>\n </button>\n ) : null}\n </>\n }\n />\n );\n}\n\n/* ── DropZone ────────────────────────────────────────────────────────── */\n\nexport interface ChosenFile {\n name: string;\n size: number;\n type?: string;\n}\n\n/**\n * Drop a file, choose one, or paste text. The file never leaves the\n * browser, and the zone says so. While it is read and hashed, `progress`\n * (0 to 1) fills a bar; once `file` is set the zone shows it, with a way to\n * choose another.\n */\nexport function DropZone({\n onFile,\n onText,\n accept,\n title = 'Drop a file here, or choose one',\n hint,\n privacy = 'It stays in your browser. Only its hash leaves this page.',\n file,\n progress,\n progressLabel = 'Hashing',\n onClear,\n error,\n disabled = false,\n className,\n}: {\n onFile: (file: File) => void;\n /** Offer \"Paste text instead\"; called with the text. */\n onText?: (text: string) => void;\n /** The file input's accept list: \".pdf,image/*\". */\n accept?: string;\n title?: ReactNode;\n /** A line under the title: what kinds, how large. */\n hint?: ReactNode;\n /** The line about where the file goes. `null` leaves it out. */\n privacy?: ReactNode;\n file?: ChosenFile | null;\n /** 0 to 1 while reading; null or undefined when not. */\n progress?: number | null;\n progressLabel?: ReactNode;\n onClear?: () => void;\n error?: ReactNode;\n disabled?: boolean;\n className?: string;\n}) {\n const input = useRef<HTMLInputElement>(null);\n const [over, setOver] = useState(false);\n const depth = useRef(0);\n const [mode, setMode] = useState<'file' | 'text'>('file');\n const [text, setText] = useState('');\n const errorId = useId();\n const titleId = useId();\n const busy = progress !== null && progress !== undefined;\n const pct = busy ? Math.round(Math.max(0, Math.min(1, progress!)) * 100) : 0;\n\n const take = (f: File | undefined | null) => {\n if (f && !disabled) onFile(f);\n };\n\n const privacyLine =\n privacy === null ? null : (\n <p className=\"flex items-start gap-2 text-[0.8125rem] leading-snug text-muted-foreground\">\n <Lock aria-hidden className=\"mt-0.5 size-3.5 shrink-0\" />\n <span>{privacy}</span>\n </p>\n );\n\n if (mode === 'text' && onText) {\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n <Textarea\n value={text}\n onChange={(e) => setText(e.target.value)}\n rows={6}\n aria-label=\"Text\"\n aria-describedby={error ? errorId : undefined}\n aria-invalid={error ? true : undefined}\n placeholder=\"Paste the text here\"\n className=\"font-mono text-base md:text-[0.875rem]\"\n />\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button size=\"sm\" disabled={!text.trim() || disabled} onClick={() => onText(text)}>\n Use this text\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setMode('file')}>\n Choose a file instead\n </Button>\n </div>\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] text-destructive\">\n {error}\n </p>\n ) : null}\n {privacyLine}\n </div>\n );\n }\n\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n <div\n role=\"group\"\n aria-labelledby={titleId}\n aria-describedby={error ? errorId : undefined}\n aria-busy={busy || undefined}\n onDragEnter={(e) => {\n e.preventDefault();\n depth.current++;\n if (!disabled) setOver(true);\n }}\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={() => {\n depth.current = Math.max(0, depth.current - 1);\n if (depth.current === 0) setOver(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n depth.current = 0;\n setOver(false);\n take(e.dataTransfer.files?.[0]);\n }}\n className={cn(\n 'relative flex flex-col gap-3 rounded-[1.25rem] border border-dashed transition-colors',\n file ? 'px-4 py-4 sm:px-5' : 'items-center px-5 py-8 text-center md:py-10',\n over ? 'border-foreground bg-accent' : 'border-oca-hairline-strong bg-card',\n error && 'border-destructive',\n disabled && 'opacity-55'\n )}\n >\n <input\n ref={input}\n type=\"file\"\n accept={accept}\n disabled={disabled}\n tabIndex={-1}\n aria-hidden\n className=\"sr-only\"\n onChange={(e) => {\n take(e.target.files?.[0]);\n e.target.value = '';\n }}\n />\n {file ? (\n <div className=\"flex w-full flex-col gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex size-10 shrink-0 items-center justify-center rounded-xl bg-muted text-foreground\">\n {busy ? <FileText aria-hidden className=\"size-5\" /> : <Check aria-hidden className=\"size-5\" />}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span id={titleId} className=\"truncate text-[0.9375rem] font-medium\" title={file.name}>\n {file.name}\n </span>\n <span className=\"text-[0.8125rem] text-muted-foreground\">\n {[formatBytes(file.size), file.type].filter(Boolean).join(' · ')}\n </span>\n </div>\n {!busy && onClear ? (\n <Button size=\"sm\" variant=\"secondary\" onClick={onClear} disabled={disabled} className=\"shrink-0\">\n Choose another\n </Button>\n ) : null}\n </div>\n {busy ? (\n <div className=\"flex flex-col gap-1.5\">\n <div\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={pct}\n aria-label={typeof progressLabel === 'string' ? progressLabel : 'Progress'}\n className=\"h-1.5 overflow-hidden rounded-full bg-muted\"\n >\n <div className=\"h-full rounded-full bg-foreground transition-[width] duration-200\" style={{ width: `${pct}%` }} />\n </div>\n <span className=\"text-[0.8125rem] text-muted-foreground oca-tabular\">\n {progressLabel} {pct}%\n </span>\n </div>\n ) : null}\n </div>\n ) : (\n <>\n <span className=\"flex size-11 items-center justify-center rounded-full bg-muted text-foreground\">\n <Upload aria-hidden className=\"size-5\" />\n </span>\n <div className=\"flex flex-col gap-1\">\n <p id={titleId} className=\"text-[1rem] font-medium\">\n {over ? 'Drop it to add it' : title}\n </p>\n {hint ? <p className=\"text-[0.875rem] text-muted-foreground\">{hint}</p> : null}\n </div>\n <div className=\"mt-1 flex flex-wrap items-center justify-center gap-2\">\n <Button size=\"sm\" variant=\"secondary\" disabled={disabled} onClick={() => input.current?.click()}>\n Choose a file\n </Button>\n {onText ? (\n <Button size=\"sm\" variant=\"ghost\" disabled={disabled} onClick={() => setMode('text')}>\n Paste text instead\n </Button>\n ) : null}\n </div>\n </>\n )}\n </div>\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] text-destructive\">\n {error}\n </p>\n ) : null}\n {privacyLine}\n </div>\n );\n}\n\n/* ── FormSection ─────────────────────────────────────────────────────── */\n\nexport type SectionStatus = 'done' | 'current' | 'upcoming' | 'blocked';\n\n/**\n * A numbered group of fields: \"1 What you are stamping\", \"2 Who signs\".\n * The number turns to a check when the section is done; the current one is\n * marked for screen readers as the step in progress.\n */\nexport function FormSection({\n n,\n title,\n hint,\n status,\n action,\n as: Heading = 'h2',\n id,\n children,\n className,\n}: {\n /** Its place in the form. Leave out for an unnumbered group. */\n n?: number;\n title: ReactNode;\n /** One line under the title. */\n hint?: ReactNode;\n status?: SectionStatus;\n /** Beside the title: Edit, Reset. */\n action?: ReactNode;\n as?: 'h2' | 'h3';\n id?: string;\n children?: ReactNode;\n className?: string;\n}) {\n const titleId = useId();\n const tight = useDensity() === 'compact';\n return (\n <section\n id={id}\n aria-labelledby={titleId}\n aria-current={status === 'current' ? 'step' : undefined}\n className={cn('scroll-mt-24 rounded-[1.25rem] border border-border bg-card', className)}\n >\n {/* Below sm the action takes its own row under the hint, so the hint keeps the width. */}\n <header className={cn('flex flex-wrap items-start gap-x-3.5 gap-y-3', tight ? 'px-5 pt-5' : 'px-6 pt-6')}>\n {n !== undefined ? (\n <span\n aria-hidden\n className={cn(\n 'mt-px flex size-7 shrink-0 items-center justify-center rounded-full border text-[0.8125rem] oca-tabular',\n status === 'done' && 'border-primary bg-primary text-primary-foreground',\n status === 'current' && 'border-brand text-oca-accent-ink',\n status === 'blocked' && 'border-destructive text-destructive',\n (status === 'upcoming' || status === undefined) && 'border-oca-hairline-strong text-muted-foreground'\n )}\n >\n {status === 'done' ? <Check className=\"size-3.5\" strokeWidth={3} /> : n}\n </span>\n ) : null}\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <Heading id={titleId} className=\"text-[1.0625rem] font-medium leading-snug tracking-[-0.008em]\">\n {n !== undefined ? <span className=\"sr-only\">Step {n}: </span> : null}\n {title}\n {status === 'done' ? <span className=\"sr-only\"> (done)</span> : null}\n </Heading>\n {hint ? <p className=\"text-[0.875rem] leading-snug text-muted-foreground\">{hint}</p> : null}\n </div>\n {action ? <div className={cn('shrink-0 max-sm:basis-full', n !== undefined && 'max-sm:pl-[2.625rem]')}>{action}</div> : null}\n </header>\n <div className={cn('flex flex-col', tight ? 'gap-4 p-5' : 'gap-5 p-6', n !== undefined && (tight ? 'sm:pl-[3.875rem]' : 'sm:pl-[4.125rem]'))}>\n {children}\n </div>\n </section>\n );\n}\n\n/* ── StateBadge ──────────────────────────────────────────────────────── */\n\n/** The looks a lifecycle word can take: fixed here, so every protocol's words look alike. */\nexport type StateTone = 'good' | 'attention' | 'bad' | 'neutral' | 'quiet';\n\nconst STATE_TONE = { good: 'success', attention: 'brand', bad: 'danger', neutral: 'neutral', quiet: 'muted' } as const;\n\n/** One lifecycle word in one of the family's looks. Prefer createStateBadge, which fixes the words. */\nexport function StateBadge({\n tone = 'neutral',\n children,\n title,\n className,\n}: {\n tone?: StateTone;\n children: ReactNode;\n /** A line that explains the state, shown on hover. */\n title?: string;\n className?: string;\n}) {\n return (\n <Badge tone={STATE_TONE[tone]} title={title} className={className}>\n {children}\n </Badge>\n );\n}\n\nexport interface StateDef {\n label: string;\n tone: StateTone;\n /** What the state means, in a line. */\n hint?: string;\n}\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\n/**\n * A protocol's lifecycle words, fixed once: `createStateBadge({ active:\n * { label: 'Active', tone: 'good' }, revoked: { label: 'Revoked', tone: 'bad' } })`\n * returns a badge that takes only those states.\n */\nexport function createStateBadge<S extends string>(states: Record<S, StateDef>) {\n function ProtocolStateBadge({ state, className }: { state: S; className?: string }) {\n const def = states[state];\n if (!def) {\n if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n console.warn(`StateBadge: no state \"${state}\"; known: ${Object.keys(states).join(', ')}`);\n }\n return <StateBadge className={className}>{String(state)}</StateBadge>;\n }\n return (\n <StateBadge tone={def.tone} title={def.hint} className={className}>\n {def.label}\n </StateBadge>\n );\n }\n return ProtocolStateBadge;\n}\n\n/* ── Bitcoin time ────────────────────────────────────────────────────── */\n\n/** A block height in tabular figures, linked to the block on mempool.space. */\nexport function BlockHeight({\n height,\n label = false,\n link = true,\n network = 'mainnet',\n className,\n}: {\n height: number;\n /** Say \"block 971,632\" rather than \"971,632\" (lowercase: it sits inside a sentence). */\n label?: boolean;\n link?: boolean;\n network?: Network;\n className?: string;\n}) {\n const text = `${label ? 'block ' : ''}${formatBlockHeight(height)}`;\n if (!link) return <span className={cn('oca-tabular', className)}>{text}</span>;\n return (\n <a\n href={explorerUrl('block', Math.trunc(height), network)}\n target=\"_blank\"\n rel=\"noreferrer\"\n title={`Block ${formatBlockHeight(height)} on mempool.space`}\n className={cn('oca-tabular underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground', className)}\n >\n {text}\n <span className=\"sr-only\"> (opens mempool.space in a new tab)</span>\n </a>\n );\n}\n\nexport type AnchorState = 'anchored' | 'pending' | 'unverified' | 'none' | 'fail';\n\nconst ANCHOR: Record<AnchorState, { label: string; tone: StateTone }> = {\n anchored: { label: 'Anchored', tone: 'good' },\n pending: { label: 'Anchor pending', tone: 'attention' },\n unverified: { label: 'Not checked', tone: 'quiet' },\n none: { label: 'Not anchored', tone: 'quiet' },\n fail: { label: 'Does not check out', tone: 'bad' },\n};\n\nfunction hostOf(url: string): string {\n try {\n return new URL(url).host;\n } catch {\n return url;\n }\n}\n\n/**\n * Whether a hash is in a Bitcoin block yet, and which one. Anchored names\n * the block and its time; pending says when and where it was submitted, so\n * \"pending\" can be checked; a proof that does not lead to its block says so.\n */\nexport function AnchorStatus({\n state,\n blockHeight,\n blockTime,\n submittedAt,\n calendar,\n message,\n network = 'mainnet',\n variant = 'detail',\n className,\n}: {\n state: AnchorState;\n blockHeight?: number;\n /** The block's time: unix seconds, a Date or an ISO string. */\n blockTime?: number | Date | string;\n /** When the hash went to a calendar. */\n submittedAt?: number | Date | string;\n /** The OpenTimestamps calendar it went to. */\n calendar?: string;\n /** Replace the line under the badge. */\n message?: ReactNode;\n network?: Network;\n /** `badge`: the badge alone, its line as a tooltip. */\n variant?: 'detail' | 'badge';\n className?: string;\n}) {\n const def = ANCHOR[state];\n const block = blockHeight !== undefined ? <BlockHeight height={blockHeight} label network={network} /> : null;\n const line: ReactNode =\n message ??\n (state === 'anchored' ? (\n block ? (\n <>\n In {block}\n {blockTime !== undefined ? ` · ${formatUtc(blockTime)}` : null}\n </>\n ) : (\n 'Its hash is in a Bitcoin block.'\n )\n ) : state === 'pending' ? (\n <>\n Submitted{submittedAt !== undefined ? ` ${formatUtc(submittedAt)}` : ''} to{' '}\n {calendar ? hostOf(calendar) : 'an OpenTimestamps calendar'}. Waiting for a Bitcoin block.\n </>\n ) : state === 'unverified' ? (\n <>The proof names {block ?? 'a block'}, but its header could not be fetched to check it.</>\n ) : state === 'fail' ? (\n <>The proof does not lead to {block ?? 'the block it names'}.</>\n ) : (\n 'No timestamp yet. The signature still checks offline.'\n ));\n if (variant === 'badge') {\n const plain = typeof line === 'string' ? line : undefined;\n return <StateBadge tone={def.tone} title={plain} className={className}>{def.label}</StateBadge>;\n }\n return (\n <div className={cn('flex flex-col items-start gap-1.5', className)}>\n <StateBadge tone={def.tone}>{def.label}</StateBadge>\n <p className=\"text-[0.875rem] leading-snug text-muted-foreground\">{line}</p>\n </div>\n );\n}\n\n/**\n * How far a block height is: \"In 368 blocks, about 2 days 13 hours\", or\n * \"Reached at block 972,000\". With `from`, a bar shows how much of the wait\n * has passed. Blocks come when they come, so the time is always \"about\".\n */\nexport function BlockCountdown({\n target,\n tip,\n from,\n reached = 'Reached',\n minutesPerBlock = 10,\n network = 'mainnet',\n className,\n}: {\n target: number;\n /** The chain tip now. Unknown: only the target shows. */\n tip?: number | null;\n /** Where the wait began, for the bar. */\n from?: number;\n /** The word once the target is reached: \"Revealed\", \"Closed\". */\n reached?: string;\n minutesPerBlock?: number;\n network?: Network;\n className?: string;\n}) {\n const known = typeof tip === 'number';\n const left = known ? target - tip : null;\n const done = left !== null && left <= 0;\n const share = known && from !== undefined && target > from ? Math.min(1, Math.max(0, (tip - from) / (target - from))) : null;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <p className=\"text-[0.9375rem] leading-snug\">\n {!known ? (\n <>\n At <BlockHeight height={target} label network={network} />\n </>\n ) : done ? (\n <>\n {reached} at <BlockHeight height={target} label network={network} />\n </>\n ) : (\n <>\n In <span className=\"oca-tabular font-medium\">{formatBlockHeight(left!)}</span> block{left === 1 ? '' : 's'}\n <span className=\"text-muted-foreground\">, {blocksToDuration(left!, minutesPerBlock)}</span>\n </>\n )}\n </p>\n {share !== null ? (\n <div\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(share * 100)}\n aria-label=\"Blocks passed\"\n className=\"h-1.5 overflow-hidden rounded-full bg-muted\"\n >\n <div className=\"h-full rounded-full bg-foreground\" style={{ width: `${share * 100}%` }} />\n </div>\n ) : null}\n {known && !done ? (\n <p className=\"text-[0.8125rem] text-muted-foreground\">\n Target <BlockHeight height={target} network={network} /> · tip <span className=\"oca-tabular\">{formatBlockHeight(tip)}</span>\n </p>\n ) : null}\n </div>\n );\n}\n\n/* ── Meter ───────────────────────────────────────────────────────────── */\n\n/**\n * One amount against a total: a tally, a goal, a strength. `ghost` adds a\n * hatched part after the value (pledged, not yet settled). For shares of a\n * whole, use SplitBar.\n */\nconst METER_FILL = {\n ink: 'bg-foreground',\n brand: 'bg-oca-orange-deep',\n good: 'bg-success',\n caution: 'bg-warning',\n bad: 'bg-destructive',\n} as const;\n\nexport function Meter({\n value,\n max,\n ghost,\n label,\n figure,\n tone = 'ink',\n size = 'md',\n className,\n}: {\n value: number;\n max: number;\n /** A further amount, drawn hatched after the value. */\n ghost?: number;\n label: ReactNode;\n /** The figure on the right: \"62%\", \"1.2M of 2M sats\". Default: the percentage. */\n figure?: ReactNode;\n /** `good`, `caution` and `bad` for a reading with a verdict: a password's strength. */\n tone?: 'ink' | 'brand' | 'good' | 'caution' | 'bad';\n size?: 'md' | 'sm';\n className?: string;\n}) {\n const id = useId();\n const total = max > 0 ? max : 1;\n const v = Math.max(0, Math.min(1, value / total));\n const g = ghost ? Math.max(0, Math.min(1 - v, ghost / total)) : 0;\n const pct = `${Math.round(v * 100)}%`;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-baseline justify-between gap-4 text-[0.875rem]\">\n <span id={id} className=\"min-w-0 truncate\">\n {label}\n </span>\n <span className=\"shrink-0 oca-tabular text-muted-foreground\">{figure ?? pct}</span>\n </div>\n <div\n role=\"meter\"\n aria-labelledby={id}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={typeof figure === 'string' ? figure : pct}\n className={cn('flex overflow-hidden rounded-full bg-muted', size === 'sm' ? 'h-1.5' : 'h-2.5')}\n >\n <div\n className={cn('h-full shrink-0 rounded-full', METER_FILL[tone])}\n style={{ width: `${v * 100}%` }}\n />\n {g > 0 ? (\n <div\n aria-hidden\n className=\"-ml-1.5 h-full shrink-0 rounded-r-full pl-1.5 text-foreground/45\"\n style={{\n width: `calc(${g * 100}% + 0.375rem)`,\n backgroundImage: 'repeating-linear-gradient(-45deg, currentColor 0 2px, transparent 2px 6px)',\n }}\n />\n ) : null}\n </div>\n </div>\n );\n}\n\n/* ── FilterChips ─────────────────────────────────────────────────────── */\n\nexport interface FilterOption<T extends string> {\n value: T;\n label: ReactNode;\n count?: number;\n}\n\n/**\n * Filters above a list, as chips: one at a time, or several with\n * `multiple`. Each chip is a toggle button a screen reader hears as pressed\n * or not. They scroll sideways on a phone rather than wrap.\n */\nexport function FilterChips<T extends string>({\n options,\n value,\n onChange,\n label,\n className,\n}: {\n options: FilterOption<T>[];\n label: string;\n className?: string;\n // The options name the values; `value` must not narrow them.\n} & (\n | { multiple?: false; value: NoInfer<T>; onChange: (v: NoInfer<T>) => void }\n | { multiple: true; value: NoInfer<T>[]; onChange: (v: NoInfer<T>[]) => void }\n)) {\n const tight = useDensity() === 'compact';\n const multi = Array.isArray(value);\n const isOn = (v: T) => (multi ? (value as T[]).includes(v) : value === v);\n const press = (v: T) => {\n if (multi) {\n const cur = value as T[];\n (onChange as (v: T[]) => void)(cur.includes(v) ? cur.filter((x) => x !== v) : [...cur, v]);\n } else (onChange as (v: T) => void)(v);\n };\n return (\n // Wraps rather than scrolls: every filter stays in view on a phone.\n <div role=\"group\" aria-label={label} className={cn('flex flex-wrap items-center gap-2 py-0.5', className)}>\n {options.map((o) => {\n const on = isOn(o.value);\n return (\n <button\n key={o.value}\n type=\"button\"\n aria-pressed={on}\n onClick={() => press(o.value)}\n className={cn(\n 'inline-flex shrink-0 items-center gap-1.5 rounded-full border px-3.5 text-[0.875rem] transition-colors',\n tight ? 'h-8' : 'h-9',\n on\n ? 'border-foreground bg-foreground text-background'\n : 'border-border bg-card text-muted-foreground hover:border-oca-hairline-strong hover:text-foreground'\n )}\n >\n {o.label}\n {o.count !== undefined ? <span className=\"oca-tabular\">{o.count.toLocaleString('en-US')}</span> : null}\n </button>\n );\n })}\n </div>\n );\n}\n\n/* ── ToolGrid ────────────────────────────────────────────────────────── */\n\nexport interface ToolItem {\n href: string;\n label: string;\n icon?: ReactNode;\n /** One line: what the tool does. */\n description?: ReactNode;\n active?: boolean;\n}\n\n/** A protocol's tools as cards, for its dashboard: icon, name, one line. Each card is one link. */\nexport function ToolGrid({\n tools,\n as: Heading = 'h2',\n className,\n}: {\n tools: readonly ToolItem[];\n /** Each tool's name is a heading: h2 under the page's title, h3 under a section's. */\n as?: 'h2' | 'h3';\n className?: string;\n}) {\n const tight = useDensity() === 'compact';\n const n = tools.length;\n return (\n <ul\n className={cn(\n 'grid grid-cols-1 gap-3 sm:grid-cols-2 md:gap-4',\n // Three or four sit in one row on a wide screen.\n n === 3 || n === 6 ? 'lg:grid-cols-3' : n === 4 ? 'xl:grid-cols-4' : null,\n className\n )}\n >\n {tools.map((t) => (\n <li key={t.href}>\n <div\n className={cn(\n 'group relative flex h-full flex-col rounded-[1.25rem] border border-border bg-card transition-colors',\n tight ? 'gap-3 p-5' : 'gap-4 p-6',\n 'hover:border-oca-hairline-strong 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'\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n {t.icon ? (\n <span className=\"flex size-10 items-center justify-center rounded-xl bg-muted text-foreground [&_svg]:size-5\">\n {t.icon}\n </span>\n ) : (\n <span />\n )}\n <ArrowRight\n aria-hidden\n className=\"size-4 text-muted-foreground transition-transform duration-200 group-hover:translate-x-0.5 group-hover:text-foreground\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Heading className=\"oca-title-sm\">\n <Link\n href={t.href}\n className=\"outline-none after:absolute after:inset-0 after:rounded-[1.25rem] after:content-['']\"\n >\n {t.label}\n </Link>\n </Heading>\n {t.description ? <p className=\"text-[0.9375rem] leading-relaxed text-muted-foreground\">{t.description}</p> : null}\n </div>\n </div>\n </li>\n ))}\n </ul>\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 { ChevronRight, Ellipsis, 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 type { FamilySlug } from '../family';\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 Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '../primitives/overlay';\nimport { FamilyMenu } from './family-menu';\n\nexport interface ShellNavItem {\n href: string;\n label: string;\n icon?: ReactNode;\n active?: boolean;\n /** Beside the label: a number shows as a count on a tab or the rail (99+), anything else as a dot. */\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 /** With one on every section, phones get the sections as tabs. */\n icon?: ReactNode;\n groups: ShellNavGroup[];\n}\n\nexport function 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/** A count (99+) for a number, a dot for anything else; the badge is read with the label. */\nfunction NavBadge({ badge, className }: { badge: ReactNode; className: string }) {\n if (typeof badge === 'number') {\n return (\n <span\n aria-hidden\n className={cn(\n 'absolute flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[0.625rem] font-medium leading-none text-primary-foreground ring-2 ring-background oca-tabular',\n className\n )}\n >\n {badge > 99 ? '99+' : badge}\n </span>\n );\n }\n // The deep orange: a dot is the whole signal, so it must clear 3:1 on the background.\n return <span aria-hidden className={cn('absolute size-2 rounded-full bg-oca-orange-deep ring-2 ring-background', className)} />;\n}\n\nconst TAB =\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\nfunction TabFace({ icon, label, badge, active }: { icon: ReactNode; label: string; badge?: ReactNode; active?: boolean }) {\n return (\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 active ? 'bg-card shadow-sm ring-1 ring-border [&_svg]:stroke-2' : '[&_svg]:stroke-[1.75]'\n )}\n >\n {icon}\n {badge ? <NavBadge badge={badge} className={typeof badge === 'number' ? '-top-1 right-0.5' : 'right-2.5 top-0.5'} /> : null}\n </span>\n <span className=\"max-w-full truncate px-0.5\">{label}</span>\n {badge ? <span className=\"sr-only\">{badge}</span> : null}\n </>\n );\n}\n\n/**\n * The phone's way around: up to five pages under the thumb, each one tap\n * away. Past five, four tabs and More, a sheet with the rest.\n */\nexport function TabBar({ items }: { items: ShellNavItem[] }) {\n const [more, setMore] = useState(false);\n const overflow = items.length > 5;\n const shown = overflow ? items.slice(0, 4) : items;\n const rest = overflow ? items.slice(4) : [];\n const restBadge = rest.find((it) => it.badge)?.badge;\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(${shown.length + (overflow ? 1 : 0)}, minmax(0, 1fr))` }}\n >\n {shown.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n aria-current={it.active ? 'page' : undefined}\n className={cn(TAB, it.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground')}\n >\n <TabFace icon={it.icon} label={it.label} badge={it.badge} active={it.active} />\n </Link>\n ))}\n {overflow ? (\n <Sheet open={more} onOpenChange={setMore}>\n <SheetTrigger\n className={cn(TAB, rest.some((it) => it.active) ? 'text-foreground' : 'text-muted-foreground hover:text-foreground')}\n >\n <TabFace icon={<Ellipsis />} label=\"More\" badge={restBadge ? true : undefined} active={rest.some((it) => it.active)} />\n </SheetTrigger>\n <SheetContent side=\"bottom\" className=\"pb-[calc(1.5rem+env(safe-area-inset-bottom))]\">\n <SheetTitle className=\"px-1 text-[1.0625rem] font-medium\">More</SheetTitle>\n <div className=\"mt-4 grid grid-cols-3 gap-2\">\n {rest.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n onClick={() => setMore(false)}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex min-h-20 flex-col items-center justify-center gap-2 rounded-2xl border px-2 text-center text-[0.8125rem] transition-colors',\n '[&_svg]:size-5',\n it.active ? 'border-foreground bg-card text-foreground' : 'border-border text-muted-foreground hover:text-foreground'\n )}\n >\n <span className=\"relative\">\n {it.icon}\n {it.badge ? <NavBadge badge={it.badge} className={typeof it.badge === 'number' ? '-right-3 -top-2' : '-right-1 -top-0.5'} /> : null}\n </span>\n <span className=\"max-w-full truncate\">{it.label}</span>\n {it.badge ? <span className=\"sr-only\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n </SheetContent>\n </Sheet>\n ) : null}\n </div>\n </nav>\n );\n}\n\n/** Two or more pages, each with an icon, take a tab bar (past five, with More). Without icons, the drawer. */\nexport function tabsFor(groups: ShellNavGroup[]): ShellNavItem[] | null {\n const items = groups.flatMap((g) => g.items);\n return items.length >= 2 && items.every((it) => it.icon) ? items : null;\n}\n\n/** Sections with an icon each are the phone's tabs; their pages stay in the menu. */\nfunction sectionTabs(sections: ShellSection[] | undefined, current: ShellSection | undefined): ShellNavItem[] | null {\n if (!sections || !current || sections.length < 2 || !sections.every((sec) => sec.icon)) return null;\n return sections.map((sec) => ({ href: sec.href, label: sec.label, icon: sec.icon, active: sec.id === current.id }));\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 every page has an icon, phones get a tab bar instead (past\n * five, four tabs and More): the pages sit under the thumb, the strip and the\n * menu button go (the sheet stays for a `footer`, without the pages), and\n * tablets keep the sheet. Sections with an icon each become the tabs, and\n * their pages stay in the sheet. Pages get the section through context:\n * PageHeader uses it as its eyebrow. `family` puts the family menu beside the\n * lockup. The account control and any banner are slots. `variant=\"rail\"` is\n * the messenger's frame instead.\n */\nexport function AppShell(props: AppShellProps) {\n return props.variant === 'rail' ? <RailShell {...props} /> : <SidebarShell {...props} />;\n}\n\nexport interface AppShellProps {\n /**\n * `sidebar` (default): a sidebar of pages from lg, content up to 72rem.\n * `rail`: a messenger's frame. The whole window, an icon rail from md\n * with each page's name on hover, the content full-bleed and managing\n * its own panes and scroll; `header` sits above it.\n */\n variant?: 'sidebar' | 'rail';\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 /** Mount the family menu beside the lockup, as SiteHeader does. Pass the site's slug to mark it. */\n family?: boolean | FamilySlug;\n /** The rail's: at its foot from md (an avatar linking to settings). The sidebar's: top right. */\n account?: ReactNode;\n banner?: ReactNode;\n footer?: ReactNode;\n /** `rail` only: the header above the rail and the content (a SiteHeader). */\n header?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nfunction SidebarShell({\n nav,\n sections,\n activeSection,\n page: pageOverride,\n persistent = [],\n home = '/',\n family,\n account,\n banner,\n footer,\n children,\n className,\n}: AppShellProps) {\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 sectionTabsFor = sectionTabs(sections, current);\n const tabs = current ? sectionTabsFor : 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 familyMenu = family ? <FamilyMenu current={typeof family === 'string' ? family : undefined} /> : null;\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. Section tabs leave the pages here.\n tabs && !sectionTabsFor && !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 {/* On a phone the section tabs are the switcher. */}\n {switcher ? <div className={sectionTabsFor ? 'max-md:hidden' : undefined}>{switcher}</div> : null}\n <div className={tabs && !sectionTabsFor ? '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 {familyMenu}\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 && !sectionTabsFor && !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 <div className=\"flex items-center gap-1\">\n <Link href={home} className=\"px-2\" aria-label=\"Home\">\n <Lockup size={26} />\n </Link>\n {familyMenu}\n </div>\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\nfunction RailItem({ item }: { item: ShellNavItem }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n href={item.href}\n aria-current={item.active ? 'page' : undefined}\n className={cn(\n 'relative flex size-10 items-center justify-center rounded-xl outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring',\n '[&_svg]:size-5 [&_svg]:shrink-0',\n item.active\n ? 'bg-card text-foreground shadow-sm ring-1 ring-border'\n : 'text-muted-foreground hover:bg-accent hover:text-foreground'\n )}\n >\n {item.icon}\n {/* The page's name, and its badge, for a screen reader; the tooltip shows the name. */}\n <span className=\"sr-only\">\n {item.label}\n {item.badge ? <>, {item.badge}</> : null}\n </span>\n {item.badge ? <NavBadge badge={item.badge} className={typeof item.badge === 'number' ? '-right-1 -top-1' : 'right-1 top-1'} /> : null}\n </Link>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{item.label}</TooltipContent>\n </Tooltip>\n );\n}\n\n/** The rail frame: header, an icon rail from md, the content full-bleed, the tab bar on a phone. */\nfunction RailShell({ nav = [], persistent = [], page: pageOverride, header, account, banner, children, className }: AppShellProps) {\n const main = nav.flatMap((g) => g.items);\n const foot = persistent.flatMap((g) => g.items);\n warnDuplicateLabels([...nav, ...persistent]);\n const tabs = tabsFor([{ items: [...main, ...foot] }]);\n const active = activeItem([...nav, ...persistent]);\n const place = useMemo(() => ({ page: pageOverride ?? active?.label }), [pageOverride, active?.label]);\n return (\n <ShellContext.Provider value={place}>\n <TooltipProvider delayDuration={300}>\n <div className={cn('flex h-dvh flex-col overflow-hidden bg-background', className)}>\n {header}\n {banner}\n <div className=\"flex min-h-0 flex-1\">\n <nav aria-label=\"Pages\" className=\"hidden w-14 shrink-0 flex-col items-center gap-1 border-r border-border py-3 md:flex\">\n {main.map((it) => (\n <RailItem key={it.href} item={it} />\n ))}\n <div className=\"mt-auto flex flex-col items-center gap-1\">\n {foot.map((it) => (\n <RailItem key={it.href} item={it} />\n ))}\n {account}\n </div>\n </nav>\n <main\n id=\"main-content\"\n className={cn('flex min-h-0 min-w-0 flex-1 flex-col', tabs && 'max-md:pb-[calc(3.5rem_+_env(safe-area-inset-bottom))]')}\n >\n {children}\n </main>\n </div>\n {tabs ? <TabBar items={tabs} /> : null}\n </div>\n </TooltipProvider>\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={`${name}, account menu`}\n >\n {/* The initial is drawn, not written: the button's text is the name it is read by. */}\n <span\n aria-hidden\n data-initial={initial}\n className=\"flex size-8 items-center justify-center rounded-full bg-foreground text-[0.8125rem] font-medium text-background before:content-[attr(data-initial)]\"\n />\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","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, OCHK_IO_FOOTER, 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 { ThemeToggle } from './app-shell';\nimport { FamilyList, FamilyMenu } from './family-menu';\n\nexport type { FooterColumn, NavItem } from '../lib/nav';\n\nfunction NavLink({\n item,\n className,\n onNavigate,\n line = false,\n}: {\n item: NavItem;\n className?: string;\n onNavigate?: () => void;\n /** Mark the active item with a bar on the header's bottom edge (the tool header). */\n line?: boolean;\n}) {\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 line && 'relative after:absolute after:inset-x-3 after:-bottom-[0.625rem] after:h-0.5 after:rounded-full',\n line && item.active && 'after:bg-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 md:max-lg:pl-2.5 md:max-lg:pr-2',\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 /** Leave the navigation out of the phone's menu (a page whose tab bar already holds it). */\n navOnPhone?: boolean;\n /** At the top of the phone's menu: links the actions hold on a wider screen. */\n menu?: ReactNode;\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 navOnPhone = true,\n menu: menuExtra,\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 phoneNav = navOnPhone ? nav : [];\n const menu = phoneNav.length > 0 || Boolean(family) || Boolean(menuExtra);\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 n.children?.length ? (\n <NavDropdown key={n.href} item={n} />\n ) : (\n // Between md and lg the family menu and the actions share the row: tighter.\n <NavLink key={n.href} item={n} line={tool} className={tool ? undefined : 'md:max-lg:px-2.5'} />\n )\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] md:max-lg:gap-2',\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 {menuExtra ? (\n <div className={cn('flex flex-col', (phoneNav.length > 0 || family) && 'border-b border-border pb-3')}>\n {menuExtra}\n </div>\n ) : null}\n {phoneNav.length > 0 ? (\n <nav aria-label=\"Main\" className=\"flex flex-col\">\n {phoneNav.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', phoneNav.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({ links }: { links: readonly NavItem[] }) {\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 {links.map((l) => (\n <li key={l.href}>\n {l.href.startsWith('/') ? (\n <Link href={l.href} className={FOOT_LINK}>\n {l.label}\n </Link>\n ) : (\n <a href={l.href} className={FOOT_LINK}>\n {l.label}\n </a>\n )}\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 /**\n * The legal row: Privacy, Terms, Security, Trademarks, Contact. `true` links\n * ochk.io's documents; a product that hosts its own passes its links\n * (`SELF_HOSTED_LEGAL_LINKS`).\n */\n legal?: boolean | readonly NavItem[];\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 const legalLinks = legal === true ? LEGAL_LINKS : legal || null;\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 {legalLinks || meta ? (\n <div className=\"flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:flex-wrap sm:items-center\">\n {legalLinks ? <LegalRow links={legalLinks} /> : 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 {legalLinks || 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 {legalLinks ? <LegalRow links={legalLinks} /> : null}\n {meta}\n </div>\n </div>\n ) : null}\n </footer>\n );\n}\n\n/**\n * ochk.io's footer, word for word, for ochk.io and the docs it serves: its\n * column and the family's, the fine print, who supports the open work, the\n * theme switch and the legal row. Pass `columns` to write ochk.io's own links\n * relative (oc-www, so they stay on the host that serves it).\n */\nexport function OchkIoFooter({ columns = OCHK_IO_FOOTER, className }: { columns?: readonly FooterColumn[]; className?: string }) {\n return (\n <SiteFooter\n columns={columns}\n family\n legal\n fineprint=\"Open protocols on Bitcoin. Anyone can check the result.\"\n meta={\n <div className=\"flex flex-wrap items-center justify-between gap-4\">\n <p>\n Open-source work on orangecheck is <span className=\"whitespace-nowrap\">supported by OpenSats.</span>\n </p>\n <ThemeToggle className=\"-mx-3\" />\n </div>\n }\n className={className}\n />\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 { OCHK_IO, protocolSite, type ProtocolSlug } from '../family';\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 protocol,\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 /** Where the lockup and \"Back to home\" go. Default: the protocol's page on ochk.io, else ochk.io. */\n home?: string;\n /** The protocol a tool site serves: its `/` redirects off-site, so home is the protocol's page. */\n protocol?: ProtocolSlug;\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 const homeHref = home ?? (protocol ? protocolSite(protocol).pageHref : OCHK_IO);\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={homeHref} 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={homeHref}\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 { ChevronDown, ChevronRight, PanelLeft } from 'lucide-react';\nimport Link from 'next/link';\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { OnThisPage, useHeadings } from '../components/docs';\nimport type { TocItem } from '../components/hero';\nimport { DOCS_HREF, OCHK_IO, OCHK_IO_NAV } from '../family';\nimport { cn } from '../lib/cn';\nimport { InDocsContext } from '../lib/docs-context';\nimport type { NavItem } from '../lib/nav';\nimport { Badge } from '../primitives/badge';\nimport { Sheet, SheetContent, SheetTitle, SheetTrigger } from '../primitives/overlay';\nimport { StatusBadge, type Status } from '../primitives/status-badge';\nimport { OchkIoFooter, SiteHeader, SkipLink } from './site';\n\n/* ── The docs' navigation ────────────────────────────────────────────── */\n\nexport interface DocsNavItem {\n href: string;\n label: ReactNode;\n /** A status word (\"testing\") or a small badge of your own. */\n badge?: Status | ReactNode;\n}\n\nexport interface DocsNavSection {\n label: string;\n items: DocsNavItem[];\n}\n\nconst STATUS_WORDS = new Set<string>(['live', 'testing', 'not-yet', 'paused', 'good', 'caution', 'refused']);\n\n/** \"/stamp/verify/\" and \"/stamp/verify?x#y\" are the page \"/stamp/verify\". */\nconst pathOf = (href: string) => href.split(/[?#]/)[0]!.replace(/(.)\\/$/, '$1');\n\n/**\n * The docs' sections, each folding open. The section holding this page is\n * always open and the page is marked with a bar beside it; other sections\n * open on a press and close again when you move to another section.\n */\nexport function DocsNav({\n sections,\n current,\n onNavigate,\n className,\n}: {\n sections: readonly DocsNavSection[];\n /** This page's path, as the items' hrefs write it. */\n current: string;\n onNavigate?: () => void;\n className?: string;\n}) {\n const here = pathOf(current);\n const activeSection = useMemo(\n () => sections.findIndex((s) => s.items.some((i) => pathOf(i.href) === here)),\n [sections, here]\n );\n const [peeked, setPeeked] = useState<Set<number>>(() => new Set());\n useEffect(() => setPeeked(new Set()), [activeSection]);\n const activeRef = useRef<HTMLAnchorElement>(null);\n useEffect(() => {\n const id = requestAnimationFrame(() => activeRef.current?.scrollIntoView({ block: 'nearest' }));\n return () => cancelAnimationFrame(id);\n }, [here]);\n const base = useId();\n return (\n <nav aria-label=\"Docs\" className={cn('flex flex-col gap-0.5', className)}>\n {sections.map((section, si) => {\n const isActive = si === activeSection;\n const open = isActive || peeked.has(si);\n const panel = `${base}-s${si}`;\n return (\n <div key={section.label}>\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={panel}\n onClick={() => {\n if (isActive) return;\n setPeeked((p) => {\n const n = new Set(p);\n if (n.has(si)) n.delete(si);\n else n.add(si);\n return n;\n });\n }}\n className={cn(\n 'flex min-h-9 w-full items-center justify-between gap-2 rounded-lg px-2.5 py-1.5 text-left text-[0.875rem] transition-colors',\n isActive ? 'font-medium text-foreground' : 'text-muted-foreground hover:bg-accent hover:text-foreground',\n isActive && 'cursor-default'\n )}\n >\n {section.label}\n <ChevronRight\n aria-hidden\n className={cn('size-3.5 shrink-0 text-oca-subtle transition-transform duration-200', open && 'rotate-90')}\n />\n </button>\n <ul id={panel} hidden={!open} className=\"mb-2 ml-2.5 mt-0.5 border-l border-border\">\n {section.items.map((item) => {\n const on = pathOf(item.href) === here;\n const badge =\n typeof item.badge === 'string' && STATUS_WORDS.has(item.badge) ? (\n <StatusBadge status={item.badge as Status} />\n ) : item.badge ? (\n <Badge tone=\"muted\">{item.badge}</Badge>\n ) : null;\n return (\n <li key={item.href}>\n <Link\n href={item.href}\n ref={on ? activeRef : undefined}\n onClick={onNavigate}\n aria-current={on ? 'page' : undefined}\n className={cn(\n '-ml-px flex min-h-9 items-center gap-2 border-l-2 py-1.5 pl-3.5 pr-2 text-[0.875rem] leading-snug transition-colors',\n on\n ? 'border-foreground font-medium text-foreground'\n : 'border-transparent text-muted-foreground hover:border-oca-hairline-strong hover:text-foreground'\n )}\n >\n <span className=\"min-w-0 flex-1\">{item.label}</span>\n {badge}\n </Link>\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n </nav>\n );\n}\n\n/* ── The shell ───────────────────────────────────────────────────────── */\n\n/** ochk.io's navigation with Docs marked: the docs are a part of ochk.io, not a site beside it. */\nexport const DOCS_HEADER_NAV: readonly NavItem[] = OCHK_IO_NAV.map((n) => (n.href === DOCS_HREF ? { ...n, active: true } : n));\n\nexport interface DocsShellProps {\n /** The docs' sections, for the sidebar and the phone's menu. */\n nav: readonly DocsNavSection[];\n /** This page's path, as the nav's hrefs write it. */\n current: string;\n /**\n * The nav item to mark and open, when the page has none of its own: a\n * deep SDK page (`/sdk/stamp-core/interfaces/X`) opens its package's\n * item (`/sdk/stamp-core`). Default: `current`.\n */\n navCurrent?: string;\n /** Replace the header. Default: ochk.io's, with Docs marked. */\n header?: ReactNode;\n /** The default header's search control (a SearchDialog). */\n search?: ReactNode;\n /** The default header's actions (a SessionAccount, a Sign in). */\n actions?: ReactNode;\n /** Above the page: Breadcrumbs. */\n breadcrumbs?: ReactNode;\n /**\n * The page's sections. Default: read from the page's h2s and h3s once it\n * renders, again whenever `current` changes.\n */\n toc?: TocItem[];\n /** Under the page: DocsPager. */\n pager?: ReactNode;\n /** Replace the footer. Default: ochk.io's (OchkIoFooter). */\n footer?: ReactNode;\n children: ReactNode;\n}\n\n/**\n * The docs' frame, in ochk.io's header and footer: the sections on the\n * left, the page in the middle, what is on it on the right. Below lg the\n * sections open from a bar under the header; below xl \"On this page\" folds\n * above the text. The page's text sits in #docs-content.\n */\nexport function DocsShell({\n nav,\n current,\n navCurrent,\n header,\n search,\n actions,\n breadcrumbs,\n toc,\n pager,\n footer,\n children,\n}: DocsShellProps) {\n const [menu, setMenu] = useState(false);\n useEffect(() => setMenu(false), [current]);\n const read = useHeadings('#docs-content', current);\n const items = toc ?? read.items;\n const activeId = toc ? undefined : read.activeId;\n const marked = navCurrent ?? current;\n const here = pathOf(marked);\n const place = useMemo(() => {\n for (const s of nav) {\n const it = s.items.find((i) => pathOf(i.href) === here);\n if (it) return { section: s.label, page: it.label };\n }\n return null;\n }, [nav, here]);\n return (\n <div className=\"flex min-h-dvh flex-col bg-background\">\n <SkipLink />\n {header ?? <SiteHeader home={OCHK_IO} family=\"docs\" nav={DOCS_HEADER_NAV} search={search} actions={actions} />}\n {/* Below lg: the sections behind one button, and where you are beside it. */}\n <div className=\"sticky top-16 z-30 border-b border-border bg-background/95 backdrop-blur-md supports-[backdrop-filter]:bg-background/90 md:top-[4.5rem] lg:hidden\">\n <div className=\"oca-container flex h-12 items-center gap-2\">\n <Sheet open={menu} onOpenChange={setMenu}>\n <SheetTrigger className=\"-ml-2 inline-flex h-10 min-w-0 items-center gap-2 rounded-full px-2.5 text-[0.875rem] hover:bg-accent\">\n <PanelLeft aria-hidden className=\"size-[1.125rem] shrink-0\" />\n <span className=\"sr-only\">Docs menu. </span>\n {place ? (\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span className=\"shrink-0 text-muted-foreground\">{place.section}</span>\n <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-oca-subtle\" />\n <span className=\"truncate font-medium\">{place.page}</span>\n </span>\n ) : (\n <span className=\"font-medium\">Docs</span>\n )}\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"w-[min(88vw,22rem)] gap-0 p-0\">\n <div className=\"border-b border-border px-5 py-4 pr-14\">\n <SheetTitle className=\"text-[1.0625rem] font-medium\">Docs</SheetTitle>\n </div>\n <div className=\"overflow-y-auto p-3\">\n <DocsNav sections={nav} current={marked} onNavigate={() => setMenu(false)} />\n </div>\n </SheetContent>\n </Sheet>\n </div>\n </div>\n <div className=\"oca-container flex-1\">\n <div className=\"lg:grid lg:grid-cols-[13.5rem_minmax(0,1fr)] lg:gap-x-10 xl:grid-cols-[13.5rem_minmax(0,1fr)_11rem]\">\n <div className=\"sticky top-[4.5rem] hidden max-h-[calc(100dvh-4.5rem)] self-start overflow-y-auto overscroll-contain py-8 pr-1 lg:block\">\n <DocsNav sections={nav} current={marked} />\n </div>\n <main id=\"main-content\" className=\"min-w-0 pb-16 pt-6 md:pt-8\">\n {/* Below lg the bar under the header already says where you are. */}\n {breadcrumbs ? <div className=\"mb-6 max-lg:hidden\">{breadcrumbs}</div> : null}\n {items.length > 1 ? (\n <details className=\"group mb-8 rounded-2xl border border-border bg-card xl:hidden\">\n <summary className=\"flex min-h-12 cursor-pointer list-none items-center justify-between px-4 text-[0.9375rem] font-medium [&::-webkit-details-marker]:hidden\">\n On this page\n <ChevronDown aria-hidden className=\"size-4 text-muted-foreground transition-transform group-open:rotate-180\" />\n </summary>\n <OnThisPage items={items} activeId={activeId} title={null} className=\"px-4 pb-4\" />\n </details>\n ) : null}\n <article id=\"docs-content\" className=\"max-w-[46rem]\">\n <InDocsContext.Provider value={true}>{children}</InDocsContext.Provider>\n </article>\n {pager ? <div className=\"mt-16 max-w-[46rem]\">{pager}</div> : null}\n </main>\n <div className=\"sticky top-[4.5rem] hidden max-h-[calc(100dvh-4.5rem)] self-start overflow-y-auto py-10 xl:block\">\n {items.length > 1 ? <OnThisPage items={items} activeId={activeId} /> : null}\n </div>\n </div>\n </div>\n {footer ?? <OchkIoFooter />}\n </div>\n );\n}\n","import { ArrowUpRight, CircleUser, LogOut } from 'lucide-react';\nimport { useRouter } from 'next/compat/router';\nimport type { NextRouter } from 'next/router';\nimport { useSyncExternalStore, type ReactNode } from 'react';\n\nimport type { ToolItem } from '../components/tools';\nimport { protocolSite, type ProtocolSlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { DensityProvider } from '../lib/density';\nimport { SiteHomeContext } from '../lib/site-home';\nimport { Button } from '../primitives/button';\nimport { StatusBadge } from '../primitives/status-badge';\nimport { AccountMenu, SideNav, TabBar, tabsFor, ThemeToggle, type AccountMenuItem } from './app-shell';\nimport { SiteFooter, SiteHeader, SkipLink } from './site';\n\n/* ── The account slot ────────────────────────────────────────────────── */\n\n/** Where the session stands: being checked, signed in, signed out, or the check failed. */\nexport type SessionState = 'checking' | 'in' | 'out' | 'unknown';\n\nexport const OCHK_APP_ACCOUNT = 'https://ochk.app/me/account';\n\n/** Back and forward; a router move re-renders the page, which reads the address again. */\nfunction onHistory(change: () => void) {\n window.addEventListener('popstate', change);\n return () => window.removeEventListener('popstate', change);\n}\n\n/** The page's path and query, never the fragment. Anything the URL parser would read as another host returns home. */\nfunction herePath(): string {\n const { href, origin, pathname, search } = window.location;\n const path = pathname + search;\n return new URL(path, href).origin === origin ? path : '/';\n}\n\n/** The route the server renders, with the base path; none for a dynamic route, whose template is no address. */\nfunction routePath(router: NextRouter | null): string | null {\n if (!router || router.pathname.includes('[')) return null;\n return router.basePath && router.pathname === '/' ? router.basePath : router.basePath + router.pathname;\n}\n\n/**\n * This site's sign-in page, set to return to the page the viewer is on:\n * `/signin?return_to=%2Fverify%3Fid%3D…`. The server renders the route\n * without its query, so hydration matches; the fragment is never read, so a\n * share link's secret stays off servers. Pass no path for none.\n */\nexport function useSignInHref(path?: string): string | undefined {\n const router = useRouter();\n const here = useSyncExternalStore(onHistory, herePath, () => routePath(router));\n if (!path) return undefined;\n return here ? `${path}?return_to=${encodeURIComponent(here)}` : path;\n}\n\n/**\n * The header's account control, for any session source: the account menu\n * when signed in, \"Sign in\" when not. While the check runs, the button holds\n * its place unseen, so the header never shifts and a signed-in person never\n * sees \"Sign in\" flash. A failed check offers the account page, which works\n * either way. SessionAccount (./session) drives it from auth-client.\n */\nexport function SessionAccountView({\n state,\n name,\n detail,\n items = [],\n signInHref,\n signInPath,\n signInLabel = 'Sign in',\n accountHref = OCHK_APP_ACCOUNT,\n onSignOut,\n nameFrom = 'lg',\n}: {\n state: SessionState;\n /** The account's name, as it chose to be shown. */\n name?: string;\n /** A second line: a short address. */\n detail?: string;\n /** This site's own items, above \"Your account\". */\n items?: (AccountMenuItem | 'separator')[];\n /** Where \"Sign in\" goes, as given. */\n signInHref?: string;\n /** This site's sign-in page (`/signin`): \"Sign in\" returns to the page the viewer is on. */\n signInPath?: string;\n signInLabel?: string;\n /** Where \"Your account\" goes: ochk.app. */\n accountHref?: string;\n onSignOut?: () => void;\n nameFrom?: 'sm' | 'lg';\n}) {\n const inPlace = useSignInHref(signInPath);\n if (state === 'in') {\n return (\n <AccountMenu\n name={name || 'Your account'}\n detail={detail}\n nameFrom={nameFrom}\n items={[\n ...items,\n ...(items.length > 0 ? (['separator'] as const) : []),\n { label: 'Your account', href: accountHref, icon: <CircleUser /> },\n 'separator',\n { label: 'Sign out', onSelect: onSignOut, icon: <LogOut /> },\n ]}\n />\n );\n }\n if (state === 'unknown') {\n return (\n <Button asChild size=\"sm\" variant=\"secondary\">\n <a href={accountHref}>Your account</a>\n </Button>\n );\n }\n return (\n // No box of its own: it sits exactly where the signed-in chip will. While checking it is only unseen.\n <span className={state === 'checking' ? 'contents invisible' : 'contents'} aria-hidden={state === 'checking' || undefined}>\n <Button asChild size=\"sm\" variant=\"secondary\" tabIndex={state === 'checking' ? -1 : undefined}>\n <a href={signInHref ?? inPlace ?? 'https://ochk.io/signin'}>{signInLabel}</a>\n </Button>\n </span>\n );\n}\n\n/* ── The shell ───────────────────────────────────────────────────────── */\n\nexport interface ToolShellProps {\n /** The protocol these tools serve. Its word, its page on ochk.io and its status come from the registry. */\n protocol: ProtocolSlug;\n /** create · verify · discover · playground, in the family's words; give each an icon for the phone's tab bar. */\n tools: readonly ToolItem[];\n /** Where the lockup and the protocol's word go. Default: the protocol's page on ochk.io. */\n home?: string;\n /** The account control: SessionAccount, or SessionAccountView. */\n account?: ReactNode;\n /** List the tools in a rail on the left from lg (a dashboard page), not in the header. */\n rail?: boolean;\n /** Under the tools in the rail: Docs, Spec. */\n railFooter?: ReactNode;\n /**\n * `tool`: pages that scroll, with a footer. `app`: the full window, no\n * footer, the page managing its own scroll (an inbox, a workspace).\n */\n variant?: 'tool' | 'app';\n /** A SiteBanner above the header. */\n banner?: ReactNode;\n /** Replace the footer, or `false` for none. Default: the compact family footer. */\n footer?: ReactNode | false;\n children: ReactNode;\n}\n\n/**\n * The frame for a protocol's tools: a slim full-width header (orangecheck ·\n * stamp, linking the protocol's page on ochk.io; the family menu, the tools,\n * \"About stamp\", the status when it is not live, the account, the theme), the\n * page, and the compact family footer. Everything inside is set at compact density. On a phone the\n * tools move to a tab bar under the thumb when there are two to five, each\n * with an icon.\n */\nexport function ToolShell({\n protocol,\n tools,\n home,\n account,\n rail = false,\n railFooter,\n variant = 'tool',\n banner,\n footer,\n children,\n}: ToolShellProps) {\n const p = protocolSite(protocol);\n const homeHref = home ?? p.pageHref;\n const app = variant === 'app';\n const tabs = app ? null : tabsFor([{ items: [...tools] }]);\n const about = (\n <a\n href={p.pageHref}\n className=\"inline-flex items-center gap-1 rounded-full px-3 py-2 text-[0.9375rem] text-muted-foreground transition-colors hover:text-foreground\"\n >\n About {p.label}\n <ArrowUpRight aria-hidden className=\"size-3.5\" />\n </a>\n );\n return (\n <DensityProvider density=\"compact\">\n <div\n className={cn(\n 'flex flex-col bg-background',\n app ? 'h-dvh overflow-hidden' : 'min-h-dvh',\n tabs && 'max-md:pb-[calc(3.5rem_+_env(safe-area-inset-bottom))]'\n )}\n >\n <SkipLink />\n {banner}\n <SiteHeader\n variant=\"tool\"\n home={homeHref}\n product={p.label}\n family={protocol}\n nav={tools.map((t) => ({ href: t.href, label: t.label, active: t.active }))}\n navOnPhone={!tabs}\n menu={<div className=\"[&>a]:px-3 [&>a]:py-3 [&>a]:text-[1.0625rem]\">{about}</div>}\n // With a rail, the tools leave the header from lg.\n className={cn(rail && 'lg:[&_nav[aria-label=Main]]:hidden')}\n actions={\n <>\n <span className=\"hidden lg:contents\">{about}</span>\n {p.status !== 'live' ? <StatusBadge status={p.status} className=\"max-sm:hidden\" /> : null}\n <ThemeToggle className=\"max-sm:hidden\" />\n {account}\n </>\n }\n />\n <div className={cn('mx-auto flex w-full', app ? 'min-h-0 flex-1' : 'max-w-[90rem] flex-1')}>\n {rail ? (\n <aside className=\"sticky top-14 hidden h-[calc(100dvh-3.5rem)] w-60 shrink-0 flex-col gap-6 overflow-y-auto px-4 py-6 lg:flex\">\n <SideNav groups={[{ label: 'Tools', items: tools.map(({ href, label, icon, active }) => ({ href, label, icon, active })) }]} />\n {railFooter ? (\n <div className=\"mt-auto flex flex-col gap-0.5 px-3 text-[0.875rem] text-muted-foreground [&_a:hover]:text-foreground [&_a]:py-1.5 [&_a]:transition-colors\">\n {railFooter}\n </div>\n ) : null}\n </aside>\n ) : null}\n <main\n id=\"main-content\"\n className={cn('min-w-0 flex-1', app ? 'flex min-h-0 flex-col' : 'px-4 pb-16 pt-8 md:px-8 md:pt-10')}\n >\n {/* An ErrorPage inside goes home to the protocol's page, as the lockup does. */}\n <SiteHomeContext.Provider value={homeHref}>\n {app ? children : <div className=\"mx-auto w-full max-w-[72rem]\">{children}</div>}\n </SiteHomeContext.Provider>\n </main>\n </div>\n {app || footer === false ? null : (footer ?? <SiteFooter compact family legal />)}\n {tabs ? <TabBar items={tabs} /> : null}\n </div>\n </DensityProvider>\n );\n}\n","import { highlight, linesToHtml, parseCodeMeta, parseLineRanges, readDiff, type CodeLine } from './highlight';\n\n/*\n * A rehype plugin for MDX (@next/mdx, @mdx-js/mdx): highlights every fenced\n * code block at build time and reads its meta, so a page ships coloured code\n * with no highlighter in the browser.\n *\n * ```ts title=\"gate.ts\" {2,4} a caption and two marked lines\n * ```diff + and - lines (or `diff` in the meta)\n * ```bash showLineNumbers numbered lines\n *\n * Each block becomes <pre data-oca-code data-html=\"…\" data-lang data-title\n * data-diff data-line-numbers data-eol>, which mdxComponents' `pre` hands to\n * CodeBlock. The highlighted markup travels as one string per block rather\n * than as an element per token, so a page's JavaScript grows by the size of\n * its code, not by a call for every word in it. No dependencies: it walks\n * the tree itself.\n */\n\ninterface HastNode {\n type: string;\n tagName?: string;\n value?: string;\n properties?: Record<string, unknown>;\n children?: HastNode[];\n data?: { meta?: string | null };\n}\n\nexport interface RehypeCodeOptions {\n /**\n * Replace the built-in highlighter, for instance with shiki's tokens\n * mapped onto these kinds. Return null to fall back to the built-in one.\n */\n tokenize?: (code: string, lang: string | undefined) => CodeLine[] | null;\n /** Fences to leave as they are. Default: mermaid (drawn by Diagram). */\n skip?: readonly string[];\n}\n\nfunction textOf(node: HastNode): string {\n if (node.type === 'text') return node.value ?? '';\n return (node.children ?? []).map(textOf).join('');\n}\n\nfunction langOf(code: HastNode): string | undefined {\n const cls = code.properties?.className;\n const list = Array.isArray(cls) ? cls : typeof cls === 'string' ? cls.split(' ') : [];\n for (const c of list) {\n const m = String(c).match(/^language-(.+)$/);\n if (m) return m[1];\n }\n return undefined;\n}\n\nexport function rehypeCode(options: RehypeCodeOptions = {}) {\n const skip = new Set(options.skip ?? ['mermaid']);\n const visit = (node: HastNode) => {\n for (const child of node.children ?? []) {\n const code = child.type === 'element' && child.tagName === 'pre' ? child.children?.[0] : undefined;\n if (code && code.type === 'element' && code.tagName === 'code' && child.children?.length === 1) {\n const lang = langOf(code);\n if (lang && skip.has(lang)) continue;\n const meta = parseCodeMeta(code.data?.meta);\n let source = textOf(code);\n const newline = /\\n$/.test(source);\n const diff = meta.diff || lang === 'diff' ? readDiff(source) : null;\n if (diff) source = diff.code;\n const lines = options.tokenize?.(source, lang) ?? highlight(source, lang === 'diff' ? undefined : lang);\n child.properties = {\n ...child.properties,\n dataOcaCode: '',\n dataHtml: linesToHtml(lines, { highlight: parseLineRanges(meta.highlight), diff: diff?.diff }),\n ...(lang ? { dataLang: lang } : {}),\n ...(meta.title ? { dataTitle: meta.title } : {}),\n ...(diff ? { dataDiff: '' } : {}),\n ...(meta.lineNumbers ? { dataLineNumbers: '' } : {}),\n ...(newline ? { dataEol: '' } : {}),\n };\n child.children = [];\n continue;\n }\n visit(child);\n }\n };\n return (tree: HastNode) => visit(tree);\n}\n","import type { AnchorHTMLAttributes, HTMLAttributes, ImgHTMLAttributes, InputHTMLAttributes, ReactNode } from 'react';\n\nimport { CodeBlock, CodeTabs, InstallTabs } from '../components/code-block';\nimport {\n ApiTable,\n Callout,\n CardGrid,\n codeLang,\n codeText,\n Diagram,\n DocsHeading,\n LinkCard,\n MdxTable,\n Step,\n Steps,\n type MermaidLoader,\n} from '../components/docs';\nimport { ProtocolGrid } from '../components/family-grids';\nimport { SpecCard } from '../components/protocol';\nimport { TextLink } from '../components/text-link';\nimport { cn } from '../lib/cn';\nimport { StatusBadge } from '../primitives/status-badge';\n\n/*\n * Markdown in the system's type: hand the map to MDX (useMDXComponents or\n * <MDXProvider components>) and every heading, paragraph, list, table,\n * quote and code fence takes its place. Pair it with rehypeCode (./code) so\n * fences arrive highlighted from the build; without it, a fence is\n * highlighted when the page renders.\n *\n * The blocks a page writes by name are in the map too: Callout, Steps and\n * Step, LinkCard and CardGrid, ApiTable, CodeTabs, InstallTabs, SpecCard,\n * ProtocolGrid, StatusBadge.\n */\n\n\nexport interface MdxOptions {\n /** `() => import('mermaid')`: draws ```mermaid fences as diagrams. Without it they show as code. */\n mermaid?: MermaidLoader;\n}\n\ntype PreProps = HTMLAttributes<HTMLPreElement> & {\n 'data-oca-code'?: string;\n 'data-html'?: string;\n 'data-lang'?: string;\n 'data-title'?: string;\n 'data-diff'?: string;\n 'data-line-numbers'?: string;\n 'data-eol'?: string;\n};\n\nexport function createMdxComponents({ mermaid }: MdxOptions = {}) {\n function Pre(props: PreProps) {\n // Highlighted at build time by rehypeCode.\n if (props['data-oca-code'] !== undefined) {\n return (\n <CodeBlock\n html={props['data-html'] ?? ''}\n lang={props['data-lang']}\n caption={props['data-title']}\n diff={props['data-diff'] !== undefined}\n lineNumbers={props['data-line-numbers'] !== undefined}\n trailingNewline={props['data-eol'] !== undefined}\n className=\"my-6\"\n />\n );\n }\n const lang = codeLang(props.children);\n const code = codeText(props.children);\n if (lang === 'mermaid' && mermaid) return <Diagram chart={code} load={mermaid} />;\n return (\n <CodeBlock\n code={code}\n lang={lang === 'mermaid' ? undefined : lang}\n caption={lang === 'mermaid' ? 'Diagram source' : undefined}\n className=\"my-6\"\n />\n );\n }\n\n function A({ href, children, ...rest }: AnchorHTMLAttributes<HTMLAnchorElement>) {\n // In-page anchors and footnote links stay plain.\n if (!href || href.startsWith('#')) {\n return (\n <a href={href} {...rest} className=\"text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\">\n {children}\n </a>\n );\n }\n return <TextLink href={href}>{children}</TextLink>;\n }\n\n const heading = (as: 'h1' | 'h2' | 'h3' | 'h4') =>\n function Heading(props: HTMLAttributes<HTMLHeadingElement>) {\n return <DocsHeading as={as} {...props} />;\n };\n\n // TypeDoc writes h5 for a method's \"Returns\": a label over what follows, not a section.\n const minor = (Tag: 'h5' | 'h6') =>\n function Minor({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return <Tag className={cn('mb-2 mt-6 scroll-mt-28 text-[0.9375rem] font-medium leading-snug text-foreground', className)} {...props} />;\n };\n\n return {\n h1: heading('h1'),\n h2: heading('h2'),\n h3: heading('h3'),\n h4: heading('h4'),\n p: ({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) => (\n <p className={cn('my-4 text-[1rem] leading-[1.75] text-muted-foreground md:text-[1.0625rem]', className)} {...props} />\n ),\n a: A,\n strong: (props: HTMLAttributes<HTMLElement>) => <strong className=\"font-medium text-foreground\" {...props} />,\n h5: minor('h5'),\n h6: minor('h6'),\n ul: ({ className, ...props }: HTMLAttributes<HTMLUListElement>) => (\n <ul\n className={cn(\n 'my-4 list-disc space-y-1.5 pl-5 text-[1rem] leading-[1.7] text-muted-foreground marker:text-oca-subtle md:text-[1.0625rem]',\n // A GitHub task list: the box replaces the bullet.\n className?.includes('contains-task-list') && 'list-none pl-0',\n className\n )}\n {...props}\n />\n ),\n ol: ({ className, ...props }: HTMLAttributes<HTMLOListElement>) => (\n <ol\n className={cn(\n 'my-4 list-decimal space-y-1.5 pl-5 text-[1rem] leading-[1.7] text-muted-foreground marker:text-oca-subtle md:text-[1.0625rem]',\n className\n )}\n {...props}\n />\n ),\n li: ({ className, ...props }: HTMLAttributes<HTMLLIElement>) => (\n <li\n className={cn(\n 'pl-1 [&>p]:my-1 [&>ul]:my-1.5 [&>ol]:my-1.5',\n // A wrapped task starts under its text, not under the box.\n className?.includes('task-list-item') && 'pl-6 -indent-6',\n className\n )}\n {...props}\n />\n ),\n input: (props: InputHTMLAttributes<HTMLInputElement>) =>\n props.type === 'checkbox' ? (\n <input\n {...props}\n className={cn('mr-2 size-4 translate-y-[2px] align-baseline accent-foreground', props.className)}\n aria-label={props.checked ? 'Done' : 'To do'}\n />\n ) : (\n <input {...props} />\n ),\n blockquote: ({ children }: { children?: ReactNode }) => <Callout>{children}</Callout>,\n hr: () => <hr className=\"my-10 border-border\" />,\n table: MdxTable,\n code: ({ className, ...props }: HTMLAttributes<HTMLElement>) => (\n <code\n className={cn('break-words rounded-md bg-muted px-1.5 py-0.5 font-mono text-[0.875em] text-foreground', className)}\n {...props}\n />\n ),\n pre: Pre,\n img: ({ className, alt = '', ...props }: ImgHTMLAttributes<HTMLImageElement>) => (\n <img alt={alt} loading=\"lazy\" className={cn('my-6 h-auto max-w-full rounded-2xl border border-border', className)} {...props} />\n ),\n Callout,\n Steps,\n Step,\n LinkCard,\n CardGrid,\n ApiTable,\n CodeBlock,\n CodeTabs,\n InstallTabs,\n SpecCard,\n ProtocolGrid,\n StatusBadge,\n ...(mermaid\n ? { Diagram: (p: { chart: string; caption?: ReactNode }) => <Diagram {...p} load={mermaid} /> }\n : {}),\n };\n}\n\n/** Every key it maps, each a component: what MDX's useMDXComponents takes. */\nexport type MdxComponentMap = ReturnType<typeof createMdxComponents>;\n\n/** The map with no diagrams; createMdxComponents({ mermaid }) draws them. */\nexport const mdxComponents: MdxComponentMap = createMdxComponents();\n"]}
1
+ {"version":3,"sources":["../src/tokens/palette.ts","../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/lib/shared-context.ts","../src/lib/density.ts","../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/components/code-card.tsx","../src/code/highlight.ts","../src/format/index.ts","../src/lib/shell-context.ts","../src/components/data.tsx","../src/components/code-block.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/family/index.ts","../src/lib/column.ts","../src/lib/site-home.ts","../src/components/error-page.tsx","../src/components/apps.tsx","../src/components/figures.tsx","../src/components/blocks.tsx","../src/components/text-link.tsx","../src/components/legal.tsx","../src/lib/docs-context.ts","../src/components/family-grids.tsx","../src/components/docs.tsx","../src/components/protocol.tsx","../src/components/verify.tsx","../src/components/parts.tsx","../src/components/search.tsx","../src/components/tools.tsx","../src/chrome/family-menu.tsx","../src/chrome/app-shell.tsx","../src/chrome/site.tsx","../src/chrome/sign-in-frame.tsx","../src/chrome/docs-shell.tsx","../src/chrome/tool-shell.tsx","../src/code/rehype.ts","../src/mdx/index.tsx"],"names":["Separator","SonnerToaster","forwardRef","Button","jsx","jsxs","cva","Card","Input","Textarea","Label","Fragment","SelectTrigger","useContext","SelectContent","SelectItem","Checkbox","Switch","RadioGroup","RadioGroupItem","DialogContent","DialogTitle","DialogDescription","SheetContent","PopoverContent","TooltipContent","DropdownMenuContent","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","useState","useEffect","createContext","Tabs","TabsList","TabsTrigger","TabsContent","useId","ChevronDown","useRef","createElement","emit","at","isValidElement","cloneElement","useCallback","done","Check","useMemo","subscribe","useSyncExternalStore","TabsPrimitive2","TONE","protocol","Link","highlight","pad","LINK","ChevronRight","ArrowRight","ArrowUpRight","Children","current","RadioGroupPrimitive2","SearchButton","DialogPrimitive2","Lock","useTheme","Icon","Menu","useRouter"],"mappings":"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","file":"index.mjs","sourcesContent":["// Generated from styles/tokens.css by scripts/gen-palette.mjs. Do not edit: change tokens.css and run yarn build.\n\n/** Every colour token in light mode, resolved to its colour. */\nexport const lightPalette = {\n accent: '#f4f4f4',\n accentDisplay: '#f55819',\n accentForeground: '#0a0a0a',\n accentInk: '#c73f09',\n background: '#fafafa',\n border: '#ececec',\n brand: '#f66d36',\n brandForeground: '#0a0a0a',\n card: '#ffffff',\n cardForeground: '#0a0a0a',\n chart1: '#ea580b',\n chart2: '#2563eb',\n chart3: '#9d2b77',\n chart4: '#92400e',\n chartDown: '#c2262e',\n chartGrid: '#ececec',\n chartNeutral: '#8a8f96',\n chartUp: '#15803d',\n codeAdded: '#86d39b',\n codeAddedLine: '#1a2c20',\n codeComment: '#909397',\n codeFunction: '#9db4ec',\n codeKeyword: '#e3a8c2',\n codeLine: '#2a2a2a',\n codeLink: '#9db4ec',\n codeMark: '#232323',\n codeNumber: '#fcb781',\n codePackage: '#e99a8f',\n codeProperty: '#9db4ec',\n codePunctuation: '#d5d8dc',\n codeRemoved: '#f19a9a',\n codeRemovedLine: '#2f1c1c',\n codeString: '#e99a8f',\n codeSurface: '#161616',\n codeTag: '#e3a8c2',\n codeType: '#8fd0c2',\n destructive: '#c2262e',\n destructiveForeground: '#ffffff',\n foreground: '#0a0a0a',\n hairlineStrong: '#dadada',\n info: '#1d4ed8',\n infoForeground: '#ffffff',\n ink: '#0a0a0a',\n inkCard: '#1e1e1e',\n inkEyebrow: '#f0835a',\n inkForeground: '#ffffff',\n inkLine: '#2a2a2a',\n inkMuted: '#d5d8dc',\n inkSubtle: '#909397',\n inkTitle: '#fcb781',\n input: '#8f8f8f',\n muted: '#f2f2f2',\n mutedForeground: '#54585e',\n ocWalletReady: '#15803d',\n ocWalletSurface: '#ffffff',\n orange: '#f66d36',\n orangeDeep: '#ea580b',\n orangeLight: '#fb933c',\n outline: '#f2cfc3',\n peach: '#fed8ab',\n popover: '#ffffff',\n popoverForeground: '#0a0a0a',\n primary: '#0a0a0a',\n primaryForeground: '#ffffff',\n ring: '#ea580b',\n secondary: '#ffffff',\n secondaryForeground: '#0a0a0a',\n skeleton: '#e8e8e8',\n sphereFrom: '#ff6f33',\n sphereTo: '#ffd9c4',\n subtleForeground: '#686c72',\n success: '#15803d',\n successForeground: '#ffffff',\n tableHead: '#ededed',\n warning: '#a15c07',\n warningForeground: '#ffffff',\n} as const;\n\n/** Every colour token in dark mode, resolved to its colour. */\nexport const darkPalette = {\n accent: '#1e1e1e',\n accentDisplay: '#f66d36',\n accentForeground: '#fafafa',\n accentInk: '#f0835a',\n background: '#0a0a0a',\n bandLine: '#262626',\n border: '#2a2a2a',\n brand: '#f66d36',\n brandForeground: '#0a0a0a',\n card: '#161616',\n cardForeground: '#fafafa',\n chart1: '#f66d36',\n chart2: '#3b82f6',\n chart3: '#f9a8d4',\n chart4: '#fde047',\n chartDown: '#f87171',\n chartGrid: '#2a2a2a',\n chartNeutral: '#62676e',\n chartUp: '#4ade80',\n codeAdded: '#86d39b',\n codeAddedLine: '#132519',\n codeComment: '#909397',\n codeFunction: '#9db4ec',\n codeKeyword: '#e3a8c2',\n codeLine: '#2a2a2a',\n codeLink: '#9db4ec',\n codeMark: '#1b1b1b',\n codeNumber: '#fcb781',\n codePackage: '#e99a8f',\n codeProperty: '#9db4ec',\n codePunctuation: '#d5d8dc',\n codeRemoved: '#f19a9a',\n codeRemovedLine: '#271414',\n codeString: '#e99a8f',\n codeSurface: '#0e0e0e',\n codeTag: '#e3a8c2',\n codeType: '#8fd0c2',\n destructive: '#f87171',\n destructiveForeground: '#0a0a0a',\n foreground: '#fafafa',\n hairlineStrong: '#333333',\n iconRing: '#333333',\n iconTile: '#1e1e1e',\n info: '#93c5fd',\n infoForeground: '#0a0a0a',\n ink: '#171717',\n inkCard: '#1e1e1e',\n inkEyebrow: '#f0835a',\n inkForeground: '#ffffff',\n inkLine: '#2a2a2a',\n inkMuted: '#d5d8dc',\n inkSubtle: '#909397',\n inkTitle: '#fcb781',\n input: '#6a6a6a',\n muted: '#1e1e1e',\n mutedForeground: '#a3a6aa',\n ocWalletReady: '#4ade80',\n ocWalletSurface: '#161616',\n orange: '#f66d36',\n orangeDeep: '#ea580b',\n orangeLight: '#fb933c',\n outline: '#3a2a24',\n peach: '#fed8ab',\n popover: '#1a1a1a',\n popoverForeground: '#fafafa',\n primary: '#fafafa',\n primaryForeground: '#0a0a0a',\n ring: '#f66d36',\n secondary: '#1c1c1c',\n secondaryForeground: '#fafafa',\n skeleton: '#222222',\n sphereFrom: '#ff6f33',\n sphereTo: '#ffd9c4',\n subtleForeground: '#8b8e93',\n success: '#4ade80',\n successForeground: '#0a0a0a',\n tableHead: '#1e1e1e',\n warning: '#fbbf24',\n warningForeground: '#0a0a0a',\n} as const;\n","/*\n * The palette as data, for places CSS variables cannot reach: OG images,\n * canvas and WebGL, charts, email. Light and dark are generated from\n * styles/tokens.css; scripts/check-mirror.mjs fails the build when the\n * generated file or a brand value drifts.\n */\nimport { darkPalette, lightPalette } from './palette';\n\nexport { darkPalette, lightPalette } from './palette';\n\nexport const APP_ATTRIBUTE = 'data-oc-app';\nexport const APP_ID = 'ochk';\n\nexport const appColors = {\n /** Every colour token, generated from tokens.css (palette.ts): the chart series, code, ink and status colours too. */\n light: lightPalette,\n dark: darkPalette,\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 CSSProperties,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { useTheme } from 'next-themes';\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. */\n/*\n * sonner paints a toast from its own variables (white, or black in dark), and\n * they outrank a class. Set to the tokens, a toast is the popover in both modes.\n */\nconst TOAST_COLOURS = {\n '--normal-bg': 'var(--popover)',\n '--normal-text': 'var(--popover-foreground)',\n '--normal-border': 'var(--border)',\n} as CSSProperties;\n\n/** Toasts in the page's mode: it reads next-themes, so a site passes nothing for dark. */\nexport function Toaster({ style, ...props }: ToasterProps) {\n const { resolvedTheme } = useTheme();\n return (\n <SonnerToaster\n theme={resolvedTheme === 'dark' ? 'dark' : resolvedTheme === 'light' ? 'light' : 'system'}\n style={{ ...TOAST_COLOURS, ...style }}\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 { createContext, type Context } from 'react';\n\n/**\n * A context that is the same object in every entry. Each entry (./chrome,\n * ./components, ./primitives) is bundled on its own, so a plain\n * createContext in a shared module makes one context per entry, and a\n * provider from one entry is invisible to a reader from another. Keyed on\n * globalThis by name, there is one.\n */\nexport function sharedContext<T>(name: string, initial: T): Context<T> {\n const key = Symbol.for(`@orangecheck/app-design/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T> | undefined>;\n return (store[key] ??= createContext<T>(initial));\n}\n","import { createElement, useContext, type ReactNode } from 'react';\n\nimport { sharedContext } from './shared-context';\n\n/*\n * How tightly data and fields are set. A public page is `comfortable`; a\n * tool is `compact` (36px fields, 14px table text, smaller stat cards).\n * ToolShell sets it for everything inside, dialogs included (a React\n * context crosses a portal where a CSS scope would not); a prop on one\n * component still wins.\n */\nexport type Density = 'comfortable' | 'compact';\n\nconst DensityContext = sharedContext<Density>('density', 'comfortable');\n\nexport function DensityProvider({ density, children }: { density: Density; children: ReactNode }) {\n return createElement(DensityContext.Provider, { value: density }, children);\n}\n\nexport function useDensity(): Density {\n return useContext(DensityContext);\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 useContext,\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';\nimport { useDensity } from '../lib/density';\nimport { sharedContext } from '../lib/shared-context';\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\n/* `sm` is 36px for a tool's dense forms; the text stays 16px on phones. */\nconst FIELD_SIZE = {\n md: 'h-11 px-3.5',\n sm: 'h-9 rounded-[0.625rem] px-3 md:text-[0.875rem]',\n} as const;\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** `sm` (36px) for a tool's dense forms. Defaults to the density around it. */\n size?: 'md' | 'sm';\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { className, type = 'text', size, ...props },\n ref\n) {\n const density = useDensity();\n const s = size ?? (density === 'compact' ? 'sm' : 'md');\n return (\n <input\n ref={ref}\n type={type}\n data-ui=\"input\"\n data-size={s}\n className={cn(fieldBase, FIELD_SIZE[s], className)}\n {...props}\n />\n );\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\n/** What Field hands its control: the id its label names, its hint and error, whether it is invalid. */\nexport interface FieldControlProps {\n id: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: true;\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 /**\n * The control, which receives id, aria-describedby and aria-invalid. Or a\n * function given them, for a control inside a box of its own: an input\n * with a popover anchored under it, `(c) => <div className=\"relative\"><Input {...c} />{popover}</div>`.\n */\n children: ReactElement | ((control: FieldControlProps) => ReactNode);\n /** The control's id, when something else must know it. Default: a generated one. */\n id?: string;\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, id: fixedId, className, hideLabel, action }: FieldProps) {\n const generated = useId();\n const id = fixedId ?? generated;\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const wiring: FieldControlProps = {\n id,\n 'aria-describedby': [hintId, errorId].filter(Boolean).join(' ') || undefined,\n 'aria-invalid': error ? true : undefined,\n };\n const control =\n typeof children === 'function'\n ? children(wiring)\n : isValidElement(children)\n ? cloneElement(children as ReactElement<Record<string, unknown>>, { ...wiring })\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\n/*\n * Field wires its label to its child by id, and Select's root renders no\n * element of its own. So Select takes the field's id, description and\n * invalid state and hands them to its trigger, the element a label names.\n */\ninterface SelectWiring {\n id?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: boolean;\n}\nconst SelectFieldContext = sharedContext<SelectWiring | null>('select-field', null);\n\nexport function Select({\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': invalid,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Root> & SelectWiring) {\n return (\n <SelectFieldContext.Provider value={{ id, 'aria-describedby': describedBy, 'aria-invalid': invalid }}>\n <SelectPrimitive.Root {...props} />\n </SelectFieldContext.Provider>\n );\n}\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> & { size?: 'md' | 'sm' }\n>(function SelectTrigger({ className, children, size, ...props }, ref) {\n const density = useDensity();\n const field = useContext(SelectFieldContext);\n const s = size ?? (density === 'compact' ? 'sm' : 'md');\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n id={field?.id}\n aria-describedby={field?.['aria-describedby']}\n aria-invalid={field?.['aria-invalid']}\n className={cn(fieldBase, FIELD_SIZE[s], 'flex items-center justify-between gap-2 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 // Positioned, so sr-only text deep in a wide row scrolls and clips with the row.\n 'relative 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 /** Ask for it twice (a passphrase): `true`, or the second field's label. Refuses until the two match. */\n confirmField?: boolean | ReactNode;\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 [again, setAgain] = useState('');\n const [error, setError] = useState<ReactNode>(null);\n const [mismatch, setMismatch] = useState(false);\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 if (o.confirmField && again !== value) {\n setMismatch(true);\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 setMismatch(false);\n }}\n />\n </Field>\n {o.confirmField ? (\n <Field\n label={o.confirmField === true ? 'Type it again' : o.confirmField}\n error={mismatch ? 'The two do not match.' : null}\n className=\"mt-4\"\n >\n <Input\n type={o.secret ? 'password' : 'text'}\n autoComplete={o.secret ? 'new-password' : 'off'}\n value={again}\n onChange={(e) => {\n setAgain(e.target.value);\n setMismatch(false);\n }}\n />\n </Field>\n ) : null}\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/////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 /** 3 for a sub-heading, set in under its h2. */\n level?: 2 | 3;\n}\n\n/** The id of the heading being read: the topmost one in the upper third of the screen. */\nexport function useActiveHeading(ids: string[]): string | undefined {\n const [active, setActive] = useState<string | undefined>(ids[0]);\n const key = ids.join('|');\n useEffect(() => {\n // A new page starts at its first heading, not wherever the last one was.\n setActive(key.split('|')[0] || undefined);\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 type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\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 * Syntax highlighting with no dependency and no async step, so code is\n * coloured in the server's HTML: at build time in the docs (rehypeCode), and\n * in a page's own render for code made at run time (an envelope, an install\n * line). It reads the languages the family writes: TypeScript and JavaScript\n * (with JSX), JSON, shell, Python, YAML and diffs. Anything else is shown as\n * plain text, never guessed at.\n *\n * Each token names a kind; the kind is a class, and the class is a colour in\n * tokens.css (--oca-code-*). One palette for every highlighter: the shiki\n * theme in ./theme maps TextMate scopes onto the same variables.\n */\n\nexport type TokenKind =\n | 'keyword'\n | 'string'\n | 'number'\n | 'function'\n | 'type'\n | 'property'\n | 'comment'\n | 'tag'\n | 'url';\n\nexport interface Token {\n text: string;\n kind?: TokenKind;\n}\n\n/** One line of code, as tokens. */\nexport type CodeLine = Token[];\n\n/** The class each kind is drawn with (styles/code.css). */\nexport const TOKEN_CLASS: Record<TokenKind, string> = {\n keyword: 'oca-k',\n string: 'oca-s',\n number: 'oca-n',\n function: 'oca-f',\n type: 'oca-y',\n property: 'oca-p',\n comment: 'oca-c',\n tag: 'oca-g',\n url: 'oca-u',\n};\n\ntype Grammar = 'js' | 'json' | 'shell' | 'python' | 'yaml' | 'diff' | 'plain';\n\nconst ALIASES: Record<string, Grammar> = {\n ts: 'js',\n typescript: 'js',\n tsx: 'js',\n js: 'js',\n javascript: 'js',\n jsx: 'js',\n mjs: 'js',\n cjs: 'js',\n json: 'json',\n jsonc: 'json',\n json5: 'json',\n bash: 'shell',\n sh: 'shell',\n shell: 'shell',\n zsh: 'shell',\n console: 'shell',\n terminal: 'shell',\n py: 'python',\n python: 'python',\n yaml: 'yaml',\n yml: 'yaml',\n diff: 'diff',\n};\n\n/** The languages read, by the names a code fence uses. */\nexport const CODE_LANGS: readonly string[] = Object.keys(ALIASES);\n\nexport function grammarOf(lang?: string | null): Grammar {\n return (lang && ALIASES[lang.toLowerCase()]) || 'plain';\n}\n\n/* ── Scanner ─────────────────────────────────────────────────────────── */\n\ntype Emit = (text: string, kind?: TokenKind) => void;\n\n/** Collects tokens, merging neighbours of one kind so the markup stays small. */\nfunction collector(): { emit: Emit; tokens: Token[] } {\n const tokens: Token[] = [];\n const emit: Emit = (text, kind) => {\n if (!text) return;\n const last = tokens[tokens.length - 1];\n if (last && last.kind === kind) last.text += text;\n else tokens.push(kind ? { text, kind } : { text });\n };\n return { emit, tokens };\n}\n\nfunction at(re: RegExp, src: string, i: number): string | null {\n re.lastIndex = i;\n const m = re.exec(src);\n return m ? m[0] : null;\n}\n\nconst WS = /[ \\t]+/y;\nconst NEWLINE = /\\r?\\n/y;\n\n/* ── JavaScript, TypeScript, JSX ─────────────────────────────────────── */\n\nconst JS_KEYWORDS = new Set(\n (\n 'abstract as async await break case catch class const continue debugger declare default delete do else enum export ' +\n 'extends finally for from function get if implements import in infer instanceof interface is keyof let module ' +\n 'namespace new of override private protected public readonly return satisfies set static super switch this throw ' +\n 'try type typeof unique var void while with yield'\n ).split(' ')\n);\nconst JS_CONSTANTS = new Set(['true', 'false', 'null', 'undefined', 'NaN', 'Infinity']);\nconst TS_PRIMITIVES = new Set(['string', 'number', 'boolean', 'bigint', 'symbol', 'object', 'unknown', 'any', 'never']);\n\n/* MAX_SATS, DOCS_HREF: a constant. JSON, URL: a namespace, read as a type. */\nconst isConstant = (m: string) => /^[A-Z][A-Z\\d_]+$/.test(m) && (m.includes('_') || m.length > 4);\n\nconst JS_LINE_COMMENT = /\\/\\/[^\\n]*/y;\nconst JS_BLOCK_COMMENT = /\\/\\*[\\s\\S]*?(?:\\*\\/|$)/y;\nconst JS_TEMPLATE = /`(?:\\\\[\\s\\S]|[^\\\\`])*`?/y;\nconst JS_STRING = /'(?:\\\\.|[^\\\\'\\n])*'?|\"(?:\\\\.|[^\\\\\"\\n])*\"?/y;\nconst JS_NUMBER = /(?:0[xX][\\da-fA-F_]+|0[bB][01_]+|0[oO][0-7_]+|\\d[\\d_]*(?:\\.[\\d_]+)?(?:[eE][+-]?\\d+)?|\\.\\d[\\d_]*(?:[eE][+-]?\\d+)?)n?/y;\nconst JS_IDENT = /[A-Za-z_$][\\w$]*/y;\nconst JS_DECORATOR = /@[A-Za-z_$][\\w$.]*/y;\nconst JS_CALL_AFTER = /\\s*(?:<[\\w$\\s,.[\\]|&'\"]*>)?\\s*\\(/y;\nconst JS_TAG = /<\\/?(?=[A-Za-z])/y;\nconst JS_TAG_NAME = /[A-Za-z][\\w$.:-]*/y;\nconst JS_PUNCT = /=>|\\.\\.\\.|[{}()[\\];,.<>=+\\-*/%!?:&|^~#]/y;\n/* Where a JSX tag can start: after one of these, or at the start of a line. */\nconst JSX_BEFORE = new Set(['(', ',', '=', '?', ':', '{', '[', ';', '>', '&&', '||', '=>', 'return']);\n\nfunction scanJs(src: string, emit: Emit, jsx: boolean) {\n let i = 0;\n let prev = ''; // the last significant token, for property access and JSX starts\n let tagDepth = 0; // inside <Tag …> before its >\n let braceInTag = 0; // a {…} expression inside a tag's attributes\n const sig = (t: string) => {\n prev = t;\n };\n while (i < src.length) {\n let m: string | null;\n if ((m = at(WS, src, i)) || (m = at(NEWLINE, src, i))) {\n emit(m);\n i += m.length;\n continue;\n }\n if ((m = at(JS_LINE_COMMENT, src, i)) || (m = at(JS_BLOCK_COMMENT, src, i))) {\n emit(m, 'comment');\n i += m.length;\n continue;\n }\n if ((m = at(JS_TEMPLATE, src, i)) || (m = at(JS_STRING, src, i))) {\n emit(m, 'string');\n i += m.length;\n sig('\"');\n continue;\n }\n if (jsx && tagDepth === 0 && (m = at(JS_TAG, src, i)) && (prev === '' || JSX_BEFORE.has(prev))) {\n const name = at(JS_TAG_NAME, src, i + m.length);\n if (name) {\n emit(m);\n emit(name, 'tag');\n i += m.length + name.length;\n tagDepth = 1;\n braceInTag = 0;\n sig('tag');\n continue;\n }\n }\n if (jsx && tagDepth > 0 && braceInTag === 0) {\n if (src.startsWith('/>', i) || src[i] === '>') {\n const close = src[i] === '>' ? '>' : '/>';\n emit(close);\n i += close.length;\n tagDepth = 0;\n sig('>');\n continue;\n }\n if ((m = at(JS_IDENT, src, i)) && /^\\s*=/.test(src.slice(i + m.length, i + m.length + 4))) {\n emit(m, 'property');\n i += m.length;\n continue;\n }\n if ((m = at(JS_IDENT, src, i))) {\n emit(m, 'property');\n i += m.length;\n continue;\n }\n if (src[i] === '{') braceInTag = 1;\n } else if (jsx && tagDepth > 0 && braceInTag > 0) {\n if (src[i] === '{') braceInTag++;\n else if (src[i] === '}') braceInTag--;\n }\n if ((m = at(JS_DECORATOR, src, i))) {\n emit(m, 'function');\n i += m.length;\n sig('@');\n continue;\n }\n if ((m = at(JS_IDENT, src, i))) {\n const end = i + m.length;\n let kind: TokenKind | undefined;\n if (prev !== '.' && JS_CONSTANTS.has(m)) kind = 'number';\n else if (prev !== '.' && JS_KEYWORDS.has(m)) kind = 'keyword';\n else if (at(JS_CALL_AFTER, src, end) !== null) kind = 'function';\n else if (prev !== '.' && TS_PRIMITIVES.has(m)) kind = 'type';\n else if (isConstant(m)) kind = 'number';\n else if (/^[A-Z]/.test(m)) kind = 'type';\n emit(m, kind);\n i = end;\n sig(kind === 'keyword' ? m : 'id');\n continue;\n }\n if ((m = at(JS_NUMBER, src, i))) {\n emit(m, 'number');\n i += m.length;\n sig('0');\n continue;\n }\n if ((m = at(JS_PUNCT, src, i))) {\n emit(m);\n i += m.length;\n sig(m === '.' ? '.' : m);\n continue;\n }\n emit(src[i]!);\n i++;\n }\n}\n\n/* ── JSON ────────────────────────────────────────────────────────────── */\n\nconst JSON_STRING = /\"(?:\\\\.|[^\\\\\"\\n])*\"?/y;\nconst JSON_KEY_AFTER = /\\s*:/y;\nconst JSON_NUMBER = /-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/y;\nconst JSON_WORD = /true|false|null/y;\n\nfunction scanJson(src: string, emit: Emit) {\n let i = 0;\n while (i < src.length) {\n let m: string | null;\n if ((m = at(JS_LINE_COMMENT, src, i)) || (m = at(JS_BLOCK_COMMENT, src, i))) {\n emit(m, 'comment');\n } else if ((m = at(JSON_STRING, src, i))) {\n emit(m, at(JSON_KEY_AFTER, src, i + m.length) !== null ? 'property' : 'string');\n } else if ((m = at(JSON_NUMBER, src, i)) || (m = at(JSON_WORD, src, i))) {\n emit(m, 'number');\n } else {\n m = src[i]!;\n emit(m);\n }\n i += m.length;\n }\n}\n\n/* ── Shell ───────────────────────────────────────────────────────────── */\n\nconst SH_KEYWORDS = new Set(\n 'if then else elif fi for in do done case esac while until function return export local select time'.split(' ')\n);\nconst SH_PROMPT = /\\$ (?=\\S)/y;\nconst SH_COMMENT = /#[^\\n]*/y;\nconst SH_SINGLE = /'[^']*'?/y;\nconst SH_DOUBLE = /\"(?:\\\\.|[^\\\\\"])*\"?/y;\nconst SH_VAR = /\\$(?:\\{[^}\\n]*\\}?|[A-Za-z_][\\w]*|[@*#?$!\\d])/y;\nconst SH_URL = /https?:\\/\\/[^\\s'\"`)]+/y;\nconst SH_FLAG = /--?[A-Za-z][\\w-]*/y;\nconst SH_ASSIGN = /[A-Za-z_][\\w]*(?==)/y;\nconst SH_VALUE = /=[^\\s|&;()<>'\"`$]*/y;\nconst SH_WORD = /[^\\s|&;()<>'\"`$#]+/y;\nconst SH_OPERATOR = /\\|\\||&&|[|;&]|\\$\\(|[()<>]/y;\n\nfunction scanShell(src: string, emit: Emit) {\n let i = 0;\n let command = true; // the next word is a command\n let lineStart = true;\n while (i < src.length) {\n let m: string | null;\n if ((m = at(NEWLINE, src, i))) {\n emit(m);\n i += m.length;\n // A trailing backslash continues the command on the next line.\n command = !/\\\\\\s*$/.test(src.slice(0, i - m.length));\n lineStart = true;\n continue;\n }\n if ((m = at(WS, src, i))) {\n emit(m);\n i += m.length;\n continue;\n }\n if (lineStart && (m = at(SH_PROMPT, src, i))) {\n emit(m, 'comment');\n i += m.length;\n lineStart = false;\n continue;\n }\n lineStart = false;\n // A # starts a comment at the start of a word, not inside one (url#frag).\n if ((m = at(SH_COMMENT, src, i)) && (i === 0 || /\\s/.test(src[i - 1]!))) {\n emit(m, 'comment');\n i += m.length;\n continue;\n }\n if ((m = at(SH_SINGLE, src, i)) || (m = at(SH_DOUBLE, src, i))) {\n emit(m, 'string');\n i += m.length;\n command = false;\n continue;\n }\n if ((m = at(SH_OPERATOR, src, i))) {\n emit(m);\n i += m.length;\n command = m !== ')' && m !== '>' && m !== '<';\n continue;\n }\n if ((m = at(SH_VAR, src, i))) {\n emit(m, 'type');\n i += m.length;\n command = false;\n continue;\n }\n if ((m = at(SH_URL, src, i))) {\n emit(m, 'url');\n i += m.length;\n command = false;\n continue;\n }\n if (command && (m = at(SH_ASSIGN, src, i))) {\n // FOO=bar cmd: the name, then its value; the command comes after.\n emit(m, 'property');\n i += m.length;\n const v = at(SH_VALUE, src, i)!;\n emit(v);\n i += v.length;\n continue;\n }\n if ((m = at(SH_FLAG, src, i)) && !command) {\n emit(m, 'keyword');\n i += m.length;\n continue;\n }\n if ((m = at(SH_WORD, src, i))) {\n if (command && SH_KEYWORDS.has(m)) emit(m, 'keyword');\n else if (command) {\n emit(m, 'function');\n // `sudo npm …`, `npx tsx …`: the next word is the real command.\n command = m === 'sudo' || m === 'npx' || m === 'env' || m === 'time';\n i += m.length;\n continue;\n } else emit(m);\n i += m.length;\n continue;\n }\n emit(src[i]!);\n i++;\n }\n}\n\n/* ── Python ──────────────────────────────────────────────────────────── */\n\nconst PY_KEYWORDS = new Set(\n (\n 'and as assert async await break class continue def del elif else except finally for from global if import in is ' +\n 'lambda match case nonlocal not or pass raise return try while with yield self cls'\n ).split(' ')\n);\nconst PY_CONSTANTS = new Set(['True', 'False', 'None']);\nconst PY_TYPES = new Set(['int', 'str', 'bool', 'float', 'bytes', 'list', 'dict', 'tuple', 'set', 'object']);\nconst PY_COMMENT = /#[^\\n]*/y;\nconst PY_TRIPLE = /[rRbBuUfF]{0,2}(?:\"\"\"[\\s\\S]*?(?:\"\"\"|$)|'''[\\s\\S]*?(?:'''|$))/y;\nconst PY_STRING = /[rRbBuUfF]{0,2}(?:'(?:\\\\.|[^\\\\'\\n])*'?|\"(?:\\\\.|[^\\\\\"\\n])*\"?)/y;\nconst PY_NUMBER = /(?:0[xX][\\da-fA-F_]+|\\d[\\d_]*(?:\\.[\\d_]*)?(?:[eE][+-]?\\d+)?j?)/y;\nconst PY_IDENT = /[A-Za-z_]\\w*/y;\nconst PY_DECORATOR = /@[A-Za-z_][\\w.]*/y;\nconst PY_CALL_AFTER = /\\s*\\(/y;\n\nfunction scanPython(src: string, emit: Emit) {\n let i = 0;\n let prev = '';\n while (i < src.length) {\n let m: string | null;\n if ((m = at(WS, src, i)) || (m = at(NEWLINE, src, i))) {\n emit(m);\n i += m.length;\n continue;\n }\n if ((m = at(PY_COMMENT, src, i))) {\n emit(m, 'comment');\n } else if ((m = at(PY_TRIPLE, src, i)) || (m = at(PY_STRING, src, i))) {\n // An identifier like `f` or `rb` is only a prefix when a quote follows.\n if (/^[A-Za-z]+$/.test(m)) {\n emit(m);\n } else emit(m, 'string');\n prev = '\"';\n } else if ((m = at(PY_DECORATOR, src, i))) {\n emit(m, 'function');\n prev = '@';\n } else if ((m = at(PY_IDENT, src, i))) {\n let kind: TokenKind | undefined;\n if (PY_CONSTANTS.has(m)) kind = 'number';\n else if (prev !== '.' && PY_KEYWORDS.has(m)) kind = 'keyword';\n else if (prev === 'def' || at(PY_CALL_AFTER, src, i + m.length) !== null) kind = 'function';\n else if (prev === 'class' || /^[A-Z][a-z]/.test(m) || PY_TYPES.has(m)) kind = 'type';\n else if (isConstant(m)) kind = 'number';\n emit(m, kind);\n prev = kind === 'keyword' ? m : 'id';\n } else if ((m = at(PY_NUMBER, src, i))) {\n emit(m, 'number');\n prev = '0';\n } else {\n m = src[i]!;\n emit(m);\n prev = m;\n }\n i += m.length;\n }\n}\n\n/* ── YAML ────────────────────────────────────────────────────────────── */\n\nconst YAML_KEY = /[ \\t]*(?:- )?[\\w.$/-]+(?=[ \\t]*:(?:\\s|$))/y;\nconst YAML_VALUE_WORD = /(?:true|false|null|yes|no|~|-?\\d+(?:\\.\\d+)?)(?=\\s*(?:#|$))/y;\n\nfunction scanYaml(src: string, emit: Emit) {\n let i = 0;\n let lineStart = true;\n while (i < src.length) {\n let m: string | null;\n if ((m = at(NEWLINE, src, i))) {\n emit(m);\n i += m.length;\n lineStart = true;\n continue;\n }\n if (lineStart && (m = at(YAML_KEY, src, i))) {\n const dash = m.match(/^([ \\t]*(?:- )?)/)![1]!;\n emit(dash);\n emit(m.slice(dash.length), 'property');\n i += m.length;\n lineStart = false;\n continue;\n }\n lineStart = false;\n if ((m = at(SH_COMMENT, src, i)) && (i === 0 || /\\s/.test(src[i - 1]!))) emit(m, 'comment');\n else if ((m = at(SH_SINGLE, src, i)) || (m = at(JSON_STRING, src, i))) emit(m, 'string');\n else if ((m = at(YAML_VALUE_WORD, src, i))) emit(m, 'number');\n else if ((m = at(SH_URL, src, i))) emit(m, 'url');\n else {\n m = src[i]!;\n emit(m);\n }\n i += m.length;\n }\n}\n\n/* ── Lines ───────────────────────────────────────────────────────────── */\n\n/** Split tokens into lines; a token that spans lines (a block comment) is cut at each break. */\nfunction toLines(tokens: Token[]): CodeLine[] {\n const lines: CodeLine[] = [[]];\n for (const t of tokens) {\n const parts = t.text.split(/\\r?\\n/);\n parts.forEach((part, j) => {\n if (j > 0) lines.push([]);\n if (part) lines[lines.length - 1]!.push(t.kind ? { text: part, kind: t.kind } : { text: part });\n });\n }\n return lines;\n}\n\n/**\n * Highlight `code` written in `lang` (a fence name: ts, json, bash…). Returns\n * one array of tokens per line. An unknown language comes back as plain text.\n */\nexport function highlight(code: string, lang?: string | null): CodeLine[] {\n // A trailing newline (every fence has one) is not an extra empty line.\n const src = code.replace(/\\r?\\n$/, '');\n const grammar = grammarOf(lang);\n const { emit, tokens } = collector();\n const name = (lang ?? '').toLowerCase();\n switch (grammar) {\n case 'js':\n scanJs(src, emit, name === 'tsx' || name === 'jsx');\n break;\n case 'json':\n scanJson(src, emit);\n break;\n case 'shell':\n scanShell(src, emit);\n break;\n case 'python':\n scanPython(src, emit);\n break;\n case 'yaml':\n scanYaml(src, emit);\n break;\n default:\n emit(src);\n }\n return toLines(tokens);\n}\n\n/* ── Line marks: highlight, diff ─────────────────────────────────────── */\n\nexport type DiffMark = 'add' | 'remove';\n\nexport interface LineMarks {\n /** 1-based line numbers to mark as highlighted. */\n highlight?: ReadonlySet<number>;\n /** 1-based line numbers added or removed. */\n diff?: ReadonlyMap<number, DiffMark>;\n}\n\n/**\n * Read `+` and `-` at the start of each line as a diff, and return the code\n * without them and the marks. A line that starts with neither is context; a\n * single leading space (as `git diff` writes context) is dropped too.\n */\nexport function readDiff(code: string): { code: string; diff: Map<number, DiffMark> } {\n const diff = new Map<number, DiffMark>();\n const lines = code.replace(/\\r?\\n$/, '').split(/\\r?\\n/);\n const out = lines.map((line, i) => {\n const c = line[0];\n if (c === '+' || c === '-') {\n diff.set(i + 1, c === '+' ? 'add' : 'remove');\n return line.slice(1);\n }\n return c === ' ' ? line.slice(1) : line;\n });\n return { code: out.join('\\n'), diff };\n}\n\n/** \"1,3-5\" → {1, 3, 4, 5}. Out-of-order and repeated parts are fine. */\nexport function parseLineRanges(spec: string | readonly number[] | undefined | null): Set<number> {\n if (!spec) return new Set();\n if (typeof spec !== 'string') return new Set(spec);\n const out = new Set<number>();\n for (const part of spec.split(',')) {\n const m = part.trim().match(/^(\\d+)(?:\\s*-\\s*(\\d+))?$/);\n if (!m) continue;\n const a = Number(m[1]);\n const b = m[2] ? Number(m[2]) : a;\n for (let n = Math.min(a, b); n <= Math.max(a, b) && n - a < 10_000; n++) out.add(n);\n }\n return out;\n}\n\n/** What a fence's meta string says: ```ts title=\"gate.ts\" {2,4} diff showLineNumbers */\nexport interface CodeMeta {\n title?: string;\n highlight?: string;\n diff?: boolean;\n lineNumbers?: boolean;\n}\n\nexport function parseCodeMeta(meta?: string | null): CodeMeta {\n if (!meta) return {};\n const out: CodeMeta = {};\n const title = meta.match(/(?:title|filename)=(?:\"([^\"]*)\"|'([^']*)'|(\\S+))/);\n if (title) out.title = title[1] ?? title[2] ?? title[3];\n const lines = meta.match(/\\{([\\d,\\s-]+)\\}/);\n if (lines) out.highlight = lines[1]!.replace(/\\s+/g, '');\n const rest = meta.replace(/(?:title|filename)=(?:\"[^\"]*\"|'[^']*'|\\S+)/, '');\n if (/\\bdiff\\b/.test(rest)) out.diff = true;\n if (/\\b(?:showLineNumbers|lineNumbers|numbers)\\b/.test(rest)) out.lineNumbers = true;\n return out;\n}\n\n/* ── HTML ────────────────────────────────────────────────────────────── */\n\nconst ESCAPE: Record<string, string> = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' };\nexport function escapeHtml(s: string): string {\n return s.replace(/[&<>\"]/g, (c) => ESCAPE[c]!);\n}\n\n/**\n * Lines as markup for CodeBlock's `html`: one `<span data-line>` per line\n * (with `data-mark` or `data-diff` where marked), tokens as classed spans,\n * lines joined by newlines so selecting and copying keeps them.\n */\nexport function linesToHtml(lines: CodeLine[], marks: LineMarks = {}): string {\n return lines\n .map((line, i) => {\n const n = i + 1;\n const attrs = [\n 'data-line=\"\"',\n marks.highlight?.has(n) ? 'data-mark=\"\"' : '',\n marks.diff?.has(n) ? `data-diff=\"${marks.diff.get(n)}\"` : '',\n ]\n .filter(Boolean)\n .join(' ');\n const body = line\n .map((t) => (t.kind ? `<span class=\"${TOKEN_CLASS[t.kind]}\">${escapeHtml(t.text)}</span>` : escapeHtml(t.text)))\n .join('');\n return `<span ${attrs}>${body}</span>`;\n })\n .join('\\n');\n}\n\n/** Highlight and render in one step, reading `diff` and line ranges as CodeBlock does. */\nexport function highlightToHtml(\n code: string,\n lang?: string | null,\n opts: { highlight?: string | readonly number[]; diff?: boolean } = {}\n): string {\n const d = opts.diff ? readDiff(code) : null;\n return linesToHtml(highlight(d ? d.code : code, lang), {\n highlight: parseLineRanges(opts.highlight),\n diff: d?.diff,\n });\n}\n","/*\n * Formatting for the things the family shows over and over: Bitcoin\n * explorer links, shortened ids, block heights, the time to a block. No\n * React, so server code and OG renderers import it too.\n */\n\nexport type Network = 'mainnet' | 'testnet' | 'testnet4' | 'signet';\nexport type ExplorerKind = 'address' | 'tx' | 'block';\n\nconst EXPLORER = 'https://mempool.space';\n\n/** A mempool.space link for an address, a transaction, or a block (by height or hash). */\nexport function explorerUrl(kind: ExplorerKind, value: string | number, network: Network = 'mainnet'): string {\n const net = network === 'mainnet' ? '' : `/${network}`;\n return `${EXPLORER}${net}/${kind}/${encodeURIComponent(String(value))}`;\n}\n\n/** head…tail, leaving short values whole. */\nexport function shortenMiddle(value: string, head = 8, tail = 6): string {\n return value.length <= head + tail + 1 ? value : `${value.slice(0, head)}…${value.slice(-tail)}`;\n}\n\n/** 971632 → \"971,632\". */\nexport function formatBlockHeight(height: number): string {\n return Math.trunc(height).toLocaleString('en-US');\n}\n\n/**\n * How long a number of blocks takes at ten minutes each, in the largest two\n * units: \"about 40 minutes\", \"about 2 days 13 hours\". Blocks come when they\n * come, so it is always \"about\".\n */\nexport function blocksToDuration(blocks: number, minutesPerBlock = 10): string {\n const minutes = Math.max(0, Math.round(blocks * minutesPerBlock));\n if (minutes < 60) return `about ${minutes} minute${minutes === 1 ? '' : 's'}`;\n const units: [number, string][] = [\n [60 * 24 * 7, 'week'],\n [60 * 24, 'day'],\n [60, 'hour'],\n [1, 'minute'],\n ];\n const parts: string[] = [];\n let rest = minutes;\n for (const [size, word] of units) {\n const n = Math.floor(rest / size);\n if (n > 0 && parts.length < 2) {\n parts.push(`${n} ${word}${n === 1 ? '' : 's'}`);\n rest -= n * size;\n } else if (parts.length > 0) break;\n }\n return `about ${parts.join(' ')}`;\n}\n\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\n/**\n * A moment in UTC, the same for every reader: \"20 Oct 2026, 09:14 UTC\".\n * Takes a Date, an ISO string, or unix seconds. `date: true` drops the time.\n */\nexport function formatUtc(at: Date | string | number, opts: { date?: boolean } = {}): string {\n const d = typeof at === 'number' ? new Date(at * 1000) : new Date(at);\n if (Number.isNaN(d.getTime())) return '—';\n const day = `${d.getUTCDate()} ${MONTHS[d.getUTCMonth()]} ${d.getUTCFullYear()}`;\n if (opts.date) return day;\n const hh = String(d.getUTCHours()).padStart(2, '0');\n const mm = String(d.getUTCMinutes()).padStart(2, '0');\n return `${day}, ${hh}:${mm} UTC`;\n}\n\n/** 482113 → \"471 KB\"; 1288490 → \"1.2 MB\". Binary steps, the way a file dialog counts. */\nexport function formatBytes(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) return '—';\n if (bytes < 1024) return `${bytes} B`;\n const units = ['KB', 'MB', 'GB', 'TB'];\n let v = bytes / 1024;\n let u = 0;\n while (v >= 1024 && u < units.length - 1) {\n v /= 1024;\n u++;\n }\n return `${v < 10 ? v.toFixed(1).replace(/\\.0$/, '') : Math.round(v)} ${units[u]}`;\n}\n","import { useContext } from 'react';\n\nimport { sharedContext } from './shared-context';\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 = sharedContext<ShellPlace>('shell-place', {});\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 { explorerUrl, shortenMiddle, type ExplorerKind, type Network } from '../format';\nimport { cn } from '../lib/cn';\nimport { useDensity } from '../lib/density';\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 /** `sm` for a tool page: tighter, a smaller figure. Defaults to the density around it. */\n size?: 'md' | 'sm';\n /**\n * The change beside the figure: `{ value: -2.4, suffix: '%' }`. Green when\n * it moves the good way (`good`, default up), red the other, quiet at 0.\n */\n delta?: { value: number; suffix?: string; good?: 'up' | 'down'; label?: string };\n className?: string;\n}\n\nfunction Delta({ value, suffix = '', good = 'up', label }: NonNullable<StatCardProps['delta']>) {\n const dir = value > 0 ? 'up' : value < 0 ? 'down' : 'flat';\n const tone = dir === 'flat' ? 'text-muted-foreground' : dir === good ? 'text-success' : 'text-destructive';\n const sign = value > 0 ? '+' : value < 0 ? '−' : '';\n return (\n <span className={cn('inline-flex items-baseline gap-1 text-[0.8125rem] font-normal tracking-normal oca-tabular', tone)}>\n <span aria-hidden>{dir === 'up' ? '↑' : dir === 'down' ? '↓' : '·'}</span>\n {sign}\n {Math.abs(value).toLocaleString('en-US', { maximumFractionDigits: 2 })}\n {suffix}\n {label ? <span className=\"text-muted-foreground\"> {label}</span> : null}\n </span>\n );\n}\n\nexport function StatCard({ label, value, hint, size, delta, className }: StatCardProps) {\n const inGrid = useContext(InStatGrid);\n const density = useDensity();\n const sm = (size ?? (density === 'compact' ? 'sm' : 'md')) === 'sm';\n return (\n <div\n data-ui=\"stat\"\n className={cn(\n 'border border-border bg-card',\n sm ? 'rounded-2xl p-4' : 'rounded-[1.25rem] 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={cn('leading-snug text-muted-foreground', sm ? 'text-[0.8125rem]' : 'text-[0.875rem]')}>{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 leading-tight tracking-[-0.02em]',\n sm ? 'text-[1.25rem]' : 'text-[1.5rem] md:text-[1.75rem]',\n inGrid && 'self-end',\n delta && 'flex flex-wrap items-baseline gap-x-2'\n )}\n >\n {value}\n {delta ? <Delta {...delta} /> : null}\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 const compact = useDensity() === 'compact';\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',\n compact ? 'gap-2.5 md:gap-3' : '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 /** After the value: what it means (\"Undervalued\", \"Above the 200-week mean\"). */\n note?: ReactNode;\n /** Colours the note, or the value when there is none. */\n tone?: ValueTone;\n}\n\n/** A reading's verdict, in words and colour: good, caution, bad, the accent, or quiet. */\nexport type ValueTone = 'good' | 'caution' | 'bad' | 'brand' | 'muted';\n\nconst TONE_TEXT: Record<ValueTone, string> = {\n good: 'text-success',\n caution: 'text-warning',\n bad: 'text-destructive',\n brand: 'text-oca-accent-ink',\n muted: 'text-muted-foreground',\n};\n\nexport function KeyValueList({\n items,\n dense,\n className,\n}: {\n items: KeyValueItem[];\n /** Tighter rows and smaller text, for a tool page. Defaults to the density around it. */\n dense?: boolean;\n className?: string;\n}) {\n const density = useDensity();\n const tight = dense ?? density === 'compact';\n return (\n // The rows go side by side when the list itself is wide enough, wherever it sits: a narrow card stacks them.\n <dl className={cn('@container divide-y divide-border border border-border bg-card', tight ? 'rounded-2xl' : 'rounded-[1.25rem]', className)}>\n {items.map((it, i) => (\n <div\n key={i}\n className={cn(\n 'flex flex-col gap-1 @md:flex-row @md:items-baseline',\n tight ? 'px-4 py-2.5 @md:gap-5' : 'px-5 py-3.5 @md:gap-6'\n )}\n >\n <dt className={cn('shrink-0 text-muted-foreground', tight ? 'text-[0.8125rem] @md:w-36' : 'text-[0.875rem] @md:w-48')}>\n {it.label}\n </dt>\n <dd\n className={cn(\n 'min-w-0 break-words',\n tight ? 'text-[0.875rem]' : 'text-[0.9375rem]',\n it.mono && (tight ? 'font-mono text-[0.8125rem]' : 'font-mono text-[0.875rem]'),\n it.tone && !it.note && TONE_TEXT[it.tone]\n )}\n >\n {it.value}\n {it.note ? (\n <span className={cn('ml-2 font-sans text-[0.8125rem]', TONE_TEXT[it.tone ?? 'muted'])}>{it.note}</span>\n ) : null}\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 dense,\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 /** Tighter rows and 14px text, for a tool page. Defaults to the density around it. */\n dense?: boolean;\n className?: string;\n}) {\n const density = useDensity();\n const tight = dense ?? density === 'compact';\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 border border-border bg-card',\n tight ? 'rounded-2xl' : 'rounded-[1.25rem]',\n phone === 'cards' && 'max-sm:hidden',\n className\n )}\n >\n <ScrollFade fade=\"var(--card)\">\n <table className={cn('w-full border-collapse text-left', tight ? 'text-[0.875rem]' : '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 text-[0.8125rem] font-medium text-muted-foreground',\n tight ? 'px-4 py-2.5' : 'px-5 py-3',\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 'align-middle',\n tight ? 'px-4 py-2' : 'px-5 py-3.5',\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(\n 'divide-y divide-border border border-border bg-card sm:hidden',\n tight ? 'rounded-2xl' : 'rounded-[1.25rem]',\n className\n )}\n >\n {rows.map((r, i) => (\n <li key={rowKey(r, i)} className={cn('flex flex-col gap-2.5 px-4', tight ? 'py-3' : '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 role,\n className,\n}: {\n tone?: NoticeTone;\n title?: ReactNode;\n children?: ReactNode;\n action?: ReactNode;\n /** Default: `alert` for danger and warning, which a screen reader announces. Text that is\n * simply part of the page (a docs callout) is a `note`. */\n role?: 'alert' | 'status' | 'note';\n className?: string;\n}) {\n const kind = NOTICE_KIND[tone];\n return (\n <div\n role={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\n/** Wipe the clipboard if it still holds `expected`, and only then. */\nasync function wipeIfUnchanged(expected: string): Promise<void> {\n try {\n if ((await navigator.clipboard.readText()) !== expected) return;\n } catch {\n // Reading needs a permission most browsers withhold; wiping does not.\n }\n try {\n await navigator.clipboard.writeText('');\n } catch {\n /* the clipboard is unavailable here */\n }\n}\n\nexport function useCopy(timeoutMs = 1600) {\n const [copied, setCopied] = useState(false);\n const t = useRef<ReturnType<typeof setTimeout> | null>(null);\n const wipe = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(\n () => () => {\n if (t.current) clearTimeout(t.current);\n },\n []\n );\n const copy = useCallback(\n async (text: string, opts: { clearAfter?: number } = {}): Promise<boolean> => {\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 if (opts.clearAfter && opts.clearAfter > 0) {\n // Outlives the component on purpose: the secret should go even if the page moves on.\n if (wipe.current) clearTimeout(wipe.current);\n wipe.current = setTimeout(() => void wipeIfUnchanged(text), opts.clearAfter);\n }\n return true;\n } catch {\n setCopied(false);\n return false;\n }\n },\n [timeoutMs]\n );\n return { copied, copy };\n}\n\nexport interface CopyButtonProps {\n /** The text, or a function that reads it at the moment of copying. */\n value: string | (() => string);\n label?: string;\n /**\n * Milliseconds after which the clipboard is wiped, if it still holds what\n * was copied (a secret, a recovery code). Unset: never.\n */\n clearAfter?: number;\n /** Called once the text is on the clipboard. */\n onCopied?: () => void;\n className?: string;\n}\n\nexport function CopyButton({ value, label = 'Copy', clearAfter, onCopied, className }: CopyButtonProps) {\n const { copied, copy } = useCopy();\n const done = copied ? (clearAfter ? `Copied. Cleared in ${Math.round(clearAfter / 1000)} seconds` : 'Copied') : '';\n return (\n <button\n type=\"button\"\n onClick={async () => {\n if (await copy(typeof value === 'function' ? value() : value, { clearAfter })) onCopied?.();\n }}\n aria-label={copied ? 'Copied' : label}\n title={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 {done}\n </span>\n </button>\n );\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. `explorer`\n * links an address, transaction or block to mempool.space.\n */\nexport function HashChip({\n value,\n head = 8,\n tail = 6,\n copy = true,\n href,\n explorer,\n network = 'mainnet',\n className,\n}: {\n value: string;\n head?: number;\n tail?: number;\n copy?: boolean;\n href?: string;\n /** What the value is, to link it on mempool.space. `href` wins when both are set. */\n explorer?: ExplorerKind;\n network?: Network;\n className?: string;\n}) {\n const shown = shortenMiddle(value, head, tail);\n const link = href ?? (explorer ? explorerUrl(explorer, value, network) : undefined);\n const offsite = !!link && /^https?:\\/\\//.test(link);\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 {link ? (\n <a\n href={link}\n {...(offsite ? { target: '_blank', rel: 'noreferrer' } : {})}\n className=\"underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\"\n >\n {text}\n {offsite ? <span className=\"sr-only\"> (opens in a new tab)</span> : null}\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 * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { useCallback, useMemo, useRef, useState, useSyncExternalStore, type ReactNode, type RefObject } from 'react';\n\nimport { grammarOf, highlight, linesToHtml, parseLineRanges, readDiff } from '../code/highlight';\nimport { cn } from '../lib/cn';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { CopyButton } from './data';\n\nconst LANG_NAME: Record<string, string> = {\n ts: 'TypeScript',\n typescript: 'TypeScript',\n tsx: 'TSX',\n js: 'JavaScript',\n javascript: 'JavaScript',\n jsx: 'JSX',\n mjs: 'JavaScript',\n json: 'JSON',\n jsonc: 'JSON',\n bash: 'Shell',\n sh: 'Shell',\n shell: 'Shell',\n zsh: 'Shell',\n console: 'Terminal',\n terminal: 'Terminal',\n python: 'Python',\n py: 'Python',\n yaml: 'YAML',\n yml: 'YAML',\n diff: 'Diff',\n text: 'Text',\n};\n\n/** \"TypeScript\" for ts, \"Shell\" for bash; the fence name itself for anything else. */\nexport function languageName(lang?: string): string | undefined {\n return lang ? (LANG_NAME[lang.toLowerCase()] ?? lang) : undefined;\n}\n\n/*\n * What a copy button puts on the clipboard: the code exactly as written,\n * final newline included, without removed lines and, for a shell transcript\n * with `$ ` prompts, only the commands, without their prompts.\n */\nfunction forClipboard(text: string, lang?: string): string {\n if (grammarOf(lang) !== 'shell') return text;\n const lines = text.split('\\n');\n if (!lines.some((l) => l.startsWith('$ '))) return text;\n return lines\n .filter((l) => l.startsWith('$ '))\n .map((l) => l.slice(2))\n .join('\\n');\n}\n\nfunction linesFromDom(pre: HTMLElement | null, newline: boolean): string | null {\n if (!pre) return null;\n const lines = pre.querySelectorAll('[data-line]');\n if (lines.length === 0) return pre.textContent ?? '';\n const text = Array.from(lines)\n .filter((l) => l.getAttribute('data-diff') !== 'remove')\n .map((l) => l.textContent ?? '')\n .join('\\n');\n return newline ? `${text}\\n` : text;\n}\n\ninterface Prepared {\n html: string;\n /** The code as a reader would copy it. */\n copy: string;\n lines: number;\n diff: boolean;\n}\n\nfunction prepare(code: string, lang: string | undefined, marks: string | readonly number[] | undefined, diff: boolean): Prepared {\n const d = diff ? readDiff(code) : null;\n const src = d ? d.code : code.replace(/\\r?\\n$/, '');\n const lines = highlight(src, lang === 'diff' ? undefined : lang);\n const kept = d ? src.split('\\n').filter((_, i) => d.diff.get(i + 1) !== 'remove') : null;\n return {\n html: linesToHtml(lines, { highlight: parseLineRanges(marks), diff: d?.diff }),\n // Byte for byte, the final newline too: a hash printed beside the code must match a copy of it.\n copy: kept ? kept.join('\\n') + (/\\n$/.test(code) ? '\\n' : '') : code,\n lines: lines.length,\n diff: !!d,\n };\n}\n\n/** The dark well: lines that scroll sideways, folding past `maxLines`. */\nfunction Well({\n preRef,\n html,\n children,\n lang,\n lines,\n maxLines,\n diff,\n lineNumbers,\n wrap,\n}: {\n preRef?: RefObject<HTMLPreElement | null>;\n html?: string;\n children?: ReactNode;\n lang?: string;\n lines: number;\n maxLines?: number;\n diff?: boolean;\n lineNumbers?: boolean;\n wrap?: boolean;\n}) {\n const foldable = maxLines !== undefined && lines > maxLines + 2;\n const [open, setOpen] = useState(false);\n const folded = foldable && !open;\n // Markup made of lines carries its own side padding, so a marked line runs edge to edge.\n const lined = html !== undefined;\n return (\n <div className=\"relative\">\n <div\n className={cn(folded && 'overflow-hidden')}\n style={folded ? { maxHeight: `calc(${maxLines} * 1.625em + 2rem)` } : undefined}\n >\n <ScrollFade fade=\"var(--oca-code-surface)\">\n <pre\n ref={preRef}\n data-diff={diff ? '' : undefined}\n data-line-numbers={lineNumbers ? '' : undefined}\n className={cn(\n 'oca-code py-4 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]',\n wrap ? 'whitespace-pre-wrap break-all' : 'w-max min-w-full',\n !lined && 'px-5'\n )}\n >\n {lined ? (\n <code className=\"block\" data-lang={lang} dangerouslySetInnerHTML={{ __html: html }} />\n ) : (\n <code className=\"block\" data-lang={lang}>\n {children}\n </code>\n )}\n </pre>\n </ScrollFade>\n </div>\n {foldable ? (\n <div\n className={cn('flex justify-center px-5 pb-4', folded && 'absolute inset-x-0 bottom-0 pt-16')}\n style={folded ? { background: 'linear-gradient(to top, var(--oca-code-surface) 40%, transparent)' } : undefined}\n >\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\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 );\n}\n\nconst FRAME = 'overflow-hidden rounded-[1.25rem] border border-[var(--oca-code-line)] bg-[var(--oca-code-surface)]';\n// The bar is 44px tall: on a phone the copy fills it, a thumb's target.\nconst COPY_ON_INK = 'text-oca-ink-subtle hover:bg-white/10 hover:text-white max-md:size-11';\n\nexport interface CodeBlockProps {\n /** The source. Highlighted here, on the server too, when `lang` is one the package reads. */\n code?: string;\n /**\n * Highlighted markup made at build time (rehypeCode, highlightToHtml).\n * Trusted markup only: it is set as HTML.\n */\n html?: string;\n /** Highlighted nodes from another highlighter. */\n children?: ReactNode;\n /** With `html`: the source ended in a newline, and a copy keeps it (rehypeCode sets this). */\n trailingNewline?: boolean;\n /** The fence name: ts, tsx, json, bash, python, yaml, diff. */\n lang?: string;\n /** The file name or purpose. Defaults to the language's name, or \"Code\". */\n caption?: ReactNode;\n copy?: boolean;\n /** Wipe the clipboard this many milliseconds after a copy (a secret in code). */\n clearAfter?: number;\n /** Fold past this many lines, with a button for the rest. */\n maxLines?: number;\n /** Lines to mark, 1-based: \"2,4-6\" or [2, 4, 5, 6]. With `code`. */\n highlight?: string | readonly number[];\n /** Read `+` and `-` at the start of each line as added and removed. With `code`; `lang=\"diff\"` implies it. */\n diff?: boolean;\n /** Number the lines. */\n lineNumbers?: boolean;\n /**\n * Break long lines at any character instead of scrolling: a message to\n * sign, a 64-character id. Copying still takes the exact bytes.\n */\n wrap?: boolean;\n /** Beside the copy button: a download, a raw/pretty switch. */\n actions?: ReactNode;\n className?: string;\n}\n\n/**\n * A block of code: a header with its name and a copy button, then the code\n * on a dark well, highlighted, that scrolls sideways (with an edge that says\n * so) rather than cutting a line off. Lines can be marked, shown as a diff,\n * or numbered; the marks are drawn, so copying takes the code as written.\n * Past `maxLines` it folds.\n */\nexport function CodeBlock({\n code,\n html,\n children,\n trailingNewline = false,\n lang,\n caption,\n copy = true,\n clearAfter,\n maxLines,\n highlight: marks,\n diff,\n lineNumbers,\n wrap,\n actions,\n className,\n}: CodeBlockProps) {\n const preRef = useRef<HTMLPreElement>(null);\n const isDiff = diff || lang === 'diff';\n const markKey = typeof marks === 'string' ? marks : marks?.join(',');\n const prepared = useMemo(\n () => (html === undefined && children === undefined && code !== undefined ? prepare(code, lang, markKey, !!isDiff) : null),\n [code, html, children, lang, markKey, isDiff]\n );\n const markup = prepared?.html ?? html;\n const lines = prepared?.lines ?? (html !== undefined ? html.split('\\n').length : (code?.split('\\n').length ?? 0));\n const read = () => forClipboard(prepared?.copy ?? linesFromDom(preRef.current, trailingNewline) ?? code ?? '', lang);\n return (\n <figure className={cn(FRAME, className)}>\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 ?? languageName(lang) ?? 'Code'}</span>\n <span className=\"flex shrink-0 items-center gap-1\">\n {actions}\n {copy ? <CopyButton value={read} label=\"Copy code\" clearAfter={clearAfter} className={COPY_ON_INK} /> : null}\n </span>\n </figcaption>\n <Well\n preRef={preRef}\n html={markup}\n lang={lang}\n lines={lines}\n maxLines={maxLines}\n diff={prepared ? prepared.diff : isDiff}\n lineNumbers={lineNumbers}\n wrap={wrap}\n >\n {children}\n </Well>\n </figure>\n );\n}\n\n/* ── Tabs of code ────────────────────────────────────────────────────── */\n\nconst tabListeners = new Map<string, Set<() => void>>();\nconst tabMemory = new Map<string, string>();\nconst storeKey = (k: string) => `oca-code-tab:${k}`;\n\nfunction readTab(key: string): string | null {\n if (tabMemory.has(key)) return tabMemory.get(key)!;\n try {\n return window.localStorage.getItem(storeKey(key));\n } catch {\n return null;\n }\n}\n\nfunction writeTab(key: string, value: string) {\n tabMemory.set(key, value);\n try {\n window.localStorage.setItem(storeKey(key), value);\n } catch {\n /* private mode: the choice lasts for this page */\n }\n tabListeners.get(key)?.forEach((l) => l());\n}\n\n/** One choice shared by every CodeTabs with the same key, remembered in this browser. */\nfunction useSyncedTab(key: string | undefined): [string | null, (v: string) => void] {\n const subscribe = useCallback(\n (cb: () => void) => {\n if (!key) return () => {};\n const set = tabListeners.get(key) ?? new Set();\n set.add(cb);\n tabListeners.set(key, set);\n return () => {\n set.delete(cb);\n };\n },\n [key]\n );\n const value = useSyncExternalStore(\n subscribe,\n () => (key ? readTab(key) : null),\n () => null\n );\n return [value, (v: string) => key && writeTab(key, v)];\n}\n\nexport interface CodeTab {\n /** The tab's name, and what `syncKey` remembers: \"npm\", \"curl\", \"Python\". */\n label: string;\n code: string;\n lang?: string;\n}\n\n/**\n * The same thing in several forms (npm, yarn, pnpm; curl, Node, Python) in\n * one well, with tabs in its header and a copy button for the one shown.\n * Give every set the same `syncKey` and choosing \"pnpm\" once switches them\n * all, on this page and the next.\n */\nexport function CodeTabs({\n items,\n syncKey,\n defaultValue,\n maxLines,\n className,\n}: {\n items: CodeTab[];\n syncKey?: string;\n /** The label shown first. Default: the first item. */\n defaultValue?: string;\n maxLines?: number;\n className?: string;\n}) {\n const [synced, setSynced] = useSyncedTab(syncKey);\n const [local, setLocal] = useState<string | null>(null);\n const labels = items.map((it) => it.label);\n const pick = [local, synced, defaultValue].find((v): v is string => !!v && labels.includes(v)) ?? labels[0] ?? '';\n const active = items.find((it) => it.label === pick);\n const prepared = useMemo(() => items.map((it) => prepare(it.code, it.lang, undefined, it.lang === 'diff')), [items]);\n return (\n <TabsPrimitive.Root\n value={pick}\n onValueChange={(v) => {\n setLocal(v);\n setSynced(v);\n }}\n className={cn(FRAME, className)}\n >\n <div className=\"flex h-11 items-center justify-between gap-3 border-b border-[var(--oca-code-line)] pl-2 pr-2\">\n <ScrollFade fade=\"var(--oca-code-surface)\" className=\"min-w-0 flex-1\">\n <TabsPrimitive.List aria-label=\"Versions\" className=\"flex w-max items-center gap-0.5\">\n {items.map((it) => (\n <TabsPrimitive.Trigger\n key={it.label}\n value={it.label}\n className={cn(\n 'relative inline-flex h-11 items-center whitespace-nowrap px-3 text-[0.8125rem] text-oca-ink-subtle outline-none transition-colors',\n 'hover:text-white focus-visible:text-white focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n 'data-[state=active]:text-white',\n 'after:absolute after:inset-x-3 after:bottom-0 after:h-0.5 after:rounded-full after:bg-transparent data-[state=active]:after:bg-oca-orange'\n )}\n >\n {it.label}\n </TabsPrimitive.Trigger>\n ))}\n </TabsPrimitive.List>\n </ScrollFade>\n {active ? (\n <CopyButton\n value={() => forClipboard(prepared[items.indexOf(active)]?.copy ?? active.code, active.lang)}\n label={`Copy ${active.label}`}\n className={COPY_ON_INK}\n />\n ) : null}\n </div>\n {items.map((it, i) => (\n <TabsPrimitive.Content key={it.label} value={it.label} className=\"outline-none\" tabIndex={-1}>\n <Well\n html={prepared[i]!.html}\n lang={it.lang}\n lines={prepared[i]!.lines}\n maxLines={maxLines}\n diff={prepared[i]!.diff}\n />\n </TabsPrimitive.Content>\n ))}\n </TabsPrimitive.Root>\n );\n}\n\n/** `npm install`, `yarn add` and `pnpm add` for a package, in one remembered set of tabs. */\nexport function InstallTabs({ pkg, dev = false, className }: { pkg: string; dev?: boolean; className?: string }) {\n const items: CodeTab[] = [\n { label: 'npm', code: `npm install ${dev ? '--save-dev ' : ''}${pkg}`, lang: 'bash' },\n { label: 'yarn', code: `yarn add ${dev ? '--dev ' : ''}${pkg}`, lang: 'bash' },\n { label: 'pnpm', code: `pnpm add ${dev ? '--save-dev ' : ''}${pkg}`, lang: 'bash' },\n ];\n return <CodeTabs items={items} syncKey=\"package-manager\" className={className} />;\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 // A list row's avatar, a facepile.\n '2xs': 'size-7 rounded-[0.55rem] text-[0.75rem]',\n xs: 'size-8 rounded-[0.6rem] text-[0.875rem]',\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","/*\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/** The account: one home for it, whichever site a person starts on. */\nexport const OCHK_APP = 'https://ochk.app';\n\n/**\n * The family's one account phrase. ochk.io and its docs offer it in the\n * header and link ochk.app; ochk.app offers it signed out and links its own\n * sign-in. A tool site signs a person in where they are, so it says\n * SIGN_IN_LABEL instead.\n */\nexport const GET_AN_ACCOUNT: NavItem = { href: OCHK_APP, label: 'Get an account' };\nexport const SIGN_IN_LABEL = 'Sign in';\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: 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 // Signs in with an orangecheck account and a wallet; uses none of the six directly.\n protocols: [],\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 * The same row for a product that hosts its own documents (ochk.app, vault):\n * ochk.io's cover the free protocols, not a product that holds money, so its\n * privacy, terms, security and contact pages are its own. The trademarks are\n * the company's, on ochk.io.\n */\nexport const SELF_HOSTED_LEGAL_LINKS: readonly NavItem[] = [\n { href: '/privacy', label: 'Privacy' },\n { href: '/terms', label: 'Terms' },\n { href: '/security', label: 'Security' },\n { href: `${OCHK_IO}/trademark`, label: 'Trademarks' },\n { href: '/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 { useContext } from 'react';\n\nimport { sharedContext } from './shared-context';\n\n/** Set by a shell that already draws the content column and its gutter: a block inside adds none of its own. */\nexport const InColumnContext = sharedContext<boolean>('in-column', false);\n\nexport function useInColumn(): boolean {\n return useContext(InColumnContext);\n}\n","import { useContext } from 'react';\n\nimport { sharedContext } from './shared-context';\n\n/** Set by ToolShell: where \"home\" is on a tool site, the protocol's page on ochk.io. Its own `/` redirects off-site. */\nexport const SiteHomeContext = sharedContext<string | undefined>('site-home', undefined);\n\nexport function useSiteHome(): string | undefined {\n return useContext(SiteHomeContext);\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { MarkOutline } from '../brand/mark';\nimport { OCHK_IO, protocolSite, type ProtocolSlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { useInColumn } from '../lib/column';\nimport { useSiteHome } from '../lib/site-home';\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 protocol,\n art,\n className,\n}: {\n code?: number;\n title?: ReactNode;\n detail?: ReactNode;\n /** Replaces the default ways on. */\n actions?: ReactNode;\n /** Where \"Go home\" goes. Default: the protocol's page on ochk.io (inside a ToolShell, its protocol), else ochk.io. */\n home?: string;\n /** The protocol this site serves, when it is not inside a ToolShell. */\n protocol?: ProtocolSlug;\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 shellHome = useSiteHome();\n // Inside a shell's column the gutter is drawn already: a second one indented it 33px.\n const inColumn = useInColumn();\n const homeHref = home ?? (protocol ? protocolSite(protocol).pageHref : (shellHome ?? OCHK_IO));\n const words = WORDS[code] ?? (code >= 500 ? WORDS[500]! : WORDS[404]!);\n const server = code >= 500;\n return (\n <Section space=\"none\" contained={!inColumn} 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={homeHref}>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 { Check, Lock } from 'lucide-react';\nimport { useSyncExternalStore, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Badge } from '../primitives/badge';\n\n/*\n * Parts the family's apps share: the ring a one-time code counts down on, a\n * plan's card, and the preview of what a sign-in or a plan unlocks.\n */\n\n/* ── CountdownRing ───────────────────────────────────────────────────── */\n\nfunction onSecond(tick: () => void) {\n const id = setInterval(tick, 1000);\n return () => clearInterval(id);\n}\nconst nowSeconds = () => Math.floor(Date.now() / 1000);\n\n/**\n * Seconds left in a cycle, as a ring that empties and the number beside it,\n * red for the last few. Given only `period` it follows the clock in windows\n * aligned to the epoch, as a TOTP code does; pass `remaining` to drive it.\n * The server draws the full ring with no number, so hydration matches.\n */\nexport function CountdownRing({\n period,\n remaining,\n warnAt = 5,\n size = 18,\n showSeconds = true,\n className,\n}: {\n /** Seconds in one cycle: 30 for most TOTP codes. */\n period: number;\n /** Seconds left. Default: from the clock. */\n remaining?: number;\n /** From here down it turns red. */\n warnAt?: number;\n /** The ring's diameter, in pixels. */\n size?: number;\n /** The \"12s\" beside the ring. */\n showSeconds?: boolean;\n className?: string;\n}) {\n const now = useSyncExternalStore(onSecond, nowSeconds, () => null);\n const left = remaining ?? (now === null ? null : period - (now % period));\n const share = left === null ? 1 : Math.max(0, Math.min(1, left / period));\n const warn = left !== null && left <= warnAt;\n const r = size / 2 - 1.5;\n const c = 2 * Math.PI * r;\n return (\n <span\n role=\"timer\"\n aria-label={left === null ? undefined : `${left} second${left === 1 ? '' : 's'} left`}\n className={cn('inline-flex items-center gap-1.5', warn ? 'text-destructive' : 'text-muted-foreground', className)}\n >\n <svg aria-hidden width={size} height={size} viewBox={`0 0 ${size} ${size}`} className=\"-rotate-90\">\n <circle cx={size / 2} cy={size / 2} r={r} fill=\"none\" stroke=\"var(--border)\" strokeWidth={2} />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeDasharray={c}\n strokeDashoffset={c * (1 - share)}\n // A new cycle refills at once rather than winding back over a second.\n className={cn(left !== null && left < period && 'transition-[stroke-dashoffset] duration-1000 ease-linear motion-reduce:transition-none')}\n />\n </svg>\n {showSeconds && left !== null ? <span className=\"text-[0.8125rem] oca-tabular\">{left}s</span> : null}\n </span>\n );\n}\n\n/* ── PlanCard ────────────────────────────────────────────────────────── */\n\n/**\n * One plan, for a pricing grid: its name and line, the price and what it is\n * per, what it includes, and the way to take it. `highlight` is the one the\n * page argues for; `badge` names a state (\"Your plan\", \"Recommended\").\n * Lay four out with `grid gap-4 sm:grid-cols-2 lg:grid-cols-4`; compare them\n * row by row in a ComparisonTable.\n */\nexport function PlanCard({\n name,\n subtitle,\n price,\n period,\n footnote,\n features = [],\n action,\n badge,\n badgeTone = 'neutral',\n highlight = false,\n className,\n}: {\n name: ReactNode;\n /** One line: who it is for. */\n subtitle?: ReactNode;\n /** The figure: <Sats value={…} />, \"Free\". */\n price: ReactNode;\n /** What the price is for: \"a month\", \"once\". */\n period?: ReactNode;\n /** Under the price: \"≈ $12\", \"billed yearly\". */\n footnote?: ReactNode;\n features?: ReactNode[];\n /** At the foot: the button. */\n action?: ReactNode;\n badge?: ReactNode;\n badgeTone?: 'neutral' | 'brand' | 'success' | 'muted';\n highlight?: boolean;\n className?: string;\n}) {\n return (\n <section\n className={cn(\n 'flex h-full flex-col gap-5 rounded-[1.25rem] border bg-card p-6',\n highlight ? 'border-foreground shadow-sm ring-1 ring-foreground' : 'border-border',\n className\n )}\n >\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-start justify-between gap-3\">\n <h3 className=\"text-[1.0625rem] font-medium leading-snug\">{name}</h3>\n {badge ? <Badge tone={badgeTone}>{badge}</Badge> : null}\n </div>\n {subtitle ? <p className=\"text-[0.875rem] leading-snug text-muted-foreground\">{subtitle}</p> : null}\n </div>\n <div className=\"flex flex-col gap-1\">\n <p className=\"flex flex-wrap items-baseline gap-x-1.5\">\n <span className=\"oca-display-3 oca-tabular\">{price}</span>\n {period ? <span className=\"text-[0.9375rem] text-muted-foreground\">{period}</span> : null}\n </p>\n {footnote ? <p className=\"text-[0.8125rem] text-muted-foreground\">{footnote}</p> : null}\n </div>\n {features.length > 0 ? (\n <ul className=\"flex flex-col gap-2.5 text-[0.9375rem]\">\n {features.map((f, i) => (\n <li key={i} className=\"flex items-start gap-2.5\">\n <Check aria-hidden className=\"mt-1 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0\">{f}</span>\n </li>\n ))}\n </ul>\n ) : null}\n {action ? <div className=\"mt-auto flex flex-col pt-1 [&>*]:w-full\">{action}</div> : null}\n </section>\n );\n}\n\n/* ── LockedPreview ───────────────────────────────────────────────────── */\n\n/**\n * What a sign-in or a plan unlocks: a real sample of it, faded, out of reach\n * of the pointer, the keyboard and a screen reader, with the way in over its\n * foot. With no sample, the card alone.\n */\nexport function LockedPreview({\n title,\n description,\n action,\n children,\n className,\n}: {\n /** What opens: \"Your watchlist\". */\n title: ReactNode;\n /** One line: what it takes (\"Sign in. It's free.\"). */\n description?: ReactNode;\n /** The way in: a button or a link. */\n action: ReactNode;\n /** The sample, drawn as it would be. */\n children?: ReactNode;\n className?: string;\n}) {\n return (\n <div className={cn('relative', className)}>\n {children ? (\n <div\n inert\n aria-hidden\n data-oca-locked=\"\"\n className=\"pointer-events-none max-h-[28rem] select-none overflow-hidden [mask-image:linear-gradient(to_bottom,#000_25%,transparent_85%)]\"\n >\n {children}\n </div>\n ) : null}\n <div className={cn('relative mx-auto flex max-w-md flex-col items-center gap-4 rounded-[1.25rem] border border-border bg-card px-6 py-7 text-center shadow-sm', children && '-mt-40')}>\n <span aria-hidden className=\"flex size-10 items-center justify-center rounded-full bg-muted text-foreground\">\n <Lock className=\"size-[1.125rem]\" />\n </span>\n <div className=\"flex flex-col gap-1.5\">\n <p className=\"text-[1.0625rem] font-medium leading-snug\">{title}</p>\n {description ? <p className=\"text-[0.9375rem] leading-snug text-muted-foreground\">{description}</p> : null}\n </div>\n <div className=\"flex flex-wrap justify-center gap-2\">{action}</div>\n </div>\n </div>\n );\n}\n","import { Info, Maximize2 } from 'lucide-react';\nimport { useId, useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../primitives/overlay';\n\n/*\n * Numbers and where they come from: a panel that opens to the full window,\n * the note that names a figure's source, the card that floats over a canvas,\n * and the parts of a hand-drawn chart. The series colours are tokens\n * (--oca-chart-1…4, -neutral, -up, -down, -grid); a chart library is not.\n */\n\n/* ── Chart colours and chrome ────────────────────────────────────────── */\n\nexport type ChartTone = 1 | 2 | 3 | 4 | 'neutral' | 'up' | 'down';\n\n/** The CSS colour for a series: `chartColor(0)` is orange, and indexes past four cycle. */\nexport function chartColor(series: number | ChartTone): string {\n if (typeof series === 'string') return `var(--oca-chart-${series})`;\n const n = series >= 1 && series <= 4 && Number.isInteger(series) ? series : (((series % 4) + 4) % 4) + 1;\n return `var(--oca-chart-${n})`;\n}\n\nexport interface LegendItem {\n label: ReactNode;\n /** A series number (1–4), neutral, up or down, or any CSS colour. */\n color: ChartTone | string;\n /** A dashed line in the chart: the swatch is dashed too. */\n dashed?: boolean;\n}\n\n/**\n * The frame for a chart drawn by hand in SVG: a legend above, the chart, a\n * caption. Inside it the chart takes the system's chrome by class:\n * `oca-chart-tick` (axis labels), `oca-chart-grid`, `oca-chart-axis`,\n * `oca-chart-zero`, `oca-chart-crosshair`, `oca-chart-marker`; a hover\n * card takes `oca-chart-tooltip`. Colour series with `chartColor(i)`.\n */\nexport function ChartFrame({\n legend,\n caption,\n children,\n className,\n}: {\n legend?: LegendItem[];\n /** Under the chart: what it shows, its window. A SourceNote fits here. */\n caption?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <figure className={cn('oca-chart flex min-w-0 flex-col gap-3', className)}>\n {legend && legend.length > 0 ? (\n <ul className=\"oca-chart-legend\" aria-label=\"Legend\">\n {legend.map((l, i) => {\n const c = typeof l.color === 'number' || ['neutral', 'up', 'down'].includes(String(l.color)) ? chartColor(l.color as ChartTone) : String(l.color);\n return (\n <li key={i}>\n <span aria-hidden data-swatch={l.dashed ? 'dashed' : ''} style={{ '--swatch': c } as CSSProperties} />\n {l.label}\n </li>\n );\n })}\n </ul>\n ) : null}\n <div className=\"relative min-w-0\">{children}</div>\n {caption ? <figcaption className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{caption}</figcaption> : null}\n </figure>\n );\n}\n\n/**\n * A small line for a trend, drawn from its numbers: no axes, no labels. It\n * stretches to its box (give it a width with `className`), and its name for\n * a screen reader says what it shows. `tone=\"trend\"` colours it up or down\n * by its last value against its first.\n */\nexport function Sparkline({\n values,\n label,\n tone = 'ink',\n area = false,\n width = 96,\n height = 24,\n className,\n}: {\n values: readonly number[];\n /** What it shows, read in place of the picture: \"Sign-ups per day, 30 days, 12 to 40\". */\n label: string;\n tone?: 'ink' | 'muted' | 'trend' | ChartTone;\n /** Fill under the line. */\n area?: boolean;\n width?: number;\n height?: number;\n className?: string;\n}) {\n const gradient = useId().replace(/[^a-zA-Z0-9]/g, '');\n const pts = values.filter((v) => Number.isFinite(v));\n const lo = Math.min(...pts);\n const hi = Math.max(...pts);\n const span = hi - lo || 1;\n const pad = 1.5;\n const x = (i: number) => (pts.length < 2 ? width / 2 : (i / (pts.length - 1)) * width);\n const y = (v: number) => pad + (1 - (v - lo) / span) * (height - pad * 2);\n const line = pts.map((v, i) => `${i === 0 ? 'M' : 'L'}${x(i).toFixed(2)},${y(v).toFixed(2)}`).join(' ');\n const color =\n tone === 'ink'\n ? 'var(--foreground)'\n : tone === 'muted'\n ? 'var(--muted-foreground)'\n : tone === 'trend'\n ? chartColor(pts.length > 1 && pts[pts.length - 1]! < pts[0]! ? 'down' : 'up')\n : chartColor(tone);\n return (\n <svg\n role=\"img\"\n aria-label={label}\n viewBox={`0 0 ${width} ${height}`}\n preserveAspectRatio=\"none\"\n width={width}\n height={height}\n className={cn('block overflow-visible', className)}\n style={{ color }}\n >\n {pts.length > 0 ? (\n <>\n {area ? (\n <>\n <defs>\n <linearGradient id={gradient} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" stopColor=\"currentColor\" stopOpacity={0.22} />\n <stop offset=\"1\" stopColor=\"currentColor\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <path d={`${line} L${x(pts.length - 1).toFixed(2)},${height} L${x(0).toFixed(2)},${height} Z`} fill={`url(#${gradient})`} />\n </>\n ) : null}\n <path d={line} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinejoin=\"round\" strokeLinecap=\"round\" vectorEffect=\"non-scaling-stroke\" />\n </>\n ) : null}\n </svg>\n );\n}\n\n/* ── Where a number comes from ───────────────────────────────────────── */\n\nexport interface SourceNoteProps {\n /** Who: \"mempool.space\", \"Bitnodes\". */\n source: ReactNode;\n /** Its page or endpoint, linked. */\n href?: string;\n /** How it is read: the endpoint, the method, how to reproduce it. */\n detail?: ReactNode;\n /** When: \"Updated 2 min ago\", \"Every block\". */\n updated?: ReactNode;\n /**\n * `popover`: a small \"Source\" button that opens the note. `line`: the\n * note as one line of fine print, for a place a popover cannot open over\n * (a canvas in full screen) or a footer.\n */\n variant?: 'popover' | 'line';\n className?: string;\n}\n\n/** \"Where this number comes from\": the source named and linked, one press away (or always in view). */\nexport function SourceNote({ source, href, detail, updated, variant = 'popover', className }: SourceNoteProps) {\n const name = href ? (\n <a href={href} className=\"text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\" rel=\"noreferrer\" target=\"_blank\">\n {source}\n <span className=\"sr-only\"> (opens in a new tab)</span>\n </a>\n ) : (\n <span className=\"text-foreground\">{source}</span>\n );\n if (variant === 'line') {\n return (\n <p className={cn('text-[0.75rem] leading-snug text-muted-foreground', className)}>\n Source: {name}\n {updated ? <> · {updated}</> : null}\n </p>\n );\n }\n return (\n <Popover>\n <PopoverTrigger\n className={cn(\n 'inline-flex h-7 items-center gap-1 rounded-full px-2 text-[0.75rem] text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n <Info aria-hidden className=\"size-3.5\" />\n Source\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"flex w-[min(calc(100vw-2rem),20rem)] flex-col gap-2 p-4 text-[0.875rem]\">\n <p className=\"text-[0.75rem] text-muted-foreground\">Where this number comes from</p>\n <p className=\"font-medium\">{name}</p>\n {detail ? <div className=\"text-[0.8125rem] leading-snug text-muted-foreground [&_code]:font-mono\">{detail}</div> : null}\n {updated ? <p className=\"text-[0.8125rem] text-muted-foreground\">{updated}</p> : null}\n </PopoverContent>\n </Popover>\n );\n}\n\n/* ── Panel ───────────────────────────────────────────────────────────── */\n\n/**\n * A titled panel for a chart or a table: its title and one line, actions on\n * the right, the body, and its source at the foot. `expandable` adds a\n * button that opens the same body over the full window (Esc closes it). Give\n * `children` as a function to draw it bigger there: `(expanded) => <Chart\n * height={expanded ? 520 : 240} />`.\n */\nexport function Panel({\n title,\n description,\n actions,\n source,\n expandable = false,\n children,\n className,\n}: {\n title: ReactNode;\n description?: ReactNode;\n /** Beside the title: a range switch, a menu. */\n actions?: ReactNode;\n /** At the foot: a SourceNote. */\n source?: ReactNode;\n expandable?: boolean;\n children: ReactNode | ((expanded: boolean) => ReactNode);\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n const body = (expanded: boolean) => (typeof children === 'function' ? children(expanded) : children);\n const head = (expanded: boolean) => (\n <header className=\"flex flex-wrap items-start justify-between gap-x-4 gap-y-2\">\n {/* The text takes the room the actions leave, so they stay top right; it wraps only below 12rem. */}\n <div className=\"flex min-w-[min(100%,12rem)] flex-1 basis-0 flex-col gap-1\">\n {expanded ? (\n <DialogTitle className=\"text-[1.0625rem] font-medium leading-snug\">{title}</DialogTitle>\n ) : (\n <h3 className=\"text-[1rem] font-medium leading-snug\">{title}</h3>\n )}\n {description ? (\n expanded ? (\n <DialogDescription className=\"text-[0.875rem] leading-snug text-muted-foreground\">{description}</DialogDescription>\n ) : (\n <p className=\"text-[0.875rem] leading-snug text-muted-foreground\">{description}</p>\n )\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {actions}\n {expandable && !expanded ? (\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n aria-label=\"Open full screen\"\n className=\"inline-flex size-8 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n >\n <Maximize2 aria-hidden className=\"size-4\" />\n </button>\n ) : null}\n </div>\n </header>\n );\n return (\n <section className={cn('flex min-w-0 flex-col gap-4 rounded-[1.25rem] border border-border bg-card p-5 md:p-6', className)}>\n {head(false)}\n <div className=\"min-w-0\">{body(false)}</div>\n {source ? <div className=\"-mb-1 border-t border-border pt-3\">{source}</div> : null}\n {expandable ? (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent\n {...(description ? {} : { 'aria-describedby': undefined })}\n className=\"flex h-[min(92dvh,56rem)] w-[min(96vw,80rem)] max-w-none flex-col gap-4 overflow-y-auto\"\n >\n {head(true)}\n {/* The body scrolls inside itself, so the title stays at the top and the source at the foot. */}\n <div className=\"min-h-0 min-w-0 flex-1 overflow-y-auto\">{open ? body(true) : null}</div>\n {source ? <div className=\"border-t border-border pt-3\">{source}</div> : null}\n </DialogContent>\n </Dialog>\n ) : null}\n </section>\n );\n}\n\n/* ── HudCard ─────────────────────────────────────────────────────────── */\n\n/**\n * A card that floats over a canvas (a globe, a map): translucent, blurred\n * behind, its eyebrow with a live dot, a headline, rows and a footnote. The\n * canvas sets where it sits. Text stays on the card's own background, so it\n * reads whatever the scene draws behind it.\n */\nexport function HudCard({\n eyebrow,\n live = false,\n title,\n children,\n footer,\n className,\n}: {\n /** Small, above: \"Next block\", \"Fees\". */\n eyebrow?: ReactNode;\n /** A pulsing dot beside the eyebrow: the figure updates by itself. */\n live?: boolean;\n /** The headline figure. */\n title?: ReactNode;\n children?: ReactNode;\n /** Under a rule: a SourceNote variant=\"line\". */\n footer?: ReactNode;\n className?: string;\n}) {\n return (\n <div\n data-oca-hud=\"\"\n className={cn(\n 'flex w-60 max-w-[calc(100vw-2rem)] flex-col gap-2 rounded-xl border border-border bg-background/85 p-3 text-[0.8125rem] shadow-sm backdrop-blur-md',\n className\n )}\n >\n {eyebrow ? (\n <p className=\"flex items-center gap-1.5 text-[0.75rem] text-muted-foreground\">\n {live ? <span aria-hidden className=\"size-1.5 rounded-full bg-oca-orange-deep motion-safe:animate-pulse\" /> : null}\n {eyebrow}\n </p>\n ) : null}\n {title ? <p className=\"text-[1.125rem] font-medium leading-tight oca-tabular\">{title}</p> : null}\n {children}\n {footer ? <div className=\"border-t border-border pt-2\">{footer}</div> : null}\n </div>\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 { useRouter } from 'next/compat/router';\nimport 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\nconst SCHEME = /^[a-z][a-z\\d+.-]*:/i;\n\n/**\n * `../README` or `VerifyOk`, as generated pages write them, against the page\n * it is on: `/sdk/stamp-core/README`. The router adds the base path. Outside\n * a router it stays as written.\n */\nfunction useResolved(href: string): string {\n const router = useRouter();\n if (!router || !href || href.startsWith('/') || href.startsWith('#') || href.startsWith('?') || SCHEME.test(href)) return href;\n const here = router.asPath.split(/[?#]/)[0] || '/';\n const url = new URL(href, `https://page.invalid${here}`);\n return url.pathname + url.search + url.hash;\n}\n\n/**\n * A link in running text. A page of this site goes through the router, a\n * relative one (`../README`) resolved against the page; an API or a\n * /.well-known file is a plain anchor (the router would try to render it);\n * another site opens in a new tab, and says so to a screen reader.\n */\nexport function TextLink({\n href: written,\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 href = useResolved(written);\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","import { useContext } from 'react';\n\nimport { sharedContext } from './shared-context';\n\n/** Set by DocsShell: inside the docs, a link to the docs is a page of this site, through the router. */\nexport const InDocsContext = sharedContext<boolean>('in-docs', false);\n\nexport function useInDocs(): boolean {\n return useContext(InDocsContext);\n}\n","import { ArrowRight, ArrowUpRight } from 'lucide-react';\nimport Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport {\n DOCS_HREF,\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 { useInDocs } from '../lib/docs-context';\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, its tools, or its docs.\n */\nexport function ProtocolGrid({\n protocols = PROTOCOL_ORDER,\n link = 'page',\n className,\n}: {\n protocols?: readonly ProtocolSlug[];\n link?: 'page' | 'tool' | 'docs';\n className?: string;\n}) {\n // Inside the docs, their pages are this site's: through the router, under its base path.\n const inDocs = useInDocs();\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 {link === 'docs' && inDocs ? (\n <Link href={`/${p.slug}`} className={STRETCH}>\n {p.label}\n </Link>\n ) : (\n <a\n href={link === 'tool' ? p.toolHref : link === 'docs' ? `${DOCS_HREF}/${p.slug}` : p.pageHref}\n className={STRETCH}\n >\n {p.label}\n </a>\n )}\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 {/* A tool is another site; a page or the docs are on ochk.io. */}\n {link === 'tool' ? (\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 ) : (\n <ArrowRight\n aria-hidden\n className=\"size-4 transition-transform duration-200 group-hover:translate-x-0.5 group-hover:text-foreground\"\n />\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 { ArrowLeft, ArrowRight, ArrowUpRight, ChevronRight } from 'lucide-react';\nimport Link from 'next/link';\nimport {\n Children,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type RefObject,\n type TableHTMLAttributes,\n} from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Badge } from '../primitives/badge';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { Skeleton } from '../primitives/feedback';\nimport { StatusBadge, type Status } from '../primitives/status-badge';\nimport { CodeBlock } from './code-block';\nimport { Notice } from './data';\nimport { useActiveHeading, type TocItem } from './hero';\n\n/*\n * The parts of a docs page: where you are (Breadcrumbs), where to go next\n * (DocsPager), what is on this page (OnThisPage), and the blocks MDX writes\n * with (Callout, Steps, LinkCard, ApiTable, MdxTable, Diagram). DocsShell\n * (chrome) puts them in place; mdxComponents (./mdx) maps markdown onto them.\n */\n\nconst isInternal = (href: string) => href.startsWith('/') || href.startsWith('#');\n\n/** A router link for this site's pages, a plain anchor for another site. */\nfunction DocLink({ href, className, children, ...rest }: { href: string; className?: string; children: ReactNode; 'aria-label'?: string }) {\n return isInternal(href) ? (\n <Link href={href} className={className} {...rest}>\n {children}\n </Link>\n ) : (\n <a href={href} className={className} {...rest}>\n {children}\n </a>\n );\n}\n\n/* ── Breadcrumbs ─────────────────────────────────────────────────────── */\n\nexport interface Crumb {\n label: ReactNode;\n /** Omit for the page you are on. */\n href?: string;\n}\n\n/** Where this page sits: docs › section › page, with room on the right for \"View source\". */\nexport function Breadcrumbs({ items, action, className }: { items: Crumb[]; action?: ReactNode; className?: string }) {\n return (\n <div className={cn('flex min-h-11 items-center justify-between gap-4 sm:min-h-0', className)}>\n <nav aria-label=\"Breadcrumb\" className=\"min-w-0\">\n <ol className=\"flex min-w-0 items-center gap-1.5 text-[0.875rem] text-muted-foreground\">\n {items.map((c, i) => {\n const last = i === items.length - 1;\n return (\n <li key={i} className={cn('flex items-center gap-1.5', last ? 'min-w-0' : 'shrink-0')}>\n {c.href && !last ? (\n <DocLink href={c.href} className=\"inline-flex min-h-11 items-center transition-colors hover:text-foreground sm:min-h-0\">\n {c.label}\n </DocLink>\n ) : (\n <span aria-current={last ? 'page' : undefined} className={cn('truncate', last && 'text-foreground')}>\n {c.label}\n </span>\n )}\n {!last ? <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-oca-subtle\" /> : null}\n </li>\n );\n })}\n </ol>\n </nav>\n {action ? <div className=\"shrink-0 text-[0.875rem]\">{action}</div> : null}\n </div>\n );\n}\n\n/* ── Previous / next ─────────────────────────────────────────────────── */\n\nexport interface PagerLink {\n href: string;\n label: ReactNode;\n /** The section it is in, when that differs from this page's. */\n section?: ReactNode;\n}\n\n/** The page before and after this one, as two cards at the foot of the page. */\nexport function DocsPager({ prev, next, className }: { prev?: PagerLink; next?: PagerLink; className?: string }) {\n if (!prev && !next) return null;\n const card = (l: PagerLink, dir: 'prev' | 'next') => (\n <DocLink\n href={l.href}\n className={cn(\n 'group flex min-h-20 flex-col justify-center gap-1 rounded-2xl border border-border bg-card px-5 py-4 transition-colors hover:border-oca-hairline-strong',\n dir === 'next' && 'items-end text-right sm:col-start-2'\n )}\n >\n <span className=\"flex items-center gap-1.5 text-[0.8125rem] text-muted-foreground\">\n {dir === 'prev' ? <ArrowLeft aria-hidden className=\"size-3.5\" /> : null}\n {dir === 'prev' ? 'Previous' : 'Next'}\n {l.section ? <span aria-hidden>·</span> : null}\n {l.section ? <span className=\"truncate\">{l.section}</span> : null}\n {dir === 'next' ? <ArrowRight aria-hidden className=\"size-3.5\" /> : null}\n </span>\n <span className=\"text-[1rem] font-medium leading-snug text-foreground\">{l.label}</span>\n </DocLink>\n );\n return (\n <nav aria-label=\"Previous and next page\" className={cn('grid grid-cols-1 gap-3 border-t border-border pt-8 sm:grid-cols-2', className)}>\n {prev ? card(prev, 'prev') : null}\n {next ? card(next, 'next') : null}\n </nav>\n );\n}\n\n/* ── On this page ────────────────────────────────────────────────────── */\n\n/**\n * The page's h2s and h3s with ids, read from the rendered page. `key` (the\n * path) reads them again after a client-side move to another page.\n */\nexport function useHeadings(selector = '#docs-content', key?: string): { items: TocItem[]; activeId?: string } {\n const [items, setItems] = useState<TocItem[]>([]);\n useEffect(() => {\n const read = () => {\n const root = document.querySelector(selector);\n if (!root) return setItems([]);\n setItems(\n Array.from(root.querySelectorAll<HTMLHeadingElement>('h2[id], h3[id]')).map((h) => ({\n id: h.id,\n // The anchor link's \"#\" is not part of the name.\n label: (h.querySelector('[data-heading-text]') ?? h).textContent?.trim() ?? '',\n level: h.tagName === 'H3' ? 3 : 2,\n }))\n );\n };\n // Once after paint, once more for late layout (fonts, images).\n const raf = requestAnimationFrame(read);\n const t = setTimeout(read, 80);\n return () => {\n cancelAnimationFrame(raf);\n clearTimeout(t);\n };\n }, [selector, key]);\n const activeId = useActiveHeading(items.map((i) => i.id));\n return { items, activeId };\n}\n\n/** The list of a page's sections, the one being read marked. h3s sit in under their h2. */\nexport function OnThisPage({\n items,\n activeId,\n title = 'On this page',\n onNavigate,\n className,\n}: {\n items: TocItem[];\n activeId?: string;\n /** `null` for no visible title. */\n title?: ReactNode;\n onNavigate?: () => void;\n className?: string;\n}) {\n const id = useId();\n if (items.length === 0) return null;\n return (\n // With no visible title (a folded list under its own summary) the name is still \"On this page\".\n <nav aria-labelledby={title ? id : undefined} aria-label={title ? undefined : 'On this page'} className={className}>\n {title ? (\n <p id={id} className=\"mb-3 text-[0.875rem] font-medium\">\n {title}\n </p>\n ) : null}\n <ul>\n {items.map((t) => {\n const on = t.id === activeId;\n return (\n <li key={t.id}>\n <a\n href={`#${t.id}`}\n onClick={onNavigate}\n aria-current={on ? 'location' : undefined}\n className={cn(\n 'block border-l py-1.5 text-[0.875rem] leading-snug transition-colors',\n t.level === 3 ? 'pl-7' : 'pl-4',\n on ? 'border-foreground text-foreground' : 'border-border text-muted-foreground hover:text-foreground'\n )}\n >\n {t.label}\n </a>\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n\n/* ── Blocks MDX writes with ──────────────────────────────────────────── */\n\nconst CALLOUT_TONE = { note: 'neutral', warning: 'brand', danger: 'danger' } as const;\n\n/**\n * A note set apart from the text: `note` (the default), `warning` for\n * something that costs you if missed, `danger` for something that breaks.\n * It is part of the page, so it is a note to a screen reader, never an alert.\n */\nexport function Callout({\n tone = 'note',\n title,\n children,\n className,\n}: {\n tone?: keyof typeof CALLOUT_TONE;\n title?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n return (\n <Notice\n tone={CALLOUT_TONE[tone]}\n title={title}\n role=\"note\"\n // Markdown paragraphs inside take the note's size, not the page's.\n className={cn('my-6 [&_p]:my-0 [&_p]:text-[0.9375rem] [&_p]:leading-relaxed [&_p+p]:mt-3', className)}\n >\n {children}\n </Notice>\n );\n}\n\n/** One step of a guide: a title and whatever it takes (text, code). */\nexport function Step({ title, id, children }: { title: ReactNode; id?: string; children?: ReactNode }) {\n return (\n <li className=\"relative pb-8 pl-11 last:pb-0 [counter-increment:oca-step]\">\n {/* The number, and the line down to the next one. */}\n <span\n aria-hidden\n className=\"absolute left-0 top-0 flex size-7 items-center justify-center rounded-full border border-oca-hairline-strong bg-card text-[0.8125rem] oca-tabular text-foreground before:content-[counter(oca-step)]\"\n />\n <span aria-hidden className=\"absolute bottom-1 left-[0.8125rem] top-9 w-px bg-border\" />\n <h3 id={id} className=\"scroll-mt-28 pt-0.5 text-[1.0625rem] font-medium leading-snug tracking-[-0.008em] text-foreground\">\n {title}\n </h3>\n <div className=\"mt-2 text-muted-foreground [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\">{children}</div>\n </li>\n );\n}\n\n/**\n * A guide's steps, numbered, each with its title and body. For instructions\n * a reader follows in order; ProgressSteps is for where something stands.\n */\nexport function Steps({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <ol className={cn('not-prose my-8 flex flex-col [counter-reset:oca-step] [&>li:last-child>span:nth-child(2)]:hidden', className)}>\n {children}\n </ol>\n );\n}\n\n/** A card that leads somewhere: a title, one line, an optional icon. */\nexport function LinkCard({\n href,\n title,\n description,\n icon,\n meta,\n className,\n}: {\n href: string;\n title: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n /** Top right, beside the arrow: a status, a count. */\n meta?: ReactNode;\n className?: string;\n}) {\n const Arrow = isInternal(href) ? ArrowRight : ArrowUpRight;\n return (\n <DocLink\n href={href}\n className={cn(\n 'group flex h-full flex-col gap-3 rounded-[1.25rem] border border-border bg-card p-5 transition-colors hover:border-oca-hairline-strong',\n className\n )}\n >\n <span className=\"flex items-start justify-between gap-3\">\n {icon ? (\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-xl bg-muted text-foreground [&_svg]:size-[1.125rem]\">\n {icon}\n </span>\n ) : (\n <span className=\"text-[1rem] font-medium leading-snug text-foreground\">{title}</span>\n )}\n <span className=\"flex shrink-0 items-center gap-2\">\n {meta}\n <Arrow aria-hidden className=\"size-4 text-muted-foreground transition-transform group-hover:translate-x-0.5 group-hover:text-foreground\" />\n </span>\n </span>\n {icon ? <span className=\"text-[1rem] font-medium leading-snug text-foreground\">{title}</span> : null}\n {description ? <span className=\"text-[0.9375rem] leading-relaxed text-muted-foreground\">{description}</span> : null}\n </DocLink>\n );\n}\n\n/** LinkCards in a grid: one column on a phone, two or three beside each other. */\nexport function CardGrid({ columns = 2, children, className }: { columns?: 2 | 3; children: ReactNode; className?: string }) {\n return (\n <div className={cn('not-prose my-6 grid grid-cols-1 gap-3 sm:grid-cols-2', columns === 3 && 'lg:grid-cols-3', className)}>\n {children}\n </div>\n );\n}\n\n/* ── Tables ──────────────────────────────────────────────────────────── */\n\n/**\n * A markdown table: hairline rules, a quiet header, and sideways scrolling\n * with an edge that says so when it is wider than the column. Code in a\n * cell drops its pill, so an API table reads as a list of names.\n */\nexport function MdxTable({ className, ...props }: TableHTMLAttributes<HTMLTableElement>) {\n return (\n <div className=\"not-prose my-6 overflow-hidden rounded-2xl border border-border bg-card\">\n <ScrollFade fade=\"var(--card)\">\n <table\n className={cn(\n 'w-full border-collapse text-left text-[0.875rem] leading-relaxed',\n '[&_th]:whitespace-nowrap [&_th]:border-b [&_th]:border-oca-hairline-strong [&_th]:bg-oca-table-head [&_th]:px-4 [&_th]:py-2.5 [&_th]:text-[0.8125rem] [&_th]:font-medium [&_th]:text-foreground',\n '[&_td]:border-t [&_td]:border-border [&_td]:px-4 [&_td]:py-2.5 [&_td]:align-top [&_td]:text-muted-foreground [&_tbody_tr:first-child_td]:border-t-0',\n '[&_td_code]:bg-transparent [&_td_code]:p-0 [&_td_code]:text-foreground [&_td:first-child]:text-foreground',\n '[&_[align=center]]:text-center [&_[align=right]]:text-right',\n // On a phone a cell keeps a readable width; the table scrolls instead of crushing it.\n 'max-sm:[&_td]:min-w-[9rem]',\n className\n )}\n {...props}\n />\n </ScrollFade>\n </div>\n );\n}\n\nexport interface ApiRow {\n name: string;\n /** The row's anchor: a link to `#id` lands on this row. */\n id?: string;\n type?: ReactNode;\n required?: boolean;\n default?: ReactNode;\n description?: ReactNode;\n /** Where it is defined: a link to the source line. Its column is named once, in the header. */\n source?: ReactNode;\n deprecated?: boolean;\n /** Where the member stands, when it is not simply live. */\n status?: Exclude<Status, 'live' | 'good' | 'caution' | 'refused'>;\n}\n\nconst said = (n: ReactNode) => n !== undefined && n !== null && n !== false && n !== '';\n\n/**\n * Parameters, props or fields: name and type in mono, required or default,\n * what it does and where it is defined. A table from sm up; on a phone each\n * row is a card with the name and type on top. One set of rows serves both,\n * so a row's `id` is a single anchor. A column nobody fills is left out.\n */\nexport function ApiTable({\n rows,\n caption,\n nameHeader = 'Name',\n className,\n}: {\n rows: ApiRow[];\n caption?: string;\n nameHeader?: string;\n className?: string;\n}) {\n const hasDefault = rows.some((r) => r.default !== undefined);\n const hasDescription = rows.some((r) => said(r.description));\n const hasSource = rows.some((r) => said(r.source));\n const cell = 'px-4 py-3 max-sm:p-0';\n return (\n <div className={cn('not-prose my-6 overflow-hidden rounded-2xl border border-border bg-card', className)}>\n <ScrollFade fade=\"var(--card)\">\n <table className=\"w-full border-collapse text-left text-[0.875rem] max-sm:block\">\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead className=\"max-sm:sr-only\">\n <tr className=\"border-b border-oca-hairline-strong bg-oca-table-head text-[0.8125rem]\">\n <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">{nameHeader}</th>\n <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Type</th>\n {hasDefault ? <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Default</th> : null}\n {hasDescription ? <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Description</th> : null}\n {hasSource ? <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Defined in</th> : null}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border max-sm:block\">\n {rows.map((r) => (\n <tr\n key={r.id ?? r.name}\n id={r.id}\n className=\"scroll-mt-28 align-top target:bg-muted max-sm:flex max-sm:flex-col max-sm:gap-1.5 max-sm:px-4 max-sm:py-3.5\"\n >\n <th scope=\"row\" className={cn(cell, 'text-left font-normal')}>\n <span className=\"flex flex-col items-start gap-1 max-sm:flex-row max-sm:flex-wrap max-sm:items-baseline max-sm:gap-x-2\">\n <code className={cn('font-mono text-[0.8125rem] text-foreground max-sm:text-[0.875rem]', r.deprecated && 'line-through decoration-oca-subtle')}>\n {r.name}\n </code>\n {r.required ? <span className=\"text-[0.75rem] text-oca-accent-ink\">Required</span> : null}\n {r.deprecated ? <Badge tone=\"muted\">Deprecated</Badge> : null}\n {r.status ? <StatusBadge status={r.status} /> : null}\n </span>\n </th>\n <td className={cn(cell, 'font-mono text-[0.8125rem] text-muted-foreground max-sm:break-all', !said(r.type) && 'max-sm:hidden')}>\n {r.type ?? '—'}\n </td>\n {hasDefault ? (\n <td className={cn(cell, 'font-mono text-[0.8125rem] text-muted-foreground max-sm:order-last', r.default === undefined && 'max-sm:hidden')}>\n <span className=\"font-sans sm:hidden\">Default </span>\n {r.default ?? '—'}\n </td>\n ) : null}\n {hasDescription ? (\n <td className={cn(cell, 'leading-relaxed text-muted-foreground', !said(r.description) && 'max-sm:hidden')}>\n {r.description}\n </td>\n ) : null}\n {hasSource ? (\n <td className={cn(cell, 'text-[0.8125rem] text-muted-foreground max-sm:order-last max-sm:break-all', !said(r.source) && 'max-sm:hidden')}>\n {r.source}\n </td>\n ) : null}\n </tr>\n ))}\n </tbody>\n </table>\n </ScrollFade>\n </div>\n );\n}\n\n/* ── Diagrams ────────────────────────────────────────────────────────── */\n\n/** The two calls Diagram makes on mermaid; the package does not depend on it. */\nexport interface MermaidLike {\n initialize(config: Record<string, unknown>): void;\n render(id: string, text: string): Promise<{ svg: string }>;\n}\n\nexport type MermaidLoader = () => Promise<MermaidLike | { default: MermaidLike }>;\n\nfunction useDarkMode(): boolean {\n const [dark, setDark] = useState(false);\n useEffect(() => {\n const root = document.documentElement;\n const read = () => setDark(root.classList.contains('dark'));\n read();\n const mo = new MutationObserver(read);\n mo.observe(root, { attributes: true, attributeFilter: ['class'] });\n return () => mo.disconnect();\n }, []);\n return dark;\n}\n\n/** Mermaid's palette from the tokens on the page, so a diagram follows light and dark. */\nfunction mermaidTheme(el: HTMLElement): Record<string, string> {\n const css = getComputedStyle(el);\n const v = (name: string) => css.getPropertyValue(name).trim();\n const card = v('--card');\n const muted = v('--muted');\n const text = v('--foreground');\n const subtle = v('--muted-foreground');\n const line = v('--input');\n const hair = v('--oca-hairline-strong');\n return {\n background: 'transparent',\n fontFamily: css.fontFamily,\n fontSize: '14px',\n textColor: text,\n mainBkg: card,\n primaryColor: card,\n primaryTextColor: text,\n primaryBorderColor: hair,\n secondaryColor: muted,\n secondaryTextColor: text,\n secondaryBorderColor: hair,\n tertiaryColor: muted,\n tertiaryTextColor: text,\n tertiaryBorderColor: hair,\n nodeBorder: hair,\n lineColor: line,\n edgeLabelBackground: card,\n clusterBkg: muted,\n clusterBorder: hair,\n titleColor: text,\n noteBkgColor: muted,\n noteTextColor: text,\n noteBorderColor: hair,\n actorBkg: card,\n actorBorder: hair,\n actorTextColor: text,\n actorLineColor: line,\n signalColor: text,\n signalTextColor: text,\n labelBoxBkgColor: card,\n labelBoxBorderColor: hair,\n labelTextColor: text,\n loopTextColor: subtle,\n activationBkgColor: muted,\n activationBorderColor: hair,\n sequenceNumberColor: card,\n };\n}\n\n/*\n * Mermaid draws at 100% width with its own size as a max-width, so a wide\n * diagram shrinks to fit and its labels with it. Give it its own width\n * instead, and read that width back: one up to a third wider than the\n * column scales down to fit (its 14px labels stay at 10.5px or more); a\n * wider one keeps its type size and scrolls sideways.\n */\nconst FIT = 4 / 3;\n\nfunction naturalSize(svg: string): { svg: string; width: number | null } {\n const w = svg.match(/viewBox=\"[\\d.-]+ [\\d.-]+ ([\\d.]+) [\\d.]+\"/)?.[1];\n if (!w) return { svg, width: null };\n const width = Math.ceil(Number(w));\n return {\n svg: svg.replace(/<svg([^>]*?)\\swidth=\"100%\"/, `<svg$1 width=\"${width}\"`).replace(/max-width:\\s*[\\d.]+px;?/, ''),\n width,\n };\n}\n\n/** The width a diagram has to fill: the figure, less the well's padding. */\nfunction useInnerWidth(ref: RefObject<HTMLElement | null>, padding: number): number | null {\n const [width, setWidth] = useState<number | null>(null);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const ro = new ResizeObserver(() => setWidth(el.clientWidth - padding));\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref, padding]);\n return width;\n}\n\n/**\n * A mermaid diagram drawn in the page's own colours, again whenever the\n * page turns light or dark. Pass `load` (`() => import('mermaid')`) so\n * mermaid is fetched only on a page that draws one. If it cannot be drawn,\n * the source shows instead.\n */\nexport function Diagram({ chart, caption, load, className }: { chart: string; caption?: ReactNode; load: MermaidLoader; className?: string }) {\n const ref = useRef<HTMLDivElement>(null);\n const dark = useDarkMode();\n const raw = useId();\n const [drawn, setDrawn] = useState<{ svg: string; width: number | null } | null>(null);\n const [failed, setFailed] = useState(false);\n const room = useInnerWidth(ref, 48);\n const fits = drawn?.width != null && room != null && drawn.width <= room * FIT;\n useEffect(() => {\n let live = true;\n const el = ref.current;\n if (!el) return;\n (async () => {\n try {\n const mod = await load();\n const mermaid = 'default' in mod ? mod.default : mod;\n mermaid.initialize({ startOnLoad: false, securityLevel: 'strict', theme: 'base', themeVariables: mermaidTheme(el) });\n const { svg } = await mermaid.render(`oca-diagram-${raw.replace(/[^a-zA-Z0-9]/g, '')}-${dark ? 'd' : 'l'}`, chart);\n if (live) {\n setDrawn(naturalSize(svg));\n setFailed(false);\n }\n } catch {\n if (live) setFailed(true);\n }\n })();\n return () => {\n live = false;\n };\n }, [chart, dark, load, raw]);\n if (failed) return <CodeBlock code={chart} caption=\"Diagram (shown as its source)\" className={cn('my-6', className)} />;\n return (\n <figure ref={ref} className={cn('not-prose my-6 overflow-hidden rounded-[1.25rem] border border-border bg-card', className)}>\n {drawn ? (\n <ScrollFade fade=\"var(--card)\">\n <div\n data-fit={fits ? '' : undefined}\n className={cn(\n 'flex justify-center p-6 [&_svg]:h-auto',\n fits ? 'w-full [&_svg]:max-w-full' : 'w-max min-w-full [&_svg]:max-w-none'\n )}\n role=\"img\"\n aria-label={typeof caption === 'string' ? caption : 'Diagram'}\n dangerouslySetInnerHTML={{ __html: drawn.svg }}\n />\n </ScrollFade>\n ) : (\n <div role=\"status\" aria-label=\"Drawing the diagram\" className=\"p-6\">\n <Skeleton className=\"h-40 w-full rounded-xl\" />\n </div>\n )}\n {caption ? <figcaption className=\"border-t border-border px-5 py-3 text-[0.8125rem] text-muted-foreground\">{caption}</figcaption> : null}\n </figure>\n );\n}\n\n/* ── Headings with anchors ───────────────────────────────────────────── */\n\nconst HEADING = {\n h1: 'oca-display-3 mb-4 text-foreground',\n h2: 'mb-3 mt-12 text-[1.375rem] font-medium leading-tight tracking-[-0.015em] text-foreground md:text-[1.5rem]',\n h3: 'mb-2 mt-9 text-[1.125rem] font-medium leading-snug tracking-[-0.01em] text-foreground',\n h4: 'mb-2 mt-7 text-[1rem] font-medium leading-snug text-foreground',\n} as const;\n\n/**\n * A docs heading. With an id it carries a \"#\" link to itself, shown on\n * hover or focus, so a reader can copy a link to the section.\n */\nexport function DocsHeading({\n as: Tag,\n id,\n children,\n className,\n ...props\n}: HTMLAttributes<HTMLHeadingElement> & { as: keyof typeof HEADING }) {\n return (\n <Tag id={id} className={cn('group scroll-mt-28', HEADING[Tag], className)} {...props}>\n <span data-heading-text=\"\">{children}</span>\n {id && Tag !== 'h1' ? (\n <a\n href={`#${id}`}\n className=\"ml-2 inline-block rounded-md px-1 align-baseline text-[0.85em] font-normal text-oca-subtle no-underline opacity-0 transition-opacity hover:text-foreground focus-visible:opacity-100 group-hover:opacity-100\"\n >\n <span aria-hidden>#</span>\n <span className=\"sr-only\">Link to this section</span>\n </a>\n ) : null}\n </Tag>\n );\n}\n\n/** Text of an MDX `<code>` child, which may arrive as a string or pieces of one. */\nexport function codeText(node: ReactNode): string {\n if (typeof node === 'string') return node;\n if (typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(codeText).join('');\n if (isValidElement(node)) return codeText((node as ReactElement<{ children?: ReactNode }>).props.children);\n return '';\n}\n\n/** The language of an MDX code fence, from its `language-xx` class. */\nexport function codeLang(node: ReactNode): string | undefined {\n const child = Children.toArray(node)[0];\n if (!isValidElement(child)) return undefined;\n const cls = (child as ReactElement<{ className?: string }>).props.className ?? '';\n return cls.match(/language-([\\w+-]+)/)?.[1];\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 { Callout } from './docs';\nimport { PageHero } from './hero';\nimport { TextLink } from './text-link';\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/** Which normative file a page summarises: its default file, title and sentence. */\nexport type SpecFileKind = 'spec' | 'security' | 'rationale';\n\nconst SPEC_FILE: Record<SpecFileKind, { file: string; title: string; note: string }> = {\n spec: {\n file: 'SPEC.md',\n title: 'Normative source',\n note: 'This page is a human-readable summary. The authoritative copy lives in the spec repo. If the two ever drift, the repo wins.',\n },\n security: {\n file: 'SECURITY.md',\n title: 'Normative threat model',\n note: 'This page is the short form. The authoritative, numbered threat model lives in the spec repo.',\n },\n rationale: {\n file: 'WHY.md',\n title: 'Design rationale',\n note: 'This page is the short version. The full rationale and the rejected-design log live in the spec repo.',\n },\n};\n\nexport type SpecCardProps =\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 repo?: never;\n }\n | {\n /** One file in any spec repo, `oc-chat-protocol` included: where a page's normative copy lives. */\n repo: string;\n /** Default: the kind's file (SPEC.md, SECURITY.md, WHY.md). */\n file?: string;\n kind?: SpecFileKind;\n version?: string;\n /** Replaces the kind's sentence. */\n note?: ReactNode;\n className?: string;\n protocol?: never;\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. Given a `repo` instead of a protocol, it is\n * a note naming one file in that repo as the normative copy of the page.\n */\nexport function SpecCard(props: SpecCardProps) {\n return props.repo !== undefined ? <SpecFileNote {...props} /> : <ProtocolSpecCard {...props} />;\n}\n\nfunction SpecFileNote({ repo, file, kind = 'spec', version, note, className }: Extract<SpecCardProps, { repo: string }>) {\n const d = SPEC_FILE[kind];\n const f = file ?? d.file;\n return (\n <Callout title={version ? `${d.title} · ${version}` : d.title} className={className}>\n <p>{note ?? d.note}</p>\n <p>\n <TextLink href={`https://github.com/orangecheck/${repo}/blob/main/${f}`} className=\"break-all font-mono text-[0.875rem]\">\n {`${repo}/${f}`}\n </TextLink>\n </p>\n </Callout>\n );\n}\n\nfunction ProtocolSpecCard({ protocol, version, license, vectors, size = 'md', className }: Extract<SpecCardProps, { protocol: ProtocolSlug }>) {\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, CircleSlash, 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-block';\nimport { KeyValueList, type KeyValueItem } from './data';\n\n/**\n * `none`: there is nothing to check, and that is a fact (no timestamp yet, no\n * stake bound). `unchecked`: there may be, but this check did not look.\n */\nexport type CheckState = 'ok' | 'fail' | 'pending' | 'none' | '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 none: { word: 'None', icon: <CircleSlash />, tone: 'text-muted-foreground' },\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 as: Heading = 'h2',\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 /** The title's level: h2 under the page's title (the default), h3 inside a section. */\n as?: 'h2' | 'h3';\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 {/* items-start sizes each line to its longest word: a Bitcoin address must be free to break. */}\n <header className=\"flex flex-col items-start gap-3 p-6 md:p-8\">\n <StatusBadge status={verdict} />\n <Heading className=\"oca-display-3 [overflow-wrap:anywhere]\">{title}</Heading>\n {summary ? <p className=\"oca-body max-w-[40rem] [overflow-wrap:anywhere]\">{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 scheme = 'bip322',\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 /** The signature the wallet is asked for: BIP-322, or a legacy (BIP-137) one. The hint names it. */\n scheme?: 'bip322' | 'legacy';\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 {/* SignMessage leads with its own words, so a wallet button's heading stays out. */}\n <div className=\"flex flex-wrap gap-2 [--oc-wallet-heading:none]\">{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 {/* A message is exact bytes and often one long id: it wraps here, and the copy keeps every byte. */}\n <CodeBlock code={message} caption=\"Message to sign\" wrap />\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&rsquo;s &ldquo;sign message&rdquo; ({scheme === 'legacy' ? 'legacy, BIP-137' : '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 * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { createContext, useContext, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/* Parts a signed-in page repeats: a block's title, a list in a card, a choice between cards. */\n\n/* ── SectionTitle ────────────────────────────────────────────────────── */\n\n/**\n * A block's title on a signed-in page or a tool: the name, a count or state\n * after it, one line under it, and an action at the right that wraps under\n * the text on a phone. Public pages use SectionHeading, at display size.\n */\nexport function SectionTitle({\n title,\n meta,\n description,\n action,\n as: Tag = 'h2',\n size = 'md',\n tone = 'default',\n id,\n className,\n}: {\n title: ReactNode;\n /** A count or a state after the title: \"12 of 40\". */\n meta?: ReactNode;\n description?: ReactNode;\n /** A link or buttons for the block: \"View all\", \"Add\". */\n action?: ReactNode;\n as?: 'h2' | 'h3';\n /** `sm` for a group inside a pane or a card. */\n size?: 'md' | 'sm';\n /** `danger` for a block whose actions cannot be undone. */\n tone?: 'default' | 'danger';\n /** The heading's id, for a link to the block. */\n id?: string;\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-wrap items-end justify-between gap-x-4 gap-y-3', className)}>\n <div className=\"flex min-w-0 max-w-[40rem] flex-[1_1_16rem] flex-col gap-1\">\n <Tag\n id={id}\n className={cn(\n 'flex scroll-mt-24 flex-wrap items-baseline gap-x-3',\n size === 'sm' ? 'oca-title-sm' : 'oca-title',\n tone === 'danger' && 'text-destructive'\n )}\n >\n {title}\n {meta ? <span className=\"oca-tabular text-[0.875rem] font-normal tracking-normal text-muted-foreground\">{meta}</span> : null}\n </Tag>\n {description ? <p className=\"text-[0.9375rem] leading-relaxed text-muted-foreground\">{description}</p> : null}\n </div>\n {action ? <div className=\"flex shrink-0 flex-wrap items-center gap-2\">{action}</div> : null}\n </div>\n );\n}\n\n/* ── ListCard ────────────────────────────────────────────────────────── */\n\n/**\n * Rows in one card, a hairline between each: conversations, keys, backers.\n * The card clips to its corners, so a row's hover fill and inset focus ring\n * stay inside it.\n */\nexport function ListCard({\n as: Tag = 'ul',\n className,\n ...props\n}: HTMLAttributes<HTMLElement> & { as?: 'ul' | 'ol' | 'div' }) {\n return <Tag className={cn('divide-y divide-border overflow-clip rounded-[1.25rem] border border-border bg-card', className)} {...props} />;\n}\n\n/* ── ChoiceGroup ─────────────────────────────────────────────────────── */\n\nconst ChoiceSize = createContext<'md' | 'sm'>('md');\n\nconst COLUMNS = { 1: '', 2: 'sm:grid-cols-2', 3: 'sm:grid-cols-2 lg:grid-cols-3' } as const;\n\n/**\n * One choice from a few, each a card: who you are, who can post, how often.\n * A radio group underneath, so a screen reader hears \"2 of 3, checked\" and\n * the arrow keys move between them. `sm` sets them as rows, for a dialog.\n */\nexport function ChoiceGroup<T extends string>({\n value,\n onValueChange,\n label,\n columns = 1,\n size = 'md',\n disabled,\n className,\n children,\n}: {\n value: T | undefined;\n onValueChange: (value: T) => void;\n /** What is being chosen, for a screen reader. */\n label: string;\n columns?: 1 | 2 | 3;\n size?: 'md' | 'sm';\n disabled?: boolean;\n className?: string;\n children: ReactNode;\n}) {\n return (\n <ChoiceSize.Provider value={size}>\n <RadioGroupPrimitive.Root\n value={value ?? ''}\n onValueChange={(v) => onValueChange(v as T)}\n aria-label={label}\n disabled={disabled}\n className={cn('grid', size === 'sm' ? 'gap-1.5' : 'gap-3', COLUMNS[columns], className)}\n >\n {children}\n </RadioGroupPrimitive.Root>\n </ChoiceSize.Provider>\n );\n}\n\nexport function ChoiceCard({\n value,\n title,\n description,\n icon,\n disabled,\n className,\n}: {\n value: string;\n title: ReactNode;\n description?: ReactNode;\n /** A lucide icon; it takes the accent when chosen. */\n icon?: ReactNode;\n disabled?: boolean;\n className?: string;\n}) {\n const sm = useContext(ChoiceSize) === 'sm';\n return (\n <RadioGroupPrimitive.Item\n value={value}\n disabled={disabled}\n className={cn(\n 'group flex w-full min-w-0 items-start gap-3 border text-left outline-none transition-colors',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'border-border bg-card data-[state=checked]:border-foreground data-[state=checked]:bg-accent data-[state=unchecked]:hover:border-oca-hairline-strong',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n sm ? 'min-h-11 rounded-xl px-3.5 py-2.5' : 'rounded-[1.25rem] p-5',\n className\n )}\n >\n {icon ? (\n <span\n aria-hidden\n className={cn(\n 'shrink-0 text-muted-foreground group-data-[state=checked]:text-oca-accent-ink [&_svg]:size-full',\n sm ? 'mt-0.5 size-4' : 'size-6'\n )}\n >\n {icon}\n </span>\n ) : null}\n <span className=\"flex min-w-0 flex-col gap-1\">\n <span className={sm ? 'text-[0.9375rem] font-medium' : 'oca-title-sm'}>{title}</span>\n {description ? <span className=\"text-[0.875rem] leading-relaxed text-muted-foreground\">{description}</span> : null}\n </span>\n </RadioGroupPrimitive.Item>\n );\n}\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { CornerDownLeft, Search } from 'lucide-react';\nimport { forwardRef, useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Kbd, Spinner } from '../primitives/feedback';\n\n/*\n * Search, as a dialog: a field, results in groups, and the keyboard\n * throughout (⌘K or / to open, arrows to move, Enter to open, Esc to\n * close). It knows nothing about the index: `onQuery` returns the results,\n * from Pagefind, an API or a list in memory.\n */\n\nexport interface SearchResult {\n id: string;\n /** Where it goes. A result with `run` instead is an action. */\n href?: string;\n /** An action (a command palette's \"Lock the vault\"): runs instead of following a link. */\n run?: () => void;\n /** Before the title: what kind of thing it is. */\n icon?: ReactNode;\n /** At the end of the row: a word (\"Action\", \"Login\"), a shortcut. */\n meta?: ReactNode;\n title: ReactNode;\n /** Where it sits: \"OC Stamp › Verify\". */\n section?: ReactNode;\n excerpt?: ReactNode;\n /** An excerpt with <mark> around the matched words, from your own index. Trusted markup only. */\n excerptHtml?: string;\n}\n\nexport interface SearchGroup {\n label: ReactNode;\n results: SearchResult[];\n}\n\nexport type SearchQuery = (query: string, signal: AbortSignal) => Promise<SearchGroup[]> | SearchGroup[];\n\nfunction useMacKeys(): boolean {\n const [mac, setMac] = useState(true);\n useEffect(() => {\n setMac(/Mac|iPhone|iPad/.test(navigator.platform || navigator.userAgent));\n }, []);\n return mac;\n}\n\nconst typing = (el: EventTarget | null) =>\n el instanceof HTMLElement && (el.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName));\n\n/** The header's way into search: a field-shaped button with its shortcut; an icon on a phone. */\nexport const SearchButton = forwardRef<HTMLButtonElement, { label?: string; onClick?: () => void; className?: string }>(function SearchButton(\n { label = 'Search', onClick, className },\n ref\n) {\n const mac = useMacKeys();\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n aria-keyshortcuts={mac ? 'Meta+K' : 'Control+K'}\n className={cn(\n 'inline-flex size-10 items-center justify-center gap-2 rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n 'md:h-10 md:w-56 md:justify-start md:border md:border-border md:bg-card md:pl-3.5 md:pr-2 md:hover:border-oca-hairline-strong md:hover:bg-card',\n className\n )}\n >\n <Search aria-hidden className=\"size-[1.125rem] shrink-0 md:size-4\" />\n {/* The word is the button's name at every width; a phone shows only the icon. */}\n <span className=\"sr-only flex-1 text-left text-[0.9375rem] md:not-sr-only\">{label}</span>\n <Kbd aria-hidden className=\"hidden md:inline-flex\">\n {mac ? '⌘K' : 'Ctrl K'}\n </Kbd>\n </button>\n );\n});\n\nexport interface SearchDialogProps {\n onQuery: SearchQuery;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onSelect?: (result: SearchResult) => void;\n /** Render the SearchButton that opens it. */\n button?: boolean;\n /** ⌘K / Ctrl+K and / open it. */\n hotkey?: boolean;\n label?: string;\n placeholder?: string;\n /** Shown before anything is typed: popular pages, a hint. */\n idle?: ReactNode;\n /** The query it opens with: a `?q=` from the address. */\n defaultQuery?: string;\n debounceMs?: number;\n className?: string;\n /** List before anything is typed: `onQuery('')` gives what to show first (recent items, actions). */\n browse?: boolean;\n}\n\n/**\n * Search the site. Uncontrolled it brings its own button (`button`), and\n * ⌘K or / opens it from anywhere on the page; pass `open` and\n * `onOpenChange` to drive it yourself. Choosing a result calls `onSelect`\n * (a router's push) or follows its link.\n */\nexport function SearchDialog({\n onQuery,\n open: openProp,\n onOpenChange,\n onSelect,\n button = true,\n hotkey = true,\n label = 'Search',\n placeholder = 'Search the docs',\n idle,\n defaultQuery = '',\n debounceMs = 120,\n browse = false,\n className,\n}: SearchDialogProps) {\n const [own, setOwn] = useState(false);\n const open = openProp ?? own;\n const setOpen = (v: boolean) => {\n if (openProp === undefined) setOwn(v);\n onOpenChange?.(v);\n };\n const [query, setQuery] = useState(defaultQuery);\n const [groups, setGroups] = useState<SearchGroup[]>([]);\n const [state, setState] = useState<'idle' | 'loading' | 'done' | 'error'>('idle');\n const [active, setActive] = useState(0);\n const listId = useId();\n const listRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n // Where focus was when it opened, to go back to on close.\n const returnTo = useRef<HTMLElement | null>(null);\n const flat = useMemo(() => groups.flatMap((g) => g.results), [groups]);\n // The latest props, for listeners and timers set up once.\n const latest = useRef({ open, setOpen, onQuery });\n latest.current = { open, setOpen, onQuery };\n\n useEffect(() => {\n if (!hotkey) return;\n const onKey = (e: KeyboardEvent) => {\n const { open: isOpen, setOpen: set } = latest.current;\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') {\n e.preventDefault();\n set(!isOpen);\n } else if (e.key === '/' && !isOpen && !typing(e.target)) {\n e.preventDefault();\n set(true);\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [hotkey]);\n\n useEffect(() => {\n const q = query.trim();\n if (!q && !(browse && open)) {\n setGroups([]);\n setState('idle');\n return;\n }\n const ctl = new AbortController();\n setState('loading');\n const t = setTimeout(async () => {\n try {\n const out = await latest.current.onQuery(q, ctl.signal);\n if (ctl.signal.aborted) return;\n setGroups(out.filter((g) => g.results.length > 0));\n setActive(0);\n setState('done');\n } catch {\n if (!ctl.signal.aborted) setState('error');\n }\n }, debounceMs);\n return () => {\n clearTimeout(t);\n ctl.abort();\n };\n }, [query, debounceMs, browse, open]);\n\n useEffect(() => {\n listRef.current?.querySelector('[aria-selected=\"true\"]')?.scrollIntoView({ block: 'nearest' });\n }, [active]);\n\n const choose = (r: SearchResult) => {\n setOpen(false);\n if (r.run) r.run();\n else if (onSelect) onSelect(r);\n else if (r.href) window.location.assign(r.href);\n };\n const optionId = (i: number) => `${listId}-o${i}`;\n const showList = state === 'done' && flat.length > 0;\n let index = -1;\n\n return (\n <>\n {button ? <SearchButton ref={buttonRef} label={label} onClick={() => setOpen(true)} className={className} /> : null}\n <DialogPrimitive.Root open={open} onOpenChange={setOpen}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"oca-animate-fade fixed inset-0 z-50 bg-[rgb(10_10_10/0.38)] backdrop-blur-[2px]\" />\n <DialogPrimitive.Content\n aria-describedby={undefined}\n onOpenAutoFocus={() => {\n const el = document.activeElement;\n returnTo.current = el instanceof HTMLElement && el !== document.body ? el : null;\n }}\n // With no Dialog.Trigger, Radix would leave focus on the page's body.\n onCloseAutoFocus={(e) => {\n const back = returnTo.current?.isConnected ? returnTo.current : buttonRef.current;\n if (back) {\n e.preventDefault();\n back.focus();\n }\n }}\n className=\"oca-animate-rise fixed left-1/2 top-3 z-50 flex max-h-[calc(100dvh-1.5rem)] w-[calc(100vw-1.5rem)] -translate-x-1/2 flex-col overflow-hidden rounded-[1.5rem] border border-border bg-popover text-popover-foreground shadow-xl outline-none sm:top-[12vh] sm:max-h-[min(36rem,76vh)] sm:w-[min(92vw,40rem)]\"\n >\n <DialogPrimitive.Title className=\"sr-only\">{label}</DialogPrimitive.Title>\n <div className=\"flex h-14 shrink-0 items-center gap-3 border-b border-border pl-5 pr-3\">\n {state === 'loading' ? (\n <Spinner className=\"size-[1.125rem] text-muted-foreground\" />\n ) : (\n <Search aria-hidden className=\"size-[1.125rem] shrink-0 text-muted-foreground\" />\n )}\n <input\n autoFocus\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={(e) => {\n if (!showList) return;\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const d = e.key === 'ArrowDown' ? 1 : -1;\n setActive((a) => (a + d + flat.length) % flat.length);\n } else if (e.key === 'Enter' && flat[active]) {\n e.preventDefault();\n choose(flat[active]!);\n }\n }}\n placeholder={placeholder}\n role=\"combobox\"\n aria-label={label}\n aria-expanded={showList}\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={showList ? optionId(active) : undefined}\n spellCheck={false}\n autoComplete=\"off\"\n className=\"h-full min-w-0 flex-1 bg-transparent text-base text-foreground outline-none placeholder:text-oca-subtle\"\n />\n <DialogPrimitive.Close className=\"inline-flex h-8 shrink-0 items-center rounded-md border border-border px-2 text-[0.75rem] text-muted-foreground transition-colors hover:text-foreground\">\n {/* A phone has no Esc key. */}\n <span className=\"sm:hidden\">Close</span>\n <span className=\"max-sm:hidden\" aria-hidden>\n Esc\n </span>\n <span className=\"sr-only max-sm:hidden\">Close search</span>\n </DialogPrimitive.Close>\n </div>\n <div ref={listRef} className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain p-2\">\n <div id={listId} role=\"listbox\" aria-label=\"Results\" className={cn(!showList && 'hidden')}>\n {groups.map((g, gi) => (\n <div key={gi} role=\"group\" aria-label={typeof g.label === 'string' ? g.label : undefined} className=\"pb-1\">\n <p aria-hidden className=\"px-3 pb-1.5 pt-3 text-[0.8125rem] text-muted-foreground\">\n {g.label}\n </p>\n {g.results.map((r) => {\n index++;\n const i = index;\n const on = i === active;\n // A place is a link (it opens in a new tab with a modifier); an action is not.\n const Option = r.href ? 'a' : 'div';\n return (\n <Option\n key={r.id}\n id={optionId(i)}\n {...(r.href ? { href: r.href } : {})}\n role=\"option\"\n aria-selected={on}\n tabIndex={-1}\n onMouseMove={() => setActive(i)}\n onClick={(e) => {\n if (r.href && (e.metaKey || e.ctrlKey || e.shiftKey)) return;\n e.preventDefault();\n choose(r);\n }}\n className={cn(\n 'flex items-start gap-3 rounded-xl px-3 py-2.5 transition-colors',\n on ? 'bg-accent' : 'hover:bg-accent',\n !r.href && 'cursor-pointer'\n )}\n >\n {r.icon ? (\n <span aria-hidden className=\"mt-0.5 flex size-5 shrink-0 items-center justify-center text-muted-foreground [&_svg]:size-[1.0625rem]\">\n {r.icon}\n </span>\n ) : null}\n <span className=\"flex min-w-0 flex-1 flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem] font-medium text-foreground\">{r.title}</span>\n {r.section ? <span className=\"truncate text-[0.8125rem] text-muted-foreground\">{r.section}</span> : null}\n {r.excerptHtml ? (\n <span\n className=\"line-clamp-2 text-[0.875rem] leading-snug text-muted-foreground [&_mark]:rounded-sm [&_mark]:bg-[color-mix(in_oklab,var(--oca-orange)_22%,transparent)] [&_mark]:px-0.5 [&_mark]:text-foreground\"\n dangerouslySetInnerHTML={{ __html: r.excerptHtml }}\n />\n ) : r.excerpt ? (\n <span className=\"line-clamp-2 text-[0.875rem] leading-snug text-muted-foreground\">{r.excerpt}</span>\n ) : null}\n </span>\n {r.meta ? <span className=\"mt-0.5 shrink-0 text-[0.8125rem] text-muted-foreground\">{r.meta}</span> : null}\n <CornerDownLeft aria-hidden className={cn('mt-1 size-4 shrink-0 text-muted-foreground', !on && 'invisible')} />\n </Option>\n );\n })}\n </div>\n ))}\n </div>\n {state === 'idle' ? (\n <div className=\"px-3 py-6 text-[0.9375rem] text-muted-foreground\">\n {idle ?? 'Type a word: a protocol, a function, an error.'}\n </div>\n ) : null}\n {state === 'done' && flat.length === 0 ? (\n <p role=\"status\" className=\"px-3 py-6 text-[0.9375rem] text-muted-foreground\">\n {query.trim() ? <>No results for &ldquo;{query.trim()}&rdquo;.</> : 'Nothing here yet.'}\n </p>\n ) : null}\n {state === 'error' ? (\n <p role=\"status\" className=\"px-3 py-6 text-[0.9375rem] text-muted-foreground\">\n Search is not available right now. Try again in a moment.\n </p>\n ) : null}\n </div>\n <div aria-hidden className=\"hidden shrink-0 items-center gap-4 border-t border-border px-5 py-2.5 text-[0.75rem] text-muted-foreground sm:flex\">\n <span className=\"flex items-center gap-1.5\">\n <Kbd>↑</Kbd>\n <Kbd>↓</Kbd> to move\n </span>\n <span className=\"flex items-center gap-1.5\">\n <Kbd>↵</Kbd> to open\n </span>\n <span className=\"flex items-center gap-1.5\">\n <Kbd>esc</Kbd> to close\n </span>\n </div>\n <span aria-live=\"polite\" className=\"sr-only\">\n {state === 'done' ? `${flat.length} result${flat.length === 1 ? '' : 's'}` : ''}\n </span>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n </>\n );\n}\n\n/**\n * A command palette (⌘K): SearchDialog with its list open before anything is\n * typed, `onQuery('')` giving the recent items and common actions. A result\n * with `run` is an action; one with `href` is a place to go. No button of its\n * own: ⌘K opens it, or drive `open` from yours.\n */\nexport function CommandDialog({\n label = 'Commands',\n placeholder = 'Search, or run a command',\n ...props\n}: Omit<SearchDialogProps, 'browse' | 'button'>) {\n return <SearchDialog {...props} label={label} placeholder={placeholder} button={false} browse />;\n}\n","import { ArrowRight, Check, Download, FileText, Lock, Upload } from 'lucide-react';\nimport Link from 'next/link';\nimport { useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport {\n blocksToDuration,\n explorerUrl,\n formatBlockHeight,\n formatBytes,\n formatUtc,\n type Network,\n} from '../format';\nimport { cn } from '../lib/cn';\nimport { useDensity } from '../lib/density';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\nimport { Textarea } from '../primitives/form';\nimport { CodeBlock } from './code-block';\n\n/*\n * The parts of a protocol's tools: the artifact itself (ArtifactView), a\n * file to hash (DropZone), a numbered group of fields (FormSection), the\n * lifecycle word (StateBadge), Bitcoin time (AnchorStatus, BlockHeight,\n * BlockCountdown), a share of a total (Meter), filters (FilterChips) and the\n * dashboard's cards (ToolGrid).\n */\n\n/* ── ArtifactView ────────────────────────────────────────────────────── */\n\nfunction pretty(content: string): string | null {\n try {\n return JSON.stringify(JSON.parse(content), null, 2);\n } catch {\n return null;\n }\n}\n\nfunction download(content: string, filename: string, mime: string) {\n const url = URL.createObjectURL(new Blob([content], { type: mime }));\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n setTimeout(() => URL.revokeObjectURL(url), 0);\n}\n\nconst BAR_BUTTON =\n 'inline-flex h-7 items-center gap-1.5 rounded-full px-2.5 text-[0.75rem] text-oca-ink-subtle transition-colors hover:bg-white/10 hover:text-white max-md:h-11 max-md:min-w-11 max-md:justify-center max-md:px-3';\n\n/**\n * An artifact as it is: an envelope, a ballot, a delegation. JSON shows\n * formatted, with a switch to the raw bytes exactly as they were signed;\n * copy takes what is shown, download always saves the raw bytes.\n */\nexport function ArtifactView({\n content,\n title,\n filename,\n mime,\n defaultView = 'formatted',\n maxLines = 28,\n className,\n}: {\n /** The artifact's bytes, as text. */\n content: string;\n /** What it is: \"Stamp envelope\". Defaults to the language. */\n title?: ReactNode;\n /** Offer a download under this name. */\n filename?: string;\n /** Default: application/json when it parses, text/plain otherwise. */\n mime?: string;\n defaultView?: 'formatted' | 'raw';\n maxLines?: number;\n className?: string;\n}) {\n const formatted = useMemo(() => pretty(content), [content]);\n const [view, setView] = useState<'formatted' | 'raw'>(formatted ? defaultView : 'raw');\n const shown = view === 'formatted' && formatted ? formatted : content;\n const json = formatted !== null;\n return (\n <CodeBlock\n code={shown}\n lang={json ? 'json' : undefined}\n caption={title}\n maxLines={maxLines}\n className={className}\n actions={\n <>\n {json ? (\n <span role=\"group\" aria-label=\"View\" className=\"mr-1 flex items-center rounded-full bg-white/[0.06] p-0.5\">\n {(['formatted', 'raw'] as const).map((v) => (\n <button\n key={v}\n type=\"button\"\n aria-pressed={view === v}\n onClick={() => setView(v)}\n className={cn(\n // The pill stays 28px; its target reaches the bar's 44.\n 'relative h-7 rounded-full px-2.5 text-[0.75rem] transition-colors before:absolute before:inset-x-0 before:top-1/2 before:h-11 before:-translate-y-1/2',\n view === v ? 'bg-white/[0.12] text-white' : 'text-oca-ink-subtle hover:text-white'\n )}\n >\n {v === 'formatted' ? 'Formatted' : 'Raw'}\n </button>\n ))}\n </span>\n ) : null}\n {filename ? (\n <button\n type=\"button\"\n onClick={() => download(content, filename, mime ?? (json ? 'application/json' : 'text/plain'))}\n className={BAR_BUTTON}\n aria-label={`Download ${filename}`}\n >\n <Download aria-hidden className=\"size-3.5\" />\n <span className=\"max-sm:hidden\">Download</span>\n </button>\n ) : null}\n </>\n }\n />\n );\n}\n\n/* ── DropZone ────────────────────────────────────────────────────────── */\n\nexport interface ChosenFile {\n name: string;\n size: number;\n type?: string;\n}\n\n/**\n * Drop a file, choose one, or paste text. The file never leaves the\n * browser, and the zone says so. While it is read and hashed, `progress`\n * (0 to 1) fills a bar; once `file` is set the zone shows it, with a way to\n * choose another.\n */\nexport function DropZone({\n onFile,\n onText,\n accept,\n title = 'Drop a file here, or choose one',\n hint,\n privacy = 'It stays in your browser. Only its hash leaves this page.',\n file,\n progress,\n progressLabel = 'Hashing',\n onClear,\n error,\n disabled = false,\n className,\n}: {\n onFile: (file: File) => void;\n /** Offer \"Paste text instead\"; called with the text. */\n onText?: (text: string) => void;\n /** The file input's accept list: \".pdf,image/*\". */\n accept?: string;\n title?: ReactNode;\n /** A line under the title: what kinds, how large. */\n hint?: ReactNode;\n /** The line about where the file goes. `null` leaves it out. */\n privacy?: ReactNode;\n file?: ChosenFile | null;\n /** 0 to 1 while reading; null or undefined when not. */\n progress?: number | null;\n progressLabel?: ReactNode;\n onClear?: () => void;\n error?: ReactNode;\n disabled?: boolean;\n className?: string;\n}) {\n const input = useRef<HTMLInputElement>(null);\n const [over, setOver] = useState(false);\n const depth = useRef(0);\n const [mode, setMode] = useState<'file' | 'text'>('file');\n const [text, setText] = useState('');\n const errorId = useId();\n const titleId = useId();\n const busy = progress !== null && progress !== undefined;\n const pct = busy ? Math.round(Math.max(0, Math.min(1, progress!)) * 100) : 0;\n\n const take = (f: File | undefined | null) => {\n if (f && !disabled) onFile(f);\n };\n\n const privacyLine =\n privacy === null ? null : (\n <p className=\"flex items-start gap-2 text-[0.8125rem] leading-snug text-muted-foreground\">\n <Lock aria-hidden className=\"mt-0.5 size-3.5 shrink-0\" />\n <span>{privacy}</span>\n </p>\n );\n\n if (mode === 'text' && onText) {\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n <Textarea\n value={text}\n onChange={(e) => setText(e.target.value)}\n rows={6}\n aria-label=\"Text\"\n aria-describedby={error ? errorId : undefined}\n aria-invalid={error ? true : undefined}\n placeholder=\"Paste the text here\"\n className=\"font-mono text-base md:text-[0.875rem]\"\n />\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button size=\"sm\" disabled={!text.trim() || disabled} onClick={() => onText(text)}>\n Use this text\n </Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setMode('file')}>\n Choose a file instead\n </Button>\n </div>\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] text-destructive\">\n {error}\n </p>\n ) : null}\n {privacyLine}\n </div>\n );\n }\n\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n <div\n role=\"group\"\n aria-labelledby={titleId}\n aria-describedby={error ? errorId : undefined}\n aria-busy={busy || undefined}\n onDragEnter={(e) => {\n e.preventDefault();\n depth.current++;\n if (!disabled) setOver(true);\n }}\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={() => {\n depth.current = Math.max(0, depth.current - 1);\n if (depth.current === 0) setOver(false);\n }}\n onDrop={(e) => {\n e.preventDefault();\n depth.current = 0;\n setOver(false);\n take(e.dataTransfer.files?.[0]);\n }}\n className={cn(\n 'relative flex flex-col gap-3 rounded-[1.25rem] border border-dashed transition-colors',\n file ? 'px-4 py-4 sm:px-5' : 'items-center px-5 py-8 text-center md:py-10',\n over ? 'border-foreground bg-accent' : 'border-oca-hairline-strong bg-card',\n error && 'border-destructive',\n disabled && 'opacity-55'\n )}\n >\n <input\n ref={input}\n type=\"file\"\n accept={accept}\n disabled={disabled}\n tabIndex={-1}\n aria-hidden\n className=\"sr-only\"\n onChange={(e) => {\n take(e.target.files?.[0]);\n e.target.value = '';\n }}\n />\n {file ? (\n <div className=\"flex w-full flex-col gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex size-10 shrink-0 items-center justify-center rounded-xl bg-muted text-foreground\">\n {busy ? <FileText aria-hidden className=\"size-5\" /> : <Check aria-hidden className=\"size-5\" />}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span id={titleId} className=\"truncate text-[0.9375rem] font-medium\" title={file.name}>\n {file.name}\n </span>\n <span className=\"text-[0.8125rem] text-muted-foreground\">\n {[formatBytes(file.size), file.type].filter(Boolean).join(' · ')}\n </span>\n </div>\n {!busy && onClear ? (\n <Button size=\"sm\" variant=\"secondary\" onClick={onClear} disabled={disabled} className=\"shrink-0\">\n Choose another\n </Button>\n ) : null}\n </div>\n {busy ? (\n <div className=\"flex flex-col gap-1.5\">\n <div\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={pct}\n aria-label={typeof progressLabel === 'string' ? progressLabel : 'Progress'}\n className=\"h-1.5 overflow-hidden rounded-full bg-muted\"\n >\n <div className=\"h-full rounded-full bg-foreground transition-[width] duration-200\" style={{ width: `${pct}%` }} />\n </div>\n <span className=\"text-[0.8125rem] text-muted-foreground oca-tabular\">\n {progressLabel} {pct}%\n </span>\n </div>\n ) : null}\n </div>\n ) : (\n <>\n <span className=\"flex size-11 items-center justify-center rounded-full bg-muted text-foreground\">\n <Upload aria-hidden className=\"size-5\" />\n </span>\n <div className=\"flex flex-col gap-1\">\n <p id={titleId} className=\"text-[1rem] font-medium\">\n {over ? 'Drop it to add it' : title}\n </p>\n {hint ? <p className=\"text-[0.875rem] text-muted-foreground\">{hint}</p> : null}\n </div>\n <div className=\"mt-1 flex flex-wrap items-center justify-center gap-2\">\n <Button size=\"sm\" variant=\"secondary\" disabled={disabled} onClick={() => input.current?.click()}>\n Choose a file\n </Button>\n {onText ? (\n <Button size=\"sm\" variant=\"ghost\" disabled={disabled} onClick={() => setMode('text')}>\n Paste text instead\n </Button>\n ) : null}\n </div>\n </>\n )}\n </div>\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] text-destructive\">\n {error}\n </p>\n ) : null}\n {privacyLine}\n </div>\n );\n}\n\n/* ── FormSection ─────────────────────────────────────────────────────── */\n\nexport type SectionStatus = 'done' | 'current' | 'upcoming' | 'blocked';\n\n/**\n * A numbered group of fields: \"1 What you are stamping\", \"2 Who signs\".\n * The number turns to a check when the section is done; the current one is\n * marked for screen readers as the step in progress.\n */\nexport function FormSection({\n n,\n title,\n hint,\n status,\n action,\n as: Heading = 'h2',\n id,\n children,\n className,\n}: {\n /** Its place in the form. Leave out for an unnumbered group. */\n n?: number;\n title: ReactNode;\n /** One line under the title. */\n hint?: ReactNode;\n status?: SectionStatus;\n /** Beside the title: Edit, Reset. */\n action?: ReactNode;\n as?: 'h2' | 'h3';\n id?: string;\n children?: ReactNode;\n className?: string;\n}) {\n const titleId = useId();\n const tight = useDensity() === 'compact';\n return (\n <section\n id={id}\n aria-labelledby={titleId}\n aria-current={status === 'current' ? 'step' : undefined}\n className={cn('scroll-mt-24 rounded-[1.25rem] border border-border bg-card', className)}\n >\n {/* Below sm the action takes its own row under the hint, so the hint keeps the width. */}\n <header className={cn('flex flex-wrap items-start gap-x-3.5 gap-y-3', tight ? 'px-5 pt-5' : 'px-6 pt-6')}>\n {n !== undefined ? (\n <span\n aria-hidden\n className={cn(\n 'mt-px flex size-7 shrink-0 items-center justify-center rounded-full border text-[0.8125rem] oca-tabular',\n status === 'done' && 'border-primary bg-primary text-primary-foreground',\n status === 'current' && 'border-brand text-oca-accent-ink',\n status === 'blocked' && 'border-destructive text-destructive',\n (status === 'upcoming' || status === undefined) && 'border-oca-hairline-strong text-muted-foreground'\n )}\n >\n {status === 'done' ? <Check className=\"size-3.5\" strokeWidth={3} /> : n}\n </span>\n ) : null}\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <Heading id={titleId} className=\"text-[1.0625rem] font-medium leading-snug tracking-[-0.008em]\">\n {n !== undefined ? <span className=\"sr-only\">Step {n}: </span> : null}\n {title}\n {status === 'done' ? <span className=\"sr-only\"> (done)</span> : null}\n </Heading>\n {hint ? <p className=\"text-[0.875rem] leading-snug text-muted-foreground\">{hint}</p> : null}\n </div>\n {action ? <div className={cn('shrink-0 max-sm:basis-full', n !== undefined && 'max-sm:pl-[2.625rem]')}>{action}</div> : null}\n </header>\n <div className={cn('flex flex-col', tight ? 'gap-4 p-5' : 'gap-5 p-6', n !== undefined && (tight ? 'sm:pl-[3.875rem]' : 'sm:pl-[4.125rem]'))}>\n {children}\n </div>\n </section>\n );\n}\n\n/* ── StateBadge ──────────────────────────────────────────────────────── */\n\n/** The looks a lifecycle word can take: fixed here, so every protocol's words look alike. */\nexport type StateTone = 'good' | 'attention' | 'bad' | 'neutral' | 'quiet';\n\nconst STATE_TONE = { good: 'success', attention: 'brand', bad: 'danger', neutral: 'neutral', quiet: 'muted' } as const;\n\n/** One lifecycle word in one of the family's looks. Prefer createStateBadge, which fixes the words. */\nexport function StateBadge({\n tone = 'neutral',\n children,\n title,\n className,\n}: {\n tone?: StateTone;\n children: ReactNode;\n /** A line that explains the state, shown on hover. */\n title?: string;\n className?: string;\n}) {\n return (\n <Badge tone={STATE_TONE[tone]} title={title} className={className}>\n {children}\n </Badge>\n );\n}\n\nexport interface StateDef {\n label: string;\n tone: StateTone;\n /** What the state means, in a line. */\n hint?: string;\n}\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\n/**\n * A protocol's lifecycle words, fixed once: `createStateBadge({ active:\n * { label: 'Active', tone: 'good' }, revoked: { label: 'Revoked', tone: 'bad' } })`\n * returns a badge that takes only those states.\n */\nexport function createStateBadge<S extends string>(states: Record<S, StateDef>) {\n function ProtocolStateBadge({ state, className }: { state: S; className?: string }) {\n const def = states[state];\n if (!def) {\n if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n console.warn(`StateBadge: no state \"${state}\"; known: ${Object.keys(states).join(', ')}`);\n }\n return <StateBadge className={className}>{String(state)}</StateBadge>;\n }\n return (\n <StateBadge tone={def.tone} title={def.hint} className={className}>\n {def.label}\n </StateBadge>\n );\n }\n return ProtocolStateBadge;\n}\n\n/* ── Bitcoin time ────────────────────────────────────────────────────── */\n\n/** A block height in tabular figures, linked to the block on mempool.space. */\nexport function BlockHeight({\n height,\n label = false,\n link = true,\n network = 'mainnet',\n className,\n}: {\n height: number;\n /** Say \"block 971,632\" rather than \"971,632\" (lowercase: it sits inside a sentence). */\n label?: boolean;\n link?: boolean;\n network?: Network;\n className?: string;\n}) {\n const text = `${label ? 'block ' : ''}${formatBlockHeight(height)}`;\n if (!link) return <span className={cn('oca-tabular', className)}>{text}</span>;\n return (\n <a\n href={explorerUrl('block', Math.trunc(height), network)}\n target=\"_blank\"\n rel=\"noreferrer\"\n title={`Block ${formatBlockHeight(height)} on mempool.space`}\n className={cn('oca-tabular underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground', className)}\n >\n {text}\n <span className=\"sr-only\"> (opens mempool.space in a new tab)</span>\n </a>\n );\n}\n\nexport type AnchorState = 'anchored' | 'pending' | 'unverified' | 'none' | 'fail';\n\nconst ANCHOR: Record<AnchorState, { label: string; tone: StateTone }> = {\n anchored: { label: 'Anchored', tone: 'good' },\n pending: { label: 'Anchor pending', tone: 'attention' },\n unverified: { label: 'Not checked', tone: 'quiet' },\n none: { label: 'Not anchored', tone: 'quiet' },\n fail: { label: 'Does not check out', tone: 'bad' },\n};\n\nfunction hostOf(url: string): string {\n try {\n return new URL(url).host;\n } catch {\n return url;\n }\n}\n\n/**\n * Whether a hash is in a Bitcoin block yet, and which one. Anchored names\n * the block and its time; pending says when and where it was submitted, so\n * \"pending\" can be checked; a proof that does not lead to its block says so.\n */\nexport function AnchorStatus({\n state,\n blockHeight,\n blockTime,\n submittedAt,\n calendar,\n message,\n network = 'mainnet',\n variant = 'detail',\n className,\n}: {\n state: AnchorState;\n blockHeight?: number;\n /** The block's time: unix seconds, a Date or an ISO string. */\n blockTime?: number | Date | string;\n /** When the hash went to a calendar. */\n submittedAt?: number | Date | string;\n /** The OpenTimestamps calendar it went to. */\n calendar?: string;\n /** Replace the line under the badge. */\n message?: ReactNode;\n network?: Network;\n /** `badge`: the badge alone, its line as a tooltip. */\n variant?: 'detail' | 'badge';\n className?: string;\n}) {\n const def = ANCHOR[state];\n const block = blockHeight !== undefined ? <BlockHeight height={blockHeight} label network={network} /> : null;\n const line: ReactNode =\n message ??\n (state === 'anchored' ? (\n block ? (\n <>\n In {block}\n {blockTime !== undefined ? ` · ${formatUtc(blockTime)}` : null}\n </>\n ) : (\n 'Its hash is in a Bitcoin block.'\n )\n ) : state === 'pending' ? (\n <>\n Submitted{submittedAt !== undefined ? ` ${formatUtc(submittedAt)}` : ''} to{' '}\n {calendar ? hostOf(calendar) : 'an OpenTimestamps calendar'}. Waiting for a Bitcoin block.\n </>\n ) : state === 'unverified' ? (\n <>The proof names {block ?? 'a block'}, but its header could not be fetched to check it.</>\n ) : state === 'fail' ? (\n <>The proof does not lead to {block ?? 'the block it names'}.</>\n ) : (\n 'No timestamp yet. The signature still checks offline.'\n ));\n if (variant === 'badge') {\n const plain = typeof line === 'string' ? line : undefined;\n return <StateBadge tone={def.tone} title={plain} className={className}>{def.label}</StateBadge>;\n }\n return (\n <div className={cn('flex flex-col items-start gap-1.5', className)}>\n <StateBadge tone={def.tone}>{def.label}</StateBadge>\n <p className=\"text-[0.875rem] leading-snug text-muted-foreground\">{line}</p>\n </div>\n );\n}\n\n/**\n * How far a block height is: \"In 368 blocks, about 2 days 13 hours\", or\n * \"Reached at block 972,000\". With `from`, a bar shows how much of the wait\n * has passed. Blocks come when they come, so the time is always \"about\".\n */\nexport function BlockCountdown({\n target,\n tip,\n from,\n reached = 'Reached',\n minutesPerBlock = 10,\n network = 'mainnet',\n className,\n}: {\n target: number;\n /** The chain tip now. Unknown: only the target shows. */\n tip?: number | null;\n /** Where the wait began, for the bar. */\n from?: number;\n /** The word once the target is reached: \"Revealed\", \"Closed\". */\n reached?: string;\n minutesPerBlock?: number;\n network?: Network;\n className?: string;\n}) {\n const known = typeof tip === 'number';\n const left = known ? target - tip : null;\n const done = left !== null && left <= 0;\n const share = known && from !== undefined && target > from ? Math.min(1, Math.max(0, (tip - from) / (target - from))) : null;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <p className=\"text-[0.9375rem] leading-snug\">\n {!known ? (\n <>\n At <BlockHeight height={target} label network={network} />\n </>\n ) : done ? (\n <>\n {reached} at <BlockHeight height={target} label network={network} />\n </>\n ) : (\n <>\n In <span className=\"oca-tabular font-medium\">{formatBlockHeight(left!)}</span> block{left === 1 ? '' : 's'}\n <span className=\"text-muted-foreground\">, {blocksToDuration(left!, minutesPerBlock)}</span>\n </>\n )}\n </p>\n {share !== null ? (\n <div\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(share * 100)}\n aria-label=\"Blocks passed\"\n className=\"h-1.5 overflow-hidden rounded-full bg-muted\"\n >\n <div className=\"h-full rounded-full bg-foreground\" style={{ width: `${share * 100}%` }} />\n </div>\n ) : null}\n {known && !done ? (\n <p className=\"text-[0.8125rem] text-muted-foreground\">\n Target <BlockHeight height={target} network={network} /> · tip <span className=\"oca-tabular\">{formatBlockHeight(tip)}</span>\n </p>\n ) : null}\n </div>\n );\n}\n\n/* ── Meter ───────────────────────────────────────────────────────────── */\n\n/**\n * One amount against a total: a tally, a goal, a strength. `ghost` adds a\n * hatched part after the value (pledged, not yet settled). For shares of a\n * whole, use SplitBar.\n */\nconst METER_FILL = {\n ink: 'bg-foreground',\n brand: 'bg-oca-orange-deep',\n good: 'bg-success',\n caution: 'bg-warning',\n bad: 'bg-destructive',\n} as const;\n\nexport function Meter({\n value,\n max,\n ghost,\n label,\n figure,\n tone = 'ink',\n size = 'md',\n className,\n}: {\n value: number;\n max: number;\n /** A further amount, drawn hatched after the value. */\n ghost?: number;\n label: ReactNode;\n /** The figure on the right: \"62%\", \"1.2M of 2M sats\". Default: the percentage. */\n figure?: ReactNode;\n /** `good`, `caution` and `bad` for a reading with a verdict: a password's strength. */\n tone?: 'ink' | 'brand' | 'good' | 'caution' | 'bad';\n size?: 'md' | 'sm';\n className?: string;\n}) {\n const id = useId();\n const total = max > 0 ? max : 1;\n const v = Math.max(0, Math.min(1, value / total));\n const g = ghost ? Math.max(0, Math.min(1 - v, ghost / total)) : 0;\n const pct = `${Math.round(v * 100)}%`;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-baseline justify-between gap-4 text-[0.875rem]\">\n <span id={id} className=\"min-w-0 truncate\">\n {label}\n </span>\n <span className=\"shrink-0 oca-tabular text-muted-foreground\">{figure ?? pct}</span>\n </div>\n <div\n role=\"meter\"\n aria-labelledby={id}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={typeof figure === 'string' ? figure : pct}\n className={cn('flex overflow-hidden rounded-full bg-muted', size === 'sm' ? 'h-1.5' : 'h-2.5')}\n >\n <div\n className={cn('h-full shrink-0 rounded-full', METER_FILL[tone])}\n style={{ width: `${v * 100}%` }}\n />\n {g > 0 ? (\n <div\n aria-hidden\n className=\"-ml-1.5 h-full shrink-0 rounded-r-full pl-1.5 text-foreground/45\"\n style={{\n width: `calc(${g * 100}% + 0.375rem)`,\n backgroundImage: 'repeating-linear-gradient(-45deg, currentColor 0 2px, transparent 2px 6px)',\n }}\n />\n ) : null}\n </div>\n </div>\n );\n}\n\n/* ── FilterChips ─────────────────────────────────────────────────────── */\n\nexport interface FilterOption<T extends string | number> {\n value: T;\n label: ReactNode;\n count?: number;\n}\n\n/**\n * Filters above a list, as chips: one at a time, or several with\n * `multiple`. Each chip is a toggle button a screen reader hears as pressed\n * or not. They wrap on a phone, every filter in view.\n */\nexport function FilterChips<T extends string | number>({\n options,\n value,\n onChange,\n label,\n className,\n}: {\n options: FilterOption<T>[];\n label: string;\n className?: string;\n // The options name the values; `value` must not narrow them.\n} & (\n | { multiple?: false; value: NoInfer<T>; onChange: (v: NoInfer<T>) => void }\n | { multiple: true; value: NoInfer<T>[]; onChange: (v: NoInfer<T>[]) => void }\n)) {\n const tight = useDensity() === 'compact';\n const multi = Array.isArray(value);\n const isOn = (v: T) => (multi ? (value as T[]).includes(v) : value === v);\n const press = (v: T) => {\n if (multi) {\n const cur = value as T[];\n (onChange as (v: T[]) => void)(cur.includes(v) ? cur.filter((x) => x !== v) : [...cur, v]);\n } else (onChange as (v: T) => void)(v);\n };\n return (\n // Wraps rather than scrolls: every filter stays in view on a phone.\n <div role=\"group\" aria-label={label} className={cn('flex flex-wrap items-center gap-2 py-0.5', className)}>\n {options.map((o) => {\n const on = isOn(o.value);\n return (\n <button\n key={o.value}\n type=\"button\"\n aria-pressed={on}\n onClick={() => press(o.value)}\n className={cn(\n 'inline-flex shrink-0 items-center gap-1.5 rounded-full border px-3.5 text-[0.875rem] transition-colors',\n // A thumb's 44px on a phone.\n tight ? 'h-11 md:h-8' : 'h-11 md:h-9',\n on\n ? 'border-foreground bg-foreground text-background'\n : 'border-border bg-card text-muted-foreground hover:border-oca-hairline-strong hover:text-foreground'\n )}\n >\n {o.label}\n {o.count !== undefined ? <span className=\"oca-tabular\">{o.count.toLocaleString('en-US')}</span> : null}\n </button>\n );\n })}\n </div>\n );\n}\n\n/* ── ToolGrid ────────────────────────────────────────────────────────── */\n\nexport interface ToolItem {\n href: string;\n label: string;\n icon?: ReactNode;\n /** One line: what the tool does. */\n description?: ReactNode;\n active?: boolean;\n}\n\n/** A protocol's tools as cards, for its dashboard: icon, name, one line. Each card is one link. */\nexport function ToolGrid({\n tools,\n as: Heading = 'h2',\n className,\n}: {\n tools: readonly ToolItem[];\n /** Each tool's name is a heading: h2 under the page's title, h3 under a section's. */\n as?: 'h2' | 'h3';\n className?: string;\n}) {\n const tight = useDensity() === 'compact';\n const n = tools.length;\n return (\n <ul\n className={cn(\n 'grid grid-cols-1 gap-3 sm:grid-cols-2 md:gap-4',\n // Three or four sit in one row on a wide screen.\n n === 3 || n === 6 ? 'lg:grid-cols-3' : n === 4 ? 'xl:grid-cols-4' : null,\n className\n )}\n >\n {tools.map((t) => (\n <li key={t.href}>\n <div\n className={cn(\n 'group relative flex h-full flex-col rounded-[1.25rem] border border-border bg-card transition-colors',\n tight ? 'gap-3 p-5' : 'gap-4 p-6',\n 'hover:border-oca-hairline-strong 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'\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n {t.icon ? (\n <span className=\"flex size-10 items-center justify-center rounded-xl bg-muted text-foreground [&_svg]:size-5\">\n {t.icon}\n </span>\n ) : (\n <span />\n )}\n <ArrowRight\n aria-hidden\n className=\"size-4 text-muted-foreground transition-transform duration-200 group-hover:translate-x-0.5 group-hover:text-foreground\"\n />\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Heading className=\"oca-title-sm\">\n <Link\n href={t.href}\n className=\"outline-none after:absolute after:inset-0 after:rounded-[1.25rem] after:content-['']\"\n >\n {t.label}\n </Link>\n </Heading>\n {t.description ? <p className=\"text-[0.9375rem] leading-relaxed text-muted-foreground\">{t.description}</p> : null}\n </div>\n </div>\n </li>\n ))}\n </ul>\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 { ChevronRight, Ellipsis, 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 type { FamilySlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { InColumnContext } from '../lib/column';\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 Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '../primitives/overlay';\nimport { FamilyMenu } from './family-menu';\n\nexport interface ShellNavItem {\n href: string;\n label: string;\n icon?: ReactNode;\n active?: boolean;\n /** Beside the label: a number shows as a count on a tab or the rail (99+), anything else as a dot. */\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 /** With one on every section, phones get the sections as tabs. */\n icon?: ReactNode;\n groups: ShellNavGroup[];\n}\n\nexport function 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/** A count (99+) for a number, a dot for anything else; the badge is read with the label. */\nfunction NavBadge({ badge, className }: { badge: ReactNode; className: string }) {\n if (typeof badge === 'number') {\n return (\n <span\n aria-hidden\n className={cn(\n 'absolute flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[0.625rem] font-medium leading-none text-primary-foreground ring-2 ring-background oca-tabular',\n className\n )}\n >\n {badge > 99 ? '99+' : badge}\n </span>\n );\n }\n // The deep orange: a dot is the whole signal, so it must clear 3:1 on the background.\n return <span aria-hidden className={cn('absolute size-2 rounded-full bg-oca-orange-deep ring-2 ring-background', className)} />;\n}\n\nconst TAB =\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\nfunction TabFace({ icon, label, badge, active }: { icon: ReactNode; label: string; badge?: ReactNode; active?: boolean }) {\n return (\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 active ? 'bg-card shadow-sm ring-1 ring-border [&_svg]:stroke-2' : '[&_svg]:stroke-[1.75]'\n )}\n >\n {icon}\n {badge ? <NavBadge badge={badge} className={typeof badge === 'number' ? '-top-1 right-0.5' : 'right-2.5 top-0.5'} /> : null}\n </span>\n <span className=\"max-w-full truncate px-0.5\">{label}</span>\n {badge ? <span className=\"sr-only\">{badge}</span> : null}\n </>\n );\n}\n\n/**\n * The phone's way around: up to five pages under the thumb, each one tap\n * away. Past five, four tabs and More, a sheet with the rest.\n */\nexport function TabBar({ items }: { items: ShellNavItem[] }) {\n const [more, setMore] = useState(false);\n const overflow = items.length > 5;\n const shown = overflow ? items.slice(0, 4) : items;\n const rest = overflow ? items.slice(4) : [];\n const restBadge = rest.find((it) => it.badge)?.badge;\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(${shown.length + (overflow ? 1 : 0)}, minmax(0, 1fr))` }}\n >\n {shown.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n aria-current={it.active ? 'page' : undefined}\n className={cn(TAB, it.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground')}\n >\n <TabFace icon={it.icon} label={it.label} badge={it.badge} active={it.active} />\n </Link>\n ))}\n {overflow ? (\n <Sheet open={more} onOpenChange={setMore}>\n <SheetTrigger\n className={cn(TAB, rest.some((it) => it.active) ? 'text-foreground' : 'text-muted-foreground hover:text-foreground')}\n >\n <TabFace icon={<Ellipsis />} label=\"More\" badge={restBadge ? true : undefined} active={rest.some((it) => it.active)} />\n </SheetTrigger>\n <SheetContent side=\"bottom\" className=\"pb-[calc(1.5rem+env(safe-area-inset-bottom))]\">\n <SheetTitle className=\"px-1 text-[1.0625rem] font-medium\">More</SheetTitle>\n <div className=\"mt-4 grid grid-cols-3 gap-2\">\n {rest.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n onClick={() => setMore(false)}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex min-h-20 flex-col items-center justify-center gap-2 rounded-2xl border px-2 text-center text-[0.8125rem] transition-colors',\n '[&_svg]:size-5',\n it.active ? 'border-foreground bg-card text-foreground' : 'border-border text-muted-foreground hover:text-foreground'\n )}\n >\n <span className=\"relative\">\n {it.icon}\n {it.badge ? <NavBadge badge={it.badge} className={typeof it.badge === 'number' ? '-right-3 -top-2' : '-right-1 -top-0.5'} /> : null}\n </span>\n <span className=\"max-w-full truncate\">{it.label}</span>\n {it.badge ? <span className=\"sr-only\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n </SheetContent>\n </Sheet>\n ) : null}\n </div>\n </nav>\n );\n}\n\n/** Two or more pages, each with an icon, take a tab bar (past five, with More). Without icons, the drawer. */\nexport function tabsFor(groups: ShellNavGroup[]): ShellNavItem[] | null {\n const items = groups.flatMap((g) => g.items);\n return items.length >= 2 && items.every((it) => it.icon) ? items : null;\n}\n\n/** Sections with an icon each are the phone's tabs; their pages stay in the menu. */\nfunction sectionTabs(sections: ShellSection[] | undefined, current: ShellSection | undefined): ShellNavItem[] | null {\n if (!sections || !current || sections.length < 2 || !sections.every((sec) => sec.icon)) return null;\n return sections.map((sec) => ({ href: sec.href, label: sec.label, icon: sec.icon, active: sec.id === current.id }));\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 every page has an icon, phones get a tab bar instead (past\n * five, four tabs and More): the pages sit under the thumb, the strip and the\n * menu button go (the sheet stays for a `footer`, without the pages), and\n * tablets keep the sheet. Sections with an icon each become the tabs, and\n * their pages stay in the sheet. Pages get the section through context:\n * PageHeader uses it as its eyebrow. `family` puts the family menu beside the\n * lockup. The account control and any banner are slots. `variant=\"rail\"` is\n * the messenger's frame instead.\n */\nexport function AppShell(props: AppShellProps) {\n return props.variant === 'rail' ? <RailShell {...props} /> : <SidebarShell {...props} />;\n}\n\nexport interface AppShellProps {\n /**\n * `sidebar` (default): a sidebar of pages from lg, content up to 72rem.\n * `rail`: a messenger's frame. The whole window, an icon rail from md\n * with each page's name on hover, the content full-bleed and managing\n * its own panes and scroll; `header` sits above it.\n */\n variant?: 'sidebar' | 'rail';\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 /** Mount the family menu beside the lockup, as SiteHeader does. Pass the site's slug to mark it. */\n family?: boolean | FamilySlug;\n /** The rail's: at its foot from md (an avatar linking to settings). The sidebar's: top right. */\n account?: ReactNode;\n banner?: ReactNode;\n footer?: ReactNode;\n /** `rail` only: the header above the rail and the content (a SiteHeader). */\n header?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nfunction SidebarShell({\n nav,\n sections,\n activeSection,\n page: pageOverride,\n persistent = [],\n home = '/',\n family,\n account,\n banner,\n footer,\n children,\n className,\n}: AppShellProps) {\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 sectionTabsFor = sectionTabs(sections, current);\n const tabs = current ? sectionTabsFor : 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 familyMenu = family ? <FamilyMenu current={typeof family === 'string' ? family : undefined} /> : null;\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. Section tabs leave the pages here.\n tabs && !sectionTabsFor && !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 {/* On a phone the section tabs are the switcher. */}\n {switcher ? <div className={sectionTabsFor ? 'max-md:hidden' : undefined}>{switcher}</div> : null}\n <div className={tabs && !sectionTabsFor ? '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 {familyMenu}\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 && !sectionTabsFor && !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 <div className=\"flex items-center gap-1\">\n <Link href={home} className=\"px-2\" aria-label=\"Home\">\n <Lockup size={26} />\n </Link>\n {familyMenu}\n </div>\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]\">\n <InColumnContext.Provider value={true}>{children}</InColumnContext.Provider>\n </div>\n </main>\n </div>\n </div>\n {tabs ? <TabBar items={tabs} /> : null}\n </div>\n </ShellContext.Provider>\n );\n}\n\nfunction RailItem({ item }: { item: ShellNavItem }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n href={item.href}\n aria-current={item.active ? 'page' : undefined}\n className={cn(\n 'relative flex size-10 items-center justify-center rounded-xl outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring',\n '[&_svg]:size-5 [&_svg]:shrink-0',\n item.active\n ? 'bg-card text-foreground shadow-sm ring-1 ring-border'\n : 'text-muted-foreground hover:bg-accent hover:text-foreground'\n )}\n >\n {item.icon}\n {/* The page's name, and its badge, for a screen reader; the tooltip shows the name. */}\n <span className=\"sr-only\">\n {item.label}\n {item.badge ? <>, {item.badge}</> : null}\n </span>\n {item.badge ? <NavBadge badge={item.badge} className={typeof item.badge === 'number' ? '-right-1 -top-1' : 'right-1 top-1'} /> : null}\n </Link>\n </TooltipTrigger>\n <TooltipContent side=\"right\">{item.label}</TooltipContent>\n </Tooltip>\n );\n}\n\n/** The rail frame: header, an icon rail from md, the content full-bleed, the tab bar on a phone. */\nfunction RailShell({ nav = [], persistent = [], page: pageOverride, header, account, banner, children, className }: AppShellProps) {\n const main = nav.flatMap((g) => g.items);\n const foot = persistent.flatMap((g) => g.items);\n warnDuplicateLabels([...nav, ...persistent]);\n const tabs = tabsFor([{ items: [...main, ...foot] }]);\n const active = activeItem([...nav, ...persistent]);\n const place = useMemo(() => ({ page: pageOverride ?? active?.label }), [pageOverride, active?.label]);\n return (\n <ShellContext.Provider value={place}>\n <TooltipProvider delayDuration={300}>\n {/* Contains what is positioned inside it, as ToolShell's app frame does, and clips without scrolling. */}\n <div className={cn('relative flex h-dvh flex-col overflow-clip bg-background', className)}>\n {header}\n {banner}\n <div className=\"flex min-h-0 flex-1\">\n <nav aria-label=\"Pages\" className=\"hidden w-14 shrink-0 flex-col items-center gap-1 border-r border-border py-3 md:flex\">\n {main.map((it) => (\n <RailItem key={it.href} item={it} />\n ))}\n <div className=\"mt-auto flex flex-col items-center gap-1\">\n {foot.map((it) => (\n <RailItem key={it.href} item={it} />\n ))}\n {account}\n </div>\n </nav>\n <main\n id=\"main-content\"\n className={cn('flex min-h-0 min-w-0 flex-1 flex-col', tabs && 'max-md:pb-[calc(3.5rem_+_env(safe-area-inset-bottom))]')}\n >\n {children}\n </main>\n </div>\n {tabs ? <TabBar items={tabs} /> : null}\n </div>\n </TooltipProvider>\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={`${name}, account menu`}\n >\n {/* The initial is drawn, not written: the button's text is the name it is read by. */}\n <span\n aria-hidden\n data-initial={initial}\n className=\"flex size-8 items-center justify-center rounded-full bg-foreground text-[0.8125rem] font-medium text-background before:content-[attr(data-initial)]\"\n />\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","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, GET_AN_ACCOUNT, LEGAL_LINKS, OCHK_IO, OCHK_IO_FOOTER, PROTOCOLS, type FamilySlug } from '../family';\nimport { cn } from '../lib/cn';\nimport type { FooterColumn, NavItem } from '../lib/nav';\nimport { Button } from '../primitives/button';\nimport { Popover, PopoverContent, PopoverTrigger, Sheet, SheetContent, SheetTitle, SheetTrigger } from '../primitives/overlay';\nimport { ThemeToggle } from './app-shell';\nimport { FamilyList, FamilyMenu } from './family-menu';\n\nexport type { FooterColumn, NavItem } from '../lib/nav';\n\nfunction NavLink({\n item,\n className,\n onNavigate,\n line = false,\n}: {\n item: NavItem;\n className?: string;\n onNavigate?: () => void;\n /** Mark the active item with a bar on the header's bottom edge (the tool header). */\n line?: boolean;\n}) {\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 line && 'relative after:absolute after:inset-x-3 after:-bottom-[0.625rem] after:h-0.5 after:rounded-full',\n line && item.active && 'after:bg-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 md:max-lg:pl-2.5 md:max-lg:pr-2',\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 /** Leave the navigation out of the phone's menu (a page whose tab bar already holds it). */\n navOnPhone?: boolean;\n /** At the top of the phone's menu: links the actions hold on a wider screen. */\n menu?: ReactNode;\n className?: string;\n}\n\n/**\n * The header's \"Get an account\", in the registry's words. On ochk.io and its\n * docs it links ochk.app; ochk.app passes its own sign-in as `href`.\n */\nexport function AccountCta({ href = GET_AN_ACCOUNT.href, className }: { href?: string; className?: string }) {\n return (\n <Button asChild size=\"sm\" className={className}>\n <a href={href}>{GET_AN_ACCOUNT.label}</a>\n </Button>\n );\n}\n\n/** The lockup and, after a hairline, the site's own word: \"orangecheck | stamp\". */\nexport function ProductLockup({ size, product }: { size: number; product?: string }) {\n return (\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}\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 navOnPhone = true,\n menu: menuExtra,\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 phoneNav = navOnPhone ? nav : [];\n const menu = phoneNav.length > 0 || Boolean(family) || Boolean(menuExtra);\n const brandNode = brand ?? <ProductLockup size={size} product={product} />;\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 n.children?.length ? (\n <NavDropdown key={n.href} item={n} />\n ) : (\n // Between md and lg the family menu and the actions share the row: tighter.\n <NavLink key={n.href} item={n} line={tool} className={tool ? undefined : 'md:max-lg:px-2.5'} />\n )\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] md:max-lg:gap-2',\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 {menuExtra ? (\n <div className={cn('flex flex-col', (phoneNav.length > 0 || family) && 'border-b border-border pb-3')}>\n {menuExtra}\n </div>\n ) : null}\n {phoneNav.length > 0 ? (\n <nav aria-label=\"Main\" className=\"flex flex-col\">\n {phoneNav.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', phoneNav.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({ links }: { links: readonly NavItem[] }) {\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 {/* Two links may share an address; the label and place keep them apart. */}\n {links.map((l, i) => (\n <li key={`${i}:${l.label}`}>\n {l.href.startsWith('/') ? (\n <Link href={l.href} className={FOOT_LINK}>\n {l.label}\n </Link>\n ) : (\n <a href={l.href} className={FOOT_LINK}>\n {l.label}\n </a>\n )}\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 /**\n * The legal row: Privacy, Terms, Security, Trademarks, Contact. `true` links\n * ochk.io's documents; a product that hosts its own passes its links\n * (`SELF_HOSTED_LEGAL_LINKS`).\n */\n legal?: boolean | readonly NavItem[];\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 const legalLinks = legal === true ? LEGAL_LINKS : legal || null;\n if (compact) {\n return (\n // The tools' column (ToolColumn): the lockup lines up with the page's title.\n <footer className={cn('border-t border-border bg-background px-4 text-[0.875rem] text-muted-foreground md:px-8', className)}>\n <div className=\"mx-auto flex w-full max-w-[72rem] 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-3\">\n {/* The lockup keeps its size; its target is 44px tall, clear of the links under it. */}\n <a\n href={OCHK_IO}\n className=\"relative rounded-lg text-foreground before:absolute before:inset-x-0 before:top-1/2 before:h-11 before:-translate-y-1/2\"\n >\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 {legalLinks || meta ? (\n <div className=\"flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:flex-wrap sm:items-center\">\n {legalLinks ? <LegalRow links={legalLinks} /> : 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={`${i}:${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, j) => (\n <NavLink\n key={`${j}:${l.label}`}\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 {legalLinks || 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 {legalLinks ? <LegalRow links={legalLinks} /> : null}\n {meta}\n </div>\n </div>\n ) : null}\n </footer>\n );\n}\n\n/**\n * ochk.io's footer, word for word, for ochk.io and the docs it serves: its\n * column and the family's, the fine print, who supports the open work, the\n * theme switch and the legal row. Pass `columns` to write ochk.io's own links\n * relative (oc-www, so they stay on the host that serves it).\n */\nexport function OchkIoFooter({ columns = OCHK_IO_FOOTER, className }: { columns?: readonly FooterColumn[]; className?: string }) {\n return (\n <SiteFooter\n columns={columns}\n family\n legal\n fineprint=\"Open protocols on Bitcoin. Anyone can check the result.\"\n meta={\n <div className=\"flex flex-wrap items-center justify-between gap-4\">\n <p>\n Open-source work on orangecheck is <span className=\"whitespace-nowrap\">supported by OpenSats.</span>\n </p>\n <ThemeToggle className=\"-mx-3\" />\n </div>\n }\n className={className}\n />\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { IsoCheck } from '../brand/iso-check';\nimport { OCHK_IO, protocolSite, SIGN_IN_LABEL, type ProtocolSlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { ProductLockup } from './site';\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_LABEL,\n lead,\n children,\n error,\n fineprint,\n brand,\n product,\n home,\n protocol,\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 /** The site's word beside the lockup, as its header has it. Default: the protocol's word. */\n product?: string;\n /** Where the lockup and \"Back to home\" go. Default: the protocol's page on ochk.io, else ochk.io. */\n home?: string;\n /** The protocol a tool site serves: its `/` redirects off-site, so home is the protocol's page. */\n protocol?: ProtocolSlug;\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 const homeHref = home ?? (protocol ? protocolSite(protocol).pageHref : OCHK_IO);\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={homeHref} className=\"w-fit rounded-lg\">\n {brand ?? <ProductLockup size={28} product={product ?? (protocol ? protocolSite(protocol).label : undefined)} />}\n <span className=\"sr-only\"> home</span>\n </Link>\n {back === undefined ? (\n <Link\n href={homeHref}\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 { ChevronDown, ChevronRight, PanelLeft } from 'lucide-react';\nimport Link from 'next/link';\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { OnThisPage, useHeadings } from '../components/docs';\nimport type { TocItem } from '../components/hero';\nimport { DOCS_HREF, OCHK_IO, OCHK_IO_NAV } from '../family';\nimport { cn } from '../lib/cn';\nimport { InDocsContext } from '../lib/docs-context';\nimport type { NavItem } from '../lib/nav';\nimport { Badge } from '../primitives/badge';\nimport { Sheet, SheetContent, SheetTitle, SheetTrigger } from '../primitives/overlay';\nimport { StatusBadge, type Status } from '../primitives/status-badge';\nimport { OchkIoFooter, SiteHeader, SkipLink } from './site';\n\n/* ── The docs' navigation ────────────────────────────────────────────── */\n\nexport interface DocsNavItem {\n href: string;\n label: ReactNode;\n /** A status word (\"testing\") or a small badge of your own. */\n badge?: Status | ReactNode;\n}\n\nexport interface DocsNavSection {\n label: string;\n items: DocsNavItem[];\n}\n\nconst STATUS_WORDS = new Set<string>(['live', 'testing', 'not-yet', 'paused', 'good', 'caution', 'refused']);\n\n/** \"/stamp/verify/\" and \"/stamp/verify?x#y\" are the page \"/stamp/verify\". */\nconst pathOf = (href: string) => href.split(/[?#]/)[0]!.replace(/(.)\\/$/, '$1');\n\n/**\n * The docs' sections, each folding open. The section holding this page is\n * always open and the page is marked with a bar beside it; other sections\n * open on a press and close again when you move to another section.\n */\nexport function DocsNav({\n sections,\n current,\n onNavigate,\n className,\n}: {\n sections: readonly DocsNavSection[];\n /** This page's path, as the items' hrefs write it. */\n current: string;\n onNavigate?: () => void;\n className?: string;\n}) {\n const here = pathOf(current);\n const activeSection = useMemo(\n () => sections.findIndex((s) => s.items.some((i) => pathOf(i.href) === here)),\n [sections, here]\n );\n const [peeked, setPeeked] = useState<Set<number>>(() => new Set());\n useEffect(() => setPeeked(new Set()), [activeSection]);\n const activeRef = useRef<HTMLAnchorElement>(null);\n useEffect(() => {\n const id = requestAnimationFrame(() => activeRef.current?.scrollIntoView({ block: 'nearest' }));\n return () => cancelAnimationFrame(id);\n }, [here]);\n const base = useId();\n return (\n <nav aria-label=\"Docs\" className={cn('flex flex-col gap-0.5', className)}>\n {sections.map((section, si) => {\n const isActive = si === activeSection;\n const open = isActive || peeked.has(si);\n const panel = `${base}-s${si}`;\n return (\n <div key={section.label}>\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={panel}\n onClick={() => {\n if (isActive) return;\n setPeeked((p) => {\n const n = new Set(p);\n if (n.has(si)) n.delete(si);\n else n.add(si);\n return n;\n });\n }}\n className={cn(\n 'flex min-h-9 w-full items-center justify-between gap-2 rounded-lg px-2.5 py-1.5 text-left text-[0.875rem] transition-colors',\n isActive ? 'font-medium text-foreground' : 'text-muted-foreground hover:bg-accent hover:text-foreground',\n isActive && 'cursor-default'\n )}\n >\n {section.label}\n <ChevronRight\n aria-hidden\n className={cn('size-3.5 shrink-0 text-oca-subtle transition-transform duration-200', open && 'rotate-90')}\n />\n </button>\n <ul id={panel} hidden={!open} className=\"mb-2 ml-2.5 mt-0.5 border-l border-border\">\n {section.items.map((item) => {\n const on = pathOf(item.href) === here;\n const badge =\n typeof item.badge === 'string' && STATUS_WORDS.has(item.badge) ? (\n <StatusBadge status={item.badge as Status} />\n ) : item.badge ? (\n <Badge tone=\"muted\">{item.badge}</Badge>\n ) : null;\n return (\n <li key={item.href}>\n <Link\n href={item.href}\n ref={on ? activeRef : undefined}\n onClick={onNavigate}\n aria-current={on ? 'page' : undefined}\n className={cn(\n '-ml-px flex min-h-9 items-center gap-2 border-l-2 py-1.5 pl-3.5 pr-2 text-[0.875rem] leading-snug transition-colors',\n on\n ? 'border-foreground font-medium text-foreground'\n : 'border-transparent text-muted-foreground hover:border-oca-hairline-strong hover:text-foreground'\n )}\n >\n <span className=\"min-w-0 flex-1\">{item.label}</span>\n {badge}\n </Link>\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n </nav>\n );\n}\n\n/* ── The shell ───────────────────────────────────────────────────────── */\n\n/** ochk.io's navigation with Docs marked: the docs are a part of ochk.io, not a site beside it. */\nexport const DOCS_HEADER_NAV: readonly NavItem[] = OCHK_IO_NAV.map((n) => (n.href === DOCS_HREF ? { ...n, active: true } : n));\n\nexport interface DocsShellProps {\n /** The docs' sections, for the sidebar and the phone's menu. */\n nav: readonly DocsNavSection[];\n /** This page's path, as the nav's hrefs write it. */\n current: string;\n /**\n * The nav item to mark and open, when the page has none of its own: a\n * deep SDK page (`/sdk/stamp-core/interfaces/X`) opens its package's\n * item (`/sdk/stamp-core`). Default: `current`.\n */\n navCurrent?: string;\n /** Replace the header. Default: ochk.io's, with Docs marked. */\n header?: ReactNode;\n /** The default header's search control (a SearchDialog). */\n search?: ReactNode;\n /** The default header's actions (a SessionAccount, a Sign in). */\n actions?: ReactNode;\n /** Above the page: Breadcrumbs. */\n breadcrumbs?: ReactNode;\n /**\n * The page's sections. Default: read from the page's h2s and h3s once it\n * renders, again whenever `current` changes.\n */\n toc?: TocItem[];\n /** Under the page: DocsPager. */\n pager?: ReactNode;\n /** Replace the footer. Default: ochk.io's (OchkIoFooter). */\n footer?: ReactNode;\n children: ReactNode;\n}\n\n/**\n * The docs' frame, in ochk.io's header and footer: the sections on the\n * left, the page in the middle, what is on it on the right. Below lg the\n * sections open from a bar under the header; below xl \"On this page\" folds\n * above the text. The page's text sits in #docs-content.\n */\nexport function DocsShell({\n nav,\n current,\n navCurrent,\n header,\n search,\n actions,\n breadcrumbs,\n toc,\n pager,\n footer,\n children,\n}: DocsShellProps) {\n const [menu, setMenu] = useState(false);\n useEffect(() => setMenu(false), [current]);\n const read = useHeadings('#docs-content', current);\n const items = toc ?? read.items;\n const activeId = toc ? undefined : read.activeId;\n const marked = navCurrent ?? current;\n const here = pathOf(marked);\n const place = useMemo(() => {\n for (const s of nav) {\n const it = s.items.find((i) => pathOf(i.href) === here);\n if (it) return { section: s.label, page: it.label };\n }\n return null;\n }, [nav, here]);\n return (\n <div className=\"flex min-h-dvh flex-col bg-background\">\n <SkipLink />\n {header ?? <SiteHeader home={OCHK_IO} family=\"docs\" nav={DOCS_HEADER_NAV} search={search} actions={actions} />}\n {/* Below lg: the sections behind one button, and where you are beside it. */}\n <div className=\"sticky top-16 z-30 border-b border-border bg-background/95 backdrop-blur-md supports-[backdrop-filter]:bg-background/90 md:top-[4.5rem] lg:hidden\">\n <div className=\"oca-container flex h-12 items-center gap-2\">\n <Sheet open={menu} onOpenChange={setMenu}>\n <SheetTrigger className=\"-ml-2 inline-flex h-10 min-w-0 items-center gap-2 rounded-full px-2.5 text-[0.875rem] hover:bg-accent\">\n <PanelLeft aria-hidden className=\"size-[1.125rem] shrink-0\" />\n <span className=\"sr-only\">Docs menu. </span>\n {place ? (\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span className=\"shrink-0 text-muted-foreground\">{place.section}</span>\n <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-oca-subtle\" />\n <span className=\"truncate font-medium\">{place.page}</span>\n </span>\n ) : (\n <span className=\"font-medium\">Docs</span>\n )}\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"w-[min(88vw,22rem)] gap-0 p-0\">\n <div className=\"border-b border-border px-5 py-4 pr-14\">\n <SheetTitle className=\"text-[1.0625rem] font-medium\">Docs</SheetTitle>\n </div>\n <div className=\"overflow-y-auto p-3\">\n <DocsNav sections={nav} current={marked} onNavigate={() => setMenu(false)} />\n </div>\n </SheetContent>\n </Sheet>\n </div>\n </div>\n <div className=\"oca-container flex-1\">\n <div className=\"lg:grid lg:grid-cols-[13.5rem_minmax(0,1fr)] lg:gap-x-10 xl:grid-cols-[13.5rem_minmax(0,1fr)_11rem]\">\n <div className=\"sticky top-[4.5rem] hidden max-h-[calc(100dvh-4.5rem)] self-start overflow-y-auto overscroll-contain py-8 pr-1 lg:block\">\n <DocsNav sections={nav} current={marked} />\n </div>\n <main id=\"main-content\" className=\"min-w-0 pb-16 pt-6 md:pt-8\">\n {/* Below lg the bar under the header already says where you are. */}\n {breadcrumbs ? <div className=\"mb-6 max-lg:hidden\">{breadcrumbs}</div> : null}\n {items.length > 1 ? (\n <details className=\"group mb-8 rounded-2xl border border-border bg-card xl:hidden\">\n <summary className=\"flex min-h-12 cursor-pointer list-none items-center justify-between px-4 text-[0.9375rem] font-medium [&::-webkit-details-marker]:hidden\">\n On this page\n <ChevronDown aria-hidden className=\"size-4 text-muted-foreground transition-transform group-open:rotate-180\" />\n </summary>\n <OnThisPage items={items} activeId={activeId} title={null} className=\"px-4 pb-4\" />\n </details>\n ) : null}\n <article id=\"docs-content\" className=\"max-w-[46rem]\">\n <InDocsContext.Provider value={true}>{children}</InDocsContext.Provider>\n </article>\n {pager ? <div className=\"mt-16 max-w-[46rem]\">{pager}</div> : null}\n </main>\n <div className=\"sticky top-[4.5rem] hidden max-h-[calc(100dvh-4.5rem)] self-start overflow-y-auto py-10 xl:block\">\n {items.length > 1 ? <OnThisPage items={items} activeId={activeId} /> : null}\n </div>\n </div>\n </div>\n {footer ?? <OchkIoFooter />}\n </div>\n );\n}\n","import { ArrowUpRight, CircleUser, LogOut } from 'lucide-react';\nimport { useRouter } from 'next/compat/router';\nimport type { NextRouter } from 'next/router';\nimport { useSyncExternalStore, type ReactNode } from 'react';\n\nimport type { ToolItem } from '../components/tools';\nimport { protocolSite, SIGN_IN_LABEL, type ProtocolSlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { InColumnContext } from '../lib/column';\nimport { DensityProvider } from '../lib/density';\nimport { SiteHomeContext } from '../lib/site-home';\nimport { Button } from '../primitives/button';\nimport { StatusBadge } from '../primitives/status-badge';\nimport { AccountMenu, SideNav, TabBar, tabsFor, ThemeToggle, type AccountMenuItem } from './app-shell';\nimport { SiteFooter, SiteHeader, SkipLink } from './site';\n\n/* ── The account slot ────────────────────────────────────────────────── */\n\n/** Where the session stands: being checked, signed in, signed out, or the check failed. */\nexport type SessionState = 'checking' | 'in' | 'out' | 'unknown';\n\nexport const OCHK_APP_ACCOUNT = 'https://ochk.app/me/account';\n\n/** Back and forward; a router move re-renders the page, which reads the address again. */\nfunction onHistory(change: () => void) {\n window.addEventListener('popstate', change);\n return () => window.removeEventListener('popstate', change);\n}\n\n/** The page's path and query, never the fragment. Anything the URL parser would read as another host returns home. */\nfunction herePath(): string {\n const { href, origin, pathname, search } = window.location;\n const path = pathname + search;\n return new URL(path, href).origin === origin ? path : '/';\n}\n\n/** The route the server renders, with the base path; none for a dynamic route, whose template is no address. */\nfunction routePath(router: NextRouter | null): string | null {\n if (!router || router.pathname.includes('[')) return null;\n return router.basePath && router.pathname === '/' ? router.basePath : router.basePath + router.pathname;\n}\n\n/**\n * This site's sign-in page, set to return to the page the viewer is on:\n * `/signin?return_to=%2Fverify%3Fid%3D…`. The server renders the route\n * without its query, so hydration matches; the fragment is never read, so a\n * share link's secret stays off servers. Pass no path for none.\n */\nexport function useSignInHref(path?: string): string | undefined {\n const router = useRouter();\n const here = useSyncExternalStore(onHistory, herePath, () => routePath(router));\n if (!path) return undefined;\n return here ? `${path}?return_to=${encodeURIComponent(here)}` : path;\n}\n\n/**\n * The header's account control, for any session source: the account menu\n * when signed in, \"Sign in\" when not. While the check runs, the button holds\n * its place unseen, so the header never shifts and a signed-in person never\n * sees \"Sign in\" flash. A failed check offers the account page, which works\n * either way. SessionAccount (./session) drives it from auth-client.\n */\nexport function SessionAccountView({\n state,\n name,\n detail,\n items = [],\n signInHref,\n signInPath,\n signInLabel = SIGN_IN_LABEL,\n accountHref = OCHK_APP_ACCOUNT,\n onSignOut,\n nameFrom = 'lg',\n}: {\n state: SessionState;\n /** The account's name, as it chose to be shown. */\n name?: string;\n /** A second line: a short address. */\n detail?: string;\n /** This site's own items, above \"Your account\". */\n items?: (AccountMenuItem | 'separator')[];\n /** Where \"Sign in\" goes, as given. */\n signInHref?: string;\n /** This site's sign-in page (`/signin`): \"Sign in\" returns to the page the viewer is on. */\n signInPath?: string;\n signInLabel?: string;\n /** Where \"Your account\" goes: ochk.app. */\n accountHref?: string;\n onSignOut?: () => void;\n nameFrom?: 'sm' | 'lg';\n}) {\n const inPlace = useSignInHref(signInPath);\n if (state === 'in') {\n return (\n <AccountMenu\n name={name || 'Your account'}\n detail={detail}\n nameFrom={nameFrom}\n items={[\n ...items,\n ...(items.length > 0 ? (['separator'] as const) : []),\n { label: 'Your account', href: accountHref, icon: <CircleUser /> },\n 'separator',\n { label: 'Sign out', onSelect: onSignOut, icon: <LogOut /> },\n ]}\n />\n );\n }\n if (state === 'unknown') {\n return (\n <Button asChild size=\"sm\" variant=\"secondary\">\n <a href={accountHref}>Your account</a>\n </Button>\n );\n }\n return (\n // No box of its own: it sits exactly where the signed-in chip will. While checking it is only unseen.\n <span className={state === 'checking' ? 'contents invisible' : 'contents'} aria-hidden={state === 'checking' || undefined}>\n <Button asChild size=\"sm\" variant=\"secondary\" tabIndex={state === 'checking' ? -1 : undefined}>\n <a href={signInHref ?? inPlace ?? 'https://ochk.io/signin'}>{signInLabel}</a>\n </Button>\n </span>\n );\n}\n\n/* ── The column ──────────────────────────────────────────────────────── */\n\n/**\n * The tools' one column: 72rem, centred, with a 16px gutter on a phone and\n * 32px from md, so every tool page's title starts at one x. `narrow` keeps a\n * form to 48rem from that same left edge rather than centring a narrower box.\n * ToolShell draws it for its pages; an app page that scrolls itself puts it\n * inside its own scroller.\n */\nexport function ToolColumn({\n measure = 'wide',\n className,\n children,\n}: {\n measure?: 'wide' | 'narrow';\n className?: string;\n children: ReactNode;\n}) {\n return (\n <div className={cn('px-4 pb-16 pt-8 md:px-8 md:pt-10', className)}>\n <div className=\"mx-auto w-full max-w-[72rem]\">\n <InColumnContext.Provider value={true}>\n {measure === 'narrow' ? <div className=\"max-w-[48rem]\">{children}</div> : children}\n </InColumnContext.Provider>\n </div>\n </div>\n );\n}\n\n/* ── The shell ───────────────────────────────────────────────────────── */\n\nexport interface ToolShellProps {\n /** The protocol these tools serve. Its word, its page on ochk.io and its status come from the registry. */\n protocol: ProtocolSlug;\n /** create · verify · discover · playground, in the family's words; give each an icon for the phone's tab bar. */\n tools: readonly ToolItem[];\n /** Where the lockup and the protocol's word go. Default: the protocol's page on ochk.io. */\n home?: string;\n /** The account control: SessionAccount, or SessionAccountView. */\n account?: ReactNode;\n /** List the tools in a rail on the left from lg (a dashboard page), not in the header. */\n rail?: boolean;\n /** Under the tools in the rail: Docs, Spec. */\n railFooter?: ReactNode;\n /**\n * `tool`: pages that scroll, with a footer. `app`: the full window, no\n * footer, the page managing its own scroll (an inbox, a workspace).\n */\n variant?: 'tool' | 'app';\n /**\n * `wide` (default): the 72rem column. `narrow`: a form or a result, 48rem\n * from the same left edge, so the page's title starts where every other\n * tool page's does.\n */\n measure?: 'wide' | 'narrow';\n /** A SiteBanner above the header. */\n banner?: ReactNode;\n /** Replace the footer, or `false` for none. Default: the compact family footer. */\n footer?: ReactNode | false;\n children: ReactNode;\n}\n\n/**\n * The frame for a protocol's tools: a slim full-width header (orangecheck ·\n * stamp, linking the protocol's page on ochk.io; the family menu, the tools,\n * \"About stamp\", the status when it is not live, the account, the theme), the\n * page, and the compact family footer. Everything inside is set at compact density. On a phone the\n * tools move to a tab bar under the thumb when there are two to five, each\n * with an icon.\n */\nexport function ToolShell({\n protocol,\n tools,\n home,\n account,\n rail = false,\n railFooter,\n variant = 'tool',\n measure = 'wide',\n banner,\n footer,\n children,\n}: ToolShellProps) {\n const p = protocolSite(protocol);\n const homeHref = home ?? p.pageHref;\n const app = variant === 'app';\n const tabs = app ? null : tabsFor([{ items: [...tools] }]);\n const about = (\n <a\n href={p.pageHref}\n className=\"inline-flex items-center gap-1 rounded-full px-3 py-2 text-[0.9375rem] text-muted-foreground transition-colors hover:text-foreground\"\n >\n About {p.label}\n <ArrowUpRight aria-hidden className=\"size-3.5\" />\n </a>\n );\n return (\n <DensityProvider density=\"compact\">\n <div\n className={cn(\n 'flex flex-col bg-background',\n // An app frame contains what is positioned inside it (sr-only text deep in the page's own\n // scroller would otherwise size the document), and clips without becoming a scroller.\n app ? 'relative h-dvh overflow-clip' : 'min-h-dvh',\n tabs && 'max-md:pb-[calc(3.5rem_+_env(safe-area-inset-bottom))]'\n )}\n >\n <SkipLink />\n {banner}\n <SiteHeader\n variant=\"tool\"\n home={homeHref}\n product={p.label}\n family={protocol}\n nav={tools.map((t) => ({ href: t.href, label: t.label, active: t.active }))}\n navOnPhone={!tabs}\n menu={<div className=\"[&>a]:px-3 [&>a]:py-3 [&>a]:text-[1.0625rem]\">{about}</div>}\n // With a rail, the tools leave the header from lg.\n className={cn(rail && 'lg:[&_nav[aria-label=Main]]:hidden')}\n actions={\n <>\n <span className=\"hidden lg:contents\">{about}</span>\n {p.status !== 'live' ? <StatusBadge status={p.status} className=\"max-sm:hidden\" /> : null}\n <ThemeToggle className=\"max-sm:hidden\" />\n {account}\n </>\n }\n />\n <div className={cn('mx-auto flex w-full', app ? 'min-h-0 flex-1' : 'max-w-[90rem] flex-1')}>\n {rail ? (\n <aside className=\"sticky top-14 hidden h-[calc(100dvh-3.5rem)] w-60 shrink-0 flex-col gap-6 overflow-y-auto px-4 py-6 lg:flex\">\n <SideNav groups={[{ label: 'Tools', items: tools.map(({ href, label, icon, active }) => ({ href, label, icon, active })) }]} />\n {railFooter ? (\n <div className=\"mt-auto flex flex-col gap-0.5 px-3 text-[0.875rem] text-muted-foreground [&_a:hover]:text-foreground [&_a]:py-1.5 [&_a]:transition-colors\">\n {railFooter}\n </div>\n ) : null}\n </aside>\n ) : null}\n <main id=\"main-content\" className={cn('min-w-0 flex-1', app && 'flex min-h-0 flex-col')}>\n {/* An ErrorPage inside goes home to the protocol's page, as the lockup does. */}\n <SiteHomeContext.Provider value={homeHref}>\n {app ? children : <ToolColumn measure={measure}>{children}</ToolColumn>}\n </SiteHomeContext.Provider>\n </main>\n </div>\n {app || footer === false ? null : (footer ?? <SiteFooter compact family legal />)}\n {tabs ? <TabBar items={tabs} /> : null}\n </div>\n </DensityProvider>\n );\n}\n","import { highlight, linesToHtml, parseCodeMeta, parseLineRanges, readDiff, type CodeLine } from './highlight';\n\n/*\n * A rehype plugin for MDX (@next/mdx, @mdx-js/mdx): highlights every fenced\n * code block at build time and reads its meta, so a page ships coloured code\n * with no highlighter in the browser.\n *\n * ```ts title=\"gate.ts\" {2,4} a caption and two marked lines\n * ```diff + and - lines (or `diff` in the meta)\n * ```bash showLineNumbers numbered lines\n *\n * Each block becomes <pre data-oca-code data-html=\"…\" data-lang data-title\n * data-diff data-line-numbers data-eol>, which mdxComponents' `pre` hands to\n * CodeBlock. The highlighted markup travels as one string per block rather\n * than as an element per token, so a page's JavaScript grows by the size of\n * its code, not by a call for every word in it. No dependencies: it walks\n * the tree itself.\n */\n\ninterface HastNode {\n type: string;\n tagName?: string;\n value?: string;\n properties?: Record<string, unknown>;\n children?: HastNode[];\n data?: { meta?: string | null };\n}\n\nexport interface RehypeCodeOptions {\n /**\n * Replace the built-in highlighter, for instance with shiki's tokens\n * mapped onto these kinds. Return null to fall back to the built-in one.\n */\n tokenize?: (code: string, lang: string | undefined) => CodeLine[] | null;\n /** Fences to leave as they are. Default: mermaid (drawn by Diagram). */\n skip?: readonly string[];\n}\n\nfunction textOf(node: HastNode): string {\n if (node.type === 'text') return node.value ?? '';\n return (node.children ?? []).map(textOf).join('');\n}\n\nfunction langOf(code: HastNode): string | undefined {\n const cls = code.properties?.className;\n const list = Array.isArray(cls) ? cls : typeof cls === 'string' ? cls.split(' ') : [];\n for (const c of list) {\n const m = String(c).match(/^language-(.+)$/);\n if (m) return m[1];\n }\n return undefined;\n}\n\nexport function rehypeCode(options: RehypeCodeOptions = {}) {\n const skip = new Set(options.skip ?? ['mermaid']);\n const visit = (node: HastNode) => {\n for (const child of node.children ?? []) {\n const code = child.type === 'element' && child.tagName === 'pre' ? child.children?.[0] : undefined;\n if (code && code.type === 'element' && code.tagName === 'code' && child.children?.length === 1) {\n const lang = langOf(code);\n if (lang && skip.has(lang)) continue;\n const meta = parseCodeMeta(code.data?.meta);\n let source = textOf(code);\n const newline = /\\n$/.test(source);\n const diff = meta.diff || lang === 'diff' ? readDiff(source) : null;\n if (diff) source = diff.code;\n const lines = options.tokenize?.(source, lang) ?? highlight(source, lang === 'diff' ? undefined : lang);\n child.properties = {\n ...child.properties,\n dataOcaCode: '',\n dataHtml: linesToHtml(lines, { highlight: parseLineRanges(meta.highlight), diff: diff?.diff }),\n ...(lang ? { dataLang: lang } : {}),\n ...(meta.title ? { dataTitle: meta.title } : {}),\n ...(diff ? { dataDiff: '' } : {}),\n ...(meta.lineNumbers ? { dataLineNumbers: '' } : {}),\n ...(newline ? { dataEol: '' } : {}),\n };\n child.children = [];\n continue;\n }\n visit(child);\n }\n };\n return (tree: HastNode) => visit(tree);\n}\n","import type { AnchorHTMLAttributes, HTMLAttributes, ImgHTMLAttributes, InputHTMLAttributes, ReactNode } from 'react';\n\nimport { CodeBlock, CodeTabs, InstallTabs } from '../components/code-block';\nimport {\n ApiTable,\n Callout,\n CardGrid,\n codeLang,\n codeText,\n Diagram,\n DocsHeading,\n LinkCard,\n MdxTable,\n Step,\n Steps,\n type MermaidLoader,\n} from '../components/docs';\nimport { ProtocolGrid } from '../components/family-grids';\nimport { SpecCard } from '../components/protocol';\nimport { TextLink } from '../components/text-link';\nimport { cn } from '../lib/cn';\nimport { StatusBadge } from '../primitives/status-badge';\n\n/*\n * Markdown in the system's type: hand the map to MDX (useMDXComponents or\n * <MDXProvider components>) and every heading, paragraph, list, table,\n * quote and code fence takes its place. Pair it with rehypeCode (./code) so\n * fences arrive highlighted from the build; without it, a fence is\n * highlighted when the page renders.\n *\n * The blocks a page writes by name are in the map too: Callout, Steps and\n * Step, LinkCard and CardGrid, ApiTable, CodeTabs, InstallTabs, SpecCard,\n * ProtocolGrid, StatusBadge.\n */\n\n\nexport interface MdxOptions {\n /** `() => import('mermaid')`: draws ```mermaid fences as diagrams. Without it they show as code. */\n mermaid?: MermaidLoader;\n}\n\ntype PreProps = HTMLAttributes<HTMLPreElement> & {\n 'data-oca-code'?: string;\n 'data-html'?: string;\n 'data-lang'?: string;\n 'data-title'?: string;\n 'data-diff'?: string;\n 'data-line-numbers'?: string;\n 'data-eol'?: string;\n};\n\nexport function createMdxComponents({ mermaid }: MdxOptions = {}) {\n function Pre(props: PreProps) {\n // Highlighted at build time by rehypeCode.\n if (props['data-oca-code'] !== undefined) {\n return (\n <CodeBlock\n html={props['data-html'] ?? ''}\n lang={props['data-lang']}\n caption={props['data-title']}\n diff={props['data-diff'] !== undefined}\n lineNumbers={props['data-line-numbers'] !== undefined}\n trailingNewline={props['data-eol'] !== undefined}\n className=\"my-6\"\n />\n );\n }\n const lang = codeLang(props.children);\n const code = codeText(props.children);\n if (lang === 'mermaid' && mermaid) return <Diagram chart={code} load={mermaid} />;\n return (\n <CodeBlock\n code={code}\n lang={lang === 'mermaid' ? undefined : lang}\n caption={lang === 'mermaid' ? 'Diagram source' : undefined}\n className=\"my-6\"\n />\n );\n }\n\n function A({ href, children, ...rest }: AnchorHTMLAttributes<HTMLAnchorElement>) {\n // In-page anchors and footnote links stay plain.\n if (!href || href.startsWith('#')) {\n return (\n <a href={href} {...rest} className=\"text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground\">\n {children}\n </a>\n );\n }\n return <TextLink href={href}>{children}</TextLink>;\n }\n\n const heading = (as: 'h1' | 'h2' | 'h3' | 'h4') =>\n function Heading(props: HTMLAttributes<HTMLHeadingElement>) {\n return <DocsHeading as={as} {...props} />;\n };\n\n // TypeDoc writes h5 for a method's \"Returns\": a label over what follows, not a section.\n const minor = (Tag: 'h5' | 'h6') =>\n function Minor({ className, ...props }: HTMLAttributes<HTMLHeadingElement>) {\n return <Tag className={cn('mb-2 mt-6 scroll-mt-28 text-[0.9375rem] font-medium leading-snug text-foreground', className)} {...props} />;\n };\n\n return {\n h1: heading('h1'),\n h2: heading('h2'),\n h3: heading('h3'),\n h4: heading('h4'),\n p: ({ className, ...props }: HTMLAttributes<HTMLParagraphElement>) => (\n <p className={cn('my-4 text-[1rem] leading-[1.75] text-muted-foreground md:text-[1.0625rem]', className)} {...props} />\n ),\n a: A,\n strong: (props: HTMLAttributes<HTMLElement>) => <strong className=\"font-medium text-foreground\" {...props} />,\n h5: minor('h5'),\n h6: minor('h6'),\n ul: ({ className, ...props }: HTMLAttributes<HTMLUListElement>) => (\n <ul\n className={cn(\n 'my-4 list-disc space-y-1.5 pl-5 text-[1rem] leading-[1.7] text-muted-foreground marker:text-oca-subtle md:text-[1.0625rem]',\n // A GitHub task list: the box replaces the bullet.\n className?.includes('contains-task-list') && 'list-none pl-0',\n className\n )}\n {...props}\n />\n ),\n ol: ({ className, ...props }: HTMLAttributes<HTMLOListElement>) => (\n <ol\n className={cn(\n 'my-4 list-decimal space-y-1.5 pl-5 text-[1rem] leading-[1.7] text-muted-foreground marker:text-oca-subtle md:text-[1.0625rem]',\n className\n )}\n {...props}\n />\n ),\n li: ({ className, ...props }: HTMLAttributes<HTMLLIElement>) => (\n <li\n className={cn(\n 'pl-1 [&>p]:my-1 [&>ul]:my-1.5 [&>ol]:my-1.5',\n // A wrapped task starts under its text, not under the box.\n className?.includes('task-list-item') && 'pl-6 -indent-6',\n className\n )}\n {...props}\n />\n ),\n input: (props: InputHTMLAttributes<HTMLInputElement>) =>\n props.type === 'checkbox' ? (\n <input\n {...props}\n className={cn('mr-2 size-4 translate-y-[2px] align-baseline accent-foreground', props.className)}\n aria-label={props.checked ? 'Done' : 'To do'}\n />\n ) : (\n <input {...props} />\n ),\n blockquote: ({ children }: { children?: ReactNode }) => <Callout>{children}</Callout>,\n hr: () => <hr className=\"my-10 border-border\" />,\n table: MdxTable,\n code: ({ className, ...props }: HTMLAttributes<HTMLElement>) => (\n <code\n className={cn('break-words rounded-md bg-muted px-1.5 py-0.5 font-mono text-[0.875em] text-foreground', className)}\n {...props}\n />\n ),\n pre: Pre,\n img: ({ className, alt = '', ...props }: ImgHTMLAttributes<HTMLImageElement>) => (\n <img alt={alt} loading=\"lazy\" className={cn('my-6 h-auto max-w-full rounded-2xl border border-border', className)} {...props} />\n ),\n Callout,\n Steps,\n Step,\n LinkCard,\n CardGrid,\n ApiTable,\n CodeBlock,\n CodeTabs,\n InstallTabs,\n SpecCard,\n ProtocolGrid,\n StatusBadge,\n ...(mermaid\n ? { Diagram: (p: { chart: string; caption?: ReactNode }) => <Diagram {...p} load={mermaid} /> }\n : {}),\n };\n}\n\n/** Every key it maps, each a component: what MDX's useMDXComponents takes. */\nexport type MdxComponentMap = ReturnType<typeof createMdxComponents>;\n\n/** The map with no diagrams; createMdxComponents({ mermaid }) draws them. */\nexport const mdxComponents: MdxComponentMap = createMdxComponents();\n"]}