@orangecheck/app-design 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/cn.ts","../src/components/typography.tsx","../src/components/motion.tsx","../src/components/section.tsx","../src/components/hero.tsx","../src/primitives/badge.tsx","../src/primitives/card.tsx","../src/components/steps.tsx","../src/components/code-card.tsx","../src/code/highlight.ts","../src/primitives/scroll-fade.tsx","../src/format/index.ts","../src/lib/shared-context.ts","../src/lib/density.ts","../src/lib/shell-context.ts","../src/primitives/feedback.tsx","../src/primitives/button.tsx","../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/brand/mark.tsx","../src/components/error-page.tsx","../src/brand/iso-check.tsx","../src/primitives/accordion.tsx","../src/components/blocks.tsx","../src/components/text-link.tsx","../src/components/legal.tsx","../src/family/index.ts","../src/primitives/status-badge.tsx","../src/components/family-grids.tsx","../src/primitives/form.tsx","../src/components/protocol.tsx","../src/components/verify.tsx","../src/components/docs.tsx","../src/components/search.tsx","../src/components/tools.tsx"],"names":["createElement","jsx","useState","useEffect","cva","Card","jsxs","useRef","at","useContext","forwardRef","Separator","Button","Fragment","createContext","useCallback","Link","LINK","TONE","pad","Input","Textarea","Label","useId","isValidElement","cloneElement","SelectTrigger","ChevronDown","SelectContent","SelectItem","Check","Checkbox","Switch","RadioGroup","RadioGroupItem","protocol","ArrowUpRight","ArrowRight","SearchButton","useMemo"],"mappings":"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","file":"components.mjs","sourcesContent":["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 { 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 { 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 { 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 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","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","/*\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 { 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 { 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 * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner';\n\nimport { cn } from '../lib/cn';\n\nexport function Spinner({ className, label }: { className?: string; label?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn('size-4 animate-spin', className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.2\" strokeWidth=\"2.5\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** A placeholder bar, visible on the canvas and on a card in both modes. */\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-ui=\"skeleton\"\n className={cn('animate-pulse rounded-lg bg-[var(--oca-skeleton)]', className)}\n {...props}\n />\n );\n}\n\n/**\n * True once `active` has stayed true for `ms`. A loading state that never\n * ends reads as a broken page; pass this to show a way out instead.\n */\nexport function useTimedOut(active: boolean, ms = 12_000): boolean {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n if (!active) {\n setTimedOut(false);\n return;\n }\n const t = setTimeout(() => setTimedOut(true), ms);\n return () => clearTimeout(t);\n }, [active, ms]);\n return timedOut;\n}\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = 'horizontal', decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className\n )}\n {...props}\n />\n );\n});\n\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border bg-card px-1.5 font-mono text-[11px] text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Live-region status dot: a calm pulse for \"running\", solid otherwise. */\nexport function StatusDot({\n tone = 'neutral',\n pulse = false,\n className,\n}: {\n tone?: 'neutral' | 'success' | 'warning' | 'danger' | 'brand';\n pulse?: boolean;\n className?: string;\n}) {\n const color = {\n neutral: 'bg-oca-subtle',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n brand: 'bg-brand',\n }[tone];\n return (\n <span\n aria-hidden\n className={cn('inline-block size-2 shrink-0 rounded-full', color, pulse && 'oca-animate-pulse-dot', className)}\n />\n );\n}\n\n/** Toasts in the system's type and surfaces. Mount once. */\nexport function Toaster(props: ToasterProps) {\n return (\n <SonnerToaster\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast: 'oca-toast rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg font-sans',\n title: 'text-[0.9375rem] font-medium',\n description: 'text-sm text-muted-foreground',\n actionButton: 'rounded-full bg-primary text-primary-foreground',\n cancelButton: 'rounded-full bg-muted text-foreground',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from 'sonner';\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Spinner } from './feedback';\n\n/*\n * Pills, as the deck draws them: the black filled pill leads, the white\n * outlined pill follows. `brand` is for the orange band only; `onInk` and\n * `onInkOutline` are the same pair inverted for dark bands.\n */\nexport const buttonVariants = cva(\n [\n 'inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-150',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'active:translate-y-px disabled:pointer-events-none',\n // Disabled is one look for every variant: a quiet grey pill, never a\n // faded black or orange slab that reads as broken.\n 'disabled:border disabled:border-border disabled:bg-muted disabled:text-oca-subtle disabled:shadow-none',\n '[&_svg]:pointer-events-none [&_svg]:size-[1.1em] [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85',\n secondary:\n 'border border-border bg-secondary text-secondary-foreground hover:border-oca-hairline-strong hover:bg-accent',\n brand: 'bg-brand text-brand-foreground hover:bg-oca-orange-deep',\n ghost: 'text-foreground hover:bg-accent',\n danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'h-auto rounded-none px-0 text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground',\n onInk: 'bg-white text-oca-ink hover:bg-white/90',\n onInkOutline: 'border border-white/20 text-white hover:bg-white/10',\n },\n size: {\n sm: 'h-9 px-4 text-sm',\n md: 'h-11 px-5 text-[0.9375rem]',\n lg: 'h-14 px-7 text-[1.0625rem]',\n icon: 'size-10',\n 'icon-sm': 'size-8',\n },\n },\n compoundVariants: [{ variant: 'link', className: 'h-auto px-0' }],\n defaultVariants: { variant: 'primary', size: 'md' },\n }\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Render the child element (a Link, an <a>) with the button's styles. */\n asChild?: boolean;\n /** Shows a spinner and disables the button. */\n loading?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { className, variant, size, asChild = false, loading = false, disabled, children, type, ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n data-ui=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={asChild ? undefined : disabled || loading}\n aria-busy={loading || undefined}\n type={asChild ? undefined : (type ?? 'button')}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner className=\"size-[1.1em]\" /> : null}\n {children}\n </>\n )}\n </Comp>\n );\n});\n","import { 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 className?: string;\n}\n\nexport function StatCard({ label, value, hint, size, 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 )}\n >\n {value}\n </span>\n {hint ? (\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{hint}</span>\n ) : inGrid ? (\n <span aria-hidden />\n ) : null}\n </div>\n );\n}\n\nconst MD_COLS: Record<number, string> = {\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\nconst LG_COLS: Record<number, string> = {\n 1: 'lg:grid-cols-1',\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n 5: 'lg:grid-cols-5',\n};\nconst MD_SPAN: Record<number, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n};\nconst LG_SPAN: Record<number, string> = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n};\n\n/** Columns for n tiles: as few ragged rows as possible, never more than five. */\nfunction statColumns(n: number): number {\n if (n <= 5) return Math.max(1, n);\n if (n % 4 === 0) return 4;\n if (n % 3 === 0) return 3;\n return 4;\n}\n\n/** How wide the last tile must be to fill its row of `cols`. */\nfunction lastSpan(n: number, cols: number): number {\n const rest = n % cols;\n return rest === 0 ? 1 : cols - rest + 1;\n}\n\n/** One quiet line where a group of numbers would all be zero. */\nexport function EmptyLine({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <p\n className={cn(\n 'rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-5 py-4 text-[0.9375rem] text-muted-foreground',\n className\n )}\n >\n {children}\n </p>\n );\n}\n\nexport interface StatGridProps extends HTMLAttributes<HTMLDivElement> {\n /** Columns from md up. Default: the count up to 4, then 3 or 4. */\n columns?: 1 | 2 | 3 | 4 | 5;\n /** Shown instead of the tiles when the group is empty. */\n empty?: ReactNode;\n /** Force the empty line. Default: every child's `raw` is 0 or null. */\n isEmpty?: boolean;\n}\n\n/**\n * Stat tiles, two to a row on a phone. The last tile stretches to fill its row,\n * so a grid never ends in a hole, and a group of zeros becomes one line.\n */\nexport function StatGrid({ columns, empty, isEmpty, className, children, ...props }: StatGridProps) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<StatCardProps>[];\n const n = items.length;\n const allZero =\n n > 0 && items.every((el) => 'raw' in el.props && (el.props.raw === 0 || el.props.raw === null));\n 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}\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 )}\n >\n {it.value}\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\n/* ── Table ───────────────────────────────────────────────────────────── */\n\nexport interface Column<T> {\n key: string;\n header: ReactNode;\n cell: (row: T) => ReactNode;\n align?: 'start' | 'end';\n /** A number: right-aligned, tabular, never wrapped. */\n numeric?: boolean;\n /** Hide below md in the table (the phone card list still shows it). */\n wide?: boolean;\n /** A CSS width for the column, e.g. '12rem' or '30%'. */\n width?: string;\n /** The narrowest it may get before the table scrolls instead. */\n minWidth?: string;\n /** Cut long content to one line (put the full value in a title or HashChip). */\n truncate?: boolean;\n /** The phone card's title. Defaults to the first column. */\n primary?: boolean;\n /** Leave out of the phone card list. */\n hideOnPhone?: boolean;\n}\n\n/**\n * Rows of data. Wider than its box, the table scrolls with an edge that says\n * so; under 640px it becomes a list of cards that keep every column's label.\n */\nexport function DataTable<T>({\n columns,\n rows,\n rowKey,\n empty,\n caption,\n phone = 'cards',\n 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 as written, without\n * removed lines and, for a shell transcript with `$ ` prompts, only the\n * 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): string | null {\n if (!pre) return null;\n const lines = pre.querySelectorAll('[data-line]');\n if (lines.length === 0) return pre.textContent ?? '';\n return Array.from(lines)\n .filter((l) => l.getAttribute('data-diff') !== 'remove')\n .map((l) => l.textContent ?? '')\n .join('\\n');\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 copy: kept ? kept.join('\\n') : src,\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}: {\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}) {\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 w-max min-w-full py-4 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]',\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 /** 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 /** 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 lang,\n caption,\n copy = true,\n clearAfter,\n maxLines,\n highlight: marks,\n diff,\n lineNumbers,\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) ?? 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 >\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","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","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { MarkOutline } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { Button } from '../primitives/button';\nimport { Section } from './section';\n\nconst WORDS: Record<number, { name: string; title: string; detail: string }> = {\n 404: {\n name: 'Not found',\n title: 'This page isn’t here.',\n detail: 'The link may be old, or the address mistyped.',\n },\n 500: {\n name: 'Server error',\n title: 'Something broke on our side.',\n detail: 'Try again in a moment.',\n },\n};\n\n/**\n * A 404, a 500 or any other error, inside the site's own header and footer:\n * the code, one sentence, one line and a way on. A server error offers a\n * retry as well as the way home. Beside it on a wide screen, the check drawn\n * in hairlines: there, but not filled in.\n */\nexport function ErrorPage({\n code = 404,\n title,\n detail,\n actions,\n home = '/',\n art,\n className,\n}: {\n code?: number;\n title?: ReactNode;\n detail?: ReactNode;\n /** Replaces the default ways on. */\n actions?: ReactNode;\n home?: string;\n /** Beside the words from md up. Defaults to the outlined check; `null` leaves it out. */\n art?: ReactNode;\n className?: string;\n}) {\n const words = WORDS[code] ?? (code >= 500 ? WORDS[500]! : WORDS[404]!);\n const server = code >= 500;\n return (\n <Section space=\"none\" className={cn('flex min-h-[min(40rem,72dvh)] items-center py-16 md:py-24', className)}>\n <div className=\"grid grid-cols-1 items-center gap-12 md:grid-cols-12\">\n <div className=\"flex max-w-[40rem] flex-col items-start gap-6 md:col-span-7\">\n <p className=\"oca-eyebrow oca-enter\">\n <span className=\"oca-tabular\">{code}</span> · {WORDS[code]?.name ?? (server ? 'Error' : 'Not available')}\n </p>\n <h1 className=\"oca-display-2 oca-enter [--enter-delay:70ms]\">{title ?? words.title}</h1>\n <p className=\"oca-lead oca-enter [--enter-delay:150ms]\">{detail ?? words.detail}</p>\n <div className=\"oca-enter flex flex-wrap gap-3 [--enter-delay:230ms]\">\n {actions ?? (\n <>\n {server ? <Button onClick={() => window.location.reload()}>Try again</Button> : null}\n <Button asChild variant={server ? 'secondary' : 'primary'}>\n <Link href={home}>Go home</Link>\n </Button>\n </>\n )}\n </div>\n </div>\n {art !== null ? (\n <div aria-hidden className=\"oca-enter hidden justify-center md:col-span-5 md:flex [--enter-delay:120ms]\">\n {art ?? <MarkOutline className=\"w-full max-w-[20rem] text-oca-hairline-strong\" />}\n </div>\n ) : null}\n </div>\n </Section>\n );\n}\n","import { 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 { 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 type { ReactNode } from 'react';\n\nimport { IsoCheck } from '../brand/iso-check';\nimport { cn } from '../lib/cn';\nimport { Accordion, AccordionItem } from '../primitives/accordion';\nimport { Reveal } from './motion';\nimport { Section, SectionIntro } from './section';\nimport { Display, Eyebrow } from './typography';\n\n/**\n * A section's title on a public page: eyebrow, headline, one line. It rises\n * into place the first time it is seen (`reveal={false}` keeps it still).\n */\nexport function SectionHeading({\n eyebrow,\n title,\n lead,\n id,\n onInk = false,\n level = 2,\n as = 'h2',\n align = 'start',\n reveal = true,\n className,\n}: {\n eyebrow?: ReactNode;\n title: ReactNode;\n lead?: ReactNode;\n /** The heading's id, for a link to the section. */\n id?: string;\n /** On an ink band: the eyebrow and lead take the ink tones. */\n onInk?: boolean;\n /** Visual size. 3 for a block inside a section. */\n level?: 2 | 3;\n as?: 'h2' | 'h3';\n align?: 'start' | 'center';\n reveal?: boolean;\n className?: string;\n}) {\n return (\n <SectionIntro align={align} reveal={reveal} className={cn('max-w-3xl gap-4 md:gap-4', className)}>\n {eyebrow ? <Eyebrow onInk={onInk}>{eyebrow}</Eyebrow> : null}\n <Display level={level} as={as} id={id} className=\"scroll-mt-24\">\n {title}\n </Display>\n {lead ? <p className={cn('oca-lead', onInk && 'text-oca-ink-muted')}>{lead}</p> : null}\n </SectionIntro>\n );\n}\n\n/**\n * One titled block of facts, for pages where a reader checks a claim: a\n * heading, one or two sentences, a link or two beside the title saying where\n * the full number lives, then the facts.\n */\nexport function FactBlock({\n id,\n title,\n description,\n aside,\n children,\n className,\n}: {\n id?: string;\n title: ReactNode;\n description?: ReactNode;\n /** Links beside the title: the source, the raw data. */\n aside?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n return (\n <section id={id} className={cn('flex scroll-mt-24 flex-col gap-6', className)}>\n <div className=\"flex flex-col gap-3 md:flex-row md:items-end md:justify-between md:gap-8\">\n <div className=\"flex max-w-[44rem] flex-col gap-3\">\n <h2 className=\"oca-display-3\">{title}</h2>\n {description ? <div className=\"oca-body text-[1.0625rem]\">{description}</div> : null}\n </div>\n {aside ? <div className=\"flex shrink-0 flex-wrap gap-x-5 gap-y-2 text-[0.9375rem]\">{aside}</div> : null}\n </div>\n {children}\n </section>\n );\n}\n\nexport interface FactRow {\n key: string;\n title: ReactNode;\n /** A figure beside the title: a limit, a count. */\n figure?: ReactNode;\n fields: { label: ReactNode; value: ReactNode }[];\n}\n\n/**\n * A table that stays readable on a phone: one row per subject, each value\n * under its own label. Wide pages lay the values side by side.\n */\nexport function FactRows({\n rows,\n columns = 1,\n label,\n className,\n}: {\n rows: FactRow[];\n /** Two columns of fields from md up. */\n columns?: 1 | 2;\n /** The list's name for a screen reader. */\n label: string;\n className?: string;\n}) {\n return (\n <ul aria-label={label} className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {rows.map((r) => (\n <li key={r.key} className=\"flex flex-col gap-5 px-5 py-6 md:px-8 md:py-7\">\n {/* The figure keeps its own line end; a long title wraps beside it. */}\n <div className=\"flex items-baseline justify-between gap-x-6\">\n <h3 className=\"oca-title min-w-0 text-pretty\">{r.title}</h3>\n {r.figure ? (\n <span className=\"oca-tabular shrink-0 whitespace-nowrap text-[1.75rem] leading-none tracking-[-0.02em]\">\n {r.figure}\n </span>\n ) : null}\n </div>\n <dl className={columns === 2 ? 'grid grid-cols-1 gap-x-10 gap-y-4 md:grid-cols-2' : 'flex flex-col gap-4'}>\n {r.fields.map((f, i) => (\n <div key={i} className=\"flex min-w-0 flex-col gap-1\">\n <dt className=\"text-[0.875rem] font-medium text-muted-foreground\">{f.label}</dt>\n <dd className=\"break-words text-[1rem] leading-relaxed\">{f.value}</dd>\n </div>\n ))}\n </dl>\n </li>\n ))}\n </ul>\n );\n}\n\nexport interface Endpoint {\n href: string;\n /** What it returns, in a line. */\n description: ReactNode;\n /** Shown instead of the address (a path for a long URL). */\n label?: string;\n}\n\n/** Public endpoints and what each returns: the same numbers, for your own tooling. Each opens raw, in a new tab. */\nexport function EndpointList({ items, label, className }: { items: Endpoint[]; label?: string; className?: string }) {\n return (\n <ul aria-label={label} className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((a) => (\n <li key={a.href}>\n <a\n href={a.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"flex flex-col gap-1 px-5 py-3.5 transition-colors hover:bg-accent/60 sm:flex-row sm:items-baseline sm:justify-between sm:gap-6\"\n >\n <code className=\"break-all text-[0.875rem] text-foreground\">{a.label ?? a.href}</code>\n <span className=\"text-[0.875rem] text-muted-foreground sm:text-right\">\n {a.description}\n <span className=\"sr-only\"> (opens in a new tab)</span>\n </span>\n </a>\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * A row of short claims between two hairlines, under a hero: an icon in the\n * accent and a few words each. Two to a row on a phone, four on a desk.\n */\nexport function ProofStrip({ items, className }: { items: { icon?: ReactNode; label: ReactNode }[]; className?: string }) {\n return (\n <div className={cn('border-y border-border', className)}>\n <ul className=\"oca-container grid grid-cols-2 gap-x-6 gap-y-4 py-6 md:grid-cols-4\">\n {items.map((it, i) => (\n <li\n key={i}\n className=\"flex items-center gap-3 text-[0.9375rem] [&_svg]:size-[1.1rem] [&_svg]:shrink-0 [&_svg]:text-oca-accent-ink\"\n >\n {it.icon ? <span aria-hidden className=\"flex\">{it.icon}</span> : null}\n {it.label}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n/** The last band of a page: one large line, the actions, and the check settling beside them. */\nexport function Closing({\n title,\n lead,\n actions,\n art,\n className,\n}: {\n title: ReactNode;\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the words from md up. Defaults to the check; `null` leaves it out. */\n art?: ReactNode;\n className?: string;\n}) {\n return (\n <Section className={cn('overflow-hidden', className)}>\n <div className=\"grid grid-cols-1 items-center gap-12 md:grid-cols-12\">\n <Reveal className=\"flex flex-col items-start gap-8 md:col-span-7\">\n <div className=\"flex flex-col gap-5\">\n <h2 className=\"oca-display-1 text-[clamp(2.5rem,1.5rem+4vw,5rem)] leading-[1]\">{title}</h2>\n {lead ? <p className=\"oca-lead max-w-[34rem]\">{lead}</p> : null}\n </div>\n {actions ? <div className=\"flex flex-wrap gap-3\">{actions}</div> : null}\n </Reveal>\n {art !== null ? (\n // Room under the check on a phone, so its glow fades before the band ends.\n <div aria-hidden className=\"flex justify-center max-md:pb-16 md:col-span-5\">\n {art ?? <IsoCheck size={340} settle tilt className=\"max-w-full\" />}\n </div>\n ) : null}\n </div>\n </Section>\n );\n}\n\n/** Questions and their answers, one open at a time. One sentence an answer, where it can be. */\nexport function Faq({\n items,\n className,\n}: {\n items: { q: ReactNode; a: ReactNode; id?: string }[];\n className?: string;\n}) {\n return (\n <Accordion single className={className}>\n {items.map((it, i) => (\n <AccordionItem key={it.id ?? i} id={it.id} title={it.q}>\n {it.a}\n </AccordionItem>\n ))}\n </Accordion>\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\nconst LINK = 'text-foreground underline decoration-foreground/35 underline-offset-4 transition-colors hover:decoration-foreground';\n\n/**\n * A link in running text. A page of this site goes through the router; an\n * API or a /.well-known file is a plain anchor (the router would try to\n * render it); another site opens in a new tab, and says so to a screen reader.\n */\nexport function TextLink({\n href,\n children,\n external,\n className,\n}: {\n href: string;\n children: ReactNode;\n /** Force a new tab (true) or keep it in this one (false). Default: by the address. */\n external?: boolean;\n className?: string;\n}) {\n const internal = href.startsWith('/') && !href.startsWith('/api/') && !href.startsWith('/.well-known/');\n const offsite = external ?? /^https?:\\/\\//.test(href);\n if (internal && !offsite) {\n return (\n <Link href={href} className={cn(LINK, className)}>\n {children}\n </Link>\n );\n }\n return (\n <a href={href} className={cn(LINK, className)} {...(offsite ? { target: '_blank', rel: 'noreferrer' } : {})}>\n {children}\n {offsite ? <span className=\"sr-only\"> (opens in a new tab)</span> : null}\n </a>\n );\n}\n","import { Fragment, type ReactNode } from 'react';\n\nimport { DocHeader, DocLayout } from './hero';\nimport { Notice } from './data';\nimport { TextLink } from './text-link';\nimport { Prose } from './typography';\n\n/*\n * A document from @orangecheck/legal, the one source every site renders, set\n * in this system's Prose: sentence-case headings, its contents beside it on a\n * desk. The shapes below are @orangecheck/legal's, written out so a LegalDoc\n * passes straight in without this package depending on that one.\n */\n\nexport type LegalBlock =\n | { kind: 'para'; text: string }\n | { kind: 'subhead'; text: string }\n | { kind: 'bullets'; items: (string | { k: string; v: string })[] }\n | { kind: 'callout'; text: string; emphatic?: boolean }\n | { kind: 'stub'; text: string };\n\nexport interface LegalSource {\n eyebrow: string;\n title: string;\n description: string;\n effective: string;\n updated: string;\n preamble?: LegalBlock[];\n sections: { id: string; num?: string; heading: string; hint?: string; blocks: LegalBlock[] }[];\n summary?: string;\n}\n\n/** Words the legal source writes in lowercase that keep their own case in a heading. */\nconst PROPER: Record<string, string> = {\n kyc: 'KYC',\n pii: 'PII',\n ccpa: 'CCPA',\n cpra: 'CPRA',\n gdpr: 'GDPR',\n uk: 'UK',\n eu: 'EU',\n california: 'California',\n europe: 'Europe',\n united: 'United',\n kingdom: 'Kingdom',\n};\n\n/** The source writes headings in lowercase; a heading opens with a capital, the brand as OrangeCheck only there. */\nfunction headingCase(text: string): string {\n const words = text.replace(/\\b[a-z]+\\b/g, (w) => PROPER[w] ?? w);\n if (/^orangecheck\\b/.test(words)) return `OrangeCheck${words.slice('orangecheck'.length)}`;\n return words.length === 0 ? words : words[0]!.toUpperCase() + words.slice(1);\n}\n\nfunction sentencesCase(text: string): string {\n return text\n .split(/(?<=[.!?])\\s+/)\n .map((s) => headingCase(s))\n .join(' ');\n}\n\n/** A sentence after a bold lead-in opens with a capital, unless it opens with a name written lowercase on purpose. */\nfunction openSentence(text: string): string {\n const first = /^\\S+/.exec(text)?.[0] ?? '';\n if (!/^[a-z][a-z'’-]*,?$/.test(first)) return text;\n return text[0]!.toUpperCase() + text.slice(1);\n}\n\nconst INLINE = /(\\*\\*[^*]+\\*\\*|`[^`]+`|\\[[^\\]]+\\]\\([^)]+\\))/g;\nconst LINK = /^\\[([^\\]]+)\\]\\(([^)]+)\\)$/;\n\n/** The source's inline markup: **strong**, `code` and [label](href), split as its own renderer splits it. */\nfunction Inline({ text }: { text: string }): ReactNode {\n return (\n <>\n {text.split(INLINE).map((part, i) => {\n if (!part) return null;\n if (part.startsWith('**') && part.endsWith('**') && part.length > 4) {\n return (\n <strong key={i}>\n <Inline text={part.slice(2, -2)} />\n </strong>\n );\n }\n if (part.startsWith('`') && part.endsWith('`') && part.length > 2) return <code key={i}>{part.slice(1, -1)}</code>;\n const link = LINK.exec(part);\n if (link) {\n return (\n <TextLink key={i} href={link[2] ?? ''}>\n {link[1]}\n </TextLink>\n );\n }\n return <Fragment key={i}>{part}</Fragment>;\n })}\n </>\n );\n}\n\nfunction BlockView({ block }: { block: LegalBlock }): ReactNode {\n switch (block.kind) {\n case 'para':\n // A block can hold several paragraphs, separated by a blank line.\n return (\n <>\n {block.text.split(/\\n{2,}/).map((para, i) => (\n <p key={i}>\n <Inline text={para} />\n </p>\n ))}\n </>\n );\n case 'subhead':\n return (\n <h3>\n <Inline text={headingCase(block.text)} />\n </h3>\n );\n case 'bullets':\n return (\n <ul>\n {block.items.map((item, i) =>\n typeof item === 'string' ? (\n <li key={i}>\n <Inline text={item} />\n </li>\n ) : (\n <li key={i}>\n <strong>{headingCase(item.k)}.</strong> <Inline text={openSentence(item.v)} />\n </li>\n )\n )}\n </ul>\n );\n case 'callout':\n return (\n <div className=\"not-prose my-6\">\n <Notice tone={block.emphatic ? 'brand' : 'neutral'}>\n <Inline text={block.text} />\n </Notice>\n </div>\n );\n case 'stub':\n return (\n <div className=\"not-prose my-6\">\n <Notice tone=\"brand\" title=\"Pending counsel review\">\n <Inline text={block.text} />\n </Notice>\n </div>\n );\n }\n}\n\n/** A legal document as a page: its header, its contents, its sections, and the one-line summary. */\nexport function LegalDocument({ doc, className }: { doc: LegalSource; className?: string }) {\n return (\n <DocLayout\n className={className}\n header={\n <DocHeader\n eyebrow={headingCase(doc.eyebrow)}\n title={doc.title}\n lead={doc.description}\n meta={`Effective ${doc.effective} · last updated ${doc.updated}`}\n />\n }\n toc={doc.sections.map((s) => ({ id: s.id, label: headingCase(s.heading) }))}\n >\n <article className=\"min-w-0\">\n <Prose>\n {doc.preamble?.map((b, i) => <BlockView key={i} block={b} />)}\n {doc.sections.map((s) => (\n <section key={s.id}>\n <h2 id={s.id} className=\"scroll-mt-24\">\n {s.num ? <span className=\"oca-tabular text-muted-foreground\">{s.num} </span> : null}\n {headingCase(s.heading)}\n </h2>\n {s.hint ? <p className=\"text-[0.9375rem]\">{headingCase(s.hint)}</p> : null}\n {s.blocks.map((b, i) => (\n <BlockView key={i} block={b} />\n ))}\n </section>\n ))}\n {doc.summary ? (\n <p className=\"mt-14 border-t border-border pt-6 text-[0.9375rem]\">\n <strong>In short.</strong> {sentencesCase(doc.summary.replace(/^summary:\\s*/i, ''))}\n </p>\n ) : null}\n </Prose>\n </article>\n </DocLayout>\n );\n}\n","/*\n * The orangecheck family as data: every public site, its one line, its group\n * and its status. The family menu, the footer, the protocol grid and the app\n * grid all read it, so a site is added, renamed or retired here and nowhere\n * else. No React: OG renderers and server code import it too.\n *\n * Status is written here until the claims source exists; then it is read\n * from there. \"live\" shows no badge.\n */\nimport type { FooterColumn, NavItem } from '../lib/nav';\n\n/** The six protocols, in the family's fixed order. */\nexport type ProtocolSlug = 'attest' | 'lock' | 'vote' | 'stamp' | 'agent' | 'pledge';\n\n/** The same slugs as the classic system's, so a site's `current` carries over. */\nexport type FamilySlug =\n | 'home'\n | 'me'\n | 'docs'\n | ProtocolSlug\n | 'vault'\n | 'chat'\n | 'cosign'\n | 'me-demo'\n | 'globe'\n | 'btc';\n\nexport type FamilyGroup = 'orangecheck' | 'protocol' | 'app' | 'public-good';\n\n/** Where a site or feature stands, in the family's words. */\nexport type SiteStatus = 'live' | 'testing' | 'not-yet' | 'paused';\n\nexport interface FamilySite {\n slug: FamilySlug;\n /** The site's word, lowercase, as menus and lockups show it. */\n label: string;\n /** Where the family menu and footer send people. A protocol's is its page on ochk.io. */\n href: string;\n group: FamilyGroup;\n /** What it is, in one sentence. */\n line: string;\n status: SiteStatus;\n /** For an app: the protocols it shows. */\n protocols?: ProtocolSlug[];\n}\n\nexport interface ProtocolSite extends FamilySite {\n slug: ProtocolSlug;\n group: 'protocol';\n /** What it carries: identity, confidentiality, legitimacy, provenance, authority, commitment. */\n verb: string;\n /** The protocol's page on ochk.io. */\n pageHref: string;\n /** The tools, on the protocol's own host. */\n toolHref: string;\n /** The normative spec. */\n specHref: string;\n /** The Nostr event kinds it publishes. */\n kinds: string;\n}\n\nexport const OCHK_IO = 'https://ochk.io';\n/** The docs live under ochk.io; docs.ochk.io 308s here. */\nexport const DOCS_HREF = `${OCHK_IO}/docs`;\n\nfunction protocol(\n slug: ProtocolSlug,\n verb: string,\n line: string,\n kinds: string\n): ProtocolSite {\n return {\n slug,\n label: slug,\n href: `${OCHK_IO}/${slug}`,\n group: 'protocol',\n line,\n status: 'live',\n verb,\n pageHref: `${OCHK_IO}/${slug}`,\n toolHref: `https://${slug}.ochk.io`,\n specHref: `https://github.com/orangecheck/oc-${slug}-protocol`,\n kinds,\n };\n}\n\n/** Attest · Lock · Vote · Stamp · Agent · Pledge, everywhere. */\nexport const PROTOCOLS: readonly ProtocolSite[] = [\n protocol('attest', 'identity', 'Show that an address holds bitcoin, and for how long.', '30078'),\n protocol('lock', 'confidentiality', 'Encrypt to a Bitcoin address, so only its holder can open it.', '30078'),\n protocol('vote', 'legitimacy', 'Polls weighed in sats, that anyone can tally.', '30080–30082'),\n protocol('stamp', 'provenance', 'Prove who signed something, and when.', '30083'),\n protocol('agent', 'authority', 'Give software scoped, revocable permission to act for you.', '30083–30086'),\n protocol('pledge', 'commitment', 'Make a promise with bitcoin behind it, on a public record.', '30078'),\n];\n\nexport const PROTOCOL_ORDER: readonly ProtocolSlug[] = PROTOCOLS.map((p) => p.slug);\n\nexport const FAMILY: readonly FamilySite[] = [\n {\n slug: 'home',\n label: 'ochk.io',\n href: OCHK_IO,\n group: 'orangecheck',\n line: 'The open protocols, and the company behind them.',\n status: 'live',\n },\n {\n slug: 'me',\n label: 'ochk.app',\n href: 'https://ochk.app',\n group: 'orangecheck',\n line: 'One account, with Bitcoin behind it.',\n status: 'testing',\n },\n {\n slug: 'docs',\n label: 'docs',\n href: DOCS_HREF,\n group: 'orangecheck',\n line: 'Specs, SDKs and guides for every protocol.',\n status: 'live',\n },\n ...PROTOCOLS,\n {\n slug: 'vault',\n label: 'vault',\n href: 'https://vault.ochk.io',\n group: 'app',\n line: 'A password manager, encrypted in your browser.',\n status: 'live',\n protocols: ['lock'],\n },\n {\n slug: 'chat',\n label: 'chat',\n href: 'https://chat.ochk.io',\n group: 'app',\n line: 'Messages only the holder of a Bitcoin address can read.',\n status: 'testing',\n protocols: ['lock'],\n },\n {\n slug: 'cosign',\n label: 'cosign',\n href: 'https://cosign.ochk.io',\n group: 'app',\n line: 'Builders find co-founders and backers.',\n status: 'testing',\n // 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 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 { ArrowRight, ArrowUpRight } from 'lucide-react';\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 { 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 return (\n <ul className={cn('grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 md:gap-5', className)}>\n {protocols.map((slug) => {\n const p = protocolSite(slug);\n const i = PROTOCOL_ORDER.indexOf(slug);\n return (\n <li key={slug}>\n <div className={cn(CARD, 'gap-4')}>\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"oca-numeral\">\n {pad(i)} <span className=\"ml-1.5 capitalize\">{p.verb}</span>\n </span>\n {p.status !== 'live' ? <StatusBadge status={p.status} /> : null}\n </div>\n <h3 className=\"oca-display-3\">\n <a\n href={link === 'tool' ? p.toolHref : link === 'docs' ? `${DOCS_HREF}/${p.slug}` : p.pageHref}\n className={STRETCH}\n >\n {p.label}\n </a>\n </h3>\n <p className=\"oca-body\">{p.line}</p>\n <div className=\"mt-auto flex items-center justify-between gap-3 pt-2 text-[0.875rem] text-muted-foreground\">\n <span className=\"oca-tabular\">Nostr kind {p.kinds}</span>\n {/* 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 * 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\nexport interface FieldProps {\n label: ReactNode;\n /** Help under the control. It sits below, so paired fields stay level. */\n hint?: ReactNode;\n /** Mark the field optional beside its label, rather than in a hint. */\n optional?: boolean;\n /** Shown in place of nothing; marks the control invalid. */\n error?: ReactNode;\n /** The control. Receives id, aria-describedby and aria-invalid. */\n children: ReactElement;\n className?: string;\n /** Render the label visually hidden (it is still the accessible name). */\n hideLabel?: boolean;\n /** A button that acts on the control, set beside it (below it on a phone). */\n action?: ReactNode;\n}\n\n/** Label, hint, control and error, wired together by id. */\nexport function Field({ label, hint, optional, error, children, className, hideLabel, action }: FieldProps) {\n const id = useId();\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined;\n const control = isValidElement(children)\n ? cloneElement(children as ReactElement<Record<string, unknown>>, {\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': error ? true : undefined,\n })\n : children;\n const hintNode = hint ? (\n <p id={hintId} className=\"text-[0.8125rem] leading-snug text-muted-foreground\">\n {hint}\n </p>\n ) : null;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <Label htmlFor={id} className={hideLabel ? 'sr-only' : 'flex items-baseline gap-2'}>\n {label}\n {optional ? <span className=\"text-[0.8125rem] font-normal text-muted-foreground\">Optional</span> : null}\n </Label>\n {action ? (\n // The hint belongs to the input, so it sits under the input, not under the button.\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-2 [&>input]:w-full\">\n {control}\n {hintNode}\n </div>\n <div className=\"shrink-0\">{action}</div>\n </div>\n ) : (\n <>\n {control}\n {hintNode}\n </>\n )}\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] leading-snug text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/* ── Select ───────────────────────────────────────────────────────────── */\n\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 { ArrowUpRight } from 'lucide-react';\nimport { useState, type CSSProperties, type FormEvent, type ReactNode } from 'react';\n\nimport { PROTOCOLS, protocolSite, type ProtocolSlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { Button } from '../primitives/button';\nimport { Field, Input, Textarea } from '../primitives/form';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { StatusBadge } from '../primitives/status-badge';\nimport { PageHero } from './hero';\n\n/*\n * The parts of a protocol's page on ochk.io. Each takes the protocol's slug\n * and reads its word, verb, links and kinds from the registry, so the six\n * pages are the same page with different data and cannot drift.\n */\n\n/** The top of a protocol page: \"Protocol · provenance\", the title, one line, the ways in. */\nexport function ProtocolHero({\n protocol,\n title,\n lead,\n actions,\n art,\n children,\n className,\n}: {\n protocol: ProtocolSlug;\n title: ReactNode;\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the words from md up: the artifact itself, at size. */\n art?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n const p = protocolSite(protocol);\n return (\n <PageHero\n className={className}\n eyebrow={`Protocol · ${p.verb}`}\n title={title}\n lead={lead}\n actions={actions}\n art={art}\n >\n {p.status !== 'live' || children ? (\n <div className=\"flex flex-col items-start gap-4\">\n {p.status !== 'live' ? <StatusBadge status={p.status} /> : null}\n {children}\n </div>\n ) : null}\n </PageHero>\n );\n}\n\n/** The six protocols as a row of links, the current one underlined. Scrolls sideways on a phone. */\nexport function ProtocolNav({\n current,\n link = 'page',\n className,\n}: {\n current?: ProtocolSlug;\n link?: 'page' | 'tool';\n className?: string;\n}) {\n return (\n <nav aria-label=\"Protocols\" className={className}>\n <ScrollFade fade=\"var(--background)\">\n <ul className=\"flex w-max min-w-full items-center gap-6 border-b border-border\">\n {PROTOCOLS.map((p) => {\n const on = p.slug === current;\n return (\n <li key={p.slug}>\n <a\n href={link === 'tool' ? p.toolHref : p.pageHref}\n aria-current={on ? 'page' : undefined}\n className={cn(\n '-mb-px inline-flex h-11 items-center border-b-2 text-[0.9375rem] transition-colors',\n on\n ? 'border-foreground text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n {p.label}\n </a>\n </li>\n );\n })}\n </ul>\n </ScrollFade>\n </nav>\n );\n}\n\n/**\n * The spec, as a card: its repository, version, licence, kinds and test\n * vectors, and the way to read it. `sm` is one line, for a reference in\n * running text or a docs page.\n */\nexport function SpecCard({\n protocol,\n version,\n license,\n vectors,\n size = 'md',\n className,\n}: {\n protocol: ProtocolSlug;\n version: string;\n license?: string;\n /** How many test vectors ship with it. */\n vectors?: number;\n size?: 'md' | 'sm';\n className?: string;\n}) {\n const p = protocolSite(protocol);\n const repo = `oc-${p.slug}-protocol`;\n const facts: [string, ReactNode][] = [\n ['Version', version],\n ...(license ? ([['Licence', license]] as [string, ReactNode][]) : []),\n ['Nostr kind', p.kinds],\n ...(vectors !== undefined ? ([['Test vectors', String(vectors)]] as [string, ReactNode][]) : []),\n ];\n if (size === 'sm') {\n return (\n <a\n href={p.specHref}\n className={cn(\n 'group flex flex-wrap items-center gap-x-4 gap-y-1 rounded-2xl border border-border bg-card px-4 py-3 text-[0.875rem] transition-colors hover:border-oca-hairline-strong',\n className\n )}\n >\n <span className=\"font-mono text-[0.8125rem] text-foreground\">{repo}</span>\n <span className=\"text-muted-foreground\">\n {facts.map(([k, v]) => (k === 'Version' ? `v${v}` : k === 'Nostr kind' ? `kind ${v}` : v)).join(' · ')}\n </span>\n <span className=\"ml-auto flex items-center gap-1 text-muted-foreground group-hover:text-foreground\">\n Read the spec <ArrowUpRight aria-hidden className=\"size-4\" />\n </span>\n </a>\n );\n }\n return (\n <div className={cn('flex flex-col gap-6 rounded-[1.25rem] border border-border bg-card p-6 md:p-8', className)}>\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n <p className=\"text-[0.875rem] text-muted-foreground\">The spec</p>\n <h3 className=\"oca-title break-all font-mono text-[1.0625rem] tracking-normal\">{repo}</h3>\n </div>\n {p.status !== 'live' ? <StatusBadge status={p.status} /> : null}\n </div>\n <dl className=\"grid grid-cols-2 gap-x-6 gap-y-4 sm:grid-cols-4\">\n {facts.map(([k, v]) => (\n <div key={k} className=\"flex flex-col gap-1\">\n <dt className=\"text-[0.8125rem] text-muted-foreground\">{k}</dt>\n <dd className=\"oca-tabular text-[1.0625rem]\">{v}</dd>\n </div>\n ))}\n </dl>\n <div>\n <Button asChild variant=\"secondary\" size=\"sm\">\n <a href={p.specHref}>\n Read the spec <ArrowUpRight aria-hidden />\n </a>\n </Button>\n </div>\n </div>\n );\n}\n\n/**\n * Paste an id, an envelope or a link and go to the page that checks it.\n * Without `onVerify` it is a plain GET form to `action`, so it works before\n * any script has loaded.\n */\nexport function VerifyBox({\n action,\n param = 'q',\n title,\n description,\n label = 'Id, envelope or link',\n placeholder,\n hint,\n submitLabel = 'Verify',\n multiline = false,\n onVerify,\n className,\n}: {\n /** Where the form goes: the tool's verify page. */\n action: string;\n /** The query parameter that carries what was pasted. */\n param?: string;\n title?: ReactNode;\n description?: ReactNode;\n label?: ReactNode;\n placeholder?: string;\n hint?: ReactNode;\n submitLabel?: string;\n /** A textarea, for a whole envelope. */\n multiline?: boolean;\n /** Handle it here instead of navigating. */\n onVerify?: (value: string) => void;\n className?: string;\n}) {\n const [value, setValue] = useState('');\n const submit = (e: FormEvent<HTMLFormElement>) => {\n if (!onVerify) return;\n e.preventDefault();\n if (value.trim()) onVerify(value.trim());\n };\n const button = (\n <Button type=\"submit\" className={multiline ? undefined : 'w-full sm:w-auto'}>\n {submitLabel}\n </Button>\n );\n return (\n <form\n action={action}\n method=\"get\"\n onSubmit={submit}\n className={cn('flex flex-col gap-5 rounded-[1.25rem] border border-border bg-card p-6 md:p-8', className)}\n >\n {title || description ? (\n <div className=\"flex flex-col gap-2\">\n {title ? <h3 className=\"oca-title\">{title}</h3> : null}\n {description ? <p className=\"oca-body text-[0.9375rem]\">{description}</p> : null}\n </div>\n ) : null}\n {multiline ? (\n <>\n <Field label={label} hint={hint}>\n <Textarea\n name={param}\n required\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n spellCheck={false}\n className=\"min-h-32 font-mono text-base md:text-[0.8125rem]\"\n />\n </Field>\n <div>{button}</div>\n </>\n ) : (\n <Field label={label} hint={hint} action={button}>\n <Input\n name={param}\n required\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n spellCheck={false}\n autoComplete=\"off\"\n className=\"font-mono text-base md:text-[0.875rem]\"\n />\n </Field>\n )}\n </form>\n );\n}\n\nexport interface ComparisonColumn {\n key: string;\n label: ReactNode;\n /** The one column the page argues for: tinted, read first on a phone. At most one. */\n highlight?: boolean;\n}\n\nexport interface ComparisonRow {\n label: ReactNode;\n /** One line under the property. */\n note?: ReactNode;\n /** An answer per column key, in words: \"Yes\", \"No\", \"Only with an x509 chain\". */\n values: Record<string, ReactNode>;\n}\n\nconst TINT = 'bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--card))]';\n\n/**\n * Systems side by side, a property per row, answers in words (never ✓ ✗ ~).\n * One column is tinted. On a phone each property becomes a card: the tinted\n * answer first and full width, the others two by two, each under its name.\n * Four or more columns wait for a desk to sit side by side.\n */\nexport function ComparisonTable({\n columns,\n rows,\n label,\n propertyHeading = 'Property',\n className,\n}: {\n columns: ComparisonColumn[];\n rows: ComparisonRow[];\n /** The list's name for a screen reader. */\n label: string;\n propertyHeading?: ReactNode;\n className?: string;\n}) {\n const wide = columns.length > 3;\n // Static class names per breakpoint, so Tailwind can see them.\n const grid = wide ? 'lg:grid lg:grid-cols-[var(--oca-compare)]' : 'md:grid md:grid-cols-[var(--oca-compare)]';\n const desk = wide ? 'lg' : 'md';\n const style = {\n // The argued-for column gets a little more room: its answers carry the page.\n '--oca-compare': ['minmax(0, 1.4fr)', ...columns.map((c) => (c.highlight ? 'minmax(0, 1.3fr)' : 'minmax(0, 1fr)'))].join(' '),\n } as CSSProperties;\n const ordered = [...columns].sort((a, b) => Number(Boolean(b.highlight)) - Number(Boolean(a.highlight)));\n return (\n <ul aria-label={label} style={style} className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n <li\n aria-hidden\n className={cn(\n 'hidden gap-5 px-5 py-4 text-[0.875rem] font-medium text-muted-foreground',\n wide ? 'lg:grid lg:px-8' : 'md:grid md:px-8',\n grid\n )}\n >\n <span>{propertyHeading}</span>\n {columns.map((c) => (\n <span key={c.key} className={cn(c.highlight && cn(TINT, '-my-4 px-4 py-4 text-oca-accent-ink'))}>\n {c.label}\n </span>\n ))}\n </li>\n {rows.map((r, ri) => (\n <li key={ri} className={cn('grid grid-cols-1 gap-3 px-5 py-5', wide ? 'lg:items-start lg:gap-5 lg:px-8' : 'md:items-start md:gap-5 md:px-8', grid)}>\n <div className=\"flex min-w-0 flex-col gap-1\">\n <span className=\"oca-title-sm\">{r.label}</span>\n {r.note ? <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{r.note}</span> : null}\n </div>\n <div className={cn('grid grid-cols-2 gap-1', desk === 'lg' ? 'lg:contents' : 'md:contents')}>\n {columns.map((c) => {\n // On a phone the tinted answer leads; on a desk the columns keep their order.\n return (\n <div\n key={c.key}\n style={{ '--oca-order': ordered.indexOf(c) } as CSSProperties}\n className={cn(\n // Two rows of the pair's grid (name, answer), so answers line up\n // across a pair even when one name wraps.\n 'order-[var(--oca-order)] row-span-2 grid min-w-0 grid-rows-subgrid gap-1 rounded-xl px-3 py-2.5',\n desk === 'lg'\n ? 'lg:order-none lg:row-span-1 lg:flex lg:flex-col'\n : 'md:order-none md:row-span-1 md:flex md:flex-col',\n c.highlight\n ? cn(\n TINT,\n 'col-span-2',\n desk === 'lg'\n ? 'lg:col-span-1 lg:-my-5 lg:self-stretch lg:rounded-none lg:px-4 lg:py-5'\n : 'md:col-span-1 md:-my-5 md:self-stretch md:rounded-none md:px-4 md:py-5'\n )\n : desk === 'lg'\n ? 'lg:p-0'\n : 'md:p-0'\n )}\n >\n <span\n className={cn(\n 'text-[0.8125rem]',\n c.highlight ? 'text-oca-accent-ink' : 'text-muted-foreground',\n desk === 'lg' ? 'lg:sr-only' : 'md:sr-only'\n )}\n >\n {c.label}\n </span>\n <span className={cn('text-[0.9375rem]', c.highlight && 'font-medium')}>\n {r.values[c.key] ?? '—'}\n </span>\n </div>\n );\n })}\n </div>\n </li>\n ))}\n </ul>\n );\n}\n","import { CircleCheck, CircleDashed, CircleMinus, CircleX, Clock } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Button } from '../primitives/button';\nimport { Field, Textarea } from '../primitives/form';\nimport { StatusBadge, type Statement } from '../primitives/status-badge';\nimport { CodeBlock } from './code-block';\nimport { KeyValueList, type KeyValueItem } from './data';\n\nexport type CheckState = 'ok' | 'fail' | 'pending' | 'skipped' | 'unchecked';\n\nexport interface VerifyCheck {\n label: ReactNode;\n state: CheckState;\n /** What was found, in a line: the block, the address, why it failed. */\n note?: ReactNode;\n}\n\nconst CHECK: Record<CheckState, { word: string; icon: ReactNode; tone: string }> = {\n ok: { word: 'Passed', icon: <CircleCheck />, tone: 'text-success' },\n fail: { word: 'Failed', icon: <CircleX />, tone: 'text-destructive' },\n pending: { word: 'Pending', icon: <Clock />, tone: 'text-oca-accent-ink' },\n skipped: { word: 'Skipped', icon: <CircleMinus />, tone: 'text-muted-foreground' },\n unchecked: { word: 'Not checked', icon: <CircleDashed />, tone: 'text-oca-subtle' },\n};\n\n/**\n * What a check on an artifact found: the statement (good, caution or\n * refused) with a title and one line, each check and its result in words,\n * the facts read from the artifact, and what this check did not cover. One\n * shape for a stamp, a ballot, an envelope, a delegation or a pledge.\n */\nexport function VerifyReport({\n verdict,\n title,\n summary,\n checks,\n facts,\n notChecked,\n actions,\n 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 <header className=\"flex flex-col items-start gap-3 p-6 md:p-8\">\n <StatusBadge status={verdict} />\n <Heading className=\"oca-display-3\">{title}</Heading>\n {summary ? <p className=\"oca-body max-w-[40rem]\">{summary}</p> : null}\n </header>\n <ul aria-label=\"Checks\" className=\"divide-y divide-border border-t border-border\">\n {checks.map((c, i) => {\n const k = CHECK[c.state];\n return (\n <li key={i} className=\"flex items-start gap-3 px-6 py-3.5 md:px-8\">\n <span aria-hidden className={cn('mt-0.5 shrink-0 [&_svg]:size-[1.125rem]', k.tone)}>\n {k.icon}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5 sm:flex-row sm:items-baseline sm:justify-between sm:gap-6\">\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"text-[0.9375rem]\">{c.label}</span>\n {c.note ? (\n <span className=\"break-words text-[0.8125rem] leading-snug text-muted-foreground\">{c.note}</span>\n ) : null}\n </div>\n <span\n className={cn(\n 'shrink-0 text-[0.8125rem]',\n c.state === 'fail' ? 'text-destructive' : 'text-muted-foreground'\n )}\n >\n {k.word}\n </span>\n </div>\n </li>\n );\n })}\n </ul>\n {facts && facts.length > 0 ? (\n <KeyValueList items={facts} className=\"rounded-none border-x-0 border-b-0 bg-transparent [&>div]:px-6 md:[&>div]:px-8\" />\n ) : null}\n {notChecked && notChecked.length > 0 ? (\n <div className=\"flex flex-col gap-2 border-t border-border bg-muted/50 px-6 py-5 md:px-8\">\n <p className=\"text-[0.875rem] font-medium\">What this did not check</p>\n <ul className=\"flex list-disc flex-col gap-1 pl-5 text-[0.875rem] leading-relaxed text-muted-foreground\">\n {notChecked.map((n, i) => (\n <li key={i}>{n}</li>\n ))}\n </ul>\n </div>\n ) : null}\n {actions ? <div className=\"flex flex-wrap gap-3 border-t border-border px-6 py-5 md:px-8\">{actions}</div> : null}\n </section>\n );\n}\n\n/**\n * Sign a message with a Bitcoin address: a browser wallet signs it with one\n * press where there is one (`wallets`, the buttons a site renders), and any\n * wallet can sign the message by hand and paste the signature back. The\n * frame for sign-in by wallet, /sudo, and every tool's signing step.\n */\nexport function SignMessage({\n lead,\n address,\n message,\n wallets,\n busy = false,\n error,\n submitLabel = 'Confirm',\n secondary,\n onSignature,\n className,\n}: {\n lead?: ReactNode;\n /** The address that must sign. */\n address: string;\n message: string;\n /** Buttons that sign with a browser wallet. */\n wallets?: ReactNode;\n busy?: boolean;\n /** Why the last signature was refused. */\n error?: ReactNode;\n submitLabel?: string;\n /** Beside the submit button: Back, Cancel. */\n secondary?: ReactNode;\n onSignature: (signature: string) => void;\n className?: string;\n}) {\n const [pasted, setPasted] = useState('');\n return (\n <div className={cn('flex flex-col gap-5', className)}>\n {lead ? <p className=\"text-[0.9375rem] leading-relaxed\">{lead}</p> : null}\n {wallets ? (\n <>\n <div className=\"flex flex-wrap gap-2\">{wallets}</div>\n <div className=\"flex items-center gap-3 text-[0.8125rem] text-muted-foreground\">\n <span className=\"h-px flex-1 bg-border\" />\n or sign it in any wallet\n <span className=\"h-px flex-1 bg-border\" />\n </div>\n </>\n ) : null}\n <CodeBlock code={message} caption=\"Message to sign\" />\n <form\n className=\"flex flex-col gap-4\"\n onSubmit={(e) => {\n e.preventDefault();\n if (pasted.trim()) onSignature(pasted.trim());\n }}\n >\n <Field\n label=\"Signature\"\n error={error}\n hint={\n <>\n From your wallet&rsquo;s &ldquo;sign message&rdquo; (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 { 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 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 type?: ReactNode;\n required?: boolean;\n default?: ReactNode;\n description?: 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\n/**\n * Parameters, props or fields: name and type in mono, required or default,\n * and what it does. A table from sm up; on a phone each row is a card with\n * the name and type on top.\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 marks = (r: ApiRow) => (\n <>\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 </>\n );\n return (\n <div className={cn('not-prose my-6', className)}>\n <div className=\"overflow-hidden rounded-2xl border border-border bg-card max-sm:hidden\">\n <ScrollFade fade=\"var(--card)\">\n <table className=\"w-full border-collapse text-left text-[0.875rem]\">\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead>\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 <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Description</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {rows.map((r) => (\n <tr key={r.name} className=\"align-top\">\n <th scope=\"row\" className=\"px-4 py-3 text-left font-normal\">\n <span className=\"flex flex-col items-start gap-1\">\n <code className={cn('font-mono text-[0.8125rem] text-foreground', r.deprecated && 'line-through decoration-oca-subtle')}>\n {r.name}\n </code>\n {marks(r)}\n </span>\n </th>\n <td className=\"px-4 py-3 font-mono text-[0.8125rem] text-muted-foreground\">{r.type ?? '—'}</td>\n {hasDefault ? (\n <td className=\"px-4 py-3 font-mono text-[0.8125rem] text-muted-foreground\">{r.default ?? '—'}</td>\n ) : null}\n <td className=\"px-4 py-3 leading-relaxed text-muted-foreground\">{r.description}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </ScrollFade>\n </div>\n <ul aria-label={caption} className=\"divide-y divide-border rounded-2xl border border-border bg-card sm:hidden\">\n {rows.map((r) => (\n <li key={r.name} className=\"flex flex-col gap-1.5 px-4 py-3.5\">\n <span className=\"flex flex-wrap items-baseline gap-x-2 gap-y-1\">\n <code className={cn('font-mono text-[0.875rem] text-foreground', r.deprecated && 'line-through decoration-oca-subtle')}>\n {r.name}\n </code>\n {r.type ? <code className=\"break-all font-mono text-[0.8125rem] text-muted-foreground\">{r.type}</code> : null}\n </span>\n <span className=\"flex flex-wrap items-center gap-2 empty:hidden\">{marks(r)}</span>\n {r.description ? <span className=\"text-[0.875rem] leading-relaxed text-muted-foreground\">{r.description}</span> : null}\n {r.default !== undefined ? (\n <span className=\"text-[0.8125rem] text-muted-foreground\">\n Default <code className=\"font-mono text-foreground\">{r.default}</code>\n </span>\n ) : null}\n </li>\n ))}\n </ul>\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: it keeps its type size and scrolls sideways when it is wider.\n */\nfunction naturalSize(svg: string): string {\n const w = svg.match(/viewBox=\"[\\d.-]+ [\\d.-]+ ([\\d.]+) [\\d.]+\"/)?.[1];\n if (!w) return svg;\n return svg.replace(/<svg([^>]*?)\\swidth=\"100%\"/, `<svg$1 width=\"${Math.ceil(Number(w))}\"`).replace(/max-width:\\s*[\\d.]+px;?/, '');\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 [svg, setSvg] = useState<string | null>(null);\n const [failed, setFailed] = useState(false);\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: drawn } = await mermaid.render(`oca-diagram-${raw.replace(/[^a-zA-Z0-9]/g, '')}-${dark ? 'd' : 'l'}`, chart);\n if (live) {\n setSvg(naturalSize(drawn));\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 {svg ? (\n <ScrollFade fade=\"var(--card)\">\n <div\n className=\"flex w-max min-w-full justify-center p-6 [&_svg]:h-auto [&_svg]:max-w-none\"\n role=\"img\"\n aria-label={typeof caption === 'string' ? caption : 'Diagram'}\n dangerouslySetInnerHTML={{ __html: 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 * 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 href: string;\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\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 className,\n}: {\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}) {\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) {\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]);\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 (onSelect) onSelect(r);\n else 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 return (\n <a\n key={r.id}\n id={optionId(i)}\n href={r.href}\n role=\"option\"\n aria-selected={on}\n tabIndex={-1}\n onMouseMove={() => setActive(i)}\n onClick={(e) => {\n if (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 )}\n >\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 <CornerDownLeft aria-hidden className={cn('mt-1 size-4 shrink-0 text-muted-foreground', !on && 'invisible')} />\n </a>\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 No results for &ldquo;{query.trim()}&rdquo;.\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","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 { ScrollFade } from '../primitives/scroll-fade';\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 <header className={cn('flex items-start gap-3.5', 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=\"shrink-0\">{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 */\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 tone?: 'ink' | 'brand';\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', tone === 'brand' ? 'bg-oca-orange-deep' : 'bg-foreground')}\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 <ScrollFade fade=\"var(--background)\" className={cn('w-full', className)}>\n <div role=\"group\" aria-label={label} className=\"flex w-max items-center gap-2 py-0.5\">\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 </ScrollFade>\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"]}
1
+ {"version":3,"sources":["../src/lib/cn.ts","../src/components/typography.tsx","../src/components/motion.tsx","../src/components/section.tsx","../src/components/hero.tsx","../src/primitives/badge.tsx","../src/primitives/card.tsx","../src/components/steps.tsx","../src/components/code-card.tsx","../src/code/highlight.ts","../src/primitives/scroll-fade.tsx","../src/format/index.ts","../src/lib/shared-context.ts","../src/lib/density.ts","../src/lib/shell-context.ts","../src/primitives/feedback.tsx","../src/primitives/button.tsx","../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/brand/mark.tsx","../src/components/error-page.tsx","../src/brand/iso-check.tsx","../src/primitives/accordion.tsx","../src/components/blocks.tsx","../src/components/text-link.tsx","../src/components/legal.tsx","../src/family/index.ts","../src/primitives/status-badge.tsx","../src/components/family-grids.tsx","../src/primitives/form.tsx","../src/components/protocol.tsx","../src/components/verify.tsx","../src/components/docs.tsx","../src/components/search.tsx","../src/components/tools.tsx"],"names":["createElement","jsx","useState","useEffect","cva","Card","jsxs","useRef","at","useContext","forwardRef","Separator","Button","Fragment","createContext","useCallback","Link","LINK","TONE","pad","Input","Textarea","Label","useId","isValidElement","cloneElement","SelectTrigger","ChevronDown","SelectContent","SelectItem","Check","Checkbox","Switch","RadioGroup","RadioGroupItem","protocol","ArrowUpRight","ArrowRight","SearchButton","useMemo"],"mappings":"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","file":"components.mjs","sourcesContent":["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 { 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 { 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 { 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 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","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","/*\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 { 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 { 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 * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n} from 'react';\nimport { Toaster as SonnerToaster, type ToasterProps } from 'sonner';\n\nimport { cn } from '../lib/cn';\n\nexport function Spinner({ className, label }: { className?: string; label?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n role={label ? 'status' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n className={cn('size-4 animate-spin', className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.2\" strokeWidth=\"2.5\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** A placeholder bar, visible on the canvas and on a card in both modes. */\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-ui=\"skeleton\"\n className={cn('animate-pulse rounded-lg bg-[var(--oca-skeleton)]', className)}\n {...props}\n />\n );\n}\n\n/**\n * True once `active` has stayed true for `ms`. A loading state that never\n * ends reads as a broken page; pass this to show a way out instead.\n */\nexport function useTimedOut(active: boolean, ms = 12_000): boolean {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n if (!active) {\n setTimedOut(false);\n return;\n }\n const t = setTimeout(() => setTimedOut(true), ms);\n return () => clearTimeout(t);\n }, [active, ms]);\n return timedOut;\n}\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(function Separator({ className, orientation = 'horizontal', decorative = true, ...props }, ref) {\n return (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-px w-full' : 'h-full w-px',\n className\n )}\n {...props}\n />\n );\n});\n\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-md border border-border bg-card px-1.5 font-mono text-[11px] text-muted-foreground',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Live-region status dot: a calm pulse for \"running\", solid otherwise. */\nexport function StatusDot({\n tone = 'neutral',\n pulse = false,\n className,\n}: {\n tone?: 'neutral' | 'success' | 'warning' | 'danger' | 'brand';\n pulse?: boolean;\n className?: string;\n}) {\n const color = {\n neutral: 'bg-oca-subtle',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n brand: 'bg-brand',\n }[tone];\n return (\n <span\n aria-hidden\n className={cn('inline-block size-2 shrink-0 rounded-full', color, pulse && 'oca-animate-pulse-dot', className)}\n />\n );\n}\n\n/** Toasts in the system's type and surfaces. Mount once. */\nexport function Toaster(props: ToasterProps) {\n return (\n <SonnerToaster\n position=\"bottom-right\"\n toastOptions={{\n classNames: {\n toast: 'oca-toast rounded-2xl border border-border bg-popover text-popover-foreground shadow-lg font-sans',\n title: 'text-[0.9375rem] font-medium',\n description: 'text-sm text-muted-foreground',\n actionButton: 'rounded-full bg-primary text-primary-foreground',\n cancelButton: 'rounded-full bg-muted text-foreground',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { toast } from 'sonner';\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Spinner } from './feedback';\n\n/*\n * Pills, as the deck draws them: the black filled pill leads, the white\n * outlined pill follows. `brand` is for the orange band only; `onInk` and\n * `onInkOutline` are the same pair inverted for dark bands.\n */\nexport const buttonVariants = cva(\n [\n 'inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-full font-medium',\n 'transition-[background-color,border-color,color,box-shadow,transform] duration-150',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'active:translate-y-px disabled:pointer-events-none',\n // Disabled is one look for every variant: a quiet grey pill, never a\n // faded black or orange slab that reads as broken.\n 'disabled:border disabled:border-border disabled:bg-muted disabled:text-oca-subtle disabled:shadow-none',\n '[&_svg]:pointer-events-none [&_svg]:size-[1.1em] [&_svg]:shrink-0',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/85',\n secondary:\n 'border border-border bg-secondary text-secondary-foreground hover:border-oca-hairline-strong hover:bg-accent',\n brand: 'bg-brand text-brand-foreground hover:bg-oca-orange-deep',\n ghost: 'text-foreground hover:bg-accent',\n danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'h-auto rounded-none px-0 text-foreground underline decoration-foreground/35 underline-offset-4 hover:decoration-foreground',\n onInk: 'bg-white text-oca-ink hover:bg-white/90',\n onInkOutline: 'border border-white/20 text-white hover:bg-white/10',\n },\n size: {\n sm: 'h-9 px-4 text-sm',\n md: 'h-11 px-5 text-[0.9375rem]',\n lg: 'h-14 px-7 text-[1.0625rem]',\n icon: 'size-10',\n 'icon-sm': 'size-8',\n },\n },\n compoundVariants: [{ variant: 'link', className: 'h-auto px-0' }],\n defaultVariants: { variant: 'primary', size: 'md' },\n }\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /** Render the child element (a Link, an <a>) with the button's styles. */\n asChild?: boolean;\n /** Shows a spinner and disables the button. */\n loading?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { className, variant, size, asChild = false, loading = false, disabled, children, type, ...props },\n ref\n) {\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n ref={ref}\n data-ui=\"button\"\n className={cn(buttonVariants({ variant, size }), className)}\n disabled={asChild ? undefined : disabled || loading}\n aria-busy={loading || undefined}\n type={asChild ? undefined : (type ?? 'button')}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {loading ? <Spinner className=\"size-[1.1em]\" /> : null}\n {children}\n </>\n )}\n </Comp>\n );\n});\n","import { 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 className?: string;\n}\n\nexport function StatCard({ label, value, hint, size, 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 )}\n >\n {value}\n </span>\n {hint ? (\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{hint}</span>\n ) : inGrid ? (\n <span aria-hidden />\n ) : null}\n </div>\n );\n}\n\nconst MD_COLS: Record<number, string> = {\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\nconst LG_COLS: Record<number, string> = {\n 1: 'lg:grid-cols-1',\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n 5: 'lg:grid-cols-5',\n};\nconst MD_SPAN: Record<number, string> = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n};\nconst LG_SPAN: Record<number, string> = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n};\n\n/** Columns for n tiles: as few ragged rows as possible, never more than five. */\nfunction statColumns(n: number): number {\n if (n <= 5) return Math.max(1, n);\n if (n % 4 === 0) return 4;\n if (n % 3 === 0) return 3;\n return 4;\n}\n\n/** How wide the last tile must be to fill its row of `cols`. */\nfunction lastSpan(n: number, cols: number): number {\n const rest = n % cols;\n return rest === 0 ? 1 : cols - rest + 1;\n}\n\n/** One quiet line where a group of numbers would all be zero. */\nexport function EmptyLine({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <p\n className={cn(\n 'rounded-[1.25rem] border border-dashed border-oca-hairline-strong px-5 py-4 text-[0.9375rem] text-muted-foreground',\n className\n )}\n >\n {children}\n </p>\n );\n}\n\nexport interface StatGridProps extends HTMLAttributes<HTMLDivElement> {\n /** Columns from md up. Default: the count up to 4, then 3 or 4. */\n columns?: 1 | 2 | 3 | 4 | 5;\n /** Shown instead of the tiles when the group is empty. */\n empty?: ReactNode;\n /** Force the empty line. Default: every child's `raw` is 0 or null. */\n isEmpty?: boolean;\n}\n\n/**\n * Stat tiles, two to a row on a phone. The last tile stretches to fill its row,\n * so a grid never ends in a hole, and a group of zeros becomes one line.\n */\nexport function StatGrid({ columns, empty, isEmpty, className, children, ...props }: StatGridProps) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<StatCardProps>[];\n const n = items.length;\n const allZero =\n n > 0 && items.every((el) => 'raw' in el.props && (el.props.raw === 0 || el.props.raw === null));\n 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}\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 )}\n >\n {it.value}\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\n/* ── Table ───────────────────────────────────────────────────────────── */\n\nexport interface Column<T> {\n key: string;\n header: ReactNode;\n cell: (row: T) => ReactNode;\n align?: 'start' | 'end';\n /** A number: right-aligned, tabular, never wrapped. */\n numeric?: boolean;\n /** Hide below md in the table (the phone card list still shows it). */\n wide?: boolean;\n /** A CSS width for the column, e.g. '12rem' or '30%'. */\n width?: string;\n /** The narrowest it may get before the table scrolls instead. */\n minWidth?: string;\n /** Cut long content to one line (put the full value in a title or HashChip). */\n truncate?: boolean;\n /** The phone card's title. Defaults to the first column. */\n primary?: boolean;\n /** Leave out of the phone card list. */\n hideOnPhone?: boolean;\n}\n\n/**\n * Rows of data. Wider than its box, the table scrolls with an edge that says\n * so; under 640px it becomes a list of cards that keep every column's label.\n */\nexport function DataTable<T>({\n columns,\n rows,\n rowKey,\n empty,\n caption,\n phone = 'cards',\n 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 as written, without\n * removed lines and, for a shell transcript with `$ ` prompts, only the\n * 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): string | null {\n if (!pre) return null;\n const lines = pre.querySelectorAll('[data-line]');\n if (lines.length === 0) return pre.textContent ?? '';\n return Array.from(lines)\n .filter((l) => l.getAttribute('data-diff') !== 'remove')\n .map((l) => l.textContent ?? '')\n .join('\\n');\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 copy: kept ? kept.join('\\n') : src,\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}: {\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}) {\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 w-max min-w-full py-4 font-mono text-[0.875rem] leading-[1.625] text-oca-ink-muted [font-variant-ligatures:none]',\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 /** 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 /** 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 lang,\n caption,\n copy = true,\n clearAfter,\n maxLines,\n highlight: marks,\n diff,\n lineNumbers,\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) ?? 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 >\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","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","import Link from 'next/link.js';\nimport type { ReactNode } from 'react';\n\nimport { MarkOutline } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { Button } from '../primitives/button';\nimport { Section } from './section';\n\nconst WORDS: Record<number, { name: string; title: string; detail: string }> = {\n 404: {\n name: 'Not found',\n title: 'This page isn’t here.',\n detail: 'The link may be old, or the address mistyped.',\n },\n 500: {\n name: 'Server error',\n title: 'Something broke on our side.',\n detail: 'Try again in a moment.',\n },\n};\n\n/**\n * A 404, a 500 or any other error, inside the site's own header and footer:\n * the code, one sentence, one line and a way on. A server error offers a\n * retry as well as the way home. Beside it on a wide screen, the check drawn\n * in hairlines: there, but not filled in.\n */\nexport function ErrorPage({\n code = 404,\n title,\n detail,\n actions,\n home = '/',\n art,\n className,\n}: {\n code?: number;\n title?: ReactNode;\n detail?: ReactNode;\n /** Replaces the default ways on. */\n actions?: ReactNode;\n home?: string;\n /** Beside the words from md up. Defaults to the outlined check; `null` leaves it out. */\n art?: ReactNode;\n className?: string;\n}) {\n const words = WORDS[code] ?? (code >= 500 ? WORDS[500]! : WORDS[404]!);\n const server = code >= 500;\n return (\n <Section space=\"none\" className={cn('flex min-h-[min(40rem,72dvh)] items-center py-16 md:py-24', className)}>\n <div className=\"grid grid-cols-1 items-center gap-12 md:grid-cols-12\">\n <div className=\"flex max-w-[40rem] flex-col items-start gap-6 md:col-span-7\">\n <p className=\"oca-eyebrow oca-enter\">\n <span className=\"oca-tabular\">{code}</span> · {WORDS[code]?.name ?? (server ? 'Error' : 'Not available')}\n </p>\n <h1 className=\"oca-display-2 oca-enter [--enter-delay:70ms]\">{title ?? words.title}</h1>\n <p className=\"oca-lead oca-enter [--enter-delay:150ms]\">{detail ?? words.detail}</p>\n <div className=\"oca-enter flex flex-wrap gap-3 [--enter-delay:230ms]\">\n {actions ?? (\n <>\n {server ? <Button onClick={() => window.location.reload()}>Try again</Button> : null}\n <Button asChild variant={server ? 'secondary' : 'primary'}>\n <Link href={home}>Go home</Link>\n </Button>\n </>\n )}\n </div>\n </div>\n {art !== null ? (\n <div aria-hidden className=\"oca-enter hidden justify-center md:col-span-5 md:flex [--enter-delay:120ms]\">\n {art ?? <MarkOutline className=\"w-full max-w-[20rem] text-oca-hairline-strong\" />}\n </div>\n ) : null}\n </div>\n </Section>\n );\n}\n","import { 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 { 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 type { ReactNode } from 'react';\n\nimport { IsoCheck } from '../brand/iso-check';\nimport { cn } from '../lib/cn';\nimport { Accordion, AccordionItem } from '../primitives/accordion';\nimport { Reveal } from './motion';\nimport { Section, SectionIntro } from './section';\nimport { Display, Eyebrow } from './typography';\n\n/**\n * A section's title on a public page: eyebrow, headline, one line. It rises\n * into place the first time it is seen (`reveal={false}` keeps it still).\n */\nexport function SectionHeading({\n eyebrow,\n title,\n lead,\n id,\n onInk = false,\n level = 2,\n as = 'h2',\n align = 'start',\n reveal = true,\n className,\n}: {\n eyebrow?: ReactNode;\n title: ReactNode;\n lead?: ReactNode;\n /** The heading's id, for a link to the section. */\n id?: string;\n /** On an ink band: the eyebrow and lead take the ink tones. */\n onInk?: boolean;\n /** Visual size. 3 for a block inside a section. */\n level?: 2 | 3;\n as?: 'h2' | 'h3';\n align?: 'start' | 'center';\n reveal?: boolean;\n className?: string;\n}) {\n return (\n <SectionIntro align={align} reveal={reveal} className={cn('max-w-3xl gap-4 md:gap-4', className)}>\n {eyebrow ? <Eyebrow onInk={onInk}>{eyebrow}</Eyebrow> : null}\n <Display level={level} as={as} id={id} className=\"scroll-mt-24\">\n {title}\n </Display>\n {lead ? <p className={cn('oca-lead', onInk && 'text-oca-ink-muted')}>{lead}</p> : null}\n </SectionIntro>\n );\n}\n\n/**\n * One titled block of facts, for pages where a reader checks a claim: a\n * heading, one or two sentences, a link or two beside the title saying where\n * the full number lives, then the facts.\n */\nexport function FactBlock({\n id,\n title,\n description,\n aside,\n children,\n className,\n}: {\n id?: string;\n title: ReactNode;\n description?: ReactNode;\n /** Links beside the title: the source, the raw data. */\n aside?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n return (\n <section id={id} className={cn('flex scroll-mt-24 flex-col gap-6', className)}>\n <div className=\"flex flex-col gap-3 md:flex-row md:items-end md:justify-between md:gap-8\">\n <div className=\"flex max-w-[44rem] flex-col gap-3\">\n <h2 className=\"oca-display-3\">{title}</h2>\n {description ? <div className=\"oca-body text-[1.0625rem]\">{description}</div> : null}\n </div>\n {aside ? <div className=\"flex shrink-0 flex-wrap gap-x-5 gap-y-2 text-[0.9375rem]\">{aside}</div> : null}\n </div>\n {children}\n </section>\n );\n}\n\nexport interface FactRow {\n key: string;\n title: ReactNode;\n /** A figure beside the title: a limit, a count. */\n figure?: ReactNode;\n fields: { label: ReactNode; value: ReactNode }[];\n}\n\n/**\n * A table that stays readable on a phone: one row per subject, each value\n * under its own label. Wide pages lay the values side by side.\n */\nexport function FactRows({\n rows,\n columns = 1,\n label,\n className,\n}: {\n rows: FactRow[];\n /** Two columns of fields from md up. */\n columns?: 1 | 2;\n /** The list's name for a screen reader. */\n label: string;\n className?: string;\n}) {\n return (\n <ul aria-label={label} className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {rows.map((r) => (\n <li key={r.key} className=\"flex flex-col gap-5 px-5 py-6 md:px-8 md:py-7\">\n {/* The figure keeps its own line end; a long title wraps beside it. */}\n <div className=\"flex items-baseline justify-between gap-x-6\">\n <h3 className=\"oca-title min-w-0 text-pretty\">{r.title}</h3>\n {r.figure ? (\n <span className=\"oca-tabular shrink-0 whitespace-nowrap text-[1.75rem] leading-none tracking-[-0.02em]\">\n {r.figure}\n </span>\n ) : null}\n </div>\n <dl className={columns === 2 ? 'grid grid-cols-1 gap-x-10 gap-y-4 md:grid-cols-2' : 'flex flex-col gap-4'}>\n {r.fields.map((f, i) => (\n <div key={i} className=\"flex min-w-0 flex-col gap-1\">\n <dt className=\"text-[0.875rem] font-medium text-muted-foreground\">{f.label}</dt>\n <dd className=\"break-words text-[1rem] leading-relaxed\">{f.value}</dd>\n </div>\n ))}\n </dl>\n </li>\n ))}\n </ul>\n );\n}\n\nexport interface Endpoint {\n href: string;\n /** What it returns, in a line. */\n description: ReactNode;\n /** Shown instead of the address (a path for a long URL). */\n label?: string;\n}\n\n/** Public endpoints and what each returns: the same numbers, for your own tooling. Each opens raw, in a new tab. */\nexport function EndpointList({ items, label, className }: { items: Endpoint[]; label?: string; className?: string }) {\n return (\n <ul aria-label={label} className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n {items.map((a) => (\n <li key={a.href}>\n <a\n href={a.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"flex flex-col gap-1 px-5 py-3.5 transition-colors hover:bg-accent/60 sm:flex-row sm:items-baseline sm:justify-between sm:gap-6\"\n >\n <code className=\"break-all text-[0.875rem] text-foreground\">{a.label ?? a.href}</code>\n <span className=\"text-[0.875rem] text-muted-foreground sm:text-right\">\n {a.description}\n <span className=\"sr-only\"> (opens in a new tab)</span>\n </span>\n </a>\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * A row of short claims between two hairlines, under a hero: an icon in the\n * accent and a few words each. Two to a row on a phone, four on a desk.\n */\nexport function ProofStrip({ items, className }: { items: { icon?: ReactNode; label: ReactNode }[]; className?: string }) {\n return (\n <div className={cn('border-y border-border', className)}>\n <ul className=\"oca-container grid grid-cols-2 gap-x-6 gap-y-4 py-6 md:grid-cols-4\">\n {items.map((it, i) => (\n <li\n key={i}\n className=\"flex items-center gap-3 text-[0.9375rem] [&_svg]:size-[1.1rem] [&_svg]:shrink-0 [&_svg]:text-oca-accent-ink\"\n >\n {it.icon ? <span aria-hidden className=\"flex\">{it.icon}</span> : null}\n {it.label}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n/** The last band of a page: one large line, the actions, and the check settling beside them. */\nexport function Closing({\n title,\n lead,\n actions,\n art,\n className,\n}: {\n title: ReactNode;\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the words from md up. Defaults to the check; `null` leaves it out. */\n art?: ReactNode;\n className?: string;\n}) {\n return (\n <Section className={cn('overflow-hidden', className)}>\n <div className=\"grid grid-cols-1 items-center gap-12 md:grid-cols-12\">\n <Reveal className=\"flex flex-col items-start gap-8 md:col-span-7\">\n <div className=\"flex flex-col gap-5\">\n <h2 className=\"oca-display-1 text-[clamp(2.5rem,1.5rem+4vw,5rem)] leading-[1]\">{title}</h2>\n {lead ? <p className=\"oca-lead max-w-[34rem]\">{lead}</p> : null}\n </div>\n {actions ? <div className=\"flex flex-wrap gap-3\">{actions}</div> : null}\n </Reveal>\n {art !== null ? (\n // Room under the check on a phone, so its glow fades before the band ends.\n <div aria-hidden className=\"flex justify-center max-md:pb-16 md:col-span-5\">\n {art ?? <IsoCheck size={340} settle tilt className=\"max-w-full\" />}\n </div>\n ) : null}\n </div>\n </Section>\n );\n}\n\n/** Questions and their answers, one open at a time. One sentence an answer, where it can be. */\nexport function Faq({\n items,\n className,\n}: {\n items: { q: ReactNode; a: ReactNode; id?: string }[];\n className?: string;\n}) {\n return (\n <Accordion single className={className}>\n {items.map((it, i) => (\n <AccordionItem key={it.id ?? i} id={it.id} title={it.q}>\n {it.a}\n </AccordionItem>\n ))}\n </Accordion>\n );\n}\n","import Link from 'next/link.js';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\n\nconst LINK = 'text-foreground underline decoration-foreground/35 underline-offset-4 transition-colors hover:decoration-foreground';\n\n/**\n * A link in running text. A page of this site goes through the router; an\n * API or a /.well-known file is a plain anchor (the router would try to\n * render it); another site opens in a new tab, and says so to a screen reader.\n */\nexport function TextLink({\n href,\n children,\n external,\n className,\n}: {\n href: string;\n children: ReactNode;\n /** Force a new tab (true) or keep it in this one (false). Default: by the address. */\n external?: boolean;\n className?: string;\n}) {\n const internal = href.startsWith('/') && !href.startsWith('/api/') && !href.startsWith('/.well-known/');\n const offsite = external ?? /^https?:\\/\\//.test(href);\n if (internal && !offsite) {\n return (\n <Link href={href} className={cn(LINK, className)}>\n {children}\n </Link>\n );\n }\n return (\n <a href={href} className={cn(LINK, className)} {...(offsite ? { target: '_blank', rel: 'noreferrer' } : {})}>\n {children}\n {offsite ? <span className=\"sr-only\"> (opens in a new tab)</span> : null}\n </a>\n );\n}\n","import { Fragment, type ReactNode } from 'react';\n\nimport { DocHeader, DocLayout } from './hero';\nimport { Notice } from './data';\nimport { TextLink } from './text-link';\nimport { Prose } from './typography';\n\n/*\n * A document from @orangecheck/legal, the one source every site renders, set\n * in this system's Prose: sentence-case headings, its contents beside it on a\n * desk. The shapes below are @orangecheck/legal's, written out so a LegalDoc\n * passes straight in without this package depending on that one.\n */\n\nexport type LegalBlock =\n | { kind: 'para'; text: string }\n | { kind: 'subhead'; text: string }\n | { kind: 'bullets'; items: (string | { k: string; v: string })[] }\n | { kind: 'callout'; text: string; emphatic?: boolean }\n | { kind: 'stub'; text: string };\n\nexport interface LegalSource {\n eyebrow: string;\n title: string;\n description: string;\n effective: string;\n updated: string;\n preamble?: LegalBlock[];\n sections: { id: string; num?: string; heading: string; hint?: string; blocks: LegalBlock[] }[];\n summary?: string;\n}\n\n/** Words the legal source writes in lowercase that keep their own case in a heading. */\nconst PROPER: Record<string, string> = {\n kyc: 'KYC',\n pii: 'PII',\n ccpa: 'CCPA',\n cpra: 'CPRA',\n gdpr: 'GDPR',\n uk: 'UK',\n eu: 'EU',\n california: 'California',\n europe: 'Europe',\n united: 'United',\n kingdom: 'Kingdom',\n};\n\n/** The source writes headings in lowercase; a heading opens with a capital, the brand as OrangeCheck only there. */\nfunction headingCase(text: string): string {\n const words = text.replace(/\\b[a-z]+\\b/g, (w) => PROPER[w] ?? w);\n if (/^orangecheck\\b/.test(words)) return `OrangeCheck${words.slice('orangecheck'.length)}`;\n return words.length === 0 ? words : words[0]!.toUpperCase() + words.slice(1);\n}\n\nfunction sentencesCase(text: string): string {\n return text\n .split(/(?<=[.!?])\\s+/)\n .map((s) => headingCase(s))\n .join(' ');\n}\n\n/** A sentence after a bold lead-in opens with a capital, unless it opens with a name written lowercase on purpose. */\nfunction openSentence(text: string): string {\n const first = /^\\S+/.exec(text)?.[0] ?? '';\n if (!/^[a-z][a-z'’-]*,?$/.test(first)) return text;\n return text[0]!.toUpperCase() + text.slice(1);\n}\n\nconst INLINE = /(\\*\\*[^*]+\\*\\*|`[^`]+`|\\[[^\\]]+\\]\\([^)]+\\))/g;\nconst LINK = /^\\[([^\\]]+)\\]\\(([^)]+)\\)$/;\n\n/** The source's inline markup: **strong**, `code` and [label](href), split as its own renderer splits it. */\nfunction Inline({ text }: { text: string }): ReactNode {\n return (\n <>\n {text.split(INLINE).map((part, i) => {\n if (!part) return null;\n if (part.startsWith('**') && part.endsWith('**') && part.length > 4) {\n return (\n <strong key={i}>\n <Inline text={part.slice(2, -2)} />\n </strong>\n );\n }\n if (part.startsWith('`') && part.endsWith('`') && part.length > 2) return <code key={i}>{part.slice(1, -1)}</code>;\n const link = LINK.exec(part);\n if (link) {\n return (\n <TextLink key={i} href={link[2] ?? ''}>\n {link[1]}\n </TextLink>\n );\n }\n return <Fragment key={i}>{part}</Fragment>;\n })}\n </>\n );\n}\n\nfunction BlockView({ block }: { block: LegalBlock }): ReactNode {\n switch (block.kind) {\n case 'para':\n // A block can hold several paragraphs, separated by a blank line.\n return (\n <>\n {block.text.split(/\\n{2,}/).map((para, i) => (\n <p key={i}>\n <Inline text={para} />\n </p>\n ))}\n </>\n );\n case 'subhead':\n return (\n <h3>\n <Inline text={headingCase(block.text)} />\n </h3>\n );\n case 'bullets':\n return (\n <ul>\n {block.items.map((item, i) =>\n typeof item === 'string' ? (\n <li key={i}>\n <Inline text={item} />\n </li>\n ) : (\n <li key={i}>\n <strong>{headingCase(item.k)}.</strong> <Inline text={openSentence(item.v)} />\n </li>\n )\n )}\n </ul>\n );\n case 'callout':\n return (\n <div className=\"not-prose my-6\">\n <Notice tone={block.emphatic ? 'brand' : 'neutral'}>\n <Inline text={block.text} />\n </Notice>\n </div>\n );\n case 'stub':\n return (\n <div className=\"not-prose my-6\">\n <Notice tone=\"brand\" title=\"Pending counsel review\">\n <Inline text={block.text} />\n </Notice>\n </div>\n );\n }\n}\n\n/** A legal document as a page: its header, its contents, its sections, and the one-line summary. */\nexport function LegalDocument({ doc, className }: { doc: LegalSource; className?: string }) {\n return (\n <DocLayout\n className={className}\n header={\n <DocHeader\n eyebrow={headingCase(doc.eyebrow)}\n title={doc.title}\n lead={doc.description}\n meta={`Effective ${doc.effective} · last updated ${doc.updated}`}\n />\n }\n toc={doc.sections.map((s) => ({ id: s.id, label: headingCase(s.heading) }))}\n >\n <article className=\"min-w-0\">\n <Prose>\n {doc.preamble?.map((b, i) => <BlockView key={i} block={b} />)}\n {doc.sections.map((s) => (\n <section key={s.id}>\n <h2 id={s.id} className=\"scroll-mt-24\">\n {s.num ? <span className=\"oca-tabular text-muted-foreground\">{s.num} </span> : null}\n {headingCase(s.heading)}\n </h2>\n {s.hint ? <p className=\"text-[0.9375rem]\">{headingCase(s.hint)}</p> : null}\n {s.blocks.map((b, i) => (\n <BlockView key={i} block={b} />\n ))}\n </section>\n ))}\n {doc.summary ? (\n <p className=\"mt-14 border-t border-border pt-6 text-[0.9375rem]\">\n <strong>In short.</strong> {sentencesCase(doc.summary.replace(/^summary:\\s*/i, ''))}\n </p>\n ) : null}\n </Prose>\n </article>\n </DocLayout>\n );\n}\n","/*\n * The orangecheck family as data: every public site, its one line, its group\n * and its status. The family menu, the footer, the protocol grid and the app\n * grid all read it, so a site is added, renamed or retired here and nowhere\n * else. No React: OG renderers and server code import it too.\n *\n * Status is written here until the claims source exists; then it is read\n * from there. \"live\" shows no badge.\n */\nimport type { FooterColumn, NavItem } from '../lib/nav';\n\n/** The six protocols, in the family's fixed order. */\nexport type ProtocolSlug = 'attest' | 'lock' | 'vote' | 'stamp' | 'agent' | 'pledge';\n\n/** The same slugs as the classic system's, so a site's `current` carries over. */\nexport type FamilySlug =\n | 'home'\n | 'me'\n | 'docs'\n | ProtocolSlug\n | 'vault'\n | 'chat'\n | 'cosign'\n | 'me-demo'\n | 'globe'\n | 'btc';\n\nexport type FamilyGroup = 'orangecheck' | 'protocol' | 'app' | 'public-good';\n\n/** Where a site or feature stands, in the family's words. */\nexport type SiteStatus = 'live' | 'testing' | 'not-yet' | 'paused';\n\nexport interface FamilySite {\n slug: FamilySlug;\n /** The site's word, lowercase, as menus and lockups show it. */\n label: string;\n /** Where the family menu and footer send people. A protocol's is its page on ochk.io. */\n href: string;\n group: FamilyGroup;\n /** What it is, in one sentence. */\n line: string;\n status: SiteStatus;\n /** For an app: the protocols it shows. */\n protocols?: ProtocolSlug[];\n}\n\nexport interface ProtocolSite extends FamilySite {\n slug: ProtocolSlug;\n group: 'protocol';\n /** What it carries: identity, confidentiality, legitimacy, provenance, authority, commitment. */\n verb: string;\n /** The protocol's page on ochk.io. */\n pageHref: string;\n /** The tools, on the protocol's own host. */\n toolHref: string;\n /** The normative spec. */\n specHref: string;\n /** The Nostr event kinds it publishes. */\n kinds: string;\n}\n\nexport const OCHK_IO = 'https://ochk.io';\n/** The docs live under ochk.io; docs.ochk.io 308s here. */\nexport const DOCS_HREF = `${OCHK_IO}/docs`;\n\nfunction protocol(\n slug: ProtocolSlug,\n verb: string,\n line: string,\n kinds: string\n): ProtocolSite {\n return {\n slug,\n label: slug,\n href: `${OCHK_IO}/${slug}`,\n group: 'protocol',\n line,\n status: 'live',\n verb,\n pageHref: `${OCHK_IO}/${slug}`,\n toolHref: `https://${slug}.ochk.io`,\n specHref: `https://github.com/orangecheck/oc-${slug}-protocol`,\n kinds,\n };\n}\n\n/** Attest · Lock · Vote · Stamp · Agent · Pledge, everywhere. */\nexport const PROTOCOLS: readonly ProtocolSite[] = [\n protocol('attest', 'identity', 'Show that an address holds bitcoin, and for how long.', '30078'),\n protocol('lock', 'confidentiality', 'Encrypt to a Bitcoin address, so only its holder can open it.', '30078'),\n protocol('vote', 'legitimacy', 'Polls weighed in sats, that anyone can tally.', '30080–30082'),\n protocol('stamp', 'provenance', 'Prove who signed something, and when.', '30083'),\n protocol('agent', 'authority', 'Give software scoped, revocable permission to act for you.', '30083–30086'),\n protocol('pledge', 'commitment', 'Make a promise with bitcoin behind it, on a public record.', '30078'),\n];\n\nexport const PROTOCOL_ORDER: readonly ProtocolSlug[] = PROTOCOLS.map((p) => p.slug);\n\nexport const FAMILY: readonly FamilySite[] = [\n {\n slug: 'home',\n label: 'ochk.io',\n href: OCHK_IO,\n group: 'orangecheck',\n line: 'The open protocols, and the company behind them.',\n status: 'live',\n },\n {\n slug: 'me',\n label: 'ochk.app',\n href: 'https://ochk.app',\n group: 'orangecheck',\n line: 'One account, with Bitcoin behind it.',\n status: 'testing',\n },\n {\n slug: 'docs',\n label: 'docs',\n href: DOCS_HREF,\n group: 'orangecheck',\n line: 'Specs, SDKs and guides for every protocol.',\n status: 'live',\n },\n ...PROTOCOLS,\n {\n slug: 'vault',\n label: 'vault',\n href: 'https://vault.ochk.io',\n group: 'app',\n line: 'A password manager, encrypted in your browser.',\n status: 'live',\n protocols: ['lock'],\n },\n {\n slug: 'chat',\n label: 'chat',\n href: 'https://chat.ochk.io',\n group: 'app',\n line: 'Messages only the holder of a Bitcoin address can read.',\n status: 'testing',\n protocols: ['lock'],\n },\n {\n slug: 'cosign',\n label: 'cosign',\n href: 'https://cosign.ochk.io',\n group: 'app',\n line: 'Builders find co-founders and backers.',\n status: 'testing',\n // 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 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 { ArrowRight, ArrowUpRight } from 'lucide-react';\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 { 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 return (\n <ul className={cn('grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 md:gap-5', className)}>\n {protocols.map((slug) => {\n const p = protocolSite(slug);\n const i = PROTOCOL_ORDER.indexOf(slug);\n return (\n <li key={slug}>\n <div className={cn(CARD, 'gap-4')}>\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"oca-numeral\">\n {pad(i)} <span className=\"ml-1.5 capitalize\">{p.verb}</span>\n </span>\n {p.status !== 'live' ? <StatusBadge status={p.status} /> : null}\n </div>\n <h3 className=\"oca-display-3\">\n <a\n href={link === 'tool' ? p.toolHref : link === 'docs' ? `${DOCS_HREF}/${p.slug}` : p.pageHref}\n className={STRETCH}\n >\n {p.label}\n </a>\n </h3>\n <p className=\"oca-body\">{p.line}</p>\n <div className=\"mt-auto flex items-center justify-between gap-3 pt-2 text-[0.875rem] text-muted-foreground\">\n <span className=\"oca-tabular\">Nostr kind {p.kinds}</span>\n {/* 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 * 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\nexport interface FieldProps {\n label: ReactNode;\n /** Help under the control. It sits below, so paired fields stay level. */\n hint?: ReactNode;\n /** Mark the field optional beside its label, rather than in a hint. */\n optional?: boolean;\n /** Shown in place of nothing; marks the control invalid. */\n error?: ReactNode;\n /** The control. Receives id, aria-describedby and aria-invalid. */\n children: ReactElement;\n className?: string;\n /** Render the label visually hidden (it is still the accessible name). */\n hideLabel?: boolean;\n /** A button that acts on the control, set beside it (below it on a phone). */\n action?: ReactNode;\n}\n\n/** Label, hint, control and error, wired together by id. */\nexport function Field({ label, hint, optional, error, children, className, hideLabel, action }: FieldProps) {\n const id = useId();\n const hintId = hint ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const describedBy = [hintId, errorId].filter(Boolean).join(' ') || undefined;\n const control = isValidElement(children)\n ? cloneElement(children as ReactElement<Record<string, unknown>>, {\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': error ? true : undefined,\n })\n : children;\n const hintNode = hint ? (\n <p id={hintId} className=\"text-[0.8125rem] leading-snug text-muted-foreground\">\n {hint}\n </p>\n ) : null;\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <Label htmlFor={id} className={hideLabel ? 'sr-only' : 'flex items-baseline gap-2'}>\n {label}\n {optional ? <span className=\"text-[0.8125rem] font-normal text-muted-foreground\">Optional</span> : null}\n </Label>\n {action ? (\n // The hint belongs to the input, so it sits under the input, not under the button.\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-2 [&>input]:w-full\">\n {control}\n {hintNode}\n </div>\n <div className=\"shrink-0\">{action}</div>\n </div>\n ) : (\n <>\n {control}\n {hintNode}\n </>\n )}\n {error ? (\n <p id={errorId} role=\"alert\" className=\"text-[0.8125rem] leading-snug text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n );\n}\n\n/* ── Select ───────────────────────────────────────────────────────────── */\n\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 { ArrowUpRight } from 'lucide-react';\nimport { useState, type CSSProperties, type FormEvent, type ReactNode } from 'react';\n\nimport { PROTOCOLS, protocolSite, type ProtocolSlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { Button } from '../primitives/button';\nimport { Field, Input, Textarea } from '../primitives/form';\nimport { ScrollFade } from '../primitives/scroll-fade';\nimport { StatusBadge } from '../primitives/status-badge';\nimport { PageHero } from './hero';\n\n/*\n * The parts of a protocol's page on ochk.io. Each takes the protocol's slug\n * and reads its word, verb, links and kinds from the registry, so the six\n * pages are the same page with different data and cannot drift.\n */\n\n/** The top of a protocol page: \"Protocol · provenance\", the title, one line, the ways in. */\nexport function ProtocolHero({\n protocol,\n title,\n lead,\n actions,\n art,\n children,\n className,\n}: {\n protocol: ProtocolSlug;\n title: ReactNode;\n lead?: ReactNode;\n actions?: ReactNode;\n /** Beside the words from md up: the artifact itself, at size. */\n art?: ReactNode;\n children?: ReactNode;\n className?: string;\n}) {\n const p = protocolSite(protocol);\n return (\n <PageHero\n className={className}\n eyebrow={`Protocol · ${p.verb}`}\n title={title}\n lead={lead}\n actions={actions}\n art={art}\n >\n {p.status !== 'live' || children ? (\n <div className=\"flex flex-col items-start gap-4\">\n {p.status !== 'live' ? <StatusBadge status={p.status} /> : null}\n {children}\n </div>\n ) : null}\n </PageHero>\n );\n}\n\n/** The six protocols as a row of links, the current one underlined. Scrolls sideways on a phone. */\nexport function ProtocolNav({\n current,\n link = 'page',\n className,\n}: {\n current?: ProtocolSlug;\n link?: 'page' | 'tool';\n className?: string;\n}) {\n return (\n <nav aria-label=\"Protocols\" className={className}>\n <ScrollFade fade=\"var(--background)\">\n <ul className=\"flex w-max min-w-full items-center gap-6 border-b border-border\">\n {PROTOCOLS.map((p) => {\n const on = p.slug === current;\n return (\n <li key={p.slug}>\n <a\n href={link === 'tool' ? p.toolHref : p.pageHref}\n aria-current={on ? 'page' : undefined}\n className={cn(\n '-mb-px inline-flex h-11 items-center border-b-2 text-[0.9375rem] transition-colors',\n on\n ? 'border-foreground text-foreground'\n : 'border-transparent text-muted-foreground hover:text-foreground'\n )}\n >\n {p.label}\n </a>\n </li>\n );\n })}\n </ul>\n </ScrollFade>\n </nav>\n );\n}\n\n/**\n * The spec, as a card: its repository, version, licence, kinds and test\n * vectors, and the way to read it. `sm` is one line, for a reference in\n * running text or a docs page.\n */\nexport function SpecCard({\n protocol,\n version,\n license,\n vectors,\n size = 'md',\n className,\n}: {\n protocol: ProtocolSlug;\n version: string;\n license?: string;\n /** How many test vectors ship with it. */\n vectors?: number;\n size?: 'md' | 'sm';\n className?: string;\n}) {\n const p = protocolSite(protocol);\n const repo = `oc-${p.slug}-protocol`;\n const facts: [string, ReactNode][] = [\n ['Version', version],\n ...(license ? ([['Licence', license]] as [string, ReactNode][]) : []),\n ['Nostr kind', p.kinds],\n ...(vectors !== undefined ? ([['Test vectors', String(vectors)]] as [string, ReactNode][]) : []),\n ];\n if (size === 'sm') {\n return (\n <a\n href={p.specHref}\n className={cn(\n 'group flex flex-wrap items-center gap-x-4 gap-y-1 rounded-2xl border border-border bg-card px-4 py-3 text-[0.875rem] transition-colors hover:border-oca-hairline-strong',\n className\n )}\n >\n <span className=\"font-mono text-[0.8125rem] text-foreground\">{repo}</span>\n <span className=\"text-muted-foreground\">\n {facts.map(([k, v]) => (k === 'Version' ? `v${v}` : k === 'Nostr kind' ? `kind ${v}` : v)).join(' · ')}\n </span>\n <span className=\"ml-auto flex items-center gap-1 text-muted-foreground group-hover:text-foreground\">\n Read the spec <ArrowUpRight aria-hidden className=\"size-4\" />\n </span>\n </a>\n );\n }\n return (\n <div className={cn('flex flex-col gap-6 rounded-[1.25rem] border border-border bg-card p-6 md:p-8', className)}>\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n <p className=\"text-[0.875rem] text-muted-foreground\">The spec</p>\n <h3 className=\"oca-title break-all font-mono text-[1.0625rem] tracking-normal\">{repo}</h3>\n </div>\n {p.status !== 'live' ? <StatusBadge status={p.status} /> : null}\n </div>\n <dl className=\"grid grid-cols-2 gap-x-6 gap-y-4 sm:grid-cols-4\">\n {facts.map(([k, v]) => (\n <div key={k} className=\"flex flex-col gap-1\">\n <dt className=\"text-[0.8125rem] text-muted-foreground\">{k}</dt>\n <dd className=\"oca-tabular text-[1.0625rem]\">{v}</dd>\n </div>\n ))}\n </dl>\n <div>\n <Button asChild variant=\"secondary\" size=\"sm\">\n <a href={p.specHref}>\n Read the spec <ArrowUpRight aria-hidden />\n </a>\n </Button>\n </div>\n </div>\n );\n}\n\n/**\n * Paste an id, an envelope or a link and go to the page that checks it.\n * Without `onVerify` it is a plain GET form to `action`, so it works before\n * any script has loaded.\n */\nexport function VerifyBox({\n action,\n param = 'q',\n title,\n description,\n label = 'Id, envelope or link',\n placeholder,\n hint,\n submitLabel = 'Verify',\n multiline = false,\n onVerify,\n className,\n}: {\n /** Where the form goes: the tool's verify page. */\n action: string;\n /** The query parameter that carries what was pasted. */\n param?: string;\n title?: ReactNode;\n description?: ReactNode;\n label?: ReactNode;\n placeholder?: string;\n hint?: ReactNode;\n submitLabel?: string;\n /** A textarea, for a whole envelope. */\n multiline?: boolean;\n /** Handle it here instead of navigating. */\n onVerify?: (value: string) => void;\n className?: string;\n}) {\n const [value, setValue] = useState('');\n const submit = (e: FormEvent<HTMLFormElement>) => {\n if (!onVerify) return;\n e.preventDefault();\n if (value.trim()) onVerify(value.trim());\n };\n const button = (\n <Button type=\"submit\" className={multiline ? undefined : 'w-full sm:w-auto'}>\n {submitLabel}\n </Button>\n );\n return (\n <form\n action={action}\n method=\"get\"\n onSubmit={submit}\n className={cn('flex flex-col gap-5 rounded-[1.25rem] border border-border bg-card p-6 md:p-8', className)}\n >\n {title || description ? (\n <div className=\"flex flex-col gap-2\">\n {title ? <h3 className=\"oca-title\">{title}</h3> : null}\n {description ? <p className=\"oca-body text-[0.9375rem]\">{description}</p> : null}\n </div>\n ) : null}\n {multiline ? (\n <>\n <Field label={label} hint={hint}>\n <Textarea\n name={param}\n required\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n spellCheck={false}\n className=\"min-h-32 font-mono text-base md:text-[0.8125rem]\"\n />\n </Field>\n <div>{button}</div>\n </>\n ) : (\n <Field label={label} hint={hint} action={button}>\n <Input\n name={param}\n required\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n spellCheck={false}\n autoComplete=\"off\"\n className=\"font-mono text-base md:text-[0.875rem]\"\n />\n </Field>\n )}\n </form>\n );\n}\n\nexport interface ComparisonColumn {\n key: string;\n label: ReactNode;\n /** The one column the page argues for: tinted, read first on a phone. At most one. */\n highlight?: boolean;\n}\n\nexport interface ComparisonRow {\n label: ReactNode;\n /** One line under the property. */\n note?: ReactNode;\n /** An answer per column key, in words: \"Yes\", \"No\", \"Only with an x509 chain\". */\n values: Record<string, ReactNode>;\n}\n\nconst TINT = 'bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--card))]';\n\n/**\n * Systems side by side, a property per row, answers in words (never ✓ ✗ ~).\n * One column is tinted. On a phone each property becomes a card: the tinted\n * answer first and full width, the others two by two, each under its name.\n * Four or more columns wait for a desk to sit side by side.\n */\nexport function ComparisonTable({\n columns,\n rows,\n label,\n propertyHeading = 'Property',\n className,\n}: {\n columns: ComparisonColumn[];\n rows: ComparisonRow[];\n /** The list's name for a screen reader. */\n label: string;\n propertyHeading?: ReactNode;\n className?: string;\n}) {\n const wide = columns.length > 3;\n // Static class names per breakpoint, so Tailwind can see them.\n const grid = wide ? 'lg:grid lg:grid-cols-[var(--oca-compare)]' : 'md:grid md:grid-cols-[var(--oca-compare)]';\n const desk = wide ? 'lg' : 'md';\n const style = {\n // The argued-for column gets a little more room: its answers carry the page.\n '--oca-compare': ['minmax(0, 1.4fr)', ...columns.map((c) => (c.highlight ? 'minmax(0, 1.3fr)' : 'minmax(0, 1fr)'))].join(' '),\n } as CSSProperties;\n const ordered = [...columns].sort((a, b) => Number(Boolean(b.highlight)) - Number(Boolean(a.highlight)));\n return (\n <ul aria-label={label} style={style} className={cn('divide-y divide-border rounded-[1.25rem] border border-border bg-card', className)}>\n <li\n aria-hidden\n className={cn(\n 'hidden gap-5 px-5 py-4 text-[0.875rem] font-medium text-muted-foreground',\n wide ? 'lg:grid lg:px-8' : 'md:grid md:px-8',\n grid\n )}\n >\n <span>{propertyHeading}</span>\n {columns.map((c) => (\n <span key={c.key} className={cn(c.highlight && cn(TINT, '-my-4 px-4 py-4 text-oca-accent-ink'))}>\n {c.label}\n </span>\n ))}\n </li>\n {rows.map((r, ri) => (\n <li key={ri} className={cn('grid grid-cols-1 gap-3 px-5 py-5', wide ? 'lg:items-start lg:gap-5 lg:px-8' : 'md:items-start md:gap-5 md:px-8', grid)}>\n <div className=\"flex min-w-0 flex-col gap-1\">\n <span className=\"oca-title-sm\">{r.label}</span>\n {r.note ? <span className=\"text-[0.875rem] leading-snug text-muted-foreground\">{r.note}</span> : null}\n </div>\n <div className={cn('grid grid-cols-2 gap-1', desk === 'lg' ? 'lg:contents' : 'md:contents')}>\n {columns.map((c) => {\n // On a phone the tinted answer leads; on a desk the columns keep their order.\n return (\n <div\n key={c.key}\n style={{ '--oca-order': ordered.indexOf(c) } as CSSProperties}\n className={cn(\n // Two rows of the pair's grid (name, answer), so answers line up\n // across a pair even when one name wraps.\n 'order-[var(--oca-order)] row-span-2 grid min-w-0 grid-rows-subgrid gap-1 rounded-xl px-3 py-2.5',\n desk === 'lg'\n ? 'lg:order-none lg:row-span-1 lg:flex lg:flex-col'\n : 'md:order-none md:row-span-1 md:flex md:flex-col',\n c.highlight\n ? cn(\n TINT,\n 'col-span-2',\n desk === 'lg'\n ? 'lg:col-span-1 lg:-my-5 lg:self-stretch lg:rounded-none lg:px-4 lg:py-5'\n : 'md:col-span-1 md:-my-5 md:self-stretch md:rounded-none md:px-4 md:py-5'\n )\n : desk === 'lg'\n ? 'lg:p-0'\n : 'md:p-0'\n )}\n >\n <span\n className={cn(\n 'text-[0.8125rem]',\n c.highlight ? 'text-oca-accent-ink' : 'text-muted-foreground',\n desk === 'lg' ? 'lg:sr-only' : 'md:sr-only'\n )}\n >\n {c.label}\n </span>\n <span className={cn('text-[0.9375rem]', c.highlight && 'font-medium')}>\n {r.values[c.key] ?? '—'}\n </span>\n </div>\n );\n })}\n </div>\n </li>\n ))}\n </ul>\n );\n}\n","import { CircleCheck, CircleDashed, CircleMinus, CircleX, Clock } from 'lucide-react';\nimport { useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn';\nimport { Button } from '../primitives/button';\nimport { Field, Textarea } from '../primitives/form';\nimport { StatusBadge, type Statement } from '../primitives/status-badge';\nimport { CodeBlock } from './code-block';\nimport { KeyValueList, type KeyValueItem } from './data';\n\nexport type CheckState = 'ok' | 'fail' | 'pending' | 'skipped' | 'unchecked';\n\nexport interface VerifyCheck {\n label: ReactNode;\n state: CheckState;\n /** What was found, in a line: the block, the address, why it failed. */\n note?: ReactNode;\n}\n\nconst CHECK: Record<CheckState, { word: string; icon: ReactNode; tone: string }> = {\n ok: { word: 'Passed', icon: <CircleCheck />, tone: 'text-success' },\n fail: { word: 'Failed', icon: <CircleX />, tone: 'text-destructive' },\n pending: { word: 'Pending', icon: <Clock />, tone: 'text-oca-accent-ink' },\n skipped: { word: 'Skipped', icon: <CircleMinus />, tone: 'text-muted-foreground' },\n unchecked: { word: 'Not checked', icon: <CircleDashed />, tone: 'text-oca-subtle' },\n};\n\n/**\n * What a check on an artifact found: the statement (good, caution or\n * refused) with a title and one line, each check and its result in words,\n * the facts read from the artifact, and what this check did not cover. One\n * shape for a stamp, a ballot, an envelope, a delegation or a pledge.\n */\nexport function VerifyReport({\n verdict,\n title,\n summary,\n checks,\n facts,\n notChecked,\n actions,\n 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 <header className=\"flex flex-col items-start gap-3 p-6 md:p-8\">\n <StatusBadge status={verdict} />\n <Heading className=\"oca-display-3\">{title}</Heading>\n {summary ? <p className=\"oca-body max-w-[40rem]\">{summary}</p> : null}\n </header>\n <ul aria-label=\"Checks\" className=\"divide-y divide-border border-t border-border\">\n {checks.map((c, i) => {\n const k = CHECK[c.state];\n return (\n <li key={i} className=\"flex items-start gap-3 px-6 py-3.5 md:px-8\">\n <span aria-hidden className={cn('mt-0.5 shrink-0 [&_svg]:size-[1.125rem]', k.tone)}>\n {k.icon}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-0.5 sm:flex-row sm:items-baseline sm:justify-between sm:gap-6\">\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"text-[0.9375rem]\">{c.label}</span>\n {c.note ? (\n <span className=\"break-words text-[0.8125rem] leading-snug text-muted-foreground\">{c.note}</span>\n ) : null}\n </div>\n <span\n className={cn(\n 'shrink-0 text-[0.8125rem]',\n c.state === 'fail' ? 'text-destructive' : 'text-muted-foreground'\n )}\n >\n {k.word}\n </span>\n </div>\n </li>\n );\n })}\n </ul>\n {facts && facts.length > 0 ? (\n <KeyValueList items={facts} className=\"rounded-none border-x-0 border-b-0 bg-transparent [&>div]:px-6 md:[&>div]:px-8\" />\n ) : null}\n {notChecked && notChecked.length > 0 ? (\n <div className=\"flex flex-col gap-2 border-t border-border bg-muted/50 px-6 py-5 md:px-8\">\n <p className=\"text-[0.875rem] font-medium\">What this did not check</p>\n <ul className=\"flex list-disc flex-col gap-1 pl-5 text-[0.875rem] leading-relaxed text-muted-foreground\">\n {notChecked.map((n, i) => (\n <li key={i}>{n}</li>\n ))}\n </ul>\n </div>\n ) : null}\n {actions ? <div className=\"flex flex-wrap gap-3 border-t border-border px-6 py-5 md:px-8\">{actions}</div> : null}\n </section>\n );\n}\n\n/**\n * Sign a message with a Bitcoin address: a browser wallet signs it with one\n * press where there is one (`wallets`, the buttons a site renders), and any\n * wallet can sign the message by hand and paste the signature back. The\n * frame for sign-in by wallet, /sudo, and every tool's signing step.\n */\nexport function SignMessage({\n lead,\n address,\n message,\n wallets,\n busy = false,\n error,\n submitLabel = 'Confirm',\n secondary,\n onSignature,\n className,\n}: {\n lead?: ReactNode;\n /** The address that must sign. */\n address: string;\n message: string;\n /** Buttons that sign with a browser wallet. */\n wallets?: ReactNode;\n busy?: boolean;\n /** Why the last signature was refused. */\n error?: ReactNode;\n submitLabel?: string;\n /** Beside the submit button: Back, Cancel. */\n secondary?: ReactNode;\n onSignature: (signature: string) => void;\n className?: string;\n}) {\n const [pasted, setPasted] = useState('');\n return (\n <div className={cn('flex flex-col gap-5', className)}>\n {lead ? <p className=\"text-[0.9375rem] leading-relaxed\">{lead}</p> : null}\n {wallets ? (\n <>\n <div className=\"flex flex-wrap gap-2\">{wallets}</div>\n <div className=\"flex items-center gap-3 text-[0.8125rem] text-muted-foreground\">\n <span className=\"h-px flex-1 bg-border\" />\n or sign it in any wallet\n <span className=\"h-px flex-1 bg-border\" />\n </div>\n </>\n ) : null}\n <CodeBlock code={message} caption=\"Message to sign\" />\n <form\n className=\"flex flex-col gap-4\"\n onSubmit={(e) => {\n e.preventDefault();\n if (pasted.trim()) onSignature(pasted.trim());\n }}\n >\n <Field\n label=\"Signature\"\n error={error}\n hint={\n <>\n From your wallet&rsquo;s &ldquo;sign message&rdquo; (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 { ArrowLeft, ArrowRight, ArrowUpRight, ChevronRight } from 'lucide-react';\nimport Link from 'next/link.js';\nimport {\n Children,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\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 type?: ReactNode;\n required?: boolean;\n default?: ReactNode;\n description?: 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\n/**\n * Parameters, props or fields: name and type in mono, required or default,\n * and what it does. A table from sm up; on a phone each row is a card with\n * the name and type on top.\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 marks = (r: ApiRow) => (\n <>\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 </>\n );\n return (\n <div className={cn('not-prose my-6', className)}>\n <div className=\"overflow-hidden rounded-2xl border border-border bg-card max-sm:hidden\">\n <ScrollFade fade=\"var(--card)\">\n <table className=\"w-full border-collapse text-left text-[0.875rem]\">\n {caption ? <caption className=\"sr-only\">{caption}</caption> : null}\n <thead>\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 <th scope=\"col\" className=\"px-4 py-2.5 font-medium\">Description</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border\">\n {rows.map((r) => (\n <tr key={r.name} className=\"align-top\">\n <th scope=\"row\" className=\"px-4 py-3 text-left font-normal\">\n <span className=\"flex flex-col items-start gap-1\">\n <code className={cn('font-mono text-[0.8125rem] text-foreground', r.deprecated && 'line-through decoration-oca-subtle')}>\n {r.name}\n </code>\n {marks(r)}\n </span>\n </th>\n <td className=\"px-4 py-3 font-mono text-[0.8125rem] text-muted-foreground\">{r.type ?? '—'}</td>\n {hasDefault ? (\n <td className=\"px-4 py-3 font-mono text-[0.8125rem] text-muted-foreground\">{r.default ?? '—'}</td>\n ) : null}\n <td className=\"px-4 py-3 leading-relaxed text-muted-foreground\">{r.description}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </ScrollFade>\n </div>\n <ul aria-label={caption} className=\"divide-y divide-border rounded-2xl border border-border bg-card sm:hidden\">\n {rows.map((r) => (\n <li key={r.name} className=\"flex flex-col gap-1.5 px-4 py-3.5\">\n <span className=\"flex flex-wrap items-baseline gap-x-2 gap-y-1\">\n <code className={cn('font-mono text-[0.875rem] text-foreground', r.deprecated && 'line-through decoration-oca-subtle')}>\n {r.name}\n </code>\n {r.type ? <code className=\"break-all font-mono text-[0.8125rem] text-muted-foreground\">{r.type}</code> : null}\n </span>\n <span className=\"flex flex-wrap items-center gap-2 empty:hidden\">{marks(r)}</span>\n {r.description ? <span className=\"text-[0.875rem] leading-relaxed text-muted-foreground\">{r.description}</span> : null}\n {r.default !== undefined ? (\n <span className=\"text-[0.8125rem] text-muted-foreground\">\n Default <code className=\"font-mono text-foreground\">{r.default}</code>\n </span>\n ) : null}\n </li>\n ))}\n </ul>\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: it keeps its type size and scrolls sideways when it is wider.\n */\nfunction naturalSize(svg: string): string {\n const w = svg.match(/viewBox=\"[\\d.-]+ [\\d.-]+ ([\\d.]+) [\\d.]+\"/)?.[1];\n if (!w) return svg;\n return svg.replace(/<svg([^>]*?)\\swidth=\"100%\"/, `<svg$1 width=\"${Math.ceil(Number(w))}\"`).replace(/max-width:\\s*[\\d.]+px;?/, '');\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 [svg, setSvg] = useState<string | null>(null);\n const [failed, setFailed] = useState(false);\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: drawn } = await mermaid.render(`oca-diagram-${raw.replace(/[^a-zA-Z0-9]/g, '')}-${dark ? 'd' : 'l'}`, chart);\n if (live) {\n setSvg(naturalSize(drawn));\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 {svg ? (\n <ScrollFade fade=\"var(--card)\">\n <div\n className=\"flex w-max min-w-full justify-center p-6 [&_svg]:h-auto [&_svg]:max-w-none\"\n role=\"img\"\n aria-label={typeof caption === 'string' ? caption : 'Diagram'}\n dangerouslySetInnerHTML={{ __html: 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 * 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 href: string;\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\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 className,\n}: {\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}) {\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) {\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]);\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 (onSelect) onSelect(r);\n else 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 return (\n <a\n key={r.id}\n id={optionId(i)}\n href={r.href}\n role=\"option\"\n aria-selected={on}\n tabIndex={-1}\n onMouseMove={() => setActive(i)}\n onClick={(e) => {\n if (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 )}\n >\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 <CornerDownLeft aria-hidden className={cn('mt-1 size-4 shrink-0 text-muted-foreground', !on && 'invisible')} />\n </a>\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 No results for &ldquo;{query.trim()}&rdquo;.\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","import { ArrowRight, Check, Download, FileText, Lock, Upload } from 'lucide-react';\nimport Link from 'next/link.js';\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 { ScrollFade } from '../primitives/scroll-fade';\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 <header className={cn('flex items-start gap-3.5', 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=\"shrink-0\">{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 */\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 tone?: 'ink' | 'brand';\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', tone === 'brand' ? 'bg-oca-orange-deep' : 'bg-foreground')}\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 <ScrollFade fade=\"var(--background)\" className={cn('w-full', className)}>\n <div role=\"group\" aria-label={label} className=\"flex w-max items-center gap-2 py-0.5\">\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 </ScrollFade>\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"]}