@orangecheck/app-design 0.6.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +23 -6
  2. package/dist/brand.js.map +1 -1
  3. package/dist/brand.mjs.map +1 -1
  4. package/dist/chrome.d.mts +78 -55
  5. package/dist/chrome.d.ts +78 -55
  6. package/dist/chrome.js +1100 -59
  7. package/dist/chrome.js.map +1 -1
  8. package/dist/chrome.mjs +1091 -61
  9. package/dist/chrome.mjs.map +1 -1
  10. package/dist/code.d.mts +52 -0
  11. package/dist/code.d.ts +52 -0
  12. package/dist/code.js +534 -0
  13. package/dist/code.js.map +1 -0
  14. package/dist/code.mjs +522 -0
  15. package/dist/code.mjs.map +1 -0
  16. package/dist/components.d.mts +216 -42
  17. package/dist/components.d.ts +216 -42
  18. package/dist/components.js +3350 -100
  19. package/dist/components.js.map +1 -1
  20. package/dist/components.mjs +3293 -103
  21. package/dist/components.mjs.map +1 -1
  22. package/dist/docs-DhnstueM.d.ts +219 -0
  23. package/dist/docs-DiR6s43s.d.mts +219 -0
  24. package/dist/family.d.mts +2 -0
  25. package/dist/family.d.ts +2 -0
  26. package/dist/family.js +167 -0
  27. package/dist/family.js.map +1 -0
  28. package/dist/family.mjs +154 -0
  29. package/dist/family.mjs.map +1 -0
  30. package/dist/format.d.mts +12 -0
  31. package/dist/format.d.ts +12 -0
  32. package/dist/format.js +65 -0
  33. package/dist/format.js.map +1 -0
  34. package/dist/format.mjs +58 -0
  35. package/dist/format.mjs.map +1 -0
  36. package/dist/hero-Dn37il-9.d.mts +31 -0
  37. package/dist/hero-Dn37il-9.d.ts +31 -0
  38. package/dist/index-C6hDqOOS.d.mts +58 -0
  39. package/dist/index-C6hDqOOS.d.ts +58 -0
  40. package/dist/index.d.mts +12 -3
  41. package/dist/index.d.ts +12 -3
  42. package/dist/index.js +4319 -295
  43. package/dist/index.js.map +1 -1
  44. package/dist/index.mjs +4219 -298
  45. package/dist/index.mjs.map +1 -1
  46. package/dist/mdx.d.mts +58 -0
  47. package/dist/mdx.d.ts +58 -0
  48. package/dist/mdx.js +1712 -0
  49. package/dist/mdx.js.map +1 -0
  50. package/dist/mdx.mjs +1685 -0
  51. package/dist/mdx.mjs.map +1 -0
  52. package/dist/primitives.d.mts +73 -5
  53. package/dist/primitives.d.ts +73 -5
  54. package/dist/primitives.js +331 -8
  55. package/dist/primitives.js.map +1 -1
  56. package/dist/primitives.mjs +320 -11
  57. package/dist/primitives.mjs.map +1 -1
  58. package/dist/session.d.mts +18 -0
  59. package/dist/session.d.ts +18 -0
  60. package/dist/session.js +432 -0
  61. package/dist/session.js.map +1 -0
  62. package/dist/session.mjs +401 -0
  63. package/dist/session.mjs.map +1 -0
  64. package/dist/status-badge-BEOxeY9j.d.ts +13 -0
  65. package/dist/status-badge-DRwGhB0h.d.mts +13 -0
  66. package/dist/styles/code.css +97 -0
  67. package/dist/styles/fonts.css +1 -1
  68. package/dist/styles/theme.css +2 -0
  69. package/dist/styles/tokens.css +44 -2
  70. package/dist/styles.css +1 -0
  71. package/dist/tokens.d.mts +3 -1
  72. package/dist/tokens.d.ts +3 -1
  73. package/dist/tokens.js +5 -3
  74. package/dist/tokens.js.map +1 -1
  75. package/dist/tokens.mjs +5 -3
  76. package/dist/tokens.mjs.map +1 -1
  77. package/dist/tool-shell-B1C7ahKE.d.ts +81 -0
  78. package/dist/tool-shell-BDx_N5ai.d.mts +81 -0
  79. package/dist/tools-BggNN5DV.d.ts +131 -0
  80. package/dist/tools-DFIxIj5p.d.mts +131 -0
  81. package/package.json +38 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/cn.ts","../src/brand/mark.tsx","../src/primitives/overlay.tsx","../src/chrome/site.tsx","../src/lib/shell-context.ts","../src/chrome/app-shell.tsx"],"names":["extendTailwindMerge","clsx","jsxs","jsx","forwardRef","DialogContent","DialogPrimitive","X","DialogTitle","DialogDescription","SheetContent","PopoverContent","PopoverPrimitive","TooltipContent","TooltipPrimitive","DropdownMenuPrimitive","DropdownMenuContent","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","Link","useState","Menu","createContext","useContext","useMemo","Fragment","ChevronRight","useTheme","useEffect","Sun","Moon","SunMoon"],"mappings":"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","file":"chrome.js","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 type { SVGProps } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The isometric check, measured from Sou's deck (slide 9) onto a 16×8 grid:\n * a chevron with a 3-unit short arm and a 5-unit long arm, one unit thick,\n * extruded two units. Three faces, three oranges.\n */\n\nconst TOP = '0,3 2,2 6,4 14,0 16,1 6,6';\nconst LEFT = '0,3 6,6 6,8 0,5';\nconst RIGHT = '6,6 16,1 16,3 6,8';\n\nexport const MARK_FACES = { top: '#FED8AB', left: '#FB933C', right: '#EA580B' } as const;\n\nexport interface MarkProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n /** Accessible name. Omit to render the mark as decoration. */\n title?: string;\n /** Rendered width in px; height follows the 2:1 grid. */\n size?: number;\n}\n\nexport function Mark({ title, size, className, ...rest }: MarkProps) {\n return (\n <svg\n viewBox=\"0 0 16 8\"\n width={size}\n height={size ? size / 2 : undefined}\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n className={cn('shrink-0', className)}\n {...rest}\n >\n {title ? <title>{title}</title> : null}\n <polygon points={LEFT} fill={MARK_FACES.left} />\n <polygon points={RIGHT} fill={MARK_FACES.right} />\n <polygon points={TOP} fill={MARK_FACES.top} />\n </svg>\n );\n}\n\nexport interface AppIconProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n title?: string;\n size?: number;\n}\n\n/** The app icon: the mark on an ink squircle, as in the deck's lockup. */\nexport function AppIcon({ title, size = 32, className, ...rest }: AppIconProps) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n className={cn('shrink-0', className)}\n {...rest}\n >\n {title ? <title>{title}</title> : null}\n <rect\n width=\"24\"\n height=\"24\"\n rx=\"6.25\"\n style={{ fill: 'var(--oca-icon-tile, #0A0A0A)', stroke: 'var(--oca-icon-ring, transparent)' }}\n strokeWidth=\"0.5\"\n />\n <g transform=\"translate(4.25 8.1) scale(0.97)\">\n <polygon points={LEFT} fill={MARK_FACES.left} />\n <polygon points={RIGHT} fill={MARK_FACES.right} />\n <polygon points={TOP} fill={MARK_FACES.top} />\n </g>\n </svg>\n );\n}\n\nexport interface LockupProps {\n /** The word beside the icon. */\n name?: string;\n /** Icon size in px; the word scales with it. */\n size?: number;\n className?: string;\n}\n\n/** Icon and wordmark, lowercase, as the deck sets it. */\nexport function Lockup({ name = 'orangecheck', size = 28, className }: LockupProps) {\n return (\n <span\n className={cn('inline-flex items-center font-medium tracking-[-0.01em]', className)}\n style={{ gap: size * 0.32, fontSize: size * 0.56 }}\n >\n <AppIcon size={size} />\n <span>{name}</span>\n </span>\n );\n}\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { X } from 'lucide-react';\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/* ── Dialog ───────────────────────────────────────────────────────────── */\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nconst overlayClass =\n 'oca-animate-fade fixed inset-0 z-50 bg-[rgb(10_10_10/0.38)] backdrop-blur-[2px] data-[state=closed]:opacity-0';\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { hideClose?: boolean }\n>(function DialogContent({ className, children, hideClose, ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-rise fixed left-1/2 top-1/2 z-50 w-[min(92vw,34rem)] -translate-x-1/2 -translate-y-1/2',\n 'max-h-[88vh] overflow-y-auto rounded-[1.5rem] border border-border bg-popover p-6 text-popover-foreground shadow-xl md:p-8',\n 'outline-none',\n className\n )}\n {...props}\n >\n {children}\n {hideClose ? null : (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mb-5 flex flex-col gap-2 pr-8', className)} {...props} />;\n}\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-7 flex flex-col-reverse gap-3 sm:flex-row sm:justify-end', className)} {...props} />;\n}\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-[1.5rem] font-normal leading-tight tracking-[-0.02em]', className)}\n {...props}\n />\n );\n});\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return <DialogPrimitive.Description ref={ref} className={cn('oca-body', className)} {...props} />;\n});\n\n/* ── Sheet: a dialog from an edge ────────────────────────────────────── */\n\nexport const Sheet = DialogPrimitive.Root;\nexport const SheetTrigger = DialogPrimitive.Trigger;\nexport const SheetClose = DialogPrimitive.Close;\nexport const SheetTitle = DialogTitle;\nexport const SheetDescription = DialogDescription;\n\nconst sheetSide = {\n right: 'inset-y-0 right-0 h-full w-[min(88vw,24rem)] border-l',\n left: 'inset-y-0 left-0 h-full w-[min(88vw,24rem)] border-r',\n bottom: 'inset-x-0 bottom-0 max-h-[88vh] rounded-t-[1.5rem] border-t',\n} as const;\n\nexport const SheetContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { side?: keyof typeof sheetSide }\n>(function SheetContent({ className, children, side = 'right', ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-fade fixed z-50 flex flex-col gap-4 overflow-y-auto border-border bg-popover p-6 text-popover-foreground shadow-xl outline-none',\n sheetSide[side],\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\n/* ── Popover ──────────────────────────────────────────────────────────── */\n\nexport const Popover = PopoverPrimitive.Root;\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport const PopoverContent = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(function PopoverContent({ className, align = 'center', sideOffset = 8, ...props }, ref) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 w-72 rounded-2xl border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n});\n\n/* ── Tooltip: ink, small, quick ───────────────────────────────────────── */\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(function TooltipContent({ className, sideOffset = 6, ...props }, ref) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 max-w-xs rounded-lg bg-oca-ink px-2.5 py-1.5 text-[0.8125rem] leading-snug text-oca-ink-foreground',\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n );\n});\n\n/* ── Menu ─────────────────────────────────────────────────────────────── */\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, sideOffset = 8, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 min-w-56 overflow-hidden rounded-2xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { destructive?: boolean }\n>(function DropdownMenuItem({ className, destructive, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'flex h-10 cursor-default select-none items-center gap-2.5 rounded-xl px-3 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-muted-foreground',\n destructive && 'text-destructive [&_svg]:text-destructive',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(function DropdownMenuLabel({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-3 pb-1.5 pt-2 text-[0.8125rem] text-muted-foreground', className)}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return <DropdownMenuPrimitive.Separator ref={ref} className={cn('my-1.5 h-px bg-border', className)} {...props} />;\n});\n","import { Menu } from 'lucide-react';\nimport Link from 'next/link';\nimport { useState, type ReactNode } from 'react';\n\nimport { Lockup, Mark } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { Sheet, SheetContent, SheetTitle, SheetTrigger } from '../primitives/overlay';\n\nexport interface NavItem {\n href: string;\n label: ReactNode;\n /** Marks the current section for styling and aria-current. */\n active?: boolean;\n external?: boolean;\n}\n\nfunction NavLink({ item, className, onNavigate }: { item: NavItem; className?: string; onNavigate?: () => void }) {\n const cls = cn(\n 'rounded-full px-3 py-2 text-[0.9375rem] transition-colors',\n item.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground',\n className\n );\n if (item.external) {\n return (\n <a href={item.href} className={cls} rel=\"noreferrer\" onClick={onNavigate}>\n {item.label}\n </a>\n );\n }\n return (\n <Link href={item.href} className={cls} aria-current={item.active ? 'page' : undefined} onClick={onNavigate}>\n {item.label}\n </Link>\n );\n}\n\n/**\n * The public header: lockup, a few words of navigation, actions on the right.\n * Below md the navigation moves into a sheet; the actions stay.\n */\nexport function SiteHeader({\n home = '/',\n brand,\n nav = [],\n actions,\n className,\n}: {\n home?: string;\n brand?: ReactNode;\n nav?: NavItem[];\n actions?: ReactNode;\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n return (\n <header\n className={cn(\n 'sticky top-0 z-40 w-full border-b border-transparent bg-background/95 backdrop-blur-md supports-[backdrop-filter]:bg-background/90',\n className\n )}\n >\n <div\n className={cn(\n 'oca-container flex h-16 items-center justify-between gap-4 md:h-[4.5rem]',\n // Three columns, the outer two each at least their content: the\n // navigation stays centred whatever the actions hold, so it does\n // not shift when they change (signed out to signed in).\n nav.length > 0 &&\n 'md:grid md:grid-cols-[minmax(max-content,1fr)_auto_minmax(max-content,1fr)]'\n )}\n >\n <Link href={home} className=\"-ml-1 justify-self-start rounded-lg p-1\">\n {brand ?? <Lockup size={28} />}\n {/* Read as \"orangecheck home\": the name starts with what the link shows. */}\n <span className=\"sr-only\"> home</span>\n </Link>\n {nav.length > 0 ? (\n <nav aria-label=\"Main\" className=\"hidden items-center gap-1 md:flex\">\n {nav.map((n) => (\n <NavLink key={n.href} item={n} />\n ))}\n </nav>\n ) : null}\n <div className=\"flex items-center gap-2 justify-self-end\">\n {actions}\n {nav.length > 0 ? (\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger\n className=\"inline-flex size-10 items-center justify-center rounded-full text-foreground hover:bg-accent md:hidden\"\n aria-label=\"Open menu\"\n >\n <Menu className=\"size-5\" />\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"pt-16\">\n <SheetTitle className=\"sr-only\">Menu</SheetTitle>\n <nav aria-label=\"Main\" className=\"flex flex-col\">\n {nav.map((n) => (\n <NavLink\n key={n.href}\n item={n}\n className=\"rounded-xl px-3 py-3 text-[1.0625rem]\"\n onNavigate={() => setOpen(false)}\n />\n ))}\n </nav>\n </SheetContent>\n </Sheet>\n ) : null}\n </div>\n </div>\n </header>\n );\n}\n\nexport interface FooterColumn {\n heading: string;\n links: NavItem[];\n}\n\n/**\n * The footer, in the deck's register: a line of fine print, the support credit,\n * and a few columns of links. Links are 44px tall on phones.\n */\nexport function SiteFooter({\n columns = [],\n fineprint,\n meta,\n signature = true,\n className,\n}: {\n columns?: FooterColumn[];\n fineprint?: ReactNode;\n meta?: ReactNode;\n /** The mark and wordmark at display size, closing the page. */\n signature?: boolean;\n className?: string;\n}) {\n return (\n <footer className={cn('border-t border-border bg-background', className)}>\n <div className=\"oca-container grid grid-cols-2 gap-x-6 gap-y-10 py-14 md:grid-cols-[1.3fr_repeat(3,1fr)] md:py-16\">\n <div className=\"col-span-2 flex flex-col gap-4 md:col-span-1\">\n <Lockup size={26} />\n {fineprint ? <p className=\"max-w-xs text-[0.9375rem] leading-relaxed text-muted-foreground\">{fineprint}</p> : null}\n </div>\n {columns.map((col, i) => {\n // On a phone an odd last column takes the whole row, its links in two\n // columns, instead of sitting alone beside an empty half.\n const spans = columns.length % 2 === 1 && i === columns.length - 1;\n return (\n <div\n key={col.heading}\n className={cn('flex min-w-0 flex-col gap-1', spans && 'col-span-2 md:col-span-1')}\n >\n <p className=\"mb-2 text-[0.875rem] font-medium\">{col.heading}</p>\n <div className={cn('flex flex-col gap-1', spans && 'grid grid-cols-2 gap-x-6 md:flex md:flex-col')}>\n {col.links.map((l) => (\n <NavLink\n key={l.href}\n item={l}\n className=\"-mx-3 py-2.5 text-[0.9375rem] md:py-1.5\"\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n {signature ? (\n <div aria-hidden className=\"oca-container select-none overflow-hidden pb-8 md:pb-12\">\n <div className=\"flex items-end gap-[0.18em] text-[clamp(3rem,11.5vw,10rem)] leading-[0.78] tracking-[-0.065em] [font-family:var(--oc-font-display)]\">\n <span className=\"mb-[0.06em] inline-block w-[1.1em] shrink-0\">\n <Mark className=\"block h-auto w-full\" />\n </span>\n <span>orangecheck</span>\n </div>\n </div>\n ) : null}\n {meta ? (\n <div className=\"oca-container\">\n {/* The rule spans the content, not the gutters. */}\n <div className=\"border-t border-border py-6 text-[0.875rem] text-muted-foreground\">{meta}</div>\n </div>\n ) : null}\n </footer>\n );\n}\n","import { createContext, useContext } from 'react';\n\n/** Where the viewer is inside the signed-in shell: its section and page. */\nexport interface ShellPlace {\n section?: string;\n page?: string;\n}\n\nexport const ShellContext = createContext<ShellPlace>({});\n\nexport function useShellPlace(): ShellPlace {\n return useContext(ShellContext);\n}\n","import { ChevronRight, Menu, Moon, Sun, SunMoon } from 'lucide-react';\nimport Link from 'next/link';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useMemo, useState, type ReactNode } from 'react';\n\nimport { Lockup } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { ShellContext } from '../lib/shell-context';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Sheet,\n SheetContent,\n SheetTitle,\n SheetTrigger,\n} from '../primitives/overlay';\n\nexport interface ShellNavItem {\n href: string;\n label: string;\n icon?: ReactNode;\n active?: boolean;\n /** A count or a dot beside the label (unread, needs attention). */\n badge?: ReactNode;\n}\n\nexport interface ShellNavGroup {\n /** Omit for the first, unlabeled group. */\n label?: string;\n items: ShellNavItem[];\n}\n\n/**\n * A part of the app with its own pages: \"You\", \"Build\", \"Operate\", \"Admin\".\n * The sidebar lists one section's pages at a time, under a switcher.\n */\nexport interface ShellSection {\n id: string;\n /** Short, for the switcher: one word. */\n label: string;\n /** The section's eyebrow on its pages; defaults to `label`. */\n title?: string;\n /** Where the switcher goes: the section's first page. */\n href: string;\n groups: ShellNavGroup[];\n}\n\nfunction SideNav({ groups, onNavigate }: { groups: ShellNavGroup[]; onNavigate?: () => void }) {\n return (\n <nav aria-label=\"Pages\" className=\"flex flex-col gap-5\">\n {groups.map((g, gi) => (\n <div key={g.label ?? gi} className=\"flex flex-col gap-0.5\">\n {g.label ? <p className=\"px-3 pb-1 text-[0.8125rem] text-muted-foreground\">{g.label}</p> : null}\n {g.items.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n onClick={onNavigate}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex h-9 items-center gap-3 rounded-xl px-3 text-[0.9375rem] transition-colors',\n '[&_svg]:size-[1.0625rem] [&_svg]:shrink-0',\n it.active\n ? 'bg-card text-foreground shadow-sm ring-1 ring-border [&_svg]:text-foreground'\n : 'text-muted-foreground hover:bg-accent hover:text-foreground'\n )}\n >\n {it.icon}\n <span className=\"min-w-0 flex-1 truncate\">{it.label}</span>\n {it.badge ? <span className=\"shrink-0\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n ))}\n </nav>\n );\n}\n\nfunction SectionSwitch({\n sections,\n current,\n onNavigate,\n}: {\n sections: ShellSection[];\n current: ShellSection;\n onNavigate?: () => void;\n}) {\n // Up to three fit one row of the sidebar; four go two by two, so no label\n // is ever cut short.\n const cols = sections.length <= 3 ? sections.length : 2;\n return (\n <nav\n aria-label=\"Sections\"\n className={cn('grid gap-1 bg-muted p-1', cols === sections.length ? 'rounded-full' : 'rounded-[1.25rem]')}\n style={{ gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))` }}\n >\n {sections.map((sec) => {\n const on = sec.id === current.id;\n return (\n <Link\n key={sec.id}\n href={sec.href}\n onClick={onNavigate}\n aria-current={on ? 'true' : undefined}\n className={cn(\n 'flex h-8 min-w-0 items-center justify-center rounded-full px-1.5 text-[0.8125rem] font-medium transition-colors',\n on ? 'bg-card text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span className=\"truncate\">{sec.label}</span>\n </Link>\n );\n })}\n </nav>\n );\n}\n\n/** The phone's way around a small app: every page one tap away, under the thumb. */\nfunction TabBar({ items }: { items: ShellNavItem[] }) {\n return (\n <nav\n aria-label=\"Pages\"\n data-oca-tabbar=\"\"\n className=\"fixed inset-x-0 bottom-0 z-40 border-t border-border bg-background/90 pb-[env(safe-area-inset-bottom)] backdrop-blur-md md:hidden\"\n >\n <div\n className=\"mx-auto grid h-14 max-w-[32rem] px-1.5\"\n style={{ gridTemplateColumns: `repeat(${items.length}, minmax(0, 1fr))` }}\n >\n {items.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex min-w-0 flex-col items-center justify-center gap-1 rounded-2xl text-[0.6875rem] leading-none outline-none transition-colors [-webkit-tap-highlight-color:transparent] focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n it.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span\n className={cn(\n 'relative flex h-7 w-12 items-center justify-center rounded-full transition-[background-color,box-shadow] duration-200',\n '[&_svg]:size-[1.125rem] [&_svg]:shrink-0',\n it.active ? 'bg-card shadow-sm ring-1 ring-border [&_svg]:stroke-2' : '[&_svg]:stroke-[1.75]'\n )}\n >\n {it.icon}\n {it.badge ? (\n <span aria-hidden className=\"absolute right-2.5 top-0.5 size-2 rounded-full bg-oca-orange ring-2 ring-background\" />\n ) : null}\n </span>\n <span className=\"max-w-full truncate px-0.5\">{it.label}</span>\n {it.badge ? <span className=\"sr-only\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n </nav>\n );\n}\n\n/** Two to five pages, each with an icon, fit a tab bar. More, or sections, keep the drawer. */\nfunction tabsFor(groups: ShellNavGroup[]): ShellNavItem[] | null {\n const items = groups.flatMap((g) => g.items);\n return items.length >= 2 && items.length <= 5 && items.every((it) => it.icon) ? items : null;\n}\n\nconst activeItem = (groups: ShellNavGroup[]) => groups.flatMap((g) => g.items).find((it) => it.active);\n\n// Bundlers replace process.env.NODE_ENV; the typeof guard covers one that doesn't.\ndeclare const process: { env: { NODE_ENV?: string } } | undefined;\n\nconst warned = new Set<string>();\n\nfunction warnDuplicateLabels(groups: ShellNavGroup[]) {\n if (typeof process === 'undefined' || process.env.NODE_ENV === 'production') return;\n const seen = new Set<string>();\n for (const it of groups.flatMap((g) => g.items)) {\n if (seen.has(it.label) && !warned.has(it.label)) {\n warned.add(it.label);\n console.warn(`AppShell: two pages are labelled \"${it.label}\"; give each its own name.`);\n }\n seen.add(it.label);\n }\n}\n\n/**\n * The signed-in frame: a quiet sidebar on the canvas, content on the right.\n *\n * Give it `sections` and the sidebar shows a switcher (only when there is more\n * than one) and the current section's pages, so it never outgrows the screen;\n * `persistent` groups (Account) follow every section. The section is the one\n * holding an active item, or `activeSection`. On phones a top bar carries the\n * wordmark and the account, a strip under it names the section and page, and\n * the sidebar opens as a sheet. `nav` (flat groups) still works for a simple\n * app, and when it holds two to five pages, each with an icon, phones get a\n * tab bar instead: the pages sit under the thumb, the strip and the menu\n * button go (the sheet stays for a `footer`, without the pages), and tablets\n * keep the sheet. Pages get the section through context: PageHeader uses it\n * as its eyebrow. The account control and any banner are slots.\n */\nexport function AppShell({\n nav,\n sections,\n activeSection,\n page: pageOverride,\n persistent = [],\n home = '/',\n account,\n banner,\n footer,\n children,\n className,\n}: {\n /** Flat groups, for an app without sections. */\n nav?: ShellNavGroup[];\n sections?: ShellSection[];\n activeSection?: string;\n /** The page's name for the place strip, when it is not a nav item of its own. */\n page?: string;\n /** Groups shown under every section, after its own. */\n persistent?: ShellNavGroup[];\n home?: string;\n account?: ReactNode;\n banner?: ReactNode;\n footer?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n const current =\n sections && sections.length > 0\n ? (sections.find((sec) => sec.id === activeSection) ??\n sections.find((sec) => activeItem(sec.groups)) ??\n sections[0]!)\n : undefined;\n const groups = current ? [...current.groups, ...persistent] : [...(nav ?? []), ...persistent];\n warnDuplicateLabels(groups);\n const tabs = current ? null : tabsFor(groups);\n const page = activeItem(groups);\n const place = useMemo(\n () => ({\n section: current ? (current.title ?? current.label) : undefined,\n page: pageOverride ?? page?.label,\n }),\n [current, page?.label, pageOverride]\n );\n const switcher =\n sections && current && sections.length > 1 ? (\n <SectionSwitch sections={sections} current={current} onNavigate={() => setOpen(false)} />\n ) : null;\n return (\n <ShellContext.Provider value={place}>\n <div\n className={cn(\n 'min-h-dvh bg-background',\n tabs && 'max-md:pb-[calc(3.5rem_+_env(safe-area-inset-bottom))]',\n className\n )}\n >\n <div className=\"sticky top-0 z-40 border-b border-border bg-background/90 backdrop-blur-md lg:hidden\">\n <div className=\"flex h-14 items-center gap-2 px-3\">\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger\n className={cn(\n 'inline-flex size-10 items-center justify-center rounded-full hover:bg-accent',\n // The tab bar holds every page; the sheet is left for a footer.\n tabs && !footer && 'max-md:hidden'\n )}\n aria-label=\"Open navigation\"\n >\n <Menu className=\"size-5\" />\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"flex flex-col gap-6 overflow-y-auto p-4 pt-16\">\n <SheetTitle className=\"sr-only\">Navigation</SheetTitle>\n {switcher}\n <div className={tabs ? 'max-md:hidden' : undefined}>\n <SideNav groups={groups} onNavigate={() => setOpen(false)} />\n </div>\n {footer ? <div className=\"mt-auto flex flex-col gap-3\">{footer}</div> : null}\n </SheetContent>\n </Sheet>\n <Link href={home} aria-label=\"Home\" className=\"rounded-lg p-1\">\n <Lockup size={22} />\n </Link>\n <div className=\"ml-auto flex items-center\">{account}</div>\n </div>\n {place.page ? (\n <div\n className={cn(\n 'flex h-9 items-center gap-1.5 border-t border-border px-4 text-[0.875rem]',\n // The active tab already names the page.\n tabs && !pageOverride && 'max-md:hidden'\n )}\n >\n {place.section ? (\n <>\n <span className=\"shrink-0 text-muted-foreground\">{place.section}</span>\n <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-muted-foreground\" />\n </>\n ) : null}\n <span className=\"truncate font-medium\">{place.page}</span>\n </div>\n ) : null}\n </div>\n <div className=\"mx-auto flex w-full max-w-[90rem]\">\n <aside className=\"sticky top-0 hidden h-dvh w-[17rem] shrink-0 flex-col gap-6 overflow-y-auto px-4 py-6 lg:flex\">\n <Link href={home} className=\"px-2\" aria-label=\"Home\">\n <Lockup size={26} />\n </Link>\n {switcher}\n <SideNav groups={groups} />\n <div className=\"mt-auto flex flex-col gap-3\">{footer}</div>\n </aside>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"hidden h-[4.5rem] items-center justify-end gap-3 px-8 lg:flex\">{account}</div>\n {banner ? <div className=\"px-4 pb-2 pt-4 md:px-8 lg:pt-0\">{banner}</div> : null}\n <main id=\"main-content\" className=\"flex-1 px-4 pb-16 pt-6 md:px-8 lg:pt-2\">\n {/* One width for every signed-in page. */}\n <div className=\"mx-auto w-full max-w-[72rem]\">{children}</div>\n </main>\n </div>\n </div>\n {tabs ? <TabBar items={tabs} /> : null}\n </div>\n </ShellContext.Provider>\n );\n}\n\nexport interface AccountMenuItem {\n label: string;\n href?: string;\n onSelect?: () => void;\n icon?: ReactNode;\n destructive?: boolean;\n}\n\n/** The account button: initial + short id, a menu of items. */\nexport function AccountMenu({\n name,\n detail,\n items,\n nameFrom = 'sm',\n}: {\n name: string;\n /** A second line: the short did, an address. */\n detail?: string;\n items: (AccountMenuItem | 'separator')[];\n /** The width from which the name shows beside the initial. A header with\n * navigation beside it needs the room until lg. */\n nameFrom?: 'sm' | 'lg';\n}) {\n const initial = name.trim().charAt(0).toUpperCase() || '·';\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className={cn(\n 'inline-flex h-10 items-center gap-2.5 rounded-full border border-border bg-card pl-1 pr-1 text-[0.9375rem] outline-none transition-colors hover:border-oca-hairline-strong focus-visible:ring-2 focus-visible:ring-ring',\n nameFrom === 'lg' ? 'lg:pr-3.5' : 'sm:pr-3.5'\n )}\n aria-label={`Account: ${name}`}\n >\n <span className=\"flex size-8 items-center justify-center rounded-full bg-foreground text-[0.8125rem] font-medium text-background\">\n {initial}\n </span>\n <span className={cn('max-w-[10rem] truncate', nameFrom === 'lg' ? 'max-lg:hidden' : 'max-sm:hidden')}>\n {name}\n </span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64\">\n <DropdownMenuLabel className=\"flex flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem] font-medium text-foreground\">{name}</span>\n {detail ? <span className=\"truncate font-mono text-[0.75rem]\">{detail}</span> : null}\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {items.map((it, i) =>\n it === 'separator' ? (\n <DropdownMenuSeparator key={`sep-${i}`} />\n ) : it.href ? (\n <DropdownMenuItem key={it.label} asChild destructive={it.destructive}>\n <Link href={it.href}>\n {it.icon}\n {it.label}\n </Link>\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem key={it.label} onSelect={it.onSelect} destructive={it.destructive}>\n {it.icon}\n {it.label}\n </DropdownMenuItem>\n )\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n/** Light, dark, or follow the system: one button that cycles. */\nexport function ThemeToggle({ className }: { className?: string }) {\n const { theme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n const current = mounted ? (theme ?? 'system') : 'system';\n const next = current === 'light' ? 'dark' : current === 'dark' ? 'system' : 'light';\n const Icon = current === 'light' ? Sun : current === 'dark' ? Moon : SunMoon;\n return (\n <button\n type=\"button\"\n onClick={() => setTheme(next)}\n aria-label={`Theme: ${current}. Switch to ${next}`}\n title={`Theme: ${current}`}\n className={cn(\n 'inline-flex size-10 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n <Icon className=\"size-[1.125rem]\" />\n </button>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/cn.ts","../src/brand/mark.tsx","../src/family/index.ts","../src/primitives/overlay.tsx","../src/primitives/badge.tsx","../src/primitives/status-badge.tsx","../src/chrome/family-menu.tsx","../src/chrome/site.tsx","../src/brand/iso-check.tsx","../src/chrome/sign-in-frame.tsx","../src/primitives/feedback.tsx","../src/lib/shared-context.ts","../src/lib/density.ts","../src/lib/shell-context.ts","../src/primitives/button.tsx","../src/components/hero.tsx","../src/components/docs.tsx","../src/chrome/docs-shell.tsx","../src/chrome/app-shell.tsx","../src/chrome/tool-shell.tsx"],"names":["extendTailwindMerge","clsx","jsxs","jsx","forwardRef","DialogContent","DialogPrimitive","X","DialogTitle","DialogDescription","SheetContent","PopoverPrimitive","PopoverContent","TooltipContent","TooltipPrimitive","DropdownMenuPrimitive","DropdownMenuContent","DropdownMenuItem","DropdownMenuLabel","DropdownMenuSeparator","cva","useId","useState","ChevronDown","Link","Fragment","Menu","useRef","useEffect","Separator","SeparatorPrimitive","createContext","createElement","useContext","Button","Slot","useMemo","ChevronRight","PanelLeft","useTheme","Sun","Moon","SunMoon","CircleUser","LogOut","protocol","ArrowUpRight"],"mappings":"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","file":"chrome.js","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 type { SVGProps } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The isometric check, measured from the ochk.app design (iteration 2, slide 9) onto a 16×8 grid:\n * a chevron with a 3-unit short arm and a 5-unit long arm, one unit thick,\n * extruded two units. Three faces, three oranges.\n */\n\nconst TOP = '0,3 2,2 6,4 14,0 16,1 6,6';\nconst LEFT = '0,3 6,6 6,8 0,5';\nconst RIGHT = '6,6 16,1 16,3 6,8';\n\nexport const MARK_FACES = { top: '#FED8AB', left: '#FB933C', right: '#EA580B' } as const;\n\nexport interface MarkProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n /** Accessible name. Omit to render the mark as decoration. */\n title?: string;\n /** Rendered width in px; height follows the 2:1 grid. */\n size?: number;\n}\n\nexport function Mark({ title, size, className, ...rest }: MarkProps) {\n return (\n <svg\n viewBox=\"0 0 16 8\"\n width={size}\n height={size ? size / 2 : undefined}\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n className={cn('shrink-0', className)}\n {...rest}\n >\n {title ? <title>{title}</title> : null}\n <polygon points={LEFT} fill={MARK_FACES.left} />\n <polygon points={RIGHT} fill={MARK_FACES.right} />\n <polygon points={TOP} fill={MARK_FACES.top} />\n </svg>\n );\n}\n\n/**\n * The mark drawn in hairlines only: the check where a check is missing (an\n * error page). Decoration; the stroke stays the same width at any size.\n */\nexport function MarkOutline({ className }: { className?: string }) {\n return (\n <svg viewBox=\"-0.2 -0.2 16.4 8.4\" aria-hidden className={cn('shrink-0 overflow-visible', className)}>\n {[TOP, LEFT, RIGHT].map((points) => (\n <polygon\n key={points}\n points={points}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </svg>\n );\n}\n\nexport interface AppIconProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {\n title?: string;\n size?: number;\n}\n\n/** The app icon: the mark on an ink squircle, as in the deck's lockup. */\nexport function AppIcon({ title, size = 32, className, ...rest }: AppIconProps) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n role={title ? 'img' : undefined}\n aria-hidden={title ? undefined : true}\n className={cn('shrink-0', className)}\n {...rest}\n >\n {title ? <title>{title}</title> : null}\n <rect\n width=\"24\"\n height=\"24\"\n rx=\"6.25\"\n style={{ fill: 'var(--oca-icon-tile, #0A0A0A)', stroke: 'var(--oca-icon-ring, transparent)' }}\n strokeWidth=\"0.5\"\n />\n <g transform=\"translate(4.25 8.1) scale(0.97)\">\n <polygon points={LEFT} fill={MARK_FACES.left} />\n <polygon points={RIGHT} fill={MARK_FACES.right} />\n <polygon points={TOP} fill={MARK_FACES.top} />\n </g>\n </svg>\n );\n}\n\nexport interface LockupProps {\n /** The word beside the icon. */\n name?: string;\n /** Icon size in px; the word scales with it. */\n size?: number;\n className?: string;\n}\n\n/** Icon and wordmark, lowercase, as the deck sets it. */\nexport function Lockup({ name = 'orangecheck', size = 28, className }: LockupProps) {\n return (\n <span\n className={cn('inline-flex items-center font-medium tracking-[-0.01em]', className)}\n style={{ gap: size * 0.32, fontSize: size * 0.56 }}\n >\n <AppIcon size={size} />\n <span>{name}</span>\n </span>\n );\n}\n","/*\n * The orangecheck family as data: every public site, its one line, its group\n * and its status. The family menu, the footer, the protocol grid and the app\n * grid all read it, so a site is added, renamed or retired here and nowhere\n * else. No React: OG renderers and server code import it too.\n *\n * Status is written here until the claims source exists; then it is read\n * from there. \"live\" shows no badge.\n */\nimport type { FooterColumn, NavItem } from '../lib/nav';\n\n/** The six protocols, in the family's fixed order. */\nexport type ProtocolSlug = 'attest' | 'lock' | 'vote' | 'stamp' | 'agent' | 'pledge';\n\n/** The same slugs as the classic system's, so a site's `current` carries over. */\nexport type FamilySlug =\n | 'home'\n | 'me'\n | 'docs'\n | ProtocolSlug\n | 'vault'\n | 'chat'\n | 'cosign'\n | 'me-demo'\n | 'globe'\n | 'btc';\n\nexport type FamilyGroup = 'orangecheck' | 'protocol' | 'app' | 'public-good';\n\n/** Where a site or feature stands, in the family's words. */\nexport type SiteStatus = 'live' | 'testing' | 'not-yet' | 'paused';\n\nexport interface FamilySite {\n slug: FamilySlug;\n /** The site's word, lowercase, as menus and lockups show it. */\n label: string;\n /** Where the family menu and footer send people. A protocol's is its page on ochk.io. */\n href: string;\n group: FamilyGroup;\n /** What it is, in one sentence. */\n line: string;\n status: SiteStatus;\n /** For an app: the protocols it shows. */\n protocols?: ProtocolSlug[];\n}\n\nexport interface ProtocolSite extends FamilySite {\n slug: ProtocolSlug;\n group: 'protocol';\n /** What it carries: identity, confidentiality, legitimacy, provenance, authority, commitment. */\n verb: string;\n /** The protocol's page on ochk.io. */\n pageHref: string;\n /** The tools, on the protocol's own host. */\n toolHref: string;\n /** The normative spec. */\n specHref: string;\n /** The Nostr event kinds it publishes. */\n kinds: string;\n}\n\nexport const OCHK_IO = 'https://ochk.io';\n/** The docs live under ochk.io; docs.ochk.io 308s here. */\nexport const DOCS_HREF = `${OCHK_IO}/docs`;\n\nfunction protocol(\n slug: ProtocolSlug,\n verb: string,\n line: string,\n kinds: string\n): ProtocolSite {\n return {\n slug,\n label: slug,\n href: `${OCHK_IO}/${slug}`,\n group: 'protocol',\n line,\n status: 'live',\n verb,\n pageHref: `${OCHK_IO}/${slug}`,\n toolHref: `https://${slug}.ochk.io`,\n specHref: `https://github.com/orangecheck/oc-${slug}-protocol`,\n kinds,\n };\n}\n\n/** Attest · Lock · Vote · Stamp · Agent · Pledge, everywhere. */\nexport const PROTOCOLS: readonly ProtocolSite[] = [\n protocol('attest', 'identity', 'Show that an address holds bitcoin, and for how long.', '30078'),\n protocol('lock', 'confidentiality', 'Encrypt to a Bitcoin address, so only its holder can open it.', '30078'),\n protocol('vote', 'legitimacy', 'Polls weighed in sats, that anyone can tally.', '30080–30082'),\n protocol('stamp', 'provenance', 'Prove who signed something, and when.', '30083'),\n protocol('agent', 'authority', 'Give software scoped, revocable permission to act for you.', '30083–30086'),\n protocol('pledge', 'commitment', 'Make a promise with bitcoin behind it, on a public record.', '30078'),\n];\n\nexport const PROTOCOL_ORDER: readonly ProtocolSlug[] = PROTOCOLS.map((p) => p.slug);\n\nexport const FAMILY: readonly FamilySite[] = [\n {\n slug: 'home',\n label: 'ochk.io',\n href: OCHK_IO,\n group: 'orangecheck',\n line: 'The open protocols, and the company behind them.',\n status: 'live',\n },\n {\n slug: 'me',\n label: 'ochk.app',\n href: 'https://ochk.app',\n group: 'orangecheck',\n line: 'One account, with Bitcoin behind it.',\n status: 'testing',\n },\n {\n slug: 'docs',\n label: 'docs',\n href: DOCS_HREF,\n group: 'orangecheck',\n line: 'Specs, SDKs and guides for every protocol.',\n status: 'live',\n },\n ...PROTOCOLS,\n {\n slug: 'vault',\n label: 'vault',\n href: 'https://vault.ochk.io',\n group: 'app',\n line: 'A password manager, encrypted in your browser.',\n status: 'live',\n protocols: ['lock'],\n },\n {\n slug: 'chat',\n label: 'chat',\n href: 'https://chat.ochk.io',\n group: 'app',\n line: 'Messages only the holder of a Bitcoin address can read.',\n status: 'testing',\n protocols: ['lock'],\n },\n {\n slug: 'cosign',\n label: 'cosign',\n href: 'https://cosign.ochk.io',\n group: 'app',\n line: 'Builders find co-founders and backers.',\n status: 'testing',\n protocols: ['attest'],\n },\n {\n slug: 'me-demo',\n // \"demo\", not the made-up app's own name, so nobody takes it for ours.\n label: 'demo',\n href: 'https://me-demo.ochk.io',\n group: 'app',\n line: 'Lumen Notes, a made-up app that signs in with orangecheck.',\n status: 'live',\n },\n {\n slug: 'globe',\n label: 'globe',\n href: 'https://globe.ochk.io',\n group: 'public-good',\n line: 'The Bitcoin network, live, on a globe.',\n status: 'live',\n },\n {\n slug: 'btc',\n label: 'btc',\n href: 'https://btc.ochk.io',\n group: 'public-good',\n line: 'A free desk for reading the Bitcoin market.',\n status: 'live',\n },\n];\n\nexport const FAMILY_GROUPS: readonly { id: FamilyGroup; label: string }[] = [\n { id: 'orangecheck', label: 'orangecheck' },\n { id: 'protocol', label: 'Protocols' },\n { id: 'app', label: 'Apps' },\n { id: 'public-good', label: 'Public goods' },\n];\n\nconst BY_SLUG = new Map(FAMILY.map((s) => [s.slug, s]));\n\nexport function familySite(slug: FamilySlug): FamilySite {\n return BY_SLUG.get(slug)!;\n}\n\nexport function protocolSite(slug: ProtocolSlug): ProtocolSite {\n return BY_SLUG.get(slug) as ProtocolSite;\n}\n\n/** The family in its groups, in order, for menus and footers. */\nexport function familyByGroup(): { id: FamilyGroup; label: string; sites: FamilySite[] }[] {\n return FAMILY_GROUPS.map((g) => ({ ...g, sites: FAMILY.filter((s) => s.group === g.id) }));\n}\n\n/** One fixed row on every footer, all on ochk.io. */\nexport const LEGAL_LINKS: readonly NavItem[] = [\n { href: `${OCHK_IO}/privacy`, label: 'Privacy' },\n { href: `${OCHK_IO}/terms`, label: 'Terms' },\n { href: `${OCHK_IO}/security`, label: 'Security' },\n { href: `${OCHK_IO}/trademark`, label: 'Trademarks' },\n { href: `${OCHK_IO}/contact`, label: 'Contact' },\n];\n\n/**\n * ochk.io's header navigation. oc-www and the docs (served under ochk.io/docs)\n * both draw it from here, so the two cannot drift. Absolute links work from\n * either; mark the active item where it is rendered.\n */\nexport const OCHK_IO_NAV: readonly NavItem[] = [\n {\n href: `${OCHK_IO}/protocols`,\n label: 'Protocols',\n children: PROTOCOLS.map((p) => ({ href: p.pageHref, label: p.label, description: p.line })),\n },\n { href: `${OCHK_IO}/apps`, label: 'Apps' },\n { href: DOCS_HREF, label: 'Docs' },\n { href: `${OCHK_IO}/trust`, label: 'Trust' },\n { href: `${OCHK_IO}/about`, label: 'About' },\n];\n\n/** ochk.io's own footer column; `SiteFooter family` adds the family's. */\nexport const OCHK_IO_FOOTER: readonly FooterColumn[] = [\n {\n heading: 'Company',\n links: [\n { href: `${OCHK_IO}/about`, label: 'About' },\n { href: `${OCHK_IO}/trust`, label: 'Trust' },\n { href: 'https://github.com/orangecheck', label: 'GitHub', external: true },\n ],\n },\n];\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { X } from 'lucide-react';\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/* ── Dialog ───────────────────────────────────────────────────────────── */\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\nconst overlayClass =\n 'oca-animate-fade fixed inset-0 z-50 bg-[rgb(10_10_10/0.38)] backdrop-blur-[2px] data-[state=closed]:opacity-0';\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { hideClose?: boolean }\n>(function DialogContent({ className, children, hideClose, ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-rise fixed left-1/2 top-1/2 z-50 w-[min(92vw,34rem)] -translate-x-1/2 -translate-y-1/2',\n 'max-h-[88vh] overflow-y-auto rounded-[1.5rem] border border-border bg-popover p-6 text-popover-foreground shadow-xl md:p-8',\n 'outline-none',\n className\n )}\n {...props}\n >\n {children}\n {hideClose ? null : (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mb-5 flex flex-col gap-2 pr-8', className)} {...props} />;\n}\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('mt-7 flex flex-col-reverse gap-3 sm:flex-row sm:justify-end', className)} {...props} />;\n}\n\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(function DialogTitle({ className, ...props }, ref) {\n return (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-[1.5rem] font-normal leading-tight tracking-[-0.02em]', className)}\n {...props}\n />\n );\n});\n\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(function DialogDescription({ className, ...props }, ref) {\n return <DialogPrimitive.Description ref={ref} className={cn('oca-body', className)} {...props} />;\n});\n\n/* ── Sheet: a dialog from an edge ────────────────────────────────────── */\n\nexport const Sheet = DialogPrimitive.Root;\nexport const SheetTrigger = DialogPrimitive.Trigger;\nexport const SheetClose = DialogPrimitive.Close;\nexport const SheetTitle = DialogTitle;\nexport const SheetDescription = DialogDescription;\n\nconst sheetSide = {\n right: 'inset-y-0 right-0 h-full w-[min(88vw,24rem)] border-l',\n left: 'inset-y-0 left-0 h-full w-[min(88vw,24rem)] border-r',\n bottom: 'inset-x-0 bottom-0 max-h-[88vh] rounded-t-[1.5rem] border-t',\n} as const;\n\nexport const SheetContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { side?: keyof typeof sheetSide }\n>(function SheetContent({ className, children, side = 'right', ...props }, ref) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className={overlayClass} />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'oca-animate-fade fixed z-50 flex flex-col gap-4 overflow-y-auto border-border bg-popover p-6 text-popover-foreground shadow-xl outline-none',\n sheetSide[side],\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 inline-flex size-9 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label=\"Close\"\n >\n <X className=\"size-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n});\n\n/* ── Popover ──────────────────────────────────────────────────────────── */\n\nexport const Popover = PopoverPrimitive.Root;\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport const PopoverContent = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(function PopoverContent({ className, align = 'center', sideOffset = 8, ...props }, ref) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 w-72 rounded-2xl border border-border bg-popover p-4 text-popover-foreground shadow-lg outline-none',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n});\n\n/* ── Tooltip: ink, small, quick ───────────────────────────────────────── */\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(function TooltipContent({ className, sideOffset = 6, ...props }, ref) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 max-w-xs rounded-lg bg-oca-ink px-2.5 py-1.5 text-[0.8125rem] leading-snug text-oca-ink-foreground',\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n );\n});\n\n/* ── Menu ─────────────────────────────────────────────────────────────── */\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root;\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(function DropdownMenuContent({ className, sideOffset = 8, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'oca-animate-fade z-50 min-w-56 overflow-hidden rounded-2xl border border-border bg-popover p-1.5 text-popover-foreground shadow-lg',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n});\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { destructive?: boolean }\n>(function DropdownMenuItem({ className, destructive, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'flex h-10 cursor-default select-none items-center gap-2.5 rounded-xl px-3 text-[0.9375rem] outline-none',\n 'data-[highlighted]:bg-accent data-[disabled]:opacity-50 [&_svg]:size-4 [&_svg]:text-muted-foreground',\n destructive && 'text-destructive [&_svg]:text-destructive',\n className\n )}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(function DropdownMenuLabel({ className, ...props }, ref) {\n return (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-3 pb-1.5 pt-2 text-[0.8125rem] text-muted-foreground', className)}\n {...props}\n />\n );\n});\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(function DropdownMenuSeparator({ className, ...props }, ref) {\n return <DropdownMenuPrimitive.Separator ref={ref} className={cn('my-1.5 h-px bg-border', className)} {...props} />;\n});\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { HTMLAttributes } from 'react';\n\nimport { cn } from '../lib/cn';\n\n/*\n * The small white pill from the deck (\"in testing\", \"on the path\"). Three tones\n * carry meaning: neutral, the orange accent for attention, and red for a real\n * error. Text stays on the token that clears 4.5:1 against its tint.\n */\nconst GOOD_DOT =\n \"border-border bg-card text-foreground before:size-1.5 before:shrink-0 before:rounded-full before:bg-success before:content-['']\";\n\nexport const badgeVariants = cva(\n 'inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border px-2.5 text-[0.8125rem] font-medium leading-none',\n {\n variants: {\n tone: {\n neutral: 'border-border bg-card text-foreground',\n muted: 'border-transparent bg-muted text-muted-foreground',\n brand: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--card))] text-oca-accent-ink',\n danger: 'border-transparent bg-[color-mix(in_oklab,var(--destructive)_12%,var(--card))] text-destructive',\n // A good state is a neutral pill with a green dot, not a green pill.\n success: GOOD_DOT,\n // Aliases kept so older call sites keep compiling: attention is\n // the brand accent, information is neutral.\n warning: 'border-transparent bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--card))] text-oca-accent-ink',\n info: 'border-border bg-card text-foreground',\n // Inverted in dark mode, where ink would sit on a card of nearly its own colour.\n ink: 'border-transparent bg-oca-ink text-oca-ink-foreground dark:bg-foreground dark:text-background',\n onInk: 'border-white/15 bg-white/5 text-white/90',\n },\n },\n defaultVariants: { tone: 'neutral' },\n }\n);\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {}\n\nexport function Badge({ className, tone, ...props }: BadgeProps) {\n return <span data-ui=\"badge\" className={cn(badgeVariants({ tone }), className)} {...props} />;\n}\n\n/** A pill with a live dot: where something stands right now (\"In testing · payouts start after\"). */\nexport function StatusPill({\n className,\n children,\n pulse = true,\n ...props\n}: HTMLAttributes<HTMLSpanElement> & { pulse?: boolean }) {\n return (\n <span\n data-ui=\"status-pill\"\n className={cn(\n 'inline-flex min-h-8 w-fit items-center gap-2.5 rounded-full border border-border bg-card py-1 pl-3 pr-3.5 text-[0.875rem] leading-snug text-foreground',\n className\n )}\n {...props}\n >\n <span aria-hidden className=\"relative flex size-2 shrink-0\">\n {pulse ? (\n <span className=\"absolute inset-0 rounded-full bg-oca-orange opacity-50 motion-safe:animate-ping\" />\n ) : null}\n <span className=\"relative size-2 rounded-full bg-oca-orange\" />\n </span>\n {children}\n </span>\n );\n}\n","import type { HTMLAttributes } from 'react';\n\nimport type { SiteStatus } from '../family';\nimport { cn } from '../lib/cn';\nimport { Badge } from './badge';\n\n/*\n * Where something stands, in the family's fixed words. A site or feature is\n * live, in testing, not yet, or paused; a check on an artifact is good,\n * caution or refused. There is no free text: the words are the component, so\n * no page can invent \"LIVE · MAINNET\", \"BETA\" or \"PRO\" again.\n */\nexport type Statement = 'good' | 'caution' | 'refused';\nexport type Status = SiteStatus | Statement;\n\nconst WORD: Record<Status, string> = {\n live: 'Live',\n testing: 'In testing',\n 'not-yet': 'Not yet',\n paused: 'Paused',\n good: 'Good',\n caution: 'Caution',\n refused: 'Refused',\n};\n\nconst TONE = {\n live: 'success',\n testing: 'brand',\n 'not-yet': 'muted',\n paused: 'muted',\n good: 'success',\n caution: 'brand',\n refused: 'danger',\n} as const;\n\n/** The word for a status, for places that need it as text. */\nexport function statusWord(status: Status): string {\n return WORD[status];\n}\n\nexport interface StatusBadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n status: Status;\n}\n\nexport function StatusBadge({ status, className, ...props }: StatusBadgeProps) {\n return (\n <Badge tone={TONE[status]} data-status={status} className={cn(className)} {...props}>\n {WORD[status]}\n </Badge>\n );\n}\n","import { ChevronDown } from 'lucide-react';\nimport { useId, useState } from 'react';\n\nimport { familyByGroup, type FamilySite, type FamilySlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { Popover, PopoverContent, PopoverTrigger } from '../primitives/overlay';\nimport { StatusBadge } from '../primitives/status-badge';\n\nfunction SiteRow({ site, here, onNavigate }: { site: FamilySite; here: boolean; onNavigate?: () => void }) {\n return (\n <li>\n <a\n href={site.href}\n onClick={onNavigate}\n aria-current={here ? 'page' : undefined}\n className={cn(\n 'flex flex-col gap-0.5 rounded-xl px-3 py-2 transition-colors hover:bg-accent',\n here && 'bg-muted hover:bg-muted dark:bg-white/[0.06]'\n )}\n >\n <span className=\"flex items-center gap-2 text-[0.9375rem] font-medium leading-6\">\n {site.label}\n {site.status !== 'live' ? <StatusBadge status={site.status} /> : null}\n {here ? <span className=\"sr-only\">(this site)</span> : null}\n </span>\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{site.line}</span>\n </a>\n </li>\n );\n}\n\n/* Where each group sits. On a tablet, two columns: orangecheck over the\n protocols, the apps over the public goods. On a desk, three: orangecheck,\n the protocols, then the apps with the public goods below them, so the panel\n fits a 1280×800 screen without scrolling. Reading order stays orangecheck,\n Protocols, Apps, Public goods. */\nconst PLACE: Record<string, string> = {\n orangecheck: 'sm:col-start-1 sm:row-start-1 lg:row-span-2',\n protocol: 'sm:col-start-1 sm:row-start-2 lg:col-start-2 lg:row-start-1 lg:row-span-2',\n app: 'sm:col-start-2 sm:row-start-1 lg:col-start-3',\n 'public-good': 'sm:col-start-2 sm:row-start-2 lg:col-start-3',\n};\n\n/**\n * Every public site in the family, in its groups, one line each. `stack`\n * lays the groups in one column (a phone's menu sheet).\n */\nexport function FamilyList({\n current,\n onNavigate,\n stack = false,\n className,\n}: {\n current?: FamilySlug;\n onNavigate?: () => void;\n stack?: boolean;\n className?: string;\n}) {\n const id = useId();\n return (\n <div\n className={cn(\n 'grid grid-cols-1 gap-x-2 gap-y-4',\n // The second desk row takes the slack, so the public goods sit right under the apps.\n !stack && 'sm:grid-cols-2 lg:grid-cols-3 lg:grid-rows-[auto_1fr]',\n className\n )}\n >\n {familyByGroup().map((g) => (\n <div key={g.id} className={cn('flex flex-col gap-1', !stack && PLACE[g.id])}>\n <p id={`${id}-${g.id}`} className=\"px-3 pt-1 text-[0.8125rem] text-muted-foreground\">\n {g.label}\n </p>\n <ul aria-labelledby={`${id}-${g.id}`} className=\"flex flex-col\">\n {g.sites.map((s) => (\n <SiteRow key={s.slug} site={s} here={s.slug === current} onNavigate={onNavigate} />\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * The way between the family's sites: a small chevron beside the lockup, so\n * the lockup itself stays a link home. It opens every site, grouped, with a\n * status only where one is not live. `current` marks the site you are on.\n */\nexport function FamilyMenu({ current, className }: { current?: FamilySlug; className?: string }) {\n const [open, setOpen] = useState(false);\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n aria-label=\"All orangecheck sites\"\n className={cn(\n 'group inline-flex size-8 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors',\n 'hover:bg-accent hover:text-foreground data-[state=open]:bg-accent data-[state=open]:text-foreground',\n className\n )}\n >\n <ChevronDown aria-hidden className=\"size-4 transition-transform duration-200 group-data-[state=open]:rotate-180\" />\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n sideOffset={14}\n collisionPadding={16}\n className=\"max-h-[min(40rem,var(--radix-popover-content-available-height))] w-[min(calc(100vw-2rem),42rem)] overflow-y-auto p-3 lg:w-[min(calc(100vw-2rem),56rem)]\"\n >\n <FamilyList current={current} onNavigate={() => setOpen(false)} />\n </PopoverContent>\n </Popover>\n );\n}\n","import { ChevronDown, Menu } from 'lucide-react';\nimport Link from 'next/link';\nimport { useState, type CSSProperties, type ReactNode } from 'react';\n\nimport { Lockup, Mark } from '../brand/mark';\nimport { familyByGroup, LEGAL_LINKS, OCHK_IO, PROTOCOLS, type FamilySlug } from '../family';\nimport { cn } from '../lib/cn';\nimport type { FooterColumn, NavItem } from '../lib/nav';\nimport { Popover, PopoverContent, PopoverTrigger, Sheet, SheetContent, SheetTitle, SheetTrigger } from '../primitives/overlay';\nimport { FamilyList, FamilyMenu } from './family-menu';\n\nexport type { FooterColumn, NavItem } from '../lib/nav';\n\nfunction NavLink({\n item,\n className,\n onNavigate,\n line = false,\n}: {\n item: NavItem;\n className?: string;\n onNavigate?: () => void;\n /** Mark the active item with a bar on the header's bottom edge (the tool header). */\n line?: boolean;\n}) {\n const cls = cn(\n 'rounded-full px-3 py-2 text-[0.9375rem] transition-colors',\n item.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground',\n line && 'relative after:absolute after:inset-x-3 after:-bottom-[0.625rem] after:h-0.5 after:rounded-full',\n line && item.active && 'after:bg-foreground',\n className\n );\n if (item.external) {\n return (\n <a href={item.href} className={cls} rel=\"noreferrer\" onClick={onNavigate}>\n {item.label}\n </a>\n );\n }\n return (\n <Link href={item.href} className={cls} aria-current={item.active ? 'page' : undefined} onClick={onNavigate}>\n {item.label}\n </Link>\n );\n}\n\n/** A link with its one line, as a dropdown lists them. */\nfunction NavRow({ item, onNavigate }: { item: NavItem; onNavigate?: () => void }) {\n const body = (\n <>\n <span className=\"text-[0.9375rem] font-medium leading-6 text-foreground\">{item.label}</span>\n {item.description ? (\n <span className=\"text-[0.8125rem] leading-snug text-muted-foreground\">{item.description}</span>\n ) : null}\n </>\n );\n const cls = cn(\n 'flex flex-col gap-0.5 rounded-xl px-3 py-2 transition-colors hover:bg-accent',\n item.active && 'bg-muted hover:bg-muted dark:bg-white/[0.06]'\n );\n return item.external ? (\n <a href={item.href} className={cls} rel=\"noreferrer\" onClick={onNavigate}>\n {body}\n </a>\n ) : (\n <Link href={item.href} className={cls} aria-current={item.active ? 'page' : undefined} onClick={onNavigate}>\n {body}\n </Link>\n );\n}\n\n/** \"All protocols\" for a \"Protocols\" menu; a parent with a node for a label gets \"See all\". */\nconst seeAll = (item: NavItem) => (typeof item.label === 'string' ? `All ${item.label.toLowerCase()}` : 'See all');\n\n/** One level of links under a word in the header. */\nfunction NavDropdown({ item }: { item: NavItem }) {\n const [open, setOpen] = useState(false);\n const active = item.active || item.children?.some((c) => c.active);\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n className={cn(\n 'group inline-flex items-center gap-1 rounded-full py-2 pl-3 pr-2.5 text-[0.9375rem] transition-colors',\n active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground data-[state=open]:text-foreground'\n )}\n >\n {item.label}\n <ChevronDown aria-hidden className=\"size-3.5 transition-transform duration-200 group-data-[state=open]:rotate-180\" />\n </PopoverTrigger>\n <PopoverContent align=\"center\" sideOffset={10} className=\"w-[min(calc(100vw-2rem),26rem)] p-2\">\n <ul className=\"flex flex-col\">\n {item.children?.map((c) => (\n <li key={c.href}>\n <NavRow item={c} onNavigate={() => setOpen(false)} />\n </li>\n ))}\n </ul>\n <div className=\"mt-1.5 border-t border-border px-1 pt-1.5\">\n <NavLink\n item={{ ...item, label: seeAll(item), children: undefined }}\n className=\"block rounded-xl px-2 py-2 text-[0.875rem]\"\n onNavigate={() => setOpen(false)}\n />\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport interface SiteHeaderProps {\n home?: string;\n /** Replaces the lockup (and the product word). */\n brand?: ReactNode;\n /** The site's own word beside the lockup: \"orangecheck | stamp\". */\n product?: string;\n /** Mount the family menu beside the lockup. Pass the site's slug to mark it. */\n family?: boolean | FamilySlug;\n nav?: readonly NavItem[];\n /** A search control, set before the actions. */\n search?: ReactNode;\n actions?: ReactNode;\n /**\n * `site`: a public page's header, the navigation centred. `tool`: 56px,\n * full width, a hairline under it, the navigation after the lockup.\n */\n variant?: 'site' | 'tool';\n /** Leave the navigation out of the phone's menu (a page whose tab bar already holds it). */\n navOnPhone?: boolean;\n /** At the top of the phone's menu: links the actions hold on a wider screen. */\n menu?: ReactNode;\n className?: string;\n}\n\n/**\n * The header: lockup (and the site's word), navigation, search and actions.\n * Below md the navigation, and the family when it is on, move into one sheet;\n * the actions stay.\n */\nexport function SiteHeader({\n home = '/',\n brand,\n product,\n family,\n nav = [],\n search,\n actions,\n variant = 'site',\n navOnPhone = true,\n menu: menuExtra,\n className,\n}: SiteHeaderProps) {\n const [open, setOpen] = useState(false);\n const tool = variant === 'tool';\n const size = tool ? 24 : 28;\n const current = typeof family === 'string' ? family : undefined;\n const phoneNav = navOnPhone ? nav : [];\n const menu = phoneNav.length > 0 || Boolean(family) || Boolean(menuExtra);\n const brandNode = brand ?? (\n <span className=\"inline-flex items-center\">\n <Lockup size={size} />\n {product ? (\n <>\n <span aria-hidden className=\"mx-3 h-5 w-px bg-oca-hairline-strong\" />\n <span className=\"font-medium tracking-[-0.01em]\" style={{ fontSize: size * 0.56 }}>\n {product}\n </span>\n </>\n ) : null}\n </span>\n );\n const navigation =\n nav.length > 0 ? (\n <nav aria-label=\"Main\" className=\"hidden items-center gap-1 md:flex\">\n {nav.map((n) =>\n n.children?.length ? <NavDropdown key={n.href} item={n} /> : <NavLink key={n.href} item={n} line={tool} />\n )}\n </nav>\n ) : null;\n return (\n <header\n className={cn(\n 'sticky top-0 z-40 w-full border-b bg-background/95 backdrop-blur-md supports-[backdrop-filter]:bg-background/90',\n tool ? 'border-border' : 'border-transparent',\n className\n )}\n >\n <div\n className={cn(\n 'flex items-center justify-between gap-4',\n tool ? 'h-14 px-4 md:px-6' : 'oca-container h-16 md:h-[4.5rem]',\n // Three columns, the outer two each at least their content: the\n // navigation stays centred whatever the actions hold, so it does\n // not shift when they change (signed out to signed in).\n !tool &&\n nav.length > 0 &&\n 'md:grid md:grid-cols-[minmax(max-content,1fr)_auto_minmax(max-content,1fr)]'\n )}\n >\n <div className={cn('flex min-w-0 items-center gap-1', tool ? 'md:gap-1' : 'justify-self-start')}>\n <Link href={home} className=\"-ml-1 min-w-0 rounded-lg p-1\">\n {brandNode}\n {/* Read as \"orangecheck home\": the name starts with what the link shows. */}\n <span className=\"sr-only\"> home</span>\n </Link>\n {family ? <FamilyMenu current={current} className=\"max-md:hidden\" /> : null}\n {tool && navigation ? <div className=\"ml-5\">{navigation}</div> : null}\n </div>\n {!tool ? navigation : null}\n <div className=\"flex items-center gap-2 justify-self-end\">\n {search}\n {actions}\n {menu ? (\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger\n className=\"inline-flex size-10 items-center justify-center rounded-full text-foreground hover:bg-accent md:hidden\"\n aria-label=\"Open menu\"\n >\n <Menu className=\"size-5\" />\n </SheetTrigger>\n <SheetContent side=\"right\" className=\"pt-16\">\n <SheetTitle className=\"sr-only\">Menu</SheetTitle>\n {menuExtra ? (\n <div className={cn('flex flex-col', (phoneNav.length > 0 || family) && 'border-b border-border pb-3')}>\n {menuExtra}\n </div>\n ) : null}\n {phoneNav.length > 0 ? (\n <nav aria-label=\"Main\" className=\"flex flex-col\">\n {phoneNav.map((n) =>\n n.children?.length ? (\n <div key={n.href} className=\"flex flex-col py-2\">\n <p className=\"px-3 pb-1 text-[0.8125rem] text-muted-foreground\">{n.label}</p>\n {n.children.map((c) => (\n <NavLink\n key={c.href}\n item={c}\n className=\"rounded-xl px-3 py-2.5 text-[1.0625rem]\"\n onNavigate={() => setOpen(false)}\n />\n ))}\n </div>\n ) : (\n <NavLink\n key={n.href}\n item={n}\n className=\"rounded-xl px-3 py-3 text-[1.0625rem]\"\n onNavigate={() => setOpen(false)}\n />\n )\n )}\n </nav>\n ) : null}\n {family ? (\n <details className={cn('group', phoneNav.length > 0 && 'mt-2 border-t border-border pt-4')}>\n <summary className=\"flex cursor-pointer list-none items-center justify-between rounded-xl px-3 py-2.5 text-[1.0625rem] [&::-webkit-details-marker]:hidden\">\n All orangecheck sites\n <ChevronDown aria-hidden className=\"size-4 text-muted-foreground transition-transform group-open:rotate-180\" />\n </summary>\n <FamilyList current={current} onNavigate={() => setOpen(false)} stack className=\"mt-2\" />\n </details>\n ) : null}\n </SheetContent>\n </Sheet>\n ) : null}\n </div>\n </div>\n </header>\n );\n}\n\n/** The first thing a keyboard reaches: a way past the header to the page. */\nexport function SkipLink({ href = '#main-content', children = 'Skip to content' }: { href?: string; children?: ReactNode }) {\n return (\n <a\n href={href}\n className=\"sr-only focus:not-sr-only focus:fixed focus:left-4 focus:top-3 focus:z-50 focus:rounded-full focus:border focus:border-border focus:bg-card focus:px-4 focus:py-2 focus:text-[0.9375rem] focus:font-medium focus:text-foreground focus:shadow-md\"\n >\n {children}\n </a>\n );\n}\n\nconst BANNER_TONE = {\n neutral: 'border-border bg-muted',\n brand: 'border-[color-mix(in_oklab,var(--oca-orange)_30%,var(--border))] bg-[color-mix(in_oklab,var(--oca-orange)_9%,var(--background))]',\n danger: 'border-[color-mix(in_oklab,var(--destructive)_35%,var(--border))] bg-[color-mix(in_oklab,var(--destructive)_8%,var(--background))]',\n} as const;\n\n/**\n * One strip above the header: an outage, or a notice everyone must see. The\n * rule that shows it stays with each site; this is only how it looks. Three\n * tones, as a Notice has, and ink text on every one.\n */\nexport function SiteBanner({\n tone = 'neutral',\n children,\n action,\n className,\n}: {\n tone?: keyof typeof BANNER_TONE;\n children: ReactNode;\n /** A link to where the full story is (\"Status\"). */\n action?: ReactNode;\n className?: string;\n}) {\n return (\n <div role=\"status\" aria-live=\"polite\" data-tone={tone} className={cn('border-b text-[0.875rem]', BANNER_TONE[tone], className)}>\n <div className=\"oca-container flex flex-wrap items-center justify-between gap-x-4 gap-y-1 py-2.5\">\n <p className=\"flex min-w-0 items-baseline gap-2.5 leading-snug\">\n {tone !== 'neutral' ? (\n <span\n aria-hidden\n className={cn(\n 'size-2 shrink-0 translate-y-[-0.05em] rounded-full',\n tone === 'brand' ? 'bg-oca-orange' : 'bg-destructive'\n )}\n />\n ) : null}\n <span>{children}</span>\n </p>\n {/* On a phone the link wraps under the words, lined up with them, not the dot. */}\n {action ? <div className={cn('shrink-0 font-medium', tone !== 'neutral' && 'max-sm:pl-[1.125rem]')}>{action}</div> : null}\n </div>\n </div>\n );\n}\n\n/** A link in the footer's lists: 44px tall on phones. */\nconst FOOT_LINK = 'inline-flex min-h-11 items-center transition-colors hover:text-foreground md:min-h-0';\n\nfunction LegalRow() {\n return (\n <div className=\"flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:items-center sm:justify-between\">\n <nav aria-label=\"Legal\">\n <ul className=\"flex flex-wrap gap-x-5\">\n {LEGAL_LINKS.map((l) => (\n <li key={l.href}>\n <a href={l.href} className={FOOT_LINK}>\n {l.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n <p>© {new Date().getFullYear()} OrangeCheck</p>\n </div>\n );\n}\n\nexport interface SiteFooterProps {\n columns?: readonly FooterColumn[];\n /** Add the family's columns from the registry: orangecheck, Protocols, Apps, Public goods. */\n family?: boolean;\n /** The fixed legal row, all on ochk.io: Privacy, Terms, Security, Trademarks, Contact. */\n legal?: boolean;\n /** One row, for tools: the lockup, the protocols when `family`, legal and meta. */\n compact?: boolean;\n fineprint?: ReactNode;\n meta?: ReactNode;\n /** The mark and wordmark at display size, closing the page. */\n signature?: boolean;\n className?: string;\n}\n\n/**\n * The footer, in the deck's register: a line of fine print, columns of links,\n * the family when it is on, the legal row and the support credit. Any number\n * of columns: the lockup shares their row up to five, then takes its own.\n * Links are 44px tall on phones.\n */\nexport function SiteFooter({\n columns = [],\n family = false,\n legal = false,\n compact = false,\n fineprint,\n meta,\n signature = true,\n className,\n}: SiteFooterProps) {\n if (compact) {\n return (\n <footer className={cn('border-t border-border bg-background text-[0.875rem] text-muted-foreground', className)}>\n <div className=\"oca-container flex flex-col gap-x-8 gap-y-3 py-5 lg:flex-row lg:items-center lg:justify-between\">\n <div className=\"flex flex-wrap items-center gap-x-6 gap-y-1\">\n <a href={OCHK_IO} className=\"rounded-lg text-foreground\">\n <Lockup size={22} />\n </a>\n {family ? (\n <nav aria-label=\"Protocols\">\n <ul className=\"flex flex-wrap gap-x-4\">\n {PROTOCOLS.map((p) => (\n <li key={p.slug}>\n <a href={p.pageHref} className={FOOT_LINK}>\n {p.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n ) : null}\n </div>\n {legal || meta ? (\n <div className=\"flex flex-col gap-x-6 gap-y-2 sm:flex-row sm:flex-wrap sm:items-center\">\n {legal ? <LegalRow /> : null}\n {meta}\n </div>\n ) : null}\n </div>\n </footer>\n );\n }\n const cols: FooterColumn[] = [\n ...columns,\n ...(family\n ? familyByGroup().map((g) => ({\n // The lockup above already says orangecheck.\n heading: g.id === 'orangecheck' ? 'Start here' : g.label,\n links: g.sites.map((s) => ({ href: s.href, label: s.label, external: true })),\n }))\n : []),\n ];\n const n = cols.length;\n const inline = n <= 5;\n const grid = {\n '--oca-footer-md': `repeat(${Math.max(1, Math.min(n, 4))}, minmax(0, 1fr))`,\n '--oca-footer-lg': inline\n ? `minmax(0, 1.3fr) repeat(${Math.max(1, n)}, minmax(0, 1fr))`\n : `repeat(${Math.min(n, 6)}, minmax(0, 1fr))`,\n } as CSSProperties;\n return (\n <footer className={cn('border-t border-border bg-background', className)}>\n <div\n style={grid}\n className=\"oca-container grid grid-cols-2 gap-x-6 gap-y-10 py-14 md:grid-cols-[var(--oca-footer-md)] md:py-16 lg:grid-cols-[var(--oca-footer-lg)]\"\n >\n <div className={cn('col-span-full flex flex-col gap-4', inline && 'lg:col-span-1')}>\n <Lockup size={26} />\n {fineprint ? <p className=\"max-w-xs text-[0.9375rem] leading-relaxed text-muted-foreground\">{fineprint}</p> : null}\n </div>\n {cols.map((col, i) => {\n // On a phone an odd last column takes the whole row, its links in two\n // columns, instead of sitting alone beside an empty half.\n const spans = n % 2 === 1 && i === n - 1;\n return (\n <div\n key={col.heading}\n className={cn('flex min-w-0 flex-col gap-1', spans && 'col-span-2 md:col-span-1')}\n >\n <p className=\"mb-2 text-[0.875rem] font-medium\">{col.heading}</p>\n <div className={cn('flex flex-col gap-1', spans && 'grid grid-cols-2 gap-x-6 md:flex md:flex-col')}>\n {col.links.map((l) => (\n <NavLink\n key={l.href}\n item={l}\n className=\"-mx-3 py-2.5 text-[0.9375rem] md:py-1.5\"\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n {signature ? (\n <div aria-hidden className=\"oca-container select-none overflow-hidden pb-8 md:pb-12\">\n <div className=\"flex items-end gap-[0.18em] text-[clamp(3rem,11.5vw,10rem)] leading-[0.78] tracking-[-0.065em] [font-family:var(--oc-font-display)]\">\n <span className=\"mb-[0.06em] inline-block w-[1.1em] shrink-0\">\n <Mark className=\"block h-auto w-full\" />\n </span>\n <span>orangecheck</span>\n </div>\n </div>\n ) : null}\n {legal || meta ? (\n <div className=\"oca-container\">\n {/* The rule spans the content, not the gutters. */}\n <div className=\"flex flex-col gap-3 border-t border-border py-6 text-[0.875rem] text-muted-foreground\">\n {legal ? <LegalRow /> : null}\n {meta}\n </div>\n </div>\n ) : null}\n </footer>\n );\n}\n","import { 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 Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { IsoCheck } from '../brand/iso-check';\nimport { Lockup } from '../brand/mark';\nimport { cn } from '../lib/cn';\n\n/**\n * The page a sign-in happens on: a form column with the lockup, a display\n * title, one line and the ceremony, and from lg an ink column with a picture.\n * The ceremony itself (OcSignIn, a SignMessage, a passkey prompt) is the\n * children; this is only the frame, so ochk.io's /signin and /sudo and every\n * tool's sign-in page look the same.\n */\nexport function SignInFrame({\n title = 'Sign in',\n lead,\n children,\n error,\n fineprint,\n brand,\n home = '/',\n back,\n art,\n caption,\n className,\n}: {\n title?: ReactNode;\n /** One line under the title. */\n lead?: ReactNode;\n /** The ceremony. */\n children: ReactNode;\n /** A failure the ceremony could not show itself. */\n error?: ReactNode;\n /** Small print under the ceremony: where the code goes, what is kept. */\n fineprint?: ReactNode;\n /** Replaces the lockup in the corner. */\n brand?: ReactNode;\n home?: string;\n /** The link opposite the lockup. Defaults to \"Back to home\"; `null` leaves it out. */\n back?: ReactNode;\n /** The picture in the ink column. Defaults to the check. */\n art?: ReactNode;\n /** A line at the foot of the ink column. */\n caption?: ReactNode;\n className?: string;\n}) {\n return (\n <main\n id=\"main-content\"\n className={cn('grid min-h-dvh grid-cols-1 bg-background text-foreground lg:grid-cols-2', className)}\n >\n <section className=\"flex flex-col px-4 pb-8 pt-5 sm:px-8 lg:px-14 lg:pt-8\">\n <header className=\"flex items-center justify-between gap-4\">\n <Link href={home} className=\"w-fit rounded-lg\">\n {brand ?? <Lockup size={28} />}\n <span className=\"sr-only\"> home</span>\n </Link>\n {back === undefined ? (\n <Link\n href={home}\n className=\"text-[0.9375rem] text-muted-foreground underline-offset-4 hover:text-foreground hover:underline\"\n >\n Back to home\n </Link>\n ) : (\n back\n )}\n </header>\n <div className=\"mx-auto flex w-full max-w-[25rem] flex-1 flex-col justify-center gap-9 py-12\">\n <div className=\"flex flex-col gap-3\">\n <h1 className=\"oca-display-2\">{title}</h1>\n {lead ? <p className=\"oca-lead\">{lead}</p> : null}\n </div>\n <div>{children}</div>\n {error ? (\n <p role=\"alert\" className=\"text-[0.9375rem] text-destructive\">\n {error}\n </p>\n ) : null}\n {fineprint ? <p className=\"text-[0.8125rem] leading-relaxed text-muted-foreground\">{fineprint}</p> : null}\n </div>\n </section>\n <aside\n aria-hidden\n className=\"relative hidden flex-col justify-between gap-10 overflow-hidden border-l border-[var(--oca-band-line)] bg-oca-ink p-14 text-oca-ink-foreground lg:flex\"\n >\n <div className=\"flex flex-1 items-center justify-center\">{art ?? <IsoCheck size={340} settle tilt className=\"max-w-full\" />}</div>\n {caption ? <div className=\"flex max-w-[24rem] flex-col gap-3\">{caption}</div> : null}\n </aside>\n </main>\n );\n}\n","import * 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 { 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 { 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 { 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 { 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 { ChevronDown, ChevronRight, PanelLeft } from 'lucide-react';\nimport Link from 'next/link';\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { OnThisPage, useHeadings } from '../components/docs';\nimport type { TocItem } from '../components/hero';\nimport { DOCS_HREF, OCHK_IO, OCHK_IO_FOOTER, OCHK_IO_NAV } from '../family';\nimport { cn } from '../lib/cn';\nimport type { NavItem } from '../lib/nav';\nimport { Badge } from '../primitives/badge';\nimport { Sheet, SheetContent, SheetTitle, SheetTrigger } from '../primitives/overlay';\nimport { StatusBadge, type Status } from '../primitives/status-badge';\nimport { SiteFooter, SiteHeader, SkipLink } from './site';\n\n/* ── The docs' navigation ────────────────────────────────────────────── */\n\nexport interface DocsNavItem {\n href: string;\n label: ReactNode;\n /** A status word (\"testing\") or a small badge of your own. */\n badge?: Status | ReactNode;\n}\n\nexport interface DocsNavSection {\n label: string;\n items: DocsNavItem[];\n}\n\nconst STATUS_WORDS = new Set<string>(['live', 'testing', 'not-yet', 'paused', 'good', 'caution', 'refused']);\n\n/** \"/stamp/verify/\" and \"/stamp/verify?x#y\" are the page \"/stamp/verify\". */\nconst pathOf = (href: string) => href.split(/[?#]/)[0]!.replace(/(.)\\/$/, '$1');\n\n/**\n * The docs' sections, each folding open. The section holding this page is\n * always open and the page is marked with a bar beside it; other sections\n * open on a press and close again when you move to another section.\n */\nexport function DocsNav({\n sections,\n current,\n onNavigate,\n className,\n}: {\n sections: readonly DocsNavSection[];\n /** This page's path, as the items' hrefs write it. */\n current: string;\n onNavigate?: () => void;\n className?: string;\n}) {\n const here = pathOf(current);\n const activeSection = useMemo(\n () => sections.findIndex((s) => s.items.some((i) => pathOf(i.href) === here)),\n [sections, here]\n );\n const [peeked, setPeeked] = useState<Set<number>>(() => new Set());\n useEffect(() => setPeeked(new Set()), [activeSection]);\n const activeRef = useRef<HTMLAnchorElement>(null);\n useEffect(() => {\n const id = requestAnimationFrame(() => activeRef.current?.scrollIntoView({ block: 'nearest' }));\n return () => cancelAnimationFrame(id);\n }, [here]);\n const base = useId();\n return (\n <nav aria-label=\"Docs\" className={cn('flex flex-col gap-0.5', className)}>\n {sections.map((section, si) => {\n const isActive = si === activeSection;\n const open = isActive || peeked.has(si);\n const panel = `${base}-s${si}`;\n return (\n <div key={section.label}>\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={panel}\n onClick={() => {\n if (isActive) return;\n setPeeked((p) => {\n const n = new Set(p);\n if (n.has(si)) n.delete(si);\n else n.add(si);\n return n;\n });\n }}\n className={cn(\n 'flex min-h-9 w-full items-center justify-between gap-2 rounded-lg px-2.5 py-1.5 text-left text-[0.875rem] transition-colors',\n isActive ? 'font-medium text-foreground' : 'text-muted-foreground hover:bg-accent hover:text-foreground',\n isActive && 'cursor-default'\n )}\n >\n {section.label}\n <ChevronRight\n aria-hidden\n className={cn('size-3.5 shrink-0 text-oca-subtle transition-transform duration-200', open && 'rotate-90')}\n />\n </button>\n <ul id={panel} hidden={!open} className=\"mb-2 ml-2.5 mt-0.5 border-l border-border\">\n {section.items.map((item) => {\n const on = pathOf(item.href) === here;\n const badge =\n typeof item.badge === 'string' && STATUS_WORDS.has(item.badge) ? (\n <StatusBadge status={item.badge as Status} />\n ) : item.badge ? (\n <Badge tone=\"muted\">{item.badge}</Badge>\n ) : null;\n return (\n <li key={item.href}>\n <Link\n href={item.href}\n ref={on ? activeRef : undefined}\n onClick={onNavigate}\n aria-current={on ? 'page' : undefined}\n className={cn(\n '-ml-px flex min-h-9 items-center gap-2 border-l-2 py-1.5 pl-3.5 pr-2 text-[0.875rem] leading-snug transition-colors',\n on\n ? 'border-foreground font-medium text-foreground'\n : 'border-transparent text-muted-foreground hover:border-oca-hairline-strong hover:text-foreground'\n )}\n >\n <span className=\"min-w-0 flex-1\">{item.label}</span>\n {badge}\n </Link>\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n </nav>\n );\n}\n\n/* ── The shell ───────────────────────────────────────────────────────── */\n\n/** ochk.io's navigation with Docs marked: the docs are a part of ochk.io, not a site beside it. */\nexport const DOCS_HEADER_NAV: readonly NavItem[] = OCHK_IO_NAV.map((n) => (n.href === DOCS_HREF ? { ...n, active: true } : n));\n\nexport interface DocsShellProps {\n /** The docs' sections, for the sidebar and the phone's menu. */\n nav: readonly DocsNavSection[];\n /** This page's path, as the nav's hrefs write it. */\n current: string;\n /** Replace the header. Default: ochk.io's, with Docs marked. */\n header?: ReactNode;\n /** The default header's search control (a SearchDialog). */\n search?: ReactNode;\n /** The default header's actions (a SessionAccount, a Sign in). */\n actions?: ReactNode;\n /** Above the page: Breadcrumbs. */\n breadcrumbs?: ReactNode;\n /**\n * The page's sections. Default: read from the page's h2s and h3s once it\n * renders, again whenever `current` changes.\n */\n toc?: TocItem[];\n /** Under the page: DocsPager. */\n pager?: ReactNode;\n /** Replace the footer. Default: ochk.io's, with the family and the legal row. */\n footer?: ReactNode;\n children: ReactNode;\n}\n\n/**\n * The docs' frame, in ochk.io's header and footer: the sections on the\n * left, the page in the middle, what is on it on the right. Below lg the\n * sections open from a bar under the header; below xl \"On this page\" folds\n * above the text. The page's text sits in #docs-content.\n */\nexport function DocsShell({\n nav,\n current,\n header,\n search,\n actions,\n breadcrumbs,\n toc,\n pager,\n footer,\n children,\n}: DocsShellProps) {\n const [menu, setMenu] = useState(false);\n useEffect(() => setMenu(false), [current]);\n const read = useHeadings('#docs-content', current);\n const items = toc ?? read.items;\n const activeId = toc ? undefined : read.activeId;\n const here = pathOf(current);\n const place = useMemo(() => {\n for (const s of nav) {\n const it = s.items.find((i) => pathOf(i.href) === here);\n if (it) return { section: s.label, page: it.label };\n }\n return null;\n }, [nav, here]);\n return (\n <div className=\"flex min-h-dvh flex-col bg-background\">\n <SkipLink />\n {header ?? <SiteHeader home={OCHK_IO} family=\"docs\" nav={DOCS_HEADER_NAV} search={search} actions={actions} />}\n {/* Below lg: the sections behind one button, and where you are beside it. */}\n <div className=\"sticky top-16 z-30 border-b border-border bg-background/95 backdrop-blur-md supports-[backdrop-filter]:bg-background/90 md:top-[4.5rem] lg:hidden\">\n <div className=\"oca-container flex h-12 items-center gap-2\">\n <Sheet open={menu} onOpenChange={setMenu}>\n <SheetTrigger className=\"-ml-2 inline-flex h-10 min-w-0 items-center gap-2 rounded-full px-2.5 text-[0.875rem] hover:bg-accent\">\n <PanelLeft aria-hidden className=\"size-[1.125rem] shrink-0\" />\n <span className=\"sr-only\">Docs menu. </span>\n {place ? (\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span className=\"shrink-0 text-muted-foreground\">{place.section}</span>\n <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-oca-subtle\" />\n <span className=\"truncate font-medium\">{place.page}</span>\n </span>\n ) : (\n <span className=\"font-medium\">Docs</span>\n )}\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"w-[min(88vw,22rem)] gap-0 p-0\">\n <div className=\"border-b border-border px-5 py-4 pr-14\">\n <SheetTitle className=\"text-[1.0625rem] font-medium\">Docs</SheetTitle>\n </div>\n <div className=\"overflow-y-auto p-3\">\n <DocsNav sections={nav} current={current} onNavigate={() => setMenu(false)} />\n </div>\n </SheetContent>\n </Sheet>\n </div>\n </div>\n <div className=\"oca-container flex-1\">\n <div className=\"lg:grid lg:grid-cols-[13.5rem_minmax(0,1fr)] lg:gap-x-10 xl:grid-cols-[13.5rem_minmax(0,1fr)_11rem]\">\n <div className=\"sticky top-[4.5rem] hidden max-h-[calc(100dvh-4.5rem)] self-start overflow-y-auto overscroll-contain py-8 pr-1 lg:block\">\n <DocsNav sections={nav} current={current} />\n </div>\n <main id=\"main-content\" className=\"min-w-0 pb-16 pt-6 md:pt-8\">\n {/* Below lg the bar under the header already says where you are. */}\n {breadcrumbs ? <div className=\"mb-6 max-lg:hidden\">{breadcrumbs}</div> : null}\n {items.length > 1 ? (\n <details className=\"group mb-8 rounded-2xl border border-border bg-card xl:hidden\">\n <summary className=\"flex min-h-12 cursor-pointer list-none items-center justify-between px-4 text-[0.9375rem] font-medium [&::-webkit-details-marker]:hidden\">\n On this page\n <ChevronDown aria-hidden className=\"size-4 text-muted-foreground transition-transform group-open:rotate-180\" />\n </summary>\n <OnThisPage items={items} activeId={activeId} title={null} className=\"px-4 pb-4\" />\n </details>\n ) : null}\n <article id=\"docs-content\" className=\"max-w-[46rem]\">\n {children}\n </article>\n {pager ? <div className=\"mt-16 max-w-[46rem]\">{pager}</div> : null}\n </main>\n <div className=\"sticky top-[4.5rem] hidden max-h-[calc(100dvh-4.5rem)] self-start overflow-y-auto py-10 xl:block\">\n {items.length > 1 ? <OnThisPage items={items} activeId={activeId} /> : null}\n </div>\n </div>\n </div>\n {footer ?? <SiteFooter columns={OCHK_IO_FOOTER} family legal signature={false} />}\n </div>\n );\n}\n","import { ChevronRight, Menu, Moon, Sun, SunMoon } from 'lucide-react';\nimport Link from 'next/link';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useMemo, useState, type ReactNode } from 'react';\n\nimport { Lockup } from '../brand/mark';\nimport { cn } from '../lib/cn';\nimport { ShellContext } from '../lib/shell-context';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Sheet,\n SheetContent,\n SheetTitle,\n SheetTrigger,\n} from '../primitives/overlay';\n\nexport interface ShellNavItem {\n href: string;\n label: string;\n icon?: ReactNode;\n active?: boolean;\n /** A count or a dot beside the label (unread, needs attention). */\n badge?: ReactNode;\n}\n\nexport interface ShellNavGroup {\n /** Omit for the first, unlabeled group. */\n label?: string;\n items: ShellNavItem[];\n}\n\n/**\n * A part of the app with its own pages: \"You\", \"Build\", \"Operate\", \"Admin\".\n * The sidebar lists one section's pages at a time, under a switcher.\n */\nexport interface ShellSection {\n id: string;\n /** Short, for the switcher: one word. */\n label: string;\n /** The section's eyebrow on its pages; defaults to `label`. */\n title?: string;\n /** Where the switcher goes: the section's first page. */\n href: string;\n groups: ShellNavGroup[];\n}\n\nexport function SideNav({ groups, onNavigate }: { groups: ShellNavGroup[]; onNavigate?: () => void }) {\n return (\n <nav aria-label=\"Pages\" className=\"flex flex-col gap-5\">\n {groups.map((g, gi) => (\n <div key={g.label ?? gi} className=\"flex flex-col gap-0.5\">\n {g.label ? <p className=\"px-3 pb-1 text-[0.8125rem] text-muted-foreground\">{g.label}</p> : null}\n {g.items.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n onClick={onNavigate}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex h-9 items-center gap-3 rounded-xl px-3 text-[0.9375rem] transition-colors',\n '[&_svg]:size-[1.0625rem] [&_svg]:shrink-0',\n it.active\n ? 'bg-card text-foreground shadow-sm ring-1 ring-border [&_svg]:text-foreground'\n : 'text-muted-foreground hover:bg-accent hover:text-foreground'\n )}\n >\n {it.icon}\n <span className=\"min-w-0 flex-1 truncate\">{it.label}</span>\n {it.badge ? <span className=\"shrink-0\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n ))}\n </nav>\n );\n}\n\nfunction SectionSwitch({\n sections,\n current,\n onNavigate,\n}: {\n sections: ShellSection[];\n current: ShellSection;\n onNavigate?: () => void;\n}) {\n // Up to three fit one row of the sidebar; four go two by two, so no label\n // is ever cut short.\n const cols = sections.length <= 3 ? sections.length : 2;\n return (\n <nav\n aria-label=\"Sections\"\n className={cn('grid gap-1 bg-muted p-1', cols === sections.length ? 'rounded-full' : 'rounded-[1.25rem]')}\n style={{ gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))` }}\n >\n {sections.map((sec) => {\n const on = sec.id === current.id;\n return (\n <Link\n key={sec.id}\n href={sec.href}\n onClick={onNavigate}\n aria-current={on ? 'true' : undefined}\n className={cn(\n 'flex h-8 min-w-0 items-center justify-center rounded-full px-1.5 text-[0.8125rem] font-medium transition-colors',\n on ? 'bg-card text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span className=\"truncate\">{sec.label}</span>\n </Link>\n );\n })}\n </nav>\n );\n}\n\n/** The phone's way around a small app: every page one tap away, under the thumb. */\nexport function TabBar({ items }: { items: ShellNavItem[] }) {\n return (\n <nav\n aria-label=\"Pages\"\n data-oca-tabbar=\"\"\n className=\"fixed inset-x-0 bottom-0 z-40 border-t border-border bg-background/90 pb-[env(safe-area-inset-bottom)] backdrop-blur-md md:hidden\"\n >\n <div\n className=\"mx-auto grid h-14 max-w-[32rem] px-1.5\"\n style={{ gridTemplateColumns: `repeat(${items.length}, minmax(0, 1fr))` }}\n >\n {items.map((it) => (\n <Link\n key={it.href}\n href={it.href}\n aria-current={it.active ? 'page' : undefined}\n className={cn(\n 'flex min-w-0 flex-col items-center justify-center gap-1 rounded-2xl text-[0.6875rem] leading-none outline-none transition-colors [-webkit-tap-highlight-color:transparent] focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n it.active ? 'text-foreground' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <span\n className={cn(\n 'relative flex h-7 w-12 items-center justify-center rounded-full transition-[background-color,box-shadow] duration-200',\n '[&_svg]:size-[1.125rem] [&_svg]:shrink-0',\n it.active ? 'bg-card shadow-sm ring-1 ring-border [&_svg]:stroke-2' : '[&_svg]:stroke-[1.75]'\n )}\n >\n {it.icon}\n {it.badge ? (\n <span aria-hidden className=\"absolute right-2.5 top-0.5 size-2 rounded-full bg-oca-orange ring-2 ring-background\" />\n ) : null}\n </span>\n <span className=\"max-w-full truncate px-0.5\">{it.label}</span>\n {it.badge ? <span className=\"sr-only\">{it.badge}</span> : null}\n </Link>\n ))}\n </div>\n </nav>\n );\n}\n\n/** Two to five pages, each with an icon, fit a tab bar. More, or sections, keep the drawer. */\nexport function tabsFor(groups: ShellNavGroup[]): ShellNavItem[] | null {\n const items = groups.flatMap((g) => g.items);\n return items.length >= 2 && items.length <= 5 && items.every((it) => it.icon) ? items : null;\n}\n\nconst activeItem = (groups: ShellNavGroup[]) => groups.flatMap((g) => g.items).find((it) => it.active);\n\n// Bundlers replace process.env.NODE_ENV; the typeof guard covers one that doesn't.\ndeclare const process: { env: { NODE_ENV?: string } } | undefined;\n\nconst warned = new Set<string>();\n\nfunction warnDuplicateLabels(groups: ShellNavGroup[]) {\n if (typeof process === 'undefined' || process.env.NODE_ENV === 'production') return;\n const seen = new Set<string>();\n for (const it of groups.flatMap((g) => g.items)) {\n if (seen.has(it.label) && !warned.has(it.label)) {\n warned.add(it.label);\n console.warn(`AppShell: two pages are labelled \"${it.label}\"; give each its own name.`);\n }\n seen.add(it.label);\n }\n}\n\n/**\n * The signed-in frame: a quiet sidebar on the canvas, content on the right.\n *\n * Give it `sections` and the sidebar shows a switcher (only when there is more\n * than one) and the current section's pages, so it never outgrows the screen;\n * `persistent` groups (Account) follow every section. The section is the one\n * holding an active item, or `activeSection`. On phones a top bar carries the\n * wordmark and the account, a strip under it names the section and page, and\n * the sidebar opens as a sheet. `nav` (flat groups) still works for a simple\n * app, and when it holds two to five pages, each with an icon, phones get a\n * tab bar instead: the pages sit under the thumb, the strip and the menu\n * button go (the sheet stays for a `footer`, without the pages), and tablets\n * keep the sheet. Pages get the section through context: PageHeader uses it\n * as its eyebrow. The account control and any banner are slots.\n */\nexport function AppShell({\n nav,\n sections,\n activeSection,\n page: pageOverride,\n persistent = [],\n home = '/',\n account,\n banner,\n footer,\n children,\n className,\n}: {\n /** Flat groups, for an app without sections. */\n nav?: ShellNavGroup[];\n sections?: ShellSection[];\n activeSection?: string;\n /** The page's name for the place strip, when it is not a nav item of its own. */\n page?: string;\n /** Groups shown under every section, after its own. */\n persistent?: ShellNavGroup[];\n home?: string;\n account?: ReactNode;\n banner?: ReactNode;\n footer?: ReactNode;\n children: ReactNode;\n className?: string;\n}) {\n const [open, setOpen] = useState(false);\n const current =\n sections && sections.length > 0\n ? (sections.find((sec) => sec.id === activeSection) ??\n sections.find((sec) => activeItem(sec.groups)) ??\n sections[0]!)\n : undefined;\n const groups = current ? [...current.groups, ...persistent] : [...(nav ?? []), ...persistent];\n warnDuplicateLabels(groups);\n const tabs = current ? null : tabsFor(groups);\n const page = activeItem(groups);\n const place = useMemo(\n () => ({\n section: current ? (current.title ?? current.label) : undefined,\n page: pageOverride ?? page?.label,\n }),\n [current, page?.label, pageOverride]\n );\n const switcher =\n sections && current && sections.length > 1 ? (\n <SectionSwitch sections={sections} current={current} onNavigate={() => setOpen(false)} />\n ) : null;\n return (\n <ShellContext.Provider value={place}>\n <div\n className={cn(\n 'min-h-dvh bg-background',\n tabs && 'max-md:pb-[calc(3.5rem_+_env(safe-area-inset-bottom))]',\n className\n )}\n >\n <div className=\"sticky top-0 z-40 border-b border-border bg-background/90 backdrop-blur-md lg:hidden\">\n <div className=\"flex h-14 items-center gap-2 px-3\">\n <Sheet open={open} onOpenChange={setOpen}>\n <SheetTrigger\n className={cn(\n 'inline-flex size-10 items-center justify-center rounded-full hover:bg-accent',\n // The tab bar holds every page; the sheet is left for a footer.\n tabs && !footer && 'max-md:hidden'\n )}\n aria-label=\"Open navigation\"\n >\n <Menu className=\"size-5\" />\n </SheetTrigger>\n <SheetContent side=\"left\" className=\"flex flex-col gap-6 overflow-y-auto p-4 pt-16\">\n <SheetTitle className=\"sr-only\">Navigation</SheetTitle>\n {switcher}\n <div className={tabs ? 'max-md:hidden' : undefined}>\n <SideNav groups={groups} onNavigate={() => setOpen(false)} />\n </div>\n {footer ? <div className=\"mt-auto flex flex-col gap-3\">{footer}</div> : null}\n </SheetContent>\n </Sheet>\n <Link href={home} aria-label=\"Home\" className=\"rounded-lg p-1\">\n <Lockup size={22} />\n </Link>\n <div className=\"ml-auto flex items-center\">{account}</div>\n </div>\n {place.page ? (\n <div\n className={cn(\n 'flex h-9 items-center gap-1.5 border-t border-border px-4 text-[0.875rem]',\n // The active tab already names the page.\n tabs && !pageOverride && 'max-md:hidden'\n )}\n >\n {place.section ? (\n <>\n <span className=\"shrink-0 text-muted-foreground\">{place.section}</span>\n <ChevronRight aria-hidden className=\"size-3.5 shrink-0 text-muted-foreground\" />\n </>\n ) : null}\n <span className=\"truncate font-medium\">{place.page}</span>\n </div>\n ) : null}\n </div>\n <div className=\"mx-auto flex w-full max-w-[90rem]\">\n <aside className=\"sticky top-0 hidden h-dvh w-[17rem] shrink-0 flex-col gap-6 overflow-y-auto px-4 py-6 lg:flex\">\n <Link href={home} className=\"px-2\" aria-label=\"Home\">\n <Lockup size={26} />\n </Link>\n {switcher}\n <SideNav groups={groups} />\n <div className=\"mt-auto flex flex-col gap-3\">{footer}</div>\n </aside>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"hidden h-[4.5rem] items-center justify-end gap-3 px-8 lg:flex\">{account}</div>\n {banner ? <div className=\"px-4 pb-2 pt-4 md:px-8 lg:pt-0\">{banner}</div> : null}\n <main id=\"main-content\" className=\"flex-1 px-4 pb-16 pt-6 md:px-8 lg:pt-2\">\n {/* One width for every signed-in page. */}\n <div className=\"mx-auto w-full max-w-[72rem]\">{children}</div>\n </main>\n </div>\n </div>\n {tabs ? <TabBar items={tabs} /> : null}\n </div>\n </ShellContext.Provider>\n );\n}\n\nexport interface AccountMenuItem {\n label: string;\n href?: string;\n onSelect?: () => void;\n icon?: ReactNode;\n destructive?: boolean;\n}\n\n/** The account button: initial + short id, a menu of items. */\nexport function AccountMenu({\n name,\n detail,\n items,\n nameFrom = 'sm',\n}: {\n name: string;\n /** A second line: the short did, an address. */\n detail?: string;\n items: (AccountMenuItem | 'separator')[];\n /** The width from which the name shows beside the initial. A header with\n * navigation beside it needs the room until lg. */\n nameFrom?: 'sm' | 'lg';\n}) {\n const initial = name.trim().charAt(0).toUpperCase() || '·';\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className={cn(\n 'inline-flex h-10 items-center gap-2.5 rounded-full border border-border bg-card pl-1 pr-1 text-[0.9375rem] outline-none transition-colors hover:border-oca-hairline-strong focus-visible:ring-2 focus-visible:ring-ring',\n nameFrom === 'lg' ? 'lg:pr-3.5' : 'sm:pr-3.5'\n )}\n aria-label={`${name}, account menu`}\n >\n {/* The initial is drawn, not written: the button's text is the name it is read by. */}\n <span\n aria-hidden\n data-initial={initial}\n className=\"flex size-8 items-center justify-center rounded-full bg-foreground text-[0.8125rem] font-medium text-background before:content-[attr(data-initial)]\"\n />\n <span className={cn('max-w-[10rem] truncate', nameFrom === 'lg' ? 'max-lg:hidden' : 'max-sm:hidden')}>\n {name}\n </span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64\">\n <DropdownMenuLabel className=\"flex flex-col gap-0.5\">\n <span className=\"truncate text-[0.9375rem] font-medium text-foreground\">{name}</span>\n {detail ? <span className=\"truncate font-mono text-[0.75rem]\">{detail}</span> : null}\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {items.map((it, i) =>\n it === 'separator' ? (\n <DropdownMenuSeparator key={`sep-${i}`} />\n ) : it.href ? (\n <DropdownMenuItem key={it.label} asChild destructive={it.destructive}>\n <Link href={it.href}>\n {it.icon}\n {it.label}\n </Link>\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem key={it.label} onSelect={it.onSelect} destructive={it.destructive}>\n {it.icon}\n {it.label}\n </DropdownMenuItem>\n )\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n/** Light, dark, or follow the system: one button that cycles. */\nexport function ThemeToggle({ className }: { className?: string }) {\n const { theme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n const current = mounted ? (theme ?? 'system') : 'system';\n const next = current === 'light' ? 'dark' : current === 'dark' ? 'system' : 'light';\n const Icon = current === 'light' ? Sun : current === 'dark' ? Moon : SunMoon;\n return (\n <button\n type=\"button\"\n onClick={() => setTheme(next)}\n aria-label={`Theme: ${current}. Switch to ${next}`}\n title={`Theme: ${current}`}\n className={cn(\n 'inline-flex size-10 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n className\n )}\n >\n <Icon className=\"size-[1.125rem]\" />\n </button>\n );\n}\n","import { ArrowUpRight, CircleUser, LogOut } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport type { ToolItem } from '../components/tools';\nimport { protocolSite, type ProtocolSlug } from '../family';\nimport { cn } from '../lib/cn';\nimport { DensityProvider } from '../lib/density';\nimport { Button } from '../primitives/button';\nimport { StatusBadge } from '../primitives/status-badge';\nimport { AccountMenu, SideNav, TabBar, tabsFor, ThemeToggle, type AccountMenuItem } from './app-shell';\nimport { SiteFooter, SiteHeader, SkipLink } from './site';\n\n/* ── The account slot ────────────────────────────────────────────────── */\n\n/** Where the session stands: being checked, signed in, signed out, or the check failed. */\nexport type SessionState = 'checking' | 'in' | 'out' | 'unknown';\n\nexport const OCHK_APP_ACCOUNT = 'https://ochk.app/me/account';\n\n/**\n * The header's account control, for any session source: the account menu\n * when signed in, \"Sign in\" when not. While the check runs, the button holds\n * its place unseen, so the header never shifts and a signed-in person never\n * sees \"Sign in\" flash. A failed check offers the account page, which works\n * either way. SessionAccount (./session) drives it from auth-client.\n */\nexport function SessionAccountView({\n state,\n name,\n detail,\n items = [],\n signInHref,\n signInLabel = 'Sign in',\n accountHref = OCHK_APP_ACCOUNT,\n onSignOut,\n nameFrom = 'lg',\n}: {\n state: SessionState;\n /** The account's name, as it chose to be shown. */\n name?: string;\n /** A second line: a short address. */\n detail?: string;\n /** This site's own items, above \"Your account\". */\n items?: (AccountMenuItem | 'separator')[];\n signInHref: string;\n signInLabel?: string;\n /** Where \"Your account\" goes: ochk.app. */\n accountHref?: string;\n onSignOut?: () => void;\n nameFrom?: 'sm' | 'lg';\n}) {\n if (state === 'in') {\n return (\n <AccountMenu\n name={name || 'Your account'}\n detail={detail}\n nameFrom={nameFrom}\n items={[\n ...items,\n ...(items.length > 0 ? (['separator'] as const) : []),\n { label: 'Your account', href: accountHref, icon: <CircleUser /> },\n 'separator',\n { label: 'Sign out', onSelect: onSignOut, icon: <LogOut /> },\n ]}\n />\n );\n }\n if (state === 'unknown') {\n return (\n <Button asChild size=\"sm\" variant=\"secondary\">\n <a href={accountHref}>Your account</a>\n </Button>\n );\n }\n return (\n // No box of its own: it sits exactly where the signed-in chip will. While checking it is only unseen.\n <span className={state === 'checking' ? 'contents invisible' : 'contents'} aria-hidden={state === 'checking' || undefined}>\n <Button asChild size=\"sm\" variant=\"secondary\" tabIndex={state === 'checking' ? -1 : undefined}>\n <a href={signInHref}>{signInLabel}</a>\n </Button>\n </span>\n );\n}\n\n/* ── The shell ───────────────────────────────────────────────────────── */\n\nexport interface ToolShellProps {\n /** The protocol these tools serve. Its word, its page on ochk.io and its status come from the registry. */\n protocol: ProtocolSlug;\n /** create · verify · discover · playground, in the family's words; give each an icon for the phone's tab bar. */\n tools: readonly ToolItem[];\n /** Where the lockup and the protocol's word go: the tools' dashboard. */\n home?: string;\n /** The account control: SessionAccount, or SessionAccountView. */\n account?: ReactNode;\n /** List the tools in a rail on the left from lg (a dashboard page), not in the header. */\n rail?: boolean;\n /** Under the tools in the rail: Docs, Spec. */\n railFooter?: ReactNode;\n /**\n * `tool`: pages that scroll, with a footer. `app`: the full window, no\n * footer, the page managing its own scroll (an inbox, a workspace).\n */\n variant?: 'tool' | 'app';\n /** A SiteBanner above the header. */\n banner?: ReactNode;\n /** Replace the footer, or `false` for none. Default: the compact family footer. */\n footer?: ReactNode | false;\n children: ReactNode;\n}\n\n/**\n * The frame for a protocol's tools: a slim full-width header (orangecheck ·\n * stamp, the family menu, the tools, \"About stamp\" on ochk.io, the status\n * when it is not live, the account, the theme), the page, and the compact\n * family footer. Everything inside is set at compact density. On a phone the\n * tools move to a tab bar under the thumb when there are two to five, each\n * with an icon.\n */\nexport function ToolShell({\n protocol,\n tools,\n home = '/',\n account,\n rail = false,\n railFooter,\n variant = 'tool',\n banner,\n footer,\n children,\n}: ToolShellProps) {\n const p = protocolSite(protocol);\n const app = variant === 'app';\n const tabs = app ? null : tabsFor([{ items: [...tools] }]);\n const about = (\n <a\n href={p.pageHref}\n className=\"inline-flex items-center gap-1 rounded-full px-3 py-2 text-[0.9375rem] text-muted-foreground transition-colors hover:text-foreground\"\n >\n About {p.label}\n <ArrowUpRight aria-hidden className=\"size-3.5\" />\n </a>\n );\n return (\n <DensityProvider density=\"compact\">\n <div\n className={cn(\n 'flex flex-col bg-background',\n app ? 'h-dvh overflow-hidden' : 'min-h-dvh',\n tabs && 'max-md:pb-[calc(3.5rem_+_env(safe-area-inset-bottom))]'\n )}\n >\n <SkipLink />\n {banner}\n <SiteHeader\n variant=\"tool\"\n home={home}\n product={p.label}\n family={protocol}\n nav={tools.map((t) => ({ href: t.href, label: t.label, active: t.active }))}\n navOnPhone={!tabs}\n menu={<div className=\"[&>a]:px-3 [&>a]:py-3 [&>a]:text-[1.0625rem]\">{about}</div>}\n // With a rail, the tools leave the header from lg.\n className={cn(rail && 'lg:[&_nav[aria-label=Main]]:hidden')}\n actions={\n <>\n <span className=\"hidden lg:contents\">{about}</span>\n {p.status !== 'live' ? <StatusBadge status={p.status} className=\"max-sm:hidden\" /> : null}\n <ThemeToggle className=\"max-sm:hidden\" />\n {account}\n </>\n }\n />\n <div className={cn('mx-auto flex w-full', app ? 'min-h-0 flex-1' : 'max-w-[90rem] flex-1')}>\n {rail ? (\n <aside className=\"sticky top-14 hidden h-[calc(100dvh-3.5rem)] w-60 shrink-0 flex-col gap-6 overflow-y-auto px-4 py-6 lg:flex\">\n <SideNav groups={[{ label: 'Tools', items: tools.map(({ href, label, icon, active }) => ({ href, label, icon, active })) }]} />\n {railFooter ? (\n <div className=\"mt-auto flex flex-col gap-0.5 px-3 text-[0.875rem] text-muted-foreground [&_a:hover]:text-foreground [&_a]:py-1.5 [&_a]:transition-colors\">\n {railFooter}\n </div>\n ) : null}\n </aside>\n ) : null}\n <main\n id=\"main-content\"\n className={cn('min-w-0 flex-1', app ? 'flex min-h-0 flex-col' : 'px-4 pb-16 pt-8 md:px-8 md:pt-10')}\n >\n {app ? children : <div className=\"mx-auto w-full max-w-[72rem]\">{children}</div>}\n </main>\n </div>\n {app || footer === false ? null : (footer ?? <SiteFooter compact family legal />)}\n {tabs ? <TabBar items={tabs} /> : null}\n </div>\n </DensityProvider>\n );\n}\n"]}