@orangecheck/design 0.30.1 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/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"],"names":["twMerge","clsx","id","useRef","useEffect","jsxs","jsx","createContext","useState","useCallback","value","useMemo","useContext","ONE_YEAR","useTheme","Palette","Check","Sun","Moon","Monitor","Waves","Pause","useId"],"mappings":"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","file":"tokens.js","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' | 'fleet' | '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 fleet: `<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\"/><path d=\"M8.5 9.5 L11 12 L8.5 14.5\" fill=\"none\" stroke=\"__INK__\" stroke-width=\"1.6\" stroke-linejoin=\"miter\" stroke-linecap=\"square\"/><rect x=\"12\" y=\"14\" width=\"4\" height=\"1.4\" 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', 'fleet', '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 fleet: 'translate(512 512) scale(1.5) translate(-512 -512)', // play + bar\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 fleet: [7, -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"]}
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"],"names":["twMerge","clsx","id","useRef","useEffect","jsxs","jsx","createContext","useState","useCallback","value","useMemo","useContext","ONE_YEAR","useTheme","Palette","Check","Sun","Moon","Monitor","Waves","Pause","useId"],"mappings":"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","file":"tokens.js","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"]}