@orangecheck/design 0.32.1 → 0.32.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chrome.js +37 -37
- package/dist/chrome.js.map +1 -1
- package/dist/chrome.mjs +37 -37
- package/dist/chrome.mjs.map +1 -1
- package/dist/components.js +42 -42
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +42 -42
- package/dist/components.mjs.map +1 -1
- package/dist/composites.js +5 -5
- package/dist/composites.js.map +1 -1
- package/dist/composites.mjs +5 -5
- package/dist/composites.mjs.map +1 -1
- package/dist/index.js +49 -49
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +49 -49
- package/dist/index.mjs.map +1 -1
- package/dist/primitives.js +7 -7
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs +7 -7
- package/dist/primitives.mjs.map +1 -1
- package/dist/styles/theme.css +10 -0
- package/package.json +2 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tokens/scene-tokens.ts","../src/tokens/aurora-gl.ts","../src/tokens/cn.ts","../src/tokens/themes.ts","../src/tokens/aurora.tsx","../src/tokens/provider.tsx","../src/tokens/theme-bridge.tsx","../src/tokens/theme-picker.tsx","../src/tokens/appearance-menu.tsx","../src/tokens/index.ts","../src/tokens/glyphs.ts","../src/tokens/sigil.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/input.tsx","../src/primitives/label.tsx","../src/primitives/checkbox.tsx","../src/primitives/radio-group.tsx","../src/primitives/switch.tsx","../src/primitives/alert.tsx","../src/primitives/alert-with-action.tsx","../src/primitives/textarea.tsx","../src/primitives/theme-toggle.tsx","../src/primitives/working.tsx","../src/primitives/error-boundary.tsx","../src/primitives/skeleton.tsx","../src/primitives/separator.tsx","../src/primitives/sheet.tsx","../src/primitives/dialog.tsx","../src/primitives/confirm-dialog.tsx","../src/primitives/prompt-dialog.tsx","../src/primitives/modal.tsx","../src/primitives/pagination.tsx","../src/primitives/popover.tsx","../src/primitives/tooltip.tsx","../src/primitives/accordion.tsx","../src/primitives/select.tsx","../src/primitives/toaster.tsx","../src/primitives/surface.tsx","../src/primitives/icon-badge.tsx","../src/primitives/card.tsx","../src/primitives/sparkline.tsx","../src/primitives/stat-block.tsx","../src/primitives/bar.tsx","../src/primitives/status-pill.tsx","../src/primitives/tabs.tsx","../src/format/use-spot-price.ts","../src/format/index.ts","../src/primitives/sats-amount.tsx","../src/primitives/copy-button.tsx","../src/primitives/bitcoin-address.tsx","../src/primitives/qr-code.tsx","../src/composites/help-hint.tsx","../src/composites/section-header.tsx","../src/composites/error-page.tsx","../src/composites/empty-state.tsx","../src/composites/stat-grid.tsx","../src/composites/stat-card.tsx","../src/composites/callout.tsx","../src/composites/definition-list.tsx","../src/composites/data-row.tsx","../src/composites/panel.tsx","../src/composites/marketing-heading.tsx","../src/composites/feature-card.tsx","../src/composites/section.tsx","../src/composites/comparison-table.tsx","../src/composites/numbered-step.tsx","../src/composites/faq.tsx","../src/composites/email-capture.tsx","../src/composites/check-list.tsx","../src/composites/accent-note.tsx","../src/composites/verified-chip.tsx","../src/composites/acknowledgement.tsx","../src/chrome/ecosystem-switcher.tsx","../src/chrome/family-properties.ts","../src/chrome/logo-dropdown.tsx","../src/chrome/account-menu.tsx","../src/chrome/primary-nav.tsx","../src/chrome/dashboard-shell.tsx","../src/chrome/app-shell.tsx","../src/chrome/layout-sub-header.tsx","../src/chrome/app-bar.tsx","../src/chrome/family-footer.tsx"],"names":["id","useRef","useEffect","value","jsxs","jsx","ONE_YEAR","useState","useTheme","Icon","Check","Palette","useMemo","cva","Slot","Sun","Moon","React","DialogPrimitive","useCallback","Dialog2","NODE_ENV","pending","notifyHost","hostMountCount","Dialog3","DialogPrimitive2","X","Popover2","React3","CheckIcon","Sonner","Popover3","Link","TONE_CLASS","Fragment","TONE","ChevronDown","isActive","useId","Copy","Plus"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * scene-tokens — the token→uniform rail for GPU-rendered backdrops.\n *\n * A WebGL layer cannot read OKLCH custom properties the way CSS can:\n * `getComputedStyle(...).getPropertyValue('--brand')` returns the raw\n * `oklch(…)` string (or an unresolved `color-mix(…)` expression) that no\n * rgb-regex survives. The zero-dependency bridge: a hidden probe element per\n * slot styled `color: color-mix(in srgb, var(--slot), var(--slot))` — the\n * browser performs the OKLCH→sRGB conversion + gamut mapping natively and\n * serializes the computed value as `color(srgb r g b)` (or legacy `rgb(…)`)\n * floats, parsed with one regex.\n *\n * Probes are mounted INSIDE the `.oc-aurora` element so per-skin re-hue hooks\n * (ember's `[data-oc-theme='ember'] .oc-aurora { --au-green; --au-blue }`)\n * apply for free. Change detection is one MutationObserver on <html>\n * (class + data-oc-theme + data-oc-motion) resampling in a double-rAF — it\n * catches next-themes mode flips, system scheme changes, cross-tab cookie\n * pickup, and skin swaps, framework-free (works in Storybook).\n */\n\nexport interface OcSceneRGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface OcSceneTokens {\n /** The four aurora hue slots (sRGB 0..1), --au-orange/-green/-blue/-violet. */\n palette: [OcSceneRGB, OcSceneRGB, OcSceneRGB, OcSceneRGB];\n /** Resolved page background (sRGB 0..1). */\n background: OcSceneRGB;\n /** `<html>` carries `.dark`. */\n isDark: boolean;\n /** Ambient-motion switch is off (`data-oc-motion=\"off\"`). */\n motionOff: boolean;\n}\n\nconst SLOTS = ['--au-orange', '--au-green', '--au-blue', '--au-violet', '--background'] as const;\n\n/** `color(srgb r g b [/ a])` or `rgb(r, g, b)` → 0..1 floats. Null on anything else. */\nfunction parseColor(value: string): OcSceneRGB | null {\n let m = value.match(/color\\(srgb\\s+([\\d.]+)\\s+([\\d.]+)\\s+([\\d.]+)/);\n if (m?.[1] != null && m[2] != null && m[3] != null) {\n return { r: +m[1], g: +m[2], b: +m[3] };\n }\n m = value.match(/rgba?\\(\\s*([\\d.]+)[,\\s]+([\\d.]+)[,\\s]+([\\d.]+)/);\n if (m?.[1] != null && m[2] != null && m[3] != null) {\n return { r: +m[1] / 255, g: +m[2] / 255, b: +m[3] / 255 };\n }\n return null;\n}\n\n/** OKLab round-trip (Ottosson, public domain) — used to pin lightness bands and\n * cap chroma so gold/phosphor/lightning carry equal visual weight per mode. */\nfunction srgbToOklab({ r, g, b }: OcSceneRGB): { L: number; a: number; b: number } {\n const lin = (c: number) => (c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4));\n const lr = lin(r);\n const lg = lin(g);\n const lb = lin(b);\n const l = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);\n const m = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);\n const s = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);\n return {\n L: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n a: 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n b: 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,\n };\n}\n\nfunction oklabToSrgb(L: number, a: number, bb: number): OcSceneRGB {\n const l = Math.pow(L + 0.3963377774 * a + 0.2158037573 * bb, 3);\n const m = Math.pow(L - 0.1055613458 * a - 0.0638541728 * bb, 3);\n const s = Math.pow(L - 0.0894841775 * a - 1.291485548 * bb, 3);\n const lr = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;\n const lg = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;\n const lb = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s;\n const un = (c: number) =>\n Math.min(1, Math.max(0, c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055));\n return { r: un(lr), g: un(lg), b: un(lb) };\n}\n\n/** Pin L into the mode's band + cap chroma (~C≤0.14) so every skin's field\n * reads with equal weight — the raw brand tokens vary wildly in both. */\nexport function normalizeHue(c: OcSceneRGB, isDark: boolean): OcSceneRGB {\n const { L, a, b } = srgbToOklab(c);\n const C = Math.hypot(a, b);\n const targetL = isDark\n ? Math.min(0.75, Math.max(0.55, L))\n : Math.min(0.95, Math.max(0.82, L + 0.25));\n const scale = C > 1e-6 ? Math.min(C, 0.14) / C : 0;\n return oklabToSrgb(targetL, a * scale, b * scale);\n}\n\n/**\n * Read the scene tokens by probing INSIDE `host` (normally the `.oc-aurora`\n * element). Returns null if any slot fails to parse — callers treat null as\n * \"keep the CSS floor\", never as an error.\n */\nexport function readOcSceneTokens(host: HTMLElement): OcSceneTokens | null {\n if (typeof document === 'undefined') return null;\n const probe = document.createElement('div');\n probe.setAttribute('aria-hidden', 'true');\n probe.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;';\n const cells: HTMLElement[] = SLOTS.map((slot) => {\n const cell = document.createElement('span');\n // color-mix(in srgb, X, X) === X, but forces serialization to color(srgb …)\n cell.style.color = `color-mix(in srgb, var(${slot}), var(${slot}))`;\n probe.appendChild(cell);\n return cell;\n });\n host.appendChild(probe);\n try {\n const parsed = cells.map((cell) => parseColor(getComputedStyle(cell).color));\n const [orange, green, blue, violet, background] = parsed;\n if (!orange || !green || !blue || !violet || !background) return null;\n const root = document.documentElement;\n return {\n palette: [orange, green, blue, violet],\n background,\n isDark: root.classList.contains('dark'),\n motionOff: root.getAttribute('data-oc-motion') === 'off',\n };\n } finally {\n host.removeChild(probe);\n }\n}\n\n/**\n * Observe every signal that can recolor or pause a scene: mode class, skin\n * attribute, and the ambient-motion attribute. The callback fires inside a\n * double-rAF so computed styles have settled. Returns an unsubscribe.\n */\nexport function subscribeOcTheme(cb: () => void): () => void {\n if (typeof document === 'undefined') return () => {};\n let raf1 = 0;\n let raf2 = 0;\n const schedule = () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(cb);\n });\n };\n const mo = new MutationObserver(schedule);\n mo.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-oc-theme', 'data-oc-motion'],\n });\n return () => {\n mo.disconnect();\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n };\n}\n","/**\n * aurora-gl — the OcAuroraGL scene (aurora depth, release 2).\n *\n * One fullscreen WebGL2 fragment shader that supersedes the *perceptual output*\n * of the 5-blob CSS aurora: three octaves of noise through one domain-warp\n * stage, ramped through the same --au-* palette slots, with the exact mode\n * duality from aurora.css (tint in light, additive-leaning in dark), a\n * skin-keyed finish (silk under ember, device-pixel 8×8 Bayer under the four\n * cypherpunk skins), and a one-line IGN dither so dark mode never bands.\n *\n * This module is ONLY ever reached via dynamic import() from <OcAurora gl/>\n * after every gate passes — it costs consumers zero bytes otherwise. Every\n * failure path here disposes silently and the CSS blobs (never unmounted)\n * resume. No console output on any path: verify-stories.mjs fails the package\n * on any console error under headless SwiftShader.\n */\n\nimport {\n normalizeHue,\n readOcSceneTokens,\n subscribeOcTheme,\n type OcSceneRGB,\n type OcSceneTokens,\n} from './scene-tokens';\n\nconst KILL_KEY = 'oc-aurora-gl-kill:1';\nconst KILL_TTL_MS = 7 * 24 * 60 * 60 * 1000; // hardware doesn't change per-session\nconst SETTLE_MS = 90_000; // freeze uTime after this long without input\nconst FRAME_MS = 33; // 30fps ambient cap\nconst CROSSFADE_MS = 250; // palette tween — synced with the UI token snap, never lagging it\n\nconst VS = `#version 300 es\nin vec2 p;void main(){gl_Position=vec4(p,0.,1.);}`;\n\nconst FS = `#version 300 es\nprecision highp float;\nout vec4 o;\nuniform vec2 uRes;uniform float uT,uIsDark,uFinish,uMix;\nuniform vec3 uA0,uA1,uA2,uA3,uB0,uB1,uB2,uB3,uBg;\nfloat h(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}\nfloat n2(vec2 p){vec2 i=floor(p),f=fract(p);f=f*f*(3.-2.*f);\nreturn mix(mix(h(i),h(i+vec2(1,0)),f.x),mix(h(i+vec2(0,1)),h(i+vec2(1,1)),f.x),f.y);}\nfloat fbm(vec2 p){float v=0.,a=.55;for(int i=0;i<3;i++){v+=a*n2(p);p=p*2.03+vec2(1.7,9.2);a*=.5;}return v;}\nfloat B2(vec2 a){a=floor(a);return fract(a.x/2.+a.y*a.y*.75);}\n// OKLab mix (Ottosson) so skin crossfades never transit gray-brown.\nvec3 l2s(vec3 c){return mix(12.92*c,1.055*pow(c,vec3(1./2.4))-.055,step(.0031308,c));}\nvec3 s2l(vec3 c){return mix(c/12.92,pow((c+.055)/1.055,vec3(2.4)),step(.04045,c));}\nvec3 okmix(vec3 a,vec3 b,float t){\nvec3 la=s2l(a),lb=s2l(b);\nmat3 M1=mat3(.4122214708,.2119034982,.0883024619,.5363325363,.6806995451,.2817188376,.0514459929,.1073969566,.6299787005);\nmat3 M2=mat3(4.0767416621,-1.2684380046,-.0041960863,-3.3077115913,2.6097574011,-.7034186147,.2309699292,-.3413193965,1.707614701);\nvec3 ka=pow(M1*la,vec3(1./3.)),kb=pow(M1*lb,vec3(1./3.));\nvec3 k=mix(ka,kb,t);return clamp(l2s(M2*(k*k*k)),0.,1.);}\nvoid main(){\nvec2 uv=gl_FragCoord.xy/uRes;\nvec2 p=(uv-.5)*vec2(uRes.x/uRes.y,1.)*1.9;\nfloat t=uT*.018;\nvec2 w=vec2(fbm(p+vec2(0.,t)),fbm(p+vec2(5.2,1.3)-t*.7));\nfloat f=fbm(p+1.9*w+vec2(t*.5,-t*.3));\nfloat g=fbm(p*.6+w*1.2+vec2(9.1,3.7));\nvec3 c0=okmix(uA0,uB0,uMix),c1=okmix(uA1,uB1,uMix),c2=okmix(uA2,uB2,uMix),c3=okmix(uA3,uB3,uMix);\nvec3 c=mix(mix(c0,c1,smoothstep(.25,.55,g)),mix(c2,c3,smoothstep(.45,.8,g)),smoothstep(.4,.7,g));\nfloat e=smoothstep(.32,.9,f);\nif(uFinish>.5){\nfloat b=B2(.125*gl_FragCoord.xy)*.0625+B2(.25*gl_FragCoord.xy)*.25+B2(.5*gl_FragCoord.xy);\ne=floor(e*5.+b*.8-.4)/5.;}\n// container CSS already applies the mode-op × intensity opacity + radial mask\nvec3 col=(uIsDark>.5)?clamp(uBg+c*e*1.15,0.,1.):mix(uBg,c,e);\ncol+=(fract(52.9829189*fract(dot(gl_FragCoord.xy,vec2(0.06711056,0.00583715))))-.5)/255.;\no=vec4(col,1.);}`;\n\ninterface Palette {\n hues: [OcSceneRGB, OcSceneRGB, OcSceneRGB, OcSceneRGB];\n bg: OcSceneRGB;\n isDark: boolean;\n finish: number;\n}\n\nfunction killFlagged(): boolean {\n try {\n const raw = localStorage.getItem(KILL_KEY);\n if (!raw) return false;\n if (Date.now() - Number(raw) > KILL_TTL_MS) {\n localStorage.removeItem(KILL_KEY);\n return false;\n }\n return true;\n } catch {\n return false;\n }\n}\n\nfunction setKillFlag(): void {\n try {\n localStorage.setItem(KILL_KEY, String(Date.now()));\n } catch {\n /* private mode — per-session demotion only */\n }\n}\n\nfunction cypherFinish(): boolean {\n const skin = document.documentElement.getAttribute('data-oc-theme');\n return skin !== null && skin !== 'ember';\n}\n\nfunction samplePalette(host: HTMLElement): Palette | null {\n const tokens: OcSceneTokens | null = readOcSceneTokens(host);\n if (!tokens) return null;\n return {\n hues: tokens.palette.map((h) => normalizeHue(h, tokens.isDark)) as Palette['hues'],\n bg: tokens.background,\n isDark: tokens.isDark,\n finish: cypherFinish() ? 1 : 0,\n };\n}\n\n/**\n * Mount the GL layer inside the `.oc-aurora` container. Returns a dispose\n * function, or null when the environment declines (no WebGL2, software\n * renderer, kill flag, token parse failure) — in which case nothing was\n * touched and the CSS blobs simply continue.\n */\nexport function mountAuroraGL(container: HTMLElement): (() => void) | null {\n if (killFlagged()) return null;\n if (getComputedStyle(container).getPropertyValue('--oc-aurora-gl').trim() === 'off') {\n return null; // per-site one-line kill switch, no package release needed\n }\n\n const canvas = document.createElement('canvas');\n canvas.className = 'oc-aurora__gl';\n const glMaybe = canvas.getContext('webgl2', {\n antialias: false,\n depth: false,\n stencil: false,\n alpha: false,\n powerPreference: 'low-power',\n failIfMajorPerformanceCaveat: true, // SwiftShader/blocklist → CSS floor, free\n });\n if (!glMaybe) return null;\n const gl = glMaybe;\n\n const first = samplePalette(container);\n if (!first) return null;\n\n let prog: WebGLProgram;\n const uni: Record<string, WebGLUniformLocation | null> = {};\n try {\n const compile = (type: number, src: string) => {\n const s = gl.createShader(type)!;\n gl.shaderSource(s, src);\n gl.compileShader(s);\n if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) throw new Error('compile');\n return s;\n };\n prog = gl.createProgram()!;\n gl.attachShader(prog, compile(gl.VERTEX_SHADER, VS));\n gl.attachShader(prog, compile(gl.FRAGMENT_SHADER, FS));\n gl.linkProgram(prog);\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) throw new Error('link');\n gl.useProgram(prog);\n const buf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buf);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), gl.STATIC_DRAW);\n const loc = gl.getAttribLocation(prog, 'p');\n gl.enableVertexAttribArray(loc);\n gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0);\n for (const k of ['uRes', 'uT', 'uIsDark', 'uFinish', 'uMix', 'uA0', 'uA1', 'uA2', 'uA3', 'uB0', 'uB1', 'uB2', 'uB3', 'uBg']) {\n uni[k] = gl.getUniformLocation(prog, k);\n }\n } catch {\n return null;\n }\n\n container.appendChild(canvas);\n\n // ---- palette crossfade state (from → to over CROSSFADE_MS, mixed in OKLab in-shader)\n let palFrom = first;\n let palTo = first;\n let mixStart = 0;\n\n // ---- clock: pausable, settle-to-static, resume without a jump\n let raf = 0;\n let lastFrame = 0;\n let clock = 0; // accumulated scene seconds\n let lastTick = 0;\n let lastInput = performance.now();\n let live = false;\n let disposed = false;\n\n // ---- lightweight governor: sustained slow frames → kill flag + dispose\n let slowStreak = 0;\n\n const setVec = (k: string, c: OcSceneRGB) => gl.uniform3f(uni[k] ?? null, c.r, c.g, c.b);\n\n function resize() {\n const coarse = matchMedia('(pointer: coarse)').matches;\n const dpr = Math.min(devicePixelRatio || 1, coarse ? 1.5 : 2) * 0.75;\n const w = Math.max(1, Math.round(container.clientWidth * dpr));\n const hgt = Math.max(1, Math.round(container.clientHeight * dpr));\n if (canvas.width !== w || canvas.height !== hgt) {\n canvas.width = w;\n canvas.height = hgt;\n gl.viewport(0, 0, w, hgt);\n }\n }\n\n function draw(now: number) {\n raf = requestAnimationFrame(draw);\n if (now - lastFrame < FRAME_MS) return;\n const frameGap = now - lastFrame;\n lastFrame = now;\n // governor: 3s of frames arriving at >2× budget on a capped loop = jank\n if (frameGap > FRAME_MS * 2.5) {\n if (++slowStreak > 90) {\n setKillFlag();\n dispose();\n return;\n }\n } else if (slowStreak > 0) slowStreak--;\n\n const settled = now - lastInput > SETTLE_MS;\n if (!settled) {\n clock += Math.min(now - lastTick, 100) / 1000; // clamp resume delta — no leap\n }\n lastTick = now;\n if (settled && live && mixDone(now)) return; // frozen frame — skip the GPU submit\n\n resize();\n const mix = Math.min(1, (now - mixStart) / CROSSFADE_MS);\n gl.uniform2f(uni.uRes ?? null, canvas.width, canvas.height);\n gl.uniform1f(uni.uT ?? null, clock);\n gl.uniform1f(uni.uIsDark ?? null, palTo.isDark ? 1 : 0);\n gl.uniform1f(uni.uFinish ?? null, palTo.finish);\n gl.uniform1f(uni.uMix ?? null, mix);\n setVec('uA0', palFrom.hues[0]);\n setVec('uA1', palFrom.hues[1]);\n setVec('uA2', palFrom.hues[2]);\n setVec('uA3', palFrom.hues[3]);\n setVec('uB0', palTo.hues[0]);\n setVec('uB1', palTo.hues[1]);\n setVec('uB2', palTo.hues[2]);\n setVec('uB3', palTo.hues[3]);\n setVec('uBg', palTo.bg);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n\n if (!live) {\n live = true;\n container.classList.add('oc-aurora--gl-live'); // true handoff: blobs pause+hide\n }\n }\n\n function mixDone(now: number): boolean {\n return now - mixStart >= CROSSFADE_MS;\n }\n\n const onInput = () => {\n lastInput = performance.now();\n };\n const onVisibility = () => {\n if (document.hidden) {\n cancelAnimationFrame(raf);\n raf = 0;\n } else if (!raf && !disposed) {\n lastFrame = 0;\n lastTick = performance.now();\n raf = requestAnimationFrame(draw);\n }\n };\n const onContextLost = (e: Event) => {\n e.preventDefault();\n cancelAnimationFrame(raf);\n raf = 0;\n };\n const onContextRestored = () => {\n // one restore attempt is the browser re-providing the context; if the\n // program state is gone we dispose rather than rebuild — CSS floor wins.\n dispose();\n };\n\n const unsubscribeTheme = subscribeOcTheme(() => {\n if (disposed) return;\n const root = document.documentElement;\n if (root.getAttribute('data-oc-motion') === 'off') {\n dispose(); // pause mechanism: GL leaves, frozen CSS blobs return\n return;\n }\n const next = samplePalette(container);\n if (!next) return; // parse hiccup — keep the current palette\n palFrom = { ...palTo, hues: [...palTo.hues] as Palette['hues'] };\n palTo = next;\n mixStart = performance.now();\n lastInput = performance.now(); // wake from settle so the fade renders\n });\n\n window.addEventListener('pointermove', onInput, { passive: true });\n window.addEventListener('scroll', onInput, { passive: true });\n window.addEventListener('keydown', onInput, { passive: true });\n document.addEventListener('visibilitychange', onVisibility);\n canvas.addEventListener('webglcontextlost', onContextLost);\n canvas.addEventListener('webglcontextrestored', onContextRestored);\n\n function dispose() {\n if (disposed) return;\n disposed = true;\n cancelAnimationFrame(raf);\n unsubscribeTheme();\n window.removeEventListener('pointermove', onInput);\n window.removeEventListener('scroll', onInput);\n window.removeEventListener('keydown', onInput);\n document.removeEventListener('visibilitychange', onVisibility);\n canvas.removeEventListener('webglcontextlost', onContextLost);\n canvas.removeEventListener('webglcontextrestored', onContextRestored);\n container.classList.remove('oc-aurora--gl-live');\n canvas.remove();\n const ext = gl.getExtension('WEBGL_lose_context');\n if (ext) ext.loseContext();\n }\n\n resize();\n mixStart = performance.now();\n lastTick = performance.now();\n raf = requestAnimationFrame(draw);\n return dispose;\n}\n","import type { ClassValue } from 'clsx';\n\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Canonical class-name merge for the OrangeCheck family.\n * `clsx` for conditional composition, `tailwind-merge` to resolve\n * conflicting Tailwind utilities (last-wins by property).\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * The OrangeCheck theme (skin) registry.\n *\n * A *skin* is the named-theme axis, orthogonal to the light/dark *mode* axis\n * (which stays owned by `next-themes` via the `.dark` class). A skin is applied\n * as `data-oc-theme=\"<id>\"` on `<html>` and persisted in the `oc_skin` cookie at\n * `Domain=.ochk.io` so a choice on one family site carries to every other.\n *\n * Adding a skin = add a `themes/<id>.css` token block in this package and a\n * row here. Every site picks it up on the next `@orangecheck/design` bump; no\n * per-site edits.\n */\nexport interface OcTheme {\n /** Stable id — also the `data-oc-theme` attribute value and the CSS file stem. */\n readonly id: string;\n /** Human label for the picker (lowercase, house voice). */\n readonly label: string;\n /** One-line description shown in the picker / Storybook. */\n readonly description: string;\n /**\n * Accent hex (sRGB of the skin's dark-mode `--brand`). Used to swap the\n * browser chrome — `<meta name=\"theme-color\">` and the favicon (recolored\n * from the family `#f97316`) — when the skin changes. Mirrors the\n * `SKINS` palette in `oc-media-kit/build/brands.py` (same source of truth).\n */\n readonly accent: string;\n}\n\n// ember leads — the warm, human default. The other four are the Bitcoin-ethos\n// alternates (sharp, flat, cypherpunk), each carrying a meaning, not just a\n// colour: the chain, the node, the network, sound money. Order here is the\n// order shown in the appearance menu / picker (ember first).\nexport const OC_THEMES: readonly OcTheme[] = [\n {\n id: 'ember',\n label: 'ember',\n description:\n 'the warmth — burnt-sienna terracotta, soft 1rem corners, pill buttons, Hanken Grotesk · approachable, human',\n accent: '#da6736',\n },\n {\n id: 'orangecheck',\n label: 'orangecheck',\n description: 'the chain — Bitcoin orange, sharp 0.25rem corners, Inter + JetBrains Mono',\n accent: '#f97316',\n },\n {\n id: 'phosphor',\n label: 'phosphor',\n description: 'the node — CRT terminal green, hard 0.125rem, all-mono · sovereignty & verify',\n accent: '#55d671',\n },\n {\n id: 'lightning',\n label: 'lightning',\n description: 'the network — electric violet (L2), hardest 0rem edges, sans · instant',\n accent: '#c27dff',\n },\n {\n id: 'gold',\n label: 'gold',\n description: 'sound money — digital gold, hard 0.125rem milled edge, mono ledger · 21M',\n accent: '#e3b831',\n },\n] as const;\n\n/** The family default accent (orangecheck), and the hex every favicon ships\n * with — the swap recolors from this to the active skin's accent. */\nexport const OC_DEFAULT_ACCENT = '#f97316';\n\n/** Accent hex for a skin id, falling back to the default. */\nexport function accentFor(id: string | null | undefined): string {\n return OC_THEMES.find((t) => t.id === id)?.accent ?? OC_DEFAULT_ACCENT;\n}\n\n// ember is the family default — the skin a user with no `oc_skin` cookie gets.\n// (The favicon SVGs still ship baked with OC_DEFAULT_ACCENT below; the init\n// script recolors them from that to the active skin's accent on load.)\nexport const DEFAULT_OC_THEME = 'ember';\n\nexport type OcThemeId = (typeof OC_THEMES)[number]['id'] | (string & {});\n\nexport function isKnownTheme(id: string | null | undefined): id is OcThemeId {\n return !!id && OC_THEMES.some((t) => t.id === id);\n}\n\nexport function resolveTheme(id: string | null | undefined): string {\n return isKnownTheme(id) ? id : DEFAULT_OC_THEME;\n}\n\n/** Cookie name for the cross-subdomain skin choice. */\nexport const OC_SKIN_COOKIE = 'oc_skin';\n\n/**\n * Cookie name for the cross-subdomain ambient-motion choice ('off' pauses the\n * aurora + every `.oc-ambient` decoration family-wide). This is the WCAG 2.2.2\n * Pause/Stop/Hide mechanism — prefers-reduced-motion alone does not satisfy it\n * for >5s auto-playing decorative motion.\n */\nexport const OC_MOTION_COOKIE = 'oc_motion';\n","'use client';\n\nimport { useEffect, useRef, type CSSProperties } from 'react';\n\nimport { cn } from './cn';\n\nexport interface OcAuroraProps {\n /**\n * Master intensity multiplier (default 1, from the theme CSS). Overrides\n * `--oc-aurora-intensity` for this mount — e.g. dial a reading-heavy site down.\n */\n intensity?: number;\n /**\n * Mount the OcAuroraGL silk-field upgrade (aurora depth R2). Default off.\n * When every gate passes (WebGL2 with a real GPU, no reduced-motion, no\n * saveData / low-memory signal, ambient motion on), a ~8 KB chunk\n * lazy-loads after idle and crossfades over the CSS blobs — which then\n * pause. Every failure or opt-out path silently keeps the CSS aurora.\n * Per-site kill switch without a package release: `.oc-aurora { --oc-aurora-gl: off }`.\n */\n gl?: boolean;\n className?: string;\n}\n\nconst BLOBS = [1, 2, 3, 4, 5] as const;\n\n/** requestIdleCallback is disabled in every stable Safari — always pair it\n * with a setTimeout fallback or the GL layer never boots on iOS. */\nfunction onIdle(cb: () => void, timeout: number): () => void {\n if (typeof requestIdleCallback === 'function') {\n const id = requestIdleCallback(cb, { timeout });\n return () => cancelIdleCallback(id);\n }\n const id = setTimeout(cb, timeout);\n return () => clearTimeout(id);\n}\n\n/**\n * The ambient \"bitcoin aurora\" background — soft, theme-reactive colour clouds\n * that slowly wander (styling in styles/aurora.css; recolours from --brand /\n * --success / --info / --primary across mode + skin). Pure markup, fixed behind\n * all content; `OcThemeProvider` mounts it by default. The CSS blobs are the\n * permanent SSR / no-JS / reduced-motion / no-WebGL floor; the optional `gl`\n * layer only ever renders on top of them.\n */\nexport function OcAurora({ intensity, gl = false, className }: OcAuroraProps) {\n const hostRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!gl) return;\n const host = hostRef.current;\n if (!host) return;\n\n let disposed = false;\n let disposeScene: (() => void) | null = null;\n let cancelIdle: (() => void) | null = null;\n\n const prm = matchMedia('(prefers-reduced-motion: reduce)');\n const forced = matchMedia('(forced-colors: active)');\n\n function gatesPass(): boolean {\n if (prm.matches || forced.matches) return false;\n if (document.documentElement.getAttribute('data-oc-motion') === 'off') return false;\n // Chromium-only signals are one-way downgrades: undefined = proceed.\n const nav = navigator as Navigator & {\n connection?: { saveData?: boolean };\n deviceMemory?: number;\n };\n if (nav.connection?.saveData === true) return false;\n if (typeof nav.deviceMemory === 'number' && nav.deviceMemory <= 4) return false;\n return true;\n }\n\n function boot() {\n cancelIdle = onIdle(async () => {\n if (disposed || disposeScene || !gatesPass()) return;\n try {\n const mod = await import('./aurora-gl');\n if (disposed || disposeScene || !gatesPass()) return;\n disposeScene = mod.mountAuroraGL(host!);\n } catch {\n /* chunk failed to load — CSS floor stays, silently */\n }\n }, 2000);\n }\n\n function teardownScene() {\n disposeScene?.();\n disposeScene = null;\n }\n\n // Live demotions: an OS-level reduced-motion flip mid-session tears the\n // scene down; motion returning re-runs the boot gate. (The scene also\n // self-disposes on data-oc-motion=\"off\" via its own theme subscription.)\n const onPrmChange = () => {\n if (prm.matches) teardownScene();\n else if (!disposeScene) boot();\n };\n prm.addEventListener?.('change', onPrmChange);\n\n const mo = new MutationObserver(() => {\n const off = document.documentElement.getAttribute('data-oc-motion') === 'off';\n if (!off && !disposeScene && !disposed) boot();\n });\n mo.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-oc-motion'],\n });\n\n if (document.readyState === 'complete') boot();\n else {\n const onLoad = () => boot();\n window.addEventListener('load', onLoad, { once: true });\n }\n\n return () => {\n disposed = true;\n cancelIdle?.();\n prm.removeEventListener?.('change', onPrmChange);\n mo.disconnect();\n teardownScene();\n };\n }, [gl]);\n\n const style =\n intensity == null\n ? undefined\n : ({ '--oc-aurora-intensity': String(intensity) } as CSSProperties);\n return (\n <div ref={hostRef} className={cn('oc-aurora', className)} style={style} aria-hidden=\"true\">\n {BLOBS.map((n) => (\n <div key={n} className={`oc-aurora__blob oc-aurora__blob-${n}`} />\n ))}\n <div className=\"oc-aurora__grain\" />\n </div>\n );\n}\n","'use client';\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\n\nimport {\n accentFor,\n DEFAULT_OC_THEME,\n OC_DEFAULT_ACCENT,\n OC_MOTION_COOKIE,\n OC_SKIN_COOKIE,\n OC_THEMES,\n resolveTheme,\n type OcTheme,\n} from './themes';\nimport { OcAurora } from './aurora';\n\ndeclare global {\n interface Window {\n /** Defined by `getOcThemeInitScript()`; recolors favicon + theme-color. */\n __ocApplySkinChrome?: (skin: string) => void;\n }\n}\n\n/**\n * OcThemeProvider — the skin (named-theme) axis.\n *\n * Orthogonal to `next-themes`, which owns light/dark via the `.dark` class.\n * This provider owns the `data-oc-theme` attribute on `<html>` and persists the\n * choice in the `oc_skin` cookie at `Domain=.ochk.io`, so a skin chosen on one\n * `*.ochk.io` site is honored on every other. It re-reads the cookie on focus /\n * visibility change so a fresh choice picks up when the user returns to a tab\n * (same cross-site pickup trick `OcAccountMenu` uses for sign-in).\n *\n * Mount once, inside (or beside) the `next-themes` `<ThemeProvider>`:\n *\n * <ThemeProvider attribute=\"class\" defaultTheme=\"system\" enableSystem>\n * <OcThemeProvider>\n * …app…\n * </OcThemeProvider>\n * </ThemeProvider>\n *\n * Pair with `getOcThemeInitScript()` in `_document` to avoid a flash before\n * hydration.\n */\n\nconst ONE_YEAR = 60 * 60 * 24 * 365;\nconst ATTR = 'data-oc-theme';\nconst MOTION_ATTR = 'data-oc-motion';\n\n/** Ambient-motion switch. `'off'` freezes the aurora and every `.oc-ambient`. */\nexport type OcMotion = 'on' | 'off';\n\nfunction readSkinCookie(): string | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${OC_SKIN_COOKIE}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v.length > 0 ? v : null;\n }\n }\n return null;\n}\n\nfunction writeSkinCookie(value: string): void {\n if (typeof document === 'undefined') return;\n const isLocal =\n location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${OC_SKIN_COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\nfunction applyAttr(skin: string): void {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(ATTR, skin);\n}\n\nfunction readMotionCookie(): OcMotion | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${OC_MOTION_COOKIE}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v === 'off' ? 'off' : v === 'on' ? 'on' : null;\n }\n }\n return null;\n}\n\nfunction writeMotionCookie(value: OcMotion): void {\n if (typeof document === 'undefined') return;\n const isLocal =\n location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${OC_MOTION_COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\n/** Attribute is only present when motion is off — absence means the default. */\nfunction applyMotionAttr(motion: OcMotion): void {\n if (typeof document === 'undefined') return;\n if (motion === 'off') document.documentElement.setAttribute(MOTION_ATTR, 'off');\n else document.documentElement.removeAttribute(MOTION_ATTR);\n}\n\n/**\n * Swap the browser chrome (favicon + `<meta name=\"theme-color\">`) to the skin's\n * accent. The real work lives in the global installed by\n * `getOcThemeInitScript()` (so the favicon's original SVG is captured exactly\n * once, before the init script's own first recolor — avoids re-reading an\n * already-swapped data: URI). If the init script wasn't included, fall back to\n * the theme-color swap alone (favicon recolor needs the captured original).\n */\nfunction applySkinChrome(skin: string): void {\n if (typeof window === 'undefined') return;\n if (typeof window.__ocApplySkinChrome === 'function') {\n window.__ocApplySkinChrome(skin);\n return;\n }\n const meta = document.querySelector('meta[name=\"theme-color\"]');\n if (meta) meta.setAttribute('content', accentFor(skin));\n}\n\ninterface OcSkinContextValue {\n /** Current skin id (always resolved to a known theme). */\n skin: string;\n /** Set the skin: validates, applies the attribute, persists the cookie. */\n setSkin: (id: string) => void;\n /** The full registry, for rendering a picker. */\n themes: readonly OcTheme[];\n /** Ambient-motion switch ('off' pauses aurora + every `.oc-ambient`). */\n motion: OcMotion;\n /** Set ambient motion: applies the attribute, persists the cookie. */\n setMotion: (value: OcMotion) => void;\n}\n\nconst OcSkinContext = createContext<OcSkinContextValue | null>(null);\n\nexport interface OcThemeProviderProps {\n children: ReactNode;\n /** Skin to assume before the cookie is read (defaults to `orangecheck`). */\n defaultSkin?: string;\n /**\n * The ambient bitcoin-aurora background. `true` (default) renders it behind\n * the app; `false` disables it; `{ intensity }` tunes its strength for this\n * site (e.g. `aurora={{ intensity: 0.5 }}` on a reading-heavy surface).\n * OcAuroraGL (the silk-field upgrade) is ON by default (the CSS blobs\n * remain the permanent floor under every failure path). Reading- and\n * console-heavy surfaces opt OUT with `{ gl: false }`.\n */\n aurora?: boolean | { intensity?: number; gl?: boolean };\n}\n\nexport function OcThemeProvider({\n children,\n defaultSkin = DEFAULT_OC_THEME,\n aurora = true,\n}: OcThemeProviderProps) {\n const [skin, setSkinState] = useState<string>(() => resolveTheme(defaultSkin));\n const [motion, setMotionState] = useState<OcMotion>('on');\n const hydratedRef = useRef(false);\n\n // Hydrate from the cookies once on mount and align the attributes.\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const fromCookie = resolveTheme(readSkinCookie() ?? defaultSkin);\n applyAttr(fromCookie);\n applySkinChrome(fromCookie);\n setSkinState(fromCookie);\n const motionCookie = readMotionCookie() ?? 'on';\n applyMotionAttr(motionCookie);\n setMotionState(motionCookie);\n }, [defaultSkin]);\n\n // Cross-site pickup: re-read the cookies when the tab regains focus.\n useEffect(() => {\n function sync() {\n const fromCookie = resolveTheme(readSkinCookie() ?? skin);\n if (fromCookie !== skin) {\n applyAttr(fromCookie);\n applySkinChrome(fromCookie);\n setSkinState(fromCookie);\n }\n const motionCookie = readMotionCookie() ?? 'on';\n if (motionCookie !== motion) {\n applyMotionAttr(motionCookie);\n setMotionState(motionCookie);\n }\n }\n window.addEventListener('focus', sync);\n document.addEventListener('visibilitychange', sync);\n return () => {\n window.removeEventListener('focus', sync);\n document.removeEventListener('visibilitychange', sync);\n };\n }, [skin, motion]);\n\n const setSkin = useCallback((id: string) => {\n const next = resolveTheme(id);\n applyAttr(next);\n applySkinChrome(next);\n writeSkinCookie(next);\n setSkinState(next);\n }, []);\n\n const setMotion = useCallback((value: OcMotion) => {\n const next: OcMotion = value === 'off' ? 'off' : 'on';\n applyMotionAttr(next);\n writeMotionCookie(next);\n setMotionState(next);\n }, []);\n\n const value = useMemo<OcSkinContextValue>(\n () => ({ skin, setSkin, themes: OC_THEMES, motion, setMotion }),\n [skin, setSkin, motion, setMotion]\n );\n\n return (\n <OcSkinContext.Provider value={value}>\n {aurora !== false && (\n <OcAurora\n intensity={typeof aurora === 'object' ? aurora.intensity : undefined}\n // OcAuroraGL is the family default (aurora depth R2): a bare\n // provider, `aurora={true}`, or an object without `gl` opts\n // IN. Reading/console surfaces opt OUT with `gl: false`.\n gl={typeof aurora === 'object' ? (aurora.gl ?? true) : true}\n />\n )}\n {children}\n </OcSkinContext.Provider>\n );\n}\n\n/** Read the current skin + setter. Throws if used outside `OcThemeProvider`. */\nexport function useOcSkin(): OcSkinContextValue {\n const ctx = useContext(OcSkinContext);\n if (!ctx) {\n throw new Error('useOcSkin must be used within <OcThemeProvider>');\n }\n return ctx;\n}\n\n/**\n * Read the ambient-motion switch + setter. The WCAG 2.2.2 pause mechanism:\n * `'off'` sets `data-oc-motion=\"off\"` on `<html>` (persisted family-wide in the\n * `oc_motion` cookie), which pauses the aurora and any `.oc-ambient` element.\n * Throws if used outside `OcThemeProvider`.\n */\nexport function useOcMotion(): { motion: OcMotion; setMotion: (value: OcMotion) => void } {\n const { motion, setMotion } = useOcSkin();\n return { motion, setMotion };\n}\n\n/**\n * Blocking init script for `_document` (Pages Router) `<Head>`. Applies the\n * cookie's skin to `<html>` before first paint so there is no flash of the\n * default skin. Inject with:\n *\n * <script dangerouslySetInnerHTML={{ __html: getOcThemeInitScript() }} />\n */\nexport function getOcThemeInitScript(defaultSkin: string = DEFAULT_OC_THEME): string {\n // Self-contained IIFE — no imports available at parse time. Beyond applying\n // the skin attribute before first paint, it installs `window.__ocApplySkinChrome`\n // (the single owner of the favicon + theme-color swap) and runs it for the\n // saved skin. OcThemeProvider re-invokes the same global on later changes, so\n // the favicon's *original* SVG is captured exactly once (before any recolor)\n // and re-recolored from `#f97316` to the active skin's accent. The favicon\n // recolor is async (a fetch of the same-origin favicon.svg) — chrome updates\n // a beat after paint, which is fine; the skin attribute itself is synchronous.\n const accents = Object.fromEntries(OC_THEMES.map((t) => [t.id, t.accent]));\n return (\n `(function(){` +\n `var ACC=${JSON.stringify(accents)},DEF=${JSON.stringify(defaultSkin)},ORIG=${JSON.stringify(OC_DEFAULT_ACCENT)},fav=null;` +\n `function acc(s){return ACC[s]||ACC[DEF]||ORIG;}` +\n `window.__ocApplySkinChrome=function(s){try{` +\n `var a=acc(s);` +\n `var meta=document.querySelector('meta[name=\"theme-color\"]');if(meta){meta.setAttribute('content',a);}` +\n `var link=document.querySelector('link[rel~=\"icon\"][type=\"image/svg+xml\"]');if(!link){return;}` +\n `var paint=function(svg){link.setAttribute('href','data:image/svg+xml,'+encodeURIComponent(svg.split(ORIG).join(a)));};` +\n `if(fav!=null){paint(fav);return;}` +\n `var h=link.getAttribute('href');if(!h||h.indexOf('data:')===0){return;}` +\n `fetch(h).then(function(r){return r.text();}).then(function(svg){fav=svg;paint(svg);}).catch(function(){});` +\n `}catch(e){}};` +\n `try{var m=document.cookie.match(/(?:^|; )${OC_SKIN_COOKIE}=([^;]*)/);var s=m?decodeURIComponent(m[1]):DEF;if(!s){s=DEF;}` +\n `document.documentElement.setAttribute('${ATTR}',s);window.__ocApplySkinChrome(s);}` +\n `catch(e){document.documentElement.setAttribute('${ATTR}',DEF);}` +\n // Ambient-motion pause (oc_motion cookie) applied before first paint so\n // a paused choice never flashes a moving frame. Absence = motion on.\n `try{var mm=document.cookie.match(/(?:^|; )${OC_MOTION_COOKIE}=([^;]*)/);` +\n `if(mm&&decodeURIComponent(mm[1])==='off'){document.documentElement.setAttribute('${MOTION_ATTR}','off');}}` +\n `catch(e){}` +\n `})();`\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { useTheme } from 'next-themes';\n\n/**\n * OcThemeBridge — cross-subdomain persistence for the MODE axis (light/dark).\n *\n * `next-themes` defaults to origin-scoped `localStorage`, so a dark/light choice\n * on one `*.ochk.io` site won't carry to another. This layers an\n * `oc_theme` cookie at `Domain=.ochk.io` on top so the choice is visible\n * family-wide. (The SKIN axis has its own `oc_skin` bridge inside\n * `OcThemeProvider`; this is the mode counterpart, previously duplicated in\n * every consumer repo.)\n *\n * Mount once inside the next-themes `<ThemeProvider>`:\n *\n * <ThemeProvider attribute=\"class\" defaultTheme=\"system\" enableSystem>\n * <OcThemeBridge />\n * <OcThemeProvider>…</OcThemeProvider>\n * </ThemeProvider>\n *\n * The cookie is intentionally non-HttpOnly (next-themes JS reads/writes it) and\n * carries no auth value — a leak only reveals a theme preference.\n */\nconst COOKIE = 'oc_theme';\nconst ALLOWED = new Set(['light', 'dark', 'system']);\nconst ONE_YEAR = 60 * 60 * 24 * 365;\n\nfunction readCookie(name: string): string | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${name}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v.length > 0 ? v : null;\n }\n }\n return null;\n}\n\nfunction writeCookie(value: string): void {\n if (typeof document === 'undefined') return;\n if (!ALLOWED.has(value)) return;\n const isLocal = location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\nexport function OcThemeBridge() {\n const { theme, setTheme } = useTheme();\n const hydratedRef = useRef(false);\n\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const cookieValue = readCookie(COOKIE);\n if (cookieValue && ALLOWED.has(cookieValue) && cookieValue !== theme) {\n setTheme(cookieValue);\n }\n }, [theme, setTheme]);\n\n useEffect(() => {\n if (!hydratedRef.current) return;\n if (!theme) return;\n writeCookie(theme);\n }, [theme]);\n\n return null;\n}\n","'use client';\n\nimport { Check, Palette } from 'lucide-react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from './cn';\nimport { useOcSkin } from './provider';\n\n/**\n * OcThemePicker — the skin selector. Sits beside `ThemeToggle` in the header.\n * Self-contained dropdown (no Radix): outside-click + Escape to close. Mirrors\n * the ghost-icon affordance of `ThemeToggle`. Gate its mount behind\n * `NEXT_PUBLIC_OC_THEME_PICKER` during staged rollout.\n */\nexport interface OcThemePickerProps {\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nexport function OcThemePicker({ className, triggerClassName, popoverClassName }: OcThemePickerProps) {\n const { skin, setSkin, themes } = useOcSkin();\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n function onDown(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn('relative', className)}>\n <button\n type=\"button\"\n aria-label=\"choose theme\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n title=\"choose theme\"\n onClick={() => setOpen((v) => !v)}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex size-9 items-center justify-center rounded-md transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n triggerClassName\n )}\n >\n <Palette className=\"size-4\" aria-hidden />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className={cn(\n 'bg-popover text-popover-foreground absolute right-0 z-50 mt-2 w-64 overflow-hidden rounded-md border shadow-md',\n popoverClassName\n )}\n >\n <div className=\"label-mono text-muted-foreground px-3 pt-3 pb-1\">theme</div>\n <ul className=\"pb-1\">\n {themes.map((t) => {\n const active = t.id === skin;\n return (\n <li key={t.id}>\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => {\n setSkin(t.id);\n setOpen(false);\n }}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-start gap-2 px-3 py-2 text-left transition-colors',\n active && 'text-foreground'\n )}\n >\n <span className=\"mt-0.5 size-4 shrink-0\">\n {active && <Check className=\"size-4 text-primary\" aria-hidden />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{t.label}</span>\n <span className=\"text-muted-foreground block text-xs leading-snug\">\n {t.description}\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { Check, Monitor, Moon, Palette, Pause, Sun, Waves } from 'lucide-react';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from './cn';\nimport { useOcMotion, useOcSkin } from './provider';\n\n/**\n * OcAppearanceMenu — the single header control for ALL appearance settings.\n *\n * One icon button opens a dropdown with both axes:\n * • mode — light / dark / system (next-themes `.dark` class)\n * • theme — the registered skins (data-oc-theme, persisted .ochk.io)\n *\n * Replaces the separate `ThemeToggle` + `OcThemePicker` so every family site\n * carries exactly one appearance control. Self-contained dropdown (no Radix):\n * outside-click + Escape to close. Requires `<OcThemeProvider>` above it (skin\n * axis) and a next-themes `<ThemeProvider>` (mode axis) — both already mounted\n * on every family site.\n */\nexport interface OcAppearanceMenuProps {\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nconst MODES = [\n { id: 'light', label: 'light', Icon: Sun },\n { id: 'dark', label: 'dark', Icon: Moon },\n { id: 'system', label: 'system', Icon: Monitor },\n] as const;\n\n/**\n * AppearanceControls — the mode segment + skin list, with no trigger/popover\n * chrome of its own. Embed it anywhere a surface wants to host appearance\n * settings inline (the standalone OcAppearanceMenu popover, the mobile account\n * menu, a site's Sheet drawer). Requires `<OcThemeProvider>` + next-themes\n * above it, like OcAppearanceMenu.\n */\nexport function AppearanceControls({ className }: { className?: string }) {\n const { skin, setSkin, themes } = useOcSkin();\n const { motion, setMotion } = useOcMotion();\n const { theme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n const activeMode = mounted ? (theme ?? 'system') : null;\n const activeMotion = mounted ? motion : null;\n\n return (\n <div className={className}>\n <div className=\"label-mono text-muted-foreground px-3 pt-3 pb-2\">mode</div>\n <div className=\"grid grid-cols-3 gap-1 px-2 pb-2\">\n {MODES.map(({ id, label, Icon }) => {\n const active = activeMode === id;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => setTheme(id)}\n className={cn(\n 'flex flex-col items-center gap-1 rounded-md border py-2 text-[11px] transition-colors',\n active\n ? 'border-primary text-foreground bg-accent'\n : 'border-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground'\n )}\n >\n <Icon className=\"size-4\" aria-hidden />\n {label}\n </button>\n );\n })}\n </div>\n <div className=\"label-mono text-muted-foreground border-t px-3 pt-3 pb-1\">theme</div>\n <ul className=\"pb-1\">\n {themes.map((t) => {\n const active = t.id === skin;\n return (\n <li key={t.id}>\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => setSkin(t.id)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-start gap-2 px-3 py-2 text-left transition-colors',\n active && 'text-foreground'\n )}\n >\n <span className=\"mt-0.5 size-4 shrink-0\">\n {active && <Check className=\"text-primary size-4\" aria-hidden />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{t.label}</span>\n <span className=\"text-muted-foreground block text-xs leading-snug\">\n {t.description}\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n <div className=\"label-mono text-muted-foreground border-t px-3 pt-3 pb-2\">\n ambient motion\n </div>\n <div className=\"grid grid-cols-2 gap-1 px-2 pb-3\">\n {(\n [\n { id: 'on', label: 'on', Icon: Waves },\n { id: 'off', label: 'off', Icon: Pause },\n ] as const\n ).map(({ id, label, Icon }) => {\n const active = activeMotion === id;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={id === 'off' ? 'pause ambient motion' : 'ambient motion on'}\n onClick={() => setMotion(id)}\n className={cn(\n 'flex flex-col items-center gap-1 rounded-md border py-2 text-[11px] transition-colors',\n active\n ? 'border-primary text-foreground bg-accent'\n : 'border-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground'\n )}\n >\n <Icon className=\"size-4\" aria-hidden />\n {label}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport function OcAppearanceMenu({\n className,\n triggerClassName,\n popoverClassName,\n}: OcAppearanceMenuProps) {\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n function onDown(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn('relative', className)}>\n <button\n type=\"button\"\n aria-label=\"appearance settings\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n title=\"appearance · mode + theme\"\n onClick={() => setOpen((v) => !v)}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex size-9 items-center justify-center rounded-md transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n triggerClassName\n )}\n >\n <Palette className=\"size-4\" aria-hidden />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className={cn(\n 'bg-popover text-popover-foreground absolute right-0 z-50 mt-2 w-64 overflow-hidden rounded-md border shadow-md',\n popoverClassName\n )}\n >\n <AppearanceControls />\n </div>\n )}\n </div>\n );\n}\n","export { cn } from './cn';\nexport {\n OC_THEMES,\n DEFAULT_OC_THEME,\n OC_DEFAULT_ACCENT,\n OC_MOTION_COOKIE,\n OC_SKIN_COOKIE,\n accentFor,\n isKnownTheme,\n resolveTheme,\n type OcTheme,\n type OcThemeId,\n} from './themes';\nexport {\n OcThemeProvider,\n useOcSkin,\n useOcMotion,\n getOcThemeInitScript,\n type OcMotion,\n type OcThemeProviderProps,\n} from './provider';\nexport { OcThemeBridge } from './theme-bridge';\nexport { OcThemePicker, type OcThemePickerProps } from './theme-picker';\nexport { OcAppearanceMenu, AppearanceControls, type OcAppearanceMenuProps } from './appearance-menu';\nexport { OcAurora, type OcAuroraProps } from './aurora';\nexport {\n readOcSceneTokens,\n subscribeOcTheme,\n normalizeHue,\n type OcSceneRGB,\n type OcSceneTokens,\n} from './scene-tokens';\nexport { OcSigil, type OcSigilProps } from './sigil';\nexport { OC_GLYPHS, OC_GLYPH_CANVAS, type OcGlyphSlug } from './glyphs';\n","// GENERATED by oc-media-kit/build/emit_glyphs.py — DO NOT EDIT.\n// Regenerate: python3 build/emit_glyphs.py · then re-vendor into\n// oc-packages/design/src/tokens/glyphs.ts (check-glyph-drift.mjs diffs them).\n// source-digest: 8df5695322a2f6ce\n\n/** Inner-SVG markup per brand, normalized to a 0..1024 canvas with the\n * pipeline's centering/flip/scale baked in. Colors are sentinels —\n * substitute __FG__ / __BG__ / __INK__ (fg '__FG__'→'none' flips the\n * outline-capable glyphs to wireframe mode). */\nexport type OcGlyphSlug = 'orangecheck' | 'attest' | 'docs' | 'me' | 'vault' | 'chat' | 'cosign' | 'lock' | 'vote' | 'stamp' | 'agent' | 'pledge' | 'analytics' | 'btc' | 'globe';\n\nexport const OC_GLYPH_CANVAS = 1024;\n\nexport const OC_GLYPHS: Record<OcGlyphSlug, string> = {\n orangecheck: `<path d=\"M518 856Q463 820 438.5 785.5Q414 751 414 711Q414 657 462.5 613.0Q511 569 711 473Q766 509 790.5 543.5Q815 578 815 621Q815 702 550 840ZM930 1460V1235Q845 1265 779.0 1279.5Q713 1294 659 1294Q583 1294 540.5 1265.0Q498 1236 498 1184Q498 1109 701 1004Q720 994 729 989Q943 879 1002.0 808.5Q1061 738 1061 637Q1061 548 1013.5 484.0Q966 420 864 373Q934 323 966.5 261.5Q999 200 999 119Q999 -28 894.5 -111.5Q790 -195 604 -195Q515 -195 429.0 -180.5Q343 -166 258 -137V92Q343 62 424.0 46.5Q505 31 578 31Q655 31 696.0 59.5Q737 88 737 141Q737 211 523 326L512 332L486 346Q170 516 170 688Q170 782 222.0 851.5Q274 921 371 954Q300 1004 268.0 1064.0Q236 1124 236 1206Q236 1348 340.0 1434.0Q444 1520 616 1520Q690 1520 768.5 1505.0Q847 1490 930 1460Z\" fill=\"__INK__\" transform=\"translate(225.3457 820.5434) scale(0.465726 -0.465726)\"/>`,\n attest: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"0.5\"/><path d=\"M9 12 l2 2 l4 -4\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g>`,\n docs: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><rect x=\"8\" y=\"9\" width=\"8\" height=\"1.25\" fill=\"__INK__\"/><rect x=\"8\" y=\"11.5\" width=\"8\" height=\"1.25\" fill=\"__INK__\"/><rect x=\"8\" y=\"14\" width=\"5\" height=\"1.25\" fill=\"__INK__\"/></g>`,\n me: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><circle cx=\"12\" cy=\"11\" r=\"2\" fill=\"__INK__\"/><path d=\"M8 16.5 C 8 14.5, 9.5 13.5, 12 13.5 C 14.5 13.5, 16 14.5, 16 16.5\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></g>`,\n vault: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M8 9 L8 6.5 Q8 3.5 12 3.5 Q16 3.5 16 6.5 L16 9\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"2\" stroke-linecap=\"square\"/><rect x=\"4\" y=\"9\" width=\"16\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"0.75\"/><circle cx=\"12\" cy=\"14.5\" r=\"2.75\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><rect x=\"11.4\" y=\"14.5\" width=\"1.2\" height=\"3.25\" fill=\"__INK__\"/><rect x=\"5.5\" y=\"19\" width=\"2.25\" height=\"1.5\" fill=\"__INK__\"/><rect x=\"16.25\" y=\"19\" width=\"2.25\" height=\"1.5\" fill=\"__INK__\"/></g>`,\n chat: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M5 4 H19 A2 2 0 0 1 21 6 V13 A2 2 0 0 1 19 15 H11 L7 19 V15 H5 A2 2 0 0 1 3 13 V6 A2 2 0 0 1 5 4 Z\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.6\" stroke-linejoin=\"round\"/><circle cx=\"8\" cy=\"9.5\" r=\"1.15\" fill=\"__INK__\"/><circle cx=\"12\" cy=\"9.5\" r=\"1.15\" fill=\"__INK__\"/><circle cx=\"16\" cy=\"9.5\" r=\"1.15\" fill=\"__INK__\"/></g>`,\n cosign: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><circle cx=\"9.2\" cy=\"10.4\" r=\"1.65\" fill=\"__INK__\"/><circle cx=\"14.8\" cy=\"10.4\" r=\"1.65\" fill=\"__INK__\"/><path d=\"M6.5 16.6 C 6.5 14.9, 7.6 14.1, 9.2 14.1 C 10.8 14.1, 11.9 14.9, 11.9 16.6\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linecap=\"square\"/><path d=\"M12.1 16.6 C 12.1 14.9, 13.2 14.1, 14.8 14.1 C 16.4 14.1, 17.5 14.9, 17.5 16.6\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></g>`,\n lock: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M7 11V7.5a5 5 0 0 1 10 0V11\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"2\" stroke-linecap=\"square\"/><rect x=\"4\" y=\"11\" width=\"16\" height=\"10\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"0.75\"/><rect x=\"11\" y=\"14\" width=\"2\" height=\"4\" fill=\"__INK__\"/><rect x=\"10.25\" y=\"14\" width=\"3.5\" height=\"1.5\" fill=\"__INK__\"/></g>`,\n vote: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"2\" y=\"14\" width=\"4\" height=\"8\" fill=\"__INK__\"/><rect x=\"10\" y=\"8\" width=\"4\" height=\"14\" fill=\"__INK__\"/><rect x=\"18\" y=\"2\" width=\"4\" height=\"20\" fill=\"__INK__\"/></g>`,\n stamp: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><rect x=\"11.25\" y=\"8.5\" width=\"1.5\" height=\"7\" fill=\"__INK__\"/><rect x=\"9.5\" y=\"10\" width=\"5\" height=\"1.5\" fill=\"__INK__\"/><path d=\"M9 14.5 L12 15.75 L15 14.5\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linejoin=\"miter\" stroke-linecap=\"square\"/></g>`,\n agent: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M4 20 L12 4 L20 20 Z\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linejoin=\"miter\"/><rect x=\"7.5\" y=\"13.5\" width=\"9\" height=\"2\" fill=\"__INK__\"/><rect x=\"11\" y=\"9\" width=\"2\" height=\"2\" fill=\"__INK__\"/></g>`,\n pledge: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><rect x=\"9.25\" y=\"8.5\" width=\"1.75\" height=\"7\" fill=\"__INK__\"/><rect x=\"9.25\" y=\"8.5\" width=\"4.5\" height=\"1.5\" fill=\"__INK__\"/><rect x=\"12.25\" y=\"8.5\" width=\"1.5\" height=\"3.5\" fill=\"__INK__\"/><rect x=\"9.25\" y=\"10.5\" width=\"4.5\" height=\"1.5\" fill=\"__INK__\"/></g>`,\n analytics: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><path d=\"M6 17 L10 12 L14 15 L18 8\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.8\" stroke-linecap=\"square\" stroke-linejoin=\"miter\"/><rect x=\"16.6\" y=\"6.6\" width=\"2.8\" height=\"2.8\" fill=\"__INK__\"/></g>`,\n btc: `<path d=\"M373 1414V1676H531V1414ZM670 1414V1676H829V1414ZM373 -186V76H531V-186ZM670 -186V76H829V-186ZM129 0V1490H705Q863 1490 972.50 1441Q1082 1392 1139 1305.50Q1196 1219 1196 1103Q1196 1016 1164 951Q1132 886 1074 843Q1016 800 937 779V774Q1024 765 1095.50 721Q1167 677 1210 600.50Q1253 524 1253 416Q1253 293 1194.50 199Q1136 105 1020 52.50Q904 0 731 0ZM391 217H700Q838 217 910.50 272.50Q983 328 983 428Q983 497 950 547.50Q917 598 855.50 626Q794 654 707 654H391ZM391 858H688Q762 858 817 883.50Q872 909 902 956Q932 1003 932 1068Q932 1161 868 1217.50Q804 1274 689 1274H391Z\" fill=\"__INK__\" transform=\"translate(238.3907 806.9912) scale(0.395961 -0.395961)\"/>`,\n globe: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"6\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.4\"/><line x1=\"6\" y1=\"12\" x2=\"18\" y2=\"12\" stroke=\"__INK__\" stroke-width=\"1.2\"/><ellipse cx=\"12\" cy=\"12\" rx=\"2.8\" ry=\"6\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.2\"/><circle cx=\"15\" cy=\"9\" r=\"1.15\" fill=\"__INK__\"/></g>`,\n};\n","'use client';\n\nimport { useEffect, useId, useMemo, useRef } from 'react';\n\nimport { cn } from './cn';\nimport { OC_GLYPHS, type OcGlyphSlug } from './glyphs';\n\n/**\n * OcSigil — the brand mark as a deep-set 3D emboss (aurora depth R3, Tier A+B).\n *\n * The sanctioned figure placement is `corner-bleed`: the verb's own pictogram,\n * oversized and cropped by the hero's `overflow-hidden`, anchored to a corner\n * away from both the text column and the proof artifact. The RIGHT COLUMN\n * COVENANT is absolute: this frames a hero's proof — it never occupies,\n * replaces, or displaces it. Placement is a per-site art decision; the\n * component ships dormant and is mounted one line at a time (see MIGRATION.md\n * and research/AURORA-DEPTH-PLAN.md §3).\n *\n * Two registers from ONE geometry, switched by `data-oc-theme` in CSS via the\n * `--oc-sigil-lift` / `--oc-sigil-shade` / `--oc-sigil-ink-base` endpoint\n * custom properties (SSR-resolved, zero hydration flash): ember renders a lit\n * letterpress relief (a warm highlight enters upper-left, walls sink into a\n * chromatic sienna shade, the back dissolves to transparent so the aurora reads\n * through); the four cypherpunk skins render the same silhouette as an unlit\n * crisp echo stack (lift = ink, shade = transparent). No color is hardcoded —\n * every layer is a color-mix() off the skin's own tokens.\n *\n * Mark surgery (SSR string transforms, closed slug union, trusted vendored\n * markup): the tile glyphs shed their rounded-square FRAME so the pictogram —\n * not the tile — embosses; hairline strokes are floored and heavy ones capped\n * so no mark vanishes or bloats at watermark alpha; a per-verb focus transform\n * optically sizes each pictogram to fill the canvas. This intentionally\n * diverges the sigil silhouette from the media-kit tile at display scale.\n *\n * Degradation: SSR-painted markup (no JS needed for the static pose); drift\n * pauses under prefers-reduced-motion AND the oc_motion switch (`.oc-ambient`);\n * on phones it re-anchors top-right and stays quiet (never buried below fold);\n * hidden under forced-colors (SVG fills are not auto-stripped); parallax\n * (Tier B) only attaches on fine pointers with motion allowed, and a hero with\n * an animated/interactive proof must pass `parallax={false}` — one ambient\n * motion source per hero. The resting 0% keyframe IS the art: it is the\n * best-composed frame, which is what reduced-motion users are frozen at.\n */\nexport interface OcSigilProps {\n /** Which brand mark to emboss — the closed media-kit union, no default:\n * a property without a normalized glyph cannot mount a sigil. */\n glyph: OcGlyphSlug;\n /** Corner the mark bleeds off (crops against the hero's overflow-hidden). */\n corner?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';\n /**\n * Pointer parallax (±5°, damped). Set `false` when the hero's proof\n * artifact is animated or interactive (typing demos, countdowns, live\n * forms) — the motion-budget rule, enforced by the caller's declaration.\n */\n parallax?: boolean;\n /**\n * Emboss into a solid brand band (the `.oc-sigil--band` deboss preset:\n * band-shaped mask + walls that sink into `--brand`) rather than\n * corner-bleed. The consumer supplies `--oc-sigil-ink` (e.g.\n * `--brand-foreground`). Under ember the band reads as a tone-on-tone\n * deboss; under a cypherpunk skin it follows that skin's echo register.\n */\n band?: boolean;\n /** Size/position via the consumer's utility classes (e.g. `w-[min(56vmin,540px)]`). */\n className?: string;\n}\n\n// Extrusion: 22 thin layers give a smooth 3D slab. The z of each layer eases\n// (t^1.4) so front steps land sub-pixel where the eye reads the bevel and the\n// coarse steps hide in the dissolving tail — no countable \"cardboard\" bands.\n// Filled letterforms extrude shallower so their walls never outgrow the face.\nconst DEPTH = 22;\nconst LAYERS = Array.from({ length: DEPTH }, (_, i) => i);\nconst FILL = new Set<OcGlyphSlug>(['orangecheck', 'btc', 'vote']);\n\n// Endpoint custom properties drive the two registers (see docstring). Defaults\n// here are the ember/lit values; CSS overrides --oc-sigil-lift on light grounds\n// and swaps both for the cypherpunk skins. --oc-sigil-ink-base lets ember dark\n// ride the brighter --brand without disturbing the www band's --oc-sigil-ink.\nconst INK = 'var(--oc-sigil-ink, var(--oc-sigil-ink-base, var(--primary)))';\nconst LIFT = 'var(--oc-sigil-lift, white)';\nconst SHADE = `var(--oc-sigil-shade, color-mix(in oklab, black, ${INK} 30%))`;\n\nfunction layerStyle(i: number, relief: number): React.CSSProperties {\n const t = i / (DEPTH - 1); // 0 = front face, 1 = deepest\n // A lit relief: a gently-lifted front face, a wall that sinks into a\n // chromatic shade (never achromatic black — that muds the hue), and a back\n // that dissolves to TRANSPARENT so it composites correctly over the aurora\n // (which never equals any fixed --background). The wrapper opacity then\n // composites the whole stack translucent — keep the endpoints restrained.\n let color: string;\n if (t < 0.14) {\n // Directional light is carried by the specular leaf; this is a small,\n // even face-lift so the front plane sits above the wall.\n color = `color-mix(in oklab, ${INK}, ${LIFT} ${Math.round(((0.14 - t) / 0.14) * 18)}%)`;\n } else if (t < 0.55) {\n const k = (t - 0.14) / 0.41; // 0..1 across the wall\n color = `color-mix(in oklab, ${INK}, ${SHADE} ${Math.round(k * 45)}%)`;\n } else {\n const k = (t - 0.55) / 0.45; // 0..1 dissolving out to transparent\n color = `color-mix(in oklab, color-mix(in oklab, ${INK}, ${SHADE} 45%), transparent ${Math.round(Math.pow(k, 1.3) * 100)}%)`;\n }\n return { transform: `translateZ(${(-Math.pow(t, 1.4) * relief).toFixed(1)}px)`, color };\n}\n\n// The six tile glyphs are FRAMED pictograms (an outer invisible box + a\n// rounded-square frame + the detail). At watermark scale three of them read as\n// the same rounded-square debris, so we strip the frame and emboss the\n// pictogram alone. Coordinates below match the vendored glyphs.ts markup\n// (verify-sigil-transforms.mjs locks the hit-count so a re-vendor can't silently\n// break these regexes).\nconst TILE = new Set<OcGlyphSlug>(['stamp', 'pledge', 'cosign', 'me', 'docs']);\n\n// Optical sizing — scale the surviving pictogram to fill the ~1024 canvas.\n// orangecheck is deliberately ABSENT so the approved www band § is untouched;\n// attest/lock/vault/chat/agent/analytics already fill the canvas.\nconst FOCUS: Partial<Record<OcGlyphSlug, string>> = {\n stamp: 'translate(512 512) scale(1.5) translate(-512 -512)', // anchor-cross\n pledge: 'translate(512 512) scale(1.7) translate(-491 -512)', // ₱ mark, recentered\n cosign: 'translate(512 512) scale(1.35) translate(-512 -512)', // two figures\n me: 'translate(512 512) scale(1.45) translate(-512 -544)', // bust, recentered down\n docs: 'translate(512 512) scale(1.4) translate(-512 -512)', // text lines\n vote: 'translate(512 512) scale(0.92) translate(-512 -542)', // tall bars, nudged down\n btc: 'translate(512 512) scale(1.25) translate(-512 -512)', // ₿\n};\n\n// Stroke floor/ceiling: at the x42.67 scale the set spans 0.5..2.0 units (a 4×\n// spread), so hairlines vanish and shackles bloat under the mask+alpha. Clamp\n// to 1.3..1.7 → intra-set spread drops to ~1.3×.\nfunction normSw(w: number): number {\n return w < 1.3 ? 1.3 : w > 1.8 ? 1.7 : w;\n}\n\nfunction prepare(glyph: OcGlyphSlug, markup: string): string {\n let m = markup\n .split('__INK__')\n .join('currentColor')\n .split('__BG__')\n .join('none')\n .split('__FG__')\n .join('none');\n if (TILE.has(glyph)) {\n m = m.replace(/<rect x=\"6\" y=\"6\" width=\"12\" height=\"12\"[^>]*\\/>/, '');\n }\n m = m.replace(/stroke-width=\"([\\d.]+)\"/g, (_, w) => `stroke-width=\"${normSw(parseFloat(w))}\"`);\n const focus = FOCUS[glyph];\n return focus ? `<g transform=\"${focus}\">${m}</g>` : m;\n}\n\n// Per-slug resting pose offset [yaw°, pitch°] so five clone heroes never read as\n// one glyph-swapped template. An explicit table (not a hash — the old hash blew\n// past its ±4.5° envelope on negative values and collided 7 buckets over 15\n// slugs). Envelope ±7° yaw / ±3° pitch; composes with the base pose + parallax.\nconst SEED: Record<OcGlyphSlug, [number, number]> = {\n attest: [-7, 2],\n lock: [-4, -2],\n vote: [6, 0],\n stamp: [2, -2],\n agent: [-2, 3],\n pledge: [5, 2],\n chat: [-6, -1],\n cosign: [1, -3],\n vault: [4, 1],\n me: [-3, 2],\n docs: [0, 0],\n analytics: [-5, 1],\n btc: [4, 3],\n // The catalog gained `globe` without a seed here, and SEED is an exhaustive\n // Record over OcGlyphSlug — so the dts build has been failing since. [3, -1]\n // sits inside the ±7°/±3° envelope and collides with nothing above.\n globe: [3, -1],\n orangecheck: [0, 0],\n};\n\nexport function OcSigil({\n glyph,\n corner = 'bottom-left',\n parallax = true,\n band = false,\n className,\n}: OcSigilProps) {\n const rawId = useId();\n const id = useMemo(() => `oc-sigil-${rawId.replace(/[^a-zA-Z0-9_-]/g, '')}`, [rawId]);\n const parRef = useRef<HTMLDivElement>(null);\n\n const mark = useMemo(() => prepare(glyph, OC_GLYPHS[glyph]), [glyph]);\n const relief = FILL.has(glyph) ? 30 : 48;\n const [seedY, seedX] = SEED[glyph];\n\n // Tier B — damped pointer parallax. Gates: prop, fine pointer, PRM (live),\n // ambient-motion switch (live via attribute). Listener on window; the\n // sigil itself is inert (pointer-events: none). tanh eases to a ±5° ceiling\n // with no hard clamp seam.\n useEffect(() => {\n if (!parallax) return;\n const el = parRef.current;\n if (!el) return;\n if (!matchMedia('(pointer: fine)').matches) return;\n\n const prm = matchMedia('(prefers-reduced-motion: reduce)');\n let raf = 0;\n let tx = 0;\n let ty = 0;\n let cx = 0;\n let cy = 0;\n\n const allowed = () =>\n !prm.matches && document.documentElement.getAttribute('data-oc-motion') !== 'off';\n\n const onMove = (e: PointerEvent) => {\n if (!allowed()) return;\n tx = Math.tanh(((e.clientX / innerWidth - 0.5) * 2) * 1.2) * 5;\n ty = Math.tanh(((e.clientY / innerHeight - 0.5) * 2) * 1.2) * -5;\n if (!raf) raf = requestAnimationFrame(step);\n };\n const step = () => {\n raf = 0;\n cx += (tx - cx) * 0.045;\n cy += (ty - cy) * 0.045;\n el.style.setProperty('--oc-sigil-ry', `${cx.toFixed(2)}deg`);\n el.style.setProperty('--oc-sigil-rx', `${cy.toFixed(2)}deg`);\n if (Math.abs(tx - cx) + Math.abs(ty - cy) > 0.05) raf = requestAnimationFrame(step);\n };\n const onPrm = () => {\n if (prm.matches) {\n el.style.setProperty('--oc-sigil-rx', '0deg');\n el.style.setProperty('--oc-sigil-ry', '0deg');\n }\n };\n window.addEventListener('pointermove', onMove, { passive: true });\n prm.addEventListener?.('change', onPrm);\n return () => {\n window.removeEventListener('pointermove', onMove);\n prm.removeEventListener?.('change', onPrm);\n cancelAnimationFrame(raf);\n };\n }, [parallax]);\n\n return (\n <div\n aria-hidden=\"true\"\n className={cn('oc-sigil', `oc-sigil--${corner}`, band && 'oc-sigil--band', className)}\n style={\n {\n '--oc-sigil-seed': `${seedY}deg`,\n '--oc-sigil-seed-x': `${seedX}deg`,\n } as React.CSSProperties\n }\n >\n <svg width=\"0\" height=\"0\" style={{ position: 'absolute' }} aria-hidden=\"true\">\n <defs>\n <g id={`${id}-mark`} dangerouslySetInnerHTML={{ __html: mark }} />\n </defs>\n </svg>\n <div className=\"oc-sigil__drift oc-ambient\">\n <div ref={parRef} className=\"oc-sigil__par\">\n {LAYERS.map((n) => (\n <svg\n key={n}\n viewBox=\"0 0 1024 1024\"\n className=\"oc-sigil__layer\"\n style={layerStyle(n, relief)}\n >\n <use href={`#${id}-mark`} />\n </svg>\n ))}\n {/* One directional specular leaf, front of the stack, masked\n upper-left. Colored through --oc-sigil-lift so the\n cypherpunk register (lift = ink) neutralizes it for free.\n The mask is on this LEAF (no 3D descendants) — never on\n __drift/__par, which would flatten preserve-3d. */}\n <svg\n viewBox=\"0 0 1024 1024\"\n className=\"oc-sigil__layer oc-sigil__spec\"\n style={{\n transform: 'translateZ(1.5px)',\n color: `color-mix(in oklab, ${INK}, ${LIFT} 45%)`,\n }}\n >\n <use href={`#${id}-mark`} />\n </svg>\n </div>\n </div>\n </div>\n );\n}\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',\n outline:\n 'bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n // For CTAs placed ON a saturated brand band or a dark section\n // (e.g. a terracotta hero / footer / a forced-dark block) where\n // the surface is dark+light-text in either mode. A neutral white\n // pill + a translucent-white ghost read on any such surface;\n // hardcoded white is deliberate (cf. destructive's text-white).\n onBrand: 'bg-white text-neutral-900 shadow-sm hover:bg-white/90',\n onBrandOutline:\n 'border border-white/40 bg-transparent text-white hover:bg-white/10',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst badgeVariants = cva(\n 'focus-visible:border-ring focus-visible:ring-ring/50 inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3',\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent',\n secondary:\n 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent',\n destructive:\n 'bg-destructive text-destructive-foreground [a&]:hover:bg-destructive/90 border-transparent',\n warning:\n 'bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent',\n success:\n 'bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent',\n info: 'bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent',\n brand: 'bg-brand-soft text-accent-foreground border-transparent',\n neutral:\n 'bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent',\n outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'span';\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as LabelPrimitive from '@radix-ui/react-label';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'flex select-none items-center gap-2 text-sm font-medium leading-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","'use client';\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { CheckIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Checkbox — Radix-backed, skin-aware, accessible. Replaces raw\n * `<input type=\"checkbox\">` (the family had ~18 unstyled instances). Sharp\n * `rounded-sm` (skin radius), brand fill when checked, the family focus ring,\n * and `aria-invalid` error styling for parity with Input/Select/Textarea.\n */\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-input bg-input/30 size-4 shrink-0 rounded-sm border shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground',\n 'aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current\"\n >\n <CheckIcon className=\"size-3.5\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { CircleIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * RadioGroup + RadioGroupItem — Radix-backed, skin-aware, accessible. Replaces\n * raw `<input type=\"radio\">`. Circular (always `rounded-full`, independent of\n * skin radius — radios are round by convention), brand-filled dot when\n * selected, family focus ring, `aria-invalid` parity.\n */\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn('grid gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n 'border-input bg-input/30 text-primary aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:border-primary',\n 'aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-primary text-primary absolute size-2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Switch — Radix-backed on/off toggle, skin-aware, accessible. For binary\n * settings (distinct from the domain-specific ThemeToggle). brand-on track,\n * family focus ring. Track is `rounded-full` by toggle convention; the thumb\n * follows suit.\n */\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'bg-background pointer-events-none block size-4 rounded-full shadow-sm ring-0 transition-transform',\n 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst alertVariants = cva(\n 'relative grid w-full grid-cols-[0_1fr] items-start gap-x-0 gap-y-0.5 rounded-md border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive:\n 'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',\n success:\n 'text-success bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-success/90',\n warning:\n 'text-warning bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n","import type { LucideIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Alert, AlertDescription, AlertTitle } from './alert';\nimport { Button } from './button';\n\ntype AlertVariant = 'default' | 'destructive' | 'warning' | 'success';\n\nexport interface AlertWithActionProps {\n variant?: AlertVariant;\n icon?: LucideIcon;\n title?: string;\n description: React.ReactNode;\n actionLabel?: string;\n onAction?: () => void;\n actionVariant?: 'default' | 'outline' | 'ghost' | 'destructive';\n actionIcon?: React.ReactNode;\n actionDisabled?: boolean;\n actionContent?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Alert with an integrated action button. Standard Alert styling + variants,\n * optional title/icon, optional action button or custom action content.\n */\nexport function AlertWithAction({\n variant = 'default',\n icon: Icon,\n title,\n description,\n actionLabel,\n onAction,\n actionVariant = 'outline',\n actionIcon,\n actionDisabled,\n actionContent,\n className,\n}: AlertWithActionProps) {\n return (\n <Alert variant={variant} className={className}>\n {Icon && <Icon className=\"h-4 w-4\" />}\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>\n {description}\n {(actionLabel || actionContent) && (\n <div className=\"mt-3 flex items-center gap-2\">\n {actionContent}\n {actionLabel && onAction && (\n <Button\n size=\"sm\"\n variant={actionVariant}\n onClick={onAction}\n disabled={actionDisabled}\n className={cn(!actionContent && 'ml-auto')}\n >\n {actionIcon}\n {actionLabel}\n </Button>\n )}\n </div>\n )}\n </AlertDescription>\n </Alert>\n );\n}\n\nexport interface AlertWithCountdownProps {\n variant?: AlertVariant;\n icon?: LucideIcon;\n title?: string;\n description: React.ReactNode;\n countdown: number;\n countdownLabel?: string;\n countdownIcon?: React.ReactNode;\n actionLabel?: string;\n onAction?: () => void;\n actionIcon?: React.ReactNode;\n actionDisabled?: boolean;\n className?: string;\n}\n\n/**\n * Alert with a countdown timer and action button. Auto-pluralizes \"second(s)\"\n * and supports a `{countdown}` placeholder in `countdownLabel`.\n */\nexport function AlertWithCountdown({\n variant = 'default',\n icon: Icon,\n title,\n description,\n countdown,\n countdownLabel,\n countdownIcon,\n actionLabel = 'Check Now',\n onAction,\n actionIcon,\n actionDisabled,\n className,\n}: AlertWithCountdownProps) {\n const label = countdownLabel\n ? countdownLabel.replace('{countdown}', countdown.toString())\n : `Rechecking in ${countdown} second${countdown !== 1 ? 's' : ''}...`;\n\n return (\n <Alert variant={variant} className={className}>\n {Icon && <Icon className=\"h-4 w-4\" />}\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>\n {description}\n <div className=\"mt-3 flex items-center gap-2 text-sm\">\n {countdownIcon}\n <span>{label}</span>\n {onAction && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={onAction}\n disabled={actionDisabled}\n className=\"ml-auto\"\n >\n {actionIcon}\n {actionLabel}\n </Button>\n )}\n </div>\n </AlertDescription>\n </Alert>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Sizing note, and it is load-bearing: `text-base md:text-xs`, not `text-xs`.\n *\n * iOS Safari zooms the viewport when a form field with text under 16px takes\n * focus, and the user is not zoomed back out afterwards — every textarea in\n * the family did this. `text-base` (16px) on mobile suppresses it; `md:text-xs`\n * keeps the 12px mono look on a pointer device, where the zoom behaviour does\n * not exist. Input already used this ladder (`text-base md:text-sm`); Textarea\n * was flat 12px with no responsive step.\n *\n * A consumer passing `text-xs` via className will re-break it — tailwind-merge\n * lets the caller win. Pass the ladder, not a single size.\n */\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'placeholder:text-muted-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 w-full min-w-0 rounded-md border px-3 py-2 font-mono text-base leading-relaxed shadow-xs md:text-xs transition-[color,box-shadow,background-color] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n // aria-invalid parity with Input — error styling when a consumer\n // marks the field invalid.\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","'use client';\n\nimport { Moon, Sun } from 'lucide-react';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useState } from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Button } from './button';\n\n/**\n * Compact icon-button light/dark toggle used in the desktop header. This is the\n * *mode* axis (next-themes `.dark` class) — orthogonal to `OcThemePicker`, which\n * is the named-theme (skin) axis.\n */\nexport function ThemeToggle({ className }: { className?: string }) {\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const isDark = resolvedTheme === 'dark';\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n title={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n className={cn('text-muted-foreground hover:text-foreground', className)}\n >\n {!mounted ? (\n <span className=\"block size-4\" />\n ) : isDark ? (\n <Sun className=\"size-4\" />\n ) : (\n <Moon className=\"size-4\" />\n )}\n </Button>\n );\n}\n\n/**\n * Link-like variant for use inside the mobile drawer (matches other menu items).\n */\nexport function ThemeToggleLink() {\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const isDark = mounted && resolvedTheme === 'dark';\n return (\n <button\n type=\"button\"\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n className=\"hover:text-foreground flex w-full items-center justify-between px-2 py-2 text-left text-xs tracking-wide uppercase transition-colors\"\n >\n <span className=\"tracking-wide lowercase\">\n {'> '}\n {mounted ? (isDark ? 'light mode' : 'dark mode') : 'theme'}\n </span>\n {mounted && (isDark ? <Sun className=\"size-3.5\" /> : <Moon className=\"size-3.5\" />)}\n </button>\n );\n}\n","'use client';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Cohesive \"working\" indicator used at every async hold-point. Two styles, same\n * DNA — a cypherpunk marching-cursor of three dots (no SVG spinner). The CSS\n * lives in `@orangecheck/design/styles.css` (`.oc-working-*`). Each indicator\n * carries an `aria-live=\"polite\"` region announcing the activity.\n */\nexport interface WorkingProps {\n /** Short verb phrase describing what's happening. Lowercase. */\n text: string;\n /** Compact (button-sized) or normal (inline block). */\n size?: 'sm' | 'md';\n /** Optional — show a progress ratio (e.g. \"2 of 4 relays\"). */\n progress?: string;\n className?: string;\n}\n\nexport function Working({ text, size = 'md', progress, className }: WorkingProps) {\n const isSmall = size === 'sm';\n return (\n <span\n aria-live=\"polite\"\n className={cn(\n 'inline-flex items-center gap-2 font-mono',\n isSmall ? 'text-[11px]' : 'text-xs',\n 'text-muted-foreground',\n className\n )}\n >\n <span className=\"oc-working-cursor\" aria-hidden>\n <span className=\"oc-working-dot\" style={{ animationDelay: '0ms' }}>\n ·\n </span>\n <span className=\"oc-working-dot\" style={{ animationDelay: '140ms' }}>\n ·\n </span>\n <span className=\"oc-working-dot\" style={{ animationDelay: '280ms' }}>\n ·\n </span>\n </span>\n <span className=\"oc-working-text\">\n {text}\n {progress && <span className=\"text-muted-foreground/60 ml-1.5\">[{progress}]</span>}\n </span>\n </span>\n );\n}\n\n/**\n * Full-panel working block. Use inside a terminal to take the whole card.\n */\nexport function WorkingPanel({ text, progress }: Pick<WorkingProps, 'text' | 'progress'>) {\n return (\n <div className=\"terminal\">\n <div className=\"terminal-title\">\n <span className=\"terminal-dot\" />\n <span className=\"terminal-dot\" />\n <span className=\"terminal-dot\" />\n <span className=\"ml-2\">in progress</span>\n </div>\n <div className=\"flex items-center gap-3 p-5\">\n <Working text={text} {...(progress ? { progress } : {})} />\n </div>\n </div>\n );\n}\n","import * as React from 'react';\n\ninterface Props {\n children: React.ReactNode;\n /** Full custom fallback. Takes precedence over `title`/`message`. */\n fallback?: (error: Error, reset: () => void) => React.ReactNode;\n /** Title shown in the default fallback's terminal strip (default \"! fatal\"). */\n title?: string;\n /** Reassurance line below the error (default \"this page crashed. reload to recover.\"). */\n message?: string;\n /** Called on catch — wire to Sentry/analytics. Runs alongside the console log. */\n onError?: (error: Error, info: React.ErrorInfo) => void;\n}\n\ninterface State {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends React.Component<Props, State> {\n state: State = { error: null };\n\n static getDerivedStateFromError(error: Error): State {\n return { error };\n }\n\n componentDidCatch(error: Error, info: React.ErrorInfo) {\n // Default behaviour logs; pass `onError` to forward to Sentry or similar.\n console.error('[ErrorBoundary]', error, info);\n this.props.onError?.(error, info);\n }\n\n reset = () => this.setState({ error: null });\n\n render() {\n if (this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback(this.state.error, this.reset);\n }\n return (\n <div className=\"container py-16\">\n <div className=\"terminal\">\n <div className=\"terminal-title\">\n <span className=\"text-destructive flex items-center gap-1.5\">\n {this.props.title ?? '! fatal'}\n </span>\n </div>\n <div className=\"space-y-3 p-5 font-mono text-xs leading-relaxed\">\n <p>\n <span className=\"text-destructive\">{'> '}err:</span>{' '}\n {this.state.error.message || 'unknown error'}\n </p>\n <p className=\"text-muted-foreground\">\n {'> '}\n {this.props.message ?? 'this page crashed. reload to recover.'}\n </p>\n <button\n type=\"button\"\n onClick={this.reset}\n className=\"bg-primary text-primary-foreground hover:bg-primary/90 mt-2 inline-flex items-center justify-center gap-2 rounded-md px-4 py-2 font-mono text-xs tracking-widest uppercase\"\n >\n retry\n </button>\n </div>\n </div>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","import { cn } from '../tokens/cn';\n\nexport interface SkeletonProps {\n className?: string;\n}\n\n/** Inert shimmer placeholder. Pulses subtly while data is loading. */\nexport function Skeleton({ className }: SkeletonProps) {\n return <div className={cn('bg-muted/40 animate-pulse rounded-sm', className)} />;\n}\n","'use client';\n\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","'use client';\n\nimport * as SheetPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Sheet(props: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger(props: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose(props: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal(props: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'left' | 'right' | 'top' | 'bottom';\n}) {\n const sideClasses: Record<string, string> = {\n right: 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n top: 'inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom: 'inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n };\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'bg-background fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=closed]:animate-out data-[state=open]:duration-500 data-[state=open]:animate-in',\n sideClasses[side],\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"sheet-header\" className={cn('flex flex-col gap-1.5 p-4', className)} {...props} />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetOverlay,\n SheetPortal,\n SheetTitle,\n SheetTrigger,\n};\n","'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn('text-lg leading-none font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { AlertTriangle } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\n\n/**\n * Promise-based replacement for `window.confirm` in the house design language.\n * Call `confirm({...})` from anywhere; a single mounted `<ConfirmHost />` renders\n * it. Async (resolves to a boolean) and provider-less by design.\n */\n\nexport interface ConfirmOptions {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n}\n\ninterface PendingConfirm extends ConfirmOptions {\n resolve: (ok: boolean) => void;\n}\n\n// Read NODE_ENV without depending on @types/node (this is a browser package).\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingConfirm | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\nexport function confirm(opts: ConfirmOptions): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[ConfirmDialog] confirm() called but no <ConfirmHost /> is mounted');\n }\n });\n}\n\n/** Singleton dialog host. Mount once at the app root. */\nexport function ConfirmHost() {\n const [state, setState] = useState<PendingConfirm | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn(\n '[ConfirmDialog] multiple <ConfirmHost /> instances mounted — the last one wins'\n );\n }\n notifyHost = () => setState(pending);\n if (pending) setState(pending);\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (ok: boolean) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(ok);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(false)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\">\n <div className=\"terminal-title\">\n <span\n className={\n 'flex items-center gap-1.5 ' +\n (state.destructive ? 'text-destructive' : 'text-primary')\n }\n >\n <AlertTriangle className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap [overflow-wrap:anywhere]\">\n {state.message}\n </div>\n </Dialog.Description>\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(false)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button\n onClick={() => close(true)}\n className={\n 'font-display tracking-wide uppercase ' +\n (state.destructive\n ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90'\n : '')\n }\n >\n {state.confirmLabel ?? 'confirm'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { Pencil } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Label } from './label';\n\n/**\n * Promise-based replacement for `window.prompt`, in the house design language.\n * Call `prompt({...})`; mount one `<PromptHost />` at the app root (alongside\n * `<ConfirmHost />`). Supports a masked `secret` input, a matching\n * `confirmField` (\"choose a passphrase, twice\"), and a `validate` hook.\n */\n\nexport interface PromptOptions {\n title: string;\n message?: string;\n label?: string;\n placeholder?: string;\n defaultValue?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n /** Mask the input. */\n secret?: boolean;\n /** Show a second input that must match the first. Implies validation. */\n confirmField?: boolean;\n /** Minimum accepted length. */\n minLength?: number;\n /** Return an error string to block submission, or null to allow it. */\n validate?: (value: string) => string | null;\n}\n\ninterface PendingPrompt extends PromptOptions {\n resolve: (value: string | null) => void;\n}\n\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingPrompt | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\n/** Open a prompt dialog. Resolves to the entered string, or null if cancelled. */\nexport function prompt(opts: PromptOptions): Promise<string | null> {\n return new Promise<string | null>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[PromptDialog] prompt() called but no <PromptHost /> is mounted');\n }\n });\n}\n\nexport function PromptHost() {\n const [state, setState] = useState<PendingPrompt | null>(null);\n const [value, setValue] = useState('');\n const [confirmValue, setConfirmValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn('[PromptDialog] multiple <PromptHost /> instances mounted');\n }\n notifyHost = () => {\n setValue(pending?.defaultValue ?? '');\n setConfirmValue('');\n setError(null);\n setState(pending);\n };\n if (pending) notifyHost();\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (result: string | null) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(result);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n const submit = useCallback(() => {\n if (!state) return;\n const v = value;\n if (state.minLength && v.length < state.minLength) {\n setError(`must be at least ${state.minLength} characters`);\n return;\n }\n if (state.confirmField && v !== confirmValue) {\n setError('the two entries do not match');\n return;\n }\n if (state.validate) {\n const msg = state.validate(v);\n if (msg) {\n setError(msg);\n return;\n }\n }\n close(v);\n }, [state, value, confirmValue, close]);\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(null)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content\n className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n }}\n >\n <div className=\"terminal-title\">\n <span className=\"text-primary flex items-center gap-1.5\">\n <Pencil className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n {state.message && (\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap\">\n {state.message}\n </div>\n </Dialog.Description>\n )}\n <div>\n {state.label && <Label>{state.label}</Label>}\n <Input\n autoFocus\n type={state.secret ? 'password' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n placeholder={state.placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={\n (state.label ? 'mt-2 ' : '') + (state.secret ? 'font-mono' : '')\n }\n />\n </div>\n {state.confirmField && (\n <div>\n <Label>confirm</Label>\n <Input\n type={state.secret ? 'password' : 'text'}\n value={confirmValue}\n onChange={(e) => {\n setConfirmValue(e.target.value);\n setError(null);\n }}\n placeholder=\"re-enter to confirm\"\n autoComplete=\"off\"\n spellCheck={false}\n className={'mt-2 ' + (state.secret ? 'font-mono' : '')}\n />\n </div>\n )}\n {error && <p className=\"text-destructive font-mono text-xs\">{error}</p>}\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(null)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button onClick={submit} className=\"font-display tracking-wide uppercase\">\n {state.confirmLabel ?? 'ok'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface ModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n subtitle?: string;\n children: ReactNode;\n /** Optional toolbar slot rendered to the right of the title. */\n actions?: ReactNode;\n /** Bias narrower for input-focused modals. */\n width?: 'wide' | 'narrow';\n}\n\n/**\n * Family-standard near-fullscreen modal with terminal-window chrome. Dense data\n * gets room to breathe; ESC + backdrop close, focus trapped while open. Backed\n * by Radix Dialog. Visual: ~95vw × 90vh, scrollable body, pinned title strip.\n */\nexport function Modal({ open, onOpenChange, title, subtitle, children, actions, width = 'wide' }: ModalProps) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"bg-background/80 fixed inset-0 z-[100] backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n <DialogPrimitive.Content\n className={cn(\n 'terminal fixed top-[5vh] left-1/2 z-[110] flex max-h-[90vh] -translate-x-1/2 flex-col overflow-hidden rounded-sm border',\n width === 'wide' ? 'w-[95vw] max-w-screen-2xl' : 'w-[80vw] max-w-3xl',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95'\n )}\n >\n <div className=\"terminal-title flex shrink-0 items-center justify-between gap-3\">\n {/* Same shrink priority as Card's header — the expanded\n view must not clip a title the collapsed one keeps. */}\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"terminal-dot\" aria-hidden />\n <span className=\"terminal-dot opacity-70\" aria-hidden />\n <span className=\"terminal-dot opacity-50\" aria-hidden />\n <DialogPrimitive.Title className=\"ml-2 truncate [flex-shrink:1]\">{title}</DialogPrimitive.Title>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 min-w-0 truncate text-[10px] normal-case tracking-normal [flex-shrink:100]\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {actions}\n <DialogPrimitive.Close\n aria-label=\"close\"\n className=\"text-muted-foreground hover:text-foreground inline-flex h-6 w-6 items-center justify-center rounded-sm\"\n >\n <X className=\"size-3.5\" />\n </DialogPrimitive.Close>\n </div>\n </div>\n <div className=\"flex-1 overflow-y-auto p-4 sm:p-6\">{children}</div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n","'use client';\n\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { Button } from './button';\n\nexport interface PaginationProps {\n page: number;\n pageSize: number;\n total: number;\n onPage: (page: number) => void;\n className?: string;\n}\n\n/**\n * The family's consistent pagination control: a \"start–end of total\" range\n * label plus prev / next chevron buttons. Page-index based (0-based). Renders\n * nothing when everything fits on one page.\n */\nexport function Pagination({ page, pageSize, total, onPage, className }: PaginationProps) {\n if (total <= pageSize) return null;\n const start = page * pageSize;\n const shown = Math.max(0, Math.min(pageSize, total - start));\n return (\n <div className={'flex items-center justify-between ' + (className ?? 'mt-3')}>\n <span className=\"text-muted-foreground/70 font-mono text-[10px]\">\n {start + 1}–{start + shown} of {total}\n </span>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => onPage(page - 1)} disabled={page === 0}>\n <ChevronLeft className=\"size-4\" /> prev\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPage(page + 1)}\n disabled={start + pageSize >= total}\n >\n next <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","'use client';\n\nimport * as Popover from '@radix-ui/react-popover';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * `<Tooltip>` — the family's hover/focus tooltip primitive.\n *\n * Built on `@radix-ui/react-popover` (already a dependency — we do NOT add\n * `@radix-ui/react-tooltip`) but driven by a *controlled* open boolean so we\n * own the timing and gating Radix's popover doesn't give a tooltip:\n *\n * - hover-intent: opens after `openDelay`ms of sustained pointer hover,\n * closes after a short `closeDelay` grace (WCAG 1.4.13 hoverable).\n * - keyboard parity: also opens on keyboard focus (detected via input-\n * modality, since `:focus-visible` isn't applied yet inside the focus\n * event), closes on blur/Escape, never steals or traps focus.\n * - pointer-fine only: the hover path is gated behind\n * `(hover: hover) and (pointer: fine)` so it never fires on touch — by\n * pointer *type*, not a width breakpoint (a coarse tablet ≥ sm is touch).\n * - `disabled`: a hard force-close, used by `OcLogoDropdown` so the tip and\n * the family menu (which share a trigger) can never paint at once.\n *\n * The content is decorative reinforcement: it's `aria-hidden`, and\n * `pointer-events-none` so a mis-detected pointer can never intercept the\n * click path to the trigger. The authoritative accessible name belongs on the\n * trigger's own `aria-label`.\n */\n\nconst TOOLTIP_SURFACE_CLASS =\n 'bg-popover text-popover-foreground border-border rounded-md border p-2.5 shadow-md';\n\n// Same idiom as the popover/dialog primitives, a touch faster (tooltips are\n// lighter than dialogs) with a smaller 4px travel. Reduced-motion is handled\n// globally by the family `prefers-reduced-motion` reset — nothing to add here.\nconst TOOLTIP_MOTION_CLASS =\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 origin-(--radix-popover-content-transform-origin) duration-150 ease-out';\n\nexport interface TooltipProps {\n /** The tooltip body. */\n content: React.ReactNode;\n /** A single trigger element (a `<button>` etc.); receives the hover/focus wiring. */\n children: React.ReactElement;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n collisionPadding?: number;\n /** ms of sustained hover before opening. Default 300 (deliberate, not twitchy). */\n openDelay?: number;\n /** ms grace before closing on pointer-leave. Default 90. */\n closeDelay?: number;\n /** Force the tooltip closed regardless of hover/focus (e.g. while a shared menu is open). */\n disabled?: boolean;\n /** Portal to `<body>` (default true). Set false to keep content inline so it inherits a scoped `data-oc-theme`. */\n portal?: boolean;\n /** z-index utility for the content. Default `z-50`. */\n zIndexClassName?: string;\n contentClassName?: string;\n}\n\ninterface TriggerHandlerProps {\n onPointerEnter?: React.PointerEventHandler;\n onPointerLeave?: React.PointerEventHandler;\n onPointerDown?: React.PointerEventHandler;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n onKeyDown?: React.KeyboardEventHandler;\n}\n\nfunction compose<E>(theirs: ((e: E) => void) | undefined, ours: (e: E) => void) {\n return (e: E) => {\n theirs?.(e);\n ours(e);\n };\n}\n\n/**\n * Input-modality tracker (the `:focus-visible` polyfill heuristic).\n * `:focus-visible` is NOT reliably applied synchronously inside the `focus`\n * event, so reading `el.matches(':focus-visible')` there misses keyboard focus.\n * Instead we record the last input type from global capture-phase listeners\n * that fire BEFORE focus: a keydown means the focus that follows is keyboard-\n * driven (show the hint); a pointerdown means it's a click (don't — that would\n * flash the tip over the menu).\n */\nlet lastInputWasKeyboard = false;\nlet modalityInstalled = false;\nfunction installModalityTracking() {\n if (modalityInstalled || typeof window === 'undefined') return;\n modalityInstalled = true;\n window.addEventListener('keydown', () => (lastInputWasKeyboard = true), true);\n window.addEventListener('pointerdown', () => (lastInputWasKeyboard = false), true);\n}\n\nexport function Tooltip({\n content,\n children,\n side = 'bottom',\n align = 'start',\n sideOffset = 8,\n collisionPadding = 12,\n openDelay = 300,\n closeDelay = 90,\n disabled = false,\n portal = true,\n zIndexClassName = 'z-50',\n contentClassName,\n}: TooltipProps) {\n const [hovering, setHovering] = React.useState(false);\n const [focusing, setFocusing] = React.useState(false);\n const [isFinePointer, setIsFinePointer] = React.useState(false);\n const openTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Detect a true mouse (fine pointer + real hover). Defaults false for SSR\n // and first client render, then resolves in the effect — a normal post-mount\n // update, not a hydration mismatch.\n React.useEffect(() => {\n installModalityTracking();\n const mq = window.matchMedia('(hover: hover) and (pointer: fine)');\n const apply = () => setIsFinePointer(mq.matches);\n apply();\n mq.addEventListener('change', apply);\n return () => mq.removeEventListener('change', apply);\n }, []);\n\n const clearTimers = React.useCallback(() => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n }, []);\n\n React.useEffect(() => clearTimers, [clearTimers]);\n\n // When force-closed (e.g. the shared menu opened), drop the hover latch so\n // the tip doesn't snap back with no delay the instant the menu closes while\n // the pointer is still over the trigger. `focusing` is left alone — a\n // keyboard user who stays focused should still get the immediate hint.\n React.useEffect(() => {\n if (disabled) {\n clearTimers();\n setHovering(false);\n }\n }, [disabled, clearTimers]);\n\n const handlePointerEnter = () => {\n if (!isFinePointer) return;\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = setTimeout(() => setHovering(true), openDelay);\n };\n const handlePointerLeave = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n closeTimer.current = setTimeout(() => setHovering(false), closeDelay);\n };\n // The first press of EITHER a single- or double-click tears the tip down\n // before the trigger's own onClick toggles a menu, so it never overlaps.\n const handlePointerDown = () => {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n };\n const handleFocus = () => {\n // Only keyboard focus reveals the hint — a mouse click also focuses the\n // trigger, and re-popping the tip over an opening menu would be the bug.\n // Use the modality flag (set before focus fires) rather than\n // `:focus-visible`, which isn't applied yet inside the focus event.\n if (lastInputWasKeyboard) {\n clearTimers();\n setFocusing(true);\n }\n };\n const handleBlur = () => {\n clearTimers();\n setFocusing(false);\n };\n // Escape dismisses the focus-revealed tip without moving focus (WCAG 1.4.13).\n // Handled on the focused trigger directly — robust regardless of Radix's\n // dismissal internals (we suppress its focus-outside dismissal below).\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n }\n };\n\n const effectiveOpen = !disabled && ((isFinePointer && hovering) || focusing);\n\n const extra: TriggerHandlerProps = {};\n const childProps = children.props as TriggerHandlerProps;\n extra.onPointerEnter = compose(childProps.onPointerEnter, handlePointerEnter);\n extra.onPointerLeave = compose(childProps.onPointerLeave, handlePointerLeave);\n extra.onPointerDown = compose(childProps.onPointerDown, handlePointerDown);\n extra.onFocus = compose(childProps.onFocus, handleFocus);\n extra.onBlur = compose(childProps.onBlur, handleBlur);\n extra.onKeyDown = compose(childProps.onKeyDown, handleKeyDown);\n const trigger = React.cloneElement(children, extra);\n\n const contentEl = (\n <Popover.Content\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n aria-hidden\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n // The tip is aria-hidden + non-focusable, so focus legitimately\n // stays on the trigger (outside the content). Don't let Radix's\n // focus-outside dismissal close a focus-revealed tip; Escape and\n // pointer-down-outside still dismiss.\n onFocusOutside={(e) => e.preventDefault()}\n className={cn(\n TOOLTIP_SURFACE_CLASS,\n TOOLTIP_MOTION_CLASS,\n 'pointer-events-none',\n zIndexClassName,\n contentClassName\n )}\n >\n {content}\n </Popover.Content>\n );\n\n return (\n <Popover.Root\n open={effectiveOpen}\n onOpenChange={(o) => {\n // Radix requests close on Escape / outside interaction — sync our\n // own state so a re-hover re-arms cleanly. We never open via Radix.\n if (!o) {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n }\n }}\n modal={false}\n >\n <Popover.Anchor asChild>{trigger}</Popover.Anchor>\n {portal ? <Popover.Portal>{contentEl}</Popover.Portal> : contentEl}\n </Popover.Root>\n );\n}\n","'use client';\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown, Plus } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn('border-b', className)} {...props} />\n));\nAccordionItem.displayName = 'AccordionItem';\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> & {\n /** Toggle glyph: a rotating chevron (default) or a marketing plus that\n * turns into an ✕ on open, tinted with the brand. */\n icon?: 'chevron' | 'plusMinus';\n }\n>(({ className, children, icon = 'chevron', ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline',\n icon === 'chevron'\n ? '[&[data-state=open]>svg]:rotate-180'\n : '[&[data-state=open]>svg]:rotate-45',\n className\n )}\n {...props}\n >\n {children}\n {icon === 'chevron' ? (\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n ) : (\n <Plus className=\"text-primary h-5 w-5 shrink-0 transition-transform duration-200\" />\n )}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","'use client';\n\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow,background-color] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","'use client';\n\nimport { useTheme } from 'next-themes';\nimport { Toaster as Sonner, type ToasterProps } from 'sonner';\n\n/**\n * Toast host in the house design language. Mount once at the app root, then\n * call `toast()` from `sonner` anywhere. Re-exported here for convenience.\n */\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast: 'group toast group-[.toaster]:bg-card group-[.toaster]:text-card-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-foreground group-[.toast]:text-background',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n error: 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n success:\n 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n warning:\n 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n info: 'group-[.toaster]:!bg-card group-[.toaster]:!text-muted-foreground group-[.toaster]:!border-border',\n },\n }}\n style={\n {\n '--normal-bg': 'var(--card)',\n '--normal-text': 'var(--card-foreground)',\n '--normal-border': 'var(--border)',\n '--error-bg': 'var(--card)',\n '--error-text': 'var(--foreground)',\n '--error-border': 'var(--border)',\n '--success-bg': 'var(--card)',\n '--success-text': 'var(--foreground)',\n '--success-border': 'var(--border)',\n '--warning-bg': 'var(--card)',\n '--warning-text': 'var(--foreground)',\n '--warning-border': 'var(--border)',\n '--info-bg': 'var(--card)',\n '--info-text': 'var(--muted-foreground)',\n '--info-border': 'var(--border)',\n } as React.CSSProperties\n }\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst surfaceVariants = cva('rounded-xl transition-colors', {\n variants: {\n tone: {\n /* Crisp panel floating on the page — the default soft card. */\n default: 'bg-card text-card-foreground',\n /* Warm-gray recessed panel. */\n muted: 'bg-muted text-foreground',\n /* Solid brand fill — small terracotta panel; inverts child text. */\n brand: 'bg-brand text-brand-foreground',\n /* High-contrast neutral panel (near-black in light, near-white in dark). */\n contrast: 'bg-foreground text-background',\n /* Translucent lightened tile for cards sitting ON a brand band. */\n onBrand:\n 'text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]',\n /* Frame only, transparent fill. */\n outline: 'bg-transparent text-foreground',\n },\n elevation: {\n none: 'shadow-none',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n },\n bordered: {\n true: 'border',\n false: '',\n },\n pad: {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-5 sm:p-6',\n lg: 'p-6 sm:p-8',\n },\n },\n defaultVariants: {\n tone: 'default',\n elevation: 'sm',\n bordered: true,\n pad: 'md',\n },\n});\n\nexport interface SurfaceProps\n extends Omit<React.ComponentProps<'div'>, 'color'>,\n VariantProps<typeof surfaceVariants> {}\n\n/**\n * Surface — the soft, large-radius, elevated panel that the warm theme sits on.\n *\n * The package `Card` is a TERMINAL-window frame (mono title strip, terminal\n * dots) for dashboards; Surface is its plain marketing/consumer counterpart —\n * a bg-card panel with token-routed radius + soft elevation and no chrome.\n * Re-skins per skin via the radius + shadow tokens. Use this for feature cards,\n * sign-in cards, trust chips — anything that is NOT a terminal panel.\n */\nexport function Surface({\n className,\n tone,\n elevation,\n bordered,\n pad,\n ...props\n}: SurfaceProps) {\n return (\n <div\n data-slot=\"surface\"\n className={cn(surfaceVariants({ tone, elevation, bordered, pad }), className)}\n {...props}\n />\n );\n}\n\nexport { surfaceVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst iconBadgeVariants = cva(\n 'inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none',\n {\n variants: {\n tone: {\n /* The signature peach tile — soft accent fill, terracotta glyph.\n Auto-swaps to warm-dark + light-peach in dark mode via tokens. */\n peach: 'bg-accent text-accent-foreground',\n /* Inverted near-black tile, light glyph (\"never do\" promises). */\n dark: 'bg-foreground text-background',\n /* Solid brand tile. */\n brand: 'bg-primary text-primary-foreground',\n /* White tile on a brand band, terracotta glyph (numbered steps). */\n onBrand: 'bg-brand-foreground text-primary',\n /* Quiet neutral tile. */\n muted: 'bg-muted text-foreground',\n /* Crisp white (card-colored) tile with a terracotta glyph and a\n soft lift — the elevated icon chip on muted/colored cards. */\n surface: 'bg-card text-primary shadow-sm',\n },\n size: {\n sm: 'size-9 text-xs [&_svg]:size-4',\n md: 'size-11 text-sm [&_svg]:size-5',\n lg: 'size-12 text-base [&_svg]:size-6',\n xl: 'size-14 text-lg [&_svg]:size-7',\n },\n },\n defaultVariants: { tone: 'peach', size: 'md' },\n }\n);\n\nexport interface IconBadgeProps\n extends Omit<React.ComponentProps<'span'>, 'color'>,\n VariantProps<typeof iconBadgeVariants> {}\n\n/**\n * IconBadge — a rounded-square tile holding a lucide icon OR a number/short\n * label. The theme's most-reused decorative atom (feature-card icons, numbered\n * steps, the verified chip). Distinct from the text `Badge` pill: this is a\n * fixed-size square tile. Tones map to skin tokens so the same markup recolours\n * across skins and light/dark (peach ↔ warm-dark).\n *\n * <IconBadge tone=\"peach\"><Lock /></IconBadge>\n * <IconBadge tone=\"onBrand\" size=\"sm\">1</IconBadge>\n */\nexport function IconBadge({ className, tone, size, children, ...props }: IconBadgeProps) {\n return (\n <span\n data-slot=\"icon-badge\"\n className={cn(iconBadgeVariants({ tone, size }), className)}\n {...props}\n >\n {children}\n </span>\n );\n}\n\nexport { iconBadgeVariants };\n","\"use client\";\n\nimport { Maximize2 } from \"lucide-react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { cn } from \"../tokens/cn\";\nimport { Modal } from \"./modal\";\n\nexport interface CardProps {\n id?: string;\n title: string;\n subtitle?: string;\n refreshedAt?: string | null;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n tone?: \"default\" | \"warning\" | \"destructive\" | \"muted\";\n /**\n * When true (default) renders a fullscreen-expand icon in the title strip;\n * clicking pops the same body content into a fullscreen Modal. Set false for\n * tiny cards where fullscreen adds nothing.\n */\n expandable?: boolean;\n}\n\n/**\n * Terminal-window framed card — title strip (terminal dots) + optional refresh\n * timestamp/actions + body. The canonical dashboard/cockpit panel. Expandable\n * by default: surfaces an expand icon that opens the same body in a fullscreen\n * Modal.\n */\nexport function Card({\n id,\n title,\n subtitle,\n refreshedAt,\n actions,\n children,\n className,\n tone = \"default\",\n expandable = true,\n}: CardProps) {\n const [expanded, setExpanded] = useState(false);\n\n const toneClass =\n tone === \"warning\"\n ? \"border-warning/60\"\n : tone === \"destructive\"\n ? \"border-destructive/60\"\n : tone === \"muted\"\n ? \"border-border opacity-90\"\n : \"border-border\";\n\n return (\n <>\n <section\n id={id}\n className={cn(\n \"terminal flex flex-col rounded-sm border scroll-mt-16\",\n toneClass,\n className,\n )}\n >\n <div className=\"terminal-title flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"terminal-dot\" aria-hidden />\n <span className=\"terminal-dot opacity-70\" aria-hidden />\n <span className=\"terminal-dot opacity-50\" aria-hidden />\n {/* Shrink priority, not equal shrink. Both spans truncate, so with\n the default flex-shrink:1 a narrow card (any two-column grid)\n clipped the TITLE first — \"§ settlement · t…\" — losing the one\n word that says what the panel is while keeping a subtitle nobody\n can read either. The subtitle now absorbs ~100× the squeeze, so\n it collapses fully before the title gives up a character. */}\n <span className=\"ml-2 truncate [flex-shrink:1]\">{title}</span>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 min-w-0 truncate text-[10px] tracking-normal normal-case [flex-shrink:100]\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {refreshedAt && (\n <span className=\"text-muted-foreground/60 hidden text-[10px] tracking-normal normal-case sm:inline\">\n {refreshedAt}\n </span>\n )}\n {actions}\n {expandable && (\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n aria-label={`expand ${title}`}\n title=\"expand to fullscreen\"\n className=\"text-muted-foreground/70 hover:text-foreground inline-flex h-6 w-6 items-center justify-center rounded-sm\"\n >\n <Maximize2 className=\"size-3\" />\n </button>\n )}\n </div>\n </div>\n <div className=\"flex-1 p-4 sm:p-5\">{children}</div>\n </section>\n\n {expandable && (\n <Modal\n open={expanded}\n onOpenChange={setExpanded}\n title={title}\n {...(subtitle ? { subtitle } : {})}\n actions={\n refreshedAt ? (\n <span className=\"text-muted-foreground/60 hidden text-[10px] tracking-normal normal-case sm:inline\">\n {refreshedAt}\n </span>\n ) : null\n }\n >\n {children}\n </Modal>\n )}\n </>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface SparklineProps {\n data: ReadonlyArray<number>;\n width?: number;\n height?: number;\n className?: string;\n /** Render a soft area-fill under the line. */\n area?: boolean;\n}\n\n/**\n * Tiny inline SVG sparkline. No library — keeps the bundle small and the look\n * consistent with the cypherpunk family aesthetic. Degenerates gracefully to a\n * flat line for empty/single-point data.\n */\nexport function Sparkline({ data, width = 96, height = 24, area = false, className }: SparklineProps) {\n if (data.length === 0) {\n return (\n <svg width={width} height={height} className={cn(className)} aria-hidden>\n <line\n x1={0}\n x2={width}\n y1={height / 2}\n y2={height / 2}\n stroke=\"currentColor\"\n strokeWidth={1}\n opacity={0.25}\n />\n </svg>\n );\n }\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n const step = data.length === 1 ? width : width / (data.length - 1);\n\n const points = data.map((v, i) => {\n const x = i * step;\n const y = height - ((v - min) / range) * (height - 2) - 1;\n return [x, y] as const;\n });\n\n const linePath = points\n .map(([x, y], i) => `${i === 0 ? 'M' : 'L'}${x.toFixed(2)},${y.toFixed(2)}`)\n .join(' ');\n\n const areaPath = area\n ? `${linePath} L${width.toFixed(2)},${height.toFixed(2)} L0,${height.toFixed(2)} Z`\n : null;\n\n return (\n <svg\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cn('text-primary', className)}\n aria-hidden\n >\n {areaPath && <path d={areaPath} fill=\"currentColor\" opacity={0.12} />}\n <path d={linePath} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.25} />\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface StatBlockProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional \"vs prior period\" delta — arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n className?: string;\n}\n\n/**\n * A single labelled value cell — the building block for every counter grid in a\n * dashboard. Optional delta arrow + colour for period-over-period deltas.\n * (Richer than StatTile: carries a delta. Use StatGrid for laid-out grids.)\n */\nexport function StatBlock({ label, value, sub, delta, tone = 'default', className }: StatBlockProps) {\n const toneClass =\n tone === 'success'\n ? 'text-success'\n : tone === 'warning'\n ? 'text-warning'\n : tone === 'destructive'\n ? 'text-destructive'\n : 'text-foreground';\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <span className=\"label-mono text-muted-foreground text-[10px]\">{label}</span>\n <span\n className={cn(\n 'font-display text-2xl font-bold tracking-tight tabular-nums',\n toneClass\n )}\n >\n {value}\n </span>\n <div className=\"flex items-baseline gap-2\">\n {sub && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide lowercase\">\n {sub}\n </span>\n )}\n {delta && (\n <span\n className={cn(\n 'font-mono text-[11px] tracking-wide',\n delta.value > 0\n ? 'text-success'\n : delta.value < 0\n ? 'text-destructive'\n : 'text-muted-foreground'\n )}\n >\n {delta.value > 0 ? '▲' : delta.value < 0 ? '▼' : '·'}{' '}\n {Math.abs(delta.value).toFixed(1)}\n {delta.suffix ?? '%'}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface BarProps {\n /** 0–100; clamped. */\n pct: number;\n accent?: 'primary' | 'warning' | 'destructive' | 'success';\n label?: string;\n right?: string;\n className?: string;\n}\n\nconst ACCENT: Record<NonNullable<BarProps['accent']>, string> = {\n primary: 'bg-primary',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n success: 'bg-success',\n};\n\n/** Horizontal capacity/progress bar with optional label + right-aligned value. */\nexport function Bar({ pct, accent = 'primary', label, right, className }: BarProps) {\n const clamped = Math.max(0, Math.min(100, pct));\n return (\n <div className={cn(className)}>\n {(label || right) && (\n <div className=\"flex items-baseline justify-between font-mono text-[10.5px] tracking-widest uppercase\">\n {label && <span className=\"text-muted-foreground\">{label}</span>}\n {right && <span className=\"text-foreground tabular-nums\">{right}</span>}\n </div>\n )}\n <div className=\"bg-muted mt-1.5 h-1.5 w-full overflow-hidden\">\n <div className={cn('h-full', ACCENT[accent])} style={{ width: `${clamped}%` }} />\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport type StatusTone = 'success' | 'warning' | 'destructive' | 'muted' | 'primary' | 'info';\n\n/**\n * - `plain` (default): borderless, lowercase, tone-coloured text + optional icon.\n * - `bordered`: a bordered, uppercase badge (`border-{tone}/40 text-{tone}`) —\n * the variant www's StateBadge and me's\n * compliance/severity pills all hand-roll.\n */\nexport type StatusPillVariant = 'plain' | 'bordered';\n\nexport interface StatusPillProps {\n /** Status label (rendered lowercase in `plain`, uppercase in `bordered`). */\n label: string;\n tone?: StatusTone;\n variant?: StatusPillVariant;\n /** `bordered` only: add a `bg-{tone}/10` fill for at-a-glance emphasis on\n * dense dashboards (me's compliance/severity pills). Ignored when `plain`. */\n filled?: boolean;\n /** Optional leading icon (e.g. a lucide icon sized size-3). */\n icon?: ReactNode;\n className?: string;\n}\n\nconst TONE: Record<StatusTone, string> = {\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n primary: 'text-primary',\n info: 'text-info',\n};\n\nconst BORDER_TONE: Record<StatusTone, string> = {\n success: 'border-success/40 text-success',\n warning: 'border-warning/40 text-warning',\n destructive: 'border-destructive/40 text-destructive',\n muted: 'border-muted-foreground/40 text-muted-foreground',\n primary: 'border-primary/40 text-primary',\n info: 'border-info/40 text-info',\n};\n\nconst FILL_TONE: Record<StatusTone, string> = {\n success: 'bg-success/10',\n warning: 'bg-warning/10',\n destructive: 'bg-destructive/10',\n muted: 'bg-muted/30',\n primary: 'bg-primary/10',\n info: 'bg-info/10',\n};\n\n/**\n * Generic state pill — the canonical form of the per-domain status pills that\n * me (compliance/severity) and others reimplement.\n * Apps map their domain status → { tone, label, icon }; this renders it\n * consistently. Two variants: `plain` (borderless lowercase) and `bordered`\n * (uppercase badge with a tone-tinted border).\n */\nexport function StatusPill({\n label,\n tone = 'muted',\n variant = 'plain',\n filled = false,\n icon,\n className,\n}: StatusPillProps) {\n if (variant === 'bordered') {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 border px-1.5 py-0.5 font-mono text-[9px] tracking-widest uppercase',\n BORDER_TONE[tone],\n filled && FILL_TONE[tone],\n className\n )}\n >\n {icon}\n {label}\n </span>\n );\n }\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 font-mono text-[11px] tracking-wider lowercase',\n TONE[tone],\n className\n )}\n >\n {icon}\n {label}\n </span>\n );\n}\n\n/** One status → presentation entry. `label` defaults to the status key. */\nexport interface StatusPillSpec {\n tone: StatusTone;\n label?: string;\n icon?: ReactNode;\n}\n\n/**\n * makeStatusPill — build a domain-specific status pill from a status→spec map.\n * This is the ergonomic that www\n * (StateBadge severity), and me (compliance/severity) each hand-roll. Instead\n * of re-deriving tone-class logic per site, declare the map once:\n *\n * const AgentStatusPill = makeStatusPill({\n * online: { tone: 'success' },\n * offline: { tone: 'destructive', label: 'down' },\n * pending: { tone: 'warning' },\n * });\n * <AgentStatusPill status={agent.status} />\n *\n * Pass `{ variant: 'bordered' }` for the uppercase-badge form (pledge\n * states, www state badges, me compliance/severity).\n */\nexport function makeStatusPill<S extends string>(\n map: Record<S, StatusPillSpec>,\n options?: { variant?: StatusPillVariant; filled?: boolean; fallbackTone?: StatusTone }\n): (props: { status: S; className?: string }) => ReactNode {\n const variant = options?.variant ?? 'plain';\n const filled = options?.filled ?? false;\n const fallbackTone = options?.fallbackTone ?? 'muted';\n function DomainStatusPill({ status, className }: { status: S; className?: string }) {\n const spec = map[status];\n return (\n <StatusPill\n tone={spec?.tone ?? fallbackTone}\n label={spec?.label ?? status}\n icon={spec?.icon}\n filled={filled}\n variant={variant}\n className={className}\n />\n );\n }\n return DomainStatusPill;\n}\n","'use client';\n\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Tabs — accessible tabbed interface (Radix). Replaces the hand-rolled\n * `role=\"tablist\"` + manual `useState` toggles found in vault settings, the\n * www dashboard, me's SnippetCard, attest's CodeTabs, and others. Keyboard\n * nav, roving tabindex, and ARIA wiring come from Radix; the OC look (mono,\n * underline-on-active) is layered on top.\n */\nfunction Tabs({ ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" {...props} />;\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n // A tab row is `flex`; a long set of triggers would overflow the page\n // horizontally on narrow screens. `flex-wrap` lets it wrap to a second\n // line instead. NOT `overflow-x-auto` — that forces overflow-y:auto,\n // which clips the active trigger's -mb-px/border-b-2 underline.\n className={cn(\n 'border-border -mb-px flex flex-wrap items-center gap-6 border-b',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n 'text-muted-foreground hover:text-foreground data-[state=active]:text-primary data-[state=active]:border-primary -mb-px border-b-2 border-transparent py-2 font-mono text-[11px] tracking-widest uppercase transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('mt-4 outline-none', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","/**\n * useSpotPrice — live BTC/USD spot rate for display surfaces.\n *\n * Pulls a JSON shape `{ btc_usd: number, fetched_at?: string | null }`\n * from a consumer-hosted endpoint (default `/api/price/btc-usd`),\n * refreshing every 60 seconds on a setInterval. The initial paint\n * reads `REFERENCE_BTC_USD` so the first frame is never NaN.\n *\n * Consumer contract (read this when wiring):\n *\n * The hook makes a relative fetch to `endpoint`. Every consumer that\n * mounts this MUST host that route locally — typically a Next.js\n * pages-router API route that proxies mempool.space's spot feed and\n * caches in-process. The canonical implementation lives at\n * `oc-vault-web/src/pages/api/price/btc-usd.ts` (and the mirror in\n * `oc-me-web`). Both also host the matching server-side fetch +\n * cache in `src/lib/price/feed.ts` — that part stays per-consumer\n * because it's Node-only code that doesn't belong in a UI package.\n *\n * If you don't have the route yet, pass an explicit endpoint\n * (e.g. `useSpotPrice({ endpoint: 'https://other-site.ochk.io/api/price/btc-usd' })`)\n * pointing at a sibling site's endpoint — they're CORS-open.\n *\n * Returns the rich `{ btcUsd, fetchedAt }` shape rather than a bare\n * number so callers that want a provenance caption can render\n * `asOf(fetchedAt)` without a second hook.\n */\n\n'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { REFERENCE_BTC_USD } from './index';\n\nexport interface SpotPrice {\n /** BTC/USD rate. Falls back to `REFERENCE_BTC_USD` until the first\n * fetch lands so the initial paint never reads NaN. */\n btcUsd: number;\n /** ISO timestamp the rate was fetched upstream. `null` until the\n * first successful fetch. Pair with `asOf()` for \"as of HH:MM\". */\n fetchedAt: string | null;\n}\n\nexport interface UseSpotPriceOptions {\n /** Override the endpoint path. Defaults to `/api/price/btc-usd` —\n * the family-canonical proxy route. Useful when consuming a sibling\n * site's endpoint cross-origin, or when self-hosting the proxy at\n * a non-default path. */\n endpoint?: string;\n /** Override the refresh cadence in milliseconds. Defaults to 60_000,\n * matching the upstream mempool.space cache TTL. Lower than ~10s\n * is wasted bandwidth — the underlying feed doesn't refresh faster. */\n intervalMs?: number;\n}\n\ninterface SpotPriceResponse {\n btc_usd?: number;\n fetched_at?: string | null;\n}\n\n/**\n * Hook · returns the latest BTC/USD spot rate from `endpoint`.\n *\n * Behaviour:\n * - First mount: synchronous return of `REFERENCE_BTC_USD` (no NaN),\n * then an async fetch updates state.\n * - Every `intervalMs` thereafter, a background fetch keeps the rate\n * fresh while the tab is alive.\n * - Network blips keep the last-good value — no flash to fallback.\n * - Unmount cancels both the in-flight read (`cancelled` flag) and\n * the interval timer.\n */\nexport function useSpotPrice(opts: UseSpotPriceOptions = {}): SpotPrice {\n const { endpoint = '/api/price/btc-usd', intervalMs = 60_000 } = opts;\n const [state, setState] = useState<SpotPrice>({\n btcUsd: REFERENCE_BTC_USD,\n fetchedAt: null,\n });\n\n useEffect(() => {\n let cancelled = false;\n async function pull() {\n try {\n const res = await fetch(endpoint);\n if (!res.ok) return;\n const json = (await res.json()) as SpotPriceResponse;\n if (cancelled) return;\n if (typeof json.btc_usd === 'number' && json.btc_usd > 0) {\n setState({\n btcUsd: Math.round(json.btc_usd),\n fetchedAt: json.fetched_at ?? null,\n });\n }\n } catch {\n // Network blip · keep the last good value, don't flash a\n // fallback. The next poll will recover.\n }\n }\n void pull();\n const t = setInterval(pull, intervalMs);\n return () => {\n cancelled = true;\n clearInterval(t);\n };\n }, [endpoint, intervalMs]);\n\n return state;\n}\n","/**\n * @orangecheck/design/format — Bitcoin/money display + formatting utilities.\n *\n * Presentational only. Lifted from the canonical implementations across the\n * family (oc-me-web's utils, oc-vault-web's billing) and standardized so every\n * site formats sats, prices, addresses, and times identically. NOTE: crypto\n * (BIP-322 signing, bech32 validation) deliberately does NOT live here — that\n * belongs in a bitcoin/crypto library, not the design system.\n *\n * Includes the `useSpotPrice` React hook for live BTC/USD display. The hook\n * fetches a consumer-hosted endpoint — see `use-spot-price.ts` for the\n * one-route-per-consumer contract.\n */\n\nexport { useSpotPrice, type SpotPrice, type UseSpotPriceOptions } from './use-spot-price';\n\n/** Reference BTC/USD rate for sats↔USD display. Override per call when a live\n * rate is available; this is a display affordance, not a price oracle. */\nexport const REFERENCE_BTC_USD = 95_000;\n\n/** Format a satoshi integer as a thousands-separated string (\"12,408\"). */\nexport function formatSats(sats: number): string {\n return new Intl.NumberFormat('en-US').format(Math.round(sats));\n}\n\n/** Compact sats for buttons/chips: \"7k sats\", \"1.5k sats\", \"999 sats\". */\nexport function formatSatsCompact(sats: number): string {\n const n = Math.round(sats);\n if (n < 1000) return `${n} sats`;\n const k = n / 1000;\n return `${Number.isInteger(k) ? k : k.toFixed(1)}k sats`;\n}\n\n/** Convert sats to a USD currency string using the reference (or given) rate. */\nexport function satsToUsd(sats: number, btcUsd: number = REFERENCE_BTC_USD): string {\n const usd = (sats / 100_000_000) * btcUsd;\n if (usd > 0 && usd < 0.01) return '< $0.01';\n // Whole dollars once >= $100, cents below. min must never exceed max.\n const fractionDigits = usd >= 100 ? 0 : 2;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: fractionDigits,\n maximumFractionDigits: fractionDigits,\n }).format(usd);\n}\n\n/** Convert a USD amount to sats using the reference (or given) rate. */\nexport function usdToSats(usd: number, btcUsd: number = REFERENCE_BTC_USD): number {\n return Math.round((usd / btcUsd) * 100_000_000);\n}\n\n/** Both denominations as one label: \"7,000 sats · $6.65\". */\nexport function priceBoth(sats: number, btcUsd: number = REFERENCE_BTC_USD): string {\n return `${formatSats(sats)} sats · ${satsToUsd(sats, btcUsd)}`;\n}\n\n/**\n * \"as of HH:MM\" provenance footnote. Returns `null` for nullish or\n * unparseable input so callers can render nothing\n * (`{x && <span>{x}</span>}`) rather than gate on a magic empty\n * string. 24-hour, locale-aware. Pairs with `useSpotPrice().fetchedAt`\n * to caption a live-rate display.\n */\nexport function asOf(iso: string | null | undefined): string | null {\n if (!iso) return null;\n const t = new Date(iso);\n if (Number.isNaN(t.getTime())) return null;\n return `as of ${t.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n })}`;\n}\n\n/** Compact relative time — \"now\", \"3m ago\", \"2h ago\", \"4d ago\", or a date. */\nexport function relativeTime(when: string | number | Date): string {\n const t = when instanceof Date ? when.getTime() : new Date(when).getTime();\n if (Number.isNaN(t)) return '';\n const diff = Date.now() - t;\n const m = Math.floor(diff / 60_000);\n if (m < 1) return 'now';\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n\n/**\n * Truncate a Bitcoin/Lightning address (or any long id) for display:\n * \"bc1qxy…wxyz\". Defaults match the family's most common rule (8 head / 4 tail).\n */\nexport function shortenAddress(value: string, head = 8, tail = 4): string {\n if (!value) return '';\n if (value.length <= head + tail + 1) return value;\n return `${value.slice(0, head)}…${value.slice(-tail)}`;\n}\n\nexport type ExplorerNetwork = 'mainnet' | 'testnet' | 'signet';\nexport type ExplorerTarget =\n | { address: string }\n | { tx: string }\n | { block: string | number };\n\n/** A mempool.space explorer URL for an address, tx, or block. */\nexport function explorerUrl(target: ExplorerTarget, network: ExplorerNetwork = 'mainnet'): string {\n const base =\n network === 'mainnet'\n ? 'https://mempool.space'\n : `https://mempool.space/${network}`;\n if ('address' in target) return `${base}/address/${target.address}`;\n if ('tx' in target) return `${base}/tx/${target.tx}`;\n return `${base}/block/${target.block}`;\n}\n","import { cn } from '../tokens/cn';\nimport { formatSats, satsToUsd } from '../format';\n\nexport interface SatsAmountProps {\n sats: number;\n /** Show the \"sats\" unit. Default true. */\n unit?: boolean;\n /** Append a muted USD conversion. Default false. */\n usd?: boolean;\n /** Override the reference BTC/USD rate for the USD conversion. */\n btcUsd?: number;\n className?: string;\n}\n\n/**\n * Canonical sats display: thousands-grouped, monospace, optional \"sats\" unit and\n * a muted USD conversion. The one true way to render an amount of sats across\n * the family (replaces scattered formatSats() + inline markup).\n */\nexport function SatsAmount({ sats, unit = true, usd = false, btcUsd, className }: SatsAmountProps) {\n return (\n <span className={cn('font-mono tabular-nums', className)}>\n {formatSats(sats)}\n {unit && <span className=\"text-muted-foreground\"> sats</span>}\n {usd && (\n <span className=\"text-muted-foreground\">\n {' · '}\n {satsToUsd(sats, btcUsd)}\n </span>\n )}\n </span>\n );\n}\n","'use client';\n\nimport { Check, Copy } from 'lucide-react';\nimport { useCallback, useRef, useState } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface CopyButtonProps {\n /** Text to copy. */\n value: string;\n /** Optional visible label beside the icon. */\n label?: string;\n /**\n * Auto-wipe the clipboard after N seconds if it still holds `value`\n * (secrets-manager behaviour, à la 1Password). 0/undefined = never wipe.\n */\n clearAfter?: number;\n size?: 'sm' | 'md';\n className?: string;\n title?: string;\n onCopied?: () => void;\n}\n\n/**\n * Copy-to-clipboard control with \"copied\" feedback and optional auto-wipe.\n * Canonical form of the copy buttons scattered across the family (wallet\n * panels, address displays, share sheets, secret reveals).\n */\nexport function CopyButton({\n value,\n label,\n clearAfter,\n size = 'md',\n className,\n title,\n onCopied,\n}: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n const resetRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const copy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n onCopied?.();\n if (resetRef.current) clearTimeout(resetRef.current);\n resetRef.current = setTimeout(() => setCopied(false), 1500);\n if (clearAfter && clearAfter > 0) {\n setTimeout(() => void wipeIfUnchanged(value), clearAfter * 1000);\n }\n } catch {\n /* clipboard unavailable — no-op */\n }\n }, [value, clearAfter, onCopied]);\n\n const iconSize = size === 'sm' ? 'size-3' : 'size-3.5';\n\n return (\n <button\n type=\"button\"\n onClick={copy}\n aria-label={title ?? (copied ? 'copied' : 'copy')}\n title={title ?? 'copy'}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5 rounded-sm transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n size === 'sm' ? 'text-[11px]' : 'text-xs',\n className\n )}\n >\n {copied ? (\n <Check className={cn(iconSize, 'text-success')} aria-hidden />\n ) : (\n <Copy className={iconSize} aria-hidden />\n )}\n {label && <span className=\"font-mono\">{copied ? 'copied' : label}</span>}\n </button>\n );\n}\n\nasync function wipeIfUnchanged(expected: string): Promise<void> {\n try {\n const current = await navigator.clipboard.readText();\n if (current !== expected) return;\n await navigator.clipboard.writeText('');\n } catch {\n try {\n await navigator.clipboard.writeText('');\n } catch {\n /* clipboard fully unavailable */\n }\n }\n}\n","import { cn } from '../tokens/cn';\nimport { shortenAddress } from '../format';\nimport { CopyButton } from './copy-button';\n\nexport interface BitcoinAddressProps {\n /** The full address (or any long id — Lightning, npub, did). */\n address: string;\n head?: number;\n tail?: number;\n /** Show a copy button that copies the FULL address. Default true. */\n copyable?: boolean;\n /** Render the full value untruncated. */\n full?: boolean;\n className?: string;\n}\n\n/**\n * Canonical truncated address display: monospace, `bc1qxy…wxyz`, with a copy\n * button that copies the full value. Replaces the per-site inline truncate+copy\n * patterns (IdentityChip, wallet panels, admin lists).\n */\nexport function BitcoinAddress({\n address,\n head = 8,\n tail = 4,\n copyable = true,\n full = false,\n className,\n}: BitcoinAddressProps) {\n return (\n <span className={cn('inline-flex items-center gap-1.5 font-mono text-xs', className)}>\n <span title={address}>{full ? address : shortenAddress(address, head, tail)}</span>\n {copyable && <CopyButton value={address} size=\"sm\" title=\"copy address\" />}\n </span>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport QRCode from 'qrcode';\n\nexport interface QrCodeProps {\n /** String to encode — Lightning invoices, BTC addresses, BIP-21 URIs all work. */\n value: string;\n /** Pixel size of the rendered SVG. Default 200. */\n size?: number;\n /** Accessible label for screen readers. */\n label?: string;\n className?: string;\n}\n\n/**\n * Client-side QR renderer (inline SVG via the `qrcode` package — no canvas, no\n * data-URI). Renders nothing during SSR; encodes on mount. Wrapped in role=\"img\"\n * with the supplied label. White quiet-zone background for reliable scanning in\n * any theme/mode.\n */\nexport function QrCode({ value, size = 200, label, className }: QrCodeProps) {\n const [svg, setSvg] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n QRCode.toString(value, {\n type: 'svg',\n errorCorrectionLevel: 'M',\n margin: 1,\n color: { dark: '#000000', light: '#ffffff' },\n })\n .then((out) => {\n if (!cancelled) setSvg(out);\n })\n .catch(() => {\n if (!cancelled) setSvg(null);\n });\n return () => {\n cancelled = true;\n };\n }, [value]);\n\n return (\n <div\n role=\"img\"\n aria-label={label ?? `QR code for ${value.slice(0, 24)}…`}\n className={'inline-block overflow-hidden rounded-md bg-white p-3 ' + (className ?? '')}\n style={{ width: size, height: size }}\n >\n {svg ? (\n <div\n className=\"size-full [&_svg]:block [&_svg]:size-full\"\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n ) : (\n <div className=\"bg-muted/40 size-full animate-pulse rounded\" aria-hidden />\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as Popover from '@radix-ui/react-popover';\nimport { HelpCircle } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface HelpHintProps {\n /** The help body — short prose (1–3 sentences) explaining a term/control. */\n children: ReactNode;\n /** Optional bold \"§ \"-prefixed heading inside the popover. */\n title?: string;\n /** Which side the popover prefers to open toward. Default `top`. */\n side?: 'top' | 'right' | 'bottom' | 'left';\n /** `xs` tightens the icon for dense label rows; `sm` (default) suits most. */\n size?: 'xs' | 'sm';\n /** `subtle` mutes the \"?\" icon when it sits in a description / muted row;\n * `default` is primary-tinted for active labels. */\n tone?: 'default' | 'subtle';\n /** Accessible label for the trigger (defaults to \"what is this?\"). */\n label?: string;\n className?: string;\n}\n\n/**\n * HelpHint — the canonical inline \"?\" affordance for term-level guidance.\n * Click/focus reveals a small popover (Radix) with optional title + prose;\n * works on touch (not a hover tooltip). Lifted from oc-me-web's richer\n * `me/ui/HelpHint` (with `size`/`tone`), now the single source. Also the\n * keystone behind `SectionHeader`'s optional `hint`.\n */\nexport function HelpHint({\n children,\n title,\n side = 'top',\n size = 'sm',\n tone = 'default',\n label = 'what is this?',\n className,\n}: HelpHintProps) {\n const iconSize = size === 'xs' ? 12 : 14;\n return (\n <Popover.Root>\n <Popover.Trigger\n aria-label={label}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n 'focus-visible:ring-primary/60 inline-flex shrink-0 items-center justify-center rounded-full transition-colors outline-none focus-visible:ring-2',\n tone === 'subtle'\n ? 'text-muted-foreground/60 hover:text-foreground/80'\n : 'text-primary/70 hover:text-primary',\n className\n )}\n >\n <HelpCircle size={iconSize} aria-hidden />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side={side}\n sideOffset={6}\n collisionPadding={12}\n className=\"border-border bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 z-50 max-w-xs rounded-md border p-3 text-xs leading-relaxed shadow-md outline-none\"\n >\n {title && <div className=\"label-mono text-primary mb-1.5\">§ {title}</div>}\n <div className=\"text-foreground/90\">{children}</div>\n <Popover.Arrow className=\"fill-popover\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { HelpHint } from './help-hint';\n\nexport interface SectionHeaderProps {\n /** Plain section name — rendered after a \"§ \" glyph in label-mono. */\n label: string;\n /** Optional right-side string (count, \"most recent first\"). */\n meta?: ReactNode;\n /** When provided, renders an inline HelpHint \"?\" next to the label. */\n hint?: { title?: string; body: ReactNode; side?: 'top' | 'bottom' | 'left' | 'right' };\n tone?: 'primary' | 'muted' | 'warning' | 'success' | 'destructive';\n className?: string;\n}\n\nconst TONE_CLASS = {\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n warning: 'text-warning',\n success: 'text-success',\n destructive: 'text-destructive',\n} as const;\n\n/**\n * SectionHeader — the canonical \"§ x\" section header used across every\n * /me and /vault dashboard surfaces. Lifted from oc-me-web's\n * `me/ui/SectionHeader` so the visual contract stays single-source.\n *\n * Pattern is `label-mono text-primary mb-3` with a \"§ \" glyph followed by\n * the label, plus an optional muted/uppercase right-side meta string.\n */\nexport function SectionHeader({\n label,\n meta,\n hint,\n tone = 'primary',\n className = '',\n}: SectionHeaderProps) {\n return (\n <div className={`mb-3 flex items-baseline justify-between gap-2 ${className}`}>\n <div className=\"flex items-center gap-1.5\">\n <div className={`label-mono ${TONE_CLASS[tone]}`}>§ {label}</div>\n {hint && (\n <HelpHint title={hint.title} side={hint.side ?? 'bottom'}>\n {hint.body}\n </HelpHint>\n )}\n </div>\n {meta && (\n <span className=\"text-muted-foreground/70 font-mono text-[10px] tracking-widest uppercase\">\n {meta}\n </span>\n )}\n </div>\n );\n}\n","import { ArrowLeft, Home, RefreshCw } from 'lucide-react';\nimport Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../primitives/button';\n\nexport type OcErrorVariant = 'not-found' | 'server-error';\n\nexport interface OcErrorPageProps {\n /**\n * Picks the defaults. `not-found` is the 404 shape (primary tone, a \"go\n * back\" affordance); `server-error` is the 500 shape (destructive tone, a\n * retry affordance and a what-to-do list).\n */\n variant?: OcErrorVariant;\n /** Override the big numeral. Defaults to 404 / 500 from the variant. */\n code?: number | string;\n /** Override the headline. Lowercase, per the family voice. */\n title?: string;\n /** Override the `//` prose line under the headline. */\n detail?: string;\n /**\n * A short \"what can you do\" list, rendered as the bordered mono panel.\n * Defaults to the server-error list; pass `[]` to suppress it.\n *\n * Items are nodes, not just strings, so one can carry a link — attest's\n * original 500 ended its list with \"persisting? report it on github\", and\n * a shared component that could not express that would have been a\n * downgrade for the site it was lifted from.\n */\n actions?: ReactNode[];\n /** Where \"go home\" points. A site with a app-scoped root can change it. */\n homeHref?: string;\n /** Extra content below the buttons — a report link, a status page, a hint. */\n children?: ReactNode;\n className?: string;\n}\n\nconst VARIANTS = {\n 'not-found': {\n code: 404,\n title: 'no such route',\n detail: \"the page you're looking for doesn't exist, or has been moved.\",\n tone: 'text-primary',\n label: 'not found',\n actions: [] as ReactNode[],\n },\n 'server-error': {\n code: 500,\n title: 'internal error',\n detail: 'something went wrong on our end.',\n tone: 'text-destructive',\n label: 'server error',\n actions: [\n 'try refreshing the page',\n 'wait a few minutes, try again',\n 'return home and start over',\n ] as ReactNode[],\n },\n} as const;\n\n/**\n * OcErrorPage — the family's 404 / 500 body.\n *\n * Nine of thirteen family sites had no error page at all and fell through to\n * Next's unstyled default: no header, no footer, no theme, none of the chrome\n * every other page on the site has. It is the one page a visitor is guaranteed\n * to reach eventually, and it was the only one that looked like a different\n * product.\n *\n * Lifted from `oc-attest-web`, which was the only site with a good one. It\n * lives here rather than being copied nine times because a copied page drifts —\n * that is the lesson of the family's `isFamilyUrl` predicate, where 14 of 15\n * hand-copied versions shared a flaw the 15th had already fixed.\n *\n * `Seo` stays with the consumer: the page's title and `noindex` are site\n * concerns and the design package has no business owning them. So a site's\n * `404.tsx` is its `<Seo>` plus `<OcErrorPage variant=\"not-found\" />`.\n *\n * The \"go back\" button uses `window.history.back()`, which needs a client\n * component — the consumer page carries `'use client'`, as Next requires for\n * any page with an interactive handler.\n */\nexport function OcErrorPage({\n variant = 'not-found',\n code,\n title,\n detail,\n actions,\n homeHref = '/',\n children,\n className = '',\n}: OcErrorPageProps) {\n const v = VARIANTS[variant];\n const shownCode = code ?? v.code;\n const shownActions = actions ?? [...v.actions];\n const isServerError = variant === 'server-error';\n\n return (\n <div\n className={`container flex min-h-[60vh] flex-col items-center justify-center ${className}`}\n >\n <div className=\"w-full max-w-xl\">\n <div className={`label-mono mb-4 ${v.tone}`}>\n § {shownCode} // {v.label}\n </div>\n <h1\n className={`font-display text-7xl font-bold tracking-tight tabular-nums sm:text-8xl ${v.tone}`}\n >\n {shownCode}\n </h1>\n <h2 className=\"font-display mt-2 text-2xl font-bold tracking-tight sm:text-3xl\">\n {title ?? v.title}\n </h2>\n <p className=\"text-muted-foreground mt-3 font-mono text-xs\">\n {'// '}\n {detail ?? v.detail}\n </p>\n\n {shownActions.length > 0 && (\n <div className=\"mt-8 border\">\n <div className=\"border-b px-4 py-2 font-mono text-[11px] tracking-widest uppercase\">\n what can you do\n </div>\n <ul className=\"divide-y font-mono text-xs\">\n {shownActions.map((a, i) => (\n // Index keys: items are nodes and the list is\n // static per variant, so there is nothing\n // better to key on and nothing reorders.\n <li key={i} className=\"px-4 py-2\">\n {'>> '}\n {a}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n <div className=\"mt-8 flex flex-wrap gap-3\">\n <Button asChild className=\"font-mono\">\n <Link href={homeHref}>\n <Home className=\"mr-2 h-3 w-3\" />\n <span className=\"text-[11px] tracking-widest uppercase\">go home</span>\n </Link>\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => {\n if (typeof window === 'undefined') return;\n if (isServerError) window.location.reload();\n else window.history.back();\n }}\n className=\"font-mono\"\n >\n {isServerError ? (\n <RefreshCw className=\"mr-2 h-3 w-3\" />\n ) : (\n <ArrowLeft className=\"mr-2 h-3 w-3\" />\n )}\n <span className=\"text-[11px] tracking-widest uppercase\">\n {isServerError ? 'retry' : 'go back'}\n </span>\n </Button>\n </div>\n\n {children && <div className=\"mt-6\">{children}</div>}\n </div>\n </div>\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nexport interface EmptyStateCta {\n label: string;\n href: string;\n /** External links open in a new tab and get a ↗ glyph. */\n external?: boolean;\n}\n\nexport interface EmptyStateProps {\n /** Short heading — one mono-uppercased label like \"no entries yet\". */\n label: string;\n /** Body — short prose explaining what would appear here and how. */\n children: ReactNode;\n cta?: EmptyStateCta;\n secondary?: EmptyStateCta;\n tone?: 'info' | 'warning' | 'muted';\n className?: string;\n}\n\nconst TONE_CLASS = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n muted: 'border-border bg-muted/20',\n} as const;\n\nconst LABEL_TONE_CLASS = {\n info: 'text-primary',\n warning: 'text-warning',\n muted: 'text-muted-foreground',\n} as const;\n\n/**\n * EmptyState — the canonical empty-state card used across every /me,\n * and /vault dashboards. Empty states should *teach*: explain what\n * would appear, and how to make it appear. Lifted from oc-me-web's\n * `me/ui/EmptyState`.\n */\nexport function EmptyState({\n label,\n children,\n cta,\n secondary,\n tone = 'info',\n className = '',\n}: EmptyStateProps) {\n return (\n <div className={`border p-5 md:p-6 ${TONE_CLASS[tone]} ${className}`}>\n <div className={`label-mono mb-2 ${LABEL_TONE_CLASS[tone]}`}>§ {label}</div>\n <div className=\"text-foreground/85 max-w-2xl text-sm leading-relaxed\">{children}</div>\n {(cta || secondary) && (\n <div className=\"mt-4 flex flex-wrap gap-3\">\n {cta && <CtaLink {...cta} variant=\"primary\" />}\n {secondary && <CtaLink {...secondary} variant=\"secondary\" />}\n </div>\n )}\n </div>\n );\n}\n\nfunction CtaLink({\n label,\n href,\n external,\n variant,\n}: EmptyStateCta & { variant: 'primary' | 'secondary' }) {\n const cls =\n variant === 'primary'\n ? 'bg-primary text-primary-foreground hover:bg-primary/90 inline-flex h-9 items-center justify-center rounded-md px-4 font-mono text-[11px] font-semibold tracking-widest uppercase'\n : 'text-muted-foreground hover:text-foreground border-input hover:bg-accent inline-flex h-9 items-center justify-center rounded-md border px-4 font-mono text-[11px] tracking-widest uppercase';\n const text = external ? `${label} ↗` : label;\n if (external) {\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className={cls}>\n {text}\n </a>\n );\n }\n return (\n <Link href={href} className={cls}>\n {text}\n </Link>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface StatItem {\n /** Short uppercased label rendered in mono. */\n label: string;\n /** Primary value · already formatted as a string. */\n value: string;\n /** Optional secondary line · USD conversion, \"last 30 days\", etc. */\n sub?: string;\n /** When true, value is rendered in primary tone (use for headline metric). */\n accent?: boolean;\n /** Optional tone for the value (overrides accent). */\n tone?: 'default' | 'primary' | 'success' | 'warning' | 'destructive' | 'muted';\n}\n\nexport interface StatGridProps {\n items: StatItem[];\n columns?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nconst TONE_CLASS = {\n default: '',\n primary: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n} as const;\n\nconst COL_CLASS = {\n 1: '',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n} as const;\n\n/**\n * StatGrid — the canonical stats row used across family dashboards.\n * Lifted from oc-me-web's `me/ui/StatGrid`. Grid of equal-width tiles\n * separated by 1px borders. Always pre-format the value string —\n * the component does no number formatting.\n */\nexport function StatGrid({ items, columns = 3, className = '' }: StatGridProps) {\n return (\n <div className={`oc-stat-grid bg-border grid gap-px border ${COL_CLASS[columns]} ${className}`}>\n {items.map((it, i) => (\n <Tile key={`${it.label}-${i}`} item={it} />\n ))}\n </div>\n );\n}\n\nfunction Tile({ item }: { item: StatItem }) {\n const tone = item.tone ?? (item.accent ? 'primary' : 'default');\n return (\n <div className=\"oc-stat-tile bg-background p-5\">\n <div className=\"text-muted-foreground/80 font-mono text-[10px] tracking-widest uppercase\">\n {item.label}\n </div>\n <div\n className={`font-display mt-1 text-2xl font-bold tabular-nums tracking-tight ${TONE_CLASS[tone]}`}\n >\n {item.value}\n </div>\n {item.sub && (\n <div className=\"text-muted-foreground/70 mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {item.sub}\n </div>\n )}\n </div>\n );\n}\n\nexport function StatTile({ children, ...item }: StatItem & { children?: ReactNode }) {\n return (\n <div>\n <Tile item={item} />\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { StatBlock } from '../primitives/stat-block';\nimport { cn } from '../tokens/cn';\n\nexport interface StatCardProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional period-over-period delta arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n /** Padding density — `sm` for dense grids, `default` for standalone cards. */\n pad?: 'sm' | 'default';\n className?: string;\n}\n\n/**\n * StatCard — a single stat in a bordered `bg-card` frame. The standalone\n * counterpart to StatBlock (the bare cell) and StatGrid (a laid-out grid):\n * this is the \"one stat in its own card\" shape that the dashboards\n * and me (`StatCell`, `ParticipationFeeCard` tiles, etc.) each hand-roll.\n * Wraps StatBlock so the inner cell stays single-source.\n */\nexport function StatCard({ pad = 'default', className, ...stat }: StatCardProps) {\n return (\n <div className={cn('oc-stat-card border bg-card', pad === 'sm' ? 'p-3 md:p-4' : 'p-5', className)}>\n <StatBlock {...stat} />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport type CalloutTone = 'info' | 'warning' | 'destructive' | 'success' | 'muted';\n\nexport interface CalloutProps {\n tone?: CalloutTone;\n /** Optional \"§ \"-prefixed mono header. */\n label?: string;\n /** Optional leading icon, sized by the caller (e.g. lucide `size-4`). */\n icon?: ReactNode;\n /** Body content. */\n children: ReactNode;\n /** Optional trailing action (button / link) pinned to the bottom. */\n action?: ReactNode;\n className?: string;\n}\n\nconst FRAME: Record<CalloutTone, string> = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n destructive: 'border-destructive/40 bg-destructive/5',\n success: 'border-success/40 bg-success/5',\n muted: 'border-border bg-muted/20',\n};\n\nconst LABEL: Record<CalloutTone, string> = {\n info: 'text-primary',\n warning: 'text-warning',\n destructive: 'text-destructive',\n success: 'text-success',\n muted: 'text-muted-foreground',\n};\n\n/**\n * Callout — the canonical toned panel (`border-{tone}/40 bg-{tone}/5` + an\n * optional `label-mono` header) reimplemented across stamp, pledge, vote,\n * analytics, and me (HealthBanner / SimulationBanner / FrozenBanner /\n * DangerZone, etc.). One component, five tones. For empty-states with CTAs use\n * EmptyState; for inline term help use HelpHint; this is the general\n * notice/banner frame.\n */\nexport function Callout({ tone = 'info', label, icon, children, action, className }: CalloutProps) {\n return (\n <div className={cn('border p-4 md:p-5', FRAME[tone], className)}>\n {label && (\n <div className={cn('label-mono mb-2 flex items-center gap-1.5', LABEL[tone])}>\n {icon}\n <span>§ {label}</span>\n </div>\n )}\n <div className=\"text-foreground/85 text-sm leading-relaxed\">\n {!label && icon ? (\n <span className={cn('mr-2 inline-flex align-middle', LABEL[tone])}>{icon}</span>\n ) : null}\n {children}\n </div>\n {action && <div className=\"mt-3 flex flex-wrap gap-3\">{action}</div>}\n </div>\n );\n}\n","import { Fragment, type ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface DefinitionItem {\n label: ReactNode;\n value: ReactNode;\n}\n\nexport interface DefinitionListProps {\n items: DefinitionItem[];\n className?: string;\n}\n\n/**\n * DefinitionList — the mono-label / value `<dl>` grid reimplemented in agent's\n * inspector, vote's reveal page, and me (BondAnchorCard, OperatorIdentityCard,\n * FrozenBanner). Labels render in uppercase mono; values align in a second\n * column on wider viewports, stacking on narrow ones. Long values (hashes,\n * addresses) wrap via `break-all`.\n */\nexport function DefinitionList({ items, className }: DefinitionListProps) {\n return (\n <dl\n className={cn(\n 'oc-deflist grid gap-x-5 gap-y-2 text-sm sm:grid-cols-[auto_1fr] sm:items-baseline',\n className\n )}\n >\n {items.map((item, i) => (\n <Fragment key={i}>\n <dt className=\"label-mono text-muted-foreground text-[10px]\">{item.label}</dt>\n <dd className=\"text-foreground font-mono text-xs break-all\">{item.value}</dd>\n </Fragment>\n ))}\n </dl>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface DataRowProps {\n /** Primary content (left-aligned, grows to fill). */\n children: ReactNode;\n /** Trailing metadata pinned right (timestamp, count, status pill). */\n meta?: ReactNode;\n /** Optional action(s) rendered after the meta (button, link). */\n action?: ReactNode;\n /** Element to render as — `li` inside a list, `div` otherwise. */\n as?: ElementType;\n className?: string;\n}\n\n/**\n * DataRow — the \"content left, meta right, optional action\" list row\n * reimplemented across me (federations, incidents, grants, distributions,\n * fee entries) and other dashboards. Pair inside a `divide-y border` list.\n * On narrow viewports content and meta stack; from `sm` up they sit on one\n * baseline-aligned line.\n */\nexport function DataRow({ children, meta, action, as, className }: DataRowProps) {\n const Tag = (as ?? 'div') as ElementType;\n return (\n <Tag\n className={cn(\n 'oc-data-row flex flex-col gap-1 py-3 sm:flex-row sm:items-baseline sm:justify-between sm:gap-4',\n className\n )}\n >\n <div className=\"min-w-0 flex-1\">{children}</div>\n {(meta || action) && (\n <div className=\"flex shrink-0 items-center gap-3 sm:justify-end\">\n {meta && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide\">\n {meta}\n </span>\n )}\n {action}\n </div>\n )}\n </Tag>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface PanelProps {\n /** Mono kicker shown above the title (e.g. \"attestations\"). Rendered uppercase. */\n label?: ReactNode;\n /** Section title. */\n title?: ReactNode;\n /** Optional trailing control (a button, link, count) pinned right of the header. */\n action?: ReactNode;\n /** Drop the top divider (use for the first panel in a stack). */\n flush?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\n/**\n * Panel (DataSection) — the titled section that carries a chunk of a\n * data-dense / technical page (telemetry blocks, API sections, dashboard\n * groups). THEME-ADAPTIVE by design: under the cypherpunk skins it is a\n * flat full-width `border-t` divider section (terminal voice); under ember\n * the `.oc-panel` class promotes it to a discrete soft, warm, rounded card\n * (see the data-dense treatments in themes/ember.css). Compose these instead\n * of hand-rolling `border-t py-8` sections so subpages re-skin per theme.\n */\nexport function Panel({ label, title, action, flush, className, children }: PanelProps) {\n const hasHeader = label || title || action;\n return (\n <section className={cn('oc-panel py-8', !flush && 'border-t', className)}>\n {hasHeader && (\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n {label && <div className=\"label-mono text-primary mb-1\">{label}</div>}\n {title && (\n <h2 className=\"font-display text-lg font-bold tracking-tight\">{title}</h2>\n )}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n )}\n {children}\n </section>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * marketing-heading — the two-tone display heading used across consumer\n * landing sections. TwoToneHeading renders a solid lead clause followed by a\n * recoloured muted clause at the same size/weight; MarketingHeading wraps it\n * with an optional mono eyebrow and body paragraph. Use onBrand when it sits\n * on a brand/dark band.\n */\n\nexport interface TwoToneHeadingProps {\n lead: ReactNode;\n muted?: ReactNode;\n as?: ElementType;\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport function TwoToneHeading({\n lead,\n muted,\n as,\n tone = 'default',\n className,\n}: TwoToneHeadingProps) {\n const Tag = as ?? 'h2';\n const leadColor = tone === 'onBrand' ? 'text-primary-foreground' : 'text-foreground';\n // Lighter, cleaner muted clause so the two-tone contrast reads (matches the\n // designer's light-gray second phrase, not a heavy taupe). On a brand band\n // /60 fell below AA-large (~2.5:1); /75 keeps the two-tone read while staying\n // legible on terracotta.\n const mutedColor = tone === 'onBrand' ? 'text-primary-foreground/75' : 'text-foreground/40';\n return (\n <Tag\n className={cn(\n 'font-extrabold tracking-[-0.02em] leading-[1.0] text-balance',\n 'text-3xl sm:text-4xl md:text-5xl',\n leadColor,\n className,\n )}\n >\n <span>{lead}</span>\n {muted ? <span className={mutedColor}> {muted}</span> : null}\n </Tag>\n );\n}\n\nexport interface MarketingHeadingProps {\n eyebrow?: string;\n lead: ReactNode;\n muted?: ReactNode;\n body?: ReactNode;\n align?: 'start' | 'center';\n tone?: 'default' | 'onBrand';\n as?: ElementType;\n className?: string;\n}\n\nexport function MarketingHeading({\n eyebrow,\n lead,\n muted,\n body,\n align = 'start',\n tone = 'default',\n as,\n className,\n}: MarketingHeadingProps) {\n const centered = align === 'center';\n return (\n <div className={cn('flex flex-col', centered && 'items-center text-center', className)}>\n {eyebrow && (\n <p\n className={cn(\n 'label-mono mb-3',\n tone === 'onBrand' ? 'text-primary-foreground/80' : 'text-primary',\n )}\n >\n {eyebrow}\n </p>\n )}\n <TwoToneHeading\n lead={lead}\n muted={muted}\n as={as}\n tone={tone}\n className={cn('max-w-4xl', centered && 'mx-auto')}\n />\n {body && (\n <p\n className={cn(\n 'mt-4 max-w-2xl text-base sm:text-lg',\n tone === 'onBrand' ? 'text-primary-foreground/80' : 'text-muted-foreground',\n centered && 'mx-auto',\n )}\n >\n {body}\n </p>\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface FeatureCardProps {\n /** Optional leading glyph — a lucide icon sized by IconBadge. */\n icon?: ReactNode;\n iconTone?: 'peach' | 'dark' | 'brand' | 'onBrand' | 'muted' | 'surface';\n title: ReactNode;\n children?: ReactNode;\n orientation?: 'vertical' | 'horizontal';\n align?: 'start' | 'center';\n tone?: 'default' | 'muted' | 'onBrand';\n elevation?: 'none' | 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * FeatureCard — the soft Surface tile that carries a feature: an IconBadge, a\n * title, and a line of body copy. The marketing-grid workhorse. Stack them\n * vertically in a feature grid, or go horizontal for a tighter list row.\n */\nexport function FeatureCard({\n icon,\n iconTone = 'peach',\n title,\n children,\n orientation = 'vertical',\n align = 'start',\n tone = 'default',\n elevation = 'sm',\n className,\n}: FeatureCardProps) {\n const horizontal = orientation === 'horizontal';\n const centered = !horizontal && align === 'center';\n\n return (\n <Surface\n tone={tone}\n elevation={elevation}\n pad={horizontal ? 'md' : 'lg'}\n className={cn(\n 'flex h-full',\n horizontal ? 'flex-row gap-4' : 'flex-col',\n centered && 'items-center text-center',\n className\n )}\n >\n {icon && (\n <IconBadge\n tone={iconTone}\n size=\"lg\"\n className={cn(horizontal ? 'shrink-0' : 'mb-4')}\n >\n {icon}\n </IconBadge>\n )}\n <div className={cn(horizontal && 'min-w-0')}>\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {children && (\n <p className=\"text-muted-foreground mt-1.5 text-sm leading-relaxed\">\n {children}\n </p>\n )}\n </div>\n </Surface>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface SectionProps {\n /** Background band: neutral page, recessed gray, brand fill, or a forced-dark band on a light page. */\n tone?: 'default' | 'muted' | 'brand' | 'dark';\n /** Inner width: centered container, wide max-w-screen-2xl, or full-bleed. */\n width?: 'default' | 'wide' | 'full';\n /** Diagonal texture overlay; defaults on only for tone='brand'. */\n diagonal?: boolean;\n id?: string;\n className?: string;\n innerClassName?: string;\n children: ReactNode;\n}\n\nconst TONE: Record<NonNullable<SectionProps['tone']>, string> = {\n default: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n brand: 'bg-brand text-brand-foreground',\n // `dark` activates the .dark variant locally so descendant package\n // components render their dark arm even on an otherwise light page.\n dark: 'dark bg-background text-foreground',\n};\n\nconst WIDTH: Record<NonNullable<SectionProps['width']>, string> = {\n default: 'container',\n wide: 'mx-auto w-full max-w-screen-2xl px-4 sm:px-6 lg:px-8',\n full: '',\n};\n\n/**\n * Section — the full-bleed marketing band: a tone-routed background stripe with\n * vertical rhythm and a width-capped inner. Stack these to build a landing page;\n * use tone='dark' to force a dark band on a light page. BrandBand is the\n * brand-tone shorthand.\n */\nexport function Section({\n tone = 'default',\n width = 'default',\n diagonal,\n id,\n className,\n innerClassName,\n children,\n}: SectionProps) {\n const showDiagonal = diagonal ?? tone === 'brand';\n return (\n <div\n id={id}\n className={cn('w-full', TONE[tone], showDiagonal && 'oc-diagonal', className)}\n >\n <div className={cn('py-16 sm:py-20 md:py-24', WIDTH[width], innerClassName)}>\n {children}\n </div>\n </div>\n );\n}\n\n/** BrandBand — Section pinned to the brand tone. */\nexport function BrandBand(props: SectionProps) {\n return <Section tone=\"brand\" {...props} />;\n}\n","import type { ReactNode } from 'react';\n\nimport { Check, X } from 'lucide-react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface ComparisonRow {\n label: ReactNode;\n theirs: ReactNode;\n ours: ReactNode;\n}\n\nexport interface ComparisonTableProps {\n rows: ComparisonRow[];\n columns?: { feature?: string; theirs: string; ours: string };\n className?: string;\n}\n\n/**\n * ComparisonTable — a two-column \"them vs us\" feature matrix for marketing pages.\n * the ours column is tinted (bg-accent/40) and its checks read text-primary; the\n * theirs column reads muted with X glyphs. skin-agnostic, scrolls on small screens.\n */\nexport function ComparisonTable({ rows, columns, className }: ComparisonTableProps) {\n const cols = { feature: '', theirs: 'A normal login', ours: 'OrangeCheck', ...columns };\n return (\n <div className={cn('overflow-hidden rounded-xl border', className)}>\n <div className=\"overflow-x-auto\">\n <div className=\"min-w-[32rem]\">\n <div className=\"grid grid-cols-[1.4fr_1fr_1fr]\">\n <div className=\"label-mono text-muted-foreground px-4 py-3.5 sm:px-6\">\n {cols.feature}\n </div>\n <div className=\"px-4 py-3.5 font-semibold text-foreground sm:px-6\">\n {cols.theirs}\n </div>\n <div className=\"bg-accent/60 border-border/60 border-l px-4 py-3.5 font-semibold text-primary sm:px-6\">\n {cols.ours}\n </div>\n </div>\n {rows.map((row, i) => (\n <div key={i} className=\"grid grid-cols-[1.4fr_1fr_1fr] border-t\">\n <div className=\"px-4 py-3.5 font-medium text-foreground sm:px-6\">\n {row.label}\n </div>\n <div className=\"text-muted-foreground flex items-center gap-2 px-4 py-3.5 sm:px-6\">\n <X className=\"text-muted-foreground/70 size-4\" />\n <span>{row.theirs}</span>\n </div>\n <div className=\"bg-accent/40 border-border/60 flex items-center gap-2 border-l px-4 py-3.5 text-foreground sm:px-6\">\n <Check className=\"size-4 text-primary\" />\n <span>{row.ours}</span>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\n/**\n * NumberedStep / StepList — the marketing \"how it works\" sequence: a peach\n * numbered tile, a title, and a short body, laid out in a responsive grid.\n * Use for 2–4 step walkthroughs on a landing page; pass tone='onBrand' when\n * the list sits on a terracotta band.\n */\n\nexport interface Step {\n title: ReactNode;\n children?: ReactNode;\n}\n\nexport interface NumberedStepProps {\n n: number;\n title: ReactNode;\n children?: ReactNode;\n tone?: 'default' | 'onBrand';\n card?: boolean;\n className?: string;\n}\n\nexport function NumberedStep({\n n,\n title,\n children,\n tone = 'default',\n card = false,\n className,\n}: NumberedStepProps) {\n const onBrand = tone === 'onBrand';\n const body = (\n <div className={cn(!card && className)}>\n <IconBadge tone={onBrand ? 'onBrand' : 'peach'} size=\"sm\">\n {n}\n </IconBadge>\n <div className=\"mt-4 text-lg font-semibold\">{title}</div>\n {children && (\n <div\n className={cn(\n 'mt-1.5 text-sm leading-relaxed',\n onBrand ? 'text-brand-foreground/80' : 'text-muted-foreground'\n )}\n >\n {children}\n </div>\n )}\n </div>\n );\n\n if (!card) return body;\n\n return (\n <Surface\n tone={onBrand ? 'onBrand' : 'default'}\n elevation={onBrand ? 'none' : 'sm'}\n pad=\"md\"\n className={className}\n >\n {body}\n </Surface>\n );\n}\n\nexport interface StepListProps {\n steps: Step[];\n variant?: 'bare' | 'card';\n tone?: 'default' | 'onBrand';\n columns?: 2 | 3 | 4;\n className?: string;\n}\n\nconst COLUMNS: Record<2 | 3 | 4, string> = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\n\nexport function StepList({\n steps,\n variant = 'bare',\n tone = 'default',\n columns = 3,\n className,\n}: StepListProps) {\n return (\n <div className={cn('grid gap-6 sm:grid-cols-2 sm:gap-8', COLUMNS[columns], className)}>\n {steps.map((step, index) => (\n <NumberedStep\n key={index}\n n={index + 1}\n title={step.title}\n tone={tone}\n card={variant === 'card'}\n >\n {step.children}\n </NumberedStep>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface FaqItem {\n q: ReactNode;\n a: ReactNode;\n}\n\nexport interface FaqProps {\n items: FaqItem[];\n /** Index of the item open on first render; omit for all collapsed. */\n defaultOpen?: number;\n className?: string;\n}\n\n/**\n * Faq — a plus/minus accordion list of question/answer pairs for the bottom of\n * a marketing page. single-open, collapsible. re-skins via the underlying\n * Accordion primitive.\n */\nexport function Faq({ items, defaultOpen, className }: FaqProps) {\n return (\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={defaultOpen != null ? String(defaultOpen) : undefined}\n className={cn('w-full', className)}\n >\n {items.map((item, i) => (\n <AccordionItem key={i} value={String(i)}>\n <AccordionTrigger\n icon=\"plusMinus\"\n className=\"text-foreground text-base font-semibold\"\n >\n {item.q}\n </AccordionTrigger>\n <AccordionContent className=\"text-muted-foreground leading-relaxed\">\n {item.a}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Button, Input } from '../primitives';\n\nexport interface EmailCaptureProps {\n /** Native form action (e.g. a serverless handler or list endpoint). */\n action?: string;\n /** Native form method. */\n method?: string;\n /** Client-side submit handler — preventDefault yourself if intercepting. */\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n /** Input name attribute. */\n name?: string;\n placeholder?: string;\n /** Submit button label. */\n cta?: ReactNode;\n /** Small reassurance line under the row (e.g. \"no spam, unsubscribe anytime\"). */\n note?: ReactNode;\n /** `onBrand` for placement on a terracotta/dark band. */\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\n/**\n * EmailCapture — the inline waitlist / newsletter row: a pill email field plus a\n * pill submit, with an optional fine-print note. drop it in a hero or footer\n * band; `tone='onBrand'` flips the field translucent + button white for dark\n * brand bands.\n */\nexport function EmailCapture({\n action,\n method,\n onSubmit,\n name = 'email',\n placeholder = 'you@email.com',\n cta = 'Join the waitlist',\n note,\n tone = 'default',\n className,\n}: EmailCaptureProps) {\n const onBrand = tone === 'onBrand';\n return (\n <form action={action} method={method} onSubmit={onSubmit} className={cn(className)}>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <Input\n type=\"email\"\n name={name}\n required\n placeholder={placeholder}\n className={cn(\n 'rounded-full text-base md:text-sm',\n onBrand &&\n '[background:color-mix(in_oklch,white_18%,transparent)] placeholder:text-primary-foreground/60 border-transparent text-primary-foreground'\n )}\n />\n <Button type=\"submit\" variant={onBrand ? 'onBrand' : 'default'} className=\"rounded-full\">\n {cta}\n </Button>\n </div>\n {note && (\n <p\n className={cn(\n 'mt-3 text-sm',\n onBrand ? 'text-primary-foreground/70' : 'text-muted-foreground'\n )}\n >\n {note}\n </p>\n )}\n </form>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Check } from 'lucide-react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface CheckListProps {\n /** Each item: a check glyph + this label. */\n items: ReactNode[];\n orientation?: 'horizontal' | 'vertical';\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\n/**\n * CheckList — a compact run of checkmarked points. use horizontal under a hero\n * or CTA for an inline \"what you get\" row; vertical for a small feature stack.\n * `tone=\"onBrand\"` when it sits on a brand/dark band.\n */\nexport function CheckList({\n items,\n orientation = 'horizontal',\n tone = 'default',\n className,\n}: CheckListProps) {\n const glyph = tone === 'onBrand' ? 'text-brand-foreground' : 'text-primary';\n const label = tone === 'onBrand' ? 'text-brand-foreground/90' : 'text-foreground';\n\n return (\n <ul\n className={cn(\n orientation === 'horizontal'\n ? 'flex flex-wrap gap-x-6 gap-y-2 text-sm'\n : 'flex flex-col gap-2 text-sm',\n className\n )}\n >\n {items.map((item, i) => (\n <li key={i} className={cn('inline-flex items-center gap-2', label)}>\n <Check className={cn('size-4 shrink-0', glyph)} />\n {item}\n </li>\n ))}\n </ul>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * AccentNote — a left-bar aside for a single emphasized line of copy. Use for a\n * caveat, footnote, or pull-quote beside body text. AccentList is the stepped\n * variant: a vertical stack of titled items with one \"active\" entry expanded.\n * Both are skin-agnostic — token colors only — and re-skin per skin + mode.\n */\n\nexport interface AccentNoteProps {\n /** Optional bold lead phrase rendered inline before the body. */\n lead?: ReactNode;\n children: ReactNode;\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport function AccentNote({ lead, children, tone = 'default', className }: AccentNoteProps) {\n const onBrand = tone === 'onBrand';\n return (\n <div\n className={cn(\n 'border-l-2 pl-4 text-sm leading-relaxed',\n onBrand\n ? 'border-primary-foreground/60 text-primary-foreground/80'\n : 'border-primary text-muted-foreground',\n className,\n )}\n >\n {lead && (\n <strong\n className={cn(\n 'mr-1.5 font-semibold',\n onBrand ? 'text-primary-foreground' : 'text-foreground',\n )}\n >\n {lead}\n </strong>\n )}\n {children}\n </div>\n );\n}\n\nexport interface AccentListItem {\n title: ReactNode;\n children?: ReactNode;\n active?: boolean;\n}\n\nexport interface AccentListProps {\n items: AccentListItem[];\n className?: string;\n}\n\nexport function AccentList({ items, className }: AccentListProps) {\n return (\n <div className={cn('flex flex-col', className)}>\n {items.map((item, i) => (\n <div\n key={i}\n className={cn('border-l-2 py-2 pl-5', item.active ? 'border-primary' : 'border-border')}\n >\n <div\n className={cn(\n 'font-semibold',\n item.active ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n {item.title}\n </div>\n {item.active && item.children && (\n <div className=\"text-muted-foreground mt-1 text-sm leading-relaxed\">\n {item.children}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Check } from 'lucide-react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface VerifiedChipProps {\n /** Leading glyph; defaults to a lucide Check. */\n icon?: ReactNode;\n /** Tone of the icon tile. */\n iconTone?: 'peach' | 'dark' | 'brand' | 'onBrand' | 'muted';\n /** Short trust phrase, e.g. \"verified on bitcoin\". */\n label: ReactNode;\n className?: string;\n}\n\n/**\n * VerifiedChip — a small floating trust chip (icon tile + short label) on a soft\n * elevated pill. drop it over a hero or card edge to mark something as verified.\n */\nexport function VerifiedChip({ icon, iconTone = 'peach', label, className }: VerifiedChipProps) {\n return (\n <Surface\n elevation=\"lg\"\n pad=\"none\"\n className={cn('inline-flex items-center gap-3 rounded-full px-3 py-2', className)}\n >\n <IconBadge tone={iconTone} size=\"sm\">\n {icon ?? <Check />}\n </IconBadge>\n <span className=\"pr-2 text-sm font-semibold text-foreground\">{label}</span>\n </Surface>\n );\n}\n","import { cn } from '../tokens/cn';\n\n/**\n * Acknowledgement — the credit line every landing page carries in its\n * bottom-CTA section, crediting Bram Kanstein for the \"Bitcoin as sovereignty\n * layer\" lineage the whole family is built on.\n *\n * It is a component rather than seven copies of a `<p>` because it was seven\n * different things: four sites had no credit at all, and the three that did\n * disagreed on wording, placement and weight — one in the hero as a bare icon\n * link, one in the footer at 10px and 40% opacity. An attribution that is\n * technically present but unreadable is not an attribution.\n *\n * `tone=\"onBrand\"` for the usual case: a bottom CTA sits on a BrandBand.\n */\n\nexport interface AcknowledgementProps {\n /** Match the surface it sits on. A bottom CTA is normally a BrandBand. */\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport const ACKNOWLEDGEMENT_URL = 'https://bramk.substack.com/';\nexport const ACKNOWLEDGEMENT_NAME = 'bram kanstein';\n\nexport function Acknowledgement({ tone = 'default', className }: AcknowledgementProps) {\n const onBrand = tone === 'onBrand';\n return (\n <p\n className={cn(\n 'mx-auto max-w-[52ch] font-mono text-xs leading-relaxed',\n onBrand ? 'text-brand-foreground/70' : 'text-muted-foreground',\n className,\n )}\n >\n with thanks to{' '}\n <a\n href={ACKNOWLEDGEMENT_URL}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn(\n 'underline decoration-dotted underline-offset-2 transition-colors',\n onBrand ? 'hover:text-brand-foreground' : 'hover:text-foreground',\n )}\n >\n {ACKNOWLEDGEMENT_NAME}\n </a>{' '}\n — whose work on bitcoin as sovereignty layer shaped the premise.\n </p>\n );\n}\n","import { Boxes, Check, ChevronDown } from 'lucide-react';\nimport Link from 'next/link';\nimport { useEffect, useRef, useState } from 'react';\n\n/**\n * EcosystemSwitcher — cross-product dropdown for jumping between every\n * site in the OrangeCheck family. Drop one into every site's LayoutHeader\n * and mark the active site via the `current` prop.\n *\n * <EcosystemSwitcher current=\"lock\" />\n *\n * The component is dependency-self-contained: no Radix, no Headless UI,\n * just outside-click + Escape handling so it works identically in every\n * site without forcing a peer-dep upgrade. Every link stays in-tab — the\n * family is one app from the user's POV.\n */\n\nexport type EcosystemSlug =\n | 'home'\n | 'docs'\n | 'me'\n | 'vault'\n | 'chat'\n | 'cosign'\n | 'btc'\n | 'globe'\n | 'attest'\n | 'lock'\n | 'vote'\n | 'stamp'\n | 'agent'\n | 'pledge'\n | 'analytics'\n | 'bot'\n | 'forge';\n\ninterface SwitcherEntry {\n slug: EcosystemSlug;\n href: string;\n label: string;\n sub: string;\n docsHref: string;\n}\n\nconst ENTRIES: SwitcherEntry[] = [\n {\n slug: 'home',\n href: 'https://ochk.io',\n label: 'orangecheck',\n sub: 'umbrella',\n docsHref: 'https://docs.ochk.io',\n },\n {\n slug: 'docs',\n href: 'https://docs.ochk.io',\n label: 'oc·docs',\n sub: 'unified docs',\n docsHref: 'https://docs.ochk.io',\n },\n {\n slug: 'me',\n href: 'https://me.ochk.io',\n label: 'oc·me',\n sub: 'earn — consumer identity',\n docsHref: 'https://docs.ochk.io/me',\n },\n {\n slug: 'vault',\n href: 'https://vault.ochk.io',\n label: 'oc·vault',\n sub: 'keep — encrypted secrets',\n docsHref: 'https://docs.ochk.io/vault',\n },\n {\n slug: 'chat',\n href: 'https://chat.ochk.io',\n label: 'oc·chat',\n sub: 'message — encrypted chat',\n docsHref: 'https://docs.ochk.io/chat',\n },\n {\n slug: 'cosign',\n href: 'https://cosign.ochk.io',\n label: 'oc·cosign',\n sub: 'cofound — get behind builders',\n docsHref: 'https://docs.ochk.io/cosign',\n },\n {\n slug: 'btc',\n href: 'https://btc.ochk.io',\n label: 'oc·btc',\n sub: 'read — bitcoin desk',\n docsHref: 'https://btc.ochk.io/data',\n },\n {\n slug: 'globe',\n href: 'https://globe.ochk.io',\n label: 'oc·globe',\n sub: 'watch — the network, live',\n docsHref: 'https://globe.ochk.io/sources',\n },\n {\n slug: 'attest',\n href: 'https://attest.ochk.io',\n label: 'oc·attest',\n sub: 'am — sybil resistance',\n docsHref: 'https://docs.ochk.io/attest',\n },\n {\n slug: 'lock',\n href: 'https://lock.ochk.io',\n label: 'oc·lock',\n sub: 'whisper — encryption',\n docsHref: 'https://docs.ochk.io/lock',\n },\n {\n slug: 'vote',\n href: 'https://vote.ochk.io',\n label: 'oc·vote',\n sub: 'decide — polls',\n docsHref: 'https://docs.ochk.io/vote',\n },\n {\n slug: 'stamp',\n href: 'https://stamp.ochk.io',\n label: 'oc·stamp',\n sub: 'declare — block-anchored',\n docsHref: 'https://docs.ochk.io/stamp',\n },\n {\n slug: 'agent',\n href: 'https://agent.ochk.io',\n label: 'oc·agent',\n sub: 'delegate — scoped auth',\n docsHref: 'https://docs.ochk.io/agent',\n },\n {\n slug: 'pledge',\n href: 'https://pledge.ochk.io',\n label: 'oc·pledge',\n sub: 'swear — bonded commitment',\n docsHref: 'https://docs.ochk.io/pledge',\n },\n];\n\n/** Entries gated behind `showOwnerEntries={true}`. Owner-only family\n * properties (`oc·analytics` at analytics.ochk.io, `oc·bot` at\n * bot.ochk.io) live here so they're invisible to everyone except\n * verified owners — the JWT claim drives the gate. */\nconst OWNER_ENTRIES: SwitcherEntry[] = [\n {\n slug: 'analytics',\n href: 'https://analytics.ochk.io',\n label: 'oc·analytics',\n sub: 'owner cockpit',\n docsHref: 'https://analytics.ochk.io',\n },\n {\n slug: 'bot',\n href: 'https://bot.ochk.io',\n label: 'oc·bot',\n sub: 'social bot',\n docsHref: 'https://bot.ochk.io',\n },\n {\n slug: 'forge',\n href: 'https://forge.ochk.io',\n label: 'oc·forge',\n sub: 'agent ops',\n docsHref: 'https://forge.ochk.io',\n },\n];\n\nexport interface EcosystemSwitcherProps {\n current: EcosystemSlug;\n className?: string;\n /**\n * When true, append the owner-only entries (currently\n * `oc·analytics`) to the family-switcher dropdown. Consumers\n * pass this from their session: `useOcSession().account?.isOwner`.\n * Defaults to false so non-owners never see owner-only links.\n *\n * Not a security boundary — analytics.ochk.io re-checks the\n * live OWNER_OC_ADDRESSES env on every request. This prop only\n * decides whether the UX hint is visible.\n */\n showOwnerEntries?: boolean;\n}\n\nexport function EcosystemSwitcher({\n current,\n className,\n showOwnerEntries = false,\n}: EcosystemSwitcherProps) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n function onDoc(e: MouseEvent) {\n if (!containerRef.current) return;\n if (!containerRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDoc);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={containerRef} className={'relative ' + (className ?? '')}>\n <button\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label=\"Switch OrangeCheck product\"\n title=\"Switch product\"\n onClick={() => setOpen((v) => !v)}\n className={\n 'inline-flex items-center gap-1 px-2 py-1 transition-colors ' +\n (open\n ? 'text-foreground'\n : 'text-muted-foreground hover:text-foreground')\n }\n >\n <Boxes className=\"h-4 w-4\" />\n <ChevronDown\n className={\n 'h-3.5 w-3.5 transition-transform ' + (open ? 'rotate-180' : '')\n }\n />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Switch OrangeCheck product\"\n className=\"bg-background absolute right-0 top-full z-[60] mt-2 w-72 border shadow-lg\"\n >\n <div className=\"label-mono text-primary border-b px-4 py-2\">\n § the family\n </div>\n <ul className=\"py-1\">\n {[...ENTRIES, ...(showOwnerEntries ? OWNER_ENTRIES : [])].map((e) => {\n const isActive = e.slug === current;\n return (\n <li key={e.slug}>\n <Link\n href={e.href}\n onClick={() => setOpen(false)}\n aria-current={isActive ? 'page' : undefined}\n className={\n 'group flex items-baseline gap-3 px-4 py-2 transition-colors ' +\n (isActive\n ? 'bg-primary/5'\n : 'hover:bg-muted')\n }\n >\n <span\n className={\n 'font-display flex-1 text-[12px] font-semibold tracking-tight ' +\n (isActive\n ? 'text-primary'\n : 'text-foreground group-hover:text-primary transition-colors')\n }\n >\n {e.label}\n </span>\n <span className=\"text-muted-foreground font-mono text-[10px] tracking-wider uppercase\">\n {e.sub}\n </span>\n {isActive && (\n <Check className=\"text-primary h-3 w-3\" />\n )}\n </Link>\n </li>\n );\n })}\n </ul>\n <div className=\"border-t px-4 py-2 font-mono text-[10px] tracking-widest uppercase\">\n <Link\n href=\"https://docs.ochk.io\"\n onClick={() => setOpen(false)}\n className=\"text-muted-foreground hover:text-foreground inline-block transition-colors\"\n >\n docs.ochk.io →\n </Link>\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Family-property registry — the single source of truth for every\n * orangecheck-family site. Both `<OcLogoDropdown>` (the global logo →\n * property switcher) and `<OcAccountMenu>` (the global signed-in\n * account chip) read from this table, so a one-line edit here ripples\n * to every consumer simultaneously.\n *\n * Adding a new family member means appending one entry below. Removing\n * one means deleting the entry. There are no other call sites to chase.\n */\n\nimport type { EcosystemSlug } from './ecosystem-switcher';\n\nexport type FamilyCategory = 'hub' | 'product' | 'protocol' | 'owner';\n\nexport interface FamilyProperty {\n /** Stable URL-safe identifier (e.g. `'vault'`). */\n slug: EcosystemSlug;\n /** Absolute origin (e.g. `'https://vault.ochk.io'`). */\n origin: string;\n /** Bare hostname (e.g. `'vault.ochk.io'`). Used in account-menu headers. */\n hostname: string;\n /** Wordmark label (e.g. `'oc·vault'`). */\n label: string;\n /** Short tagline (verb — what-it-does), shown under the wordmark in the menu. */\n sub: string;\n /** Docs deep-link (e.g. `'https://docs.ochk.io/vault'`). */\n docsHref: string;\n /** Family-level category that shapes the visual chip + menu sectioning. */\n category: FamilyCategory;\n}\n\nexport const FAMILY_PROPERTIES: ReadonlyArray<FamilyProperty> = [\n {\n slug: 'home',\n origin: 'https://ochk.io',\n hostname: 'ochk.io',\n label: 'orangecheck',\n sub: 'umbrella · sign-in',\n docsHref: 'https://docs.ochk.io',\n category: 'hub',\n },\n {\n slug: 'docs',\n origin: 'https://docs.ochk.io',\n hostname: 'docs.ochk.io',\n label: 'oc·docs',\n sub: 'unified reference',\n docsHref: 'https://docs.ochk.io',\n category: 'hub',\n },\n {\n slug: 'me',\n origin: 'https://me.ochk.io',\n hostname: 'me.ochk.io',\n label: 'oc·me',\n sub: 'earn — consumer identity',\n docsHref: 'https://docs.ochk.io/me',\n category: 'product',\n },\n {\n slug: 'vault',\n origin: 'https://vault.ochk.io',\n hostname: 'vault.ochk.io',\n label: 'oc·vault',\n sub: 'keep — encrypted secrets',\n docsHref: 'https://docs.ochk.io/vault',\n category: 'product',\n },\n {\n slug: 'chat',\n origin: 'https://chat.ochk.io',\n hostname: 'chat.ochk.io',\n label: 'oc·chat',\n sub: 'message — encrypted chat',\n docsHref: 'https://docs.ochk.io/chat',\n category: 'product',\n },\n {\n slug: 'cosign',\n origin: 'https://cosign.ochk.io',\n hostname: 'cosign.ochk.io',\n label: 'oc·cosign',\n sub: 'cofound — get behind builders',\n docsHref: 'https://docs.ochk.io/cosign',\n category: 'product',\n },\n {\n slug: 'btc',\n origin: 'https://btc.ochk.io',\n hostname: 'btc.ochk.io',\n label: 'oc·btc',\n sub: 'read — bitcoin desk',\n docsHref: 'https://btc.ochk.io/data',\n category: 'product',\n },\n {\n slug: 'globe',\n origin: 'https://globe.ochk.io',\n hostname: 'globe.ochk.io',\n label: 'oc·globe',\n sub: 'watch — the network, live',\n docsHref: 'https://globe.ochk.io/sources',\n category: 'product',\n },\n {\n slug: 'attest',\n origin: 'https://attest.ochk.io',\n hostname: 'attest.ochk.io',\n label: 'oc·attest',\n sub: 'am — sybil resistance',\n docsHref: 'https://docs.ochk.io/attest',\n category: 'protocol',\n },\n {\n slug: 'lock',\n origin: 'https://lock.ochk.io',\n hostname: 'lock.ochk.io',\n label: 'oc·lock',\n sub: 'whisper — encryption',\n docsHref: 'https://docs.ochk.io/lock',\n category: 'protocol',\n },\n {\n slug: 'vote',\n origin: 'https://vote.ochk.io',\n hostname: 'vote.ochk.io',\n label: 'oc·vote',\n sub: 'decide — polls',\n docsHref: 'https://docs.ochk.io/vote',\n category: 'protocol',\n },\n {\n slug: 'stamp',\n origin: 'https://stamp.ochk.io',\n hostname: 'stamp.ochk.io',\n label: 'oc·stamp',\n sub: 'declare — block-anchored',\n docsHref: 'https://docs.ochk.io/stamp',\n category: 'protocol',\n },\n {\n slug: 'agent',\n origin: 'https://agent.ochk.io',\n hostname: 'agent.ochk.io',\n label: 'oc·agent',\n sub: 'delegate — scoped auth',\n docsHref: 'https://docs.ochk.io/agent',\n category: 'protocol',\n },\n {\n slug: 'pledge',\n origin: 'https://pledge.ochk.io',\n hostname: 'pledge.ochk.io',\n label: 'oc·pledge',\n sub: 'swear — bonded commitment',\n docsHref: 'https://docs.ochk.io/pledge',\n category: 'protocol',\n },\n {\n slug: 'analytics',\n origin: 'https://analytics.ochk.io',\n hostname: 'analytics.ochk.io',\n label: 'oc·analytics',\n sub: 'owner cockpit',\n docsHref: 'https://analytics.ochk.io',\n category: 'owner',\n },\n {\n slug: 'bot',\n origin: 'https://bot.ochk.io',\n hostname: 'bot.ochk.io',\n label: 'oc·bot',\n sub: 'social bot',\n docsHref: 'https://bot.ochk.io',\n category: 'owner',\n },\n {\n slug: 'forge',\n origin: 'https://forge.ochk.io',\n hostname: 'forge.ochk.io',\n label: 'oc·forge',\n sub: 'agent ops',\n docsHref: 'https://forge.ochk.io',\n category: 'owner',\n },\n];\n\n/**\n * Canonical lifecycle states for any family site. Used by both the\n * tiny chip rendered next to the wordmark and any other surface that\n * wants to display \"this site is still settling\" UX. Centralised\n * vocabulary so we can't accidentally drift to a parallel synonym\n * like `preview`/`experimental` on different sites.\n *\n * - `live` — production-ready; **no chip rendered** (the absence\n * of a chip is the affordance)\n * - `beta` — feature-complete but still iterating, soft launch\n * - `alpha` — early, breaking changes expected, integrators beware\n */\nexport type SiteState = 'alpha' | 'beta' | 'live';\n\nexport const SITE_STATE_LABEL: Record<Exclude<SiteState, 'live'>, string> = {\n alpha: 'alpha',\n beta: 'beta',\n};\n\n/** Find a property entry by its slug. */\nexport function findFamilyProperty(slug: EcosystemSlug): FamilyProperty | undefined {\n return FAMILY_PROPERTIES.find((p) => p.slug === slug);\n}\n","import { Check, ChevronDown, CornerDownLeft } from 'lucide-react';\nimport Link from 'next/link';\nimport { useRouter } from 'next/router';\nimport * as React from 'react';\nimport { useEffect, useId, useRef, useState, type ReactNode } from 'react';\n\nimport { Tooltip } from '../primitives/tooltip';\nimport { cn } from '../tokens/cn';\nimport type { EcosystemSlug } from './ecosystem-switcher';\nimport {\n FAMILY_PROPERTIES,\n SITE_STATE_LABEL,\n findFamilyProperty,\n type FamilyCategory,\n type SiteState,\n} from './family-properties';\n\n/**\n * `<OcLogoDropdown>` — the logo IS the dropdown.\n *\n * Wraps a site's local LogoMark + wordmark in a button that, on click,\n * drops a popover listing every OrangeCheck family property. The current\n * property is highlighted with a primary-tinted background, a left-edge\n * accent bar, and a \"home\" label — and is itself a clickable link to\n * the local home href (default `/`).\n *\n * Family properties carry one of three categories:\n *\n * - `hub` — orangecheck umbrella + docs (no badge)\n * - `product` — commercial products (me, vault) · primary chip\n * - `protocol` — open verb specs (attest, lock, vote, stamp, agent,\n * pledge) · muted chip\n *\n * The category of the *current* site is auto-rendered as a tiny mono\n * chip inside the trigger button, and the dropdown itself groups\n * entries by category with subtle mono dividers — so the product /\n * protocol distinction is visible both on the logo and in the menu,\n * with a single source of truth (`./family-properties.ts`).\n *\n * The optional `siteState` prop renders a second tiny chip after the\n * category chip — `alpha` or `beta` — for sites that aren't `live`.\n * The vocabulary is canonical across the family (see SiteState in\n * family-properties.ts). Pass it from your per-site config so a\n * single edit propagates to the logo, the account menu, and anywhere\n * else the chip surfaces.\n *\n * Mobile-aware: the popover's width is clamped to the viewport,\n * content scrolls when there are more entries than fit. The trigger\n * chips hide below `sm` to preserve mobile header space — the dropdown\n * itself still shows the grouping.\n *\n * On a fine pointer (mouse) the trigger reveals a themed `<Tooltip>` on\n * hover, and on keyboard focus — naming where you are and the two\n * affordances (`click · switch site`, `double-click · home`). It replaces\n * the old native `title=` (unthemed, undelayed, invisible on touch) and is\n * never shown on touch, where the menu's `home ✓` row is the path home.\n */\n\nconst SECTIONS: Array<{ category: FamilyCategory; label: string }> = [\n { category: 'hub', label: 'hub' },\n { category: 'product', label: 'products' },\n { category: 'protocol', label: 'protocols' },\n { category: 'owner', label: 'owner' },\n];\n\nexport interface OcLogoDropdownProps {\n /**\n * Which property this site IS. Used to highlight the active row,\n * route the active row's link to `homeHref` instead of the cross-\n * domain absolute URL, and pick the category chip rendered next\n * to the wordmark.\n */\n current: EcosystemSlug;\n /**\n * The site's local home path (for the active row). Default `/`.\n * Always a same-origin path — the logo's \"go home\" affordance is\n * preserved by clicking the highlighted row.\n */\n homeHref?: string;\n /**\n * Optional lifecycle state for this site. `'live'` (default) renders\n * no chip; `'alpha'` and `'beta'` render a small mono uppercase chip\n * after the category badge. Drive this from your per-site config so\n * one constant change ripples to every surface.\n */\n siteState?: SiteState;\n /**\n * Logo contents · typically `<LogoMark />` + `<span>oc·X</span>`.\n */\n children: ReactNode;\n /** className for the outer container. */\n className?: string;\n /** className for the trigger button. */\n triggerClassName?: string;\n /** className for the popover. */\n popoverClassName?: string;\n /**\n * When true, include the `owner` section (currently just\n * `oc·analytics`) in the family list. Consumers pass this from\n * their session: `useOcSession().account?.isOwner ?? false`.\n * Defaults to false so non-owners never see the entry.\n *\n * Not a security boundary — analytics.ochk.io re-checks the live\n * OWNER_OC_ADDRESSES env on every request. This prop only\n * controls UX visibility.\n */\n showOwnerEntries?: boolean;\n}\n\nfunction CategoryChip({ category }: { category: FamilyCategory }) {\n if (category === 'hub') return null;\n const label =\n category === 'product' ? 'product' : category === 'protocol' ? 'protocol' : 'owner';\n const tone =\n category === 'product'\n ? 'border-primary/25 bg-primary/10 text-primary'\n : category === 'protocol'\n ? 'border-muted-foreground/20 bg-muted/40 text-muted-foreground/85'\n : 'border-warning/30 bg-warning/10 text-warning';\n return (\n <span\n aria-label={\n category === 'product'\n ? 'commercial product'\n : category === 'protocol'\n ? 'protocol reference'\n : 'owner-only surface'\n }\n className={\n 'ml-1 hidden rounded-sm border px-1.5 py-[1px] font-mono text-[9px] font-medium tracking-widest uppercase sm:inline-block ' +\n tone\n }\n data-oc-category={category}\n >\n {label}\n </span>\n );\n}\n\nfunction SiteStateBadge({ state }: { state: SiteState }) {\n if (state === 'live') return null;\n return (\n <span\n aria-label={`site lifecycle: ${state}`}\n className=\"text-muted-foreground/70 ml-1 hidden font-mono text-[9px] font-medium tracking-widest uppercase sm:inline-block\"\n data-oc-site-state={state}\n >\n {SITE_STATE_LABEL[state]}\n </span>\n );\n}\n\nfunction MenuCategoryChip({ category }: { category: FamilyCategory }) {\n if (category === 'hub') return null;\n const label =\n category === 'product' ? 'pro' : category === 'protocol' ? 'spec' : 'own';\n const tone =\n category === 'product'\n ? 'bg-primary/10 text-primary'\n : category === 'protocol'\n ? 'bg-muted/60 text-muted-foreground/80'\n : 'bg-warning/15 text-warning';\n return (\n <span\n aria-hidden\n className={\n 'inline-block shrink-0 rounded-sm px-1 py-[1px] font-mono text-[9px] font-medium tracking-widest uppercase ' +\n tone\n }\n >\n {label}\n </span>\n );\n}\n\n/**\n * The hover/focus tooltip body — three rows that the native `title=` used to\n * hide: where you are, then `click · switch site` and `double-click · home`.\n * Decorative reinforcement of the trigger's `aria-label` (the tooltip itself\n * is `aria-hidden`); the same `CornerDownLeft` glyph as the in-menu home hint.\n */\nfunction SwitcherTooltipCard({ current }: { current: EcosystemSlug }) {\n const prop = findFamilyProperty(current);\n return (\n <div className=\"w-[13rem] max-w-[calc(100vw-1.5rem)]\">\n <div className=\"flex flex-col leading-tight\">\n <span className=\"flex flex-wrap items-baseline gap-x-1.5\">\n <span className=\"text-muted-foreground font-mono text-[9px] tracking-widest uppercase\">\n you’re on\n </span>\n <span className=\"text-primary font-display text-[12px] font-semibold tracking-tight\">\n {prop?.label ?? 'orangecheck family'}\n </span>\n </span>\n {prop?.sub && (\n <span className=\"text-muted-foreground mt-0.5 font-mono text-[10px] tracking-wide\">\n {prop.sub}\n </span>\n )}\n </div>\n <div className=\"border-border -mx-2.5 my-2 border-t\" />\n <div className=\"flex items-center gap-1.5\">\n <ChevronDown aria-hidden className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"text-primary font-mono text-[10px] font-medium tracking-widest uppercase\">\n click\n </span>\n <span className=\"text-muted-foreground font-mono text-[10px]\">·</span>\n <span className=\"text-muted-foreground font-mono text-[10px] tracking-wide\">\n switch site\n </span>\n </div>\n <div className=\"mt-1.5 flex items-center gap-1.5\">\n <CornerDownLeft aria-hidden className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"text-primary font-mono text-[10px] font-medium tracking-widest uppercase\">\n double-click\n </span>\n <span className=\"text-muted-foreground font-mono text-[10px]\">·</span>\n <span className=\"text-muted-foreground font-mono text-[10px] tracking-wide\">\n home\n </span>\n </div>\n </div>\n );\n}\n\nexport function OcLogoDropdown({\n current,\n homeHref = '/',\n siteState = 'live',\n children,\n className,\n triggerClassName,\n popoverClassName,\n showOwnerEntries = false,\n}: OcLogoDropdownProps) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const menuId = useId();\n const router = useRouter();\n\n const currentCategory: FamilyCategory = findFamilyProperty(current)?.category ?? 'hub';\n\n /**\n * Trigger click semantics:\n *\n * single-click → toggle the family dropdown\n * double-click → navigate to `homeHref` (the local landing)\n *\n * `MouseEvent.detail` is the running click count for clicks within\n * the browser's double-click threshold (~500ms). The DOM still\n * fires the `click` event on the first tap, so the dropdown\n * momentarily opens during a double-click — and the second click\n * navigates home. That's the visual story the popover-side hint\n * sells: *open · tap again · home.*\n */\n function handleTriggerClick(e: React.MouseEvent<HTMLButtonElement>) {\n if (e.detail >= 2) {\n e.preventDefault();\n setOpen(false);\n void router.push(homeHref);\n return;\n }\n setOpen((v) => !v);\n }\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n function onDoc(e: MouseEvent) {\n if (!containerRef.current) return;\n if (!containerRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDoc);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div\n ref={containerRef}\n className={'relative inline-flex items-center ' + (className ?? '')}\n data-oc-logo-dropdown=\"\"\n data-oc-current-category={currentCategory}\n data-oc-site-state={siteState}\n >\n <Tooltip\n content={<SwitcherTooltipCard current={current} />}\n disabled={open}\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n zIndexClassName=\"z-[70]\"\n >\n <button\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={menuId}\n aria-label=\"orangecheck family menu\"\n onClick={handleTriggerClick}\n className={cn(\n // focus indicator is guaranteed even if a consumer overrides triggerClassName\n 'focus-visible:ring-primary/60 rounded-sm focus-visible:ring-2 focus-visible:outline-none',\n triggerClassName ??\n 'group hover:bg-accent/30 -mx-1.5 -my-1 flex min-h-[40px] items-center gap-2 rounded-sm px-1.5 py-1 transition-colors ' +\n (open ? 'bg-accent/20' : '')\n )}\n data-oc-logo-dropdown-trigger=\"\"\n data-oc-logo-dropdown-open={open ? 'true' : 'false'}\n >\n {children}\n <CategoryChip category={currentCategory} />\n <SiteStateBadge state={siteState} />\n <ChevronDown\n aria-hidden\n className={\n 'text-muted-foreground/70 group-hover:text-foreground/80 h-3.5 w-3.5 shrink-0 transition-transform duration-200 ' +\n (open ? 'rotate-180' : '')\n }\n />\n </button>\n </Tooltip>\n {/* Home affordance · a sibling Link to the trigger button\n rather than a child of it (nested buttons would be\n invalid HTML). Fades + slides in when the dropdown is\n open, whispering \"tap again, you'll go home\". Clicking\n the hint navigates directly — works for users who\n discover it before they discover the double-click. The\n subtle motion-safe pulse on the icon nudges the eye\n without shouting. */}\n <Link\n href={homeHref}\n aria-label={'go to ' + homeHref + ' (this site\\'s home)'}\n onClick={() => setOpen(false)}\n tabIndex={open ? 0 : -1}\n className={\n 'hover:text-primary group/home -ml-1 hidden items-center gap-1 rounded-sm px-1.5 py-1 font-mono text-[9px] tracking-widest uppercase transition-all duration-200 sm:inline-flex ' +\n (open\n ? 'pointer-events-auto translate-x-0 text-muted-foreground/70 opacity-100 hover:bg-accent/30'\n : 'pointer-events-none -translate-x-1 opacity-0')\n }\n data-oc-logo-dropdown-home-hint=\"\"\n >\n <CornerDownLeft\n aria-hidden\n className={\n 'h-3 w-3 group-hover/home:text-primary ' +\n (open ? 'motion-safe:animate-pulse' : '')\n }\n />\n <span className=\"text-primary/70 group-hover/home:text-primary\">\n home\n </span>\n </Link>\n\n {open && (\n <div\n id={menuId}\n role=\"menu\"\n aria-label=\"orangecheck family\"\n className={\n popoverClassName ??\n 'bg-background absolute top-full left-0 z-[60] mt-2 w-[min(20rem,calc(100vw-1rem))] border shadow-lg'\n }\n data-oc-logo-dropdown-popover=\"\"\n >\n <div className=\"label-mono text-primary border-b px-4 py-2\">\n § the orangecheck family\n </div>\n <div className=\"max-h-[min(28rem,70vh)] overflow-y-auto py-1\" role=\"none\">\n {SECTIONS.map(({ category, label }) => {\n // Owner-only sections only render when the\n // consumer has explicitly opted in (caller\n // reads `useOcSession().account?.isOwner`).\n // Non-owners simply don't see them.\n if (category === 'owner' && !showOwnerEntries) return null;\n const sectionEntries = FAMILY_PROPERTIES.filter(\n (e) => e.category === category\n );\n if (sectionEntries.length === 0) return null;\n return (\n <div key={category} role=\"none\" data-oc-section={category}>\n <div\n role=\"separator\"\n aria-hidden\n className={\n 'text-muted-foreground/60 px-4 pt-2.5 pb-1 font-mono text-[9px] font-medium tracking-widest uppercase ' +\n (category === 'hub' ? '' : 'border-t mt-1')\n }\n >\n {label}\n </div>\n <ul role=\"none\" className=\"pb-1\">\n {sectionEntries.map((e) => {\n const isActive = e.slug === current;\n const href = isActive ? homeHref : e.origin;\n return (\n <li key={e.slug} role=\"none\">\n <Link\n href={href}\n role=\"menuitem\"\n onClick={() => setOpen(false)}\n aria-current={isActive ? 'page' : undefined}\n className={\n 'group flex items-center gap-2 px-4 py-2 transition-colors ' +\n (isActive\n ? 'bg-primary/8 border-primary -ml-px border-l-2'\n : 'hover:bg-muted -ml-px border-l-2 border-transparent')\n }\n data-oc-logo-dropdown-item={\n isActive ? 'current' : 'sibling'\n }\n data-oc-entry-category={e.category}\n >\n <span className=\"flex min-w-0 flex-1 flex-col leading-tight\">\n <span\n className={\n 'font-display text-[12px] font-semibold tracking-tight ' +\n (isActive\n ? 'text-primary'\n : 'text-foreground group-hover:text-primary transition-colors')\n }\n >\n {e.label}\n </span>\n <span className=\"text-muted-foreground mt-0.5 font-mono text-[10px] tracking-wide\">\n {e.sub}\n </span>\n </span>\n <MenuCategoryChip category={e.category} />\n {isActive ? (\n <span className=\"text-primary inline-flex shrink-0 items-center gap-1 font-mono text-[10px] tracking-widest uppercase\">\n home\n <Check className=\"h-3 w-3\" />\n </span>\n ) : null}\n </Link>\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n </div>\n <div className=\"border-t px-4 py-2 font-mono text-[10px] tracking-widest uppercase\">\n <Link\n href=\"https://docs.ochk.io\"\n onClick={() => setOpen(false)}\n className=\"text-muted-foreground hover:text-foreground inline-block transition-colors\"\n >\n docs.ochk.io →\n </Link>\n </div>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { useEffect, useRef, useState, type ReactNode } from 'react';\nimport { Check, Copy, Loader2, Menu, Plus, X } from 'lucide-react';\nimport {\n fetchOcLinkedIdentities,\n useOcSession,\n type DisplayIdentity,\n type DisplayIdentityKind,\n type OcAccountSummary,\n type OcLinkedIdentity,\n type OcSignOutScope,\n} from '@orangecheck/auth-client';\n\nimport { AppearanceControls } from '../tokens/appearance-menu';\nimport { cn } from '../tokens/cn';\nimport type { EcosystemSlug } from './ecosystem-switcher';\nimport { findFamilyProperty, type SiteState } from './family-properties';\n\n/**\n * `<OcAccountMenu>` — the canonical top-right account affordance for\n * every family site. Replaces the older inline-styled `OcAccountChip`\n * from `@orangecheck/auth-client` with a Tailwind-styled, fully\n * configurable, cross-site-aware dropdown.\n *\n * Three explicit visual states:\n *\n * 1. **Pre-hydration / loading** — neutral `sign in` placeholder so\n * the header never goes blank on first paint.\n * 2. **Anonymous / error** — primary-styled `sign in` CTA pointing\n * at the site's local `/signin` (or whatever `signInUrl` you\n * pass).\n * 3. **Authenticated** — pill with a primary-tinted signal dot and\n * shortened did_oc (or display name if set); click → popover\n * with the full did_oc as a one-click copy-to-clipboard row,\n * optional site-specific menu items, family dashboard link,\n * sign-out, and an optional BuildFooter showing site name +\n * version + commit sha → GitHub.\n *\n * Cross-site recognition: the component re-fetches the session on\n * `visibilitychange` and `focus` events, so when a user signs in at a\n * sibling site (ochk.io, attest.ochk.io, etc.) and tabs back, the\n * chip flips from \"sign in\" to \"signed in\" without a hard reload.\n *\n * The component reads `useOcSession()` from `@orangecheck/auth-client`,\n * so the consuming app must mount `<OcSessionProvider>` somewhere in\n * its tree (already standard in every consumer's `_app.tsx`).\n */\n\nexport interface OcAccountMenuItem {\n /** Same-origin path or absolute URL. */\n href: string;\n /** Visible label. */\n label: string;\n /**\n * When `true`, opens in a new tab and renders a ↗ glyph after the\n * label. Use for cross-domain links (e.g. `https://ochk.io/dashboard`).\n */\n external?: boolean;\n}\n\nexport interface OcAccountMenuBuildInfo {\n /** Display version string, e.g. `'0.5.0'` (rendered as `v0.5.0`). */\n version: string;\n /**\n * 7+ character commit SHA. Render as `'dev'` (or omit) for local\n * dev to suppress the GitHub link.\n */\n sha?: string;\n /**\n * GitHub `owner/repo` slug — combined with `sha` to produce the\n * `https://github.com/<repo>/commit/<sha>` link.\n */\n repo?: string;\n}\n\n/**\n * Minimal session shape `<OcAccountMenuView>` needs. Compatible with\n * `useOcSession()`'s return value but explicit so consumers running\n * their own auth context (e.g. oc-www's local `useAuth`) can pass an\n * adapter without depending on `@orangecheck/auth-client`'s exact\n * types.\n */\nexport interface OcAccountMenuSession {\n status: 'loading' | 'authenticated' | 'anonymous' | 'error';\n account: {\n didOc: string;\n displayName: string | null;\n /**\n * The identity the user has promoted as their badge label —\n * `{ kind, value }`, always populated (defaults to the did).\n * Drives the collapsed-trigger label and the active row in the\n * \"show as\" promote list.\n */\n displayIdentity: DisplayIdentity;\n /** The user's Nostr npub, when set — a promotable badge\n * identity that (unlike btc/email) is a profile field, not a\n * linked-identity row, so it is read from the session. */\n nostrNpub?: string | null;\n } | null;\n /**\n * Sign out. Accepts an optional `{ scope }` so the multi-account\n * \"leave this account\" affordance can route through the same hook.\n * Defaults to `'all'` for back-compat.\n */\n signOut: (opts?: { scope?: OcSignOutScope }) => void | Promise<void>;\n refresh: () => void | Promise<void>;\n /**\n * Promote a linked identity to be the badge label across every\n * `.ochk.io` site. The connected `<OcAccountMenu>` wires this to\n * `useOcSession().setDisplayIdentity`; a site running its own auth\n * context passes its own equivalent.\n */\n setDisplayIdentity: (kind: DisplayIdentityKind) => Promise<void>;\n /**\n * Multi-account roster · other accounts in this browser the user\n * can switch to without re-authenticating. Optional: when omitted\n * (or empty), the `§ accounts` section in `<OcAccountMenu>` is\n * suppressed and the menu renders as single-account. Sites that\n * own their auth context (e.g. oc-www's local `useAuth`) can leave\n * this unset until they add multi-account support.\n */\n roster?: OcAccountSummary[];\n /**\n * Multi-account · flip the active session to the given did_oc.\n * Required when `roster` is non-empty (otherwise the picker rows\n * have nowhere to call).\n */\n switchAccount?: (didOc: string) => Promise<void>;\n /**\n * Multi-account · URL for the \"add another account\" entry point.\n * Defaults to `/signin?add=1` when omitted, which works for every\n * `.ochk.io` family site (in-place sign-in supports the query\n * param by default).\n */\n addAccountUrl?: (returnTo?: string) => string;\n /**\n * Per-tab pinning · `true` when this tab holds its own session\n * token and operates as `account` independently of the shared\n * `.ochk.io` cookie (switching accounts in another tab won't\n * change this one). Renders a quiet `· this tab` hint in the\n * signed-in header. Optional — omitted by pre-pinning auth\n * contexts.\n */\n tabPinned?: boolean;\n}\n\nexport interface OcAccountMenuProps {\n /**\n * Which family property this site IS. Used to label the section\n * header (`§ signed in · vault.ochk.io`) and to suppress the\n * family-dashboard menu item when the user is already on `home`.\n */\n current: EcosystemSlug;\n /**\n * Where the anonymous \"sign in\" affordance points. Default `'/signin'`\n * — works with every site's in-place `<OcSignIn>` page. Pass\n * `'https://ochk.io/signin'` if you want to bounce to the auth host\n * instead.\n */\n signInUrl?: string;\n /** Label for the anonymous \"sign in\" affordance. Default `'sign in'`. */\n signInLabel?: string;\n /**\n * Where the browser lands after the user signs out. Default `'/'`\n * — the current site's own home. On sign-out the menu fires\n * `signOut()` (whose logout round-trip is `keepalive`, so it\n * survives the navigation) and *immediately* hard-navigates here.\n *\n * Navigating in the same tick is deliberate: it forecloses the\n * race where an auth-gated page observes the session flip to\n * `anonymous` and runs its own redirect-to-sign-in first. Sign-out\n * means \"leave\", not \"go sign in again\" — so the family default is\n * the site's home, never a sign-in page or the auth host.\n */\n signOutRedirect?: string;\n /**\n * Site-specific menu items, rendered between the section header\n * and the family-dashboard / sign-out rows. Keep this short —\n * 2–6 entries is the sweet spot. Pass `[]` (or omit) for sites\n * with no per-site routes worth surfacing.\n */\n menuItems?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * Centered primary nav links (typically dashboard · docs · spec).\n * Rendered inside the popover at viewport widths below `sm`\n * (640px) — these are the same links the `<OcPrimaryNav>` row\n * shows inline at sm+, but at ultra-small widths the inline row\n * hides and this popover section takes its place. The result: one\n * dropdown surface owns navigation on phones, no separate\n * hamburger drawer required.\n */\n primaryNavLinks?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * Tertiary nav links (about / contact / status / privacy / etc.).\n * Always visible inside the popover. Folds the legacy mobile-only\n * hamburger drawer's contents into the same dropdown as everything\n * else, so there's exactly one nav surface to learn.\n */\n secondaryNavLinks?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * When `true` (default), shows a `family dashboard ↗` link to\n * `https://ochk.io/dashboard`. Set `false` for `home` (already\n * there) or for sites that don't want it.\n */\n showFamilyDashboard?: boolean;\n /**\n * Optional BuildFooter info. When present, renders a tiny mono\n * footer at the bottom of the popover with `site · vX.Y.Z · sha`\n * — the SHA links to the matching GitHub commit when `repo` is\n * also provided. Drive this from your `next.config.ts` via\n * `NEXT_PUBLIC_APP_VERSION` / `NEXT_PUBLIC_BUILD_SHA` env vars.\n */\n build?: OcAccountMenuBuildInfo;\n /**\n * Optional lifecycle chip rendered inside the BuildFooter line\n * (between site and version). Mirrors the chip on the logo so\n * both surfaces agree.\n */\n siteState?: SiteState;\n /** className overrides for layout-level customisation. */\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\n/**\n * Partially obscure an identity value for display — first 6 characters,\n * an ellipsis, last 4. Applied uniformly to every kind (did, Bitcoin\n * address, email, npub) and at every length, so a rendered label never\n * exposes a full identity at rest; the full value stays one click away\n * via the copy affordance. Short values fall back to a 4/3 split so the\n * middle is always masked.\n */\nfunction obscureIdentity(value: string): string {\n if (value.length <= 12) {\n return `${value.slice(0, 4)}…${value.slice(-3)}`;\n }\n return `${value.slice(0, 6)}…${value.slice(-4)}`;\n}\n\n/** Human label for an identity kind, shown as the trailing tag on each\n * promote row. */\nconst IDENTITY_KIND_LABEL: Record<DisplayIdentityKind, string> = {\n did: 'did:oc',\n btc: 'bitcoin',\n email: 'email',\n nostr: 'nostr',\n};\n\n/**\n * Best-effort clipboard write. Prefers the async Clipboard API (the\n * only thing that works off a user gesture in modern browsers), and\n * falls back to a hidden-`<textarea>` + `execCommand('copy')` for\n * non-secure contexts or older engines. Returns `true` on success so\n * the caller can decide whether to show \"copied\" feedback.\n */\nasync function writeClipboard(text: string): Promise<boolean> {\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n // fall through to the legacy path\n }\n try {\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.setAttribute('readonly', '');\n ta.style.position = 'fixed';\n ta.style.top = '-1000px';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n const ok = document.execCommand('copy');\n document.body.removeChild(ta);\n return ok;\n } catch {\n return false;\n }\n}\n\n/**\n * The `did_oc` row inside the popover header, rendered as a single\n * one-click copy affordance. Clicking anywhere on the address copies\n * the full `did_oc` to the clipboard and flips the trailing glyph\n * from a copy icon to a check for ~1.6s. The popover deliberately\n * stays open so the user sees the confirmation. A visually-hidden\n * `aria-live` region announces the result to screen readers.\n *\n * This is the canonical pattern for surfacing a copyable OrangeCheck\n * identity — every family site gets it for free via `<OcAccountMenu>`.\n */\nfunction CopyableDid({ did }: { did: string }) {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n [],\n );\n\n const onCopy = async () => {\n const ok = await writeClipboard(did);\n if (!ok) return;\n setCopied(true);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 1600);\n };\n\n return (\n <button\n type=\"button\"\n onClick={onCopy}\n aria-label={\n copied\n ? 'OrangeCheck identity copied to clipboard'\n : `Copy OrangeCheck identity ${did} to clipboard`\n }\n title=\"Copy identity\"\n data-oc-account-menu-copy-did=\"\"\n data-copied={copied ? '' : undefined}\n className=\"group/did hover:bg-accent focus-visible:ring-ring/60 -mx-1.5 mt-px flex w-[calc(100%+0.75rem)] items-start gap-1.5 rounded px-1.5 py-1 text-left transition-colors focus-visible:ring-2 focus-visible:outline-none\"\n >\n <span className=\"text-foreground/90 min-w-0 flex-1 font-mono text-[11px] leading-tight break-all\">\n {did}\n </span>\n <span\n className={\n 'mt-px shrink-0 transition-colors ' +\n (copied\n ? 'text-primary'\n : 'text-muted-foreground/50 group-hover/did:text-foreground/80')\n }\n aria-hidden\n >\n {copied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n </span>\n <span className=\"sr-only\" aria-live=\"polite\">\n {copied ? 'Copied to clipboard' : ''}\n </span>\n </button>\n );\n}\n\n/**\n * One row in the \"§ show as\" list — a promote control and an\n * independent copy-to-clipboard affordance.\n *\n * The value is always rendered partially obscured (`obscureIdentity`).\n * The row body is a radio that promotes this identity to the badge\n * label; the trailing copy button writes the *full* value to the\n * clipboard via the same `writeClipboard` path as the did row (async\n * Clipboard API, hidden-`<textarea>` fallback — works on touch devices\n * and non-secure contexts). Copy and promote are deliberately separate\n * controls: one selects the identity, the other extracts it.\n */\nfunction PromoteRow({\n kind,\n value,\n active,\n busy,\n disabled,\n onPromote,\n}: {\n kind: DisplayIdentityKind;\n value: string;\n active: boolean;\n busy: boolean;\n disabled: boolean;\n onPromote: () => void;\n}) {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n [],\n );\n\n const onCopy = async () => {\n const ok = await writeClipboard(value);\n if (!ok) return;\n setCopied(true);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 1600);\n };\n\n const kindLabel = IDENTITY_KIND_LABEL[kind];\n\n return (\n <div\n className=\"hover:bg-accent flex items-center gap-1 pr-2 transition-colors\"\n data-oc-account-menu-promote-row={kind}\n data-active={active ? '' : undefined}\n >\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={active ? `Showing as ${kindLabel}` : `Show as ${kindLabel}`}\n disabled={disabled || active}\n onClick={onPromote}\n data-oc-account-menu-promote={kind}\n className=\"flex min-w-0 flex-1 items-center gap-2 py-2 pl-3 text-left font-mono text-[11px] tracking-wide disabled:cursor-default\"\n >\n <span\n className={\n 'flex size-3.5 shrink-0 items-center justify-center rounded-full border ' +\n (active ? 'border-primary' : 'border-muted-foreground/40')\n }\n aria-hidden\n >\n {active ? <span className=\"bg-primary size-1.5 rounded-full\" /> : null}\n </span>\n <span className=\"text-foreground/90 min-w-0 flex-1 truncate\">\n {obscureIdentity(value)}\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => void onCopy()}\n aria-label={\n copied ? `${kindLabel} copied to clipboard` : `Copy ${kindLabel} to clipboard`\n }\n title=\"Copy\"\n data-oc-account-menu-promote-copy={kind}\n data-copied={copied ? '' : undefined}\n className=\"hover:bg-background/70 focus-visible:ring-ring/60 flex size-6 shrink-0 items-center justify-center rounded transition-colors focus-visible:ring-2 focus-visible:outline-none\"\n >\n {copied ? (\n <Check className=\"text-primary size-3.5\" />\n ) : (\n <Copy className=\"text-muted-foreground/50 size-3.5\" />\n )}\n </button>\n <span className=\"text-muted-foreground/50 w-14 shrink-0 text-right text-[9px] tracking-widest uppercase\">\n {busy ? <Loader2 className=\"ml-auto size-3 animate-spin\" /> : kindLabel}\n </span>\n <span className=\"sr-only\" aria-live=\"polite\">\n {copied ? 'Copied to clipboard' : ''}\n </span>\n </div>\n );\n}\n\n/**\n * The \"§ show as\" block inside the popover — lists the user's\n * identities and lets them promote one as the badge label across\n * every `.ochk.io` site.\n *\n * The did is always an option (read from the session); the npub too\n * when set. The Bitcoin address and email are *linked identities*, so\n * they're lazy-fetched from the auth host the first time the popover\n * opens — `fetchOcLinkedIdentities()` is one credentialed request,\n * cached for the menu's lifetime. The section renders only once that\n * resolves and only when there are ≥2 identities worth choosing\n * between; with a single identity there is nothing to promote.\n *\n * Promotion calls `setDisplayIdentity(kind)` — which PATCHes the auth\n * host, re-mints the cross-subdomain cookie, and refreshes the session\n * — so the selected row and the collapsed label update in place and\n * every other family tab picks the choice up on its next focus.\n */\nfunction IdentityPromoteSection({\n didOc,\n nostrNpub,\n current,\n open,\n setDisplayIdentity,\n}: {\n didOc: string;\n nostrNpub: string | null;\n current: DisplayIdentity;\n open: boolean;\n setDisplayIdentity: (kind: DisplayIdentityKind) => Promise<void>;\n}) {\n const [identities, setIdentities] = useState<OcLinkedIdentity[] | null>(null);\n const [loadFailed, setLoadFailed] = useState(false);\n const [promoting, setPromoting] = useState<DisplayIdentityKind | null>(null);\n const [promoteErr, setPromoteErr] = useState<string | null>(null);\n // Track the (open-state, account) we last fetched for. Refetch when\n // didOc changes — multi-account switches swap which account's linked\n // identities should appear here, and stale data manifested as the\n // popover visibly reflowing mid-switch (\"dropdown freaking out\").\n const lastFetchKeyRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!open) return;\n // Fetch on first open AND whenever the active didOc changes.\n if (lastFetchKeyRef.current === didOc) return;\n lastFetchKeyRef.current = didOc;\n let cancelled = false;\n // Reset so the section briefly returns null (suppresses flash)\n // until the new account's identities resolve.\n setIdentities(null);\n setLoadFailed(false);\n void fetchOcLinkedIdentities()\n .then((rows) => {\n if (!cancelled) setIdentities(rows);\n })\n .catch(() => {\n if (!cancelled) setLoadFailed(true);\n });\n return () => {\n cancelled = true;\n };\n }, [open, didOc]);\n\n // Wait for the fetch to settle before rendering — avoids a section\n // that flashes in then vanishes.\n if (identities === null && !loadFailed) return null;\n\n const btc =\n identities?.find((i) => i.kind === 'btc' && i.is_primary && i.value) ??\n identities?.find((i) => i.kind === 'btc' && i.value);\n const email =\n identities?.find((i) => i.kind === 'email' && i.is_primary && i.value) ??\n identities?.find((i) => i.kind === 'email' && i.value);\n\n const options: Array<{ kind: DisplayIdentityKind; value: string }> = [\n { kind: 'did', value: didOc },\n ];\n if (btc?.value) options.push({ kind: 'btc', value: btc.value });\n if (email?.value) options.push({ kind: 'email', value: email.value });\n if (nostrNpub) options.push({ kind: 'nostr', value: nostrNpub });\n\n // Nothing to choose between → no section.\n if (options.length < 2) return null;\n\n const promote = async (kind: DisplayIdentityKind) => {\n if (promoting || kind === current.kind) return;\n setPromoting(kind);\n setPromoteErr(null);\n try {\n await setDisplayIdentity(kind);\n } catch (e) {\n setPromoteErr(e instanceof Error ? e.message : 'promotion failed');\n } finally {\n setPromoting(null);\n }\n };\n\n return (\n <div className=\"border-border border-b p-1\" data-oc-account-menu-section=\"show-as\">\n <div className=\"text-muted-foreground/60 px-3 pt-2 pb-1 font-mono text-[10px] tracking-widest uppercase\">\n § show as\n </div>\n {options.map((opt) => (\n <PromoteRow\n key={opt.kind}\n kind={opt.kind}\n value={opt.value}\n active={opt.kind === current.kind}\n busy={promoting === opt.kind}\n disabled={promoting !== null}\n onPromote={() => void promote(opt.kind)}\n />\n ))}\n {promoteErr ? (\n <div className=\"text-destructive/80 px-3 pt-1 pb-2 font-mono text-[10px]\">\n {promoteErr}\n </div>\n ) : null}\n </div>\n );\n}\n\n/**\n * Connected variant — pulls the session from `useOcSession()`. This is\n * what every consumer site with `<OcSessionProvider>` mounted should\n * use. For sites running a parallel auth context (e.g. oc-www's local\n * `useAuth`), use `<OcAccountMenuView>` below and pass a session prop\n * directly.\n */\nexport function OcAccountMenu(props: OcAccountMenuProps) {\n const session = useOcSession();\n return (\n <OcAccountMenuView\n {...props}\n session={{\n status: session.status,\n account: session.account\n ? {\n didOc: session.account.didOc,\n displayName: session.account.displayName ?? null,\n displayIdentity: session.account.displayIdentity,\n nostrNpub: session.account.nostrNpub ?? null,\n }\n : null,\n signOut: session.signOut,\n refresh: session.refresh,\n setDisplayIdentity: session.setDisplayIdentity,\n // Multi-account · the connected variant always forwards\n // these from useOcSession(). The View variant accepts\n // them as optional so sites running their own auth\n // context (oc-www) can opt in incrementally.\n roster: session.roster,\n switchAccount: session.switchAccount,\n addAccountUrl: session.addAccountUrl,\n // Structural read keeps the auth-client peer floor at\n // ^2.17.0 — `tabPinned` ships in 2.18.0 and is simply\n // undefined (no hint) on older providers.\n tabPinned: (session as { tabPinned?: boolean }).tabPinned,\n }}\n />\n );\n}\n\nexport interface OcAccountMenuViewProps extends OcAccountMenuProps {\n /**\n * The session to render. When using `<OcAccountMenuView>` directly\n * (rather than the connected `<OcAccountMenu>`), pass an adapter\n * over your local auth context.\n */\n session: OcAccountMenuSession;\n}\n\n/**\n * Presentational variant — takes a session as an explicit prop. Use\n * this when your site runs its own auth context (e.g. ochk.io's\n * local `useAuth`) and you want the family-consistent visual without\n * mounting `<OcSessionProvider>`.\n */\n/**\n * MobileMenu — the `☰` rendered to the LEFT of the identity chip on phones\n * (`md:hidden`). Holds the site's nav links (primary + secondary) and the\n * appearance controls (mode + skin), so the mobile header is just\n * `[☰][identity]` with the theme folded in — no centered hamburger, no\n * standalone palette. Auth-independent: present whether signed in or out.\n */\nfunction MobileMenu({\n primary,\n secondary,\n}: {\n primary?: ReadonlyArray<OcAccountMenuItem>;\n secondary?: ReadonlyArray<OcAccountMenuItem>;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('mousedown', onClick);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onClick);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n const links = [...(primary ?? []), ...(secondary ?? [])];\n const rowCls =\n 'font-display flex items-center gap-2 px-3 py-2 text-[12px] font-semibold tracking-wider uppercase text-muted-foreground hover:text-foreground hover:bg-accent transition-colors';\n\n return (\n <div ref={ref} className=\"relative md:hidden\" data-oc-account-mobile-menu=\"\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label=\"menu\"\n className=\"border-input bg-background hover:bg-accent text-muted-foreground inline-flex size-8 items-center justify-center rounded-md border transition-colors\"\n data-oc-account-mobile-toggle=\"\"\n >\n {open ? <X className=\"size-4\" aria-hidden /> : <Menu className=\"size-4\" aria-hidden />}\n </button>\n {open && (\n <div\n role=\"menu\"\n aria-label=\"menu\"\n className=\"border-border bg-popover text-popover-foreground absolute top-[calc(100%+6px)] right-0 z-50 w-[min(16rem,calc(100vw-1rem))] overflow-hidden border shadow-xl\"\n data-oc-account-mobile-popover=\"\"\n >\n {links.length > 0 && (\n <div className=\"border-b p-1\">\n <div className=\"text-muted-foreground/60 px-3 pt-2 pb-1 font-mono text-[10px] tracking-widest uppercase\">\n § navigate\n </div>\n {links.map((l) =>\n l.external ? (\n <a\n key={l.href}\n href={l.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n role=\"menuitem\"\n onClick={() => setOpen(false)}\n className={rowCls}\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{l.label}</span>\n <span className=\"text-muted-foreground/70 text-[10px]\" aria-hidden>\n ↗\n </span>\n </a>\n ) : (\n <Link\n key={l.href}\n href={l.href}\n role=\"menuitem\"\n onClick={() => setOpen(false)}\n className={rowCls}\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{l.label}</span>\n </Link>\n )\n )}\n </div>\n )}\n <AppearanceControls />\n </div>\n )}\n </div>\n );\n}\n\nexport function OcAccountMenuView({\n current,\n signInUrl = '/signin',\n signInLabel = 'sign in',\n signOutRedirect = '/',\n menuItems,\n primaryNavLinks,\n secondaryNavLinks,\n showFamilyDashboard,\n build,\n siteState,\n className,\n triggerClassName,\n popoverClassName,\n session,\n}: OcAccountMenuViewProps) {\n const {\n status,\n account,\n signOut,\n refresh,\n setDisplayIdentity,\n roster,\n switchAccount,\n addAccountUrl,\n tabPinned,\n } = session;\n const [hydrated, setHydrated] = useState(false);\n const [open, setOpen] = useState(false);\n const wrapRef = useRef<HTMLDivElement | null>(null);\n\n const property = findFamilyProperty(current);\n const hostname = property?.hostname ?? `${current}.ochk.io`;\n const isHome = current === 'home';\n const familyDashboardEnabled = showFamilyDashboard ?? !isHome;\n\n useEffect(() => setHydrated(true), []);\n\n // Cross-site sign-in pickup: re-fetch on visibility / focus.\n useEffect(() => {\n const onWake = () => {\n if (document.visibilityState === 'visible') void refresh();\n };\n const onFocus = () => void refresh();\n document.addEventListener('visibilitychange', onWake);\n window.addEventListener('focus', onFocus);\n return () => {\n document.removeEventListener('visibilitychange', onWake);\n window.removeEventListener('focus', onFocus);\n };\n }, [refresh]);\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => {\n if (wrapRef.current && !wrapRef.current.contains(e.target as Node)) setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('mousedown', onClick);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onClick);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n const signInTrigger = (\n <a\n href={signInUrl}\n aria-label={signInLabel}\n data-oc-account-menu-signin=\"\"\n className={\n triggerClassName ??\n 'border-input bg-background hover:bg-accent inline-flex h-8 items-center justify-center rounded-md border px-3 font-mono text-[11px] font-semibold tracking-widest uppercase transition-colors'\n }\n >\n {signInLabel}\n </a>\n );\n\n // The mobile `☰` (nav + appearance) sits to the LEFT of the identity slot\n // on phones; on md+ it's hidden (nav is inline via OcPrimaryNav, appearance\n // is the desktop palette). Only rendered when this site has nav links.\n const hasNav = ((primaryNavLinks?.length ?? 0) + (secondaryNavLinks?.length ?? 0)) > 0;\n const wrap = (identity: ReactNode) => (\n <div className={cn('flex items-center gap-1', className)} data-oc-account-menu=\"\">\n {hasNav ? <MobileMenu primary={primaryNavLinks} secondary={secondaryNavLinks} /> : null}\n {identity}\n </div>\n );\n\n // States 1 + 2: pre-hydration or anonymous — render the same\n // placeholder/CTA so the slot is never empty.\n if (!hydrated || status === 'loading') {\n return wrap(signInTrigger);\n }\n\n if (status !== 'authenticated' || !account) {\n return wrap(signInTrigger);\n }\n\n // Authenticated — pill + popover. The collapsed label is the\n // user's vanity display name if they set one, otherwise the\n // identity they promoted (`displayIdentity` — defaults to their\n // sign-in identity, ultimately the did).\n const displayName = account.displayName ?? null;\n const label = displayName ?? obscureIdentity(account.displayIdentity.value);\n\n return wrap(\n <div ref={wrapRef} className=\"relative inline-block\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={`Signed in as ${account.didOc}. Open account menu.`}\n className={\n triggerClassName ??\n 'border-primary/40 bg-card hover:bg-accent inline-flex h-8 items-center gap-1.5 rounded-md border px-2 font-mono text-[11px] tracking-wide transition-colors sm:px-3'\n }\n data-oc-account-menu-trigger=\"\"\n >\n <span className=\"bg-primary inline-block size-1.5 shrink-0 rounded-full\" aria-hidden />\n {/* Below sm the chip condenses to dot + chevron only — a long\n display name / obscured did otherwise eats a phone header.\n The full label returns from sm up, capped so it can't blow\n out the row. */}\n <span className=\"text-foreground hidden max-w-[16ch] truncate sm:inline\">\n {label}\n </span>\n <svg\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 10 10\"\n aria-hidden\n className={\n 'opacity-60 transition-transform ' + (open ? 'rotate-180' : 'rotate-0')\n }\n >\n <path\n d=\"M2 4 L5 7 L8 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Account menu\"\n className={\n popoverClassName ??\n 'border-border bg-popover text-popover-foreground absolute top-[calc(100%+6px)] right-0 z-50 w-[min(20rem,calc(100vw-1rem))] border shadow-xl'\n }\n data-oc-account-menu-popover=\"\"\n >\n <div className=\"border-border border-b p-3\">\n <div className=\"text-primary mb-1 font-mono text-[10px] tracking-widest uppercase\">\n § signed in · {hostname}\n {tabPinned ? (\n <span\n className=\"text-muted-foreground/70 normal-case\"\n data-oc-account-menu-tab-pin=\"\"\n title=\"This tab keeps this account even if you switch accounts in another tab\"\n >\n {' '}\n · this tab\n </span>\n ) : null}\n </div>\n <CopyableDid did={account.didOc} />\n {/* Which identity this account actually IS (email /\n bitcoin / nostr) — surfaced next to the did so a tab\n signed into a DIFFERENT account than your other tabs\n is obvious at a glance, not buried behind the did.\n The did itself already shows above; skip the\n redundant did kind. */}\n {account.displayIdentity.kind !== 'did' &&\n account.displayIdentity.value ? (\n <div className=\"mt-1 flex items-center gap-1.5 font-mono text-[10px] tracking-wide\">\n <span className=\"text-muted-foreground/50 uppercase\">\n {IDENTITY_KIND_LABEL[account.displayIdentity.kind]}\n </span>\n <span className=\"text-foreground/75\">\n {obscureIdentity(account.displayIdentity.value)}\n </span>\n </div>\n ) : null}\n {displayName ? (\n <div className=\"text-muted-foreground/80 mt-1 font-mono text-[10px] tracking-wide\">\n {displayName}\n </div>\n ) : null}\n </div>\n\n <IdentityPromoteSection\n didOc={account.didOc}\n nostrNpub={account.nostrNpub ?? null}\n current={account.displayIdentity}\n open={open}\n setDisplayIdentity={setDisplayIdentity}\n />\n\n <AccountsSection\n roster={roster ?? []}\n switchAccount={switchAccount}\n addAccountUrl={addAccountUrl}\n signOut={signOut}\n onActionStart={() => setOpen(false)}\n />\n\n {primaryNavLinks && primaryNavLinks.length > 0 ? (\n <PopoverSection\n label=\"navigate\"\n items={primaryNavLinks}\n onItemClick={() => setOpen(false)}\n className=\"hidden md:block\"\n />\n ) : null}\n\n <div className=\"p-1\" data-oc-account-menu-section=\"account\">\n {menuItems?.map((item) => {\n const onClick = () => setOpen(false);\n const cls =\n 'hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors';\n const inner = (\n <>\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{item.label}</span>\n {item.external ? (\n <span\n className=\"text-muted-foreground/70 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return item.external ? (\n <a\n key={item.href}\n href={item.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </a>\n ) : (\n <Link\n key={item.href}\n href={item.href}\n onClick={onClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </Link>\n );\n })}\n\n {familyDashboardEnabled ? (\n <a\n href=\"https://ochk.io/dashboard\"\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={() => setOpen(false)}\n role=\"menuitem\"\n className=\"hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors\"\n data-oc-account-menu-item=\"\"\n data-oc-account-menu-family-dashboard=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">family dashboard</span>\n <span\n className=\"text-muted-foreground/70 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n </a>\n ) : null}\n\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={() => {\n setOpen(false);\n // Await the logout round-trip — its response is\n // what clears the `.ochk.io` cookie — and only\n // THEN hard-navigate home. Navigating first\n // (the old behavior) raced the next page's\n // session check against the still-uncleared\n // cookie, so the account badge stayed \"signed\n // in\" until a second sign-out. The hard\n // navigation is a committed browser navigation,\n // so it still wins over any auth-gated page's\n // redirect-to-sign-in effect.\n void (async () => {\n await signOut();\n if (typeof window !== 'undefined') {\n window.location.assign(signOutRedirect);\n }\n })();\n }}\n className=\"hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left font-mono text-[11px] tracking-wide transition-colors\"\n data-oc-account-menu-item=\"\"\n data-oc-account-menu-signout=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">sign out</span>\n </button>\n </div>\n\n {secondaryNavLinks && secondaryNavLinks.length > 0 ? (\n <PopoverSection\n label=\"more\"\n items={secondaryNavLinks}\n onItemClick={() => setOpen(false)}\n bordered\n className=\"hidden md:block\"\n />\n ) : null}\n\n {build ? <BuildFooter hostname={hostname} build={build} state={siteState} /> : null}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Multi-account · `§ accounts` section. Lists the other accounts the\n * user has signed into in this browser (the roster), lets them switch\n * with one click, surfaces an \"Add another account\" entry point that\n * routes through `addAccountUrl()` (the auth host preserves the\n * current roster_id when signing in via `?add=1`), and adapts the\n * sign-out affordance to support `scope: 'current'` per row.\n *\n * Gate: the whole section is suppressed when `addAccountUrl` isn't\n * provided. That's the back-compat signal for sites running a parallel\n * auth context (e.g. oc-www's local `useAuth`) — they can adopt\n * multi-account incrementally by wiring the new props on\n * `OcAccountMenuSession` as they build out support.\n */\nfunction AccountsSection({\n roster,\n switchAccount,\n addAccountUrl,\n signOut,\n onActionStart,\n}: {\n roster: OcAccountSummary[];\n switchAccount: ((didOc: string) => Promise<void>) | undefined;\n addAccountUrl: ((returnTo?: string) => string) | undefined;\n signOut: (opts?: { scope?: OcSignOutScope }) => void | Promise<void>;\n onActionStart: () => void;\n}) {\n const [switching, setSwitching] = useState<string | null>(null);\n const [err, setErr] = useState<string | null>(null);\n\n if (!addAccountUrl) return null;\n\n const onSwitch = async (didOc: string) => {\n if (!switchAccount || switching) return;\n setSwitching(didOc);\n setErr(null);\n try {\n await switchAccount(didOc);\n // Keep the menu open just long enough for the active label\n // to flip; the surrounding popover-close-on-outside-click\n // will pick up the user's next interaction.\n } catch (e) {\n setErr(e instanceof Error ? e.message : 'switch failed');\n } finally {\n setSwitching(null);\n }\n };\n\n return (\n <div className=\"border-border border-b p-1\" data-oc-account-menu-section=\"accounts\">\n <div className=\"text-muted-foreground/60 px-3 pt-2 pb-1 font-mono text-[10px] tracking-widest uppercase\">\n § accounts\n </div>\n {roster.map((peer) => (\n <SwitchRow\n key={peer.didOc}\n peer={peer}\n busy={switching === peer.didOc}\n disabled={switching !== null}\n onSwitch={() => void onSwitch(peer.didOc)}\n />\n ))}\n <a\n href={addAccountUrl()}\n onClick={() => onActionStart()}\n role=\"menuitem\"\n data-oc-account-menu-add-account=\"\"\n className=\"hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors\"\n >\n <Plus className=\"text-muted-foreground size-3.5 shrink-0\" aria-hidden />\n <span className=\"flex-1\">\n {roster.length === 0 ? 'add another account' : 'add another'}\n </span>\n </a>\n {/* \"leave this account\" only makes sense WITH peers in the\n * roster — without them, scope='current' degrades to scope='all'\n * and the parent menu's bottom \"sign out\" row already covers\n * that case. Rendering both produces two identical sign-out\n * affordances; gate on peer count to suppress the duplicate. */}\n {roster.length > 0 ? (\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={() => {\n onActionStart();\n void (async () => {\n try {\n await signOut({ scope: 'current' });\n } catch {\n // local state still flips · cookie may not\n }\n // No hard-nav · `scope: 'current'` with peers\n // in the roster keeps the browser signed-in to\n // the next-best account; the refresh() inside\n // signOut updates the badge in place.\n })();\n }}\n data-oc-account-menu-leave-current=\"\"\n className=\"hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left font-mono text-[11px] tracking-wide transition-colors\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">leave this account</span>\n </button>\n ) : null}\n {err ? (\n <div className=\"text-destructive/80 px-3 pt-1 pb-2 font-mono text-[10px]\">\n {err}\n </div>\n ) : null}\n </div>\n );\n}\n\n/**\n * One row in `§ accounts` — a switch-target peer. Clicking the body\n * calls `onSwitch`; while in-flight the row shows a spinner and the\n * other rows in the list are disabled.\n */\nfunction SwitchRow({\n peer,\n busy,\n disabled,\n onSwitch,\n}: {\n peer: OcAccountSummary;\n busy: boolean;\n disabled: boolean;\n onSwitch: () => void;\n}) {\n const label = peer.displayName ?? obscureIdentity(peer.displayIdentity.value);\n const kindLabel = IDENTITY_KIND_LABEL[peer.displayIdentity.kind];\n return (\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={false}\n aria-label={`Switch to ${peer.didOc}`}\n disabled={disabled}\n onClick={onSwitch}\n data-oc-account-menu-switch-row=\"\"\n className=\"hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left font-mono text-[11px] tracking-wide transition-colors disabled:cursor-default\"\n >\n <span\n className=\"border-muted-foreground/40 flex size-3.5 shrink-0 items-center justify-center rounded-full border\"\n aria-hidden\n />\n <span className=\"text-foreground/90 min-w-0 flex-1 truncate\">{label}</span>\n <span className=\"text-muted-foreground/50 w-14 shrink-0 text-right text-[9px] tracking-widest uppercase\">\n {busy ? <Loader2 className=\"ml-auto size-3 animate-spin\" /> : kindLabel}\n </span>\n </button>\n );\n}\n\n/**\n * Single nav section inside the identity popover (e.g. `§ navigate`, `§ more`).\n * Rendered DESKTOP-ONLY (`hidden md:block`) by callers: on mobile the same\n * links live in the account menu's `☰`, so showing them here too would double\n * up. On desktop it's the nav home for console sites that have no inline\n * OcPrimaryNav.\n */\nfunction PopoverSection({\n label,\n items,\n onItemClick,\n bordered,\n className,\n}: {\n label: string;\n items: ReadonlyArray<OcAccountMenuItem>;\n onItemClick: () => void;\n bordered?: boolean;\n className?: string;\n}) {\n const cls =\n 'hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors';\n return (\n <div\n className={cn('p-1', bordered && 'border-border border-t', className)}\n data-oc-account-menu-section={label}\n >\n <div className=\"text-muted-foreground/60 px-3 pt-2 pb-1 font-mono text-[10px] tracking-widest uppercase\">\n § {label}\n </div>\n {items.map((item) =>\n item.external ? (\n <a\n key={item.href}\n href={item.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onItemClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{item.label}</span>\n <span className=\"text-muted-foreground/70 text-[10px]\" aria-hidden>\n ↗\n </span>\n </a>\n ) : (\n <Link\n key={item.href}\n href={item.href}\n onClick={onItemClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{item.label}</span>\n </Link>\n )\n )}\n </div>\n );\n}\n\nfunction BuildFooter({\n hostname,\n build,\n state,\n}: {\n hostname: string;\n build: OcAccountMenuBuildInfo;\n state?: SiteState;\n}) {\n const sha = build.sha;\n const showSha = !!sha && sha !== 'dev';\n const commitUrl = showSha && build.repo ? `https://github.com/${build.repo}/commit/${sha}` : null;\n return (\n <div\n className=\"text-muted-foreground/60 border-border border-t px-3 py-2 font-mono text-[9.5px] tracking-widest uppercase\"\n data-oc-account-menu-build=\"\"\n >\n {hostname}\n {state && state !== 'live' ? (\n <>\n {' · '}\n <span className=\"text-muted-foreground/80\">{state}</span>\n </>\n ) : null}{' '}\n <span className=\"text-muted-foreground/80\">\n v{build.version}\n {showSha ? (\n <>\n {' · '}\n {commitUrl ? (\n <a\n href={commitUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"hover:text-foreground/90 underline decoration-dotted underline-offset-2\"\n >\n {sha}\n </a>\n ) : (\n sha\n )}\n </>\n ) : null}\n </span>\n </div>\n );\n}\n","\"use client\";\n\nimport Link from \"next/link\";\nimport type { ReactNode } from \"react\";\n\n/**\n * `<OcPrimaryNav>` — the centered link row in every family site's\n * `<LayoutHeader>`. Replaces the per-site bespoke `<nav>` blocks.\n *\n * **Desktop-only.** The inline row shows at `md+`; below that it is hidden,\n * because on mobile the same links live in the account menu's `☰` drawer\n * (`OcAccountMenu`, rendered to the left of the identity chip) — one shared\n * mobile-nav pattern, no centered hamburger, no per-site fork.\n *\n * Active item is `text-primary`; siblings are muted. Active affordance is\n * text-only (no underline / bottom stripe) — deliberately restrained.\n *\n * **Usage:**\n *\n * <OcPrimaryNav\n * activePath={router.pathname}\n * links={[\n * { href: '/dashboard', label: 'dashboard' },\n * { href: 'https://docs.ochk.io/attest', label: 'docs', external: true },\n * ]}\n * />\n */\n\nexport interface OcPrimaryNavLink {\n /** Same-origin path or absolute URL. */\n href: string;\n /** Visible label · lowercase preferred (the chip styling applies tracking + uppercase). */\n label: string;\n /** When true, opens in a new tab and skips the `isActive` check. */\n external?: boolean;\n /** Optional override for the active-match. By default the link is\n * active when `activePath === href` or `activePath.startsWith(href + '/')`. */\n matchExact?: boolean;\n}\n\nexport interface OcPrimaryNavProps {\n /** Current router pathname for active-link highlight. */\n activePath: string;\n /** Link set. Keep to 2–5 entries. */\n links: ReadonlyArray<OcPrimaryNavLink>;\n /** className for the outer container. */\n className?: string;\n}\n\nfunction isActive(pathname: string, link: OcPrimaryNavLink): boolean {\n if (link.external) return false;\n if (link.matchExact) return pathname === link.href;\n if (link.href === \"/\") return pathname === \"/\";\n return pathname === link.href || pathname.startsWith(link.href + \"/\");\n}\n\nexport function OcPrimaryNav({\n activePath,\n links,\n className,\n}: OcPrimaryNavProps) {\n return (\n <nav\n aria-label=\"primary\"\n className={\n \"hidden items-center gap-0.5 sm:gap-1 md:flex \" + (className ?? \"\")\n }\n data-oc-primary-nav=\"\"\n >\n {links.map((link) => {\n const active = isActive(activePath, link);\n const cls =\n \"font-display shrink-0 px-2 py-1 sm:px-3 text-[11px] sm:text-[12px] font-semibold tracking-wider uppercase transition-colors \" +\n (active\n ? \"text-primary\"\n : \"text-muted-foreground hover:text-foreground\");\n const content: ReactNode = (\n <>\n {link.label}\n {link.external ? (\n <span\n aria-hidden\n className=\"text-muted-foreground/60 ml-1 text-[9px]\"\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return link.external ? (\n <a\n key={link.href}\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cls}\n data-oc-primary-nav-item=\"\"\n >\n {content}\n </a>\n ) : (\n <Link\n key={link.href}\n href={link.href}\n aria-current={active ? \"page\" : undefined}\n className={cls}\n data-oc-primary-nav-item={active ? \"active\" : \"sibling\"}\n >\n {content}\n </Link>\n );\n })}\n </nav>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { useEffect, useState, type ReactNode } from 'react';\n\n/**\n * `<OcDashboardShell>` — the canonical demo-app frame for protocol\n * sites. Mirrors the `MeShell` pattern from `me.ochk.io`: persistent\n * left-rail tools on desktop, off-canvas drawer on mobile, page\n * eyebrow + title + description above the children.\n *\n * Drives the unified \"dashboard pattern\" the family rolled out\n * 2026-05-14: every protocol site's `/dashboard` (and the demo pages\n * underneath — `/create`, `/verify`, `/discover`, `/playground`, etc.)\n * wraps in this shell, so visitors crossing protocols experience the\n * same chrome.\n *\n * Layout (desktop):\n *\n * ┌─────────────┬────────────────────────────────────┐\n * │ § dashboard │ eyebrow │\n * │ ── tools ── │ title │\n * │ create ● │ description │\n * │ verify │ │\n * │ discover │ ── children ─────────────────────│\n * │ ... │ │\n * └─────────────┴────────────────────────────────────┘\n *\n * Mobile (<md): sidebar collapses behind a hamburger button at the\n * top of the main column; tapping opens a full-width drawer.\n */\n\nexport interface OcDashboardTool {\n /** Stable identifier · used as `active` key. */\n id: string;\n /** Same-origin path the tool lives at. */\n href: string;\n /** Visible label · lowercase preferred. */\n label: string;\n /** Optional one-line tagline shown under the label in the rail and\n * on the dashboard hub cards. */\n tagline?: string;\n /** Optional ascii / unicode glyph rendered before the label. */\n icon?: ReactNode;\n /** When true, opens in a new tab (e.g. an external explorer). */\n external?: boolean;\n}\n\nexport interface OcDashboardShellProps {\n /**\n * Dashboard root path — the rail header links here (\"§ dashboard\").\n * Default `'/dashboard'`.\n */\n rootHref?: string;\n /**\n * Site display name shown in the rail header above the tools list\n * (e.g. `'oc·attest'`).\n */\n siteLabel?: ReactNode;\n /** Tools to surface in the left rail. */\n tools: ReadonlyArray<OcDashboardTool>;\n /**\n * Which tool is currently active — matched against each tool's\n * `id`. Pass `undefined` on the dashboard hub itself.\n */\n active?: string;\n /** Optional small mono label above the page title. */\n eyebrow?: ReactNode;\n /** Page title — rendered as h1. */\n title?: ReactNode;\n /** Page description — rendered as a paragraph below the title. */\n description?: ReactNode;\n /** Main column content. */\n children: ReactNode;\n /** className for the outer container. */\n className?: string;\n}\n\nexport function OcDashboardShell({\n rootHref = '/dashboard',\n siteLabel,\n tools,\n active,\n eyebrow,\n title,\n description,\n children,\n className,\n}: OcDashboardShellProps) {\n const [drawerOpen, setDrawerOpen] = useState(false);\n\n // Close drawer on Escape, lock body scroll while open.\n useEffect(() => {\n if (!drawerOpen) return;\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setDrawerOpen(false);\n }\n document.addEventListener('keydown', onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = prevOverflow;\n };\n }, [drawerOpen]);\n\n const hasHeader = Boolean(title) || Boolean(eyebrow);\n\n return (\n <div\n className={'container ' + (className ?? '')}\n data-oc-dashboard-shell=\"\"\n >\n <div className=\"flex min-h-[calc(100vh-3rem)] flex-col md:flex-row md:gap-8\">\n {/* Desktop sidebar */}\n <Sidebar\n rootHref={rootHref}\n siteLabel={siteLabel}\n tools={tools}\n active={active}\n variant=\"desktop\"\n />\n\n {/* Main column */}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {/* Mobile bar — hamburger + crumb */}\n <div className=\"border-border flex items-center justify-between border-b py-3 md:hidden\">\n <button\n type=\"button\"\n onClick={() => setDrawerOpen(true)}\n className=\"text-muted-foreground hover:text-foreground inline-flex h-9 items-center gap-2 px-1 font-mono text-[11px] tracking-widest uppercase transition-colors\"\n aria-label=\"open dashboard tools\"\n aria-expanded={drawerOpen}\n data-oc-dashboard-mobile-trigger=\"\"\n >\n <span className=\"text-[14px] leading-none\">≡</span>\n <span>tools</span>\n </button>\n <Link\n href={rootHref}\n className=\"text-primary font-mono text-[11px] tracking-widest uppercase\"\n >\n § dashboard\n </Link>\n </div>\n\n <div className=\"pt-6 md:pt-3\">\n {hasHeader && (\n <div className=\"max-w-3xl\">\n {eyebrow ? (\n <div className=\"label-mono text-primary mb-3 font-mono text-[10px] tracking-widest uppercase\">\n {eyebrow}\n </div>\n ) : null}\n {title ? (\n <h1 className=\"font-display text-2xl font-bold tracking-tight sm:text-3xl\">\n {title}\n </h1>\n ) : null}\n {description ? (\n <p className=\"text-muted-foreground mt-3 max-w-[64ch] text-sm leading-relaxed\">\n {description}\n </p>\n ) : null}\n </div>\n )}\n <div className={hasHeader ? 'mt-8 pb-12' : 'pb-12'}>{children}</div>\n </div>\n </div>\n </div>\n\n {/* Mobile drawer */}\n {drawerOpen ? (\n <div\n className=\"fixed inset-0 z-50 md:hidden\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"dashboard tools\"\n data-oc-dashboard-drawer=\"\"\n >\n <div\n className=\"absolute inset-0 bg-background/80 backdrop-blur-sm\"\n onClick={() => setDrawerOpen(false)}\n aria-hidden\n />\n <div className=\"bg-background absolute top-0 left-0 h-full w-[85vw] max-w-sm border-r shadow-xl\">\n <Sidebar\n rootHref={rootHref}\n siteLabel={siteLabel}\n tools={tools}\n active={active}\n variant=\"drawer\"\n onClose={() => setDrawerOpen(false)}\n />\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction Sidebar({\n rootHref,\n siteLabel,\n tools,\n active,\n variant,\n onClose,\n}: {\n rootHref: string;\n siteLabel?: ReactNode;\n tools: ReadonlyArray<OcDashboardTool>;\n active?: string;\n variant: 'desktop' | 'drawer';\n onClose?: () => void;\n}) {\n const isDrawer = variant === 'drawer';\n return (\n <aside\n className={\n isDrawer\n ? 'flex h-full w-full flex-col bg-card'\n : 'hidden md:sticky md:top-4 md:flex md:h-[calc(100vh-2rem)] md:w-56 md:shrink-0 md:flex-col md:self-start md:overflow-y-auto md:rounded md:border md:bg-card/40 lg:w-60'\n }\n aria-label=\"dashboard tools\"\n data-oc-dashboard-sidebar={variant}\n >\n {/* identity strip */}\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <Link\n href={rootHref}\n onClick={onClose}\n className=\"hover:text-foreground font-display text-sm font-bold tracking-tight\"\n >\n § dashboard\n </Link>\n {isDrawer ? (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"text-muted-foreground hover:text-foreground -mr-2 inline-flex h-8 w-8 items-center justify-center rounded font-mono text-lg\"\n aria-label=\"close navigation\"\n >\n ×\n </button>\n ) : null}\n </div>\n {siteLabel ? (\n <div className=\"text-muted-foreground/70 mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {siteLabel}\n </div>\n ) : null}\n </div>\n\n <nav className=\"flex-1 overflow-y-auto px-2 py-3\">\n <div className=\"text-muted-foreground/60 mb-1 px-3 font-mono text-[10px] tracking-widest uppercase\">\n § tools\n </div>\n <ul className=\"space-y-0.5\">\n {tools.map((tool) => {\n const isActive = tool.id === active;\n const innerCls =\n 'flex items-baseline gap-2 rounded px-3 py-1.5 text-[12.5px] transition-colors ' +\n (isActive\n ? 'bg-primary/10 text-primary font-semibold'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted/30');\n const content = (\n <>\n {tool.icon ? (\n <span\n className={\n 'shrink-0 font-mono text-[11px] ' +\n (isActive ? 'text-primary' : 'text-muted-foreground/70')\n }\n aria-hidden\n >\n {tool.icon}\n </span>\n ) : null}\n <span className=\"flex-1 leading-tight\">\n <span>{tool.label}</span>\n {tool.tagline ? (\n <span className=\"text-muted-foreground/60 mt-0.5 block font-mono text-[10px] tracking-wide normal-case\">\n {tool.tagline}\n </span>\n ) : null}\n </span>\n {tool.external ? (\n <span\n className=\"text-muted-foreground/60 text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return (\n <li key={tool.id}>\n {tool.external ? (\n <a\n href={tool.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onClose}\n className={innerCls}\n data-oc-dashboard-tool={isActive ? 'active' : 'sibling'}\n >\n {content}\n </a>\n ) : (\n <Link\n href={tool.href}\n onClick={onClose}\n aria-current={isActive ? 'page' : undefined}\n className={innerCls}\n data-oc-dashboard-tool={isActive ? 'active' : 'sibling'}\n >\n {content}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n </aside>\n );\n}\n\n/**\n * Convenience: the dashboard hub-page grid. Renders the same set of\n * tools as the sidebar, but as bigger card-style entries — used as\n * the body of `/dashboard/index.tsx` on each protocol site.\n */\nexport interface OcDashboardHubProps {\n tools: ReadonlyArray<OcDashboardTool>;\n className?: string;\n}\n\nexport function OcDashboardHub({ tools, className }: OcDashboardHubProps) {\n return (\n <ul\n className={\n 'grid gap-px border-t border-l sm:grid-cols-2 ' + (className ?? '')\n }\n data-oc-dashboard-hub=\"\"\n >\n {tools.map((tool) => {\n const content = (\n <span className=\"flex h-full flex-col gap-3 p-5 transition-colors\">\n <span className=\"flex items-baseline gap-3\">\n {tool.icon ? (\n <span\n className=\"text-primary font-mono text-[13px]\"\n aria-hidden\n >\n {tool.icon}\n </span>\n ) : null}\n <span className=\"font-display text-foreground text-base font-bold tracking-tight\">\n {tool.label}\n </span>\n {tool.external ? (\n <span\n className=\"text-muted-foreground/60 ml-auto text-xs\"\n aria-hidden\n >\n ↗\n </span>\n ) : (\n <span\n className=\"text-muted-foreground/60 ml-auto text-xs\"\n aria-hidden\n >\n →\n </span>\n )}\n </span>\n {tool.tagline ? (\n <span className=\"text-muted-foreground text-sm leading-relaxed\">\n {tool.tagline}\n </span>\n ) : null}\n </span>\n );\n const cls = 'hover:bg-muted/30 group block border-r border-b transition-colors';\n return (\n <li key={tool.id}>\n {tool.external ? (\n <a\n href={tool.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cls}\n >\n {content}\n </a>\n ) : (\n <Link href={tool.href} className={cls}>\n {content}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n","import type { ReactNode } from 'react';\n\n/**\n * AppShell — shared page chrome for every authenticated dashboard surface\n * across the OC family (vault, me, future). Lifted from oc-me-web's\n * `MeShell` and oc-vault-web's `VaultShell` — same eyebrow / title /\n * description / actions header band, no sidebar (sidebars are app-specific\n * and stay in the consuming app).\n *\n * Usage:\n * <AppShell eyebrow=\"§ vault\" title=\"your vault.\" description=\"…\">\n * ...\n * </AppShell>\n *\n * The component is stateless and dependency-free. Tailwind classes assume\n * the consuming site loads the family `globals.css` (which defines\n * `.container`, `.label-mono`, the dark-by-default palette, etc.).\n */\n\nexport interface AppShellProps {\n eyebrow?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n /** Right-aligned action node rendered next to the title (e.g. CTA buttons). */\n headerActions?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function AppShell({\n eyebrow,\n title,\n description,\n headerActions,\n children,\n className,\n}: AppShellProps) {\n const hasHeader = Boolean(title);\n return (\n <div className={'container ' + (className ?? '')}>\n <div className=\"flex min-h-[calc(100vh-3rem)] flex-col\">\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"pt-6 md:pt-8\">\n {hasHeader && (\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"max-w-3xl\">\n {eyebrow && (\n <div className=\"label-mono text-primary mb-3\">\n {eyebrow}\n </div>\n )}\n <h1 className=\"font-display text-2xl font-bold tracking-tight sm:text-3xl\">\n {title}\n </h1>\n {description && (\n <p className=\"text-muted-foreground mt-3 max-w-[64ch] text-sm leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n {headerActions && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {headerActions}\n </div>\n )}\n </div>\n )}\n <div className={hasHeader ? 'mt-8 pb-12' : 'pb-12'}>{children}</div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface LayoutSubHeaderTag {\n label: string;\n /** Hide this tag below the given breakpoint (progressive disclosure). */\n hideBelow?: 'sm' | 'md' | 'lg';\n}\n\nexport interface LayoutSubHeaderProps {\n /** Product label shown after the status, e.g. \"oc · stamp\". */\n product: string;\n /** Left-side status text. Defaults to \"live · mainnet\". */\n status?: string;\n /**\n * Right-side capability tag(s). Keep it to ONE short phrase per site —\n * the strip reads as quiet supporting context, not a feature list. A\n * second/third tag is supported (spaced, never comma-jammed) for the rare\n * site that needs it, each with its own `hideBelow`.\n */\n tags?: LayoutSubHeaderTag[];\n /** Hide the pulsing heartbeat dot (e.g. on a degraded surface). */\n noHeartbeat?: boolean;\n className?: string;\n}\n\nconst HIDE: Record<NonNullable<LayoutSubHeaderTag['hideBelow']>, string> = {\n sm: 'hidden sm:inline',\n md: 'hidden md:inline',\n lg: 'hidden lg:inline',\n};\n\n/**\n * LayoutSubHeader — the ecosystem status strip below the header. One line,\n * never wraps. Identical shape across every family surface:\n *\n * ● live · mainnet oc · stamp ················· bip-322 · opentimestamps\n *\n * Left cluster (heartbeat + status + product) is the identity; the right\n * cluster is a quiet, low-contrast capability whisper. Below `sm` the strip\n * collapses to just the heartbeat + product so it never wraps or crowds a\n * phone header — the right cluster and the `status` reappear from `sm` up.\n *\n * The band carries a faint skin-tinted translucent shade (`.oc-substrip`) so\n * it has presence on every skin × mode without bleeding the hero/aurora\n * behind it. Pass `product`, optional `status`, and `tags`.\n */\nexport function LayoutSubHeader({\n product,\n status = 'live · mainnet',\n tags = [],\n noHeartbeat = false,\n className,\n}: LayoutSubHeaderProps) {\n return (\n <div className={cn('oc-substrip border-b', className)}>\n <div className=\"container flex items-center justify-between gap-x-6 py-2 font-mono text-[11px]\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n {!noHeartbeat && (\n <span\n className=\"bg-primary inline-block size-1.5 shrink-0 animate-pulse rounded-full ring-2 ring-[color-mix(in_oklch,var(--primary),transparent_78%)]\"\n aria-hidden\n />\n )}\n <span className=\"text-muted-foreground hidden tracking-widest whitespace-nowrap uppercase sm:inline\">\n {status}\n </span>\n <span className=\"text-foreground truncate\">{product}</span>\n </div>\n {tags.length > 0 && (\n <div className=\"text-muted-foreground/55 hidden shrink-0 items-center gap-x-3 tracking-wider whitespace-nowrap uppercase sm:flex\">\n {tags.map((tag, i) => (\n <span key={i} className={tag.hideBelow ? HIDE[tag.hideBelow] : undefined}>\n {tag.label}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface OcAppBarProps {\n /**\n * `'full'` (default) = edge-to-edge app chrome: a `.app-bar` row (responsive\n * gutters, NO max-width), so the header's left/right edges align with a\n * full-bleed app shell below it. `'contained'` = the same row inside\n * `.container` (max-w-screen-xl), identical to the marketing/content header —\n * an escape hatch, rarely needed.\n */\n variant?: 'full' | 'contained';\n /** Logo slot — pass `<OcLogoDropdown>…</OcLogoDropdown>` with the site wordmark. */\n start?: ReactNode;\n /** Center slot — pass `<OcPrimaryNav … />`. Centered, flex-1, min-w-0. */\n center?: ReactNode;\n /** Trailing actions — pass e.g. `<HeaderAccount /><OcAppearanceMenu />`. */\n end?: ReactNode;\n /** Stick to the top of the viewport. Default `true`. Keeps `h-12` (3rem). */\n sticky?: boolean;\n className?: string;\n}\n\n/**\n * `OcAppBar` — the sanctioned FULL-BLEED application header for full-screen app\n * surfaces (chat `/app`, the analytics cockpit, the forge console, the me\n * operator plane …). It is the app-surface counterpart to the constrained\n * marketing/content header: the SAME primitives (`OcLogoDropdown` /\n * `OcPrimaryNav` / `OcAccountMenu`) mounted in an edge-to-edge `.app-bar` row\n * (gutters only, no `max-w-screen-xl`) instead of a centered `.container`, so a\n * full-bleed app shell underneath lines up edge-to-edge with the chrome above.\n *\n * Marketing / content / protocol pages keep the constrained `.container`\n * header — never use `OcAppBar` over a `.container`-capped body, or you\n * re-introduce the left/right misalignment this composition exists to fix.\n *\n * Auth-free and brand-free by design: all branding + session chrome arrive\n * through the `start` / `center` / `end` slots, so app sites and content sites\n * share one primitive layer and can never visually drift. The fixed `h-12`\n * (3rem) lets a shell below claim `h-[calc(100dvh-3rem)]`.\n */\nexport function OcAppBar({\n variant = 'full',\n start,\n center,\n end,\n sticky = true,\n className,\n}: OcAppBarProps) {\n return (\n <header\n className={cn(\n 'bg-background/90 supports-[backdrop-filter]:bg-background/70 w-full border-b backdrop-blur',\n sticky && 'sticky top-0 z-50',\n className\n )}\n >\n <div\n className={cn(\n variant === 'full' ? 'app-bar' : 'container',\n 'flex h-12 items-center justify-between gap-4'\n )}\n >\n {start}\n <div className=\"flex min-w-0 flex-1 justify-center px-2\">{center}</div>\n <div className=\"flex items-center gap-1\">{end}</div>\n </div>\n </header>\n );\n}\n","import Link from \"next/link\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../tokens/cn\";\nimport { FAMILY_PROPERTIES, type FamilyCategory } from \"./family-properties\";\n\nexport interface FooterLink {\n href: string;\n label: string;\n /** Render as a cross-origin `<a target=\"_blank\">` with a ↗ affordance. */\n external?: boolean;\n}\n\nexport interface FooterColumn {\n /** Column heading, e.g. `'§ docs'`. */\n label: string;\n links: FooterLink[];\n}\n\nexport interface OcFamilyFooterBrand {\n /** The site's own logo mark (e.g. `<LogoMark size={20} />`). Optional. */\n mark?: ReactNode;\n /** Wordmark, e.g. `'oc·stamp'`. */\n wordmark: ReactNode;\n /** One-paragraph blurb under the wordmark (may contain links). */\n tagline: ReactNode;\n /** Optional license / attribution lines under the blurb. */\n meta?: ReactNode;\n}\n\nexport interface OcFamilyFooterProps {\n brand: OcFamilyFooterBrand;\n /** The site's own `§`-labelled link groups. */\n columns?: FooterColumn[];\n /**\n * Append registry-driven family columns (products / protocols) sourced from\n * `FAMILY_PROPERTIES`, so any footer that lists the family can never drift\n * from the canonical table. `'products'` is the five live products, etc.\n */\n family?: \"products\" | \"protocols\" | \"both\";\n /** Origin the legal-bar links resolve against. Defaults to ochk.io. */\n legalBase?: string;\n /** Override the left copyright line. Defaults to the canonical OC line. */\n legalCopyright?: ReactNode;\n /**\n * Override the centre legal links. Defaults to privacy / terms / security /\n * trademarks / contact (resolved against `legalBase`). Pass your own when a\n * site needs an extra link (e.g. a federation charter) or a shorter set.\n */\n legalLinks?: FooterLink[];\n /** Override the right-hand bitcoin tag (e.g. `'read on bitcoin'`). */\n builtWith?: ReactNode;\n className?: string;\n}\n\n// brand block + N content columns in one grid, mirroring the historical\n// per-site layout (`[1.2fr 1fr 1fr …]`). Keyed by content-column count so the\n// brand block keeps its wider share at every width.\nconst GRID: Record<number, string> = {\n 1: \"md:grid-cols-[1.2fr_1fr]\",\n 2: \"md:grid-cols-[1.2fr_1fr_1fr]\",\n 3: \"md:grid-cols-[1.2fr_1fr_1fr_1fr]\",\n 4: \"md:grid-cols-[1.2fr_1fr_1fr_1fr_1fr]\",\n 5: \"md:grid-cols-[1.2fr_1fr_1fr_1fr_1fr_1fr]\",\n};\n\nconst LINK_CLS =\n \"text-muted-foreground hover:text-foreground font-mono text-xs tracking-wide lowercase transition-colors\";\n\nfunction FooterLinkItem({ link }: { link: FooterLink }) {\n if (link.external) {\n return (\n <a href={link.href} target=\"_blank\" rel=\"noreferrer\" className={LINK_CLS}>\n {\"> \"}\n {link.label} ↗\n </a>\n );\n }\n return (\n <Link href={link.href} className={LINK_CLS}>\n {\"> \"}\n {link.label}\n </Link>\n );\n}\n\nfunction FooterColumnView({ column }: { column: FooterColumn }) {\n return (\n <div>\n <div className=\"label-mono text-primary mb-3\">{column.label}</div>\n <ul className=\"space-y-2\">\n {column.links.map((link) => (\n <li key={`${column.label}:${link.href}`}>\n <FooterLinkItem link={link} />\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nfunction familyColumn(category: FamilyCategory, label: string): FooterColumn {\n return {\n label,\n links: FAMILY_PROPERTIES.filter((p) => p.category === category).map(\n (p) => ({\n href: p.origin,\n label: p.label,\n external: true,\n }),\n ),\n };\n}\n\n/**\n * `<OcFamilyFooter>` — the one canonical family footer. Brand block on the\n * left, `§`-labelled link columns to the right, a single legal bar beneath.\n * Every `oc-*` site composes this with its own `brand` + `columns`; pass\n * `family` to surface the registry-driven product / protocol columns so any\n * footer listing the family always shows the full, current set.\n */\nexport function OcFamilyFooter({\n brand,\n columns = [],\n family,\n legalBase = \"https://ochk.io\",\n legalCopyright,\n legalLinks,\n builtWith,\n className,\n}: OcFamilyFooterProps) {\n const familyCols: FooterColumn[] = [];\n if (family === \"products\" || family === \"both\") {\n familyCols.push(familyColumn(\"product\", \"§ products\"));\n }\n if (family === \"protocols\" || family === \"both\") {\n familyCols.push(familyColumn(\"protocol\", \"§ protocols\"));\n }\n\n const allColumns = [...familyCols, ...columns];\n const grid = GRID[allColumns.length] ?? GRID[3];\n const year = new Date().getFullYear();\n const legal = (path: string) => `${legalBase}${path}`;\n const links: FooterLink[] = legalLinks ?? [\n { href: legal(\"/privacy\"), label: \"privacy\" },\n { href: legal(\"/terms\"), label: \"terms\" },\n { href: legal(\"/security\"), label: \"security\" },\n { href: legal(\"/trademark\"), label: \"trademarks\" },\n { href: legal(\"/contact\"), label: \"contact\" },\n ];\n\n return (\n <footer className={cn(\"border-t\", className)}>\n <div className=\"container py-10 sm:py-12 md:py-16\">\n <div className={cn(\"grid gap-8 sm:grid-cols-2 sm:gap-10\", grid)}>\n <div>\n <div className=\"flex items-center gap-2\">\n {brand.mark}\n <span className=\"font-display text-sm font-bold tracking-tight\">\n {brand.wordmark}\n </span>\n </div>\n <div className=\"text-muted-foreground mt-3 max-w-[34ch] text-sm leading-relaxed\">\n {brand.tagline}\n </div>\n {brand.meta && <div className=\"mt-4\">{brand.meta}</div>}\n </div>\n {allColumns.map((column) => (\n <FooterColumnView key={column.label} column={column} />\n ))}\n </div>\n\n <div className=\"mt-10 flex flex-col items-start justify-between gap-3 border-t pt-6 font-mono text-[11px] tracking-widest uppercase sm:flex-row sm:items-center\">\n <span className=\"text-muted-foreground\">\n {legalCopyright ?? <>© {year} orangecheck · mit + cc-by-4.0</>}\n </span>\n <div className=\"text-muted-foreground/80 flex flex-wrap items-center gap-x-4 gap-y-1\">\n {links.map((link) => (\n <a\n key={link.label}\n href={link.href}\n {...(link.external\n ? { target: \"_blank\", rel: \"noreferrer\" }\n : {})}\n className=\"hover:text-foreground transition-colors\"\n >\n {link.label}\n </a>\n ))}\n </div>\n <span className=\"text-muted-foreground inline-flex items-center gap-1.5\">\n <span className=\"text-primary text-[13px] leading-none\">₿</span>\n <span>{builtWith ?? \"built with bitcoin\"}</span>\n </span>\n </div>\n </div>\n </footer>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tokens/scene-tokens.ts","../src/tokens/aurora-gl.ts","../src/tokens/cn.ts","../src/tokens/themes.ts","../src/tokens/aurora.tsx","../src/tokens/provider.tsx","../src/tokens/theme-bridge.tsx","../src/tokens/theme-picker.tsx","../src/tokens/appearance-menu.tsx","../src/tokens/index.ts","../src/tokens/glyphs.ts","../src/tokens/sigil.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/input.tsx","../src/primitives/label.tsx","../src/primitives/checkbox.tsx","../src/primitives/radio-group.tsx","../src/primitives/switch.tsx","../src/primitives/alert.tsx","../src/primitives/alert-with-action.tsx","../src/primitives/textarea.tsx","../src/primitives/theme-toggle.tsx","../src/primitives/working.tsx","../src/primitives/error-boundary.tsx","../src/primitives/skeleton.tsx","../src/primitives/separator.tsx","../src/primitives/sheet.tsx","../src/primitives/dialog.tsx","../src/primitives/confirm-dialog.tsx","../src/primitives/prompt-dialog.tsx","../src/primitives/modal.tsx","../src/primitives/pagination.tsx","../src/primitives/popover.tsx","../src/primitives/tooltip.tsx","../src/primitives/accordion.tsx","../src/primitives/select.tsx","../src/primitives/toaster.tsx","../src/primitives/surface.tsx","../src/primitives/icon-badge.tsx","../src/primitives/card.tsx","../src/primitives/sparkline.tsx","../src/primitives/stat-block.tsx","../src/primitives/bar.tsx","../src/primitives/status-pill.tsx","../src/primitives/tabs.tsx","../src/format/use-spot-price.ts","../src/format/index.ts","../src/primitives/sats-amount.tsx","../src/primitives/copy-button.tsx","../src/primitives/bitcoin-address.tsx","../src/primitives/qr-code.tsx","../src/composites/help-hint.tsx","../src/composites/section-header.tsx","../src/composites/error-page.tsx","../src/composites/empty-state.tsx","../src/composites/stat-grid.tsx","../src/composites/stat-card.tsx","../src/composites/callout.tsx","../src/composites/definition-list.tsx","../src/composites/data-row.tsx","../src/composites/panel.tsx","../src/composites/marketing-heading.tsx","../src/composites/feature-card.tsx","../src/composites/section.tsx","../src/composites/comparison-table.tsx","../src/composites/numbered-step.tsx","../src/composites/faq.tsx","../src/composites/email-capture.tsx","../src/composites/check-list.tsx","../src/composites/accent-note.tsx","../src/composites/verified-chip.tsx","../src/composites/acknowledgement.tsx","../src/chrome/ecosystem-switcher.tsx","../src/chrome/family-properties.ts","../src/chrome/logo-dropdown.tsx","../src/chrome/account-menu.tsx","../src/chrome/primary-nav.tsx","../src/chrome/dashboard-shell.tsx","../src/chrome/app-shell.tsx","../src/chrome/layout-sub-header.tsx","../src/chrome/app-bar.tsx","../src/chrome/family-footer.tsx"],"names":["id","useRef","useEffect","value","jsxs","jsx","ONE_YEAR","useState","useTheme","Icon","Check","Palette","useMemo","cva","Slot","Sun","Moon","React","DialogPrimitive","useCallback","Dialog2","NODE_ENV","pending","notifyHost","hostMountCount","Dialog3","DialogPrimitive2","X","Popover2","React3","CheckIcon","Sonner","Popover3","Link","TONE_CLASS","Fragment","TONE","ChevronDown","isActive","useId","Copy","Plus"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * scene-tokens — the token→uniform rail for GPU-rendered backdrops.\n *\n * A WebGL layer cannot read OKLCH custom properties the way CSS can:\n * `getComputedStyle(...).getPropertyValue('--brand')` returns the raw\n * `oklch(…)` string (or an unresolved `color-mix(…)` expression) that no\n * rgb-regex survives. The zero-dependency bridge: a hidden probe element per\n * slot styled `color: color-mix(in srgb, var(--slot), var(--slot))` — the\n * browser performs the OKLCH→sRGB conversion + gamut mapping natively and\n * serializes the computed value as `color(srgb r g b)` (or legacy `rgb(…)`)\n * floats, parsed with one regex.\n *\n * Probes are mounted INSIDE the `.oc-aurora` element so per-skin re-hue hooks\n * (ember's `[data-oc-theme='ember'] .oc-aurora { --au-green; --au-blue }`)\n * apply for free. Change detection is one MutationObserver on <html>\n * (class + data-oc-theme + data-oc-motion) resampling in a double-rAF — it\n * catches next-themes mode flips, system scheme changes, cross-tab cookie\n * pickup, and skin swaps, framework-free (works in Storybook).\n */\n\nexport interface OcSceneRGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface OcSceneTokens {\n /** The four aurora hue slots (sRGB 0..1), --au-orange/-green/-blue/-violet. */\n palette: [OcSceneRGB, OcSceneRGB, OcSceneRGB, OcSceneRGB];\n /** Resolved page background (sRGB 0..1). */\n background: OcSceneRGB;\n /** `<html>` carries `.dark`. */\n isDark: boolean;\n /** Ambient-motion switch is off (`data-oc-motion=\"off\"`). */\n motionOff: boolean;\n}\n\nconst SLOTS = ['--au-orange', '--au-green', '--au-blue', '--au-violet', '--background'] as const;\n\n/** `color(srgb r g b [/ a])` or `rgb(r, g, b)` → 0..1 floats. Null on anything else. */\nfunction parseColor(value: string): OcSceneRGB | null {\n let m = value.match(/color\\(srgb\\s+([\\d.]+)\\s+([\\d.]+)\\s+([\\d.]+)/);\n if (m?.[1] != null && m[2] != null && m[3] != null) {\n return { r: +m[1], g: +m[2], b: +m[3] };\n }\n m = value.match(/rgba?\\(\\s*([\\d.]+)[,\\s]+([\\d.]+)[,\\s]+([\\d.]+)/);\n if (m?.[1] != null && m[2] != null && m[3] != null) {\n return { r: +m[1] / 255, g: +m[2] / 255, b: +m[3] / 255 };\n }\n return null;\n}\n\n/** OKLab round-trip (Ottosson, public domain) — used to pin lightness bands and\n * cap chroma so gold/phosphor/lightning carry equal visual weight per mode. */\nfunction srgbToOklab({ r, g, b }: OcSceneRGB): { L: number; a: number; b: number } {\n const lin = (c: number) => (c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4));\n const lr = lin(r);\n const lg = lin(g);\n const lb = lin(b);\n const l = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);\n const m = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);\n const s = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);\n return {\n L: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n a: 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n b: 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,\n };\n}\n\nfunction oklabToSrgb(L: number, a: number, bb: number): OcSceneRGB {\n const l = Math.pow(L + 0.3963377774 * a + 0.2158037573 * bb, 3);\n const m = Math.pow(L - 0.1055613458 * a - 0.0638541728 * bb, 3);\n const s = Math.pow(L - 0.0894841775 * a - 1.291485548 * bb, 3);\n const lr = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;\n const lg = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;\n const lb = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s;\n const un = (c: number) =>\n Math.min(1, Math.max(0, c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055));\n return { r: un(lr), g: un(lg), b: un(lb) };\n}\n\n/** Pin L into the mode's band + cap chroma (~C≤0.14) so every skin's field\n * reads with equal weight — the raw brand tokens vary wildly in both. */\nexport function normalizeHue(c: OcSceneRGB, isDark: boolean): OcSceneRGB {\n const { L, a, b } = srgbToOklab(c);\n const C = Math.hypot(a, b);\n const targetL = isDark\n ? Math.min(0.75, Math.max(0.55, L))\n : Math.min(0.95, Math.max(0.82, L + 0.25));\n const scale = C > 1e-6 ? Math.min(C, 0.14) / C : 0;\n return oklabToSrgb(targetL, a * scale, b * scale);\n}\n\n/**\n * Read the scene tokens by probing INSIDE `host` (normally the `.oc-aurora`\n * element). Returns null if any slot fails to parse — callers treat null as\n * \"keep the CSS floor\", never as an error.\n */\nexport function readOcSceneTokens(host: HTMLElement): OcSceneTokens | null {\n if (typeof document === 'undefined') return null;\n const probe = document.createElement('div');\n probe.setAttribute('aria-hidden', 'true');\n probe.style.cssText = 'position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;';\n const cells: HTMLElement[] = SLOTS.map((slot) => {\n const cell = document.createElement('span');\n // color-mix(in srgb, X, X) === X, but forces serialization to color(srgb …)\n cell.style.color = `color-mix(in srgb, var(${slot}), var(${slot}))`;\n probe.appendChild(cell);\n return cell;\n });\n host.appendChild(probe);\n try {\n const parsed = cells.map((cell) => parseColor(getComputedStyle(cell).color));\n const [orange, green, blue, violet, background] = parsed;\n if (!orange || !green || !blue || !violet || !background) return null;\n const root = document.documentElement;\n return {\n palette: [orange, green, blue, violet],\n background,\n isDark: root.classList.contains('dark'),\n motionOff: root.getAttribute('data-oc-motion') === 'off',\n };\n } finally {\n host.removeChild(probe);\n }\n}\n\n/**\n * Observe every signal that can recolor or pause a scene: mode class, skin\n * attribute, and the ambient-motion attribute. The callback fires inside a\n * double-rAF so computed styles have settled. Returns an unsubscribe.\n */\nexport function subscribeOcTheme(cb: () => void): () => void {\n if (typeof document === 'undefined') return () => {};\n let raf1 = 0;\n let raf2 = 0;\n const schedule = () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(cb);\n });\n };\n const mo = new MutationObserver(schedule);\n mo.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-oc-theme', 'data-oc-motion'],\n });\n return () => {\n mo.disconnect();\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n };\n}\n","/**\n * aurora-gl — the OcAuroraGL scene (aurora depth, release 2).\n *\n * One fullscreen WebGL2 fragment shader that supersedes the *perceptual output*\n * of the 5-blob CSS aurora: three octaves of noise through one domain-warp\n * stage, ramped through the same --au-* palette slots, with the exact mode\n * duality from aurora.css (tint in light, additive-leaning in dark), a\n * skin-keyed finish (silk under ember, device-pixel 8×8 Bayer under the four\n * cypherpunk skins), and a one-line IGN dither so dark mode never bands.\n *\n * This module is ONLY ever reached via dynamic import() from <OcAurora gl/>\n * after every gate passes — it costs consumers zero bytes otherwise. Every\n * failure path here disposes silently and the CSS blobs (never unmounted)\n * resume. No console output on any path: verify-stories.mjs fails the package\n * on any console error under headless SwiftShader.\n */\n\nimport {\n normalizeHue,\n readOcSceneTokens,\n subscribeOcTheme,\n type OcSceneRGB,\n type OcSceneTokens,\n} from './scene-tokens';\n\nconst KILL_KEY = 'oc-aurora-gl-kill:1';\nconst KILL_TTL_MS = 7 * 24 * 60 * 60 * 1000; // hardware doesn't change per-session\nconst SETTLE_MS = 90_000; // freeze uTime after this long without input\nconst FRAME_MS = 33; // 30fps ambient cap\nconst CROSSFADE_MS = 250; // palette tween — synced with the UI token snap, never lagging it\n\nconst VS = `#version 300 es\nin vec2 p;void main(){gl_Position=vec4(p,0.,1.);}`;\n\nconst FS = `#version 300 es\nprecision highp float;\nout vec4 o;\nuniform vec2 uRes;uniform float uT,uIsDark,uFinish,uMix;\nuniform vec3 uA0,uA1,uA2,uA3,uB0,uB1,uB2,uB3,uBg;\nfloat h(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}\nfloat n2(vec2 p){vec2 i=floor(p),f=fract(p);f=f*f*(3.-2.*f);\nreturn mix(mix(h(i),h(i+vec2(1,0)),f.x),mix(h(i+vec2(0,1)),h(i+vec2(1,1)),f.x),f.y);}\nfloat fbm(vec2 p){float v=0.,a=.55;for(int i=0;i<3;i++){v+=a*n2(p);p=p*2.03+vec2(1.7,9.2);a*=.5;}return v;}\nfloat B2(vec2 a){a=floor(a);return fract(a.x/2.+a.y*a.y*.75);}\n// OKLab mix (Ottosson) so skin crossfades never transit gray-brown.\nvec3 l2s(vec3 c){return mix(12.92*c,1.055*pow(c,vec3(1./2.4))-.055,step(.0031308,c));}\nvec3 s2l(vec3 c){return mix(c/12.92,pow((c+.055)/1.055,vec3(2.4)),step(.04045,c));}\nvec3 okmix(vec3 a,vec3 b,float t){\nvec3 la=s2l(a),lb=s2l(b);\nmat3 M1=mat3(.4122214708,.2119034982,.0883024619,.5363325363,.6806995451,.2817188376,.0514459929,.1073969566,.6299787005);\nmat3 M2=mat3(4.0767416621,-1.2684380046,-.0041960863,-3.3077115913,2.6097574011,-.7034186147,.2309699292,-.3413193965,1.707614701);\nvec3 ka=pow(M1*la,vec3(1./3.)),kb=pow(M1*lb,vec3(1./3.));\nvec3 k=mix(ka,kb,t);return clamp(l2s(M2*(k*k*k)),0.,1.);}\nvoid main(){\nvec2 uv=gl_FragCoord.xy/uRes;\nvec2 p=(uv-.5)*vec2(uRes.x/uRes.y,1.)*1.9;\nfloat t=uT*.018;\nvec2 w=vec2(fbm(p+vec2(0.,t)),fbm(p+vec2(5.2,1.3)-t*.7));\nfloat f=fbm(p+1.9*w+vec2(t*.5,-t*.3));\nfloat g=fbm(p*.6+w*1.2+vec2(9.1,3.7));\nvec3 c0=okmix(uA0,uB0,uMix),c1=okmix(uA1,uB1,uMix),c2=okmix(uA2,uB2,uMix),c3=okmix(uA3,uB3,uMix);\nvec3 c=mix(mix(c0,c1,smoothstep(.25,.55,g)),mix(c2,c3,smoothstep(.45,.8,g)),smoothstep(.4,.7,g));\nfloat e=smoothstep(.32,.9,f);\nif(uFinish>.5){\nfloat b=B2(.125*gl_FragCoord.xy)*.0625+B2(.25*gl_FragCoord.xy)*.25+B2(.5*gl_FragCoord.xy);\ne=floor(e*5.+b*.8-.4)/5.;}\n// container CSS already applies the mode-op × intensity opacity + radial mask\nvec3 col=(uIsDark>.5)?clamp(uBg+c*e*1.15,0.,1.):mix(uBg,c,e);\ncol+=(fract(52.9829189*fract(dot(gl_FragCoord.xy,vec2(0.06711056,0.00583715))))-.5)/255.;\no=vec4(col,1.);}`;\n\ninterface Palette {\n hues: [OcSceneRGB, OcSceneRGB, OcSceneRGB, OcSceneRGB];\n bg: OcSceneRGB;\n isDark: boolean;\n finish: number;\n}\n\nfunction killFlagged(): boolean {\n try {\n const raw = localStorage.getItem(KILL_KEY);\n if (!raw) return false;\n if (Date.now() - Number(raw) > KILL_TTL_MS) {\n localStorage.removeItem(KILL_KEY);\n return false;\n }\n return true;\n } catch {\n return false;\n }\n}\n\nfunction setKillFlag(): void {\n try {\n localStorage.setItem(KILL_KEY, String(Date.now()));\n } catch {\n /* private mode — per-session demotion only */\n }\n}\n\nfunction cypherFinish(): boolean {\n const skin = document.documentElement.getAttribute('data-oc-theme');\n return skin !== null && skin !== 'ember';\n}\n\nfunction samplePalette(host: HTMLElement): Palette | null {\n const tokens: OcSceneTokens | null = readOcSceneTokens(host);\n if (!tokens) return null;\n return {\n hues: tokens.palette.map((h) => normalizeHue(h, tokens.isDark)) as Palette['hues'],\n bg: tokens.background,\n isDark: tokens.isDark,\n finish: cypherFinish() ? 1 : 0,\n };\n}\n\n/**\n * Mount the GL layer inside the `.oc-aurora` container. Returns a dispose\n * function, or null when the environment declines (no WebGL2, software\n * renderer, kill flag, token parse failure) — in which case nothing was\n * touched and the CSS blobs simply continue.\n */\nexport function mountAuroraGL(container: HTMLElement): (() => void) | null {\n if (killFlagged()) return null;\n if (getComputedStyle(container).getPropertyValue('--oc-aurora-gl').trim() === 'off') {\n return null; // per-site one-line kill switch, no package release needed\n }\n\n const canvas = document.createElement('canvas');\n canvas.className = 'oc-aurora__gl';\n const glMaybe = canvas.getContext('webgl2', {\n antialias: false,\n depth: false,\n stencil: false,\n alpha: false,\n powerPreference: 'low-power',\n failIfMajorPerformanceCaveat: true, // SwiftShader/blocklist → CSS floor, free\n });\n if (!glMaybe) return null;\n const gl = glMaybe;\n\n const first = samplePalette(container);\n if (!first) return null;\n\n let prog: WebGLProgram;\n const uni: Record<string, WebGLUniformLocation | null> = {};\n try {\n const compile = (type: number, src: string) => {\n const s = gl.createShader(type)!;\n gl.shaderSource(s, src);\n gl.compileShader(s);\n if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) throw new Error('compile');\n return s;\n };\n prog = gl.createProgram()!;\n gl.attachShader(prog, compile(gl.VERTEX_SHADER, VS));\n gl.attachShader(prog, compile(gl.FRAGMENT_SHADER, FS));\n gl.linkProgram(prog);\n if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) throw new Error('link');\n gl.useProgram(prog);\n const buf = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buf);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), gl.STATIC_DRAW);\n const loc = gl.getAttribLocation(prog, 'p');\n gl.enableVertexAttribArray(loc);\n gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0);\n for (const k of ['uRes', 'uT', 'uIsDark', 'uFinish', 'uMix', 'uA0', 'uA1', 'uA2', 'uA3', 'uB0', 'uB1', 'uB2', 'uB3', 'uBg']) {\n uni[k] = gl.getUniformLocation(prog, k);\n }\n } catch {\n return null;\n }\n\n container.appendChild(canvas);\n\n // ---- palette crossfade state (from → to over CROSSFADE_MS, mixed in OKLab in-shader)\n let palFrom = first;\n let palTo = first;\n let mixStart = 0;\n\n // ---- clock: pausable, settle-to-static, resume without a jump\n let raf = 0;\n let lastFrame = 0;\n let clock = 0; // accumulated scene seconds\n let lastTick = 0;\n let lastInput = performance.now();\n let live = false;\n let disposed = false;\n\n // ---- lightweight governor: sustained slow frames → kill flag + dispose\n let slowStreak = 0;\n\n const setVec = (k: string, c: OcSceneRGB) => gl.uniform3f(uni[k] ?? null, c.r, c.g, c.b);\n\n function resize() {\n const coarse = matchMedia('(pointer: coarse)').matches;\n const dpr = Math.min(devicePixelRatio || 1, coarse ? 1.5 : 2) * 0.75;\n const w = Math.max(1, Math.round(container.clientWidth * dpr));\n const hgt = Math.max(1, Math.round(container.clientHeight * dpr));\n if (canvas.width !== w || canvas.height !== hgt) {\n canvas.width = w;\n canvas.height = hgt;\n gl.viewport(0, 0, w, hgt);\n }\n }\n\n function draw(now: number) {\n raf = requestAnimationFrame(draw);\n if (now - lastFrame < FRAME_MS) return;\n const frameGap = now - lastFrame;\n lastFrame = now;\n // governor: 3s of frames arriving at >2× budget on a capped loop = jank\n if (frameGap > FRAME_MS * 2.5) {\n if (++slowStreak > 90) {\n setKillFlag();\n dispose();\n return;\n }\n } else if (slowStreak > 0) slowStreak--;\n\n const settled = now - lastInput > SETTLE_MS;\n if (!settled) {\n clock += Math.min(now - lastTick, 100) / 1000; // clamp resume delta — no leap\n }\n lastTick = now;\n if (settled && live && mixDone(now)) return; // frozen frame — skip the GPU submit\n\n resize();\n const mix = Math.min(1, (now - mixStart) / CROSSFADE_MS);\n gl.uniform2f(uni.uRes ?? null, canvas.width, canvas.height);\n gl.uniform1f(uni.uT ?? null, clock);\n gl.uniform1f(uni.uIsDark ?? null, palTo.isDark ? 1 : 0);\n gl.uniform1f(uni.uFinish ?? null, palTo.finish);\n gl.uniform1f(uni.uMix ?? null, mix);\n setVec('uA0', palFrom.hues[0]);\n setVec('uA1', palFrom.hues[1]);\n setVec('uA2', palFrom.hues[2]);\n setVec('uA3', palFrom.hues[3]);\n setVec('uB0', palTo.hues[0]);\n setVec('uB1', palTo.hues[1]);\n setVec('uB2', palTo.hues[2]);\n setVec('uB3', palTo.hues[3]);\n setVec('uBg', palTo.bg);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n\n if (!live) {\n live = true;\n container.classList.add('oc-aurora--gl-live'); // true handoff: blobs pause+hide\n }\n }\n\n function mixDone(now: number): boolean {\n return now - mixStart >= CROSSFADE_MS;\n }\n\n const onInput = () => {\n lastInput = performance.now();\n };\n const onVisibility = () => {\n if (document.hidden) {\n cancelAnimationFrame(raf);\n raf = 0;\n } else if (!raf && !disposed) {\n lastFrame = 0;\n lastTick = performance.now();\n raf = requestAnimationFrame(draw);\n }\n };\n const onContextLost = (e: Event) => {\n e.preventDefault();\n cancelAnimationFrame(raf);\n raf = 0;\n };\n const onContextRestored = () => {\n // one restore attempt is the browser re-providing the context; if the\n // program state is gone we dispose rather than rebuild — CSS floor wins.\n dispose();\n };\n\n const unsubscribeTheme = subscribeOcTheme(() => {\n if (disposed) return;\n const root = document.documentElement;\n if (root.getAttribute('data-oc-motion') === 'off') {\n dispose(); // pause mechanism: GL leaves, frozen CSS blobs return\n return;\n }\n const next = samplePalette(container);\n if (!next) return; // parse hiccup — keep the current palette\n palFrom = { ...palTo, hues: [...palTo.hues] as Palette['hues'] };\n palTo = next;\n mixStart = performance.now();\n lastInput = performance.now(); // wake from settle so the fade renders\n });\n\n window.addEventListener('pointermove', onInput, { passive: true });\n window.addEventListener('scroll', onInput, { passive: true });\n window.addEventListener('keydown', onInput, { passive: true });\n document.addEventListener('visibilitychange', onVisibility);\n canvas.addEventListener('webglcontextlost', onContextLost);\n canvas.addEventListener('webglcontextrestored', onContextRestored);\n\n function dispose() {\n if (disposed) return;\n disposed = true;\n cancelAnimationFrame(raf);\n unsubscribeTheme();\n window.removeEventListener('pointermove', onInput);\n window.removeEventListener('scroll', onInput);\n window.removeEventListener('keydown', onInput);\n document.removeEventListener('visibilitychange', onVisibility);\n canvas.removeEventListener('webglcontextlost', onContextLost);\n canvas.removeEventListener('webglcontextrestored', onContextRestored);\n container.classList.remove('oc-aurora--gl-live');\n canvas.remove();\n const ext = gl.getExtension('WEBGL_lose_context');\n if (ext) ext.loseContext();\n }\n\n resize();\n mixStart = performance.now();\n lastTick = performance.now();\n raf = requestAnimationFrame(draw);\n return dispose;\n}\n","import type { ClassValue } from 'clsx';\n\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Canonical class-name merge for the OrangeCheck family.\n * `clsx` for conditional composition, `tailwind-merge` to resolve\n * conflicting Tailwind utilities (last-wins by property).\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * The OrangeCheck theme (skin) registry.\n *\n * A *skin* is the named-theme axis, orthogonal to the light/dark *mode* axis\n * (which stays owned by `next-themes` via the `.dark` class). A skin is applied\n * as `data-oc-theme=\"<id>\"` on `<html>` and persisted in the `oc_skin` cookie at\n * `Domain=.ochk.io` so a choice on one family site carries to every other.\n *\n * Adding a skin = add a `themes/<id>.css` token block in this package and a\n * row here. Every site picks it up on the next `@orangecheck/design` bump; no\n * per-site edits.\n */\nexport interface OcTheme {\n /** Stable id — also the `data-oc-theme` attribute value and the CSS file stem. */\n readonly id: string;\n /** Human label for the picker (lowercase, house voice). */\n readonly label: string;\n /** One-line description shown in the picker / Storybook. */\n readonly description: string;\n /**\n * Accent hex (sRGB of the skin's dark-mode `--brand`). Used to swap the\n * browser chrome — `<meta name=\"theme-color\">` and the favicon (recolored\n * from the family `#f97316`) — when the skin changes. Mirrors the\n * `SKINS` palette in `oc-media-kit/build/brands.py` (same source of truth).\n */\n readonly accent: string;\n}\n\n// ember leads — the warm, human default. The other four are the Bitcoin-ethos\n// alternates (sharp, flat, cypherpunk), each carrying a meaning, not just a\n// colour: the chain, the node, the network, sound money. Order here is the\n// order shown in the appearance menu / picker (ember first).\nexport const OC_THEMES: readonly OcTheme[] = [\n {\n id: 'ember',\n label: 'ember',\n description:\n 'the warmth — burnt-sienna terracotta, soft 1rem corners, pill buttons, Hanken Grotesk · approachable, human',\n accent: '#da6736',\n },\n {\n id: 'orangecheck',\n label: 'orangecheck',\n description: 'the chain — Bitcoin orange, sharp 0.25rem corners, Inter + JetBrains Mono',\n accent: '#f97316',\n },\n {\n id: 'phosphor',\n label: 'phosphor',\n description: 'the node — CRT terminal green, hard 0.125rem, all-mono · sovereignty & verify',\n accent: '#55d671',\n },\n {\n id: 'lightning',\n label: 'lightning',\n description: 'the network — electric violet (L2), hardest 0rem edges, sans · instant',\n accent: '#c27dff',\n },\n {\n id: 'gold',\n label: 'gold',\n description: 'sound money — digital gold, hard 0.125rem milled edge, mono ledger · 21M',\n accent: '#e3b831',\n },\n] as const;\n\n/** The family default accent (orangecheck), and the hex every favicon ships\n * with — the swap recolors from this to the active skin's accent. */\nexport const OC_DEFAULT_ACCENT = '#f97316';\n\n/** Accent hex for a skin id, falling back to the default. */\nexport function accentFor(id: string | null | undefined): string {\n return OC_THEMES.find((t) => t.id === id)?.accent ?? OC_DEFAULT_ACCENT;\n}\n\n// ember is the family default — the skin a user with no `oc_skin` cookie gets.\n// (The favicon SVGs still ship baked with OC_DEFAULT_ACCENT below; the init\n// script recolors them from that to the active skin's accent on load.)\nexport const DEFAULT_OC_THEME = 'ember';\n\nexport type OcThemeId = (typeof OC_THEMES)[number]['id'] | (string & {});\n\nexport function isKnownTheme(id: string | null | undefined): id is OcThemeId {\n return !!id && OC_THEMES.some((t) => t.id === id);\n}\n\nexport function resolveTheme(id: string | null | undefined): string {\n return isKnownTheme(id) ? id : DEFAULT_OC_THEME;\n}\n\n/** Cookie name for the cross-subdomain skin choice. */\nexport const OC_SKIN_COOKIE = 'oc_skin';\n\n/**\n * Cookie name for the cross-subdomain ambient-motion choice ('off' pauses the\n * aurora + every `.oc-ambient` decoration family-wide). This is the WCAG 2.2.2\n * Pause/Stop/Hide mechanism — prefers-reduced-motion alone does not satisfy it\n * for >5s auto-playing decorative motion.\n */\nexport const OC_MOTION_COOKIE = 'oc_motion';\n","'use client';\n\nimport { useEffect, useRef, type CSSProperties } from 'react';\n\nimport { cn } from './cn';\n\nexport interface OcAuroraProps {\n /**\n * Master intensity multiplier (default 1, from the theme CSS). Overrides\n * `--oc-aurora-intensity` for this mount — e.g. dial a reading-heavy site down.\n */\n intensity?: number;\n /**\n * Mount the OcAuroraGL silk-field upgrade (aurora depth R2). Default off.\n * When every gate passes (WebGL2 with a real GPU, no reduced-motion, no\n * saveData / low-memory signal, ambient motion on), a ~8 KB chunk\n * lazy-loads after idle and crossfades over the CSS blobs — which then\n * pause. Every failure or opt-out path silently keeps the CSS aurora.\n * Per-site kill switch without a package release: `.oc-aurora { --oc-aurora-gl: off }`.\n */\n gl?: boolean;\n className?: string;\n}\n\nconst BLOBS = [1, 2, 3, 4, 5] as const;\n\n/** requestIdleCallback is disabled in every stable Safari — always pair it\n * with a setTimeout fallback or the GL layer never boots on iOS. */\nfunction onIdle(cb: () => void, timeout: number): () => void {\n if (typeof requestIdleCallback === 'function') {\n const id = requestIdleCallback(cb, { timeout });\n return () => cancelIdleCallback(id);\n }\n const id = setTimeout(cb, timeout);\n return () => clearTimeout(id);\n}\n\n/**\n * The ambient \"bitcoin aurora\" background — soft, theme-reactive colour clouds\n * that slowly wander (styling in styles/aurora.css; recolours from --brand /\n * --success / --info / --primary across mode + skin). Pure markup, fixed behind\n * all content; `OcThemeProvider` mounts it by default. The CSS blobs are the\n * permanent SSR / no-JS / reduced-motion / no-WebGL floor; the optional `gl`\n * layer only ever renders on top of them.\n */\nexport function OcAurora({ intensity, gl = false, className }: OcAuroraProps) {\n const hostRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!gl) return;\n const host = hostRef.current;\n if (!host) return;\n\n let disposed = false;\n let disposeScene: (() => void) | null = null;\n let cancelIdle: (() => void) | null = null;\n\n const prm = matchMedia('(prefers-reduced-motion: reduce)');\n const forced = matchMedia('(forced-colors: active)');\n\n function gatesPass(): boolean {\n if (prm.matches || forced.matches) return false;\n if (document.documentElement.getAttribute('data-oc-motion') === 'off') return false;\n // Chromium-only signals are one-way downgrades: undefined = proceed.\n const nav = navigator as Navigator & {\n connection?: { saveData?: boolean };\n deviceMemory?: number;\n };\n if (nav.connection?.saveData === true) return false;\n if (typeof nav.deviceMemory === 'number' && nav.deviceMemory <= 4) return false;\n return true;\n }\n\n function boot() {\n cancelIdle = onIdle(async () => {\n if (disposed || disposeScene || !gatesPass()) return;\n try {\n const mod = await import('./aurora-gl');\n if (disposed || disposeScene || !gatesPass()) return;\n disposeScene = mod.mountAuroraGL(host!);\n } catch {\n /* chunk failed to load — CSS floor stays, silently */\n }\n }, 2000);\n }\n\n function teardownScene() {\n disposeScene?.();\n disposeScene = null;\n }\n\n // Live demotions: an OS-level reduced-motion flip mid-session tears the\n // scene down; motion returning re-runs the boot gate. (The scene also\n // self-disposes on data-oc-motion=\"off\" via its own theme subscription.)\n const onPrmChange = () => {\n if (prm.matches) teardownScene();\n else if (!disposeScene) boot();\n };\n prm.addEventListener?.('change', onPrmChange);\n\n const mo = new MutationObserver(() => {\n const off = document.documentElement.getAttribute('data-oc-motion') === 'off';\n if (!off && !disposeScene && !disposed) boot();\n });\n mo.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-oc-motion'],\n });\n\n if (document.readyState === 'complete') boot();\n else {\n const onLoad = () => boot();\n window.addEventListener('load', onLoad, { once: true });\n }\n\n return () => {\n disposed = true;\n cancelIdle?.();\n prm.removeEventListener?.('change', onPrmChange);\n mo.disconnect();\n teardownScene();\n };\n }, [gl]);\n\n const style =\n intensity == null\n ? undefined\n : ({ '--oc-aurora-intensity': String(intensity) } as CSSProperties);\n return (\n <div ref={hostRef} className={cn('oc-aurora', className)} style={style} aria-hidden=\"true\">\n {BLOBS.map((n) => (\n <div key={n} className={`oc-aurora__blob oc-aurora__blob-${n}`} />\n ))}\n <div className=\"oc-aurora__grain\" />\n </div>\n );\n}\n","'use client';\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\n\nimport {\n accentFor,\n DEFAULT_OC_THEME,\n OC_DEFAULT_ACCENT,\n OC_MOTION_COOKIE,\n OC_SKIN_COOKIE,\n OC_THEMES,\n resolveTheme,\n type OcTheme,\n} from './themes';\nimport { OcAurora } from './aurora';\n\ndeclare global {\n interface Window {\n /** Defined by `getOcThemeInitScript()`; recolors favicon + theme-color. */\n __ocApplySkinChrome?: (skin: string) => void;\n }\n}\n\n/**\n * OcThemeProvider — the skin (named-theme) axis.\n *\n * Orthogonal to `next-themes`, which owns light/dark via the `.dark` class.\n * This provider owns the `data-oc-theme` attribute on `<html>` and persists the\n * choice in the `oc_skin` cookie at `Domain=.ochk.io`, so a skin chosen on one\n * `*.ochk.io` site is honored on every other. It re-reads the cookie on focus /\n * visibility change so a fresh choice picks up when the user returns to a tab\n * (same cross-site pickup trick `OcAccountMenu` uses for sign-in).\n *\n * Mount once, inside (or beside) the `next-themes` `<ThemeProvider>`:\n *\n * <ThemeProvider attribute=\"class\" defaultTheme=\"system\" enableSystem>\n * <OcThemeProvider>\n * …app…\n * </OcThemeProvider>\n * </ThemeProvider>\n *\n * Pair with `getOcThemeInitScript()` in `_document` to avoid a flash before\n * hydration.\n */\n\nconst ONE_YEAR = 60 * 60 * 24 * 365;\nconst ATTR = 'data-oc-theme';\nconst MOTION_ATTR = 'data-oc-motion';\n\n/** Ambient-motion switch. `'off'` freezes the aurora and every `.oc-ambient`. */\nexport type OcMotion = 'on' | 'off';\n\nfunction readSkinCookie(): string | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${OC_SKIN_COOKIE}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v.length > 0 ? v : null;\n }\n }\n return null;\n}\n\nfunction writeSkinCookie(value: string): void {\n if (typeof document === 'undefined') return;\n const isLocal =\n location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${OC_SKIN_COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\nfunction applyAttr(skin: string): void {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(ATTR, skin);\n}\n\nfunction readMotionCookie(): OcMotion | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${OC_MOTION_COOKIE}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v === 'off' ? 'off' : v === 'on' ? 'on' : null;\n }\n }\n return null;\n}\n\nfunction writeMotionCookie(value: OcMotion): void {\n if (typeof document === 'undefined') return;\n const isLocal =\n location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${OC_MOTION_COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\n/** Attribute is only present when motion is off — absence means the default. */\nfunction applyMotionAttr(motion: OcMotion): void {\n if (typeof document === 'undefined') return;\n if (motion === 'off') document.documentElement.setAttribute(MOTION_ATTR, 'off');\n else document.documentElement.removeAttribute(MOTION_ATTR);\n}\n\n/**\n * Swap the browser chrome (favicon + `<meta name=\"theme-color\">`) to the skin's\n * accent. The real work lives in the global installed by\n * `getOcThemeInitScript()` (so the favicon's original SVG is captured exactly\n * once, before the init script's own first recolor — avoids re-reading an\n * already-swapped data: URI). If the init script wasn't included, fall back to\n * the theme-color swap alone (favicon recolor needs the captured original).\n */\nfunction applySkinChrome(skin: string): void {\n if (typeof window === 'undefined') return;\n if (typeof window.__ocApplySkinChrome === 'function') {\n window.__ocApplySkinChrome(skin);\n return;\n }\n const meta = document.querySelector('meta[name=\"theme-color\"]');\n if (meta) meta.setAttribute('content', accentFor(skin));\n}\n\ninterface OcSkinContextValue {\n /** Current skin id (always resolved to a known theme). */\n skin: string;\n /** Set the skin: validates, applies the attribute, persists the cookie. */\n setSkin: (id: string) => void;\n /** The full registry, for rendering a picker. */\n themes: readonly OcTheme[];\n /** Ambient-motion switch ('off' pauses aurora + every `.oc-ambient`). */\n motion: OcMotion;\n /** Set ambient motion: applies the attribute, persists the cookie. */\n setMotion: (value: OcMotion) => void;\n}\n\nconst OcSkinContext = createContext<OcSkinContextValue | null>(null);\n\nexport interface OcThemeProviderProps {\n children: ReactNode;\n /** Skin to assume before the cookie is read (defaults to `orangecheck`). */\n defaultSkin?: string;\n /**\n * The ambient bitcoin-aurora background. `true` (default) renders it behind\n * the app; `false` disables it; `{ intensity }` tunes its strength for this\n * site (e.g. `aurora={{ intensity: 0.5 }}` on a reading-heavy surface).\n * OcAuroraGL (the silk-field upgrade) is ON by default (the CSS blobs\n * remain the permanent floor under every failure path). Reading- and\n * console-heavy surfaces opt OUT with `{ gl: false }`.\n */\n aurora?: boolean | { intensity?: number; gl?: boolean };\n}\n\nexport function OcThemeProvider({\n children,\n defaultSkin = DEFAULT_OC_THEME,\n aurora = true,\n}: OcThemeProviderProps) {\n const [skin, setSkinState] = useState<string>(() => resolveTheme(defaultSkin));\n const [motion, setMotionState] = useState<OcMotion>('on');\n const hydratedRef = useRef(false);\n\n // Hydrate from the cookies once on mount and align the attributes.\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const fromCookie = resolveTheme(readSkinCookie() ?? defaultSkin);\n applyAttr(fromCookie);\n applySkinChrome(fromCookie);\n setSkinState(fromCookie);\n const motionCookie = readMotionCookie() ?? 'on';\n applyMotionAttr(motionCookie);\n setMotionState(motionCookie);\n }, [defaultSkin]);\n\n // Cross-site pickup: re-read the cookies when the tab regains focus.\n useEffect(() => {\n function sync() {\n const fromCookie = resolveTheme(readSkinCookie() ?? skin);\n if (fromCookie !== skin) {\n applyAttr(fromCookie);\n applySkinChrome(fromCookie);\n setSkinState(fromCookie);\n }\n const motionCookie = readMotionCookie() ?? 'on';\n if (motionCookie !== motion) {\n applyMotionAttr(motionCookie);\n setMotionState(motionCookie);\n }\n }\n window.addEventListener('focus', sync);\n document.addEventListener('visibilitychange', sync);\n return () => {\n window.removeEventListener('focus', sync);\n document.removeEventListener('visibilitychange', sync);\n };\n }, [skin, motion]);\n\n const setSkin = useCallback((id: string) => {\n const next = resolveTheme(id);\n applyAttr(next);\n applySkinChrome(next);\n writeSkinCookie(next);\n setSkinState(next);\n }, []);\n\n const setMotion = useCallback((value: OcMotion) => {\n const next: OcMotion = value === 'off' ? 'off' : 'on';\n applyMotionAttr(next);\n writeMotionCookie(next);\n setMotionState(next);\n }, []);\n\n const value = useMemo<OcSkinContextValue>(\n () => ({ skin, setSkin, themes: OC_THEMES, motion, setMotion }),\n [skin, setSkin, motion, setMotion]\n );\n\n return (\n <OcSkinContext.Provider value={value}>\n {aurora !== false && (\n <OcAurora\n intensity={typeof aurora === 'object' ? aurora.intensity : undefined}\n // OcAuroraGL is the family default (aurora depth R2): a bare\n // provider, `aurora={true}`, or an object without `gl` opts\n // IN. Reading/console surfaces opt OUT with `gl: false`.\n gl={typeof aurora === 'object' ? (aurora.gl ?? true) : true}\n />\n )}\n {children}\n </OcSkinContext.Provider>\n );\n}\n\n/** Read the current skin + setter. Throws if used outside `OcThemeProvider`. */\nexport function useOcSkin(): OcSkinContextValue {\n const ctx = useContext(OcSkinContext);\n if (!ctx) {\n throw new Error('useOcSkin must be used within <OcThemeProvider>');\n }\n return ctx;\n}\n\n/**\n * Read the ambient-motion switch + setter. The WCAG 2.2.2 pause mechanism:\n * `'off'` sets `data-oc-motion=\"off\"` on `<html>` (persisted family-wide in the\n * `oc_motion` cookie), which pauses the aurora and any `.oc-ambient` element.\n * Throws if used outside `OcThemeProvider`.\n */\nexport function useOcMotion(): { motion: OcMotion; setMotion: (value: OcMotion) => void } {\n const { motion, setMotion } = useOcSkin();\n return { motion, setMotion };\n}\n\n/**\n * Blocking init script for `_document` (Pages Router) `<Head>`. Applies the\n * cookie's skin to `<html>` before first paint so there is no flash of the\n * default skin. Inject with:\n *\n * <script dangerouslySetInnerHTML={{ __html: getOcThemeInitScript() }} />\n */\nexport function getOcThemeInitScript(defaultSkin: string = DEFAULT_OC_THEME): string {\n // Self-contained IIFE — no imports available at parse time. Beyond applying\n // the skin attribute before first paint, it installs `window.__ocApplySkinChrome`\n // (the single owner of the favicon + theme-color swap) and runs it for the\n // saved skin. OcThemeProvider re-invokes the same global on later changes, so\n // the favicon's *original* SVG is captured exactly once (before any recolor)\n // and re-recolored from `#f97316` to the active skin's accent. The favicon\n // recolor is async (a fetch of the same-origin favicon.svg) — chrome updates\n // a beat after paint, which is fine; the skin attribute itself is synchronous.\n const accents = Object.fromEntries(OC_THEMES.map((t) => [t.id, t.accent]));\n return (\n `(function(){` +\n `var ACC=${JSON.stringify(accents)},DEF=${JSON.stringify(defaultSkin)},ORIG=${JSON.stringify(OC_DEFAULT_ACCENT)},fav=null;` +\n `function acc(s){return ACC[s]||ACC[DEF]||ORIG;}` +\n `window.__ocApplySkinChrome=function(s){try{` +\n `var a=acc(s);` +\n `var meta=document.querySelector('meta[name=\"theme-color\"]');if(meta){meta.setAttribute('content',a);}` +\n `var link=document.querySelector('link[rel~=\"icon\"][type=\"image/svg+xml\"]');if(!link){return;}` +\n `var paint=function(svg){link.setAttribute('href','data:image/svg+xml,'+encodeURIComponent(svg.split(ORIG).join(a)));};` +\n `if(fav!=null){paint(fav);return;}` +\n `var h=link.getAttribute('href');if(!h||h.indexOf('data:')===0){return;}` +\n `fetch(h).then(function(r){return r.text();}).then(function(svg){fav=svg;paint(svg);}).catch(function(){});` +\n `}catch(e){}};` +\n `try{var m=document.cookie.match(/(?:^|; )${OC_SKIN_COOKIE}=([^;]*)/);var s=m?decodeURIComponent(m[1]):DEF;if(!s){s=DEF;}` +\n `document.documentElement.setAttribute('${ATTR}',s);window.__ocApplySkinChrome(s);}` +\n `catch(e){document.documentElement.setAttribute('${ATTR}',DEF);}` +\n // Ambient-motion pause (oc_motion cookie) applied before first paint so\n // a paused choice never flashes a moving frame. Absence = motion on.\n `try{var mm=document.cookie.match(/(?:^|; )${OC_MOTION_COOKIE}=([^;]*)/);` +\n `if(mm&&decodeURIComponent(mm[1])==='off'){document.documentElement.setAttribute('${MOTION_ATTR}','off');}}` +\n `catch(e){}` +\n `})();`\n );\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { useTheme } from 'next-themes';\n\n/**\n * OcThemeBridge — cross-subdomain persistence for the MODE axis (light/dark).\n *\n * `next-themes` defaults to origin-scoped `localStorage`, so a dark/light choice\n * on one `*.ochk.io` site won't carry to another. This layers an\n * `oc_theme` cookie at `Domain=.ochk.io` on top so the choice is visible\n * family-wide. (The SKIN axis has its own `oc_skin` bridge inside\n * `OcThemeProvider`; this is the mode counterpart, previously duplicated in\n * every consumer repo.)\n *\n * Mount once inside the next-themes `<ThemeProvider>`:\n *\n * <ThemeProvider attribute=\"class\" defaultTheme=\"system\" enableSystem>\n * <OcThemeBridge />\n * <OcThemeProvider>…</OcThemeProvider>\n * </ThemeProvider>\n *\n * The cookie is intentionally non-HttpOnly (next-themes JS reads/writes it) and\n * carries no auth value — a leak only reveals a theme preference.\n */\nconst COOKIE = 'oc_theme';\nconst ALLOWED = new Set(['light', 'dark', 'system']);\nconst ONE_YEAR = 60 * 60 * 24 * 365;\n\nfunction readCookie(name: string): string | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${name}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v.length > 0 ? v : null;\n }\n }\n return null;\n}\n\nfunction writeCookie(value: string): void {\n if (typeof document === 'undefined') return;\n if (!ALLOWED.has(value)) return;\n const isLocal = location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\nexport function OcThemeBridge() {\n const { theme, setTheme } = useTheme();\n const hydratedRef = useRef(false);\n\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const cookieValue = readCookie(COOKIE);\n if (cookieValue && ALLOWED.has(cookieValue) && cookieValue !== theme) {\n setTheme(cookieValue);\n }\n }, [theme, setTheme]);\n\n useEffect(() => {\n if (!hydratedRef.current) return;\n if (!theme) return;\n writeCookie(theme);\n }, [theme]);\n\n return null;\n}\n","'use client';\n\nimport { Check, Palette } from 'lucide-react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from './cn';\nimport { useOcSkin } from './provider';\n\n/**\n * OcThemePicker — the skin selector. Sits beside `ThemeToggle` in the header.\n * Self-contained dropdown (no Radix): outside-click + Escape to close. Mirrors\n * the ghost-icon affordance of `ThemeToggle`. Gate its mount behind\n * `NEXT_PUBLIC_OC_THEME_PICKER` during staged rollout.\n */\nexport interface OcThemePickerProps {\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nexport function OcThemePicker({ className, triggerClassName, popoverClassName }: OcThemePickerProps) {\n const { skin, setSkin, themes } = useOcSkin();\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n function onDown(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn('relative', className)}>\n <button\n type=\"button\"\n aria-label=\"choose theme\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n title=\"choose theme\"\n onClick={() => setOpen((v) => !v)}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex size-9 items-center justify-center rounded-md transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n triggerClassName\n )}\n >\n <Palette className=\"size-4\" aria-hidden />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className={cn(\n 'bg-popover text-popover-foreground absolute right-0 z-50 mt-2 w-64 overflow-hidden rounded-md border shadow-md',\n popoverClassName\n )}\n >\n <div className=\"label-mono text-muted-foreground px-3 pt-3 pb-1\">theme</div>\n <ul className=\"pb-1\">\n {themes.map((t) => {\n const active = t.id === skin;\n return (\n <li key={t.id}>\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => {\n setSkin(t.id);\n setOpen(false);\n }}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-start gap-2 px-3 py-2 text-left transition-colors',\n active && 'text-foreground'\n )}\n >\n <span className=\"mt-0.5 size-4 shrink-0\">\n {active && <Check className=\"size-4 text-primary\" aria-hidden />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{t.label}</span>\n <span className=\"text-muted-foreground block text-xs leading-snug\">\n {t.description}\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { Check, Monitor, Moon, Palette, Pause, Sun, Waves } from 'lucide-react';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from './cn';\nimport { useOcMotion, useOcSkin } from './provider';\n\n/**\n * OcAppearanceMenu — the single header control for ALL appearance settings.\n *\n * One icon button opens a dropdown with both axes:\n * • mode — light / dark / system (next-themes `.dark` class)\n * • theme — the registered skins (data-oc-theme, persisted .ochk.io)\n *\n * Replaces the separate `ThemeToggle` + `OcThemePicker` so every family site\n * carries exactly one appearance control. Self-contained dropdown (no Radix):\n * outside-click + Escape to close. Requires `<OcThemeProvider>` above it (skin\n * axis) and a next-themes `<ThemeProvider>` (mode axis) — both already mounted\n * on every family site.\n */\nexport interface OcAppearanceMenuProps {\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nconst MODES = [\n { id: 'light', label: 'light', Icon: Sun },\n { id: 'dark', label: 'dark', Icon: Moon },\n { id: 'system', label: 'system', Icon: Monitor },\n] as const;\n\n/**\n * AppearanceControls — the mode segment + skin list, with no trigger/popover\n * chrome of its own. Embed it anywhere a surface wants to host appearance\n * settings inline (the standalone OcAppearanceMenu popover, the mobile account\n * menu, a site's Sheet drawer). Requires `<OcThemeProvider>` + next-themes\n * above it, like OcAppearanceMenu.\n */\nexport function AppearanceControls({ className }: { className?: string }) {\n const { skin, setSkin, themes } = useOcSkin();\n const { motion, setMotion } = useOcMotion();\n const { theme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n const activeMode = mounted ? (theme ?? 'system') : null;\n const activeMotion = mounted ? motion : null;\n\n return (\n <div className={className}>\n <div className=\"label-mono text-muted-foreground px-3 pt-3 pb-2\">mode</div>\n <div className=\"grid grid-cols-3 gap-1 px-2 pb-2\">\n {MODES.map(({ id, label, Icon }) => {\n const active = activeMode === id;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => setTheme(id)}\n className={cn(\n 'flex flex-col items-center gap-1 rounded-md border py-2 text-[11px] transition-colors',\n active\n ? 'border-primary text-foreground bg-accent'\n : 'border-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground'\n )}\n >\n <Icon className=\"size-4\" aria-hidden />\n {label}\n </button>\n );\n })}\n </div>\n <div className=\"label-mono text-muted-foreground border-t px-3 pt-3 pb-1\">theme</div>\n <ul className=\"pb-1\">\n {themes.map((t) => {\n const active = t.id === skin;\n return (\n <li key={t.id}>\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => setSkin(t.id)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-start gap-2 px-3 py-2 text-left transition-colors',\n active && 'text-foreground'\n )}\n >\n <span className=\"mt-0.5 size-4 shrink-0\">\n {active && <Check className=\"text-primary size-4\" aria-hidden />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{t.label}</span>\n <span className=\"text-muted-foreground block text-xs leading-snug\">\n {t.description}\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n <div className=\"label-mono text-muted-foreground border-t px-3 pt-3 pb-2\">\n ambient motion\n </div>\n <div className=\"grid grid-cols-2 gap-1 px-2 pb-3\">\n {(\n [\n { id: 'on', label: 'on', Icon: Waves },\n { id: 'off', label: 'off', Icon: Pause },\n ] as const\n ).map(({ id, label, Icon }) => {\n const active = activeMotion === id;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={id === 'off' ? 'pause ambient motion' : 'ambient motion on'}\n onClick={() => setMotion(id)}\n className={cn(\n 'flex flex-col items-center gap-1 rounded-md border py-2 text-[11px] transition-colors',\n active\n ? 'border-primary text-foreground bg-accent'\n : 'border-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground'\n )}\n >\n <Icon className=\"size-4\" aria-hidden />\n {label}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport function OcAppearanceMenu({\n className,\n triggerClassName,\n popoverClassName,\n}: OcAppearanceMenuProps) {\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n function onDown(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn('relative', className)}>\n <button\n type=\"button\"\n aria-label=\"appearance settings\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n title=\"appearance · mode + theme\"\n onClick={() => setOpen((v) => !v)}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex size-9 items-center justify-center rounded-md transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n triggerClassName\n )}\n >\n <Palette className=\"size-4\" aria-hidden />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className={cn(\n 'bg-popover text-popover-foreground absolute right-0 z-50 mt-2 w-64 overflow-hidden rounded-md border shadow-md',\n popoverClassName\n )}\n >\n <AppearanceControls />\n </div>\n )}\n </div>\n );\n}\n","export { cn } from './cn';\nexport {\n OC_THEMES,\n DEFAULT_OC_THEME,\n OC_DEFAULT_ACCENT,\n OC_MOTION_COOKIE,\n OC_SKIN_COOKIE,\n accentFor,\n isKnownTheme,\n resolveTheme,\n type OcTheme,\n type OcThemeId,\n} from './themes';\nexport {\n OcThemeProvider,\n useOcSkin,\n useOcMotion,\n getOcThemeInitScript,\n type OcMotion,\n type OcThemeProviderProps,\n} from './provider';\nexport { OcThemeBridge } from './theme-bridge';\nexport { OcThemePicker, type OcThemePickerProps } from './theme-picker';\nexport { OcAppearanceMenu, AppearanceControls, type OcAppearanceMenuProps } from './appearance-menu';\nexport { OcAurora, type OcAuroraProps } from './aurora';\nexport {\n readOcSceneTokens,\n subscribeOcTheme,\n normalizeHue,\n type OcSceneRGB,\n type OcSceneTokens,\n} from './scene-tokens';\nexport { OcSigil, type OcSigilProps } from './sigil';\nexport { OC_GLYPHS, OC_GLYPH_CANVAS, type OcGlyphSlug } from './glyphs';\n","// GENERATED by oc-media-kit/build/emit_glyphs.py — DO NOT EDIT.\n// Regenerate: python3 build/emit_glyphs.py · then re-vendor into\n// oc-packages/design/src/tokens/glyphs.ts (check-glyph-drift.mjs diffs them).\n// source-digest: 8df5695322a2f6ce\n\n/** Inner-SVG markup per brand, normalized to a 0..1024 canvas with the\n * pipeline's centering/flip/scale baked in. Colors are sentinels —\n * substitute __FG__ / __BG__ / __INK__ (fg '__FG__'→'none' flips the\n * outline-capable glyphs to wireframe mode). */\nexport type OcGlyphSlug = 'orangecheck' | 'attest' | 'docs' | 'me' | 'vault' | 'chat' | 'cosign' | 'lock' | 'vote' | 'stamp' | 'agent' | 'pledge' | 'analytics' | 'btc' | 'globe';\n\nexport const OC_GLYPH_CANVAS = 1024;\n\nexport const OC_GLYPHS: Record<OcGlyphSlug, string> = {\n orangecheck: `<path d=\"M518 856Q463 820 438.5 785.5Q414 751 414 711Q414 657 462.5 613.0Q511 569 711 473Q766 509 790.5 543.5Q815 578 815 621Q815 702 550 840ZM930 1460V1235Q845 1265 779.0 1279.5Q713 1294 659 1294Q583 1294 540.5 1265.0Q498 1236 498 1184Q498 1109 701 1004Q720 994 729 989Q943 879 1002.0 808.5Q1061 738 1061 637Q1061 548 1013.5 484.0Q966 420 864 373Q934 323 966.5 261.5Q999 200 999 119Q999 -28 894.5 -111.5Q790 -195 604 -195Q515 -195 429.0 -180.5Q343 -166 258 -137V92Q343 62 424.0 46.5Q505 31 578 31Q655 31 696.0 59.5Q737 88 737 141Q737 211 523 326L512 332L486 346Q170 516 170 688Q170 782 222.0 851.5Q274 921 371 954Q300 1004 268.0 1064.0Q236 1124 236 1206Q236 1348 340.0 1434.0Q444 1520 616 1520Q690 1520 768.5 1505.0Q847 1490 930 1460Z\" fill=\"__INK__\" transform=\"translate(225.3457 820.5434) scale(0.465726 -0.465726)\"/>`,\n attest: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"0.5\"/><path d=\"M9 12 l2 2 l4 -4\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g>`,\n docs: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><rect x=\"8\" y=\"9\" width=\"8\" height=\"1.25\" fill=\"__INK__\"/><rect x=\"8\" y=\"11.5\" width=\"8\" height=\"1.25\" fill=\"__INK__\"/><rect x=\"8\" y=\"14\" width=\"5\" height=\"1.25\" fill=\"__INK__\"/></g>`,\n me: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><circle cx=\"12\" cy=\"11\" r=\"2\" fill=\"__INK__\"/><path d=\"M8 16.5 C 8 14.5, 9.5 13.5, 12 13.5 C 14.5 13.5, 16 14.5, 16 16.5\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></g>`,\n vault: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M8 9 L8 6.5 Q8 3.5 12 3.5 Q16 3.5 16 6.5 L16 9\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"2\" stroke-linecap=\"square\"/><rect x=\"4\" y=\"9\" width=\"16\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"0.75\"/><circle cx=\"12\" cy=\"14.5\" r=\"2.75\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><rect x=\"11.4\" y=\"14.5\" width=\"1.2\" height=\"3.25\" fill=\"__INK__\"/><rect x=\"5.5\" y=\"19\" width=\"2.25\" height=\"1.5\" fill=\"__INK__\"/><rect x=\"16.25\" y=\"19\" width=\"2.25\" height=\"1.5\" fill=\"__INK__\"/></g>`,\n chat: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M5 4 H19 A2 2 0 0 1 21 6 V13 A2 2 0 0 1 19 15 H11 L7 19 V15 H5 A2 2 0 0 1 3 13 V6 A2 2 0 0 1 5 4 Z\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.6\" stroke-linejoin=\"round\"/><circle cx=\"8\" cy=\"9.5\" r=\"1.15\" fill=\"__INK__\"/><circle cx=\"12\" cy=\"9.5\" r=\"1.15\" fill=\"__INK__\"/><circle cx=\"16\" cy=\"9.5\" r=\"1.15\" fill=\"__INK__\"/></g>`,\n cosign: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><circle cx=\"9.2\" cy=\"10.4\" r=\"1.65\" fill=\"__INK__\"/><circle cx=\"14.8\" cy=\"10.4\" r=\"1.65\" fill=\"__INK__\"/><path d=\"M6.5 16.6 C 6.5 14.9, 7.6 14.1, 9.2 14.1 C 10.8 14.1, 11.9 14.9, 11.9 16.6\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linecap=\"square\"/><path d=\"M12.1 16.6 C 12.1 14.9, 13.2 14.1, 14.8 14.1 C 16.4 14.1, 17.5 14.9, 17.5 16.6\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></g>`,\n lock: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M7 11V7.5a5 5 0 0 1 10 0V11\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"2\" stroke-linecap=\"square\"/><rect x=\"4\" y=\"11\" width=\"16\" height=\"10\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"0.75\"/><rect x=\"11\" y=\"14\" width=\"2\" height=\"4\" fill=\"__INK__\"/><rect x=\"10.25\" y=\"14\" width=\"3.5\" height=\"1.5\" fill=\"__INK__\"/></g>`,\n vote: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"2\" y=\"14\" width=\"4\" height=\"8\" fill=\"__INK__\"/><rect x=\"10\" y=\"8\" width=\"4\" height=\"14\" fill=\"__INK__\"/><rect x=\"18\" y=\"2\" width=\"4\" height=\"20\" fill=\"__INK__\"/></g>`,\n stamp: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><rect x=\"11.25\" y=\"8.5\" width=\"1.5\" height=\"7\" fill=\"__INK__\"/><rect x=\"9.5\" y=\"10\" width=\"5\" height=\"1.5\" fill=\"__INK__\"/><path d=\"M9 14.5 L12 15.75 L15 14.5\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linejoin=\"miter\" stroke-linecap=\"square\"/></g>`,\n agent: `<g transform=\"scale(42.666667 42.666667)\"><path d=\"M4 20 L12 4 L20 20 Z\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\" stroke-linejoin=\"miter\"/><rect x=\"7.5\" y=\"13.5\" width=\"9\" height=\"2\" fill=\"__INK__\"/><rect x=\"11\" y=\"9\" width=\"2\" height=\"2\" fill=\"__INK__\"/></g>`,\n pledge: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.5\"/><rect x=\"9.25\" y=\"8.5\" width=\"1.75\" height=\"7\" fill=\"__INK__\"/><rect x=\"9.25\" y=\"8.5\" width=\"4.5\" height=\"1.5\" fill=\"__INK__\"/><rect x=\"12.25\" y=\"8.5\" width=\"1.5\" height=\"3.5\" fill=\"__INK__\"/><rect x=\"9.25\" y=\"10.5\" width=\"4.5\" height=\"1.5\" fill=\"__INK__\"/></g>`,\n analytics: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><path d=\"M6 17 L10 12 L14 15 L18 8\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.8\" stroke-linecap=\"square\" stroke-linejoin=\"miter\"/><rect x=\"16.6\" y=\"6.6\" width=\"2.8\" height=\"2.8\" fill=\"__INK__\"/></g>`,\n btc: `<path d=\"M373 1414V1676H531V1414ZM670 1414V1676H829V1414ZM373 -186V76H531V-186ZM670 -186V76H829V-186ZM129 0V1490H705Q863 1490 972.50 1441Q1082 1392 1139 1305.50Q1196 1219 1196 1103Q1196 1016 1164 951Q1132 886 1074 843Q1016 800 937 779V774Q1024 765 1095.50 721Q1167 677 1210 600.50Q1253 524 1253 416Q1253 293 1194.50 199Q1136 105 1020 52.50Q904 0 731 0ZM391 217H700Q838 217 910.50 272.50Q983 328 983 428Q983 497 950 547.50Q917 598 855.50 626Q794 654 707 654H391ZM391 858H688Q762 858 817 883.50Q872 909 902 956Q932 1003 932 1068Q932 1161 868 1217.50Q804 1274 689 1274H391Z\" fill=\"__INK__\" transform=\"translate(238.3907 806.9912) scale(0.395961 -0.395961)\"/>`,\n globe: `<g transform=\"scale(42.666667 42.666667)\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"6\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.4\"/><line x1=\"6\" y1=\"12\" x2=\"18\" y2=\"12\" stroke=\"__INK__\" stroke-width=\"1.2\"/><ellipse cx=\"12\" cy=\"12\" rx=\"2.8\" ry=\"6\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.2\"/><circle cx=\"15\" cy=\"9\" r=\"1.15\" fill=\"__INK__\"/></g>`,\n};\n","'use client';\n\nimport { useEffect, useId, useMemo, useRef } from 'react';\n\nimport { cn } from './cn';\nimport { OC_GLYPHS, type OcGlyphSlug } from './glyphs';\n\n/**\n * OcSigil — the brand mark as a deep-set 3D emboss (aurora depth R3, Tier A+B).\n *\n * The sanctioned figure placement is `corner-bleed`: the verb's own pictogram,\n * oversized and cropped by the hero's `overflow-hidden`, anchored to a corner\n * away from both the text column and the proof artifact. The RIGHT COLUMN\n * COVENANT is absolute: this frames a hero's proof — it never occupies,\n * replaces, or displaces it. Placement is a per-site art decision; the\n * component ships dormant and is mounted one line at a time (see MIGRATION.md\n * and research/AURORA-DEPTH-PLAN.md §3).\n *\n * Two registers from ONE geometry, switched by `data-oc-theme` in CSS via the\n * `--oc-sigil-lift` / `--oc-sigil-shade` / `--oc-sigil-ink-base` endpoint\n * custom properties (SSR-resolved, zero hydration flash): ember renders a lit\n * letterpress relief (a warm highlight enters upper-left, walls sink into a\n * chromatic sienna shade, the back dissolves to transparent so the aurora reads\n * through); the four cypherpunk skins render the same silhouette as an unlit\n * crisp echo stack (lift = ink, shade = transparent). No color is hardcoded —\n * every layer is a color-mix() off the skin's own tokens.\n *\n * Mark surgery (SSR string transforms, closed slug union, trusted vendored\n * markup): the tile glyphs shed their rounded-square FRAME so the pictogram —\n * not the tile — embosses; hairline strokes are floored and heavy ones capped\n * so no mark vanishes or bloats at watermark alpha; a per-verb focus transform\n * optically sizes each pictogram to fill the canvas. This intentionally\n * diverges the sigil silhouette from the media-kit tile at display scale.\n *\n * Degradation: SSR-painted markup (no JS needed for the static pose); drift\n * pauses under prefers-reduced-motion AND the oc_motion switch (`.oc-ambient`);\n * on phones it re-anchors top-right and stays quiet (never buried below fold);\n * hidden under forced-colors (SVG fills are not auto-stripped); parallax\n * (Tier B) only attaches on fine pointers with motion allowed, and a hero with\n * an animated/interactive proof must pass `parallax={false}` — one ambient\n * motion source per hero. The resting 0% keyframe IS the art: it is the\n * best-composed frame, which is what reduced-motion users are frozen at.\n */\nexport interface OcSigilProps {\n /** Which brand mark to emboss — the closed media-kit union, no default:\n * a property without a normalized glyph cannot mount a sigil. */\n glyph: OcGlyphSlug;\n /** Corner the mark bleeds off (crops against the hero's overflow-hidden). */\n corner?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';\n /**\n * Pointer parallax (±5°, damped). Set `false` when the hero's proof\n * artifact is animated or interactive (typing demos, countdowns, live\n * forms) — the motion-budget rule, enforced by the caller's declaration.\n */\n parallax?: boolean;\n /**\n * Emboss into a solid brand band (the `.oc-sigil--band` deboss preset:\n * band-shaped mask + walls that sink into `--brand`) rather than\n * corner-bleed. The consumer supplies `--oc-sigil-ink` (e.g.\n * `--brand-foreground`). Under ember the band reads as a tone-on-tone\n * deboss; under a cypherpunk skin it follows that skin's echo register.\n */\n band?: boolean;\n /** Size/position via the consumer's utility classes (e.g. `w-[min(56vmin,540px)]`). */\n className?: string;\n}\n\n// Extrusion: 22 thin layers give a smooth 3D slab. The z of each layer eases\n// (t^1.4) so front steps land sub-pixel where the eye reads the bevel and the\n// coarse steps hide in the dissolving tail — no countable \"cardboard\" bands.\n// Filled letterforms extrude shallower so their walls never outgrow the face.\nconst DEPTH = 22;\nconst LAYERS = Array.from({ length: DEPTH }, (_, i) => i);\nconst FILL = new Set<OcGlyphSlug>(['orangecheck', 'btc', 'vote']);\n\n// Endpoint custom properties drive the two registers (see docstring). Defaults\n// here are the ember/lit values; CSS overrides --oc-sigil-lift on light grounds\n// and swaps both for the cypherpunk skins. --oc-sigil-ink-base lets ember dark\n// ride the brighter --brand without disturbing the www band's --oc-sigil-ink.\nconst INK = 'var(--oc-sigil-ink, var(--oc-sigil-ink-base, var(--primary)))';\nconst LIFT = 'var(--oc-sigil-lift, white)';\nconst SHADE = `var(--oc-sigil-shade, color-mix(in oklab, black, ${INK} 30%))`;\n\nfunction layerStyle(i: number, relief: number): React.CSSProperties {\n const t = i / (DEPTH - 1); // 0 = front face, 1 = deepest\n // A lit relief: a gently-lifted front face, a wall that sinks into a\n // chromatic shade (never achromatic black — that muds the hue), and a back\n // that dissolves to TRANSPARENT so it composites correctly over the aurora\n // (which never equals any fixed --background). The wrapper opacity then\n // composites the whole stack translucent — keep the endpoints restrained.\n let color: string;\n if (t < 0.14) {\n // Directional light is carried by the specular leaf; this is a small,\n // even face-lift so the front plane sits above the wall.\n color = `color-mix(in oklab, ${INK}, ${LIFT} ${Math.round(((0.14 - t) / 0.14) * 18)}%)`;\n } else if (t < 0.55) {\n const k = (t - 0.14) / 0.41; // 0..1 across the wall\n color = `color-mix(in oklab, ${INK}, ${SHADE} ${Math.round(k * 45)}%)`;\n } else {\n const k = (t - 0.55) / 0.45; // 0..1 dissolving out to transparent\n color = `color-mix(in oklab, color-mix(in oklab, ${INK}, ${SHADE} 45%), transparent ${Math.round(Math.pow(k, 1.3) * 100)}%)`;\n }\n return { transform: `translateZ(${(-Math.pow(t, 1.4) * relief).toFixed(1)}px)`, color };\n}\n\n// The six tile glyphs are FRAMED pictograms (an outer invisible box + a\n// rounded-square frame + the detail). At watermark scale three of them read as\n// the same rounded-square debris, so we strip the frame and emboss the\n// pictogram alone. Coordinates below match the vendored glyphs.ts markup\n// (verify-sigil-transforms.mjs locks the hit-count so a re-vendor can't silently\n// break these regexes).\nconst TILE = new Set<OcGlyphSlug>(['stamp', 'pledge', 'cosign', 'me', 'docs']);\n\n// Optical sizing — scale the surviving pictogram to fill the ~1024 canvas.\n// orangecheck is deliberately ABSENT so the approved www band § is untouched;\n// attest/lock/vault/chat/agent/analytics already fill the canvas.\nconst FOCUS: Partial<Record<OcGlyphSlug, string>> = {\n stamp: 'translate(512 512) scale(1.5) translate(-512 -512)', // anchor-cross\n pledge: 'translate(512 512) scale(1.7) translate(-491 -512)', // ₱ mark, recentered\n cosign: 'translate(512 512) scale(1.35) translate(-512 -512)', // two figures\n me: 'translate(512 512) scale(1.45) translate(-512 -544)', // bust, recentered down\n docs: 'translate(512 512) scale(1.4) translate(-512 -512)', // text lines\n vote: 'translate(512 512) scale(0.92) translate(-512 -542)', // tall bars, nudged down\n btc: 'translate(512 512) scale(1.25) translate(-512 -512)', // ₿\n};\n\n// Stroke floor/ceiling: at the x42.67 scale the set spans 0.5..2.0 units (a 4×\n// spread), so hairlines vanish and shackles bloat under the mask+alpha. Clamp\n// to 1.3..1.7 → intra-set spread drops to ~1.3×.\nfunction normSw(w: number): number {\n return w < 1.3 ? 1.3 : w > 1.8 ? 1.7 : w;\n}\n\nfunction prepare(glyph: OcGlyphSlug, markup: string): string {\n let m = markup\n .split('__INK__')\n .join('currentColor')\n .split('__BG__')\n .join('none')\n .split('__FG__')\n .join('none');\n if (TILE.has(glyph)) {\n m = m.replace(/<rect x=\"6\" y=\"6\" width=\"12\" height=\"12\"[^>]*\\/>/, '');\n }\n m = m.replace(/stroke-width=\"([\\d.]+)\"/g, (_, w) => `stroke-width=\"${normSw(parseFloat(w))}\"`);\n const focus = FOCUS[glyph];\n return focus ? `<g transform=\"${focus}\">${m}</g>` : m;\n}\n\n// Per-slug resting pose offset [yaw°, pitch°] so five clone heroes never read as\n// one glyph-swapped template. An explicit table (not a hash — the old hash blew\n// past its ±4.5° envelope on negative values and collided 7 buckets over 15\n// slugs). Envelope ±7° yaw / ±3° pitch; composes with the base pose + parallax.\nconst SEED: Record<OcGlyphSlug, [number, number]> = {\n attest: [-7, 2],\n lock: [-4, -2],\n vote: [6, 0],\n stamp: [2, -2],\n agent: [-2, 3],\n pledge: [5, 2],\n chat: [-6, -1],\n cosign: [1, -3],\n vault: [4, 1],\n me: [-3, 2],\n docs: [0, 0],\n analytics: [-5, 1],\n btc: [4, 3],\n // The catalog gained `globe` without a seed here, and SEED is an exhaustive\n // Record over OcGlyphSlug — so the dts build has been failing since. [3, -1]\n // sits inside the ±7°/±3° envelope and collides with nothing above.\n globe: [3, -1],\n orangecheck: [0, 0],\n};\n\nexport function OcSigil({\n glyph,\n corner = 'bottom-left',\n parallax = true,\n band = false,\n className,\n}: OcSigilProps) {\n const rawId = useId();\n const id = useMemo(() => `oc-sigil-${rawId.replace(/[^a-zA-Z0-9_-]/g, '')}`, [rawId]);\n const parRef = useRef<HTMLDivElement>(null);\n\n const mark = useMemo(() => prepare(glyph, OC_GLYPHS[glyph]), [glyph]);\n const relief = FILL.has(glyph) ? 30 : 48;\n const [seedY, seedX] = SEED[glyph];\n\n // Tier B — damped pointer parallax. Gates: prop, fine pointer, PRM (live),\n // ambient-motion switch (live via attribute). Listener on window; the\n // sigil itself is inert (pointer-events: none). tanh eases to a ±5° ceiling\n // with no hard clamp seam.\n useEffect(() => {\n if (!parallax) return;\n const el = parRef.current;\n if (!el) return;\n if (!matchMedia('(pointer: fine)').matches) return;\n\n const prm = matchMedia('(prefers-reduced-motion: reduce)');\n let raf = 0;\n let tx = 0;\n let ty = 0;\n let cx = 0;\n let cy = 0;\n\n const allowed = () =>\n !prm.matches && document.documentElement.getAttribute('data-oc-motion') !== 'off';\n\n const onMove = (e: PointerEvent) => {\n if (!allowed()) return;\n tx = Math.tanh(((e.clientX / innerWidth - 0.5) * 2) * 1.2) * 5;\n ty = Math.tanh(((e.clientY / innerHeight - 0.5) * 2) * 1.2) * -5;\n if (!raf) raf = requestAnimationFrame(step);\n };\n const step = () => {\n raf = 0;\n cx += (tx - cx) * 0.045;\n cy += (ty - cy) * 0.045;\n el.style.setProperty('--oc-sigil-ry', `${cx.toFixed(2)}deg`);\n el.style.setProperty('--oc-sigil-rx', `${cy.toFixed(2)}deg`);\n if (Math.abs(tx - cx) + Math.abs(ty - cy) > 0.05) raf = requestAnimationFrame(step);\n };\n const onPrm = () => {\n if (prm.matches) {\n el.style.setProperty('--oc-sigil-rx', '0deg');\n el.style.setProperty('--oc-sigil-ry', '0deg');\n }\n };\n window.addEventListener('pointermove', onMove, { passive: true });\n prm.addEventListener?.('change', onPrm);\n return () => {\n window.removeEventListener('pointermove', onMove);\n prm.removeEventListener?.('change', onPrm);\n cancelAnimationFrame(raf);\n };\n }, [parallax]);\n\n return (\n <div\n aria-hidden=\"true\"\n className={cn('oc-sigil', `oc-sigil--${corner}`, band && 'oc-sigil--band', className)}\n style={\n {\n '--oc-sigil-seed': `${seedY}deg`,\n '--oc-sigil-seed-x': `${seedX}deg`,\n } as React.CSSProperties\n }\n >\n <svg width=\"0\" height=\"0\" style={{ position: 'absolute' }} aria-hidden=\"true\">\n <defs>\n <g id={`${id}-mark`} dangerouslySetInnerHTML={{ __html: mark }} />\n </defs>\n </svg>\n <div className=\"oc-sigil__drift oc-ambient\">\n <div ref={parRef} className=\"oc-sigil__par\">\n {LAYERS.map((n) => (\n <svg\n key={n}\n viewBox=\"0 0 1024 1024\"\n className=\"oc-sigil__layer\"\n style={layerStyle(n, relief)}\n >\n <use href={`#${id}-mark`} />\n </svg>\n ))}\n {/* One directional specular leaf, front of the stack, masked\n upper-left. Colored through --oc-sigil-lift so the\n cypherpunk register (lift = ink) neutralizes it for free.\n The mask is on this LEAF (no 3D descendants) — never on\n __drift/__par, which would flatten preserve-3d. */}\n <svg\n viewBox=\"0 0 1024 1024\"\n className=\"oc-sigil__layer oc-sigil__spec\"\n style={{\n transform: 'translateZ(1.5px)',\n color: `color-mix(in oklab, ${INK}, ${LIFT} 45%)`,\n }}\n >\n <use href={`#${id}-mark`} />\n </svg>\n </div>\n </div>\n </div>\n );\n}\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',\n outline:\n 'bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n // For CTAs placed ON a saturated brand band or a dark section\n // (e.g. a terracotta hero / footer / a forced-dark block) where\n // the surface is dark+light-text in either mode. A neutral white\n // pill + a translucent-white ghost read on any such surface;\n // hardcoded white is deliberate (cf. destructive's text-white).\n onBrand: 'bg-white text-neutral-900 shadow-sm hover:bg-white/90',\n onBrandOutline:\n 'border border-white/40 bg-transparent text-white hover:bg-white/10',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst badgeVariants = cva(\n 'focus-visible:border-ring focus-visible:ring-ring/50 inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3',\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent',\n secondary:\n 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent',\n destructive:\n 'bg-destructive text-destructive-foreground [a&]:hover:bg-destructive/90 border-transparent',\n warning:\n 'bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent',\n success:\n 'bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent',\n info: 'bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent',\n brand: 'bg-brand-soft text-accent-foreground border-transparent',\n neutral:\n 'bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent',\n outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'span';\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as LabelPrimitive from '@radix-ui/react-label';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'flex select-none items-center gap-2 text-sm font-medium leading-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","'use client';\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { CheckIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Checkbox — Radix-backed, skin-aware, accessible. Replaces raw\n * `<input type=\"checkbox\">` (the family had ~18 unstyled instances). Sharp\n * `rounded-sm` (skin radius), brand fill when checked, the family focus ring,\n * and `aria-invalid` error styling for parity with Input/Select/Textarea.\n */\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-input bg-input/30 size-4 shrink-0 rounded-sm border shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground',\n 'aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current\"\n >\n <CheckIcon className=\"size-3.5\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { CircleIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * RadioGroup + RadioGroupItem — Radix-backed, skin-aware, accessible. Replaces\n * raw `<input type=\"radio\">`. Circular (always `rounded-full`, independent of\n * skin radius — radios are round by convention), brand-filled dot when\n * selected, family focus ring, `aria-invalid` parity.\n */\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn('grid gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n 'border-input bg-input/30 text-primary aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:border-primary',\n 'aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-primary text-primary absolute size-2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Switch — Radix-backed on/off toggle, skin-aware, accessible. For binary\n * settings (distinct from the domain-specific ThemeToggle). brand-on track,\n * family focus ring. Track is `rounded-full` by toggle convention; the thumb\n * follows suit.\n */\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'bg-background pointer-events-none block size-4 rounded-full shadow-sm ring-0 transition-transform',\n 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst alertVariants = cva(\n 'relative grid w-full grid-cols-[0_1fr] items-start gap-x-0 gap-y-0.5 rounded-md border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive:\n 'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',\n success:\n 'text-success bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-success/90',\n warning:\n 'text-warning bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n","import type { LucideIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Alert, AlertDescription, AlertTitle } from './alert';\nimport { Button } from './button';\n\ntype AlertVariant = 'default' | 'destructive' | 'warning' | 'success';\n\nexport interface AlertWithActionProps {\n variant?: AlertVariant;\n icon?: LucideIcon;\n title?: string;\n description: React.ReactNode;\n actionLabel?: string;\n onAction?: () => void;\n actionVariant?: 'default' | 'outline' | 'ghost' | 'destructive';\n actionIcon?: React.ReactNode;\n actionDisabled?: boolean;\n actionContent?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Alert with an integrated action button. Standard Alert styling + variants,\n * optional title/icon, optional action button or custom action content.\n */\nexport function AlertWithAction({\n variant = 'default',\n icon: Icon,\n title,\n description,\n actionLabel,\n onAction,\n actionVariant = 'outline',\n actionIcon,\n actionDisabled,\n actionContent,\n className,\n}: AlertWithActionProps) {\n return (\n <Alert variant={variant} className={className}>\n {Icon && <Icon className=\"h-4 w-4\" />}\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>\n {description}\n {(actionLabel || actionContent) && (\n <div className=\"mt-3 flex items-center gap-2\">\n {actionContent}\n {actionLabel && onAction && (\n <Button\n size=\"sm\"\n variant={actionVariant}\n onClick={onAction}\n disabled={actionDisabled}\n className={cn(!actionContent && 'ml-auto')}\n >\n {actionIcon}\n {actionLabel}\n </Button>\n )}\n </div>\n )}\n </AlertDescription>\n </Alert>\n );\n}\n\nexport interface AlertWithCountdownProps {\n variant?: AlertVariant;\n icon?: LucideIcon;\n title?: string;\n description: React.ReactNode;\n countdown: number;\n countdownLabel?: string;\n countdownIcon?: React.ReactNode;\n actionLabel?: string;\n onAction?: () => void;\n actionIcon?: React.ReactNode;\n actionDisabled?: boolean;\n className?: string;\n}\n\n/**\n * Alert with a countdown timer and action button. Auto-pluralizes \"second(s)\"\n * and supports a `{countdown}` placeholder in `countdownLabel`.\n */\nexport function AlertWithCountdown({\n variant = 'default',\n icon: Icon,\n title,\n description,\n countdown,\n countdownLabel,\n countdownIcon,\n actionLabel = 'Check Now',\n onAction,\n actionIcon,\n actionDisabled,\n className,\n}: AlertWithCountdownProps) {\n const label = countdownLabel\n ? countdownLabel.replace('{countdown}', countdown.toString())\n : `Rechecking in ${countdown} second${countdown !== 1 ? 's' : ''}...`;\n\n return (\n <Alert variant={variant} className={className}>\n {Icon && <Icon className=\"h-4 w-4\" />}\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>\n {description}\n <div className=\"mt-3 flex items-center gap-2 text-sm\">\n {countdownIcon}\n <span>{label}</span>\n {onAction && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={onAction}\n disabled={actionDisabled}\n className=\"ml-auto\"\n >\n {actionIcon}\n {actionLabel}\n </Button>\n )}\n </div>\n </AlertDescription>\n </Alert>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Sizing note, and it is load-bearing: `text-base md:text-xs`, not `text-xs`.\n *\n * iOS Safari zooms the viewport when a form field with text under 16px takes\n * focus, and the user is not zoomed back out afterwards — every textarea in\n * the family did this. `text-base` (16px) on mobile suppresses it; `md:text-xs`\n * keeps the 12px mono look on a pointer device, where the zoom behaviour does\n * not exist. Input already used this ladder (`text-base md:text-sm`); Textarea\n * was flat 12px with no responsive step.\n *\n * A consumer passing `text-xs` via className will re-break it — tailwind-merge\n * lets the caller win. Pass the ladder, not a single size.\n */\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'placeholder:text-muted-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 w-full min-w-0 rounded-md border px-3 py-2 font-mono text-base leading-relaxed shadow-xs md:text-xs transition-[color,box-shadow,background-color] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n // aria-invalid parity with Input — error styling when a consumer\n // marks the field invalid.\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","'use client';\n\nimport { Moon, Sun } from 'lucide-react';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useState } from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Button } from './button';\n\n/**\n * Compact icon-button light/dark toggle used in the desktop header. This is the\n * *mode* axis (next-themes `.dark` class) — orthogonal to `OcThemePicker`, which\n * is the named-theme (skin) axis.\n */\nexport function ThemeToggle({ className }: { className?: string }) {\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const isDark = resolvedTheme === 'dark';\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n title={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n className={cn('text-muted-foreground hover:text-foreground', className)}\n >\n {!mounted ? (\n <span className=\"block size-4\" />\n ) : isDark ? (\n <Sun className=\"size-4\" />\n ) : (\n <Moon className=\"size-4\" />\n )}\n </Button>\n );\n}\n\n/**\n * Link-like variant for use inside the mobile drawer (matches other menu items).\n */\nexport function ThemeToggleLink() {\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const isDark = mounted && resolvedTheme === 'dark';\n return (\n <button\n type=\"button\"\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n className=\"hover:text-foreground flex w-full items-center justify-between px-2 py-2 text-left text-xs tracking-wide uppercase transition-colors\"\n >\n <span className=\"tracking-wide lowercase\">\n {'> '}\n {mounted ? (isDark ? 'light mode' : 'dark mode') : 'theme'}\n </span>\n {mounted && (isDark ? <Sun className=\"size-3.5\" /> : <Moon className=\"size-3.5\" />)}\n </button>\n );\n}\n","'use client';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Cohesive \"working\" indicator used at every async hold-point. Two styles, same\n * DNA — a cypherpunk marching-cursor of three dots (no SVG spinner). The CSS\n * lives in `@orangecheck/design/styles.css` (`.oc-working-*`). Each indicator\n * carries an `aria-live=\"polite\"` region announcing the activity.\n */\nexport interface WorkingProps {\n /** Short verb phrase describing what's happening. Lowercase. */\n text: string;\n /** Compact (button-sized) or normal (inline block). */\n size?: 'sm' | 'md';\n /** Optional — show a progress ratio (e.g. \"2 of 4 relays\"). */\n progress?: string;\n className?: string;\n}\n\nexport function Working({ text, size = 'md', progress, className }: WorkingProps) {\n const isSmall = size === 'sm';\n return (\n <span\n aria-live=\"polite\"\n className={cn(\n 'inline-flex items-center gap-2 font-mono',\n isSmall ? 'text-[11px]' : 'text-xs',\n 'text-muted-foreground',\n className\n )}\n >\n <span className=\"oc-working-cursor\" aria-hidden>\n <span className=\"oc-working-dot\" style={{ animationDelay: '0ms' }}>\n ·\n </span>\n <span className=\"oc-working-dot\" style={{ animationDelay: '140ms' }}>\n ·\n </span>\n <span className=\"oc-working-dot\" style={{ animationDelay: '280ms' }}>\n ·\n </span>\n </span>\n <span className=\"oc-working-text\">\n {text}\n {progress && <span className=\"text-muted-foreground ml-1.5\">[{progress}]</span>}\n </span>\n </span>\n );\n}\n\n/**\n * Full-panel working block. Use inside a terminal to take the whole card.\n */\nexport function WorkingPanel({ text, progress }: Pick<WorkingProps, 'text' | 'progress'>) {\n return (\n <div className=\"terminal\">\n <div className=\"terminal-title\">\n <span className=\"terminal-dot\" />\n <span className=\"terminal-dot\" />\n <span className=\"terminal-dot\" />\n <span className=\"ml-2\">in progress</span>\n </div>\n <div className=\"flex items-center gap-3 p-5\">\n <Working text={text} {...(progress ? { progress } : {})} />\n </div>\n </div>\n );\n}\n","import * as React from 'react';\n\ninterface Props {\n children: React.ReactNode;\n /** Full custom fallback. Takes precedence over `title`/`message`. */\n fallback?: (error: Error, reset: () => void) => React.ReactNode;\n /** Title shown in the default fallback's terminal strip (default \"! fatal\"). */\n title?: string;\n /** Reassurance line below the error (default \"this page crashed. reload to recover.\"). */\n message?: string;\n /** Called on catch — wire to Sentry/analytics. Runs alongside the console log. */\n onError?: (error: Error, info: React.ErrorInfo) => void;\n}\n\ninterface State {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends React.Component<Props, State> {\n state: State = { error: null };\n\n static getDerivedStateFromError(error: Error): State {\n return { error };\n }\n\n componentDidCatch(error: Error, info: React.ErrorInfo) {\n // Default behaviour logs; pass `onError` to forward to Sentry or similar.\n console.error('[ErrorBoundary]', error, info);\n this.props.onError?.(error, info);\n }\n\n reset = () => this.setState({ error: null });\n\n render() {\n if (this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback(this.state.error, this.reset);\n }\n return (\n <div className=\"container py-16\">\n <div className=\"terminal\">\n <div className=\"terminal-title\">\n <span className=\"text-destructive flex items-center gap-1.5\">\n {this.props.title ?? '! fatal'}\n </span>\n </div>\n <div className=\"space-y-3 p-5 font-mono text-xs leading-relaxed\">\n <p>\n <span className=\"text-destructive\">{'> '}err:</span>{' '}\n {this.state.error.message || 'unknown error'}\n </p>\n <p className=\"text-muted-foreground\">\n {'> '}\n {this.props.message ?? 'this page crashed. reload to recover.'}\n </p>\n <button\n type=\"button\"\n onClick={this.reset}\n className=\"bg-primary text-primary-foreground hover:bg-primary/90 mt-2 inline-flex items-center justify-center gap-2 rounded-md px-4 py-2 font-mono text-xs tracking-widest uppercase\"\n >\n retry\n </button>\n </div>\n </div>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","import { cn } from '../tokens/cn';\n\nexport interface SkeletonProps {\n className?: string;\n}\n\n/** Inert shimmer placeholder. Pulses subtly while data is loading. */\nexport function Skeleton({ className }: SkeletonProps) {\n return <div className={cn('bg-muted/40 animate-pulse rounded-sm', className)} />;\n}\n","'use client';\n\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","'use client';\n\nimport * as SheetPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Sheet(props: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger(props: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose(props: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal(props: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'left' | 'right' | 'top' | 'bottom';\n}) {\n const sideClasses: Record<string, string> = {\n right: 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n top: 'inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom: 'inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n };\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'bg-background fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=closed]:animate-out data-[state=open]:duration-500 data-[state=open]:animate-in',\n sideClasses[side],\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"sheet-header\" className={cn('flex flex-col gap-1.5 p-4', className)} {...props} />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetOverlay,\n SheetPortal,\n SheetTitle,\n SheetTrigger,\n};\n","'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn('text-lg leading-none font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { AlertTriangle } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\n\n/**\n * Promise-based replacement for `window.confirm` in the house design language.\n * Call `confirm({...})` from anywhere; a single mounted `<ConfirmHost />` renders\n * it. Async (resolves to a boolean) and provider-less by design.\n */\n\nexport interface ConfirmOptions {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n}\n\ninterface PendingConfirm extends ConfirmOptions {\n resolve: (ok: boolean) => void;\n}\n\n// Read NODE_ENV without depending on @types/node (this is a browser package).\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingConfirm | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\nexport function confirm(opts: ConfirmOptions): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[ConfirmDialog] confirm() called but no <ConfirmHost /> is mounted');\n }\n });\n}\n\n/** Singleton dialog host. Mount once at the app root. */\nexport function ConfirmHost() {\n const [state, setState] = useState<PendingConfirm | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn(\n '[ConfirmDialog] multiple <ConfirmHost /> instances mounted — the last one wins'\n );\n }\n notifyHost = () => setState(pending);\n if (pending) setState(pending);\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (ok: boolean) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(ok);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(false)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\">\n <div className=\"terminal-title\">\n <span\n className={\n 'flex items-center gap-1.5 ' +\n (state.destructive ? 'text-destructive' : 'text-primary')\n }\n >\n <AlertTriangle className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap [overflow-wrap:anywhere]\">\n {state.message}\n </div>\n </Dialog.Description>\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(false)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button\n onClick={() => close(true)}\n className={\n 'font-display tracking-wide uppercase ' +\n (state.destructive\n ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90'\n : '')\n }\n >\n {state.confirmLabel ?? 'confirm'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { Pencil } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Label } from './label';\n\n/**\n * Promise-based replacement for `window.prompt`, in the house design language.\n * Call `prompt({...})`; mount one `<PromptHost />` at the app root (alongside\n * `<ConfirmHost />`). Supports a masked `secret` input, a matching\n * `confirmField` (\"choose a passphrase, twice\"), and a `validate` hook.\n */\n\nexport interface PromptOptions {\n title: string;\n message?: string;\n label?: string;\n placeholder?: string;\n defaultValue?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n /** Mask the input. */\n secret?: boolean;\n /** Show a second input that must match the first. Implies validation. */\n confirmField?: boolean;\n /** Minimum accepted length. */\n minLength?: number;\n /** Return an error string to block submission, or null to allow it. */\n validate?: (value: string) => string | null;\n}\n\ninterface PendingPrompt extends PromptOptions {\n resolve: (value: string | null) => void;\n}\n\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingPrompt | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\n/** Open a prompt dialog. Resolves to the entered string, or null if cancelled. */\nexport function prompt(opts: PromptOptions): Promise<string | null> {\n return new Promise<string | null>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[PromptDialog] prompt() called but no <PromptHost /> is mounted');\n }\n });\n}\n\nexport function PromptHost() {\n const [state, setState] = useState<PendingPrompt | null>(null);\n const [value, setValue] = useState('');\n const [confirmValue, setConfirmValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn('[PromptDialog] multiple <PromptHost /> instances mounted');\n }\n notifyHost = () => {\n setValue(pending?.defaultValue ?? '');\n setConfirmValue('');\n setError(null);\n setState(pending);\n };\n if (pending) notifyHost();\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (result: string | null) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(result);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n const submit = useCallback(() => {\n if (!state) return;\n const v = value;\n if (state.minLength && v.length < state.minLength) {\n setError(`must be at least ${state.minLength} characters`);\n return;\n }\n if (state.confirmField && v !== confirmValue) {\n setError('the two entries do not match');\n return;\n }\n if (state.validate) {\n const msg = state.validate(v);\n if (msg) {\n setError(msg);\n return;\n }\n }\n close(v);\n }, [state, value, confirmValue, close]);\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(null)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content\n className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n }}\n >\n <div className=\"terminal-title\">\n <span className=\"text-primary flex items-center gap-1.5\">\n <Pencil className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n {state.message && (\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap\">\n {state.message}\n </div>\n </Dialog.Description>\n )}\n <div>\n {state.label && <Label>{state.label}</Label>}\n <Input\n autoFocus\n type={state.secret ? 'password' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n placeholder={state.placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={\n (state.label ? 'mt-2 ' : '') + (state.secret ? 'font-mono' : '')\n }\n />\n </div>\n {state.confirmField && (\n <div>\n <Label>confirm</Label>\n <Input\n type={state.secret ? 'password' : 'text'}\n value={confirmValue}\n onChange={(e) => {\n setConfirmValue(e.target.value);\n setError(null);\n }}\n placeholder=\"re-enter to confirm\"\n autoComplete=\"off\"\n spellCheck={false}\n className={'mt-2 ' + (state.secret ? 'font-mono' : '')}\n />\n </div>\n )}\n {error && <p className=\"text-destructive font-mono text-xs\">{error}</p>}\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(null)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button onClick={submit} className=\"font-display tracking-wide uppercase\">\n {state.confirmLabel ?? 'ok'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface ModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n subtitle?: string;\n children: ReactNode;\n /** Optional toolbar slot rendered to the right of the title. */\n actions?: ReactNode;\n /** Bias narrower for input-focused modals. */\n width?: 'wide' | 'narrow';\n}\n\n/**\n * Family-standard near-fullscreen modal with terminal-window chrome. Dense data\n * gets room to breathe; ESC + backdrop close, focus trapped while open. Backed\n * by Radix Dialog. Visual: ~95vw × 90vh, scrollable body, pinned title strip.\n */\nexport function Modal({ open, onOpenChange, title, subtitle, children, actions, width = 'wide' }: ModalProps) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"bg-background/80 fixed inset-0 z-[100] backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n <DialogPrimitive.Content\n className={cn(\n 'terminal fixed top-[5vh] left-1/2 z-[110] flex max-h-[90vh] -translate-x-1/2 flex-col overflow-hidden rounded-sm border',\n width === 'wide' ? 'w-[95vw] max-w-screen-2xl' : 'w-[80vw] max-w-3xl',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95'\n )}\n >\n <div className=\"terminal-title flex shrink-0 items-center justify-between gap-3\">\n {/* Same shrink priority as Card's header — the expanded\n view must not clip a title the collapsed one keeps. */}\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"terminal-dot\" aria-hidden />\n <span className=\"terminal-dot opacity-70\" aria-hidden />\n <span className=\"terminal-dot opacity-50\" aria-hidden />\n <DialogPrimitive.Title className=\"ml-2 truncate [flex-shrink:1]\">{title}</DialogPrimitive.Title>\n {subtitle && (\n <span className=\"text-muted-foreground ml-1 min-w-0 truncate text-[10px] normal-case tracking-normal [flex-shrink:100]\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {actions}\n <DialogPrimitive.Close\n aria-label=\"close\"\n className=\"text-muted-foreground hover:text-foreground inline-flex h-6 w-6 items-center justify-center rounded-sm\"\n >\n <X className=\"size-3.5\" />\n </DialogPrimitive.Close>\n </div>\n </div>\n <div className=\"flex-1 overflow-y-auto p-4 sm:p-6\">{children}</div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n","'use client';\n\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { Button } from './button';\n\nexport interface PaginationProps {\n page: number;\n pageSize: number;\n total: number;\n onPage: (page: number) => void;\n className?: string;\n}\n\n/**\n * The family's consistent pagination control: a \"start–end of total\" range\n * label plus prev / next chevron buttons. Page-index based (0-based). Renders\n * nothing when everything fits on one page.\n */\nexport function Pagination({ page, pageSize, total, onPage, className }: PaginationProps) {\n if (total <= pageSize) return null;\n const start = page * pageSize;\n const shown = Math.max(0, Math.min(pageSize, total - start));\n return (\n <div className={'flex items-center justify-between ' + (className ?? 'mt-3')}>\n <span className=\"text-muted-foreground font-mono text-[10px]\">\n {start + 1}–{start + shown} of {total}\n </span>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => onPage(page - 1)} disabled={page === 0}>\n <ChevronLeft className=\"size-4\" /> prev\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPage(page + 1)}\n disabled={start + pageSize >= total}\n >\n next <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","'use client';\n\nimport * as Popover from '@radix-ui/react-popover';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * `<Tooltip>` — the family's hover/focus tooltip primitive.\n *\n * Built on `@radix-ui/react-popover` (already a dependency — we do NOT add\n * `@radix-ui/react-tooltip`) but driven by a *controlled* open boolean so we\n * own the timing and gating Radix's popover doesn't give a tooltip:\n *\n * - hover-intent: opens after `openDelay`ms of sustained pointer hover,\n * closes after a short `closeDelay` grace (WCAG 1.4.13 hoverable).\n * - keyboard parity: also opens on keyboard focus (detected via input-\n * modality, since `:focus-visible` isn't applied yet inside the focus\n * event), closes on blur/Escape, never steals or traps focus.\n * - pointer-fine only: the hover path is gated behind\n * `(hover: hover) and (pointer: fine)` so it never fires on touch — by\n * pointer *type*, not a width breakpoint (a coarse tablet ≥ sm is touch).\n * - `disabled`: a hard force-close, used by `OcLogoDropdown` so the tip and\n * the family menu (which share a trigger) can never paint at once.\n *\n * The content is decorative reinforcement: it's `aria-hidden`, and\n * `pointer-events-none` so a mis-detected pointer can never intercept the\n * click path to the trigger. The authoritative accessible name belongs on the\n * trigger's own `aria-label`.\n */\n\nconst TOOLTIP_SURFACE_CLASS =\n 'bg-popover text-popover-foreground border-border rounded-md border p-2.5 shadow-md';\n\n// Same idiom as the popover/dialog primitives, a touch faster (tooltips are\n// lighter than dialogs) with a smaller 4px travel. Reduced-motion is handled\n// globally by the family `prefers-reduced-motion` reset — nothing to add here.\nconst TOOLTIP_MOTION_CLASS =\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 origin-(--radix-popover-content-transform-origin) duration-150 ease-out';\n\nexport interface TooltipProps {\n /** The tooltip body. */\n content: React.ReactNode;\n /** A single trigger element (a `<button>` etc.); receives the hover/focus wiring. */\n children: React.ReactElement;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n collisionPadding?: number;\n /** ms of sustained hover before opening. Default 300 (deliberate, not twitchy). */\n openDelay?: number;\n /** ms grace before closing on pointer-leave. Default 90. */\n closeDelay?: number;\n /** Force the tooltip closed regardless of hover/focus (e.g. while a shared menu is open). */\n disabled?: boolean;\n /** Portal to `<body>` (default true). Set false to keep content inline so it inherits a scoped `data-oc-theme`. */\n portal?: boolean;\n /** z-index utility for the content. Default `z-50`. */\n zIndexClassName?: string;\n contentClassName?: string;\n}\n\ninterface TriggerHandlerProps {\n onPointerEnter?: React.PointerEventHandler;\n onPointerLeave?: React.PointerEventHandler;\n onPointerDown?: React.PointerEventHandler;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n onKeyDown?: React.KeyboardEventHandler;\n}\n\nfunction compose<E>(theirs: ((e: E) => void) | undefined, ours: (e: E) => void) {\n return (e: E) => {\n theirs?.(e);\n ours(e);\n };\n}\n\n/**\n * Input-modality tracker (the `:focus-visible` polyfill heuristic).\n * `:focus-visible` is NOT reliably applied synchronously inside the `focus`\n * event, so reading `el.matches(':focus-visible')` there misses keyboard focus.\n * Instead we record the last input type from global capture-phase listeners\n * that fire BEFORE focus: a keydown means the focus that follows is keyboard-\n * driven (show the hint); a pointerdown means it's a click (don't — that would\n * flash the tip over the menu).\n */\nlet lastInputWasKeyboard = false;\nlet modalityInstalled = false;\nfunction installModalityTracking() {\n if (modalityInstalled || typeof window === 'undefined') return;\n modalityInstalled = true;\n window.addEventListener('keydown', () => (lastInputWasKeyboard = true), true);\n window.addEventListener('pointerdown', () => (lastInputWasKeyboard = false), true);\n}\n\nexport function Tooltip({\n content,\n children,\n side = 'bottom',\n align = 'start',\n sideOffset = 8,\n collisionPadding = 12,\n openDelay = 300,\n closeDelay = 90,\n disabled = false,\n portal = true,\n zIndexClassName = 'z-50',\n contentClassName,\n}: TooltipProps) {\n const [hovering, setHovering] = React.useState(false);\n const [focusing, setFocusing] = React.useState(false);\n const [isFinePointer, setIsFinePointer] = React.useState(false);\n const openTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Detect a true mouse (fine pointer + real hover). Defaults false for SSR\n // and first client render, then resolves in the effect — a normal post-mount\n // update, not a hydration mismatch.\n React.useEffect(() => {\n installModalityTracking();\n const mq = window.matchMedia('(hover: hover) and (pointer: fine)');\n const apply = () => setIsFinePointer(mq.matches);\n apply();\n mq.addEventListener('change', apply);\n return () => mq.removeEventListener('change', apply);\n }, []);\n\n const clearTimers = React.useCallback(() => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n }, []);\n\n React.useEffect(() => clearTimers, [clearTimers]);\n\n // When force-closed (e.g. the shared menu opened), drop the hover latch so\n // the tip doesn't snap back with no delay the instant the menu closes while\n // the pointer is still over the trigger. `focusing` is left alone — a\n // keyboard user who stays focused should still get the immediate hint.\n React.useEffect(() => {\n if (disabled) {\n clearTimers();\n setHovering(false);\n }\n }, [disabled, clearTimers]);\n\n const handlePointerEnter = () => {\n if (!isFinePointer) return;\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = setTimeout(() => setHovering(true), openDelay);\n };\n const handlePointerLeave = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n closeTimer.current = setTimeout(() => setHovering(false), closeDelay);\n };\n // The first press of EITHER a single- or double-click tears the tip down\n // before the trigger's own onClick toggles a menu, so it never overlaps.\n const handlePointerDown = () => {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n };\n const handleFocus = () => {\n // Only keyboard focus reveals the hint — a mouse click also focuses the\n // trigger, and re-popping the tip over an opening menu would be the bug.\n // Use the modality flag (set before focus fires) rather than\n // `:focus-visible`, which isn't applied yet inside the focus event.\n if (lastInputWasKeyboard) {\n clearTimers();\n setFocusing(true);\n }\n };\n const handleBlur = () => {\n clearTimers();\n setFocusing(false);\n };\n // Escape dismisses the focus-revealed tip without moving focus (WCAG 1.4.13).\n // Handled on the focused trigger directly — robust regardless of Radix's\n // dismissal internals (we suppress its focus-outside dismissal below).\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n }\n };\n\n const effectiveOpen = !disabled && ((isFinePointer && hovering) || focusing);\n\n const extra: TriggerHandlerProps = {};\n const childProps = children.props as TriggerHandlerProps;\n extra.onPointerEnter = compose(childProps.onPointerEnter, handlePointerEnter);\n extra.onPointerLeave = compose(childProps.onPointerLeave, handlePointerLeave);\n extra.onPointerDown = compose(childProps.onPointerDown, handlePointerDown);\n extra.onFocus = compose(childProps.onFocus, handleFocus);\n extra.onBlur = compose(childProps.onBlur, handleBlur);\n extra.onKeyDown = compose(childProps.onKeyDown, handleKeyDown);\n const trigger = React.cloneElement(children, extra);\n\n const contentEl = (\n <Popover.Content\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n aria-hidden\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n // The tip is aria-hidden + non-focusable, so focus legitimately\n // stays on the trigger (outside the content). Don't let Radix's\n // focus-outside dismissal close a focus-revealed tip; Escape and\n // pointer-down-outside still dismiss.\n onFocusOutside={(e) => e.preventDefault()}\n className={cn(\n TOOLTIP_SURFACE_CLASS,\n TOOLTIP_MOTION_CLASS,\n 'pointer-events-none',\n zIndexClassName,\n contentClassName\n )}\n >\n {content}\n </Popover.Content>\n );\n\n return (\n <Popover.Root\n open={effectiveOpen}\n onOpenChange={(o) => {\n // Radix requests close on Escape / outside interaction — sync our\n // own state so a re-hover re-arms cleanly. We never open via Radix.\n if (!o) {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n }\n }}\n modal={false}\n >\n <Popover.Anchor asChild>{trigger}</Popover.Anchor>\n {portal ? <Popover.Portal>{contentEl}</Popover.Portal> : contentEl}\n </Popover.Root>\n );\n}\n","'use client';\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown, Plus } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn('border-b', className)} {...props} />\n));\nAccordionItem.displayName = 'AccordionItem';\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> & {\n /** Toggle glyph: a rotating chevron (default) or a marketing plus that\n * turns into an ✕ on open, tinted with the brand. */\n icon?: 'chevron' | 'plusMinus';\n }\n>(({ className, children, icon = 'chevron', ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline',\n icon === 'chevron'\n ? '[&[data-state=open]>svg]:rotate-180'\n : '[&[data-state=open]>svg]:rotate-45',\n className\n )}\n {...props}\n >\n {children}\n {icon === 'chevron' ? (\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n ) : (\n <Plus className=\"text-primary h-5 w-5 shrink-0 transition-transform duration-200\" />\n )}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","'use client';\n\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow,background-color] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","'use client';\n\nimport { useTheme } from 'next-themes';\nimport { Toaster as Sonner, type ToasterProps } from 'sonner';\n\n/**\n * Toast host in the house design language. Mount once at the app root, then\n * call `toast()` from `sonner` anywhere. Re-exported here for convenience.\n */\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast: 'group toast group-[.toaster]:bg-card group-[.toaster]:text-card-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-foreground group-[.toast]:text-background',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n error: 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n success:\n 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n warning:\n 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n info: 'group-[.toaster]:!bg-card group-[.toaster]:!text-muted-foreground group-[.toaster]:!border-border',\n },\n }}\n style={\n {\n '--normal-bg': 'var(--card)',\n '--normal-text': 'var(--card-foreground)',\n '--normal-border': 'var(--border)',\n '--error-bg': 'var(--card)',\n '--error-text': 'var(--foreground)',\n '--error-border': 'var(--border)',\n '--success-bg': 'var(--card)',\n '--success-text': 'var(--foreground)',\n '--success-border': 'var(--border)',\n '--warning-bg': 'var(--card)',\n '--warning-text': 'var(--foreground)',\n '--warning-border': 'var(--border)',\n '--info-bg': 'var(--card)',\n '--info-text': 'var(--muted-foreground)',\n '--info-border': 'var(--border)',\n } as React.CSSProperties\n }\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst surfaceVariants = cva('rounded-xl transition-colors', {\n variants: {\n tone: {\n /* Crisp panel floating on the page — the default soft card. */\n default: 'bg-card text-card-foreground',\n /* Warm-gray recessed panel. */\n muted: 'bg-muted text-foreground',\n /* Solid brand fill — small terracotta panel; inverts child text. */\n brand: 'bg-brand text-brand-foreground',\n /* High-contrast neutral panel (near-black in light, near-white in dark). */\n contrast: 'bg-foreground text-background',\n /* Translucent lightened tile for cards sitting ON a brand band. */\n onBrand:\n 'text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]',\n /* Frame only, transparent fill. */\n outline: 'bg-transparent text-foreground',\n },\n elevation: {\n none: 'shadow-none',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n },\n bordered: {\n true: 'border',\n false: '',\n },\n pad: {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-5 sm:p-6',\n lg: 'p-6 sm:p-8',\n },\n },\n defaultVariants: {\n tone: 'default',\n elevation: 'sm',\n bordered: true,\n pad: 'md',\n },\n});\n\nexport interface SurfaceProps\n extends Omit<React.ComponentProps<'div'>, 'color'>,\n VariantProps<typeof surfaceVariants> {}\n\n/**\n * Surface — the soft, large-radius, elevated panel that the warm theme sits on.\n *\n * The package `Card` is a TERMINAL-window frame (mono title strip, terminal\n * dots) for dashboards; Surface is its plain marketing/consumer counterpart —\n * a bg-card panel with token-routed radius + soft elevation and no chrome.\n * Re-skins per skin via the radius + shadow tokens. Use this for feature cards,\n * sign-in cards, trust chips — anything that is NOT a terminal panel.\n */\nexport function Surface({\n className,\n tone,\n elevation,\n bordered,\n pad,\n ...props\n}: SurfaceProps) {\n return (\n <div\n data-slot=\"surface\"\n className={cn(surfaceVariants({ tone, elevation, bordered, pad }), className)}\n {...props}\n />\n );\n}\n\nexport { surfaceVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst iconBadgeVariants = cva(\n 'inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none',\n {\n variants: {\n tone: {\n /* The signature peach tile — soft accent fill, terracotta glyph.\n Auto-swaps to warm-dark + light-peach in dark mode via tokens. */\n peach: 'bg-accent text-accent-foreground',\n /* Inverted near-black tile, light glyph (\"never do\" promises). */\n dark: 'bg-foreground text-background',\n /* Solid brand tile. */\n brand: 'bg-primary text-primary-foreground',\n /* White tile on a brand band, terracotta glyph (numbered steps). */\n onBrand: 'bg-brand-foreground text-primary',\n /* Quiet neutral tile. */\n muted: 'bg-muted text-foreground',\n /* Crisp white (card-colored) tile with a terracotta glyph and a\n soft lift — the elevated icon chip on muted/colored cards. */\n surface: 'bg-card text-primary shadow-sm',\n },\n size: {\n sm: 'size-9 text-xs [&_svg]:size-4',\n md: 'size-11 text-sm [&_svg]:size-5',\n lg: 'size-12 text-base [&_svg]:size-6',\n xl: 'size-14 text-lg [&_svg]:size-7',\n },\n },\n defaultVariants: { tone: 'peach', size: 'md' },\n }\n);\n\nexport interface IconBadgeProps\n extends Omit<React.ComponentProps<'span'>, 'color'>,\n VariantProps<typeof iconBadgeVariants> {}\n\n/**\n * IconBadge — a rounded-square tile holding a lucide icon OR a number/short\n * label. The theme's most-reused decorative atom (feature-card icons, numbered\n * steps, the verified chip). Distinct from the text `Badge` pill: this is a\n * fixed-size square tile. Tones map to skin tokens so the same markup recolours\n * across skins and light/dark (peach ↔ warm-dark).\n *\n * <IconBadge tone=\"peach\"><Lock /></IconBadge>\n * <IconBadge tone=\"onBrand\" size=\"sm\">1</IconBadge>\n */\nexport function IconBadge({ className, tone, size, children, ...props }: IconBadgeProps) {\n return (\n <span\n data-slot=\"icon-badge\"\n className={cn(iconBadgeVariants({ tone, size }), className)}\n {...props}\n >\n {children}\n </span>\n );\n}\n\nexport { iconBadgeVariants };\n","\"use client\";\n\nimport { Maximize2 } from \"lucide-react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { cn } from \"../tokens/cn\";\nimport { Modal } from \"./modal\";\n\nexport interface CardProps {\n id?: string;\n title: string;\n subtitle?: string;\n refreshedAt?: string | null;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n tone?: \"default\" | \"warning\" | \"destructive\" | \"muted\";\n /**\n * When true (default) renders a fullscreen-expand icon in the title strip;\n * clicking pops the same body content into a fullscreen Modal. Set false for\n * tiny cards where fullscreen adds nothing.\n */\n expandable?: boolean;\n}\n\n/**\n * Terminal-window framed card — title strip (terminal dots) + optional refresh\n * timestamp/actions + body. The canonical dashboard/cockpit panel. Expandable\n * by default: surfaces an expand icon that opens the same body in a fullscreen\n * Modal.\n */\nexport function Card({\n id,\n title,\n subtitle,\n refreshedAt,\n actions,\n children,\n className,\n tone = \"default\",\n expandable = true,\n}: CardProps) {\n const [expanded, setExpanded] = useState(false);\n\n const toneClass =\n tone === \"warning\"\n ? \"border-warning/60\"\n : tone === \"destructive\"\n ? \"border-destructive/60\"\n : tone === \"muted\"\n ? \"border-border opacity-90\"\n : \"border-border\";\n\n return (\n <>\n <section\n id={id}\n className={cn(\n \"terminal flex flex-col rounded-sm border scroll-mt-16\",\n toneClass,\n className,\n )}\n >\n <div className=\"terminal-title flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"terminal-dot\" aria-hidden />\n <span className=\"terminal-dot opacity-70\" aria-hidden />\n <span className=\"terminal-dot opacity-50\" aria-hidden />\n {/* Shrink priority, not equal shrink. Both spans truncate, so with\n the default flex-shrink:1 a narrow card (any two-column grid)\n clipped the TITLE first — \"§ settlement · t…\" — losing the one\n word that says what the panel is while keeping a subtitle nobody\n can read either. The subtitle now absorbs ~100× the squeeze, so\n it collapses fully before the title gives up a character. */}\n <span className=\"ml-2 truncate [flex-shrink:1]\">{title}</span>\n {subtitle && (\n <span className=\"text-muted-foreground ml-1 min-w-0 truncate text-[10px] tracking-normal normal-case [flex-shrink:100]\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {refreshedAt && (\n <span className=\"text-muted-foreground hidden text-[10px] tracking-normal normal-case sm:inline\">\n {refreshedAt}\n </span>\n )}\n {actions}\n {expandable && (\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n aria-label={`expand ${title}`}\n title=\"expand to fullscreen\"\n className=\"text-muted-foreground hover:text-foreground inline-flex h-6 w-6 items-center justify-center rounded-sm\"\n >\n <Maximize2 className=\"size-3\" />\n </button>\n )}\n </div>\n </div>\n <div className=\"flex-1 p-4 sm:p-5\">{children}</div>\n </section>\n\n {expandable && (\n <Modal\n open={expanded}\n onOpenChange={setExpanded}\n title={title}\n {...(subtitle ? { subtitle } : {})}\n actions={\n refreshedAt ? (\n <span className=\"text-muted-foreground hidden text-[10px] tracking-normal normal-case sm:inline\">\n {refreshedAt}\n </span>\n ) : null\n }\n >\n {children}\n </Modal>\n )}\n </>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface SparklineProps {\n data: ReadonlyArray<number>;\n width?: number;\n height?: number;\n className?: string;\n /** Render a soft area-fill under the line. */\n area?: boolean;\n}\n\n/**\n * Tiny inline SVG sparkline. No library — keeps the bundle small and the look\n * consistent with the cypherpunk family aesthetic. Degenerates gracefully to a\n * flat line for empty/single-point data.\n */\nexport function Sparkline({ data, width = 96, height = 24, area = false, className }: SparklineProps) {\n if (data.length === 0) {\n return (\n <svg width={width} height={height} className={cn(className)} aria-hidden>\n <line\n x1={0}\n x2={width}\n y1={height / 2}\n y2={height / 2}\n stroke=\"currentColor\"\n strokeWidth={1}\n opacity={0.25}\n />\n </svg>\n );\n }\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n const step = data.length === 1 ? width : width / (data.length - 1);\n\n const points = data.map((v, i) => {\n const x = i * step;\n const y = height - ((v - min) / range) * (height - 2) - 1;\n return [x, y] as const;\n });\n\n const linePath = points\n .map(([x, y], i) => `${i === 0 ? 'M' : 'L'}${x.toFixed(2)},${y.toFixed(2)}`)\n .join(' ');\n\n const areaPath = area\n ? `${linePath} L${width.toFixed(2)},${height.toFixed(2)} L0,${height.toFixed(2)} Z`\n : null;\n\n return (\n <svg\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cn('text-primary', className)}\n aria-hidden\n >\n {areaPath && <path d={areaPath} fill=\"currentColor\" opacity={0.12} />}\n <path d={linePath} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.25} />\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface StatBlockProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional \"vs prior period\" delta — arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n className?: string;\n}\n\n/**\n * A single labelled value cell — the building block for every counter grid in a\n * dashboard. Optional delta arrow + colour for period-over-period deltas.\n * (Richer than StatTile: carries a delta. Use StatGrid for laid-out grids.)\n */\nexport function StatBlock({ label, value, sub, delta, tone = 'default', className }: StatBlockProps) {\n const toneClass =\n tone === 'success'\n ? 'text-success'\n : tone === 'warning'\n ? 'text-warning'\n : tone === 'destructive'\n ? 'text-destructive'\n : 'text-foreground';\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <span className=\"label-mono text-muted-foreground text-[10px]\">{label}</span>\n <span\n className={cn(\n 'font-display text-2xl font-bold tracking-tight tabular-nums',\n toneClass\n )}\n >\n {value}\n </span>\n <div className=\"flex items-baseline gap-2\">\n {sub && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide lowercase\">\n {sub}\n </span>\n )}\n {delta && (\n <span\n className={cn(\n 'font-mono text-[11px] tracking-wide',\n delta.value > 0\n ? 'text-success'\n : delta.value < 0\n ? 'text-destructive'\n : 'text-muted-foreground'\n )}\n >\n {delta.value > 0 ? '▲' : delta.value < 0 ? '▼' : '·'}{' '}\n {Math.abs(delta.value).toFixed(1)}\n {delta.suffix ?? '%'}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface BarProps {\n /** 0–100; clamped. */\n pct: number;\n accent?: 'primary' | 'warning' | 'destructive' | 'success';\n label?: string;\n right?: string;\n className?: string;\n}\n\nconst ACCENT: Record<NonNullable<BarProps['accent']>, string> = {\n primary: 'bg-primary',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n success: 'bg-success',\n};\n\n/** Horizontal capacity/progress bar with optional label + right-aligned value. */\nexport function Bar({ pct, accent = 'primary', label, right, className }: BarProps) {\n const clamped = Math.max(0, Math.min(100, pct));\n return (\n <div className={cn(className)}>\n {(label || right) && (\n <div className=\"flex items-baseline justify-between font-mono text-[10.5px] tracking-widest uppercase\">\n {label && <span className=\"text-muted-foreground\">{label}</span>}\n {right && <span className=\"text-foreground tabular-nums\">{right}</span>}\n </div>\n )}\n <div className=\"bg-muted mt-1.5 h-1.5 w-full overflow-hidden\">\n <div className={cn('h-full', ACCENT[accent])} style={{ width: `${clamped}%` }} />\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport type StatusTone = 'success' | 'warning' | 'destructive' | 'muted' | 'primary' | 'info';\n\n/**\n * - `plain` (default): borderless, lowercase, tone-coloured text + optional icon.\n * - `bordered`: a bordered, uppercase badge (`border-{tone}/40 text-{tone}`) —\n * the variant www's StateBadge and me's\n * compliance/severity pills all hand-roll.\n */\nexport type StatusPillVariant = 'plain' | 'bordered';\n\nexport interface StatusPillProps {\n /** Status label (rendered lowercase in `plain`, uppercase in `bordered`). */\n label: string;\n tone?: StatusTone;\n variant?: StatusPillVariant;\n /** `bordered` only: add a `bg-{tone}/10` fill for at-a-glance emphasis on\n * dense dashboards (me's compliance/severity pills). Ignored when `plain`. */\n filled?: boolean;\n /** Optional leading icon (e.g. a lucide icon sized size-3). */\n icon?: ReactNode;\n className?: string;\n}\n\nconst TONE: Record<StatusTone, string> = {\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n primary: 'text-primary',\n info: 'text-info',\n};\n\nconst BORDER_TONE: Record<StatusTone, string> = {\n success: 'border-success/40 text-success',\n warning: 'border-warning/40 text-warning',\n destructive: 'border-destructive/40 text-destructive',\n muted: 'border-muted-foreground/40 text-muted-foreground',\n primary: 'border-primary/40 text-primary',\n info: 'border-info/40 text-info',\n};\n\nconst FILL_TONE: Record<StatusTone, string> = {\n success: 'bg-success/10',\n warning: 'bg-warning/10',\n destructive: 'bg-destructive/10',\n muted: 'bg-muted/30',\n primary: 'bg-primary/10',\n info: 'bg-info/10',\n};\n\n/**\n * Generic state pill — the canonical form of the per-domain status pills that\n * me (compliance/severity) and others reimplement.\n * Apps map their domain status → { tone, label, icon }; this renders it\n * consistently. Two variants: `plain` (borderless lowercase) and `bordered`\n * (uppercase badge with a tone-tinted border).\n */\nexport function StatusPill({\n label,\n tone = 'muted',\n variant = 'plain',\n filled = false,\n icon,\n className,\n}: StatusPillProps) {\n if (variant === 'bordered') {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 border px-1.5 py-0.5 font-mono text-[9px] tracking-widest uppercase',\n BORDER_TONE[tone],\n filled && FILL_TONE[tone],\n className\n )}\n >\n {icon}\n {label}\n </span>\n );\n }\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 font-mono text-[11px] tracking-wider lowercase',\n TONE[tone],\n className\n )}\n >\n {icon}\n {label}\n </span>\n );\n}\n\n/** One status → presentation entry. `label` defaults to the status key. */\nexport interface StatusPillSpec {\n tone: StatusTone;\n label?: string;\n icon?: ReactNode;\n}\n\n/**\n * makeStatusPill — build a domain-specific status pill from a status→spec map.\n * This is the ergonomic that www\n * (StateBadge severity), and me (compliance/severity) each hand-roll. Instead\n * of re-deriving tone-class logic per site, declare the map once:\n *\n * const AgentStatusPill = makeStatusPill({\n * online: { tone: 'success' },\n * offline: { tone: 'destructive', label: 'down' },\n * pending: { tone: 'warning' },\n * });\n * <AgentStatusPill status={agent.status} />\n *\n * Pass `{ variant: 'bordered' }` for the uppercase-badge form (pledge\n * states, www state badges, me compliance/severity).\n */\nexport function makeStatusPill<S extends string>(\n map: Record<S, StatusPillSpec>,\n options?: { variant?: StatusPillVariant; filled?: boolean; fallbackTone?: StatusTone }\n): (props: { status: S; className?: string }) => ReactNode {\n const variant = options?.variant ?? 'plain';\n const filled = options?.filled ?? false;\n const fallbackTone = options?.fallbackTone ?? 'muted';\n function DomainStatusPill({ status, className }: { status: S; className?: string }) {\n const spec = map[status];\n return (\n <StatusPill\n tone={spec?.tone ?? fallbackTone}\n label={spec?.label ?? status}\n icon={spec?.icon}\n filled={filled}\n variant={variant}\n className={className}\n />\n );\n }\n return DomainStatusPill;\n}\n","'use client';\n\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Tabs — accessible tabbed interface (Radix). Replaces the hand-rolled\n * `role=\"tablist\"` + manual `useState` toggles found in vault settings, the\n * www dashboard, me's SnippetCard, attest's CodeTabs, and others. Keyboard\n * nav, roving tabindex, and ARIA wiring come from Radix; the OC look (mono,\n * underline-on-active) is layered on top.\n */\nfunction Tabs({ ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" {...props} />;\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n // A tab row is `flex`; a long set of triggers would overflow the page\n // horizontally on narrow screens. `flex-wrap` lets it wrap to a second\n // line instead. NOT `overflow-x-auto` — that forces overflow-y:auto,\n // which clips the active trigger's -mb-px/border-b-2 underline.\n className={cn(\n 'border-border -mb-px flex flex-wrap items-center gap-6 border-b',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n 'text-muted-foreground hover:text-foreground data-[state=active]:text-primary data-[state=active]:border-primary -mb-px border-b-2 border-transparent py-2 font-mono text-[11px] tracking-widest uppercase transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('mt-4 outline-none', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","/**\n * useSpotPrice — live BTC/USD spot rate for display surfaces.\n *\n * Pulls a JSON shape `{ btc_usd: number, fetched_at?: string | null }`\n * from a consumer-hosted endpoint (default `/api/price/btc-usd`),\n * refreshing every 60 seconds on a setInterval. The initial paint\n * reads `REFERENCE_BTC_USD` so the first frame is never NaN.\n *\n * Consumer contract (read this when wiring):\n *\n * The hook makes a relative fetch to `endpoint`. Every consumer that\n * mounts this MUST host that route locally — typically a Next.js\n * pages-router API route that proxies mempool.space's spot feed and\n * caches in-process. The canonical implementation lives at\n * `oc-vault-web/src/pages/api/price/btc-usd.ts` (and the mirror in\n * `oc-me-web`). Both also host the matching server-side fetch +\n * cache in `src/lib/price/feed.ts` — that part stays per-consumer\n * because it's Node-only code that doesn't belong in a UI package.\n *\n * If you don't have the route yet, pass an explicit endpoint\n * (e.g. `useSpotPrice({ endpoint: 'https://other-site.ochk.io/api/price/btc-usd' })`)\n * pointing at a sibling site's endpoint — they're CORS-open.\n *\n * Returns the rich `{ btcUsd, fetchedAt }` shape rather than a bare\n * number so callers that want a provenance caption can render\n * `asOf(fetchedAt)` without a second hook.\n */\n\n'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { REFERENCE_BTC_USD } from './index';\n\nexport interface SpotPrice {\n /** BTC/USD rate. Falls back to `REFERENCE_BTC_USD` until the first\n * fetch lands so the initial paint never reads NaN. */\n btcUsd: number;\n /** ISO timestamp the rate was fetched upstream. `null` until the\n * first successful fetch. Pair with `asOf()` for \"as of HH:MM\". */\n fetchedAt: string | null;\n}\n\nexport interface UseSpotPriceOptions {\n /** Override the endpoint path. Defaults to `/api/price/btc-usd` —\n * the family-canonical proxy route. Useful when consuming a sibling\n * site's endpoint cross-origin, or when self-hosting the proxy at\n * a non-default path. */\n endpoint?: string;\n /** Override the refresh cadence in milliseconds. Defaults to 60_000,\n * matching the upstream mempool.space cache TTL. Lower than ~10s\n * is wasted bandwidth — the underlying feed doesn't refresh faster. */\n intervalMs?: number;\n}\n\ninterface SpotPriceResponse {\n btc_usd?: number;\n fetched_at?: string | null;\n}\n\n/**\n * Hook · returns the latest BTC/USD spot rate from `endpoint`.\n *\n * Behaviour:\n * - First mount: synchronous return of `REFERENCE_BTC_USD` (no NaN),\n * then an async fetch updates state.\n * - Every `intervalMs` thereafter, a background fetch keeps the rate\n * fresh while the tab is alive.\n * - Network blips keep the last-good value — no flash to fallback.\n * - Unmount cancels both the in-flight read (`cancelled` flag) and\n * the interval timer.\n */\nexport function useSpotPrice(opts: UseSpotPriceOptions = {}): SpotPrice {\n const { endpoint = '/api/price/btc-usd', intervalMs = 60_000 } = opts;\n const [state, setState] = useState<SpotPrice>({\n btcUsd: REFERENCE_BTC_USD,\n fetchedAt: null,\n });\n\n useEffect(() => {\n let cancelled = false;\n async function pull() {\n try {\n const res = await fetch(endpoint);\n if (!res.ok) return;\n const json = (await res.json()) as SpotPriceResponse;\n if (cancelled) return;\n if (typeof json.btc_usd === 'number' && json.btc_usd > 0) {\n setState({\n btcUsd: Math.round(json.btc_usd),\n fetchedAt: json.fetched_at ?? null,\n });\n }\n } catch {\n // Network blip · keep the last good value, don't flash a\n // fallback. The next poll will recover.\n }\n }\n void pull();\n const t = setInterval(pull, intervalMs);\n return () => {\n cancelled = true;\n clearInterval(t);\n };\n }, [endpoint, intervalMs]);\n\n return state;\n}\n","/**\n * @orangecheck/design/format — Bitcoin/money display + formatting utilities.\n *\n * Presentational only. Lifted from the canonical implementations across the\n * family (oc-me-web's utils, oc-vault-web's billing) and standardized so every\n * site formats sats, prices, addresses, and times identically. NOTE: crypto\n * (BIP-322 signing, bech32 validation) deliberately does NOT live here — that\n * belongs in a bitcoin/crypto library, not the design system.\n *\n * Includes the `useSpotPrice` React hook for live BTC/USD display. The hook\n * fetches a consumer-hosted endpoint — see `use-spot-price.ts` for the\n * one-route-per-consumer contract.\n */\n\nexport { useSpotPrice, type SpotPrice, type UseSpotPriceOptions } from './use-spot-price';\n\n/** Reference BTC/USD rate for sats↔USD display. Override per call when a live\n * rate is available; this is a display affordance, not a price oracle. */\nexport const REFERENCE_BTC_USD = 95_000;\n\n/** Format a satoshi integer as a thousands-separated string (\"12,408\"). */\nexport function formatSats(sats: number): string {\n return new Intl.NumberFormat('en-US').format(Math.round(sats));\n}\n\n/** Compact sats for buttons/chips: \"7k sats\", \"1.5k sats\", \"999 sats\". */\nexport function formatSatsCompact(sats: number): string {\n const n = Math.round(sats);\n if (n < 1000) return `${n} sats`;\n const k = n / 1000;\n return `${Number.isInteger(k) ? k : k.toFixed(1)}k sats`;\n}\n\n/** Convert sats to a USD currency string using the reference (or given) rate. */\nexport function satsToUsd(sats: number, btcUsd: number = REFERENCE_BTC_USD): string {\n const usd = (sats / 100_000_000) * btcUsd;\n if (usd > 0 && usd < 0.01) return '< $0.01';\n // Whole dollars once >= $100, cents below. min must never exceed max.\n const fractionDigits = usd >= 100 ? 0 : 2;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: fractionDigits,\n maximumFractionDigits: fractionDigits,\n }).format(usd);\n}\n\n/** Convert a USD amount to sats using the reference (or given) rate. */\nexport function usdToSats(usd: number, btcUsd: number = REFERENCE_BTC_USD): number {\n return Math.round((usd / btcUsd) * 100_000_000);\n}\n\n/** Both denominations as one label: \"7,000 sats · $6.65\". */\nexport function priceBoth(sats: number, btcUsd: number = REFERENCE_BTC_USD): string {\n return `${formatSats(sats)} sats · ${satsToUsd(sats, btcUsd)}`;\n}\n\n/**\n * \"as of HH:MM\" provenance footnote. Returns `null` for nullish or\n * unparseable input so callers can render nothing\n * (`{x && <span>{x}</span>}`) rather than gate on a magic empty\n * string. 24-hour, locale-aware. Pairs with `useSpotPrice().fetchedAt`\n * to caption a live-rate display.\n */\nexport function asOf(iso: string | null | undefined): string | null {\n if (!iso) return null;\n const t = new Date(iso);\n if (Number.isNaN(t.getTime())) return null;\n return `as of ${t.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n })}`;\n}\n\n/** Compact relative time — \"now\", \"3m ago\", \"2h ago\", \"4d ago\", or a date. */\nexport function relativeTime(when: string | number | Date): string {\n const t = when instanceof Date ? when.getTime() : new Date(when).getTime();\n if (Number.isNaN(t)) return '';\n const diff = Date.now() - t;\n const m = Math.floor(diff / 60_000);\n if (m < 1) return 'now';\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n\n/**\n * Truncate a Bitcoin/Lightning address (or any long id) for display:\n * \"bc1qxy…wxyz\". Defaults match the family's most common rule (8 head / 4 tail).\n */\nexport function shortenAddress(value: string, head = 8, tail = 4): string {\n if (!value) return '';\n if (value.length <= head + tail + 1) return value;\n return `${value.slice(0, head)}…${value.slice(-tail)}`;\n}\n\nexport type ExplorerNetwork = 'mainnet' | 'testnet' | 'signet';\nexport type ExplorerTarget =\n | { address: string }\n | { tx: string }\n | { block: string | number };\n\n/** A mempool.space explorer URL for an address, tx, or block. */\nexport function explorerUrl(target: ExplorerTarget, network: ExplorerNetwork = 'mainnet'): string {\n const base =\n network === 'mainnet'\n ? 'https://mempool.space'\n : `https://mempool.space/${network}`;\n if ('address' in target) return `${base}/address/${target.address}`;\n if ('tx' in target) return `${base}/tx/${target.tx}`;\n return `${base}/block/${target.block}`;\n}\n","import { cn } from '../tokens/cn';\nimport { formatSats, satsToUsd } from '../format';\n\nexport interface SatsAmountProps {\n sats: number;\n /** Show the \"sats\" unit. Default true. */\n unit?: boolean;\n /** Append a muted USD conversion. Default false. */\n usd?: boolean;\n /** Override the reference BTC/USD rate for the USD conversion. */\n btcUsd?: number;\n className?: string;\n}\n\n/**\n * Canonical sats display: thousands-grouped, monospace, optional \"sats\" unit and\n * a muted USD conversion. The one true way to render an amount of sats across\n * the family (replaces scattered formatSats() + inline markup).\n */\nexport function SatsAmount({ sats, unit = true, usd = false, btcUsd, className }: SatsAmountProps) {\n return (\n <span className={cn('font-mono tabular-nums', className)}>\n {formatSats(sats)}\n {unit && <span className=\"text-muted-foreground\"> sats</span>}\n {usd && (\n <span className=\"text-muted-foreground\">\n {' · '}\n {satsToUsd(sats, btcUsd)}\n </span>\n )}\n </span>\n );\n}\n","'use client';\n\nimport { Check, Copy } from 'lucide-react';\nimport { useCallback, useRef, useState } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface CopyButtonProps {\n /** Text to copy. */\n value: string;\n /** Optional visible label beside the icon. */\n label?: string;\n /**\n * Auto-wipe the clipboard after N seconds if it still holds `value`\n * (secrets-manager behaviour, à la 1Password). 0/undefined = never wipe.\n */\n clearAfter?: number;\n size?: 'sm' | 'md';\n className?: string;\n title?: string;\n onCopied?: () => void;\n}\n\n/**\n * Copy-to-clipboard control with \"copied\" feedback and optional auto-wipe.\n * Canonical form of the copy buttons scattered across the family (wallet\n * panels, address displays, share sheets, secret reveals).\n */\nexport function CopyButton({\n value,\n label,\n clearAfter,\n size = 'md',\n className,\n title,\n onCopied,\n}: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n const resetRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const copy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n onCopied?.();\n if (resetRef.current) clearTimeout(resetRef.current);\n resetRef.current = setTimeout(() => setCopied(false), 1500);\n if (clearAfter && clearAfter > 0) {\n setTimeout(() => void wipeIfUnchanged(value), clearAfter * 1000);\n }\n } catch {\n /* clipboard unavailable — no-op */\n }\n }, [value, clearAfter, onCopied]);\n\n const iconSize = size === 'sm' ? 'size-3' : 'size-3.5';\n\n return (\n <button\n type=\"button\"\n onClick={copy}\n aria-label={title ?? (copied ? 'copied' : 'copy')}\n title={title ?? 'copy'}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5 rounded-sm transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n size === 'sm' ? 'text-[11px]' : 'text-xs',\n className\n )}\n >\n {copied ? (\n <Check className={cn(iconSize, 'text-success')} aria-hidden />\n ) : (\n <Copy className={iconSize} aria-hidden />\n )}\n {label && <span className=\"font-mono\">{copied ? 'copied' : label}</span>}\n </button>\n );\n}\n\nasync function wipeIfUnchanged(expected: string): Promise<void> {\n try {\n const current = await navigator.clipboard.readText();\n if (current !== expected) return;\n await navigator.clipboard.writeText('');\n } catch {\n try {\n await navigator.clipboard.writeText('');\n } catch {\n /* clipboard fully unavailable */\n }\n }\n}\n","import { cn } from '../tokens/cn';\nimport { shortenAddress } from '../format';\nimport { CopyButton } from './copy-button';\n\nexport interface BitcoinAddressProps {\n /** The full address (or any long id — Lightning, npub, did). */\n address: string;\n head?: number;\n tail?: number;\n /** Show a copy button that copies the FULL address. Default true. */\n copyable?: boolean;\n /** Render the full value untruncated. */\n full?: boolean;\n className?: string;\n}\n\n/**\n * Canonical truncated address display: monospace, `bc1qxy…wxyz`, with a copy\n * button that copies the full value. Replaces the per-site inline truncate+copy\n * patterns (IdentityChip, wallet panels, admin lists).\n */\nexport function BitcoinAddress({\n address,\n head = 8,\n tail = 4,\n copyable = true,\n full = false,\n className,\n}: BitcoinAddressProps) {\n return (\n <span className={cn('inline-flex items-center gap-1.5 font-mono text-xs', className)}>\n <span title={address}>{full ? address : shortenAddress(address, head, tail)}</span>\n {copyable && <CopyButton value={address} size=\"sm\" title=\"copy address\" />}\n </span>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport QRCode from 'qrcode';\n\nexport interface QrCodeProps {\n /** String to encode — Lightning invoices, BTC addresses, BIP-21 URIs all work. */\n value: string;\n /** Pixel size of the rendered SVG. Default 200. */\n size?: number;\n /** Accessible label for screen readers. */\n label?: string;\n className?: string;\n}\n\n/**\n * Client-side QR renderer (inline SVG via the `qrcode` package — no canvas, no\n * data-URI). Renders nothing during SSR; encodes on mount. Wrapped in role=\"img\"\n * with the supplied label. White quiet-zone background for reliable scanning in\n * any theme/mode.\n */\nexport function QrCode({ value, size = 200, label, className }: QrCodeProps) {\n const [svg, setSvg] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n QRCode.toString(value, {\n type: 'svg',\n errorCorrectionLevel: 'M',\n margin: 1,\n color: { dark: '#000000', light: '#ffffff' },\n })\n .then((out) => {\n if (!cancelled) setSvg(out);\n })\n .catch(() => {\n if (!cancelled) setSvg(null);\n });\n return () => {\n cancelled = true;\n };\n }, [value]);\n\n return (\n <div\n role=\"img\"\n aria-label={label ?? `QR code for ${value.slice(0, 24)}…`}\n className={'inline-block overflow-hidden rounded-md bg-white p-3 ' + (className ?? '')}\n style={{ width: size, height: size }}\n >\n {svg ? (\n <div\n className=\"size-full [&_svg]:block [&_svg]:size-full\"\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n ) : (\n <div className=\"bg-muted/40 size-full animate-pulse rounded\" aria-hidden />\n )}\n </div>\n );\n}\n","'use client';\n\nimport * as Popover from '@radix-ui/react-popover';\nimport { HelpCircle } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface HelpHintProps {\n /** The help body — short prose (1–3 sentences) explaining a term/control. */\n children: ReactNode;\n /** Optional bold \"§ \"-prefixed heading inside the popover. */\n title?: string;\n /** Which side the popover prefers to open toward. Default `top`. */\n side?: 'top' | 'right' | 'bottom' | 'left';\n /** `xs` tightens the icon for dense label rows; `sm` (default) suits most. */\n size?: 'xs' | 'sm';\n /** `subtle` mutes the \"?\" icon when it sits in a description / muted row;\n * `default` is primary-tinted for active labels. */\n tone?: 'default' | 'subtle';\n /** Accessible label for the trigger (defaults to \"what is this?\"). */\n label?: string;\n className?: string;\n}\n\n/**\n * HelpHint — the canonical inline \"?\" affordance for term-level guidance.\n * Click/focus reveals a small popover (Radix) with optional title + prose;\n * works on touch (not a hover tooltip). Lifted from oc-me-web's richer\n * `me/ui/HelpHint` (with `size`/`tone`), now the single source. Also the\n * keystone behind `SectionHeader`'s optional `hint`.\n */\nexport function HelpHint({\n children,\n title,\n side = 'top',\n size = 'sm',\n tone = 'default',\n label = 'what is this?',\n className,\n}: HelpHintProps) {\n const iconSize = size === 'xs' ? 12 : 14;\n return (\n <Popover.Root>\n <Popover.Trigger\n aria-label={label}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n 'focus-visible:ring-primary/60 inline-flex shrink-0 items-center justify-center rounded-full transition-colors outline-none focus-visible:ring-2',\n tone === 'subtle'\n ? 'text-muted-foreground hover:text-foreground/80'\n : 'text-primary/70 hover:text-primary',\n className\n )}\n >\n <HelpCircle size={iconSize} aria-hidden />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side={side}\n sideOffset={6}\n collisionPadding={12}\n className=\"border-border bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 z-50 max-w-xs rounded-md border p-3 text-xs leading-relaxed shadow-md outline-none\"\n >\n {title && <div className=\"label-mono text-primary mb-1.5\">§ {title}</div>}\n <div className=\"text-foreground/90\">{children}</div>\n <Popover.Arrow className=\"fill-popover\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { HelpHint } from './help-hint';\n\nexport interface SectionHeaderProps {\n /** Plain section name — rendered after a \"§ \" glyph in label-mono. */\n label: string;\n /** Optional right-side string (count, \"most recent first\"). */\n meta?: ReactNode;\n /** When provided, renders an inline HelpHint \"?\" next to the label. */\n hint?: { title?: string; body: ReactNode; side?: 'top' | 'bottom' | 'left' | 'right' };\n tone?: 'primary' | 'muted' | 'warning' | 'success' | 'destructive';\n className?: string;\n}\n\nconst TONE_CLASS = {\n primary: 'text-primary',\n muted: 'text-muted-foreground',\n warning: 'text-warning',\n success: 'text-success',\n destructive: 'text-destructive',\n} as const;\n\n/**\n * SectionHeader — the canonical \"§ x\" section header used across every\n * /me and /vault dashboard surfaces. Lifted from oc-me-web's\n * `me/ui/SectionHeader` so the visual contract stays single-source.\n *\n * Pattern is `label-mono text-primary mb-3` with a \"§ \" glyph followed by\n * the label, plus an optional muted/uppercase right-side meta string.\n */\nexport function SectionHeader({\n label,\n meta,\n hint,\n tone = 'primary',\n className = '',\n}: SectionHeaderProps) {\n return (\n <div className={`mb-3 flex items-baseline justify-between gap-2 ${className}`}>\n <div className=\"flex items-center gap-1.5\">\n <div className={`label-mono ${TONE_CLASS[tone]}`}>§ {label}</div>\n {hint && (\n <HelpHint title={hint.title} side={hint.side ?? 'bottom'}>\n {hint.body}\n </HelpHint>\n )}\n </div>\n {meta && (\n <span className=\"text-muted-foreground font-mono text-[10px] tracking-widest uppercase\">\n {meta}\n </span>\n )}\n </div>\n );\n}\n","import { ArrowLeft, Home, RefreshCw } from 'lucide-react';\nimport Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../primitives/button';\n\nexport type OcErrorVariant = 'not-found' | 'server-error';\n\nexport interface OcErrorPageProps {\n /**\n * Picks the defaults. `not-found` is the 404 shape (primary tone, a \"go\n * back\" affordance); `server-error` is the 500 shape (destructive tone, a\n * retry affordance and a what-to-do list).\n */\n variant?: OcErrorVariant;\n /** Override the big numeral. Defaults to 404 / 500 from the variant. */\n code?: number | string;\n /** Override the headline. Lowercase, per the family voice. */\n title?: string;\n /** Override the `//` prose line under the headline. */\n detail?: string;\n /**\n * A short \"what can you do\" list, rendered as the bordered mono panel.\n * Defaults to the server-error list; pass `[]` to suppress it.\n *\n * Items are nodes, not just strings, so one can carry a link — attest's\n * original 500 ended its list with \"persisting? report it on github\", and\n * a shared component that could not express that would have been a\n * downgrade for the site it was lifted from.\n */\n actions?: ReactNode[];\n /** Where \"go home\" points. A site with a app-scoped root can change it. */\n homeHref?: string;\n /** Extra content below the buttons — a report link, a status page, a hint. */\n children?: ReactNode;\n className?: string;\n}\n\nconst VARIANTS = {\n 'not-found': {\n code: 404,\n title: 'no such route',\n detail: \"the page you're looking for doesn't exist, or has been moved.\",\n tone: 'text-primary',\n label: 'not found',\n actions: [] as ReactNode[],\n },\n 'server-error': {\n code: 500,\n title: 'internal error',\n detail: 'something went wrong on our end.',\n tone: 'text-destructive',\n label: 'server error',\n actions: [\n 'try refreshing the page',\n 'wait a few minutes, try again',\n 'return home and start over',\n ] as ReactNode[],\n },\n} as const;\n\n/**\n * OcErrorPage — the family's 404 / 500 body.\n *\n * Nine of thirteen family sites had no error page at all and fell through to\n * Next's unstyled default: no header, no footer, no theme, none of the chrome\n * every other page on the site has. It is the one page a visitor is guaranteed\n * to reach eventually, and it was the only one that looked like a different\n * product.\n *\n * Lifted from `oc-attest-web`, which was the only site with a good one. It\n * lives here rather than being copied nine times because a copied page drifts —\n * that is the lesson of the family's `isFamilyUrl` predicate, where 14 of 15\n * hand-copied versions shared a flaw the 15th had already fixed.\n *\n * `Seo` stays with the consumer: the page's title and `noindex` are site\n * concerns and the design package has no business owning them. So a site's\n * `404.tsx` is its `<Seo>` plus `<OcErrorPage variant=\"not-found\" />`.\n *\n * The \"go back\" button uses `window.history.back()`, which needs a client\n * component — the consumer page carries `'use client'`, as Next requires for\n * any page with an interactive handler.\n */\nexport function OcErrorPage({\n variant = 'not-found',\n code,\n title,\n detail,\n actions,\n homeHref = '/',\n children,\n className = '',\n}: OcErrorPageProps) {\n const v = VARIANTS[variant];\n const shownCode = code ?? v.code;\n const shownActions = actions ?? [...v.actions];\n const isServerError = variant === 'server-error';\n\n return (\n <div\n className={`container flex min-h-[60vh] flex-col items-center justify-center ${className}`}\n >\n <div className=\"w-full max-w-xl\">\n <div className={`label-mono mb-4 ${v.tone}`}>\n § {shownCode} // {v.label}\n </div>\n <h1\n className={`font-display text-7xl font-bold tracking-tight tabular-nums sm:text-8xl ${v.tone}`}\n >\n {shownCode}\n </h1>\n <h2 className=\"font-display mt-2 text-2xl font-bold tracking-tight sm:text-3xl\">\n {title ?? v.title}\n </h2>\n <p className=\"text-muted-foreground mt-3 font-mono text-xs\">\n {'// '}\n {detail ?? v.detail}\n </p>\n\n {shownActions.length > 0 && (\n <div className=\"mt-8 border\">\n <div className=\"border-b px-4 py-2 font-mono text-[11px] tracking-widest uppercase\">\n what can you do\n </div>\n <ul className=\"divide-y font-mono text-xs\">\n {shownActions.map((a, i) => (\n // Index keys: items are nodes and the list is\n // static per variant, so there is nothing\n // better to key on and nothing reorders.\n <li key={i} className=\"px-4 py-2\">\n {'>> '}\n {a}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n <div className=\"mt-8 flex flex-wrap gap-3\">\n <Button asChild className=\"font-mono\">\n <Link href={homeHref}>\n <Home className=\"mr-2 h-3 w-3\" />\n <span className=\"text-[11px] tracking-widest uppercase\">go home</span>\n </Link>\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => {\n if (typeof window === 'undefined') return;\n if (isServerError) window.location.reload();\n else window.history.back();\n }}\n className=\"font-mono\"\n >\n {isServerError ? (\n <RefreshCw className=\"mr-2 h-3 w-3\" />\n ) : (\n <ArrowLeft className=\"mr-2 h-3 w-3\" />\n )}\n <span className=\"text-[11px] tracking-widest uppercase\">\n {isServerError ? 'retry' : 'go back'}\n </span>\n </Button>\n </div>\n\n {children && <div className=\"mt-6\">{children}</div>}\n </div>\n </div>\n );\n}\n","import Link from 'next/link';\nimport type { ReactNode } from 'react';\n\nexport interface EmptyStateCta {\n label: string;\n href: string;\n /** External links open in a new tab and get a ↗ glyph. */\n external?: boolean;\n}\n\nexport interface EmptyStateProps {\n /** Short heading — one mono-uppercased label like \"no entries yet\". */\n label: string;\n /** Body — short prose explaining what would appear here and how. */\n children: ReactNode;\n cta?: EmptyStateCta;\n secondary?: EmptyStateCta;\n tone?: 'info' | 'warning' | 'muted';\n className?: string;\n}\n\nconst TONE_CLASS = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n muted: 'border-border bg-muted/20',\n} as const;\n\nconst LABEL_TONE_CLASS = {\n info: 'text-primary',\n warning: 'text-warning',\n muted: 'text-muted-foreground',\n} as const;\n\n/**\n * EmptyState — the canonical empty-state card used across every /me,\n * and /vault dashboards. Empty states should *teach*: explain what\n * would appear, and how to make it appear. Lifted from oc-me-web's\n * `me/ui/EmptyState`.\n */\nexport function EmptyState({\n label,\n children,\n cta,\n secondary,\n tone = 'info',\n className = '',\n}: EmptyStateProps) {\n return (\n <div className={`border p-5 md:p-6 ${TONE_CLASS[tone]} ${className}`}>\n <div className={`label-mono mb-2 ${LABEL_TONE_CLASS[tone]}`}>§ {label}</div>\n <div className=\"text-foreground/85 max-w-2xl text-sm leading-relaxed\">{children}</div>\n {(cta || secondary) && (\n <div className=\"mt-4 flex flex-wrap gap-3\">\n {cta && <CtaLink {...cta} variant=\"primary\" />}\n {secondary && <CtaLink {...secondary} variant=\"secondary\" />}\n </div>\n )}\n </div>\n );\n}\n\nfunction CtaLink({\n label,\n href,\n external,\n variant,\n}: EmptyStateCta & { variant: 'primary' | 'secondary' }) {\n const cls =\n variant === 'primary'\n ? 'bg-primary text-primary-foreground hover:bg-primary/90 inline-flex h-9 items-center justify-center rounded-md px-4 font-mono text-[11px] font-semibold tracking-widest uppercase'\n : 'text-muted-foreground hover:text-foreground border-input hover:bg-accent inline-flex h-9 items-center justify-center rounded-md border px-4 font-mono text-[11px] tracking-widest uppercase';\n const text = external ? `${label} ↗` : label;\n if (external) {\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className={cls}>\n {text}\n </a>\n );\n }\n return (\n <Link href={href} className={cls}>\n {text}\n </Link>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface StatItem {\n /** Short uppercased label rendered in mono. */\n label: string;\n /** Primary value · already formatted as a string. */\n value: string;\n /** Optional secondary line · USD conversion, \"last 30 days\", etc. */\n sub?: string;\n /** When true, value is rendered in primary tone (use for headline metric). */\n accent?: boolean;\n /** Optional tone for the value (overrides accent). */\n tone?: 'default' | 'primary' | 'success' | 'warning' | 'destructive' | 'muted';\n}\n\nexport interface StatGridProps {\n items: StatItem[];\n columns?: 1 | 2 | 3 | 4;\n className?: string;\n}\n\nconst TONE_CLASS = {\n default: '',\n primary: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n} as const;\n\nconst COL_CLASS = {\n 1: '',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n} as const;\n\n/**\n * StatGrid — the canonical stats row used across family dashboards.\n * Lifted from oc-me-web's `me/ui/StatGrid`. Grid of equal-width tiles\n * separated by 1px borders. Always pre-format the value string —\n * the component does no number formatting.\n */\nexport function StatGrid({ items, columns = 3, className = '' }: StatGridProps) {\n return (\n <div className={`oc-stat-grid bg-border grid gap-px border ${COL_CLASS[columns]} ${className}`}>\n {items.map((it, i) => (\n <Tile key={`${it.label}-${i}`} item={it} />\n ))}\n </div>\n );\n}\n\nfunction Tile({ item }: { item: StatItem }) {\n const tone = item.tone ?? (item.accent ? 'primary' : 'default');\n return (\n <div className=\"oc-stat-tile bg-background p-5\">\n <div className=\"text-muted-foreground font-mono text-[10px] tracking-widest uppercase\">\n {item.label}\n </div>\n <div\n className={`font-display mt-1 text-2xl font-bold tabular-nums tracking-tight ${TONE_CLASS[tone]}`}\n >\n {item.value}\n </div>\n {item.sub && (\n <div className=\"text-muted-foreground mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {item.sub}\n </div>\n )}\n </div>\n );\n}\n\nexport function StatTile({ children, ...item }: StatItem & { children?: ReactNode }) {\n return (\n <div>\n <Tile item={item} />\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { StatBlock } from '../primitives/stat-block';\nimport { cn } from '../tokens/cn';\n\nexport interface StatCardProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional period-over-period delta arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n /** Padding density — `sm` for dense grids, `default` for standalone cards. */\n pad?: 'sm' | 'default';\n className?: string;\n}\n\n/**\n * StatCard — a single stat in a bordered `bg-card` frame. The standalone\n * counterpart to StatBlock (the bare cell) and StatGrid (a laid-out grid):\n * this is the \"one stat in its own card\" shape that the dashboards\n * and me (`StatCell`, `ParticipationFeeCard` tiles, etc.) each hand-roll.\n * Wraps StatBlock so the inner cell stays single-source.\n */\nexport function StatCard({ pad = 'default', className, ...stat }: StatCardProps) {\n return (\n <div className={cn('oc-stat-card border bg-card', pad === 'sm' ? 'p-3 md:p-4' : 'p-5', className)}>\n <StatBlock {...stat} />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport type CalloutTone = 'info' | 'warning' | 'destructive' | 'success' | 'muted';\n\nexport interface CalloutProps {\n tone?: CalloutTone;\n /** Optional \"§ \"-prefixed mono header. */\n label?: string;\n /** Optional leading icon, sized by the caller (e.g. lucide `size-4`). */\n icon?: ReactNode;\n /** Body content. */\n children: ReactNode;\n /** Optional trailing action (button / link) pinned to the bottom. */\n action?: ReactNode;\n className?: string;\n}\n\nconst FRAME: Record<CalloutTone, string> = {\n info: 'border-primary/30 bg-primary/5',\n warning: 'border-warning/40 bg-warning/5',\n destructive: 'border-destructive/40 bg-destructive/5',\n success: 'border-success/40 bg-success/5',\n muted: 'border-border bg-muted/20',\n};\n\nconst LABEL: Record<CalloutTone, string> = {\n info: 'text-primary',\n warning: 'text-warning',\n destructive: 'text-destructive',\n success: 'text-success',\n muted: 'text-muted-foreground',\n};\n\n/**\n * Callout — the canonical toned panel (`border-{tone}/40 bg-{tone}/5` + an\n * optional `label-mono` header) reimplemented across stamp, pledge, vote,\n * analytics, and me (HealthBanner / SimulationBanner / FrozenBanner /\n * DangerZone, etc.). One component, five tones. For empty-states with CTAs use\n * EmptyState; for inline term help use HelpHint; this is the general\n * notice/banner frame.\n */\nexport function Callout({ tone = 'info', label, icon, children, action, className }: CalloutProps) {\n return (\n <div className={cn('border p-4 md:p-5', FRAME[tone], className)}>\n {label && (\n <div className={cn('label-mono mb-2 flex items-center gap-1.5', LABEL[tone])}>\n {icon}\n <span>§ {label}</span>\n </div>\n )}\n <div className=\"text-foreground/85 text-sm leading-relaxed\">\n {!label && icon ? (\n <span className={cn('mr-2 inline-flex align-middle', LABEL[tone])}>{icon}</span>\n ) : null}\n {children}\n </div>\n {action && <div className=\"mt-3 flex flex-wrap gap-3\">{action}</div>}\n </div>\n );\n}\n","import { Fragment, type ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface DefinitionItem {\n label: ReactNode;\n value: ReactNode;\n}\n\nexport interface DefinitionListProps {\n items: DefinitionItem[];\n className?: string;\n}\n\n/**\n * DefinitionList — the mono-label / value `<dl>` grid reimplemented in agent's\n * inspector, vote's reveal page, and me (BondAnchorCard, OperatorIdentityCard,\n * FrozenBanner). Labels render in uppercase mono; values align in a second\n * column on wider viewports, stacking on narrow ones. Long values (hashes,\n * addresses) wrap via `break-all`.\n */\nexport function DefinitionList({ items, className }: DefinitionListProps) {\n return (\n <dl\n className={cn(\n 'oc-deflist grid gap-x-5 gap-y-2 text-sm sm:grid-cols-[auto_1fr] sm:items-baseline',\n className\n )}\n >\n {items.map((item, i) => (\n <Fragment key={i}>\n <dt className=\"label-mono text-muted-foreground text-[10px]\">{item.label}</dt>\n <dd className=\"text-foreground font-mono text-xs break-all\">{item.value}</dd>\n </Fragment>\n ))}\n </dl>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface DataRowProps {\n /** Primary content (left-aligned, grows to fill). */\n children: ReactNode;\n /** Trailing metadata pinned right (timestamp, count, status pill). */\n meta?: ReactNode;\n /** Optional action(s) rendered after the meta (button, link). */\n action?: ReactNode;\n /** Element to render as — `li` inside a list, `div` otherwise. */\n as?: ElementType;\n className?: string;\n}\n\n/**\n * DataRow — the \"content left, meta right, optional action\" list row\n * reimplemented across me (federations, incidents, grants, distributions,\n * fee entries) and other dashboards. Pair inside a `divide-y border` list.\n * On narrow viewports content and meta stack; from `sm` up they sit on one\n * baseline-aligned line.\n */\nexport function DataRow({ children, meta, action, as, className }: DataRowProps) {\n const Tag = (as ?? 'div') as ElementType;\n return (\n <Tag\n className={cn(\n 'oc-data-row flex flex-col gap-1 py-3 sm:flex-row sm:items-baseline sm:justify-between sm:gap-4',\n className\n )}\n >\n <div className=\"min-w-0 flex-1\">{children}</div>\n {(meta || action) && (\n <div className=\"flex shrink-0 items-center gap-3 sm:justify-end\">\n {meta && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide\">\n {meta}\n </span>\n )}\n {action}\n </div>\n )}\n </Tag>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface PanelProps {\n /** Mono kicker shown above the title (e.g. \"attestations\"). Rendered uppercase. */\n label?: ReactNode;\n /** Section title. */\n title?: ReactNode;\n /** Optional trailing control (a button, link, count) pinned right of the header. */\n action?: ReactNode;\n /** Drop the top divider (use for the first panel in a stack). */\n flush?: boolean;\n className?: string;\n children?: ReactNode;\n}\n\n/**\n * Panel (DataSection) — the titled section that carries a chunk of a\n * data-dense / technical page (telemetry blocks, API sections, dashboard\n * groups). THEME-ADAPTIVE by design: under the cypherpunk skins it is a\n * flat full-width `border-t` divider section (terminal voice); under ember\n * the `.oc-panel` class promotes it to a discrete soft, warm, rounded card\n * (see the data-dense treatments in themes/ember.css). Compose these instead\n * of hand-rolling `border-t py-8` sections so subpages re-skin per theme.\n */\nexport function Panel({ label, title, action, flush, className, children }: PanelProps) {\n const hasHeader = label || title || action;\n return (\n <section className={cn('oc-panel py-8', !flush && 'border-t', className)}>\n {hasHeader && (\n <div className=\"mb-4 flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n {label && <div className=\"label-mono text-primary mb-1\">{label}</div>}\n {title && (\n <h2 className=\"font-display text-lg font-bold tracking-tight\">{title}</h2>\n )}\n </div>\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n )}\n {children}\n </section>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * marketing-heading — the two-tone display heading used across consumer\n * landing sections. TwoToneHeading renders a solid lead clause followed by a\n * recoloured muted clause at the same size/weight; MarketingHeading wraps it\n * with an optional mono eyebrow and body paragraph. Use onBrand when it sits\n * on a brand/dark band.\n */\n\nexport interface TwoToneHeadingProps {\n lead: ReactNode;\n muted?: ReactNode;\n as?: ElementType;\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport function TwoToneHeading({\n lead,\n muted,\n as,\n tone = 'default',\n className,\n}: TwoToneHeadingProps) {\n const Tag = as ?? 'h2';\n const leadColor = tone === 'onBrand' ? 'text-primary-foreground' : 'text-foreground';\n // Lighter, cleaner muted clause so the two-tone contrast reads (matches the\n // designer's light-gray second phrase, not a heavy taupe). On a brand band\n // /60 fell below AA-large (~2.5:1); /75 keeps the two-tone read while staying\n // legible on terracotta.\n const mutedColor = tone === 'onBrand' ? 'text-primary-foreground/75' : 'text-foreground/40';\n return (\n <Tag\n className={cn(\n 'font-extrabold tracking-[-0.02em] leading-[1.0] text-balance',\n 'text-3xl sm:text-4xl md:text-5xl',\n leadColor,\n className,\n )}\n >\n <span>{lead}</span>\n {muted ? <span className={mutedColor}> {muted}</span> : null}\n </Tag>\n );\n}\n\nexport interface MarketingHeadingProps {\n eyebrow?: string;\n lead: ReactNode;\n muted?: ReactNode;\n body?: ReactNode;\n align?: 'start' | 'center';\n tone?: 'default' | 'onBrand';\n as?: ElementType;\n className?: string;\n}\n\nexport function MarketingHeading({\n eyebrow,\n lead,\n muted,\n body,\n align = 'start',\n tone = 'default',\n as,\n className,\n}: MarketingHeadingProps) {\n const centered = align === 'center';\n return (\n <div className={cn('flex flex-col', centered && 'items-center text-center', className)}>\n {eyebrow && (\n <p\n className={cn(\n 'label-mono mb-3',\n tone === 'onBrand' ? 'text-primary-foreground/80' : 'text-primary',\n )}\n >\n {eyebrow}\n </p>\n )}\n <TwoToneHeading\n lead={lead}\n muted={muted}\n as={as}\n tone={tone}\n className={cn('max-w-4xl', centered && 'mx-auto')}\n />\n {body && (\n <p\n className={cn(\n 'mt-4 max-w-2xl text-base sm:text-lg',\n tone === 'onBrand' ? 'text-primary-foreground/80' : 'text-muted-foreground',\n centered && 'mx-auto',\n )}\n >\n {body}\n </p>\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface FeatureCardProps {\n /** Optional leading glyph — a lucide icon sized by IconBadge. */\n icon?: ReactNode;\n iconTone?: 'peach' | 'dark' | 'brand' | 'onBrand' | 'muted' | 'surface';\n title: ReactNode;\n children?: ReactNode;\n orientation?: 'vertical' | 'horizontal';\n align?: 'start' | 'center';\n tone?: 'default' | 'muted' | 'onBrand';\n elevation?: 'none' | 'sm' | 'md' | 'lg';\n className?: string;\n}\n\n/**\n * FeatureCard — the soft Surface tile that carries a feature: an IconBadge, a\n * title, and a line of body copy. The marketing-grid workhorse. Stack them\n * vertically in a feature grid, or go horizontal for a tighter list row.\n */\nexport function FeatureCard({\n icon,\n iconTone = 'peach',\n title,\n children,\n orientation = 'vertical',\n align = 'start',\n tone = 'default',\n elevation = 'sm',\n className,\n}: FeatureCardProps) {\n const horizontal = orientation === 'horizontal';\n const centered = !horizontal && align === 'center';\n\n return (\n <Surface\n tone={tone}\n elevation={elevation}\n pad={horizontal ? 'md' : 'lg'}\n className={cn(\n 'flex h-full',\n horizontal ? 'flex-row gap-4' : 'flex-col',\n centered && 'items-center text-center',\n className\n )}\n >\n {icon && (\n <IconBadge\n tone={iconTone}\n size=\"lg\"\n className={cn(horizontal ? 'shrink-0' : 'mb-4')}\n >\n {icon}\n </IconBadge>\n )}\n <div className={cn(horizontal && 'min-w-0')}>\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {children && (\n <p className=\"text-muted-foreground mt-1.5 text-sm leading-relaxed\">\n {children}\n </p>\n )}\n </div>\n </Surface>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface SectionProps {\n /** Background band: neutral page, recessed gray, brand fill, or a forced-dark band on a light page. */\n tone?: 'default' | 'muted' | 'brand' | 'dark';\n /** Inner width: centered container, wide max-w-screen-2xl, or full-bleed. */\n width?: 'default' | 'wide' | 'full';\n /** Diagonal texture overlay; defaults on only for tone='brand'. */\n diagonal?: boolean;\n id?: string;\n className?: string;\n innerClassName?: string;\n children: ReactNode;\n}\n\nconst TONE: Record<NonNullable<SectionProps['tone']>, string> = {\n default: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n brand: 'bg-brand text-brand-foreground',\n // `dark` activates the .dark variant locally so descendant package\n // components render their dark arm even on an otherwise light page.\n dark: 'dark bg-background text-foreground',\n};\n\nconst WIDTH: Record<NonNullable<SectionProps['width']>, string> = {\n default: 'container',\n wide: 'mx-auto w-full max-w-screen-2xl px-4 sm:px-6 lg:px-8',\n full: '',\n};\n\n/**\n * Section — the full-bleed marketing band: a tone-routed background stripe with\n * vertical rhythm and a width-capped inner. Stack these to build a landing page;\n * use tone='dark' to force a dark band on a light page. BrandBand is the\n * brand-tone shorthand.\n */\nexport function Section({\n tone = 'default',\n width = 'default',\n diagonal,\n id,\n className,\n innerClassName,\n children,\n}: SectionProps) {\n const showDiagonal = diagonal ?? tone === 'brand';\n return (\n <div\n id={id}\n className={cn('w-full', TONE[tone], showDiagonal && 'oc-diagonal', className)}\n >\n <div className={cn('py-16 sm:py-20 md:py-24', WIDTH[width], innerClassName)}>\n {children}\n </div>\n </div>\n );\n}\n\n/** BrandBand — Section pinned to the brand tone. */\nexport function BrandBand(props: SectionProps) {\n return <Section tone=\"brand\" {...props} />;\n}\n","import type { ReactNode } from 'react';\n\nimport { Check, X } from 'lucide-react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface ComparisonRow {\n label: ReactNode;\n theirs: ReactNode;\n ours: ReactNode;\n}\n\nexport interface ComparisonTableProps {\n rows: ComparisonRow[];\n columns?: { feature?: string; theirs: string; ours: string };\n className?: string;\n}\n\n/**\n * ComparisonTable — a two-column \"them vs us\" feature matrix for marketing pages.\n * the ours column is tinted (bg-accent/40) and its checks read text-primary; the\n * theirs column reads muted with X glyphs. skin-agnostic, scrolls on small screens.\n */\nexport function ComparisonTable({ rows, columns, className }: ComparisonTableProps) {\n const cols = { feature: '', theirs: 'A normal login', ours: 'OrangeCheck', ...columns };\n return (\n <div className={cn('overflow-hidden rounded-xl border', className)}>\n <div className=\"overflow-x-auto\">\n <div className=\"min-w-[32rem]\">\n <div className=\"grid grid-cols-[1.4fr_1fr_1fr]\">\n <div className=\"label-mono text-muted-foreground px-4 py-3.5 sm:px-6\">\n {cols.feature}\n </div>\n <div className=\"px-4 py-3.5 font-semibold text-foreground sm:px-6\">\n {cols.theirs}\n </div>\n <div className=\"bg-accent/60 border-border/60 border-l px-4 py-3.5 font-semibold text-primary sm:px-6\">\n {cols.ours}\n </div>\n </div>\n {rows.map((row, i) => (\n <div key={i} className=\"grid grid-cols-[1.4fr_1fr_1fr] border-t\">\n <div className=\"px-4 py-3.5 font-medium text-foreground sm:px-6\">\n {row.label}\n </div>\n <div className=\"text-muted-foreground flex items-center gap-2 px-4 py-3.5 sm:px-6\">\n <X className=\"text-muted-foreground size-4\" />\n <span>{row.theirs}</span>\n </div>\n <div className=\"bg-accent/40 border-border/60 flex items-center gap-2 border-l px-4 py-3.5 text-foreground sm:px-6\">\n <Check className=\"size-4 text-primary\" />\n <span>{row.ours}</span>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\n/**\n * NumberedStep / StepList — the marketing \"how it works\" sequence: a peach\n * numbered tile, a title, and a short body, laid out in a responsive grid.\n * Use for 2–4 step walkthroughs on a landing page; pass tone='onBrand' when\n * the list sits on a terracotta band.\n */\n\nexport interface Step {\n title: ReactNode;\n children?: ReactNode;\n}\n\nexport interface NumberedStepProps {\n n: number;\n title: ReactNode;\n children?: ReactNode;\n tone?: 'default' | 'onBrand';\n card?: boolean;\n className?: string;\n}\n\nexport function NumberedStep({\n n,\n title,\n children,\n tone = 'default',\n card = false,\n className,\n}: NumberedStepProps) {\n const onBrand = tone === 'onBrand';\n const body = (\n <div className={cn(!card && className)}>\n <IconBadge tone={onBrand ? 'onBrand' : 'peach'} size=\"sm\">\n {n}\n </IconBadge>\n <div className=\"mt-4 text-lg font-semibold\">{title}</div>\n {children && (\n <div\n className={cn(\n 'mt-1.5 text-sm leading-relaxed',\n onBrand ? 'text-brand-foreground/80' : 'text-muted-foreground'\n )}\n >\n {children}\n </div>\n )}\n </div>\n );\n\n if (!card) return body;\n\n return (\n <Surface\n tone={onBrand ? 'onBrand' : 'default'}\n elevation={onBrand ? 'none' : 'sm'}\n pad=\"md\"\n className={className}\n >\n {body}\n </Surface>\n );\n}\n\nexport interface StepListProps {\n steps: Step[];\n variant?: 'bare' | 'card';\n tone?: 'default' | 'onBrand';\n columns?: 2 | 3 | 4;\n className?: string;\n}\n\nconst COLUMNS: Record<2 | 3 | 4, string> = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n};\n\nexport function StepList({\n steps,\n variant = 'bare',\n tone = 'default',\n columns = 3,\n className,\n}: StepListProps) {\n return (\n <div className={cn('grid gap-6 sm:grid-cols-2 sm:gap-8', COLUMNS[columns], className)}>\n {steps.map((step, index) => (\n <NumberedStep\n key={index}\n n={index + 1}\n title={step.title}\n tone={tone}\n card={variant === 'card'}\n >\n {step.children}\n </NumberedStep>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface FaqItem {\n q: ReactNode;\n a: ReactNode;\n}\n\nexport interface FaqProps {\n items: FaqItem[];\n /** Index of the item open on first render; omit for all collapsed. */\n defaultOpen?: number;\n className?: string;\n}\n\n/**\n * Faq — a plus/minus accordion list of question/answer pairs for the bottom of\n * a marketing page. single-open, collapsible. re-skins via the underlying\n * Accordion primitive.\n */\nexport function Faq({ items, defaultOpen, className }: FaqProps) {\n return (\n <Accordion\n type=\"single\"\n collapsible\n defaultValue={defaultOpen != null ? String(defaultOpen) : undefined}\n className={cn('w-full', className)}\n >\n {items.map((item, i) => (\n <AccordionItem key={i} value={String(i)}>\n <AccordionTrigger\n icon=\"plusMinus\"\n className=\"text-foreground text-base font-semibold\"\n >\n {item.q}\n </AccordionTrigger>\n <AccordionContent className=\"text-muted-foreground leading-relaxed\">\n {item.a}\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Button, Input } from '../primitives';\n\nexport interface EmailCaptureProps {\n /** Native form action (e.g. a serverless handler or list endpoint). */\n action?: string;\n /** Native form method. */\n method?: string;\n /** Client-side submit handler — preventDefault yourself if intercepting. */\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n /** Input name attribute. */\n name?: string;\n placeholder?: string;\n /** Submit button label. */\n cta?: ReactNode;\n /** Small reassurance line under the row (e.g. \"no spam, unsubscribe anytime\"). */\n note?: ReactNode;\n /** `onBrand` for placement on a terracotta/dark band. */\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\n/**\n * EmailCapture — the inline waitlist / newsletter row: a pill email field plus a\n * pill submit, with an optional fine-print note. drop it in a hero or footer\n * band; `tone='onBrand'` flips the field translucent + button white for dark\n * brand bands.\n */\nexport function EmailCapture({\n action,\n method,\n onSubmit,\n name = 'email',\n placeholder = 'you@email.com',\n cta = 'Join the waitlist',\n note,\n tone = 'default',\n className,\n}: EmailCaptureProps) {\n const onBrand = tone === 'onBrand';\n return (\n <form action={action} method={method} onSubmit={onSubmit} className={cn(className)}>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <Input\n type=\"email\"\n name={name}\n required\n placeholder={placeholder}\n className={cn(\n 'rounded-full text-base md:text-sm',\n onBrand &&\n '[background:color-mix(in_oklch,white_18%,transparent)] placeholder:text-primary-foreground/60 border-transparent text-primary-foreground'\n )}\n />\n <Button type=\"submit\" variant={onBrand ? 'onBrand' : 'default'} className=\"rounded-full\">\n {cta}\n </Button>\n </div>\n {note && (\n <p\n className={cn(\n 'mt-3 text-sm',\n onBrand ? 'text-primary-foreground/70' : 'text-muted-foreground'\n )}\n >\n {note}\n </p>\n )}\n </form>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Check } from 'lucide-react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface CheckListProps {\n /** Each item: a check glyph + this label. */\n items: ReactNode[];\n orientation?: 'horizontal' | 'vertical';\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\n/**\n * CheckList — a compact run of checkmarked points. use horizontal under a hero\n * or CTA for an inline \"what you get\" row; vertical for a small feature stack.\n * `tone=\"onBrand\"` when it sits on a brand/dark band.\n */\nexport function CheckList({\n items,\n orientation = 'horizontal',\n tone = 'default',\n className,\n}: CheckListProps) {\n const glyph = tone === 'onBrand' ? 'text-brand-foreground' : 'text-primary';\n const label = tone === 'onBrand' ? 'text-brand-foreground/90' : 'text-foreground';\n\n return (\n <ul\n className={cn(\n orientation === 'horizontal'\n ? 'flex flex-wrap gap-x-6 gap-y-2 text-sm'\n : 'flex flex-col gap-2 text-sm',\n className\n )}\n >\n {items.map((item, i) => (\n <li key={i} className={cn('inline-flex items-center gap-2', label)}>\n <Check className={cn('size-4 shrink-0', glyph)} />\n {item}\n </li>\n ))}\n </ul>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * AccentNote — a left-bar aside for a single emphasized line of copy. Use for a\n * caveat, footnote, or pull-quote beside body text. AccentList is the stepped\n * variant: a vertical stack of titled items with one \"active\" entry expanded.\n * Both are skin-agnostic — token colors only — and re-skin per skin + mode.\n */\n\nexport interface AccentNoteProps {\n /** Optional bold lead phrase rendered inline before the body. */\n lead?: ReactNode;\n children: ReactNode;\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport function AccentNote({ lead, children, tone = 'default', className }: AccentNoteProps) {\n const onBrand = tone === 'onBrand';\n return (\n <div\n className={cn(\n 'border-l-2 pl-4 text-sm leading-relaxed',\n onBrand\n ? 'border-primary-foreground/60 text-primary-foreground/80'\n : 'border-primary text-muted-foreground',\n className,\n )}\n >\n {lead && (\n <strong\n className={cn(\n 'mr-1.5 font-semibold',\n onBrand ? 'text-primary-foreground' : 'text-foreground',\n )}\n >\n {lead}\n </strong>\n )}\n {children}\n </div>\n );\n}\n\nexport interface AccentListItem {\n title: ReactNode;\n children?: ReactNode;\n active?: boolean;\n}\n\nexport interface AccentListProps {\n items: AccentListItem[];\n className?: string;\n}\n\nexport function AccentList({ items, className }: AccentListProps) {\n return (\n <div className={cn('flex flex-col', className)}>\n {items.map((item, i) => (\n <div\n key={i}\n className={cn('border-l-2 py-2 pl-5', item.active ? 'border-primary' : 'border-border')}\n >\n <div\n className={cn(\n 'font-semibold',\n item.active ? 'text-foreground' : 'text-muted-foreground',\n )}\n >\n {item.title}\n </div>\n {item.active && item.children && (\n <div className=\"text-muted-foreground mt-1 text-sm leading-relaxed\">\n {item.children}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Check } from 'lucide-react';\n\nimport { IconBadge, Surface } from '../primitives';\nimport { cn } from '../tokens/cn';\n\nexport interface VerifiedChipProps {\n /** Leading glyph; defaults to a lucide Check. */\n icon?: ReactNode;\n /** Tone of the icon tile. */\n iconTone?: 'peach' | 'dark' | 'brand' | 'onBrand' | 'muted';\n /** Short trust phrase, e.g. \"verified on bitcoin\". */\n label: ReactNode;\n className?: string;\n}\n\n/**\n * VerifiedChip — a small floating trust chip (icon tile + short label) on a soft\n * elevated pill. drop it over a hero or card edge to mark something as verified.\n */\nexport function VerifiedChip({ icon, iconTone = 'peach', label, className }: VerifiedChipProps) {\n return (\n <Surface\n elevation=\"lg\"\n pad=\"none\"\n className={cn('inline-flex items-center gap-3 rounded-full px-3 py-2', className)}\n >\n <IconBadge tone={iconTone} size=\"sm\">\n {icon ?? <Check />}\n </IconBadge>\n <span className=\"pr-2 text-sm font-semibold text-foreground\">{label}</span>\n </Surface>\n );\n}\n","import { cn } from '../tokens/cn';\n\n/**\n * Acknowledgement — the credit line every landing page carries in its\n * bottom-CTA section, crediting Bram Kanstein for the \"Bitcoin as sovereignty\n * layer\" lineage the whole family is built on.\n *\n * It is a component rather than seven copies of a `<p>` because it was seven\n * different things: four sites had no credit at all, and the three that did\n * disagreed on wording, placement and weight — one in the hero as a bare icon\n * link, one in the footer at 10px and 40% opacity. An attribution that is\n * technically present but unreadable is not an attribution.\n *\n * `tone=\"onBrand\"` for the usual case: a bottom CTA sits on a BrandBand.\n */\n\nexport interface AcknowledgementProps {\n /** Match the surface it sits on. A bottom CTA is normally a BrandBand. */\n tone?: 'default' | 'onBrand';\n className?: string;\n}\n\nexport const ACKNOWLEDGEMENT_URL = 'https://bramk.substack.com/';\nexport const ACKNOWLEDGEMENT_NAME = 'bram kanstein';\n\nexport function Acknowledgement({ tone = 'default', className }: AcknowledgementProps) {\n const onBrand = tone === 'onBrand';\n return (\n <p\n className={cn(\n 'mx-auto max-w-[52ch] font-mono text-xs leading-relaxed',\n onBrand ? 'text-brand-foreground/70' : 'text-muted-foreground',\n className,\n )}\n >\n with thanks to{' '}\n <a\n href={ACKNOWLEDGEMENT_URL}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn(\n 'underline decoration-dotted underline-offset-2 transition-colors',\n onBrand ? 'hover:text-brand-foreground' : 'hover:text-foreground',\n )}\n >\n {ACKNOWLEDGEMENT_NAME}\n </a>{' '}\n — whose work on bitcoin as sovereignty layer shaped the premise.\n </p>\n );\n}\n","import { Boxes, Check, ChevronDown } from 'lucide-react';\nimport Link from 'next/link';\nimport { useEffect, useRef, useState } from 'react';\n\n/**\n * EcosystemSwitcher — cross-product dropdown for jumping between every\n * site in the OrangeCheck family. Drop one into every site's LayoutHeader\n * and mark the active site via the `current` prop.\n *\n * <EcosystemSwitcher current=\"lock\" />\n *\n * The component is dependency-self-contained: no Radix, no Headless UI,\n * just outside-click + Escape handling so it works identically in every\n * site without forcing a peer-dep upgrade. Every link stays in-tab — the\n * family is one app from the user's POV.\n */\n\nexport type EcosystemSlug =\n | 'home'\n | 'docs'\n | 'me'\n | 'vault'\n | 'chat'\n | 'cosign'\n | 'btc'\n | 'globe'\n | 'attest'\n | 'lock'\n | 'vote'\n | 'stamp'\n | 'agent'\n | 'pledge'\n | 'analytics'\n | 'bot'\n | 'forge';\n\ninterface SwitcherEntry {\n slug: EcosystemSlug;\n href: string;\n label: string;\n sub: string;\n docsHref: string;\n}\n\nconst ENTRIES: SwitcherEntry[] = [\n {\n slug: 'home',\n href: 'https://ochk.io',\n label: 'orangecheck',\n sub: 'umbrella',\n docsHref: 'https://docs.ochk.io',\n },\n {\n slug: 'docs',\n href: 'https://docs.ochk.io',\n label: 'oc·docs',\n sub: 'unified docs',\n docsHref: 'https://docs.ochk.io',\n },\n {\n slug: 'me',\n href: 'https://me.ochk.io',\n label: 'oc·me',\n sub: 'earn — consumer identity',\n docsHref: 'https://docs.ochk.io/me',\n },\n {\n slug: 'vault',\n href: 'https://vault.ochk.io',\n label: 'oc·vault',\n sub: 'keep — encrypted secrets',\n docsHref: 'https://docs.ochk.io/vault',\n },\n {\n slug: 'chat',\n href: 'https://chat.ochk.io',\n label: 'oc·chat',\n sub: 'message — encrypted chat',\n docsHref: 'https://docs.ochk.io/chat',\n },\n {\n slug: 'cosign',\n href: 'https://cosign.ochk.io',\n label: 'oc·cosign',\n sub: 'cofound — get behind builders',\n docsHref: 'https://docs.ochk.io/cosign',\n },\n {\n slug: 'btc',\n href: 'https://btc.ochk.io',\n label: 'oc·btc',\n sub: 'read — bitcoin desk',\n docsHref: 'https://btc.ochk.io/data',\n },\n {\n slug: 'globe',\n href: 'https://globe.ochk.io',\n label: 'oc·globe',\n sub: 'watch — the network, live',\n docsHref: 'https://globe.ochk.io/sources',\n },\n {\n slug: 'attest',\n href: 'https://attest.ochk.io',\n label: 'oc·attest',\n sub: 'am — sybil resistance',\n docsHref: 'https://docs.ochk.io/attest',\n },\n {\n slug: 'lock',\n href: 'https://lock.ochk.io',\n label: 'oc·lock',\n sub: 'whisper — encryption',\n docsHref: 'https://docs.ochk.io/lock',\n },\n {\n slug: 'vote',\n href: 'https://vote.ochk.io',\n label: 'oc·vote',\n sub: 'decide — polls',\n docsHref: 'https://docs.ochk.io/vote',\n },\n {\n slug: 'stamp',\n href: 'https://stamp.ochk.io',\n label: 'oc·stamp',\n sub: 'declare — block-anchored',\n docsHref: 'https://docs.ochk.io/stamp',\n },\n {\n slug: 'agent',\n href: 'https://agent.ochk.io',\n label: 'oc·agent',\n sub: 'delegate — scoped auth',\n docsHref: 'https://docs.ochk.io/agent',\n },\n {\n slug: 'pledge',\n href: 'https://pledge.ochk.io',\n label: 'oc·pledge',\n sub: 'swear — bonded commitment',\n docsHref: 'https://docs.ochk.io/pledge',\n },\n];\n\n/** Entries gated behind `showOwnerEntries={true}`. Owner-only family\n * properties (`oc·analytics` at analytics.ochk.io, `oc·bot` at\n * bot.ochk.io) live here so they're invisible to everyone except\n * verified owners — the JWT claim drives the gate. */\nconst OWNER_ENTRIES: SwitcherEntry[] = [\n {\n slug: 'analytics',\n href: 'https://analytics.ochk.io',\n label: 'oc·analytics',\n sub: 'owner cockpit',\n docsHref: 'https://analytics.ochk.io',\n },\n {\n slug: 'bot',\n href: 'https://bot.ochk.io',\n label: 'oc·bot',\n sub: 'social bot',\n docsHref: 'https://bot.ochk.io',\n },\n {\n slug: 'forge',\n href: 'https://forge.ochk.io',\n label: 'oc·forge',\n sub: 'agent ops',\n docsHref: 'https://forge.ochk.io',\n },\n];\n\nexport interface EcosystemSwitcherProps {\n current: EcosystemSlug;\n className?: string;\n /**\n * When true, append the owner-only entries (currently\n * `oc·analytics`) to the family-switcher dropdown. Consumers\n * pass this from their session: `useOcSession().account?.isOwner`.\n * Defaults to false so non-owners never see owner-only links.\n *\n * Not a security boundary — analytics.ochk.io re-checks the\n * live OWNER_OC_ADDRESSES env on every request. This prop only\n * decides whether the UX hint is visible.\n */\n showOwnerEntries?: boolean;\n}\n\nexport function EcosystemSwitcher({\n current,\n className,\n showOwnerEntries = false,\n}: EcosystemSwitcherProps) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n function onDoc(e: MouseEvent) {\n if (!containerRef.current) return;\n if (!containerRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDoc);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={containerRef} className={'relative ' + (className ?? '')}>\n <button\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label=\"Switch OrangeCheck product\"\n title=\"Switch product\"\n onClick={() => setOpen((v) => !v)}\n className={\n 'inline-flex items-center gap-1 px-2 py-1 transition-colors ' +\n (open\n ? 'text-foreground'\n : 'text-muted-foreground hover:text-foreground')\n }\n >\n <Boxes className=\"h-4 w-4\" />\n <ChevronDown\n className={\n 'h-3.5 w-3.5 transition-transform ' + (open ? 'rotate-180' : '')\n }\n />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Switch OrangeCheck product\"\n className=\"bg-background absolute right-0 top-full z-[60] mt-2 w-72 border shadow-lg\"\n >\n <div className=\"label-mono text-primary border-b px-4 py-2\">\n § the family\n </div>\n <ul className=\"py-1\">\n {[...ENTRIES, ...(showOwnerEntries ? OWNER_ENTRIES : [])].map((e) => {\n const isActive = e.slug === current;\n return (\n <li key={e.slug}>\n <Link\n href={e.href}\n onClick={() => setOpen(false)}\n aria-current={isActive ? 'page' : undefined}\n className={\n 'group flex items-baseline gap-3 px-4 py-2 transition-colors ' +\n (isActive\n ? 'bg-primary/5'\n : 'hover:bg-muted')\n }\n >\n <span\n className={\n 'font-display flex-1 text-[12px] font-semibold tracking-tight ' +\n (isActive\n ? 'text-primary'\n : 'text-foreground group-hover:text-primary transition-colors')\n }\n >\n {e.label}\n </span>\n <span className=\"text-muted-foreground font-mono text-[10px] tracking-wider uppercase\">\n {e.sub}\n </span>\n {isActive && (\n <Check className=\"text-primary h-3 w-3\" />\n )}\n </Link>\n </li>\n );\n })}\n </ul>\n <div className=\"border-t px-4 py-2 font-mono text-[10px] tracking-widest uppercase\">\n <Link\n href=\"https://docs.ochk.io\"\n onClick={() => setOpen(false)}\n className=\"text-muted-foreground hover:text-foreground inline-block transition-colors\"\n >\n docs.ochk.io →\n </Link>\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Family-property registry — the single source of truth for every\n * orangecheck-family site. Both `<OcLogoDropdown>` (the global logo →\n * property switcher) and `<OcAccountMenu>` (the global signed-in\n * account chip) read from this table, so a one-line edit here ripples\n * to every consumer simultaneously.\n *\n * Adding a new family member means appending one entry below. Removing\n * one means deleting the entry. There are no other call sites to chase.\n */\n\nimport type { EcosystemSlug } from './ecosystem-switcher';\n\nexport type FamilyCategory = 'hub' | 'product' | 'protocol' | 'owner';\n\nexport interface FamilyProperty {\n /** Stable URL-safe identifier (e.g. `'vault'`). */\n slug: EcosystemSlug;\n /** Absolute origin (e.g. `'https://vault.ochk.io'`). */\n origin: string;\n /** Bare hostname (e.g. `'vault.ochk.io'`). Used in account-menu headers. */\n hostname: string;\n /** Wordmark label (e.g. `'oc·vault'`). */\n label: string;\n /** Short tagline (verb — what-it-does), shown under the wordmark in the menu. */\n sub: string;\n /** Docs deep-link (e.g. `'https://docs.ochk.io/vault'`). */\n docsHref: string;\n /** Family-level category that shapes the visual chip + menu sectioning. */\n category: FamilyCategory;\n}\n\nexport const FAMILY_PROPERTIES: ReadonlyArray<FamilyProperty> = [\n {\n slug: 'home',\n origin: 'https://ochk.io',\n hostname: 'ochk.io',\n label: 'orangecheck',\n sub: 'umbrella · sign-in',\n docsHref: 'https://docs.ochk.io',\n category: 'hub',\n },\n {\n slug: 'docs',\n origin: 'https://docs.ochk.io',\n hostname: 'docs.ochk.io',\n label: 'oc·docs',\n sub: 'unified reference',\n docsHref: 'https://docs.ochk.io',\n category: 'hub',\n },\n {\n slug: 'me',\n origin: 'https://me.ochk.io',\n hostname: 'me.ochk.io',\n label: 'oc·me',\n sub: 'earn — consumer identity',\n docsHref: 'https://docs.ochk.io/me',\n category: 'product',\n },\n {\n slug: 'vault',\n origin: 'https://vault.ochk.io',\n hostname: 'vault.ochk.io',\n label: 'oc·vault',\n sub: 'keep — encrypted secrets',\n docsHref: 'https://docs.ochk.io/vault',\n category: 'product',\n },\n {\n slug: 'chat',\n origin: 'https://chat.ochk.io',\n hostname: 'chat.ochk.io',\n label: 'oc·chat',\n sub: 'message — encrypted chat',\n docsHref: 'https://docs.ochk.io/chat',\n category: 'product',\n },\n {\n slug: 'cosign',\n origin: 'https://cosign.ochk.io',\n hostname: 'cosign.ochk.io',\n label: 'oc·cosign',\n sub: 'cofound — get behind builders',\n docsHref: 'https://docs.ochk.io/cosign',\n category: 'product',\n },\n {\n slug: 'btc',\n origin: 'https://btc.ochk.io',\n hostname: 'btc.ochk.io',\n label: 'oc·btc',\n sub: 'read — bitcoin desk',\n docsHref: 'https://btc.ochk.io/data',\n category: 'product',\n },\n {\n slug: 'globe',\n origin: 'https://globe.ochk.io',\n hostname: 'globe.ochk.io',\n label: 'oc·globe',\n sub: 'watch — the network, live',\n docsHref: 'https://globe.ochk.io/sources',\n category: 'product',\n },\n {\n slug: 'attest',\n origin: 'https://attest.ochk.io',\n hostname: 'attest.ochk.io',\n label: 'oc·attest',\n sub: 'am — sybil resistance',\n docsHref: 'https://docs.ochk.io/attest',\n category: 'protocol',\n },\n {\n slug: 'lock',\n origin: 'https://lock.ochk.io',\n hostname: 'lock.ochk.io',\n label: 'oc·lock',\n sub: 'whisper — encryption',\n docsHref: 'https://docs.ochk.io/lock',\n category: 'protocol',\n },\n {\n slug: 'vote',\n origin: 'https://vote.ochk.io',\n hostname: 'vote.ochk.io',\n label: 'oc·vote',\n sub: 'decide — polls',\n docsHref: 'https://docs.ochk.io/vote',\n category: 'protocol',\n },\n {\n slug: 'stamp',\n origin: 'https://stamp.ochk.io',\n hostname: 'stamp.ochk.io',\n label: 'oc·stamp',\n sub: 'declare — block-anchored',\n docsHref: 'https://docs.ochk.io/stamp',\n category: 'protocol',\n },\n {\n slug: 'agent',\n origin: 'https://agent.ochk.io',\n hostname: 'agent.ochk.io',\n label: 'oc·agent',\n sub: 'delegate — scoped auth',\n docsHref: 'https://docs.ochk.io/agent',\n category: 'protocol',\n },\n {\n slug: 'pledge',\n origin: 'https://pledge.ochk.io',\n hostname: 'pledge.ochk.io',\n label: 'oc·pledge',\n sub: 'swear — bonded commitment',\n docsHref: 'https://docs.ochk.io/pledge',\n category: 'protocol',\n },\n {\n slug: 'analytics',\n origin: 'https://analytics.ochk.io',\n hostname: 'analytics.ochk.io',\n label: 'oc·analytics',\n sub: 'owner cockpit',\n docsHref: 'https://analytics.ochk.io',\n category: 'owner',\n },\n {\n slug: 'bot',\n origin: 'https://bot.ochk.io',\n hostname: 'bot.ochk.io',\n label: 'oc·bot',\n sub: 'social bot',\n docsHref: 'https://bot.ochk.io',\n category: 'owner',\n },\n {\n slug: 'forge',\n origin: 'https://forge.ochk.io',\n hostname: 'forge.ochk.io',\n label: 'oc·forge',\n sub: 'agent ops',\n docsHref: 'https://forge.ochk.io',\n category: 'owner',\n },\n];\n\n/**\n * Canonical lifecycle states for any family site. Used by both the\n * tiny chip rendered next to the wordmark and any other surface that\n * wants to display \"this site is still settling\" UX. Centralised\n * vocabulary so we can't accidentally drift to a parallel synonym\n * like `preview`/`experimental` on different sites.\n *\n * - `live` — production-ready; **no chip rendered** (the absence\n * of a chip is the affordance)\n * - `beta` — feature-complete but still iterating, soft launch\n * - `alpha` — early, breaking changes expected, integrators beware\n */\nexport type SiteState = 'alpha' | 'beta' | 'live';\n\nexport const SITE_STATE_LABEL: Record<Exclude<SiteState, 'live'>, string> = {\n alpha: 'alpha',\n beta: 'beta',\n};\n\n/** Find a property entry by its slug. */\nexport function findFamilyProperty(slug: EcosystemSlug): FamilyProperty | undefined {\n return FAMILY_PROPERTIES.find((p) => p.slug === slug);\n}\n","import { Check, ChevronDown, CornerDownLeft } from 'lucide-react';\nimport Link from 'next/link';\nimport { useRouter } from 'next/router';\nimport * as React from 'react';\nimport { useEffect, useId, useRef, useState, type ReactNode } from 'react';\n\nimport { Tooltip } from '../primitives/tooltip';\nimport { cn } from '../tokens/cn';\nimport type { EcosystemSlug } from './ecosystem-switcher';\nimport {\n FAMILY_PROPERTIES,\n SITE_STATE_LABEL,\n findFamilyProperty,\n type FamilyCategory,\n type SiteState,\n} from './family-properties';\n\n/**\n * `<OcLogoDropdown>` — the logo IS the dropdown.\n *\n * Wraps a site's local LogoMark + wordmark in a button that, on click,\n * drops a popover listing every OrangeCheck family property. The current\n * property is highlighted with a primary-tinted background, a left-edge\n * accent bar, and a \"home\" label — and is itself a clickable link to\n * the local home href (default `/`).\n *\n * Family properties carry one of three categories:\n *\n * - `hub` — orangecheck umbrella + docs (no badge)\n * - `product` — commercial products (me, vault) · primary chip\n * - `protocol` — open verb specs (attest, lock, vote, stamp, agent,\n * pledge) · muted chip\n *\n * The category of the *current* site is auto-rendered as a tiny mono\n * chip inside the trigger button, and the dropdown itself groups\n * entries by category with subtle mono dividers — so the product /\n * protocol distinction is visible both on the logo and in the menu,\n * with a single source of truth (`./family-properties.ts`).\n *\n * The optional `siteState` prop renders a second tiny chip after the\n * category chip — `alpha` or `beta` — for sites that aren't `live`.\n * The vocabulary is canonical across the family (see SiteState in\n * family-properties.ts). Pass it from your per-site config so a\n * single edit propagates to the logo, the account menu, and anywhere\n * else the chip surfaces.\n *\n * Mobile-aware: the popover's width is clamped to the viewport,\n * content scrolls when there are more entries than fit. The trigger\n * chips hide below `sm` to preserve mobile header space — the dropdown\n * itself still shows the grouping.\n *\n * On a fine pointer (mouse) the trigger reveals a themed `<Tooltip>` on\n * hover, and on keyboard focus — naming where you are and the two\n * affordances (`click · switch site`, `double-click · home`). It replaces\n * the old native `title=` (unthemed, undelayed, invisible on touch) and is\n * never shown on touch, where the menu's `home ✓` row is the path home.\n */\n\nconst SECTIONS: Array<{ category: FamilyCategory; label: string }> = [\n { category: 'hub', label: 'hub' },\n { category: 'product', label: 'products' },\n { category: 'protocol', label: 'protocols' },\n { category: 'owner', label: 'owner' },\n];\n\nexport interface OcLogoDropdownProps {\n /**\n * Which property this site IS. Used to highlight the active row,\n * route the active row's link to `homeHref` instead of the cross-\n * domain absolute URL, and pick the category chip rendered next\n * to the wordmark.\n */\n current: EcosystemSlug;\n /**\n * The site's local home path (for the active row). Default `/`.\n * Always a same-origin path — the logo's \"go home\" affordance is\n * preserved by clicking the highlighted row.\n */\n homeHref?: string;\n /**\n * Optional lifecycle state for this site. `'live'` (default) renders\n * no chip; `'alpha'` and `'beta'` render a small mono uppercase chip\n * after the category badge. Drive this from your per-site config so\n * one constant change ripples to every surface.\n */\n siteState?: SiteState;\n /**\n * Logo contents · typically `<LogoMark />` + `<span>oc·X</span>`.\n */\n children: ReactNode;\n /** className for the outer container. */\n className?: string;\n /** className for the trigger button. */\n triggerClassName?: string;\n /** className for the popover. */\n popoverClassName?: string;\n /**\n * When true, include the `owner` section (currently just\n * `oc·analytics`) in the family list. Consumers pass this from\n * their session: `useOcSession().account?.isOwner ?? false`.\n * Defaults to false so non-owners never see the entry.\n *\n * Not a security boundary — analytics.ochk.io re-checks the live\n * OWNER_OC_ADDRESSES env on every request. This prop only\n * controls UX visibility.\n */\n showOwnerEntries?: boolean;\n}\n\nfunction CategoryChip({ category }: { category: FamilyCategory }) {\n if (category === 'hub') return null;\n const label =\n category === 'product' ? 'product' : category === 'protocol' ? 'protocol' : 'owner';\n const tone =\n category === 'product'\n ? 'border-primary/25 bg-primary/10 text-primary'\n : category === 'protocol'\n ? 'border-muted-foreground/20 bg-muted/40 text-muted-foreground'\n : 'border-warning/30 bg-warning/10 text-warning';\n return (\n <span\n aria-label={\n category === 'product'\n ? 'commercial product'\n : category === 'protocol'\n ? 'protocol reference'\n : 'owner-only surface'\n }\n className={\n 'ml-1 hidden rounded-sm border px-1.5 py-[1px] font-mono text-[9px] font-medium tracking-widest uppercase sm:inline-block ' +\n tone\n }\n data-oc-category={category}\n >\n {label}\n </span>\n );\n}\n\nfunction SiteStateBadge({ state }: { state: SiteState }) {\n if (state === 'live') return null;\n return (\n <span\n aria-label={`site lifecycle: ${state}`}\n className=\"text-muted-foreground ml-1 hidden font-mono text-[9px] font-medium tracking-widest uppercase sm:inline-block\"\n data-oc-site-state={state}\n >\n {SITE_STATE_LABEL[state]}\n </span>\n );\n}\n\nfunction MenuCategoryChip({ category }: { category: FamilyCategory }) {\n if (category === 'hub') return null;\n const label =\n category === 'product' ? 'pro' : category === 'protocol' ? 'spec' : 'own';\n const tone =\n category === 'product'\n ? 'bg-primary/10 text-primary'\n : category === 'protocol'\n ? 'bg-muted/60 text-muted-foreground'\n : 'bg-warning/15 text-warning';\n return (\n <span\n aria-hidden\n className={\n 'inline-block shrink-0 rounded-sm px-1 py-[1px] font-mono text-[9px] font-medium tracking-widest uppercase ' +\n tone\n }\n >\n {label}\n </span>\n );\n}\n\n/**\n * The hover/focus tooltip body — three rows that the native `title=` used to\n * hide: where you are, then `click · switch site` and `double-click · home`.\n * Decorative reinforcement of the trigger's `aria-label` (the tooltip itself\n * is `aria-hidden`); the same `CornerDownLeft` glyph as the in-menu home hint.\n */\nfunction SwitcherTooltipCard({ current }: { current: EcosystemSlug }) {\n const prop = findFamilyProperty(current);\n return (\n <div className=\"w-[13rem] max-w-[calc(100vw-1.5rem)]\">\n <div className=\"flex flex-col leading-tight\">\n <span className=\"flex flex-wrap items-baseline gap-x-1.5\">\n <span className=\"text-muted-foreground font-mono text-[9px] tracking-widest uppercase\">\n you’re on\n </span>\n <span className=\"text-primary font-display text-[12px] font-semibold tracking-tight\">\n {prop?.label ?? 'orangecheck family'}\n </span>\n </span>\n {prop?.sub && (\n <span className=\"text-muted-foreground mt-0.5 font-mono text-[10px] tracking-wide\">\n {prop.sub}\n </span>\n )}\n </div>\n <div className=\"border-border -mx-2.5 my-2 border-t\" />\n <div className=\"flex items-center gap-1.5\">\n <ChevronDown aria-hidden className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"text-primary font-mono text-[10px] font-medium tracking-widest uppercase\">\n click\n </span>\n <span className=\"text-muted-foreground font-mono text-[10px]\">·</span>\n <span className=\"text-muted-foreground font-mono text-[10px] tracking-wide\">\n switch site\n </span>\n </div>\n <div className=\"mt-1.5 flex items-center gap-1.5\">\n <CornerDownLeft aria-hidden className=\"text-muted-foreground h-3 w-3 shrink-0\" />\n <span className=\"text-primary font-mono text-[10px] font-medium tracking-widest uppercase\">\n double-click\n </span>\n <span className=\"text-muted-foreground font-mono text-[10px]\">·</span>\n <span className=\"text-muted-foreground font-mono text-[10px] tracking-wide\">\n home\n </span>\n </div>\n </div>\n );\n}\n\nexport function OcLogoDropdown({\n current,\n homeHref = '/',\n siteState = 'live',\n children,\n className,\n triggerClassName,\n popoverClassName,\n showOwnerEntries = false,\n}: OcLogoDropdownProps) {\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const menuId = useId();\n const router = useRouter();\n\n const currentCategory: FamilyCategory = findFamilyProperty(current)?.category ?? 'hub';\n\n /**\n * Trigger click semantics:\n *\n * single-click → toggle the family dropdown\n * double-click → navigate to `homeHref` (the local landing)\n *\n * `MouseEvent.detail` is the running click count for clicks within\n * the browser's double-click threshold (~500ms). The DOM still\n * fires the `click` event on the first tap, so the dropdown\n * momentarily opens during a double-click — and the second click\n * navigates home. That's the visual story the popover-side hint\n * sells: *open · tap again · home.*\n */\n function handleTriggerClick(e: React.MouseEvent<HTMLButtonElement>) {\n if (e.detail >= 2) {\n e.preventDefault();\n setOpen(false);\n void router.push(homeHref);\n return;\n }\n setOpen((v) => !v);\n }\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n function onDoc(e: MouseEvent) {\n if (!containerRef.current) return;\n if (!containerRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDoc);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDoc);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div\n ref={containerRef}\n className={'relative inline-flex items-center ' + (className ?? '')}\n data-oc-logo-dropdown=\"\"\n data-oc-current-category={currentCategory}\n data-oc-site-state={siteState}\n >\n <Tooltip\n content={<SwitcherTooltipCard current={current} />}\n disabled={open}\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n zIndexClassName=\"z-[70]\"\n >\n <button\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={menuId}\n aria-label=\"orangecheck family menu\"\n onClick={handleTriggerClick}\n className={cn(\n // focus indicator is guaranteed even if a consumer overrides triggerClassName\n 'focus-visible:ring-primary/60 rounded-sm focus-visible:ring-2 focus-visible:outline-none',\n triggerClassName ??\n 'group hover:bg-accent/30 -mx-1.5 -my-1 flex min-h-[40px] items-center gap-2 rounded-sm px-1.5 py-1 transition-colors ' +\n (open ? 'bg-accent/20' : '')\n )}\n data-oc-logo-dropdown-trigger=\"\"\n data-oc-logo-dropdown-open={open ? 'true' : 'false'}\n >\n {children}\n <CategoryChip category={currentCategory} />\n <SiteStateBadge state={siteState} />\n <ChevronDown\n aria-hidden\n className={\n 'text-muted-foreground group-hover:text-foreground/80 h-3.5 w-3.5 shrink-0 transition-transform duration-200 ' +\n (open ? 'rotate-180' : '')\n }\n />\n </button>\n </Tooltip>\n {/* Home affordance · a sibling Link to the trigger button\n rather than a child of it (nested buttons would be\n invalid HTML). Fades + slides in when the dropdown is\n open, whispering \"tap again, you'll go home\". Clicking\n the hint navigates directly — works for users who\n discover it before they discover the double-click. The\n subtle motion-safe pulse on the icon nudges the eye\n without shouting. */}\n <Link\n href={homeHref}\n aria-label={'go to ' + homeHref + ' (this site\\'s home)'}\n onClick={() => setOpen(false)}\n tabIndex={open ? 0 : -1}\n className={\n 'hover:text-primary group/home -ml-1 hidden items-center gap-1 rounded-sm px-1.5 py-1 font-mono text-[9px] tracking-widest uppercase transition-all duration-200 sm:inline-flex ' +\n (open\n ? 'pointer-events-auto translate-x-0 text-muted-foreground opacity-100 hover:bg-accent/30'\n : 'pointer-events-none -translate-x-1 opacity-0')\n }\n data-oc-logo-dropdown-home-hint=\"\"\n >\n <CornerDownLeft\n aria-hidden\n className={\n 'h-3 w-3 group-hover/home:text-primary ' +\n (open ? 'motion-safe:animate-pulse' : '')\n }\n />\n <span className=\"text-primary/70 group-hover/home:text-primary\">\n home\n </span>\n </Link>\n\n {open && (\n <div\n id={menuId}\n role=\"menu\"\n aria-label=\"orangecheck family\"\n className={\n popoverClassName ??\n 'bg-background absolute top-full left-0 z-[60] mt-2 w-[min(20rem,calc(100vw-1rem))] border shadow-lg'\n }\n data-oc-logo-dropdown-popover=\"\"\n >\n <div className=\"label-mono text-primary border-b px-4 py-2\">\n § the orangecheck family\n </div>\n <div className=\"max-h-[min(28rem,70vh)] overflow-y-auto py-1\" role=\"none\">\n {SECTIONS.map(({ category, label }) => {\n // Owner-only sections only render when the\n // consumer has explicitly opted in (caller\n // reads `useOcSession().account?.isOwner`).\n // Non-owners simply don't see them.\n if (category === 'owner' && !showOwnerEntries) return null;\n const sectionEntries = FAMILY_PROPERTIES.filter(\n (e) => e.category === category\n );\n if (sectionEntries.length === 0) return null;\n return (\n <div key={category} role=\"none\" data-oc-section={category}>\n <div\n role=\"separator\"\n aria-hidden\n className={\n 'text-muted-foreground px-4 pt-2.5 pb-1 font-mono text-[9px] font-medium tracking-widest uppercase ' +\n (category === 'hub' ? '' : 'border-t mt-1')\n }\n >\n {label}\n </div>\n <ul role=\"none\" className=\"pb-1\">\n {sectionEntries.map((e) => {\n const isActive = e.slug === current;\n const href = isActive ? homeHref : e.origin;\n return (\n <li key={e.slug} role=\"none\">\n <Link\n href={href}\n role=\"menuitem\"\n onClick={() => setOpen(false)}\n aria-current={isActive ? 'page' : undefined}\n className={\n 'group flex items-center gap-2 px-4 py-2 transition-colors ' +\n (isActive\n ? 'bg-primary/8 border-primary -ml-px border-l-2'\n : 'hover:bg-muted -ml-px border-l-2 border-transparent')\n }\n data-oc-logo-dropdown-item={\n isActive ? 'current' : 'sibling'\n }\n data-oc-entry-category={e.category}\n >\n <span className=\"flex min-w-0 flex-1 flex-col leading-tight\">\n <span\n className={\n 'font-display text-[12px] font-semibold tracking-tight ' +\n (isActive\n ? 'text-primary'\n : 'text-foreground group-hover:text-primary transition-colors')\n }\n >\n {e.label}\n </span>\n <span className=\"text-muted-foreground mt-0.5 font-mono text-[10px] tracking-wide\">\n {e.sub}\n </span>\n </span>\n <MenuCategoryChip category={e.category} />\n {isActive ? (\n <span className=\"text-primary inline-flex shrink-0 items-center gap-1 font-mono text-[10px] tracking-widest uppercase\">\n home\n <Check className=\"h-3 w-3\" />\n </span>\n ) : null}\n </Link>\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n </div>\n <div className=\"border-t px-4 py-2 font-mono text-[10px] tracking-widest uppercase\">\n <Link\n href=\"https://docs.ochk.io\"\n onClick={() => setOpen(false)}\n className=\"text-muted-foreground hover:text-foreground inline-block transition-colors\"\n >\n docs.ochk.io →\n </Link>\n </div>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { useEffect, useRef, useState, type ReactNode } from 'react';\nimport { Check, Copy, Loader2, Menu, Plus, X } from 'lucide-react';\nimport {\n fetchOcLinkedIdentities,\n useOcSession,\n type DisplayIdentity,\n type DisplayIdentityKind,\n type OcAccountSummary,\n type OcLinkedIdentity,\n type OcSignOutScope,\n} from '@orangecheck/auth-client';\n\nimport { AppearanceControls } from '../tokens/appearance-menu';\nimport { cn } from '../tokens/cn';\nimport type { EcosystemSlug } from './ecosystem-switcher';\nimport { findFamilyProperty, type SiteState } from './family-properties';\n\n/**\n * `<OcAccountMenu>` — the canonical top-right account affordance for\n * every family site. Replaces the older inline-styled `OcAccountChip`\n * from `@orangecheck/auth-client` with a Tailwind-styled, fully\n * configurable, cross-site-aware dropdown.\n *\n * Three explicit visual states:\n *\n * 1. **Pre-hydration / loading** — neutral `sign in` placeholder so\n * the header never goes blank on first paint.\n * 2. **Anonymous / error** — primary-styled `sign in` CTA pointing\n * at the site's local `/signin` (or whatever `signInUrl` you\n * pass).\n * 3. **Authenticated** — pill with a primary-tinted signal dot and\n * shortened did_oc (or display name if set); click → popover\n * with the full did_oc as a one-click copy-to-clipboard row,\n * optional site-specific menu items, family dashboard link,\n * sign-out, and an optional BuildFooter showing site name +\n * version + commit sha → GitHub.\n *\n * Cross-site recognition: the component re-fetches the session on\n * `visibilitychange` and `focus` events, so when a user signs in at a\n * sibling site (ochk.io, attest.ochk.io, etc.) and tabs back, the\n * chip flips from \"sign in\" to \"signed in\" without a hard reload.\n *\n * The component reads `useOcSession()` from `@orangecheck/auth-client`,\n * so the consuming app must mount `<OcSessionProvider>` somewhere in\n * its tree (already standard in every consumer's `_app.tsx`).\n */\n\nexport interface OcAccountMenuItem {\n /** Same-origin path or absolute URL. */\n href: string;\n /** Visible label. */\n label: string;\n /**\n * When `true`, opens in a new tab and renders a ↗ glyph after the\n * label. Use for cross-domain links (e.g. `https://ochk.io/dashboard`).\n */\n external?: boolean;\n}\n\nexport interface OcAccountMenuBuildInfo {\n /** Display version string, e.g. `'0.5.0'` (rendered as `v0.5.0`). */\n version: string;\n /**\n * 7+ character commit SHA. Render as `'dev'` (or omit) for local\n * dev to suppress the GitHub link.\n */\n sha?: string;\n /**\n * GitHub `owner/repo` slug — combined with `sha` to produce the\n * `https://github.com/<repo>/commit/<sha>` link.\n */\n repo?: string;\n}\n\n/**\n * Minimal session shape `<OcAccountMenuView>` needs. Compatible with\n * `useOcSession()`'s return value but explicit so consumers running\n * their own auth context (e.g. oc-www's local `useAuth`) can pass an\n * adapter without depending on `@orangecheck/auth-client`'s exact\n * types.\n */\nexport interface OcAccountMenuSession {\n status: 'loading' | 'authenticated' | 'anonymous' | 'error';\n account: {\n didOc: string;\n displayName: string | null;\n /**\n * The identity the user has promoted as their badge label —\n * `{ kind, value }`, always populated (defaults to the did).\n * Drives the collapsed-trigger label and the active row in the\n * \"show as\" promote list.\n */\n displayIdentity: DisplayIdentity;\n /** The user's Nostr npub, when set — a promotable badge\n * identity that (unlike btc/email) is a profile field, not a\n * linked-identity row, so it is read from the session. */\n nostrNpub?: string | null;\n } | null;\n /**\n * Sign out. Accepts an optional `{ scope }` so the multi-account\n * \"leave this account\" affordance can route through the same hook.\n * Defaults to `'all'` for back-compat.\n */\n signOut: (opts?: { scope?: OcSignOutScope }) => void | Promise<void>;\n refresh: () => void | Promise<void>;\n /**\n * Promote a linked identity to be the badge label across every\n * `.ochk.io` site. The connected `<OcAccountMenu>` wires this to\n * `useOcSession().setDisplayIdentity`; a site running its own auth\n * context passes its own equivalent.\n */\n setDisplayIdentity: (kind: DisplayIdentityKind) => Promise<void>;\n /**\n * Multi-account roster · other accounts in this browser the user\n * can switch to without re-authenticating. Optional: when omitted\n * (or empty), the `§ accounts` section in `<OcAccountMenu>` is\n * suppressed and the menu renders as single-account. Sites that\n * own their auth context (e.g. oc-www's local `useAuth`) can leave\n * this unset until they add multi-account support.\n */\n roster?: OcAccountSummary[];\n /**\n * Multi-account · flip the active session to the given did_oc.\n * Required when `roster` is non-empty (otherwise the picker rows\n * have nowhere to call).\n */\n switchAccount?: (didOc: string) => Promise<void>;\n /**\n * Multi-account · URL for the \"add another account\" entry point.\n * Defaults to `/signin?add=1` when omitted, which works for every\n * `.ochk.io` family site (in-place sign-in supports the query\n * param by default).\n */\n addAccountUrl?: (returnTo?: string) => string;\n /**\n * Per-tab pinning · `true` when this tab holds its own session\n * token and operates as `account` independently of the shared\n * `.ochk.io` cookie (switching accounts in another tab won't\n * change this one). Renders a quiet `· this tab` hint in the\n * signed-in header. Optional — omitted by pre-pinning auth\n * contexts.\n */\n tabPinned?: boolean;\n}\n\nexport interface OcAccountMenuProps {\n /**\n * Which family property this site IS. Used to label the section\n * header (`§ signed in · vault.ochk.io`) and to suppress the\n * family-dashboard menu item when the user is already on `home`.\n */\n current: EcosystemSlug;\n /**\n * Where the anonymous \"sign in\" affordance points. Default `'/signin'`\n * — works with every site's in-place `<OcSignIn>` page. Pass\n * `'https://ochk.io/signin'` if you want to bounce to the auth host\n * instead.\n */\n signInUrl?: string;\n /** Label for the anonymous \"sign in\" affordance. Default `'sign in'`. */\n signInLabel?: string;\n /**\n * Where the browser lands after the user signs out. Default `'/'`\n * — the current site's own home. On sign-out the menu fires\n * `signOut()` (whose logout round-trip is `keepalive`, so it\n * survives the navigation) and *immediately* hard-navigates here.\n *\n * Navigating in the same tick is deliberate: it forecloses the\n * race where an auth-gated page observes the session flip to\n * `anonymous` and runs its own redirect-to-sign-in first. Sign-out\n * means \"leave\", not \"go sign in again\" — so the family default is\n * the site's home, never a sign-in page or the auth host.\n */\n signOutRedirect?: string;\n /**\n * Site-specific menu items, rendered between the section header\n * and the family-dashboard / sign-out rows. Keep this short —\n * 2–6 entries is the sweet spot. Pass `[]` (or omit) for sites\n * with no per-site routes worth surfacing.\n */\n menuItems?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * Centered primary nav links (typically dashboard · docs · spec).\n * Rendered inside the popover at viewport widths below `sm`\n * (640px) — these are the same links the `<OcPrimaryNav>` row\n * shows inline at sm+, but at ultra-small widths the inline row\n * hides and this popover section takes its place. The result: one\n * dropdown surface owns navigation on phones, no separate\n * hamburger drawer required.\n */\n primaryNavLinks?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * Tertiary nav links (about / contact / status / privacy / etc.).\n * Always visible inside the popover. Folds the legacy mobile-only\n * hamburger drawer's contents into the same dropdown as everything\n * else, so there's exactly one nav surface to learn.\n */\n secondaryNavLinks?: ReadonlyArray<OcAccountMenuItem>;\n /**\n * When `true` (default), shows a `family dashboard ↗` link to\n * `https://ochk.io/dashboard`. Set `false` for `home` (already\n * there) or for sites that don't want it.\n */\n showFamilyDashboard?: boolean;\n /**\n * Optional BuildFooter info. When present, renders a tiny mono\n * footer at the bottom of the popover with `site · vX.Y.Z · sha`\n * — the SHA links to the matching GitHub commit when `repo` is\n * also provided. Drive this from your `next.config.ts` via\n * `NEXT_PUBLIC_APP_VERSION` / `NEXT_PUBLIC_BUILD_SHA` env vars.\n */\n build?: OcAccountMenuBuildInfo;\n /**\n * Optional lifecycle chip rendered inside the BuildFooter line\n * (between site and version). Mirrors the chip on the logo so\n * both surfaces agree.\n */\n siteState?: SiteState;\n /** className overrides for layout-level customisation. */\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\n/**\n * Partially obscure an identity value for display — first 6 characters,\n * an ellipsis, last 4. Applied uniformly to every kind (did, Bitcoin\n * address, email, npub) and at every length, so a rendered label never\n * exposes a full identity at rest; the full value stays one click away\n * via the copy affordance. Short values fall back to a 4/3 split so the\n * middle is always masked.\n */\nfunction obscureIdentity(value: string): string {\n if (value.length <= 12) {\n return `${value.slice(0, 4)}…${value.slice(-3)}`;\n }\n return `${value.slice(0, 6)}…${value.slice(-4)}`;\n}\n\n/** Human label for an identity kind, shown as the trailing tag on each\n * promote row. */\nconst IDENTITY_KIND_LABEL: Record<DisplayIdentityKind, string> = {\n did: 'did:oc',\n btc: 'bitcoin',\n email: 'email',\n nostr: 'nostr',\n};\n\n/**\n * Best-effort clipboard write. Prefers the async Clipboard API (the\n * only thing that works off a user gesture in modern browsers), and\n * falls back to a hidden-`<textarea>` + `execCommand('copy')` for\n * non-secure contexts or older engines. Returns `true` on success so\n * the caller can decide whether to show \"copied\" feedback.\n */\nasync function writeClipboard(text: string): Promise<boolean> {\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n } catch {\n // fall through to the legacy path\n }\n try {\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.setAttribute('readonly', '');\n ta.style.position = 'fixed';\n ta.style.top = '-1000px';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n const ok = document.execCommand('copy');\n document.body.removeChild(ta);\n return ok;\n } catch {\n return false;\n }\n}\n\n/**\n * The `did_oc` row inside the popover header, rendered as a single\n * one-click copy affordance. Clicking anywhere on the address copies\n * the full `did_oc` to the clipboard and flips the trailing glyph\n * from a copy icon to a check for ~1.6s. The popover deliberately\n * stays open so the user sees the confirmation. A visually-hidden\n * `aria-live` region announces the result to screen readers.\n *\n * This is the canonical pattern for surfacing a copyable OrangeCheck\n * identity — every family site gets it for free via `<OcAccountMenu>`.\n */\nfunction CopyableDid({ did }: { did: string }) {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n [],\n );\n\n const onCopy = async () => {\n const ok = await writeClipboard(did);\n if (!ok) return;\n setCopied(true);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 1600);\n };\n\n return (\n <button\n type=\"button\"\n onClick={onCopy}\n aria-label={\n copied\n ? 'OrangeCheck identity copied to clipboard'\n : `Copy OrangeCheck identity ${did} to clipboard`\n }\n title=\"Copy identity\"\n data-oc-account-menu-copy-did=\"\"\n data-copied={copied ? '' : undefined}\n className=\"group/did hover:bg-accent focus-visible:ring-ring/60 -mx-1.5 mt-px flex w-[calc(100%+0.75rem)] items-start gap-1.5 rounded px-1.5 py-1 text-left transition-colors focus-visible:ring-2 focus-visible:outline-none\"\n >\n <span className=\"text-foreground/90 min-w-0 flex-1 font-mono text-[11px] leading-tight break-all\">\n {did}\n </span>\n <span\n className={\n 'mt-px shrink-0 transition-colors ' +\n (copied\n ? 'text-primary'\n : 'text-muted-foreground group-hover/did:text-foreground/80')\n }\n aria-hidden\n >\n {copied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n </span>\n <span className=\"sr-only\" aria-live=\"polite\">\n {copied ? 'Copied to clipboard' : ''}\n </span>\n </button>\n );\n}\n\n/**\n * One row in the \"§ show as\" list — a promote control and an\n * independent copy-to-clipboard affordance.\n *\n * The value is always rendered partially obscured (`obscureIdentity`).\n * The row body is a radio that promotes this identity to the badge\n * label; the trailing copy button writes the *full* value to the\n * clipboard via the same `writeClipboard` path as the did row (async\n * Clipboard API, hidden-`<textarea>` fallback — works on touch devices\n * and non-secure contexts). Copy and promote are deliberately separate\n * controls: one selects the identity, the other extracts it.\n */\nfunction PromoteRow({\n kind,\n value,\n active,\n busy,\n disabled,\n onPromote,\n}: {\n kind: DisplayIdentityKind;\n value: string;\n active: boolean;\n busy: boolean;\n disabled: boolean;\n onPromote: () => void;\n}) {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n [],\n );\n\n const onCopy = async () => {\n const ok = await writeClipboard(value);\n if (!ok) return;\n setCopied(true);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 1600);\n };\n\n const kindLabel = IDENTITY_KIND_LABEL[kind];\n\n return (\n <div\n className=\"hover:bg-accent flex items-center gap-1 pr-2 transition-colors\"\n data-oc-account-menu-promote-row={kind}\n data-active={active ? '' : undefined}\n >\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n aria-label={active ? `Showing as ${kindLabel}` : `Show as ${kindLabel}`}\n disabled={disabled || active}\n onClick={onPromote}\n data-oc-account-menu-promote={kind}\n className=\"flex min-w-0 flex-1 items-center gap-2 py-2 pl-3 text-left font-mono text-[11px] tracking-wide disabled:cursor-default\"\n >\n <span\n className={\n 'flex size-3.5 shrink-0 items-center justify-center rounded-full border ' +\n (active ? 'border-primary' : 'border-muted-foreground/40')\n }\n aria-hidden\n >\n {active ? <span className=\"bg-primary size-1.5 rounded-full\" /> : null}\n </span>\n <span className=\"text-foreground/90 min-w-0 flex-1 truncate\">\n {obscureIdentity(value)}\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => void onCopy()}\n aria-label={\n copied ? `${kindLabel} copied to clipboard` : `Copy ${kindLabel} to clipboard`\n }\n title=\"Copy\"\n data-oc-account-menu-promote-copy={kind}\n data-copied={copied ? '' : undefined}\n className=\"hover:bg-background/70 focus-visible:ring-ring/60 flex size-6 shrink-0 items-center justify-center rounded transition-colors focus-visible:ring-2 focus-visible:outline-none\"\n >\n {copied ? (\n <Check className=\"text-primary size-3.5\" />\n ) : (\n <Copy className=\"text-muted-foreground size-3.5\" />\n )}\n </button>\n <span className=\"text-muted-foreground w-14 shrink-0 text-right text-[9px] tracking-widest uppercase\">\n {busy ? <Loader2 className=\"ml-auto size-3 animate-spin\" /> : kindLabel}\n </span>\n <span className=\"sr-only\" aria-live=\"polite\">\n {copied ? 'Copied to clipboard' : ''}\n </span>\n </div>\n );\n}\n\n/**\n * The \"§ show as\" block inside the popover — lists the user's\n * identities and lets them promote one as the badge label across\n * every `.ochk.io` site.\n *\n * The did is always an option (read from the session); the npub too\n * when set. The Bitcoin address and email are *linked identities*, so\n * they're lazy-fetched from the auth host the first time the popover\n * opens — `fetchOcLinkedIdentities()` is one credentialed request,\n * cached for the menu's lifetime. The section renders only once that\n * resolves and only when there are ≥2 identities worth choosing\n * between; with a single identity there is nothing to promote.\n *\n * Promotion calls `setDisplayIdentity(kind)` — which PATCHes the auth\n * host, re-mints the cross-subdomain cookie, and refreshes the session\n * — so the selected row and the collapsed label update in place and\n * every other family tab picks the choice up on its next focus.\n */\nfunction IdentityPromoteSection({\n didOc,\n nostrNpub,\n current,\n open,\n setDisplayIdentity,\n}: {\n didOc: string;\n nostrNpub: string | null;\n current: DisplayIdentity;\n open: boolean;\n setDisplayIdentity: (kind: DisplayIdentityKind) => Promise<void>;\n}) {\n const [identities, setIdentities] = useState<OcLinkedIdentity[] | null>(null);\n const [loadFailed, setLoadFailed] = useState(false);\n const [promoting, setPromoting] = useState<DisplayIdentityKind | null>(null);\n const [promoteErr, setPromoteErr] = useState<string | null>(null);\n // Track the (open-state, account) we last fetched for. Refetch when\n // didOc changes — multi-account switches swap which account's linked\n // identities should appear here, and stale data manifested as the\n // popover visibly reflowing mid-switch (\"dropdown freaking out\").\n const lastFetchKeyRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!open) return;\n // Fetch on first open AND whenever the active didOc changes.\n if (lastFetchKeyRef.current === didOc) return;\n lastFetchKeyRef.current = didOc;\n let cancelled = false;\n // Reset so the section briefly returns null (suppresses flash)\n // until the new account's identities resolve.\n setIdentities(null);\n setLoadFailed(false);\n void fetchOcLinkedIdentities()\n .then((rows) => {\n if (!cancelled) setIdentities(rows);\n })\n .catch(() => {\n if (!cancelled) setLoadFailed(true);\n });\n return () => {\n cancelled = true;\n };\n }, [open, didOc]);\n\n // Wait for the fetch to settle before rendering — avoids a section\n // that flashes in then vanishes.\n if (identities === null && !loadFailed) return null;\n\n const btc =\n identities?.find((i) => i.kind === 'btc' && i.is_primary && i.value) ??\n identities?.find((i) => i.kind === 'btc' && i.value);\n const email =\n identities?.find((i) => i.kind === 'email' && i.is_primary && i.value) ??\n identities?.find((i) => i.kind === 'email' && i.value);\n\n const options: Array<{ kind: DisplayIdentityKind; value: string }> = [\n { kind: 'did', value: didOc },\n ];\n if (btc?.value) options.push({ kind: 'btc', value: btc.value });\n if (email?.value) options.push({ kind: 'email', value: email.value });\n if (nostrNpub) options.push({ kind: 'nostr', value: nostrNpub });\n\n // Nothing to choose between → no section.\n if (options.length < 2) return null;\n\n const promote = async (kind: DisplayIdentityKind) => {\n if (promoting || kind === current.kind) return;\n setPromoting(kind);\n setPromoteErr(null);\n try {\n await setDisplayIdentity(kind);\n } catch (e) {\n setPromoteErr(e instanceof Error ? e.message : 'promotion failed');\n } finally {\n setPromoting(null);\n }\n };\n\n return (\n <div className=\"border-border border-b p-1\" data-oc-account-menu-section=\"show-as\">\n <div className=\"text-muted-foreground px-3 pt-2 pb-1 font-mono text-[10px] tracking-widest uppercase\">\n § show as\n </div>\n {options.map((opt) => (\n <PromoteRow\n key={opt.kind}\n kind={opt.kind}\n value={opt.value}\n active={opt.kind === current.kind}\n busy={promoting === opt.kind}\n disabled={promoting !== null}\n onPromote={() => void promote(opt.kind)}\n />\n ))}\n {promoteErr ? (\n <div className=\"text-destructive/80 px-3 pt-1 pb-2 font-mono text-[10px]\">\n {promoteErr}\n </div>\n ) : null}\n </div>\n );\n}\n\n/**\n * Connected variant — pulls the session from `useOcSession()`. This is\n * what every consumer site with `<OcSessionProvider>` mounted should\n * use. For sites running a parallel auth context (e.g. oc-www's local\n * `useAuth`), use `<OcAccountMenuView>` below and pass a session prop\n * directly.\n */\nexport function OcAccountMenu(props: OcAccountMenuProps) {\n const session = useOcSession();\n return (\n <OcAccountMenuView\n {...props}\n session={{\n status: session.status,\n account: session.account\n ? {\n didOc: session.account.didOc,\n displayName: session.account.displayName ?? null,\n displayIdentity: session.account.displayIdentity,\n nostrNpub: session.account.nostrNpub ?? null,\n }\n : null,\n signOut: session.signOut,\n refresh: session.refresh,\n setDisplayIdentity: session.setDisplayIdentity,\n // Multi-account · the connected variant always forwards\n // these from useOcSession(). The View variant accepts\n // them as optional so sites running their own auth\n // context (oc-www) can opt in incrementally.\n roster: session.roster,\n switchAccount: session.switchAccount,\n addAccountUrl: session.addAccountUrl,\n // Structural read keeps the auth-client peer floor at\n // ^2.17.0 — `tabPinned` ships in 2.18.0 and is simply\n // undefined (no hint) on older providers.\n tabPinned: (session as { tabPinned?: boolean }).tabPinned,\n }}\n />\n );\n}\n\nexport interface OcAccountMenuViewProps extends OcAccountMenuProps {\n /**\n * The session to render. When using `<OcAccountMenuView>` directly\n * (rather than the connected `<OcAccountMenu>`), pass an adapter\n * over your local auth context.\n */\n session: OcAccountMenuSession;\n}\n\n/**\n * Presentational variant — takes a session as an explicit prop. Use\n * this when your site runs its own auth context (e.g. ochk.io's\n * local `useAuth`) and you want the family-consistent visual without\n * mounting `<OcSessionProvider>`.\n */\n/**\n * MobileMenu — the `☰` rendered to the LEFT of the identity chip on phones\n * (`md:hidden`). Holds the site's nav links (primary + secondary) and the\n * appearance controls (mode + skin), so the mobile header is just\n * `[☰][identity]` with the theme folded in — no centered hamburger, no\n * standalone palette. Auth-independent: present whether signed in or out.\n */\nfunction MobileMenu({\n primary,\n secondary,\n}: {\n primary?: ReadonlyArray<OcAccountMenuItem>;\n secondary?: ReadonlyArray<OcAccountMenuItem>;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('mousedown', onClick);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onClick);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n const links = [...(primary ?? []), ...(secondary ?? [])];\n const rowCls =\n 'font-display flex items-center gap-2 px-3 py-2 text-[12px] font-semibold tracking-wider uppercase text-muted-foreground hover:text-foreground hover:bg-accent transition-colors';\n\n return (\n <div ref={ref} className=\"relative md:hidden\" data-oc-account-mobile-menu=\"\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label=\"menu\"\n className=\"border-input bg-background hover:bg-accent text-muted-foreground inline-flex size-8 items-center justify-center rounded-md border transition-colors\"\n data-oc-account-mobile-toggle=\"\"\n >\n {open ? <X className=\"size-4\" aria-hidden /> : <Menu className=\"size-4\" aria-hidden />}\n </button>\n {open && (\n <div\n role=\"menu\"\n aria-label=\"menu\"\n className=\"border-border bg-popover text-popover-foreground absolute top-[calc(100%+6px)] right-0 z-50 w-[min(16rem,calc(100vw-1rem))] overflow-hidden border shadow-xl\"\n data-oc-account-mobile-popover=\"\"\n >\n {links.length > 0 && (\n <div className=\"border-b p-1\">\n <div className=\"text-muted-foreground px-3 pt-2 pb-1 font-mono text-[10px] tracking-widest uppercase\">\n § navigate\n </div>\n {links.map((l) =>\n l.external ? (\n <a\n key={l.href}\n href={l.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n role=\"menuitem\"\n onClick={() => setOpen(false)}\n className={rowCls}\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{l.label}</span>\n <span className=\"text-muted-foreground text-[10px]\" aria-hidden>\n ↗\n </span>\n </a>\n ) : (\n <Link\n key={l.href}\n href={l.href}\n role=\"menuitem\"\n onClick={() => setOpen(false)}\n className={rowCls}\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{l.label}</span>\n </Link>\n )\n )}\n </div>\n )}\n <AppearanceControls />\n </div>\n )}\n </div>\n );\n}\n\nexport function OcAccountMenuView({\n current,\n signInUrl = '/signin',\n signInLabel = 'sign in',\n signOutRedirect = '/',\n menuItems,\n primaryNavLinks,\n secondaryNavLinks,\n showFamilyDashboard,\n build,\n siteState,\n className,\n triggerClassName,\n popoverClassName,\n session,\n}: OcAccountMenuViewProps) {\n const {\n status,\n account,\n signOut,\n refresh,\n setDisplayIdentity,\n roster,\n switchAccount,\n addAccountUrl,\n tabPinned,\n } = session;\n const [hydrated, setHydrated] = useState(false);\n const [open, setOpen] = useState(false);\n const wrapRef = useRef<HTMLDivElement | null>(null);\n\n const property = findFamilyProperty(current);\n const hostname = property?.hostname ?? `${current}.ochk.io`;\n const isHome = current === 'home';\n const familyDashboardEnabled = showFamilyDashboard ?? !isHome;\n\n useEffect(() => setHydrated(true), []);\n\n // Cross-site sign-in pickup: re-fetch on visibility / focus.\n useEffect(() => {\n const onWake = () => {\n if (document.visibilityState === 'visible') void refresh();\n };\n const onFocus = () => void refresh();\n document.addEventListener('visibilitychange', onWake);\n window.addEventListener('focus', onFocus);\n return () => {\n document.removeEventListener('visibilitychange', onWake);\n window.removeEventListener('focus', onFocus);\n };\n }, [refresh]);\n\n // Outside-click + Escape close.\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => {\n if (wrapRef.current && !wrapRef.current.contains(e.target as Node)) setOpen(false);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false);\n };\n document.addEventListener('mousedown', onClick);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onClick);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n const signInTrigger = (\n <a\n href={signInUrl}\n aria-label={signInLabel}\n data-oc-account-menu-signin=\"\"\n className={\n triggerClassName ??\n 'border-input bg-background hover:bg-accent inline-flex h-8 items-center justify-center rounded-md border px-3 font-mono text-[11px] font-semibold tracking-widest uppercase transition-colors'\n }\n >\n {signInLabel}\n </a>\n );\n\n // The mobile `☰` (nav + appearance) sits to the LEFT of the identity slot\n // on phones; on md+ it's hidden (nav is inline via OcPrimaryNav, appearance\n // is the desktop palette). Only rendered when this site has nav links.\n const hasNav = ((primaryNavLinks?.length ?? 0) + (secondaryNavLinks?.length ?? 0)) > 0;\n const wrap = (identity: ReactNode) => (\n <div className={cn('flex items-center gap-1', className)} data-oc-account-menu=\"\">\n {hasNav ? <MobileMenu primary={primaryNavLinks} secondary={secondaryNavLinks} /> : null}\n {identity}\n </div>\n );\n\n // States 1 + 2: pre-hydration or anonymous — render the same\n // placeholder/CTA so the slot is never empty.\n if (!hydrated || status === 'loading') {\n return wrap(signInTrigger);\n }\n\n if (status !== 'authenticated' || !account) {\n return wrap(signInTrigger);\n }\n\n // Authenticated — pill + popover. The collapsed label is the\n // user's vanity display name if they set one, otherwise the\n // identity they promoted (`displayIdentity` — defaults to their\n // sign-in identity, ultimately the did).\n const displayName = account.displayName ?? null;\n const label = displayName ?? obscureIdentity(account.displayIdentity.value);\n\n return wrap(\n <div ref={wrapRef} className=\"relative inline-block\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={`Signed in as ${account.didOc}. Open account menu.`}\n className={\n triggerClassName ??\n 'border-primary/40 bg-card hover:bg-accent inline-flex h-8 items-center gap-1.5 rounded-md border px-2 font-mono text-[11px] tracking-wide transition-colors sm:px-3'\n }\n data-oc-account-menu-trigger=\"\"\n >\n <span className=\"bg-primary inline-block size-1.5 shrink-0 rounded-full\" aria-hidden />\n {/* Below sm the chip condenses to dot + chevron only — a long\n display name / obscured did otherwise eats a phone header.\n The full label returns from sm up, capped so it can't blow\n out the row. */}\n <span className=\"text-foreground hidden max-w-[16ch] truncate sm:inline\">\n {label}\n </span>\n <svg\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 10 10\"\n aria-hidden\n className={\n 'opacity-60 transition-transform ' + (open ? 'rotate-180' : 'rotate-0')\n }\n >\n <path\n d=\"M2 4 L5 7 L8 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n fill=\"none\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n\n {open && (\n <div\n role=\"menu\"\n aria-label=\"Account menu\"\n className={\n popoverClassName ??\n 'border-border bg-popover text-popover-foreground absolute top-[calc(100%+6px)] right-0 z-50 w-[min(20rem,calc(100vw-1rem))] border shadow-xl'\n }\n data-oc-account-menu-popover=\"\"\n >\n <div className=\"border-border border-b p-3\">\n <div className=\"text-primary mb-1 font-mono text-[10px] tracking-widest uppercase\">\n § signed in · {hostname}\n {tabPinned ? (\n <span\n className=\"text-muted-foreground normal-case\"\n data-oc-account-menu-tab-pin=\"\"\n title=\"This tab keeps this account even if you switch accounts in another tab\"\n >\n {' '}\n · this tab\n </span>\n ) : null}\n </div>\n <CopyableDid did={account.didOc} />\n {/* Which identity this account actually IS (email /\n bitcoin / nostr) — surfaced next to the did so a tab\n signed into a DIFFERENT account than your other tabs\n is obvious at a glance, not buried behind the did.\n The did itself already shows above; skip the\n redundant did kind. */}\n {account.displayIdentity.kind !== 'did' &&\n account.displayIdentity.value ? (\n <div className=\"mt-1 flex items-center gap-1.5 font-mono text-[10px] tracking-wide\">\n <span className=\"text-muted-foreground uppercase\">\n {IDENTITY_KIND_LABEL[account.displayIdentity.kind]}\n </span>\n <span className=\"text-foreground/75\">\n {obscureIdentity(account.displayIdentity.value)}\n </span>\n </div>\n ) : null}\n {displayName ? (\n <div className=\"text-muted-foreground mt-1 font-mono text-[10px] tracking-wide\">\n {displayName}\n </div>\n ) : null}\n </div>\n\n <IdentityPromoteSection\n didOc={account.didOc}\n nostrNpub={account.nostrNpub ?? null}\n current={account.displayIdentity}\n open={open}\n setDisplayIdentity={setDisplayIdentity}\n />\n\n <AccountsSection\n roster={roster ?? []}\n switchAccount={switchAccount}\n addAccountUrl={addAccountUrl}\n signOut={signOut}\n onActionStart={() => setOpen(false)}\n />\n\n {primaryNavLinks && primaryNavLinks.length > 0 ? (\n <PopoverSection\n label=\"navigate\"\n items={primaryNavLinks}\n onItemClick={() => setOpen(false)}\n className=\"hidden md:block\"\n />\n ) : null}\n\n <div className=\"p-1\" data-oc-account-menu-section=\"account\">\n {menuItems?.map((item) => {\n const onClick = () => setOpen(false);\n const cls =\n 'hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors';\n const inner = (\n <>\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{item.label}</span>\n {item.external ? (\n <span\n className=\"text-muted-foreground text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return item.external ? (\n <a\n key={item.href}\n href={item.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </a>\n ) : (\n <Link\n key={item.href}\n href={item.href}\n onClick={onClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n {inner}\n </Link>\n );\n })}\n\n {familyDashboardEnabled ? (\n <a\n href=\"https://ochk.io/dashboard\"\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={() => setOpen(false)}\n role=\"menuitem\"\n className=\"hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors\"\n data-oc-account-menu-item=\"\"\n data-oc-account-menu-family-dashboard=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">family dashboard</span>\n <span\n className=\"text-muted-foreground text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n </a>\n ) : null}\n\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={() => {\n setOpen(false);\n // Await the logout round-trip — its response is\n // what clears the `.ochk.io` cookie — and only\n // THEN hard-navigate home. Navigating first\n // (the old behavior) raced the next page's\n // session check against the still-uncleared\n // cookie, so the account badge stayed \"signed\n // in\" until a second sign-out. The hard\n // navigation is a committed browser navigation,\n // so it still wins over any auth-gated page's\n // redirect-to-sign-in effect.\n void (async () => {\n await signOut();\n if (typeof window !== 'undefined') {\n window.location.assign(signOutRedirect);\n }\n })();\n }}\n className=\"hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left font-mono text-[11px] tracking-wide transition-colors\"\n data-oc-account-menu-item=\"\"\n data-oc-account-menu-signout=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">sign out</span>\n </button>\n </div>\n\n {secondaryNavLinks && secondaryNavLinks.length > 0 ? (\n <PopoverSection\n label=\"more\"\n items={secondaryNavLinks}\n onItemClick={() => setOpen(false)}\n bordered\n className=\"hidden md:block\"\n />\n ) : null}\n\n {build ? <BuildFooter hostname={hostname} build={build} state={siteState} /> : null}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Multi-account · `§ accounts` section. Lists the other accounts the\n * user has signed into in this browser (the roster), lets them switch\n * with one click, surfaces an \"Add another account\" entry point that\n * routes through `addAccountUrl()` (the auth host preserves the\n * current roster_id when signing in via `?add=1`), and adapts the\n * sign-out affordance to support `scope: 'current'` per row.\n *\n * Gate: the whole section is suppressed when `addAccountUrl` isn't\n * provided. That's the back-compat signal for sites running a parallel\n * auth context (e.g. oc-www's local `useAuth`) — they can adopt\n * multi-account incrementally by wiring the new props on\n * `OcAccountMenuSession` as they build out support.\n */\nfunction AccountsSection({\n roster,\n switchAccount,\n addAccountUrl,\n signOut,\n onActionStart,\n}: {\n roster: OcAccountSummary[];\n switchAccount: ((didOc: string) => Promise<void>) | undefined;\n addAccountUrl: ((returnTo?: string) => string) | undefined;\n signOut: (opts?: { scope?: OcSignOutScope }) => void | Promise<void>;\n onActionStart: () => void;\n}) {\n const [switching, setSwitching] = useState<string | null>(null);\n const [err, setErr] = useState<string | null>(null);\n\n if (!addAccountUrl) return null;\n\n const onSwitch = async (didOc: string) => {\n if (!switchAccount || switching) return;\n setSwitching(didOc);\n setErr(null);\n try {\n await switchAccount(didOc);\n // Keep the menu open just long enough for the active label\n // to flip; the surrounding popover-close-on-outside-click\n // will pick up the user's next interaction.\n } catch (e) {\n setErr(e instanceof Error ? e.message : 'switch failed');\n } finally {\n setSwitching(null);\n }\n };\n\n return (\n <div className=\"border-border border-b p-1\" data-oc-account-menu-section=\"accounts\">\n <div className=\"text-muted-foreground px-3 pt-2 pb-1 font-mono text-[10px] tracking-widest uppercase\">\n § accounts\n </div>\n {roster.map((peer) => (\n <SwitchRow\n key={peer.didOc}\n peer={peer}\n busy={switching === peer.didOc}\n disabled={switching !== null}\n onSwitch={() => void onSwitch(peer.didOc)}\n />\n ))}\n <a\n href={addAccountUrl()}\n onClick={() => onActionStart()}\n role=\"menuitem\"\n data-oc-account-menu-add-account=\"\"\n className=\"hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors\"\n >\n <Plus className=\"text-muted-foreground size-3.5 shrink-0\" aria-hidden />\n <span className=\"flex-1\">\n {roster.length === 0 ? 'add another account' : 'add another'}\n </span>\n </a>\n {/* \"leave this account\" only makes sense WITH peers in the\n * roster — without them, scope='current' degrades to scope='all'\n * and the parent menu's bottom \"sign out\" row already covers\n * that case. Rendering both produces two identical sign-out\n * affordances; gate on peer count to suppress the duplicate. */}\n {roster.length > 0 ? (\n <button\n type=\"button\"\n role=\"menuitem\"\n onClick={() => {\n onActionStart();\n void (async () => {\n try {\n await signOut({ scope: 'current' });\n } catch {\n // local state still flips · cookie may not\n }\n // No hard-nav · `scope: 'current'` with peers\n // in the roster keeps the browser signed-in to\n // the next-best account; the refresh() inside\n // signOut updates the badge in place.\n })();\n }}\n data-oc-account-menu-leave-current=\"\"\n className=\"hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left font-mono text-[11px] tracking-wide transition-colors\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">leave this account</span>\n </button>\n ) : null}\n {err ? (\n <div className=\"text-destructive/80 px-3 pt-1 pb-2 font-mono text-[10px]\">\n {err}\n </div>\n ) : null}\n </div>\n );\n}\n\n/**\n * One row in `§ accounts` — a switch-target peer. Clicking the body\n * calls `onSwitch`; while in-flight the row shows a spinner and the\n * other rows in the list are disabled.\n */\nfunction SwitchRow({\n peer,\n busy,\n disabled,\n onSwitch,\n}: {\n peer: OcAccountSummary;\n busy: boolean;\n disabled: boolean;\n onSwitch: () => void;\n}) {\n const label = peer.displayName ?? obscureIdentity(peer.displayIdentity.value);\n const kindLabel = IDENTITY_KIND_LABEL[peer.displayIdentity.kind];\n return (\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={false}\n aria-label={`Switch to ${peer.didOc}`}\n disabled={disabled}\n onClick={onSwitch}\n data-oc-account-menu-switch-row=\"\"\n className=\"hover:bg-accent flex w-full items-center gap-2 px-3 py-2 text-left font-mono text-[11px] tracking-wide transition-colors disabled:cursor-default\"\n >\n <span\n className=\"border-muted-foreground/40 flex size-3.5 shrink-0 items-center justify-center rounded-full border\"\n aria-hidden\n />\n <span className=\"text-foreground/90 min-w-0 flex-1 truncate\">{label}</span>\n <span className=\"text-muted-foreground w-14 shrink-0 text-right text-[9px] tracking-widest uppercase\">\n {busy ? <Loader2 className=\"ml-auto size-3 animate-spin\" /> : kindLabel}\n </span>\n </button>\n );\n}\n\n/**\n * Single nav section inside the identity popover (e.g. `§ navigate`, `§ more`).\n * Rendered DESKTOP-ONLY (`hidden md:block`) by callers: on mobile the same\n * links live in the account menu's `☰`, so showing them here too would double\n * up. On desktop it's the nav home for console sites that have no inline\n * OcPrimaryNav.\n */\nfunction PopoverSection({\n label,\n items,\n onItemClick,\n bordered,\n className,\n}: {\n label: string;\n items: ReadonlyArray<OcAccountMenuItem>;\n onItemClick: () => void;\n bordered?: boolean;\n className?: string;\n}) {\n const cls =\n 'hover:bg-accent flex items-center gap-2 px-3 py-2 font-mono text-[11px] tracking-wide transition-colors';\n return (\n <div\n className={cn('p-1', bordered && 'border-border border-t', className)}\n data-oc-account-menu-section={label}\n >\n <div className=\"text-muted-foreground px-3 pt-2 pb-1 font-mono text-[10px] tracking-widest uppercase\">\n § {label}\n </div>\n {items.map((item) =>\n item.external ? (\n <a\n key={item.href}\n href={item.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onItemClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{item.label}</span>\n <span className=\"text-muted-foreground text-[10px]\" aria-hidden>\n ↗\n </span>\n </a>\n ) : (\n <Link\n key={item.href}\n href={item.href}\n onClick={onItemClick}\n role=\"menuitem\"\n className={cls}\n data-oc-account-menu-item=\"\"\n >\n <span className=\"text-muted-foreground\" aria-hidden>\n →\n </span>\n <span className=\"flex-1\">{item.label}</span>\n </Link>\n )\n )}\n </div>\n );\n}\n\nfunction BuildFooter({\n hostname,\n build,\n state,\n}: {\n hostname: string;\n build: OcAccountMenuBuildInfo;\n state?: SiteState;\n}) {\n const sha = build.sha;\n const showSha = !!sha && sha !== 'dev';\n const commitUrl = showSha && build.repo ? `https://github.com/${build.repo}/commit/${sha}` : null;\n return (\n <div\n className=\"text-muted-foreground border-border border-t px-3 py-2 font-mono text-[9.5px] tracking-widest uppercase\"\n data-oc-account-menu-build=\"\"\n >\n {hostname}\n {state && state !== 'live' ? (\n <>\n {' · '}\n <span className=\"text-muted-foreground\">{state}</span>\n </>\n ) : null}{' '}\n <span className=\"text-muted-foreground\">\n v{build.version}\n {showSha ? (\n <>\n {' · '}\n {commitUrl ? (\n <a\n href={commitUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"hover:text-foreground/90 underline decoration-dotted underline-offset-2\"\n >\n {sha}\n </a>\n ) : (\n sha\n )}\n </>\n ) : null}\n </span>\n </div>\n );\n}\n","\"use client\";\n\nimport Link from \"next/link\";\nimport type { ReactNode } from \"react\";\n\n/**\n * `<OcPrimaryNav>` — the centered link row in every family site's\n * `<LayoutHeader>`. Replaces the per-site bespoke `<nav>` blocks.\n *\n * **Desktop-only.** The inline row shows at `md+`; below that it is hidden,\n * because on mobile the same links live in the account menu's `☰` drawer\n * (`OcAccountMenu`, rendered to the left of the identity chip) — one shared\n * mobile-nav pattern, no centered hamburger, no per-site fork.\n *\n * Active item is `text-primary`; siblings are muted. Active affordance is\n * text-only (no underline / bottom stripe) — deliberately restrained.\n *\n * **Usage:**\n *\n * <OcPrimaryNav\n * activePath={router.pathname}\n * links={[\n * { href: '/dashboard', label: 'dashboard' },\n * { href: 'https://docs.ochk.io/attest', label: 'docs', external: true },\n * ]}\n * />\n */\n\nexport interface OcPrimaryNavLink {\n /** Same-origin path or absolute URL. */\n href: string;\n /** Visible label · lowercase preferred (the chip styling applies tracking + uppercase). */\n label: string;\n /** When true, opens in a new tab and skips the `isActive` check. */\n external?: boolean;\n /** Optional override for the active-match. By default the link is\n * active when `activePath === href` or `activePath.startsWith(href + '/')`. */\n matchExact?: boolean;\n}\n\nexport interface OcPrimaryNavProps {\n /** Current router pathname for active-link highlight. */\n activePath: string;\n /** Link set. Keep to 2–5 entries. */\n links: ReadonlyArray<OcPrimaryNavLink>;\n /** className for the outer container. */\n className?: string;\n}\n\nfunction isActive(pathname: string, link: OcPrimaryNavLink): boolean {\n if (link.external) return false;\n if (link.matchExact) return pathname === link.href;\n if (link.href === \"/\") return pathname === \"/\";\n return pathname === link.href || pathname.startsWith(link.href + \"/\");\n}\n\nexport function OcPrimaryNav({\n activePath,\n links,\n className,\n}: OcPrimaryNavProps) {\n return (\n <nav\n aria-label=\"primary\"\n className={\n \"hidden items-center gap-0.5 sm:gap-1 md:flex \" + (className ?? \"\")\n }\n data-oc-primary-nav=\"\"\n >\n {links.map((link) => {\n const active = isActive(activePath, link);\n const cls =\n \"font-display shrink-0 px-2 py-1 sm:px-3 text-[11px] sm:text-[12px] font-semibold tracking-wider uppercase transition-colors \" +\n (active\n ? \"text-primary\"\n : \"text-muted-foreground hover:text-foreground\");\n const content: ReactNode = (\n <>\n {link.label}\n {link.external ? (\n <span\n aria-hidden\n className=\"text-muted-foreground ml-1 text-[9px]\"\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return link.external ? (\n <a\n key={link.href}\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cls}\n data-oc-primary-nav-item=\"\"\n >\n {content}\n </a>\n ) : (\n <Link\n key={link.href}\n href={link.href}\n aria-current={active ? \"page\" : undefined}\n className={cls}\n data-oc-primary-nav-item={active ? \"active\" : \"sibling\"}\n >\n {content}\n </Link>\n );\n })}\n </nav>\n );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { useEffect, useState, type ReactNode } from 'react';\n\n/**\n * `<OcDashboardShell>` — the canonical demo-app frame for protocol\n * sites. Mirrors the `MeShell` pattern from `me.ochk.io`: persistent\n * left-rail tools on desktop, off-canvas drawer on mobile, page\n * eyebrow + title + description above the children.\n *\n * Drives the unified \"dashboard pattern\" the family rolled out\n * 2026-05-14: every protocol site's `/dashboard` (and the demo pages\n * underneath — `/create`, `/verify`, `/discover`, `/playground`, etc.)\n * wraps in this shell, so visitors crossing protocols experience the\n * same chrome.\n *\n * Layout (desktop):\n *\n * ┌─────────────┬────────────────────────────────────┐\n * │ § dashboard │ eyebrow │\n * │ ── tools ── │ title │\n * │ create ● │ description │\n * │ verify │ │\n * │ discover │ ── children ─────────────────────│\n * │ ... │ │\n * └─────────────┴────────────────────────────────────┘\n *\n * Mobile (<md): sidebar collapses behind a hamburger button at the\n * top of the main column; tapping opens a full-width drawer.\n */\n\nexport interface OcDashboardTool {\n /** Stable identifier · used as `active` key. */\n id: string;\n /** Same-origin path the tool lives at. */\n href: string;\n /** Visible label · lowercase preferred. */\n label: string;\n /** Optional one-line tagline shown under the label in the rail and\n * on the dashboard hub cards. */\n tagline?: string;\n /** Optional ascii / unicode glyph rendered before the label. */\n icon?: ReactNode;\n /** When true, opens in a new tab (e.g. an external explorer). */\n external?: boolean;\n}\n\nexport interface OcDashboardShellProps {\n /**\n * Dashboard root path — the rail header links here (\"§ dashboard\").\n * Default `'/dashboard'`.\n */\n rootHref?: string;\n /**\n * Site display name shown in the rail header above the tools list\n * (e.g. `'oc·attest'`).\n */\n siteLabel?: ReactNode;\n /** Tools to surface in the left rail. */\n tools: ReadonlyArray<OcDashboardTool>;\n /**\n * Which tool is currently active — matched against each tool's\n * `id`. Pass `undefined` on the dashboard hub itself.\n */\n active?: string;\n /** Optional small mono label above the page title. */\n eyebrow?: ReactNode;\n /** Page title — rendered as h1. */\n title?: ReactNode;\n /** Page description — rendered as a paragraph below the title. */\n description?: ReactNode;\n /** Main column content. */\n children: ReactNode;\n /** className for the outer container. */\n className?: string;\n}\n\nexport function OcDashboardShell({\n rootHref = '/dashboard',\n siteLabel,\n tools,\n active,\n eyebrow,\n title,\n description,\n children,\n className,\n}: OcDashboardShellProps) {\n const [drawerOpen, setDrawerOpen] = useState(false);\n\n // Close drawer on Escape, lock body scroll while open.\n useEffect(() => {\n if (!drawerOpen) return;\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setDrawerOpen(false);\n }\n document.addEventListener('keydown', onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = prevOverflow;\n };\n }, [drawerOpen]);\n\n const hasHeader = Boolean(title) || Boolean(eyebrow);\n\n return (\n <div\n className={'container ' + (className ?? '')}\n data-oc-dashboard-shell=\"\"\n >\n <div className=\"flex min-h-[calc(100vh-3rem)] flex-col md:flex-row md:gap-8\">\n {/* Desktop sidebar */}\n <Sidebar\n rootHref={rootHref}\n siteLabel={siteLabel}\n tools={tools}\n active={active}\n variant=\"desktop\"\n />\n\n {/* Main column */}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {/* Mobile bar — hamburger + crumb */}\n <div className=\"border-border flex items-center justify-between border-b py-3 md:hidden\">\n <button\n type=\"button\"\n onClick={() => setDrawerOpen(true)}\n className=\"text-muted-foreground hover:text-foreground inline-flex h-9 items-center gap-2 px-1 font-mono text-[11px] tracking-widest uppercase transition-colors\"\n aria-label=\"open dashboard tools\"\n aria-expanded={drawerOpen}\n data-oc-dashboard-mobile-trigger=\"\"\n >\n <span className=\"text-[14px] leading-none\">≡</span>\n <span>tools</span>\n </button>\n <Link\n href={rootHref}\n className=\"text-primary font-mono text-[11px] tracking-widest uppercase\"\n >\n § dashboard\n </Link>\n </div>\n\n <div className=\"pt-6 md:pt-3\">\n {hasHeader && (\n <div className=\"max-w-3xl\">\n {eyebrow ? (\n <div className=\"label-mono text-primary mb-3 font-mono text-[10px] tracking-widest uppercase\">\n {eyebrow}\n </div>\n ) : null}\n {title ? (\n <h1 className=\"font-display text-2xl font-bold tracking-tight sm:text-3xl\">\n {title}\n </h1>\n ) : null}\n {description ? (\n <p className=\"text-muted-foreground mt-3 max-w-[64ch] text-sm leading-relaxed\">\n {description}\n </p>\n ) : null}\n </div>\n )}\n <div className={hasHeader ? 'mt-8 pb-12' : 'pb-12'}>{children}</div>\n </div>\n </div>\n </div>\n\n {/* Mobile drawer */}\n {drawerOpen ? (\n <div\n className=\"fixed inset-0 z-50 md:hidden\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"dashboard tools\"\n data-oc-dashboard-drawer=\"\"\n >\n <div\n className=\"absolute inset-0 bg-background/80 backdrop-blur-sm\"\n onClick={() => setDrawerOpen(false)}\n aria-hidden\n />\n <div className=\"bg-background absolute top-0 left-0 h-full w-[85vw] max-w-sm border-r shadow-xl\">\n <Sidebar\n rootHref={rootHref}\n siteLabel={siteLabel}\n tools={tools}\n active={active}\n variant=\"drawer\"\n onClose={() => setDrawerOpen(false)}\n />\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction Sidebar({\n rootHref,\n siteLabel,\n tools,\n active,\n variant,\n onClose,\n}: {\n rootHref: string;\n siteLabel?: ReactNode;\n tools: ReadonlyArray<OcDashboardTool>;\n active?: string;\n variant: 'desktop' | 'drawer';\n onClose?: () => void;\n}) {\n const isDrawer = variant === 'drawer';\n return (\n <aside\n className={\n isDrawer\n ? 'flex h-full w-full flex-col bg-card'\n : 'hidden md:sticky md:top-4 md:flex md:h-[calc(100vh-2rem)] md:w-56 md:shrink-0 md:flex-col md:self-start md:overflow-y-auto md:rounded md:border md:bg-card/40 lg:w-60'\n }\n aria-label=\"dashboard tools\"\n data-oc-dashboard-sidebar={variant}\n >\n {/* identity strip */}\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <Link\n href={rootHref}\n onClick={onClose}\n className=\"hover:text-foreground font-display text-sm font-bold tracking-tight\"\n >\n § dashboard\n </Link>\n {isDrawer ? (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"text-muted-foreground hover:text-foreground -mr-2 inline-flex h-8 w-8 items-center justify-center rounded font-mono text-lg\"\n aria-label=\"close navigation\"\n >\n ×\n </button>\n ) : null}\n </div>\n {siteLabel ? (\n <div className=\"text-muted-foreground mt-1 font-mono text-[10px] tracking-widest uppercase\">\n {siteLabel}\n </div>\n ) : null}\n </div>\n\n <nav className=\"flex-1 overflow-y-auto px-2 py-3\">\n <div className=\"text-muted-foreground mb-1 px-3 font-mono text-[10px] tracking-widest uppercase\">\n § tools\n </div>\n <ul className=\"space-y-0.5\">\n {tools.map((tool) => {\n const isActive = tool.id === active;\n const innerCls =\n 'flex items-baseline gap-2 rounded px-3 py-1.5 text-[12.5px] transition-colors ' +\n (isActive\n ? 'bg-primary/10 text-primary font-semibold'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted/30');\n const content = (\n <>\n {tool.icon ? (\n <span\n className={\n 'shrink-0 font-mono text-[11px] ' +\n (isActive ? 'text-primary' : 'text-muted-foreground')\n }\n aria-hidden\n >\n {tool.icon}\n </span>\n ) : null}\n <span className=\"flex-1 leading-tight\">\n <span>{tool.label}</span>\n {tool.tagline ? (\n <span className=\"text-muted-foreground mt-0.5 block font-mono text-[10px] tracking-wide normal-case\">\n {tool.tagline}\n </span>\n ) : null}\n </span>\n {tool.external ? (\n <span\n className=\"text-muted-foreground text-[10px]\"\n aria-hidden\n >\n ↗\n </span>\n ) : null}\n </>\n );\n return (\n <li key={tool.id}>\n {tool.external ? (\n <a\n href={tool.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n onClick={onClose}\n className={innerCls}\n data-oc-dashboard-tool={isActive ? 'active' : 'sibling'}\n >\n {content}\n </a>\n ) : (\n <Link\n href={tool.href}\n onClick={onClose}\n aria-current={isActive ? 'page' : undefined}\n className={innerCls}\n data-oc-dashboard-tool={isActive ? 'active' : 'sibling'}\n >\n {content}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n </aside>\n );\n}\n\n/**\n * Convenience: the dashboard hub-page grid. Renders the same set of\n * tools as the sidebar, but as bigger card-style entries — used as\n * the body of `/dashboard/index.tsx` on each protocol site.\n */\nexport interface OcDashboardHubProps {\n tools: ReadonlyArray<OcDashboardTool>;\n className?: string;\n}\n\nexport function OcDashboardHub({ tools, className }: OcDashboardHubProps) {\n return (\n <ul\n className={\n 'grid gap-px border-t border-l sm:grid-cols-2 ' + (className ?? '')\n }\n data-oc-dashboard-hub=\"\"\n >\n {tools.map((tool) => {\n const content = (\n <span className=\"flex h-full flex-col gap-3 p-5 transition-colors\">\n <span className=\"flex items-baseline gap-3\">\n {tool.icon ? (\n <span\n className=\"text-primary font-mono text-[13px]\"\n aria-hidden\n >\n {tool.icon}\n </span>\n ) : null}\n <span className=\"font-display text-foreground text-base font-bold tracking-tight\">\n {tool.label}\n </span>\n {tool.external ? (\n <span\n className=\"text-muted-foreground ml-auto text-xs\"\n aria-hidden\n >\n ↗\n </span>\n ) : (\n <span\n className=\"text-muted-foreground ml-auto text-xs\"\n aria-hidden\n >\n →\n </span>\n )}\n </span>\n {tool.tagline ? (\n <span className=\"text-muted-foreground text-sm leading-relaxed\">\n {tool.tagline}\n </span>\n ) : null}\n </span>\n );\n const cls = 'hover:bg-muted/30 group block border-r border-b transition-colors';\n return (\n <li key={tool.id}>\n {tool.external ? (\n <a\n href={tool.href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cls}\n >\n {content}\n </a>\n ) : (\n <Link href={tool.href} className={cls}>\n {content}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n );\n}\n","import type { ReactNode } from 'react';\n\n/**\n * AppShell — shared page chrome for every authenticated dashboard surface\n * across the OC family (vault, me, future). Lifted from oc-me-web's\n * `MeShell` and oc-vault-web's `VaultShell` — same eyebrow / title /\n * description / actions header band, no sidebar (sidebars are app-specific\n * and stay in the consuming app).\n *\n * Usage:\n * <AppShell eyebrow=\"§ vault\" title=\"your vault.\" description=\"…\">\n * ...\n * </AppShell>\n *\n * The component is stateless and dependency-free. Tailwind classes assume\n * the consuming site loads the family `globals.css` (which defines\n * `.container`, `.label-mono`, the dark-by-default palette, etc.).\n */\n\nexport interface AppShellProps {\n eyebrow?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n /** Right-aligned action node rendered next to the title (e.g. CTA buttons). */\n headerActions?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function AppShell({\n eyebrow,\n title,\n description,\n headerActions,\n children,\n className,\n}: AppShellProps) {\n const hasHeader = Boolean(title);\n return (\n <div className={'container ' + (className ?? '')}>\n <div className=\"flex min-h-[calc(100vh-3rem)] flex-col\">\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <div className=\"pt-6 md:pt-8\">\n {hasHeader && (\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"max-w-3xl\">\n {eyebrow && (\n <div className=\"label-mono text-primary mb-3\">\n {eyebrow}\n </div>\n )}\n <h1 className=\"font-display text-2xl font-bold tracking-tight sm:text-3xl\">\n {title}\n </h1>\n {description && (\n <p className=\"text-muted-foreground mt-3 max-w-[64ch] text-sm leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n {headerActions && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {headerActions}\n </div>\n )}\n </div>\n )}\n <div className={hasHeader ? 'mt-8 pb-12' : 'pb-12'}>{children}</div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface LayoutSubHeaderTag {\n label: string;\n /** Hide this tag below the given breakpoint (progressive disclosure). */\n hideBelow?: 'sm' | 'md' | 'lg';\n}\n\nexport interface LayoutSubHeaderProps {\n /** Product label shown after the status, e.g. \"oc · stamp\". */\n product: string;\n /** Left-side status text. Defaults to \"live · mainnet\". */\n status?: string;\n /**\n * Right-side capability tag(s). Keep it to ONE short phrase per site —\n * the strip reads as quiet supporting context, not a feature list. A\n * second/third tag is supported (spaced, never comma-jammed) for the rare\n * site that needs it, each with its own `hideBelow`.\n */\n tags?: LayoutSubHeaderTag[];\n /** Hide the pulsing heartbeat dot (e.g. on a degraded surface). */\n noHeartbeat?: boolean;\n className?: string;\n}\n\nconst HIDE: Record<NonNullable<LayoutSubHeaderTag['hideBelow']>, string> = {\n sm: 'hidden sm:inline',\n md: 'hidden md:inline',\n lg: 'hidden lg:inline',\n};\n\n/**\n * LayoutSubHeader — the ecosystem status strip below the header. One line,\n * never wraps. Identical shape across every family surface:\n *\n * ● live · mainnet oc · stamp ················· bip-322 · opentimestamps\n *\n * Left cluster (heartbeat + status + product) is the identity; the right\n * cluster is a quiet capability whisper (full muted tone: any opacity drops it under 4.5:1). Below `sm` the strip\n * collapses to just the heartbeat + product so it never wraps or crowds a\n * phone header — the right cluster and the `status` reappear from `sm` up.\n *\n * The band carries a faint skin-tinted translucent shade (`.oc-substrip`) so\n * it has presence on every skin × mode without bleeding the hero/aurora\n * behind it. Pass `product`, optional `status`, and `tags`.\n */\nexport function LayoutSubHeader({\n product,\n status = 'live · mainnet',\n tags = [],\n noHeartbeat = false,\n className,\n}: LayoutSubHeaderProps) {\n return (\n <div className={cn('oc-substrip border-b', className)}>\n <div className=\"container flex items-center justify-between gap-x-6 py-2 font-mono text-[11px]\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n {!noHeartbeat && (\n <span\n className=\"bg-primary inline-block size-1.5 shrink-0 animate-pulse rounded-full ring-2 ring-[color-mix(in_oklch,var(--primary),transparent_78%)]\"\n aria-hidden\n />\n )}\n <span className=\"text-muted-foreground hidden tracking-widest whitespace-nowrap uppercase sm:inline\">\n {status}\n </span>\n <span className=\"text-foreground truncate\">{product}</span>\n </div>\n {tags.length > 0 && (\n <div className=\"text-muted-foreground hidden shrink-0 items-center gap-x-3 tracking-wider whitespace-nowrap uppercase sm:flex\">\n {tags.map((tag, i) => (\n <span key={i} className={tag.hideBelow ? HIDE[tag.hideBelow] : undefined}>\n {tag.label}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface OcAppBarProps {\n /**\n * `'full'` (default) = edge-to-edge app chrome: a `.app-bar` row (responsive\n * gutters, NO max-width), so the header's left/right edges align with a\n * full-bleed app shell below it. `'contained'` = the same row inside\n * `.container` (max-w-screen-xl), identical to the marketing/content header —\n * an escape hatch, rarely needed.\n */\n variant?: 'full' | 'contained';\n /** Logo slot — pass `<OcLogoDropdown>…</OcLogoDropdown>` with the site wordmark. */\n start?: ReactNode;\n /** Center slot — pass `<OcPrimaryNav … />`. Centered, flex-1, min-w-0. */\n center?: ReactNode;\n /** Trailing actions — pass e.g. `<HeaderAccount /><OcAppearanceMenu />`. */\n end?: ReactNode;\n /** Stick to the top of the viewport. Default `true`. Keeps `h-12` (3rem). */\n sticky?: boolean;\n className?: string;\n}\n\n/**\n * `OcAppBar` — the sanctioned FULL-BLEED application header for full-screen app\n * surfaces (chat `/app`, the analytics cockpit, the forge console, the me\n * operator plane …). It is the app-surface counterpart to the constrained\n * marketing/content header: the SAME primitives (`OcLogoDropdown` /\n * `OcPrimaryNav` / `OcAccountMenu`) mounted in an edge-to-edge `.app-bar` row\n * (gutters only, no `max-w-screen-xl`) instead of a centered `.container`, so a\n * full-bleed app shell underneath lines up edge-to-edge with the chrome above.\n *\n * Marketing / content / protocol pages keep the constrained `.container`\n * header — never use `OcAppBar` over a `.container`-capped body, or you\n * re-introduce the left/right misalignment this composition exists to fix.\n *\n * Auth-free and brand-free by design: all branding + session chrome arrive\n * through the `start` / `center` / `end` slots, so app sites and content sites\n * share one primitive layer and can never visually drift. The fixed `h-12`\n * (3rem) lets a shell below claim `h-[calc(100dvh-3rem)]`.\n */\nexport function OcAppBar({\n variant = 'full',\n start,\n center,\n end,\n sticky = true,\n className,\n}: OcAppBarProps) {\n return (\n <header\n className={cn(\n 'bg-background/90 supports-[backdrop-filter]:bg-background/70 w-full border-b backdrop-blur',\n sticky && 'sticky top-0 z-50',\n className\n )}\n >\n <div\n className={cn(\n variant === 'full' ? 'app-bar' : 'container',\n 'flex h-12 items-center justify-between gap-4'\n )}\n >\n {start}\n <div className=\"flex min-w-0 flex-1 justify-center px-2\">{center}</div>\n <div className=\"flex items-center gap-1\">{end}</div>\n </div>\n </header>\n );\n}\n","import Link from \"next/link\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../tokens/cn\";\nimport { FAMILY_PROPERTIES, type FamilyCategory } from \"./family-properties\";\n\nexport interface FooterLink {\n href: string;\n label: string;\n /** Render as a cross-origin `<a target=\"_blank\">` with a ↗ affordance. */\n external?: boolean;\n}\n\nexport interface FooterColumn {\n /** Column heading, e.g. `'§ docs'`. */\n label: string;\n links: FooterLink[];\n}\n\nexport interface OcFamilyFooterBrand {\n /** The site's own logo mark (e.g. `<LogoMark size={20} />`). Optional. */\n mark?: ReactNode;\n /** Wordmark, e.g. `'oc·stamp'`. */\n wordmark: ReactNode;\n /** One-paragraph blurb under the wordmark (may contain links). */\n tagline: ReactNode;\n /** Optional license / attribution lines under the blurb. */\n meta?: ReactNode;\n}\n\nexport interface OcFamilyFooterProps {\n brand: OcFamilyFooterBrand;\n /** The site's own `§`-labelled link groups. */\n columns?: FooterColumn[];\n /**\n * Append registry-driven family columns (products / protocols) sourced from\n * `FAMILY_PROPERTIES`, so any footer that lists the family can never drift\n * from the canonical table. `'products'` is the five live products, etc.\n */\n family?: \"products\" | \"protocols\" | \"both\";\n /** Origin the legal-bar links resolve against. Defaults to ochk.io. */\n legalBase?: string;\n /** Override the left copyright line. Defaults to the canonical OC line. */\n legalCopyright?: ReactNode;\n /**\n * Override the centre legal links. Defaults to privacy / terms / security /\n * trademarks / contact (resolved against `legalBase`). Pass your own when a\n * site needs an extra link (e.g. a federation charter) or a shorter set.\n */\n legalLinks?: FooterLink[];\n /** Override the right-hand bitcoin tag (e.g. `'read on bitcoin'`). */\n builtWith?: ReactNode;\n className?: string;\n}\n\n// brand block + N content columns in one grid, mirroring the historical\n// per-site layout (`[1.2fr 1fr 1fr …]`). Keyed by content-column count so the\n// brand block keeps its wider share at every width.\nconst GRID: Record<number, string> = {\n 1: \"md:grid-cols-[1.2fr_1fr]\",\n 2: \"md:grid-cols-[1.2fr_1fr_1fr]\",\n 3: \"md:grid-cols-[1.2fr_1fr_1fr_1fr]\",\n 4: \"md:grid-cols-[1.2fr_1fr_1fr_1fr_1fr]\",\n 5: \"md:grid-cols-[1.2fr_1fr_1fr_1fr_1fr_1fr]\",\n};\n\n// min-h-11 on phones is the 44px tap target; md restores the dense desktop list.\nconst LINK_CLS =\n \"text-muted-foreground hover:text-foreground inline-flex min-h-11 min-w-11 items-center font-mono text-xs tracking-wide lowercase transition-colors md:min-h-0 md:min-w-0\";\n\nfunction FooterLinkItem({ link }: { link: FooterLink }) {\n if (link.external) {\n return (\n <a href={link.href} target=\"_blank\" rel=\"noreferrer\" className={LINK_CLS}>\n {\"> \"}\n {link.label} ↗\n </a>\n );\n }\n return (\n <Link href={link.href} className={LINK_CLS}>\n {\"> \"}\n {link.label}\n </Link>\n );\n}\n\nfunction FooterColumnView({ column }: { column: FooterColumn }) {\n return (\n <div>\n <div className=\"label-mono text-primary mb-3\">{column.label}</div>\n <ul className=\"md:space-y-2\">\n {column.links.map((link) => (\n <li key={`${column.label}:${link.href}`}>\n <FooterLinkItem link={link} />\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nfunction familyColumn(category: FamilyCategory, label: string): FooterColumn {\n return {\n label,\n links: FAMILY_PROPERTIES.filter((p) => p.category === category).map(\n (p) => ({\n href: p.origin,\n label: p.label,\n external: true,\n }),\n ),\n };\n}\n\n/**\n * `<OcFamilyFooter>` — the one canonical family footer. Brand block on the\n * left, `§`-labelled link columns to the right, a single legal bar beneath.\n * Every `oc-*` site composes this with its own `brand` + `columns`; pass\n * `family` to surface the registry-driven product / protocol columns so any\n * footer listing the family always shows the full, current set.\n */\nexport function OcFamilyFooter({\n brand,\n columns = [],\n family,\n legalBase = \"https://ochk.io\",\n legalCopyright,\n legalLinks,\n builtWith,\n className,\n}: OcFamilyFooterProps) {\n const familyCols: FooterColumn[] = [];\n if (family === \"products\" || family === \"both\") {\n familyCols.push(familyColumn(\"product\", \"§ products\"));\n }\n if (family === \"protocols\" || family === \"both\") {\n familyCols.push(familyColumn(\"protocol\", \"§ protocols\"));\n }\n\n const allColumns = [...familyCols, ...columns];\n const grid = GRID[allColumns.length] ?? GRID[3];\n const year = new Date().getFullYear();\n const legal = (path: string) => `${legalBase}${path}`;\n const links: FooterLink[] = legalLinks ?? [\n { href: legal(\"/privacy\"), label: \"privacy\" },\n { href: legal(\"/terms\"), label: \"terms\" },\n { href: legal(\"/security\"), label: \"security\" },\n { href: legal(\"/trademark\"), label: \"trademarks\" },\n { href: legal(\"/contact\"), label: \"contact\" },\n ];\n\n return (\n <footer className={cn(\"border-t\", className)}>\n <div className=\"container py-10 sm:py-12 md:py-16\">\n <div className={cn(\"grid gap-8 sm:grid-cols-2 sm:gap-10\", grid)}>\n <div>\n <div className=\"flex items-center gap-2\">\n {brand.mark}\n <span className=\"font-display text-sm font-bold tracking-tight\">\n {brand.wordmark}\n </span>\n </div>\n <div className=\"text-muted-foreground mt-3 max-w-[34ch] text-sm leading-relaxed\">\n {brand.tagline}\n </div>\n {brand.meta && <div className=\"mt-4\">{brand.meta}</div>}\n </div>\n {allColumns.map((column) => (\n <FooterColumnView key={column.label} column={column} />\n ))}\n </div>\n\n <div className=\"mt-10 flex flex-col items-start justify-between gap-3 border-t pt-6 font-mono text-[11px] tracking-widest uppercase sm:flex-row sm:items-center\">\n <span className=\"text-muted-foreground\">\n {legalCopyright ?? <>© {year} orangecheck · mit + cc-by-4.0</>}\n </span>\n <div className=\"text-muted-foreground flex flex-wrap items-center gap-x-4 md:gap-y-1\">\n {links.map((link) => (\n <a\n key={link.label}\n href={link.href}\n {...(link.external\n ? { target: \"_blank\", rel: \"noreferrer\" }\n : {})}\n className=\"hover:text-foreground inline-flex min-h-11 items-center transition-colors md:min-h-0\"\n >\n {link.label}\n </a>\n ))}\n </div>\n <span className=\"text-muted-foreground inline-flex items-center gap-1.5\">\n <span className=\"text-primary text-[13px] leading-none\">₿</span>\n <span>{builtWith ?? \"built with bitcoin\"}</span>\n </span>\n </div>\n </div>\n </footer>\n );\n}\n"]}
|