@nxds/core 0.9.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/runtime/catalogue.cjs +123 -22
- package/dist/runtime/catalogue.cjs.map +1 -1
- package/dist/runtime/catalogue.d.cts +6 -5
- package/dist/runtime/catalogue.d.ts +6 -5
- package/dist/runtime/catalogue.js +123 -22
- package/dist/runtime/catalogue.js.map +1 -1
- package/dist/runtime/index.cjs +69 -5
- package/dist/runtime/index.cjs.map +1 -1
- package/dist/runtime/index.d.cts +11 -3
- package/dist/runtime/index.d.ts +11 -3
- package/dist/runtime/index.js +68 -5
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/palette.cjs +26 -3
- package/dist/runtime/palette.cjs.map +1 -1
- package/dist/runtime/palette.d.cts +3 -1402
- package/dist/runtime/palette.d.ts +3 -1402
- package/dist/runtime/palette.js +26 -3
- package/dist/runtime/palette.js.map +1 -1
- package/dist/runtime/token-scales.generated-CCNkHJ3I.d.cts +9 -0
- package/dist/runtime/token-scales.generated-CCNkHJ3I.d.ts +9 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/lib/adjust-contrast.ts","../../src/token-source/perceptual-grid.ts","../../src/token-source/perceptual-grid.json","../../src/token-source/perceptual-grid-hue.json","../../src/lib/oklch-format.ts","../../src/lib/palette.ts","../../tokens/primitives/color.json","../../src/lib/apca.ts","../../tokens/primitives/typography/typography-default.json","../../src/lib/contrast.ts","../../src/lib/semantic-palette-references.ts","../../src/lib/apca-pairs.ts","../../src/lib/perceptual-ramp.ts","../../src/lib/runtime-layer.ts","../../src/lib/appearance-model.ts","../../src/lib/derive-theme.ts","../../tokens/primitives/color.json","../../src/lib/primitive-palette.ts","../../src/lib/surface-ladder.ts","../../src/lib/appearance-snapshot.ts","../../src/lib/appearance-dom.ts","../../src/lib/brand-presets.ts","../../src/lib/theme-contrast.ts","../../src/lib/token-registry.ts"],"sourcesContent":["export type {\n AdjustContrastOptions,\n AdjustContrastPalette,\n AdjustContrastTier,\n} from './lib/adjust-contrast';\nexport { adjustContrast } from './lib/adjust-contrast';\nexport { apcaLc } from './lib/apca';\nexport * from './lib/appearance-dom';\nexport * from './lib/appearance-model';\nexport * from './lib/appearance-snapshot';\nexport * from './lib/brand-presets';\nexport type {\n DerivedTheme,\n NxdsThemeContract,\n ThemeDerivationInput,\n ThemeSeeds,\n TokenMap,\n} from './lib/derive-theme';\nexport { deriveTheme, themeToCss } from './lib/derive-theme';\nexport type { Mode, NxdsSurfaceTone, Tier } from './lib/palette';\nexport { PALETTE_KEYS, TIER_THRESHOLDS } from './lib/palette';\nexport { isColor } from './lib/perceptual-ramp';\nexport type { SurfaceToken } from './lib/surface-ladder';\nexport type { ThemeContrastCheck } from './lib/theme-contrast';\nexport { measureThemeContrast } from './lib/theme-contrast';\nexport {\n SEMANTIC_TOKEN_REGISTRY,\n type SemanticColorName,\n type SemanticTokenMeta,\n type TokenCategory,\n} from './lib/token-registry';\n","import { APCAcontrast, sRGBtoY } from 'apca-w3';\nimport { clampChroma, converter, type Oklch, oklch, parse } from 'culori';\n\nimport { PERCEPTUAL_L_GRID } from '../token-source/perceptual-grid';\n\nimport { formatOklch } from './oklch-format';\nimport {\n getPaletteReference,\n type PaletteKey,\n type Shade,\n SHADES,\n type Tier,\n TIER_THRESHOLDS,\n} from './palette';\n\nconst ACHROMATIC_THRESHOLD = 0.01;\nconst toRgb = converter('rgb');\n\nexport type AdjustContrastTier = Tier;\nexport type AdjustContrastPalette = PaletteKey;\n\nexport interface AdjustContrastOptions {\n /**\n * Surface the returned color sits on. Accepts any CSS color string\n * parseable by culori (hex, rgb, oklch, hsl). Alpha is stripped.\n * @default '#ffffff'\n */\n background?: string;\n /**\n * APCA contrast tier the returned color must clear.\n * - `body` (Lc ≥ 75) — fluent reading\n * - `ui` (Lc ≥ 60) — labels, buttons, badges\n * - `incidental` (Lc ≥ 45) — muted, disabled, focus rings\n * @default 'ui'\n */\n tier?: AdjustContrastTier;\n /**\n * Base palette family. Only consulted when `input` is achromatic\n * (chroma < 0.01) — borrows the palette's hue and chroma from its\n * shade 500. For chromatic inputs, this option is a no-op.\n * @default 'slate'\n */\n palette?: AdjustContrastPalette;\n}\n\nfunction stripAlpha(color: Oklch): Oklch {\n if (color.alpha === undefined || color.alpha === 1) return color;\n return { mode: 'oklch', l: color.l, c: color.c, h: color.h };\n}\n\nfunction parseToOklch(input: string, label: string): Oklch {\n const parsed = parse(input);\n if (!parsed) {\n throw new Error(\n `adjustContrast: cannot parse ${label} '${input}' — expected a CSS color string (hex, rgb, oklch, hsl)`\n );\n }\n const converted = oklch(parsed);\n if (!converted) {\n throw new Error(\n `adjustContrast: cannot convert ${label} '${input}' to OKLCH`\n );\n }\n return stripAlpha(converted);\n}\n\nfunction oklchToSrgbInts(color: Oklch): [number, number, number] {\n const clamped = clampChroma(color, 'oklch', 'rgb');\n const rgb = toRgb(clamped);\n const channel = (v: number) =>\n Math.max(0, Math.min(255, Math.round(v * 255)));\n return [channel(rgb.r), channel(rgb.g), channel(rgb.b)];\n}\n\nfunction clampForEmit(color: Oklch): Oklch {\n return clampChroma(color, 'oklch', 'p3');\n}\n\n/**\n * Snap a custom color to the nearest nxds palette shade that passes the\n * requested APCA tier on the target background. Lightness comes from the\n * perceptual grid; hue and chroma come from the input (or, for achromatic\n * inputs, from the chosen palette's shade 500).\n *\n * Walks shades `50 → 950` and returns the **first** that meets the tier.\n * Throws if no shade passes — the diagnostic lists every shade's Lc score.\n *\n * @example\n * // Custom brand hex on a light surface (UI tier by default)\n * adjustContrast('#ff6b6b');\n * // → 'oklch(0.553 0.2 27.5)' (or similar — the first 50→950 shade\n * // that scores Lc ≥ 60 against #ffffff)\n *\n * @example\n * // Achromatic input picks up the palette's tint\n * adjustContrast('#888888', { palette: 'slate', tier: 'body' });\n * // → an OKLCH with slate's hue/chroma at the first shade hitting Lc ≥ 75\n *\n * @throws If `input` cannot be parsed as a CSS color.\n * @throws If no shade in the perceptual grid hits the tier threshold\n * against the resolved background.\n */\nexport function adjustContrast(\n input: string,\n options: AdjustContrastOptions = {}\n): string {\n const { background = '#ffffff', tier = 'ui', palette = 'slate' } = options;\n\n const minLc = TIER_THRESHOLDS[tier];\n const bgOklch = parseToOklch(background, 'background');\n const bgInts = oklchToSrgbInts(bgOklch);\n\n const inputOklch = parseToOklch(input, 'input');\n\n const inputChroma = inputOklch.c ?? 0;\n const isAchromatic = inputChroma < ACHROMATIC_THRESHOLD;\n const reference = getPaletteReference(palette);\n const chroma = isAchromatic ? reference.c : inputChroma;\n const hue = isAchromatic ? reference.h : (inputOklch.h ?? reference.h);\n\n const attempts: { shade: Shade; lc: number }[] = [];\n\n for (const shade of SHADES) {\n const l = PERCEPTUAL_L_GRID[shade];\n const candidate: Oklch = { mode: 'oklch', l, c: chroma, h: hue };\n const fgInts = oklchToSrgbInts(candidate);\n const lc = APCAcontrast(sRGBtoY(fgInts), sRGBtoY(bgInts)) as number;\n attempts.push({ shade, lc });\n if (Math.abs(lc) >= minLc) {\n return formatOklch(clampForEmit(candidate));\n }\n }\n\n const summary = attempts\n .map((a) => `${a.shade}=${a.lc.toFixed(1)}`)\n .join(', ');\n throw new Error(\n `adjustContrast: no shade in palette '${palette}' meets ${tier} tier (|Lc| ≥ ${minLc}) against background '${background}'. Tried: ${summary}`\n );\n}\n","import { clampChroma, converter, type Oklch, oklch, parse } from 'culori';\n\nimport type { Shade } from '../lib/palette.ts';\n\nimport flatGrid from './perceptual-grid.json' with { type: 'json' };\nimport hueGrid from './perceptual-grid-hue.json' with { type: 'json' };\n\n// emit ships P3 chroma; audit scores in sRGB (legacy-display equivalent)\nconst EMIT_GAMUT = 'p3';\nconst AUDIT_GAMUT = 'rgb';\n\nconst toRgb = converter('rgb');\n\nexport const PERCEPTUAL_L_GRID: Readonly<Record<Shade, number>> =\n Object.freeze(flatGrid);\n\nconst PERCEPTUAL_L_GRID_HUE: Readonly<\n Record<string, Readonly<Record<Shade, number>>>\n> = Object.freeze(\n Object.fromEntries(\n Object.entries(hueGrid).map(([name, curve]) => [name, Object.freeze(curve)])\n )\n);\n\nconst CUSP_FRACTION = 0.95; // sit just inside the P3 cusp for render safety\n\nconst SHADE_KEY_RE = /^(50|100|200|300|400|500|600|700|800|900|950)$/;\n\nexport function isPaletteShadeKey(key: unknown): key is Shade {\n return typeof key === 'string' && SHADE_KEY_RE.test(key);\n}\n\nfunction round(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.round(value * factor) / factor;\n}\n\nfunction formatPaletteOklch({ l, c, h, alpha }: Oklch) {\n const finite = (v: number | undefined) =>\n v !== undefined && Number.isFinite(v) ? v : 0;\n const lRounded = round(finite(l), 4);\n const cRounded = round(finite(c), 4);\n // Hue is undefined when chroma is 0 (achromatic). Emit 0 rather than `none`\n // so consuming CSS stays compatible with the project's spot-check format.\n const hRounded = c && h !== undefined ? round(finite(h), 3) : 0;\n const base = `oklch(${lRounded} ${cRounded} ${hRounded}`;\n if (alpha !== undefined && alpha < 1) {\n return `${base} / ${round(alpha, 4)})`;\n }\n return `${base})`;\n}\n\nfunction parseToOklch(hex: string): Oklch {\n const parsed = parse(hex);\n if (!parsed) {\n throw new Error(`palette: cannot parse color \"${hex}\"`);\n }\n return oklch(parsed);\n}\n\nfunction computePinnedOklch(\n hex: string,\n shade: string,\n palette?: string,\n reportGamutClip?: (message: string) => void\n): Oklch {\n const hueCurve = palette ? PERCEPTUAL_L_GRID_HUE[palette] : undefined;\n const pinnedL = isPaletteShadeKey(shade)\n ? (hueCurve ?? PERCEPTUAL_L_GRID)[shade]\n : undefined;\n if (pinnedL === undefined) {\n throw new Error(`palette: unknown shade \"${shade}\" for ${hex}`);\n }\n\n const source = parseToOklch(hex);\n\n // Re-pitched hues take chroma at the P3 cusp for the (hue, pinned-L) pair —\n // pale near white, vivid at the peak — driven by the gamut, not the source\n // hex. Every other palette keeps its source chroma (flat-grid behaviour).\n let chroma = source.c ?? 0;\n if (hueCurve) {\n const cuspC =\n clampChroma(\n { mode: 'oklch', l: pinnedL, c: 0.5, h: source.h },\n 'oklch',\n EMIT_GAMUT\n ).c ?? 0;\n chroma = cuspC * CUSP_FRACTION;\n }\n\n const target: Oklch = {\n mode: 'oklch',\n l: pinnedL,\n c: chroma,\n h: source.h,\n ...(source.alpha !== undefined ? { alpha: source.alpha } : {}),\n };\n\n const clamped = clampChroma(target, 'oklch', EMIT_GAMUT);\n\n if (!hueCurve) {\n const originalC = target.c;\n const clampedC = clamped.c ?? 0;\n if (originalC > 0 && (originalC - clampedC) / originalC > 0.2) {\n reportGamutClip?.(\n `palette: P3 gamut clip on ${hex} at shade ${shade} — C ${originalC.toFixed(4)} → ${clampedC.toFixed(4)}`\n );\n }\n }\n\n return clamped;\n}\n\nexport function hexToOklchPinned(\n hex: string,\n shade: string,\n palette?: string,\n reportGamutClip?: (message: string) => void\n): string {\n return formatPaletteOklch(\n computePinnedOklch(hex, shade, palette, reportGamutClip)\n );\n}\n\nexport function hexToOklchMechanical(hex: string): string {\n return formatPaletteOklch(parseToOklch(hex));\n}\n\nfunction oklchToSrgbInts(oklchColor: Oklch): [number, number, number] {\n const rgb = toRgb(clampChroma(oklchColor, 'oklch', AUDIT_GAMUT));\n if ((rgb.alpha ?? 1) < 1) {\n // apca-w3 `sRGBtoY` reads only [r,g,b]; an alpha-bearing color must be\n // pre-blended against its actual background before contrast computation.\n throw new Error(\n 'palette: oklchToSrgbInts received alpha-bearing color; pre-blend before contrast computation'\n );\n }\n const channel = (v: number) =>\n Math.max(0, Math.min(255, Math.round(v * 255)));\n return [channel(rgb.r), channel(rgb.g), channel(rgb.b)];\n}\n\n// Audit conversion retains the unrounded coordinates; parsing emitted CSS\n// first would change some sRGB integer channels at rounding boundaries.\nexport function hexToSrgbInts(\n hex: string,\n shade?: string,\n palette?: string\n): [number, number, number] {\n if (shade !== undefined) {\n return oklchToSrgbInts(computePinnedOklch(hex, shade, palette));\n }\n return oklchToSrgbInts(parseToOklch(hex));\n}\n","{\n \"50\": 0.985,\n \"100\": 0.945,\n \"200\": 0.87,\n \"300\": 0.765,\n \"400\": 0.66,\n \"500\": 0.553,\n \"600\": 0.46,\n \"700\": 0.385,\n \"800\": 0.297,\n \"900\": 0.207,\n \"950\": 0.118\n}\n","{\n \"rose\": {\n \"50\": 0.971,\n \"100\": 0.936,\n \"200\": 0.885,\n \"300\": 0.81,\n \"400\": 0.71,\n \"500\": 0.64,\n \"600\": 0.58,\n \"700\": 0.51,\n \"800\": 0.42,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"red\": {\n \"50\": 0.971,\n \"100\": 0.936,\n \"200\": 0.885,\n \"300\": 0.808,\n \"400\": 0.704,\n \"500\": 0.637,\n \"600\": 0.577,\n \"700\": 0.505,\n \"800\": 0.42,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"orange\": {\n \"50\": 0.98,\n \"100\": 0.955,\n \"200\": 0.91,\n \"300\": 0.84,\n \"400\": 0.78,\n \"500\": 0.71,\n \"600\": 0.62,\n \"700\": 0.52,\n \"800\": 0.43,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"amber\": {\n \"50\": 0.985,\n \"100\": 0.96,\n \"200\": 0.92,\n \"300\": 0.87,\n \"400\": 0.84,\n \"500\": 0.77,\n \"600\": 0.68,\n \"700\": 0.57,\n \"800\": 0.46,\n \"900\": 0.35,\n \"950\": 0.24\n },\n \"yellow\": {\n \"50\": 0.985,\n \"100\": 0.96,\n \"200\": 0.92,\n \"300\": 0.88,\n \"400\": 0.86,\n \"500\": 0.8,\n \"600\": 0.72,\n \"700\": 0.6,\n \"800\": 0.47,\n \"900\": 0.35,\n \"950\": 0.23\n },\n \"lime\": {\n \"50\": 0.985,\n \"100\": 0.965,\n \"200\": 0.93,\n \"300\": 0.9,\n \"400\": 0.88,\n \"500\": 0.82,\n \"600\": 0.73,\n \"700\": 0.61,\n \"800\": 0.49,\n \"900\": 0.37,\n \"950\": 0.26\n },\n \"green\": {\n \"50\": 0.982,\n \"100\": 0.96,\n \"200\": 0.925,\n \"300\": 0.87,\n \"400\": 0.79,\n \"500\": 0.72,\n \"600\": 0.62,\n \"700\": 0.52,\n \"800\": 0.43,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"emerald\": {\n \"50\": 0.982,\n \"100\": 0.96,\n \"200\": 0.925,\n \"300\": 0.87,\n \"400\": 0.79,\n \"500\": 0.72,\n \"600\": 0.62,\n \"700\": 0.52,\n \"800\": 0.43,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"teal\": {\n \"50\": 0.98,\n \"100\": 0.945,\n \"200\": 0.9,\n \"300\": 0.85,\n \"400\": 0.79,\n \"500\": 0.72,\n \"600\": 0.62,\n \"700\": 0.52,\n \"800\": 0.43,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"cyan\": {\n \"50\": 0.98,\n \"100\": 0.955,\n \"200\": 0.91,\n \"300\": 0.85,\n \"400\": 0.79,\n \"500\": 0.72,\n \"600\": 0.63,\n \"700\": 0.53,\n \"800\": 0.44,\n \"900\": 0.35,\n \"950\": 0.26\n },\n \"sky\": {\n \"50\": 0.975,\n \"100\": 0.945,\n \"200\": 0.895,\n \"300\": 0.82,\n \"400\": 0.74,\n \"500\": 0.67,\n \"600\": 0.58,\n \"700\": 0.5,\n \"800\": 0.42,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"blue\": {\n \"50\": 0.97,\n \"100\": 0.932,\n \"200\": 0.882,\n \"300\": 0.809,\n \"400\": 0.707,\n \"500\": 0.623,\n \"600\": 0.546,\n \"700\": 0.488,\n \"800\": 0.41,\n \"900\": 0.33,\n \"950\": 0.25\n },\n \"indigo\": {\n \"50\": 0.96,\n \"100\": 0.925,\n \"200\": 0.865,\n \"300\": 0.78,\n \"400\": 0.67,\n \"500\": 0.57,\n \"600\": 0.49,\n \"700\": 0.42,\n \"800\": 0.35,\n \"900\": 0.28,\n \"950\": 0.21\n },\n \"violet\": {\n \"50\": 0.965,\n \"100\": 0.93,\n \"200\": 0.875,\n \"300\": 0.79,\n \"400\": 0.68,\n \"500\": 0.59,\n \"600\": 0.51,\n \"700\": 0.44,\n \"800\": 0.37,\n \"900\": 0.3,\n \"950\": 0.22\n },\n \"purple\": {\n \"50\": 0.967,\n \"100\": 0.935,\n \"200\": 0.88,\n \"300\": 0.8,\n \"400\": 0.7,\n \"500\": 0.61,\n \"600\": 0.53,\n \"700\": 0.46,\n \"800\": 0.39,\n \"900\": 0.32,\n \"950\": 0.24\n },\n \"fuchsia\": {\n \"50\": 0.97,\n \"100\": 0.94,\n \"200\": 0.89,\n \"300\": 0.81,\n \"400\": 0.71,\n \"500\": 0.63,\n \"600\": 0.56,\n \"700\": 0.49,\n \"800\": 0.41,\n \"900\": 0.33,\n \"950\": 0.25\n },\n \"pink\": {\n \"50\": 0.97,\n \"100\": 0.94,\n \"200\": 0.89,\n \"300\": 0.82,\n \"400\": 0.72,\n \"500\": 0.64,\n \"600\": 0.57,\n \"700\": 0.5,\n \"800\": 0.42,\n \"900\": 0.34,\n \"950\": 0.25\n }\n}\n","import type { Oklch } from 'culori';\n\n/** Round to `decimals` places. */\nexport function round(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.round(value * factor) / factor;\n}\n\n/**\n * Format an OKLCH color to the project's spot-check string form\n * (`oklch(L C H)`, or `oklch(L C H / A)` when translucent), emitting `0` for\n * hue when chroma is 0.\n */\nexport function formatOklch(color: Oklch): string {\n const finite = (v: number | undefined) =>\n typeof v === 'number' && Number.isFinite(v) ? v : 0;\n const l = round(finite(color.l), 4);\n const c = round(finite(color.c), 4);\n const h = c && color.h !== undefined ? round(finite(color.h), 3) : 0;\n const alpha = color.alpha === undefined ? 1 : round(color.alpha, 4);\n return alpha < 1\n ? `oklch(${l} ${c} ${h} / ${alpha})`\n : `oklch(${l} ${c} ${h})`;\n}\n","import { oklch, parse } from 'culori';\n\nimport primitiveColors from '../../tokens/primitives/color.json' with { type: 'json' };\n\nexport const SHADES = [\n '50',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n '950',\n] as const;\n\nexport type Shade = (typeof SHADES)[number];\n\nexport const PALETTE_KEYS = [\n 'slate',\n 'neutral',\n 'gray',\n 'stone',\n 'zinc',\n] as const;\n\nexport type PaletteKey = (typeof PALETTE_KEYS)[number];\n\nexport const TIER_THRESHOLDS = {\n body: 75,\n ui: 60,\n incidental: 45,\n} as const;\n\nexport type Tier = keyof typeof TIER_THRESHOLDS;\n\n/** Light/dark theme axis. */\nexport type Mode = 'light' | 'dark';\n\n/** Surface tone families an nxds theme can be seeded with. */\nexport type NxdsSurfaceTone = 'stone' | 'neutral' | 'zinc' | 'slate' | 'gray';\n\nexport interface PaletteReference {\n c: number;\n h: number;\n}\n\nfunction deriveReference(palette: PaletteKey): PaletteReference {\n const hex = primitiveColors[palette]['500'].$value;\n const parsed = parse(hex);\n if (!parsed) {\n throw new Error(`palette: cannot parse '${palette}.500' hex '${hex}'`);\n }\n const o = oklch(parsed);\n if (!o) {\n throw new Error(`palette: cannot convert '${palette}.500' to OKLCH`);\n }\n return { c: o.c ?? 0, h: o.h ?? 0 };\n}\n\nconst paletteReferenceCache = new Map<PaletteKey, PaletteReference>();\n\nexport function getPaletteReference(palette: PaletteKey): PaletteReference {\n const cached = paletteReferenceCache.get(palette);\n if (cached) return cached;\n const reference = deriveReference(palette);\n paletteReferenceCache.set(palette, reference);\n return reference;\n}\n","{\n \"green\": {\n \"50\": {\n \"$value\": \"#f1f7ef\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e6f3e3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#cce2c7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#a6c99e\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#7fb175\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#569947\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#3f7932\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#306424\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#264d1c\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#1e3b17\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#12250d\",\n \"$type\": \"color\"\n }\n },\n \"emerald\": {\n \"50\": {\n \"$value\": \"#ecfdf5\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#d1fae5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#a7f3d0\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#6ee7b7\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#34d399\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#10b981\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#059669\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#047857\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#065f46\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#064e3b\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#022c22\",\n \"$type\": \"color\"\n }\n },\n \"teal\": {\n \"50\": {\n \"$value\": \"#f0fdfa\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ccfbf1\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#99f6e4\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#5eead4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#2dd4bf\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#14b8a6\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0d9488\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0f766e\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#115e59\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#134e4a\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#042f2e\",\n \"$type\": \"color\"\n }\n },\n \"cyan\": {\n \"50\": {\n \"$value\": \"#ecfeff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#cffafe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#a5f3fc\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#67e8f9\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#22d3ee\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#06b6d4\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0891b2\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0e7490\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#155e75\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#164e63\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#083344\",\n \"$type\": \"color\"\n }\n },\n \"sky\": {\n \"50\": {\n \"$value\": \"#f0f9ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e0f2fe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#bae6fd\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#7dd3fc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#38bdf8\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#0ea5e9\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0284c7\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0369a1\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#075985\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0c4a6e\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#082f49\",\n \"$type\": \"color\"\n }\n },\n \"indigo\": {\n \"50\": {\n \"$value\": \"#eef2ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e0e7ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#c7d2fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#a5b4fc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#818cf8\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#6366f1\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#4f46e5\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#4338ca\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#3730a3\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#312e81\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#1e1b4b\",\n \"$type\": \"color\"\n }\n },\n \"violet\": {\n \"50\": {\n \"$value\": \"#f5f3ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ede9fe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#ddd6fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#c4b5fd\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a78bfa\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#8b5cf6\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#7c3aed\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#6d28d9\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#5b21b6\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#4c1d95\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#2e1065\",\n \"$type\": \"color\"\n }\n },\n \"purple\": {\n \"50\": {\n \"$value\": \"#faf5ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f3e8ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e9d5ff\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d8b4fe\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#c084fc\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#a855f7\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#9333ea\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#7e22ce\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#6b21a8\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#581c87\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#3b0764\",\n \"$type\": \"color\"\n }\n },\n \"fuchsia\": {\n \"50\": {\n \"$value\": \"#fdf4ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fae8ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#f5d0fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f0abfc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#e879f9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#d946ef\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#c026d3\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a21caf\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#86198f\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#701a75\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#4a044e\",\n \"$type\": \"color\"\n }\n },\n \"pink\": {\n \"50\": {\n \"$value\": \"#fdf2f8\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fce7f3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fbcfe8\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f9a8d4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#f472b6\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#ec4899\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#db2777\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#be185d\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9d174d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#831843\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#500724\",\n \"$type\": \"color\"\n }\n },\n \"slate\": {\n \"50\": {\n \"$value\": \"#f8fafc\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f2f6fa\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f1f5f9\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e0e6ee\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e2e8f0\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#cbd5e1\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#90a1b9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#62748e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#45556c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#314158\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#1d293d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0f172a\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#020617\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0206170a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#02061710\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#02061718\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#02061730\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#02061750\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#02061780\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#020617a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#020617c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#020617d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#020617e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#020617f4\",\n \"$type\": \"color\"\n }\n },\n \"rose\": {\n \"50\": {\n \"$value\": \"#fff1f2\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ffe4e6\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fecdd3\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fda4af\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#fb7185\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#f43f5e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#e11d48\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#be123c\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9f1239\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#881337\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#4c0519\",\n \"$type\": \"color\"\n }\n },\n \"lime\": {\n \"50\": {\n \"$value\": \"#f7fee7\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ecfccb\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#d9f99d\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#bef264\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a3e635\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#84cc16\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#65a30d\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#4d7c0f\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#3f6212\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#365314\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#1a2e05\",\n \"$type\": \"color\"\n }\n },\n \"yellow\": {\n \"50\": {\n \"$value\": \"#fefce8\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fef9c3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fef08a\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fde047\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#facc15\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#eab308\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#ca8a04\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a16207\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#854d0e\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#713f12\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#422006\",\n \"$type\": \"color\"\n }\n },\n \"blue\": {\n \"50\": {\n \"$value\": \"#f1f6fc\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e6effc\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#c4daf5\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#9dc1ee\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#71a1df\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#3d7bc8\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#2863ab\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#184f90\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#113d70\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0d2e55\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#051a36\",\n \"$type\": \"color\"\n }\n },\n \"gray\": {\n \"50\": {\n \"$value\": \"#f9fafb\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f4f5f7\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f3f4f6\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e3e5e9\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e5e7eb\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d1d5db\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#99a1af\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#6a7282\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#4a5565\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#364153\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#1e2939\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#111827\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#030712\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0307120a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#03071210\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#03071218\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#03071230\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#03071250\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#03071280\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#030712a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#030712c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#030712d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#030712e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#030712f4\",\n \"$type\": \"color\"\n }\n },\n \"zinc\": {\n \"50\": {\n \"$value\": \"#fafafa\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f5f5f6\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f4f4f5\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e4e6e8\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e3e5e7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d2d5d8\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#9f9fa9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#71717b\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#52525c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#3f3f46\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#26272a\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#17181b\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#08090b\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#08090b0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#08090b10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#08090b18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#08090b30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#08090b50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#08090b80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#08090ba0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#08090bc0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#08090bd8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#08090be8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#08090bf4\",\n \"$type\": \"color\"\n }\n },\n \"neutral\": {\n \"50\": {\n \"$value\": \"#fafafa\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f5f5f5\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f5f5f5\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e5e5e5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e5e5e5\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d4d4d4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a1a1a1\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#737373\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#525252\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#404040\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#262626\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#171717\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#0a0a0a\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0a0a0a0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0a0a0a10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0a0a0a18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0a0a0a30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0a0a0a50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0a0a0a80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0a0a0aa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0a0a0ac0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0a0a0ad8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0a0a0ae8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0a0a0af4\",\n \"$type\": \"color\"\n }\n },\n \"stone\": {\n \"50\": {\n \"$value\": \"#fbfaf8\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f6f5f2\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#eeedeb\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e7e5e2\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#d6d4d1\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#b6b2ad\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#95928c\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#75726d\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#595854\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#444441\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#2d2d2d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#181818\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#050505\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0b09040a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0b090410\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0b090418\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0b090430\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0b090450\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0b090480\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0b0904a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0b0904c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0b0904d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0b0904e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0b0904f4\",\n \"$type\": \"color\"\n }\n },\n \"red\": {\n \"50\": {\n \"$value\": \"#fef2f0\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fee9e6\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#facfc9\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f0a99f\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#e58175\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#d95c50\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#c13d34\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a32d26\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#7f211b\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#5f1a15\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#3d110d\",\n \"$type\": \"color\"\n }\n },\n \"orange\": {\n \"50\": {\n \"$value\": \"#fff7ed\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ffedd5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fed7aa\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fdba74\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#fb923c\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#f97316\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#ea580c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#c2410c\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9a3412\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#7c2d12\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#431407\",\n \"$type\": \"color\"\n }\n },\n \"amber\": {\n \"50\": {\n \"$value\": \"#faf4ec\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f9eddd\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#efd7b7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#e5bd86\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#d8a354\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#c88a1e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#b37903\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#946406\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#764f05\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#5a3b03\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#392402\",\n \"$type\": \"color\"\n }\n },\n \"white\": {\n \"base\": {\n \"$value\": \"#ffffff\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#ffffff0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#ffffff10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#ffffff18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#ffffff30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#ffffff50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#ffffff80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#ffffffa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#ffffffc0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#ffffffd8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#ffffffe8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#fffffff4\",\n \"$type\": \"color\"\n }\n },\n \"black\": {\n \"base\": {\n \"$value\": \"#0a0a0a\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0a0a0a0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0a0a0a10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0a0a0a18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0a0a0a30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0a0a0a50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0a0a0a80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0a0a0aa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0a0a0ac0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0a0a0ad8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0a0a0ae8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0a0a0af4\",\n \"$type\": \"color\"\n }\n }\n}\n","import { APCAcontrast, sRGBtoY } from 'apca-w3';\nimport { clampChroma, converter, oklch, parse } from 'culori';\n\nconst toRgb = converter('rgb');\n\nexport type SrgbInts = [number, number, number];\n\nfunction channel(value: number): number {\n return Math.max(0, Math.min(255, Math.round(value * 255)));\n}\n\nfunction toSrgbInts(input: string): SrgbInts {\n const parsed = parse(input);\n if (!parsed) throw new Error(`apca: cannot parse color '${input}'`);\n const converted = oklch(parsed);\n if (!converted) throw new Error(`apca: cannot convert '${input}' to OKLCH`);\n const rgb = toRgb(clampChroma(converted, 'oklch', 'rgb'));\n return [channel(rgb.r), channel(rgb.g), channel(rgb.b)];\n}\n\n// Composite an 8-digit alpha hex over an opaque backdrop to rendered sRGB ints.\nexport function blendAlphaOver(hex8: string, bgInts: SrgbInts): SrgbInts {\n const h = hex8.slice(1);\n const a = parseInt(h.slice(6, 8), 16) / 255;\n const [bgR, bgG, bgB] = bgInts;\n const mix = (fg: number, bg: number) => Math.round(fg * a + bg * (1 - a));\n return [\n mix(parseInt(h.slice(0, 2), 16), bgR),\n mix(parseInt(h.slice(2, 4), 16), bgG),\n mix(parseInt(h.slice(4, 6), 16), bgB),\n ];\n}\n\nexport function resolveToSrgbInts(value: string, bgInts?: SrgbInts): SrgbInts {\n if (typeof value !== 'string') {\n throw new Error(`apca: expected string color value, got ${typeof value}`);\n }\n\n if (/^#[0-9a-fA-F]{8}$/.test(value)) {\n if (!bgInts) {\n throw new Error(\n `apca: alpha color \"${value}\" needs a backdrop to composite against`\n );\n }\n return blendAlphaOver(value, bgInts);\n }\n\n const parsed = parse(value);\n if (!parsed) throw new Error(`apca: cannot parse color '${value}'`);\n const converted = oklch(parsed);\n if (!converted) throw new Error(`apca: cannot convert '${value}'`);\n const rgb = toRgb(clampChroma(converted, 'oklch', 'rgb'));\n const alpha = rgb.alpha ?? 1;\n const ints: SrgbInts = [channel(rgb.r), channel(rgb.g), channel(rgb.b)];\n\n if (alpha < 1) {\n if (!bgInts) {\n throw new Error(\n `apca: alpha color \"${value}\" needs a backdrop to composite against`\n );\n }\n return [\n Math.round(ints[0] * alpha + bgInts[0] * (1 - alpha)),\n Math.round(ints[1] * alpha + bgInts[1] * (1 - alpha)),\n Math.round(ints[2] * alpha + bgInts[2] * (1 - alpha)),\n ];\n }\n\n return ints;\n}\n\n/**\n * Absolute APCA Lc of `foreground` on `background`. Both accept any CSS color\n * string culori can parse (hex, rgb, oklch). Inputs must be opaque — alpha is\n * dropped, not pre-blended, so a translucent ink (e.g. the text-tier alpha\n * inks) must be composited over its surface by the caller before scoring.\n */\nexport function apcaLc(foreground: string, background: string): number {\n return Math.abs(\n APCAcontrast(\n sRGBtoY(toSrgbInts(foreground)),\n sRGBtoY(toSrgbInts(background))\n ) as number\n );\n}\n","{\n \"family\": {\n \"font-sans\": {\n \"$value\": \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n \"$type\": \"fontFamily\",\n \"$extensions\": {\n \"nx-font-source\": {\n \"type\": \"system\"\n }\n }\n },\n \"font-heading\": {\n \"$value\": \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n \"$type\": \"fontFamily\",\n \"$extensions\": {\n \"nx-font-source\": {\n \"type\": \"system\"\n }\n }\n },\n \"font-serif\": {\n \"$value\": \"Georgia\",\n \"$type\": \"fontFamily\",\n \"$extensions\": {\n \"nx-font-source\": {\n \"type\": \"system\"\n }\n }\n },\n \"font-mono\": {\n \"$value\": \"ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace\",\n \"$type\": \"fontFamily\",\n \"$extensions\": {\n \"nx-font-source\": {\n \"type\": \"system\"\n }\n }\n }\n },\n \"size\": {\n \"xxs\": {\n \"$value\": {\n \"value\": 11,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"xs\": {\n \"$value\": {\n \"value\": 12,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"sm\": {\n \"$value\": {\n \"value\": 14,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"base\": {\n \"$value\": {\n \"value\": 16,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"lg\": {\n \"$value\": {\n \"value\": 18,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"xl\": {\n \"$value\": {\n \"value\": 20,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"2xl\": {\n \"$value\": {\n \"value\": 24,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"3xl\": {\n \"$value\": {\n \"value\": 30,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"4xl\": {\n \"$value\": {\n \"value\": 36,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"5xl\": {\n \"$value\": {\n \"value\": 48,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"6xl\": {\n \"$value\": {\n \"value\": 60,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"7xl\": {\n \"$value\": {\n \"value\": 72,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"8xl\": {\n \"$value\": {\n \"value\": 96,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"9xl\": {\n \"$value\": {\n \"value\": 128,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n }\n },\n \"weight\": {\n \"thin\": {\n \"$value\": 100,\n \"$type\": \"fontWeight\"\n },\n \"extralight\": {\n \"$value\": 200,\n \"$type\": \"fontWeight\"\n },\n \"light\": {\n \"$value\": 300,\n \"$type\": \"fontWeight\"\n },\n \"normal\": {\n \"$value\": 400,\n \"$type\": \"fontWeight\"\n },\n \"medium\": {\n \"$value\": 500,\n \"$type\": \"fontWeight\"\n },\n \"semibold\": {\n \"$value\": 600,\n \"$type\": \"fontWeight\"\n },\n \"bold\": {\n \"$value\": 700,\n \"$type\": \"fontWeight\"\n },\n \"extrabold\": {\n \"$value\": 800,\n \"$type\": \"fontWeight\"\n },\n \"black\": {\n \"$value\": 900,\n \"$type\": \"fontWeight\"\n }\n },\n \"line-height\": {\n \"xxs\": {\n \"$value\": {\n \"value\": 12,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"xs\": {\n \"$value\": {\n \"value\": 16,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"sm\": {\n \"$value\": {\n \"value\": 20,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"base\": {\n \"$value\": {\n \"value\": 24,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"lg\": {\n \"$value\": {\n \"value\": 28,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"xl\": {\n \"$value\": {\n \"value\": 28,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"2xl\": {\n \"$value\": {\n \"value\": 32,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"3xl\": {\n \"$value\": {\n \"value\": 36,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"4xl\": {\n \"$value\": {\n \"value\": 48,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"5xl\": {\n \"$value\": {\n \"value\": 48,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"6xl\": {\n \"$value\": {\n \"value\": 60,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"7xl\": {\n \"$value\": {\n \"value\": 72,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"8xl\": {\n \"$value\": {\n \"value\": 96,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"9xl\": {\n \"$value\": {\n \"value\": 128,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n }\n },\n \"letterspacing\": {\n \"tighter\": {\n \"$value\": {\n \"value\": -0.800000011920929,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"tight\": {\n \"$value\": {\n \"value\": -0.4000000059604645,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"normal\": {\n \"$value\": {\n \"value\": 0,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"wide\": {\n \"$value\": {\n \"value\": 0.4000000059604645,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"wider\": {\n \"$value\": {\n \"value\": 0.800000011920929,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"widest\": {\n \"$value\": {\n \"value\": 1.600000023841858,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n }\n }\n}\n","import { APCAcontrast, sRGBtoY } from 'apca-w3';\nimport { clampChroma } from 'culori';\n\nimport { resolveToSrgbInts } from './apca';\nimport { APCA_PAIRS, type ApcaPair, type ApcaSolveKind } from './apca-pairs';\nimport type { TokenMap } from './derive-theme';\nimport { formatOklch } from './oklch-format';\nimport { type Mode, type Tier, TIER_THRESHOLDS } from './palette';\nimport { seedOklch } from './perceptual-ramp';\n\n/** Clamp to an integer 0–100; anything non-finite falls back. */\nexport function normalizeContrast(value: unknown, fallback = 50): number {\n return typeof value === 'number' && Number.isFinite(value)\n ? Math.round(Math.max(0, Math.min(100, value)))\n : fallback;\n}\n\n/** The Lc a pair aims for: its tier floor plus up to 15 more as contrast rises. */\nexport function contrastTarget(tier: Tier, contrast: number): number {\n return TIER_THRESHOLDS[tier] + (15 * contrast) / 100;\n}\n\nconst BISECT_STEPS = 12;\n\n/** Narrow a failing and a passing bound; returns the passing value closest to `fail`. */\nexport function bisect(\n fail: number,\n pass: number,\n passes: (value: number) => boolean\n): number {\n for (let i = 0; i < BISECT_STEPS; i++) {\n const middle = (fail + pass) / 2;\n if (passes(middle)) pass = middle;\n else fail = middle;\n }\n return pass;\n}\n\nconst token = (map: TokenMap, name: string): string => {\n const value = map[`--nx-color-${name}`];\n if (value === undefined) throw new Error(`contrast: missing ${name}`);\n return value;\n};\n\nexport function pairBackground(\n map: TokenMap,\n pair: ApcaPair\n): [number, number, number] {\n const backdrop = pair.backdrop\n ? resolveToSrgbInts(\n pair.backdrop.startsWith('#')\n ? pair.backdrop\n : token(map, pair.backdrop)\n )\n : undefined;\n return resolveToSrgbInts(token(map, pair.bg), backdrop);\n}\n\nexport function contrastForPair(map: TokenMap, pair: ApcaPair): number {\n const background = pairBackground(map, pair);\n return Math.abs(\n APCAcontrast(\n sRGBtoY(resolveToSrgbInts(token(map, pair.fg), background)),\n sRGBtoY(background)\n ) as number\n );\n}\n\nconst luminance = (color: string) => sRGBtoY(resolveToSrgbInts(color));\nconst score = (foregroundY: number, backgroundY: number) =>\n Math.abs(APCAcontrast(foregroundY, backgroundY) as number);\n\ninterface Constraint {\n backgroundY: number;\n /** Requested Lc, capped at what the black/white endpoint can reach. */\n target: number;\n}\n\n/** Constraints for one foreground, or undefined when even the endpoint misses a floor. */\nfunction constraintsFor(\n map: TokenMap,\n pairs: readonly ApcaPair[],\n contrast: number,\n endpointY: number\n): Constraint[] | undefined {\n const constraints: Constraint[] = [];\n for (const pair of pairs) {\n const backgroundY = sRGBtoY(pairBackground(map, pair));\n const reachable = score(endpointY, backgroundY);\n if (reachable < TIER_THRESHOLDS[pair.tier]) return undefined;\n const target = contrastTarget(pair.tier, contrast) + (pair.offset ?? 0);\n constraints.push({ backgroundY, target: Math.min(target, reachable) });\n }\n return constraints;\n}\n\n/** Light text keeps its designed quiet seed when that already passes; dark text is always re-solved. */\nconst keepsTextSeed = (mode: Mode, kind: ApcaSolveKind) =>\n mode === 'light' && kind === 'text';\n\nfunction solveForeground(\n seed: string,\n constraints: readonly Constraint[],\n endpoint: 0 | 1,\n keepSeed: boolean\n): string {\n const passes = (color: string) => {\n const y = luminance(color);\n return constraints.every((c) => score(y, c.backgroundY) >= c.target);\n };\n if (keepSeed && passes(seed)) return seed;\n const parsed = seedOklch(seed);\n const at = (l: number) =>\n formatOklch(clampChroma({ ...parsed, l, alpha: 1 }, 'oklch', 'p3'));\n return at(\n bisect(keepSeed ? parsed.l : 1 - endpoint, endpoint, (l) => passes(at(l)))\n );\n}\n\ninterface SolveGroup {\n kind: ApcaSolveKind;\n pairs: ApcaPair[];\n}\n\n/** Pairs grouped by the color they resolve to (`solveAs`, else their own foreground). */\nconst SOLVE_GROUPS = new Map<string, SolveGroup>();\nfor (const pair of APCA_PAIRS) {\n const key = pair.solveAs ?? pair.fg;\n const group = SOLVE_GROUPS.get(key);\n if (!group) {\n SOLVE_GROUPS.set(key, { kind: pair.kind, pairs: [pair] });\n continue;\n }\n if (group.kind !== pair.kind)\n throw new Error(\n `contrast: ${pair.fg} is '${pair.kind}' but joins '${group.kind}' group ${key}`\n );\n group.pairs.push(pair);\n}\n\n/** Pick the black/white label for a family and move any fill it can't read on to the tier floor. */\nfunction constrainFamilyFills(\n map: TokenMap,\n name: string,\n pairs: readonly ApcaPair[]\n) {\n const basePair = pairs[0];\n if (!basePair) throw new Error(`contrast: missing pairs for ${name}`);\n const baseY = luminance(token(map, basePair.bg));\n const endpoint: 0 | 1 = score(1, baseY) >= score(0, baseY) ? 1 : 0;\n map[`--nx-color-${name}`] = `oklch(${endpoint} 0 0)`;\n for (const pair of pairs) {\n const floor = TIER_THRESHOLDS[pair.tier];\n const value = token(map, pair.bg);\n if (score(endpoint, luminance(value)) >= floor) continue;\n const fill = seedOklch(value);\n const at = (l: number) =>\n formatOklch(clampChroma({ ...fill, l }, 'oklch', 'p3'));\n const readable = (l: number) => score(endpoint, luminance(at(l))) >= floor;\n map[`--nx-color-${pair.bg}`] = at(bisect(fill.l, 1 - endpoint, readable));\n }\n}\n\n/** Resolve every foreground against all its registered backgrounds, after fills and alpha composition. */\nexport function constrainColors(\n map: TokenMap,\n mode: Mode,\n contrast: number\n): TokenMap {\n for (const [name, { kind, pairs }] of SOLVE_GROUPS)\n if (kind === 'label') constrainFamilyFills(map, name, pairs);\n\n const endpoint: 0 | 1 = mode === 'dark' ? 1 : 0;\n const endpointY = luminance(`oklch(${endpoint} 0 0)`);\n for (const [name, { kind, pairs }] of SOLVE_GROUPS) {\n if (kind === 'label') continue;\n const constraints = constraintsFor(map, pairs, contrast, endpointY);\n if (constraints === undefined)\n throw new Error(`contrast: no readable ${name} in ${mode}`);\n const solved = solveForeground(\n token(map, name),\n constraints,\n endpoint,\n keepsTextSeed(mode, kind)\n );\n for (const fg of new Set(pairs.map((pair) => pair.fg).concat(name)))\n map[`--nx-color-${fg}`] = solved;\n }\n return map;\n}\n","import type { Shade } from './palette';\nimport type { PrimitivePaletteName } from './primitive-palette';\n\nexport const STATUS_PALETTE_FAMILIES = {\n success: 'green',\n warning: 'orange',\n error: 'red',\n information: 'blue',\n} as const satisfies Record<string, PrimitivePaletteName>;\n\nexport const CHART_PALETTE_REFERENCES = [\n { palette: 'teal', light: '700', dark: '200' },\n { palette: 'lime', light: '700', dark: '200' },\n { palette: 'orange', light: '600', dark: '200' },\n { palette: 'rose', light: '600', dark: '200' },\n { palette: 'indigo', light: '600', dark: '200' },\n] as const satisfies readonly {\n palette: PrimitivePaletteName;\n light: Shade;\n dark: Shade;\n}[];\n","import { CHART_PALETTE_REFERENCES } from './semantic-palette-references';\n\nexport type ApcaTier = 'body' | 'ui' | 'incidental';\n\n/**\n * How the contrast solver resolves a pair's foreground.\n * - `text`: reading text; light mode keeps a seed that already passes.\n * - `label`: black/white label on a family fill; the solver moves the fill.\n * - `ink`: any other mark; the solver re-solves its lightness, keeping hue.\n */\nexport type ApcaSolveKind = 'text' | 'label' | 'ink';\n\nexport interface ApcaPair {\n /** Bare semantic token name, without the --nx-color- prefix. */\n fg: string;\n /** Bare semantic token name, without the --nx-color- prefix. */\n bg: string;\n tier: ApcaTier;\n kind: ApcaSolveKind;\n /** Opaque token or hex color underneath a translucent background. */\n backdrop?: string;\n /** Extra Lc on top of the tier target, e.g. to stagger chart series. */\n offset?: number;\n /** Solve jointly with another foreground and emit one shared color. */\n solveAs?: string;\n}\n\nexport const COLOR_FAMILIES = [\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'error',\n 'information',\n] as const;\n\nconst CATEGORICAL_INDICES = CHART_PALETTE_REFERENCES.map(\n (_, index) => index + 1\n);\n// Each chart series asks for this much more Lc than the previous one, so\n// categories differ in lightness as well as hue.\nconst CHART_STAGGER_LC = 4.5;\n\nconst FOCUS_SURFACES = [\n 'background',\n 'container',\n 'popover',\n 'nav-background',\n 'nav-item-hover',\n 'nav-item-active',\n 'nav-border',\n] as const;\n\nconst text = (fg: string, bg: string, tier: ApcaTier): ApcaPair => ({\n fg,\n bg,\n tier,\n kind: 'text',\n});\nconst label = (fg: string, bg: string, tier: ApcaTier): ApcaPair => ({\n fg,\n bg,\n tier,\n kind: 'label',\n});\nconst ink = (fg: string, bg: string, tier: ApcaTier): ApcaPair => ({\n fg,\n bg,\n tier,\n kind: 'ink',\n});\n\nexport const APCA_PAIRS = [\n text('foreground', 'background', 'body'),\n text('foreground', 'background-hover', 'ui'),\n text('foreground', 'muted', 'ui'),\n text('muted-foreground', 'muted', 'ui'),\n text('muted-foreground-subtle', 'muted', 'incidental'),\n text('muted-foreground', 'container', 'ui'),\n text('muted-foreground-subtle', 'container', 'incidental'),\n text('foreground', 'muted-extralight', 'ui'),\n text('muted-foreground', 'muted-extralight', 'ui'),\n text('disabled-foreground', 'disabled', 'incidental'),\n text('container-foreground', 'container', 'body'),\n text('foreground', 'container', 'body'),\n text('popover-foreground', 'popover', 'body'),\n text('popover-foreground', 'popover-hover', 'ui'),\n text('foreground', 'control-background', 'ui'),\n text('foreground', 'control-background-hover', 'ui'),\n text('nav-foreground', 'nav-background', 'ui'),\n text('nav-muted-foreground', 'nav-background', 'incidental'),\n text('nav-foreground', 'nav-item-hover', 'ui'),\n text('nav-foreground', 'nav-item-active', 'ui'),\n ink('error-subtle-foreground', 'background', 'ui'),\n ink('error-subtle-foreground', 'container', 'ui'),\n ...COLOR_FAMILIES.flatMap((family) => [\n label(`${family}-foreground`, `${family}-background`, 'ui'),\n label(`${family}-foreground`, `${family}-background-hover`, 'ui'),\n label(`${family}-foreground`, `${family}-background-active`, 'ui'),\n ink(`${family}-subtle-foreground`, `${family}-subtle`, 'ui'),\n ink(`${family}-subtle-foreground`, `${family}-subtle-hover`, 'ui'),\n ink(`${family}-subtle-foreground`, `${family}-subtle-active`, 'ui'),\n ]),\n ...CATEGORICAL_INDICES.flatMap((index) =>\n ['container', 'background'].map((bg) => ({\n ...ink(`chart-categorical-${index}`, bg, 'ui'),\n offset: (index - 1) * CHART_STAGGER_LC,\n }))\n ),\n // Focus is the primary accent (components.md § Focus States), so it shares\n // one solved color with primary-subtle-foreground.\n ...FOCUS_SURFACES.flatMap((surface) => [\n {\n ...ink('focus-default', surface, 'incidental'),\n solveAs: 'primary-subtle-foreground',\n },\n ink('focus-error', surface, 'incidental'),\n ]),\n ...[\n 'background-active',\n 'container-hover',\n 'container-active',\n 'popover',\n 'popover-hover',\n 'popover-active',\n 'nav-background',\n ].flatMap((surface) => [\n text('foreground', surface, 'ui'),\n text('muted-foreground', surface, 'ui'),\n text('muted-foreground-subtle', surface, 'incidental'),\n ]),\n text('muted-foreground', 'background', 'ui'),\n text('muted-foreground-subtle', 'background', 'incidental'),\n text('container-foreground', 'container-hover', 'ui'),\n text('container-foreground', 'container-active', 'ui'),\n text('popover-foreground', 'popover-active', 'ui'),\n ...['background', 'container', 'popover'].flatMap((backdrop) => [\n { ...text('popover-foreground', 'popover-alpha', 'body'), backdrop },\n { ...text('foreground', 'background-hover-alpha', 'ui'), backdrop },\n ]),\n ...['#000000', '#ffffff'].map((backdrop) => ({\n ...text('popover-foreground', 'popover-alpha', 'body'),\n backdrop,\n })),\n] as const satisfies readonly ApcaPair[];\n","import { clampChroma, type Oklch, oklch, parse } from 'culori';\n\nimport { PERCEPTUAL_L_GRID } from '../token-source/perceptual-grid';\n\nimport { formatOklch } from './oklch-format';\nimport { type Shade, SHADES } from './palette';\n\n// emit ships P3 chroma (browsers gamut-map at render); sit just inside the cusp.\nconst EMIT_GAMUT = 'p3';\nconst CUSP_FRACTION = 0.95;\n\n/** Whether a string is a CSS color culori (and thus the engine) can parse. */\nexport function isColor(value: string): boolean {\n return parse(value) !== undefined;\n}\n\n/** Parse any CSS color string to OKLCH. Throws on unparseable input. */\nexport function seedOklch(input: string): Oklch {\n const parsed = parse(input);\n if (!parsed)\n throw new Error(`perceptual-ramp: cannot parse color '${input}'`);\n const converted = oklch(parsed);\n if (!converted)\n throw new Error(`perceptual-ramp: cannot convert '${input}' to OKLCH`);\n return converted;\n}\n\nexport interface RampOptions {\n /** Cap cusp chroma at the seed's own chroma so a muted accent stays muted. @default true */\n capAtSeedChroma?: boolean;\n}\n\n/** One shade: pinned L at the seed's hue, chroma at the P3 cusp (optionally capped at the seed). */\nexport function pinnedOklch(\n seedHex: string,\n shade: Shade,\n options: RampOptions = {}\n): string {\n const { capAtSeedChroma = true } = options;\n const seed = seedOklch(seedHex);\n const l = PERCEPTUAL_L_GRID[shade];\n const hue = seed.h ?? 0;\n const seedC = seed.c ?? 0;\n\n // Max chroma in P3 at this (L, hue): start past the gamut and clamp inward.\n const cuspC =\n clampChroma({ mode: 'oklch', l, c: 0.5, h: hue }, 'oklch', EMIT_GAMUT).c ??\n 0;\n let chroma = cuspC * CUSP_FRACTION;\n // Cap at the seed's own chroma so a muted accent stays muted — and an\n // achromatic seed (seedC === 0) stays fully neutral instead of picking up the\n // fallback hue at full cusp chroma.\n if (capAtSeedChroma) chroma = Math.min(chroma, seedC);\n\n const target: Oklch = { mode: 'oklch', l, c: chroma, h: hue };\n return formatOklch(clampChroma(target, 'oklch', EMIT_GAMUT));\n}\n\nexport type Ramp = Record<Shade, string>;\n\n/** Full 50→950 ramp from one seed color. */\nexport function rampFromSeed(seedHex: string, options: RampOptions = {}): Ramp {\n const ramp: Partial<Ramp> = {};\n for (const shade of SHADES)\n ramp[shade] = pinnedOklch(seedHex, shade, options);\n return ramp as Ramp;\n}\n","/**\n * Wrap the provider's runtime CSS in the `nx-runtime` layer. The order\n * statement ranks it after Tailwind's layers whichever stylesheet loads first,\n * so it overrides the generated `@layer theme` defaults and unlayered CSS\n * overrides it.\n */\nexport function inRuntimeLayer(css: string): string {\n return `@layer properties, theme, base, components, utilities, nx-runtime;\\n@layer nx-runtime {\\n${css}\\n}\\n`;\n}\n","import typographyTokens from '../../tokens/primitives/typography/typography-default.json';\n\nimport { normalizeContrast } from './contrast';\nimport type { ThemeDerivationInput, ThemeSeeds } from './derive-theme';\nimport type { NxdsSurfaceTone } from './palette';\nimport { isColor } from './perceptual-ramp';\nimport { inRuntimeLayer } from './runtime-layer';\n\ntype ModeSeeds = Pick<ThemeSeeds, 'background' | 'foreground'>;\n\nexport type NxdsAppearanceMode = 'light' | 'dark' | 'system';\nexport type NxdsDensity =\n | 'tight'\n | 'compact'\n | 'default'\n | 'comfortable'\n | 'relaxed'\n | 'spacious';\nexport type NxdsCorners =\n | 'square'\n | 'subtle'\n | 'smooth'\n | 'round'\n | 'extra-round';\nexport type NxdsElevation = 'flat' | 'quiet' | 'soft' | 'standard' | 'strong';\nexport type NxdsStroke = 'fine' | 'normal' | 'strong';\n\nexport interface NxdsAppearancePrefs {\n uiFont: string;\n codeFont: string;\n uiFontSize: number;\n codeFontSize: number;\n reduceMotion: boolean;\n pointerCursors: boolean;\n fontSmoothing: boolean;\n}\n\nexport interface NxdsAppearanceState {\n mode: NxdsAppearanceMode;\n brandColor: string;\n surfaceTone: NxdsSurfaceTone;\n lightContrast: number;\n darkContrast: number;\n density: NxdsDensity;\n corners: NxdsCorners;\n elevation: NxdsElevation;\n stroke: NxdsStroke;\n prefs: NxdsAppearancePrefs;\n}\n\n/** An appearance field that picks one of a token family's preset modes. */\nexport type NxdsPresetField = 'density' | 'corners' | 'elevation' | 'stroke';\n\nexport const DEFAULT_BRAND_COLOR = '#0a0a0a';\n\nexport const BASE_TONE_OPTIONS = [\n { value: 'stone', label: 'Stone', color: '#747271' },\n { value: 'neutral', label: 'Neutral', color: '#737373' },\n { value: 'zinc', label: 'Zinc', color: '#717175' },\n { value: 'slate', label: 'Slate', color: '#717376' },\n { value: 'gray', label: 'Gray', color: '#707274' },\n] as const satisfies readonly {\n value: NxdsSurfaceTone;\n label: string;\n color: string;\n}[];\n\nexport const BASE_TONE_SEEDS: Record<\n NxdsSurfaceTone,\n { light: ModeSeeds; dark: ModeSeeds }\n> = {\n stone: {\n light: { background: '#fafaf9', foreground: '#1c1917' },\n dark: { background: '#1c1917', foreground: '#fafaf9' },\n },\n neutral: {\n light: { background: '#fafafa', foreground: '#171717' },\n dark: { background: '#171717', foreground: '#fafafa' },\n },\n zinc: {\n light: { background: '#fafafa', foreground: '#09090b' },\n dark: { background: '#09090b', foreground: '#fafafa' },\n },\n slate: {\n light: { background: '#f8fafc', foreground: '#0f172a' },\n dark: { background: '#0f172a', foreground: '#f8fafc' },\n },\n gray: {\n light: { background: '#f9fafb', foreground: '#111827' },\n dark: { background: '#111827', foreground: '#f9fafb' },\n },\n};\n\nexport const DENSITY_OPTIONS = [\n { value: 'tight', label: 'Tight' },\n { value: 'compact', label: 'Compact' },\n { value: 'default', label: 'Default' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'relaxed', label: 'Relaxed' },\n { value: 'spacious', label: 'Spacious' },\n] as const satisfies readonly { value: NxdsDensity; label: string }[];\n\nexport const CORNER_OPTIONS = [\n { value: 'square', label: 'Square' },\n { value: 'subtle', label: 'Subtle' },\n { value: 'smooth', label: 'Smooth' },\n { value: 'round', label: 'Round' },\n { value: 'extra-round', label: 'Extra Round' },\n] as const satisfies readonly { value: NxdsCorners; label: string }[];\n\nexport const ELEVATION_OPTIONS = [\n { value: 'flat', label: 'Flat' },\n { value: 'quiet', label: 'Quiet' },\n { value: 'soft', label: 'Soft' },\n { value: 'standard', label: 'Standard' },\n { value: 'strong', label: 'Strong' },\n] as const satisfies readonly { value: NxdsElevation; label: string }[];\n\nexport const STROKE_OPTIONS = [\n { value: 'fine', label: 'Fine' },\n { value: 'normal', label: 'Normal' },\n { value: 'strong', label: 'Strong' },\n] as const satisfies readonly { value: NxdsStroke; label: string }[];\n\nexport const DEFAULT_NXDS_APPEARANCE: NxdsAppearanceState = {\n mode: 'light',\n brandColor: DEFAULT_BRAND_COLOR,\n surfaceTone: 'zinc',\n lightContrast: 50,\n darkContrast: 50,\n density: 'default',\n corners: 'subtle',\n elevation: 'quiet',\n stroke: 'normal',\n prefs: {\n uiFont: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n codeFont: 'ui-monospace, \"SF Mono\", Menlo, monospace',\n uiFontSize: 14,\n codeFontSize: 12,\n reduceMotion: false,\n pointerCursors: false,\n fontSmoothing: false,\n },\n};\n\nconst FONT_PX_MIN = 8;\nconst FONT_PX_MAX = 32;\n\nconst APPEARANCE_MODES = new Set<NxdsAppearanceMode>([\n 'light',\n 'dark',\n 'system',\n]);\nconst SURFACE_TONES = new Set<NxdsSurfaceTone>(\n BASE_TONE_OPTIONS.map((option) => option.value)\n);\nconst DENSITIES = new Set<NxdsDensity>(\n DENSITY_OPTIONS.map((option) => option.value)\n);\nconst CORNERS = new Set<NxdsCorners>(\n CORNER_OPTIONS.map((option) => option.value)\n);\nconst ELEVATIONS = new Set<NxdsElevation>(\n ELEVATION_OPTIONS.map((option) => option.value)\n);\nconst STROKES = new Set<NxdsStroke>(\n STROKE_OPTIONS.map((option) => option.value)\n);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\n// Font families are interpolated into a `<style>` rule, so reject characters that\n// could break out of the declaration (`;` `{` `}`) or open a tag (`<`).\nconst FONT_FAMILY_UNSAFE = /[;{}<]/;\nconst fontFamilyOr = (value: unknown, fallback: string): string =>\n typeof value === 'string' &&\n value.length > 0 &&\n !FONT_FAMILY_UNSAFE.test(value)\n ? value\n : fallback;\n\nconst boolOr = (value: unknown, fallback: boolean): boolean =>\n typeof value === 'boolean' ? value : fallback;\n\nconst enumOr = <T extends string>(\n value: unknown,\n values: ReadonlySet<T>,\n fallback: T\n): T =>\n typeof value === 'string' && values.has(value as T) ? (value as T) : fallback;\n\nconst clampFontSize = (value: unknown, fallback: number): number =>\n typeof value === 'number' && Number.isFinite(value) && value > 0\n ? Math.min(FONT_PX_MAX, Math.max(FONT_PX_MIN, value))\n : fallback;\n\nfunction formatPx(value: number): string {\n return `${Number(value.toFixed(4))}px`;\n}\n\nfunction typographyScaleVariables(uiPx: number): string {\n const scale = uiPx / DEFAULT_NXDS_APPEARANCE.prefs.uiFontSize;\n const sizeVars = Object.entries(typographyTokens.size).map(\n ([name, token]) =>\n ` --nx-typography-size-${name}: ${formatPx(token.$value.value * scale)};`\n );\n const lineHeightVars = Object.entries(typographyTokens['line-height']).map(\n ([name, token]) =>\n ` --nx-typography-line-height-${name}: ${formatPx(token.$value.value * scale)};`\n );\n\n return [...sizeVars, ...lineHeightVars].join('\\n');\n}\n\n// Retired public-mode codename -> friendly, applied to persisted state on read\n// (see normalizeAppearanceModeIds). Internal; correctness is covered behaviorally\n// by the sanitize codename->friendly tests, so it is not part of the public API.\nconst PUBLIC_MODE_RENAME: Record<NxdsPresetField, Record<string, string>> = {\n density: {\n nova: 'compact',\n mira: 'default',\n luma: 'comfortable',\n sera: 'spacious',\n },\n corners: {\n sharp: 'square',\n mellow: 'round',\n },\n elevation: {\n maia: 'quiet',\n mira: 'standard',\n nova: 'strong',\n },\n stroke: {\n maia: 'fine',\n vega: 'normal',\n nova: 'strong',\n },\n};\n\nexport function normalizeAppearanceModeIds(raw: unknown): unknown {\n if (!isRecord(raw)) return raw;\n const out: Record<string, unknown> = { ...raw };\n for (const [field, map] of Object.entries(PUBLIC_MODE_RENAME)) {\n const value = out[field];\n if (\n typeof value === 'string' &&\n Object.prototype.hasOwnProperty.call(map, value)\n )\n out[field] = map[value];\n }\n return out;\n}\n\nexport function sanitizeNxdsAppearancePrefs(raw: unknown): NxdsAppearancePrefs {\n const o = isRecord(raw) ? raw : {};\n const d = DEFAULT_NXDS_APPEARANCE.prefs;\n return {\n uiFont: fontFamilyOr(o.uiFont, d.uiFont),\n codeFont: fontFamilyOr(o.codeFont, d.codeFont),\n uiFontSize: clampFontSize(o.uiFontSize, d.uiFontSize),\n codeFontSize: clampFontSize(o.codeFontSize, d.codeFontSize),\n reduceMotion: boolOr(o.reduceMotion, d.reduceMotion),\n pointerCursors: boolOr(o.pointerCursors, d.pointerCursors),\n fontSmoothing: boolOr(o.fontSmoothing, d.fontSmoothing),\n };\n}\n\nexport function sanitizeNxdsAppearance(rawInput: unknown): NxdsAppearanceState {\n if (!isRecord(rawInput)) return DEFAULT_NXDS_APPEARANCE;\n const raw = normalizeAppearanceModeIds(rawInput) as Record<string, unknown>;\n const d = DEFAULT_NXDS_APPEARANCE;\n return {\n mode: enumOr(raw.mode, APPEARANCE_MODES, d.mode),\n brandColor:\n typeof raw.brandColor === 'string' && isColor(raw.brandColor)\n ? raw.brandColor\n : d.brandColor,\n surfaceTone: enumOr(raw.surfaceTone, SURFACE_TONES, d.surfaceTone),\n lightContrast: normalizeContrast(raw.lightContrast, d.lightContrast),\n darkContrast: normalizeContrast(raw.darkContrast, d.darkContrast),\n density: enumOr(raw.density, DENSITIES, d.density),\n corners: enumOr(raw.corners, CORNERS, d.corners),\n elevation: enumOr(raw.elevation, ELEVATIONS, d.elevation),\n stroke: enumOr(raw.stroke, STROKES, d.stroke),\n prefs: sanitizeNxdsAppearancePrefs(raw.prefs),\n };\n}\n\nexport function createNxdsThemeContract(\n state: NxdsAppearanceState\n): ThemeDerivationInput {\n const tone = BASE_TONE_SEEDS[state.surfaceTone];\n return {\n surfaceTone: state.surfaceTone,\n contrast: { light: state.lightContrast, dark: state.darkContrast },\n light: { accent: state.brandColor, ...tone.light },\n dark: { accent: state.brandColor, ...tone.dark },\n };\n}\n\nexport function appearancePrefsToCss(prefs: NxdsAppearancePrefs): string {\n const uiPx = clampFontSize(\n prefs.uiFontSize,\n DEFAULT_NXDS_APPEARANCE.prefs.uiFontSize\n );\n const codePx = clampFontSize(\n prefs.codeFontSize,\n DEFAULT_NXDS_APPEARANCE.prefs.codeFontSize\n );\n // Font and type size reach only nxds. The toggles below apply to the whole\n // page, host included, when the user turns them on.\n const blocks: string[] = [\n inRuntimeLayer(`:root {\n --nx-typography-family-font-sans: ${prefs.uiFont};\n --nx-typography-family-font-mono: ${prefs.codeFont};\n${typographyScaleVariables(uiPx)}\n}`),\n `.nx\\\\:font-mono, .nx\\\\:typography-code-block, .nx\\\\:typography-code-inline { font-size: ${codePx}px; }`,\n ];\n if (prefs.fontSmoothing) {\n blocks.push(\n `html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }`\n );\n }\n if (prefs.pointerCursors) {\n blocks.push(\n `button:not(:disabled), [role=\"button\"], [role=\"tab\"], [role=\"radio\"], a[href], summary { cursor: pointer; }`\n );\n }\n if (prefs.reduceMotion) {\n blocks.push(\n `*, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; }`\n );\n }\n return blocks.join('\\n');\n}\n","import { clampChroma, type Oklch } from 'culori';\n\nimport { apcaLc } from './apca';\nimport { APCA_PAIRS } from './apca-pairs';\nimport {\n bisect,\n constrainColors,\n contrastTarget,\n normalizeContrast,\n} from './contrast';\nimport { formatOklch } from './oklch-format';\nimport {\n type Mode,\n type NxdsSurfaceTone,\n type Shade,\n TIER_THRESHOLDS,\n} from './palette';\nimport { rampFromSeed, seedOklch } from './perceptual-ramp';\nimport { getPaletteRamp, getPaletteShade } from './primitive-palette';\nimport { inRuntimeLayer } from './runtime-layer';\nimport {\n CHART_PALETTE_REFERENCES,\n STATUS_PALETTE_FAMILIES,\n} from './semantic-palette-references';\nimport {\n anchorToStep,\n DARK_SURFACE_LADDER,\n LIGHT_SURFACE_LADDER,\n SURFACE_TOKENS,\n SURFACE_TONE,\n type SurfaceToken,\n} from './surface-ladder';\n\nexport interface ThemeSeeds {\n /** Drives the primary family ramp. */\n accent: string;\n /** Drives surface lightness. Hue/chroma come from `surfaceTone`. */\n background: string;\n /** Drives text hue/lightness; tinted surface tones cap text chroma. */\n foreground: string;\n}\n\n/** The derivation seeds `deriveTheme` consumes — no display preference. */\nexport interface ThemeDerivationInput {\n surfaceTone?: NxdsSurfaceTone;\n light: ThemeSeeds;\n dark: ThemeSeeds;\n /** 0–100 per mode. Higher values strengthen surface and content contrast. */\n contrast: {\n light: number;\n dark: number;\n };\n}\n\nexport interface NxdsThemeContract extends ThemeDerivationInput {\n /** Consumer display preference; not read by `deriveTheme`. */\n appearance: 'light' | 'dark' | 'system';\n}\n\nexport type TokenMap = Record<string, string>;\nexport interface DerivedTheme {\n light: TokenMap;\n dark: TokenMap;\n}\n\nconst clamp01 = (l: number) => Math.max(0.03, Math.min(1, l));\n\ninterface ContrastProfile {\n surfaceDelta: number;\n borderAlpha: number;\n hoverAlpha: number;\n}\n\n// Border and hover opacities hit their `anchor` value at this contrast and\n// interpolate linearly on either side of it.\nconst CONTRAST_ANCHOR = 60;\n\nfunction anchoredContrast(\n contrast: number,\n min: number,\n anchor: number,\n max: number\n): number {\n const value =\n contrast <= CONTRAST_ANCHOR\n ? min + ((anchor - min) * contrast) / CONTRAST_ANCHOR\n : anchor +\n ((max - anchor) * (contrast - CONTRAST_ANCHOR)) /\n (100 - CONTRAST_ANCHOR);\n return Number(value.toFixed(4));\n}\n\nfunction contrastProfile(mode: Mode, contrast: number): ContrastProfile {\n const dark = mode === 'dark';\n return {\n surfaceDelta: 0.02 + (((dark ? 0.03 : 0.05) - 0.02) * contrast) / 100,\n borderAlpha: anchoredContrast(\n contrast,\n dark ? 0.12 : 0.06,\n dark ? 0.1882 : 0.0941,\n dark ? 0.2337 : 0.1168\n ),\n hoverAlpha: anchoredContrast(\n contrast,\n dark ? 0.04 : 0.035,\n 0.0627,\n dark ? 0.09 : 0.085\n ),\n };\n}\n\nconst WHITE_BASE = 'oklch(1 0 0)';\n\nconst isSurfaceToken = (name: string): name is SurfaceToken =>\n (SURFACE_TOKENS as readonly string[]).includes(name);\n\n/** Opaque surface tiers derived from the background seed + contrast Δ. */\nexport function deriveSurfaces(\n backgroundHex: string,\n surfaceTone: NxdsSurfaceTone,\n mode: Mode,\n delta: number,\n contrast = 50\n): TokenMap {\n const tone = SURFACE_TONE[surfaceTone];\n const dark = mode === 'dark';\n const anchorL = dark\n ? Math.max(0.08, Math.min(0.32, seedOklch(backgroundHex).l))\n : 1;\n const baseC = dark ? tone.darkC : tone.lightC;\n const out: TokenMap = {};\n const ladder = dark ? DARK_SURFACE_LADDER : LIGHT_SURFACE_LADDER;\n const surfaceAt = (token: SurfaceToken, spacing: number) => {\n const step = anchorToStep(ladder[token]);\n const l = clamp01(anchorL + step * spacing);\n const c = !dark && l >= 1 ? 0 : baseC;\n return formatOklch(\n clampChroma({ mode: 'oklch', l, c, h: tone.h }, 'oklch', 'p3')\n );\n };\n const endpoint = dark ? 'oklch(1 0 0)' : 'oklch(0 0 0)';\n const page = surfaceAt('background', 0);\n const pageMaximum = apcaLc(endpoint, page);\n const surfacePairs = APCA_PAIRS.flatMap(({ bg, tier, backdrop }) =>\n !backdrop && isSurfaceToken(bg) ? [{ bg, tier }] : []\n );\n const fits = (spacing: number) =>\n surfacePairs.every(\n ({ bg, tier }) =>\n apcaLc(endpoint, surfaceAt(bg, spacing)) >=\n (dark\n ? Math.min(contrastTarget(tier, contrast), pageMaximum)\n : TIER_THRESHOLDS[tier])\n );\n const spacing = fits(delta) ? delta : bisect(delta, 0, fits);\n for (const token of SURFACE_TOKENS)\n out[`--nx-color-${token}`] = surfaceAt(token, spacing);\n out['--nx-color-control-thumb'] = 'oklch(1 0 0)';\n return out;\n}\n\n/**\n * Text seed `quiet` of the way from the foreground toward its surface (softer =\n * lower contrast); `quiet = 0` is the foreground itself. The contrast solver\n * moves it back toward the foreground only as far as legibility requires.\n */\nfunction quietText(fg: Oklch, surfaceColor: string, quiet: number): string {\n const surfL = seedOklch(surfaceColor).l ?? 0;\n const fgL = fg.l ?? 0;\n return formatOklch({\n mode: 'oklch',\n l: clamp01(fgL + (surfL - fgL) * quiet),\n c: fg.c ?? 0,\n h: fg.h ?? 0,\n });\n}\n\n/** Each text token: the surface it sits on and how quiet to aim. */\nconst TEXT_ON: Record<string, { surface: string; quiet: number }> = {\n 'container-foreground': { surface: '--nx-color-container', quiet: 0 },\n 'popover-foreground': { surface: '--nx-color-popover', quiet: 0 },\n 'nav-foreground': { surface: '--nx-color-nav-background', quiet: 0 },\n 'nav-muted-foreground': { surface: '--nx-color-nav-background', quiet: 0.4 },\n 'disabled-foreground': { surface: '--nx-color-disabled', quiet: 0.5 },\n 'muted-foreground': { surface: '--nx-color-background', quiet: 0.5 },\n 'muted-foreground-subtle': { surface: '--nx-color-background', quiet: 0.6 },\n};\n\n/** Text seeds; the contrast solver makes them legible on every registered background. */\nexport function deriveText(\n foregroundHex: string,\n surfaces: TokenMap,\n mode: Mode\n): TokenMap {\n const fg = seedOklch(foregroundHex);\n // A fixed light reference keeps text strength independent of moving surfaces.\n const textSurface = (name: string) =>\n mode === 'light' ? WHITE_BASE : (surfaces[name] ?? foregroundHex);\n const out: TokenMap = { '--nx-color-foreground': formatOklch(fg) };\n for (const [token, { surface, quiet }] of Object.entries(TEXT_ON))\n out[`--nx-color-${token}`] = quietText(fg, textSurface(surface), quiet);\n return out;\n}\n\n/**\n * Fill, subtle, and border seeds for a named color family. The contrast solver\n * adds the black/white `-foreground` label and resolves `-subtle-foreground`.\n */\nexport function deriveFamily(\n name: string,\n ramp: Readonly<Record<Shade, string>>,\n mode: Mode\n): TokenMap {\n const dark = mode === 'dark';\n const p = `--nx-color-${name}`;\n const activeBorderToken =\n name in STATUS_PALETTE_FAMILIES\n ? `--nx-color-border-${name}-active`\n : `${p}-border-active`;\n return {\n [`${p}-background`]: ramp['600'],\n [`${p}-background-hover`]: ramp['700'],\n [`${p}-background-active`]: ramp['800'],\n [`${p}-disabled`]: dark ? ramp['950'] : ramp['300'],\n [`${p}-subtle`]: dark ? ramp['950'] : ramp['50'],\n [`${p}-subtle-foreground`]: dark ? ramp['300'] : ramp['600'],\n [`${p}-subtle-hover`]: dark ? ramp['900'] : ramp['100'],\n [`${p}-subtle-active`]: dark ? ramp['800'] : ramp['200'],\n [`${p}-border`]: dark ? ramp['700'] : ramp['200'],\n [activeBorderToken]: dark ? ramp['500'] : ramp['400'],\n };\n}\n\nfunction deriveStatus(mode: Mode): TokenMap {\n return Object.assign(\n {},\n ...Object.entries(STATUS_PALETTE_FAMILIES).map(([family, palette]) =>\n deriveFamily(family, getPaletteRamp(palette), mode)\n )\n );\n}\n\nfunction deriveChart(mode: Mode): TokenMap {\n return Object.fromEntries(\n CHART_PALETTE_REFERENCES.map((reference, index) => [\n `--nx-color-chart-categorical-${index + 1}`,\n getPaletteShade(reference.palette, reference[mode]),\n ])\n );\n}\n\nfunction deriveAlpha(\n surfaceTone: NxdsSurfaceTone,\n mode: Mode,\n profile: ContrastProfile\n): TokenMap {\n const tone = SURFACE_TONE[surfaceTone];\n const dark = mode === 'dark';\n const toneInk = (alpha: number) =>\n formatOklch({ mode: 'oklch', l: 0.13, c: tone.darkC, h: tone.h, alpha });\n const contrastInk = (alpha: number) =>\n formatOklch({ mode: 'oklch', l: dark ? 1 : 0.1448, c: 0, h: 0, alpha });\n\n return {\n '--nx-color-overlay': toneInk(dark ? 0.8471 : 0.7529),\n '--nx-color-popover-backdrop': toneInk(0.9098),\n '--nx-color-border-default-alpha': toneInk(profile.borderAlpha),\n '--nx-color-background-hover-alpha': toneInk(profile.hoverAlpha),\n '--nx-color-border-hairline': contrastInk(0.0941),\n '--nx-color-border-default': contrastInk(profile.borderAlpha),\n '--nx-color-border-disabled': contrastInk(profile.borderAlpha),\n };\n}\n\n// P3 cusp gamut for the solid fill, matching the perceptual ramp's emit target.\nconst FILL_GAMUT = 'p3';\n// The primary fill follows the brand seed's own lightness rather than a fixed\n// mid-tone shade, so the button *is* the chosen color: a deep navy stays deep\n// navy, and #000 stays black. Light mode honors the seed directly, capped so a\n// near-white brand still reads as a filled button. Dark mode honors light/mid\n// seeds but lifts dark ones toward light — so a black brand becomes a white\n// button that stays legible on a dark surface.\nconst PRIMARY_FILL_LIGHT_CAP = 0.85;\nconst PRIMARY_DARK_ENDPOINT_LIFT_FLOOR = 0.16;\nconst PRIMARY_LIGHT_ENDPOINT_CEIL = 0.99;\nconst PRIMARY_DARK_HONOR_FLOOR = 0.45;\nconst PRIMARY_DARK_LIFT_EXPONENT = 1.6;\nconst PRIMARY_HOVER_STEP = 0.05;\nconst PRIMARY_ACTIVE_STEP = 0.1;\nconst PRIMARY_ACTIVE_DARK_FILL_STEP = 0.03;\n// Endpoint brand interactions follow the same authored Neutral palette as secondary fills.\nconst endpointL = (shade: Shade): number =>\n seedOklch(getPaletteShade('neutral', shade)).l ?? 0;\n\nfunction primaryFillLightness(seedL: number, mode: Mode): number {\n if (mode === 'light') return clamp01(Math.min(seedL, PRIMARY_FILL_LIGHT_CAP));\n if (seedL <= PRIMARY_DARK_ENDPOINT_LIFT_FLOOR) return 1;\n if (seedL >= PRIMARY_DARK_HONOR_FLOOR) return clamp01(seedL);\n // Below the floor, lift toward white so a dark seed stays legible on a dark\n // surface. The coefficient is `1 - floor` so the curve meets the honor branch\n // exactly at the floor (continuous, no jump); the exponent shapes how hard\n // near-black seeds push toward white.\n const t = seedL / PRIMARY_DARK_HONOR_FLOOR;\n return clamp01(\n 1 - (1 - PRIMARY_DARK_HONOR_FLOOR) * Math.pow(t, PRIMARY_DARK_LIFT_EXPONENT)\n );\n}\n\n// Hover/active nudge the fill toward mid-grey so the state change reads at any\n// fill lightness: dark fills lighten, light fills darken.\nconst towardMid = (l: number, step: number): number =>\n clamp01(l < 0.5 ? l + step : l - step);\n\nconst seedFill = (l: number, c: number, h: number): string =>\n formatOklch(clampChroma({ mode: 'oklch', l, c, h }, 'oklch', FILL_GAMUT));\n\nfunction hoverFillTarget(baseL: number): number {\n if (baseL <= PRIMARY_DARK_ENDPOINT_LIFT_FLOOR) {\n return endpointL('900');\n }\n if (baseL >= PRIMARY_LIGHT_ENDPOINT_CEIL) return endpointL('100');\n return towardMid(baseL, PRIMARY_HOVER_STEP);\n}\n\nfunction activeFillTarget(baseL: number): number {\n if (baseL <= PRIMARY_DARK_ENDPOINT_LIFT_FLOOR) {\n return endpointL('950');\n }\n if (baseL >= PRIMARY_LIGHT_ENDPOINT_CEIL) return endpointL('200');\n return clamp01(\n baseL < 0.5\n ? baseL - PRIMARY_ACTIVE_DARK_FILL_STEP\n : baseL - PRIMARY_ACTIVE_STEP\n );\n}\n\n/**\n * Primary family seeds from one accent. Supporting shades (subtle, borders,\n * disabled) come from the seed ramp via {@link deriveFamily}; the solid fills\n * follow the seed's own lightness, and the contrast solver moves any fill its\n * label can't read on.\n */\nexport function derivePrimary(accentHex: string, mode: Mode): TokenMap {\n const seed = seedOklch(accentHex);\n const h = seed.h ?? 0;\n const c = seed.c ?? 0;\n const fillL = primaryFillLightness(seed.l ?? 0, mode);\n return {\n ...deriveFamily('primary', rampFromSeed(accentHex), mode),\n '--nx-color-primary-background': seedFill(fillL, c, h),\n '--nx-color-primary-background-hover': seedFill(\n hoverFillTarget(fillL),\n c,\n h\n ),\n '--nx-color-primary-background-active': seedFill(\n activeFillTarget(fillL),\n c,\n h\n ),\n };\n}\n\nexport function deriveSecondary(mode: Mode): TokenMap {\n const d = mode === 'dark';\n const n = getPaletteRamp('neutral');\n return {\n '--nx-color-secondary-background': d ? n['900'] : n['100'],\n '--nx-color-secondary-background-hover': d ? n['700'] : n['200'],\n '--nx-color-secondary-background-active': d ? n['600'] : n['300'],\n '--nx-color-secondary-foreground': d ? n['100'] : n['900'],\n '--nx-color-secondary-disabled': d ? n['950'] : n['50'],\n '--nx-color-secondary-subtle': d ? n['800'] : n['100'],\n '--nx-color-secondary-subtle-foreground': d ? n['200'] : n['600'],\n '--nx-color-secondary-subtle-hover': d ? n['700'] : n['200'],\n '--nx-color-secondary-subtle-active': d ? n['600'] : n['300'],\n };\n}\n\nconst gamutColor = (value: string): string =>\n formatOklch(clampChroma(seedOklch(value), 'oklch', 'p3'));\n\n// Text in each mode is capped at the opposite mode's surface chroma: light ink\n// in dark mode sits closest to the light surfaces' tint, and vice versa.\nconst textChromaCap = (surfaceTone: NxdsSurfaceTone, mode: Mode): number =>\n mode === 'dark'\n ? SURFACE_TONE[surfaceTone].lightC\n : SURFACE_TONE[surfaceTone].darkC;\n\n/** Derive one mode's `--nx-color-*` map, so callers can cache each mode independently. */\nexport function deriveThemeMode(\n input: ThemeDerivationInput,\n mode: Mode\n): TokenMap {\n const surfaceTone = input.surfaceTone ?? 'neutral';\n const seeds = input[mode];\n const contrast = normalizeContrast(input.contrast[mode]);\n const profile = contrastProfile(mode, contrast);\n const surfaces = deriveSurfaces(\n seeds.background,\n surfaceTone,\n mode,\n profile.surfaceDelta,\n contrast\n );\n let foreground = seeds.foreground;\n if (surfaceTone !== 'neutral') {\n const ink = seedOklch(foreground);\n foreground = formatOklch({\n ...ink,\n c: Math.min(ink.c, textChromaCap(surfaceTone, mode)),\n });\n }\n const candidates = {\n ...deriveText(foreground, surfaces, mode),\n ...derivePrimary(seeds.accent, mode),\n ...deriveSecondary(mode),\n ...deriveStatus(mode),\n ...deriveChart(mode),\n ...deriveAlpha(surfaceTone, mode, profile),\n '--nx-color-focus-error': getPaletteShade(\n STATUS_PALETTE_FAMILIES.error,\n mode === 'dark' ? '300' : '600'\n ),\n };\n const map = { ...surfaces };\n for (const [name, value] of Object.entries(candidates))\n map[name] = gamutColor(value);\n const popover = surfaces['--nx-color-popover'];\n if (!popover) throw new Error('deriveThemeMode: missing popover surface');\n map['--nx-color-popover-alpha'] = formatOklch({\n ...seedOklch(popover),\n alpha: 0.94 + (0.06 * contrast) / 100,\n });\n return constrainColors(map, mode, contrast);\n}\n\n/**\n * Expand derivation seeds into light + dark `--nx-color-*` maps. Both modes are\n * always derived; the consumer's `appearance` choice selects one at runtime.\n * Only tokens the engine computes are emitted (surfaces, text, borders, primary,\n * secondary, status, chart, alpha/translucent, focus).\n */\nexport function deriveTheme(input: ThemeDerivationInput): DerivedTheme {\n return {\n light: deriveThemeMode(input, 'light'),\n dark: deriveThemeMode(input, 'dark'),\n };\n}\n\nfunction block(selector: string, map: TokenMap): string {\n const body = Object.entries(map)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n');\n return `${selector} {\\n${body}\\n}`;\n}\n\n/**\n * Serialize a derived theme to CSS text in the runtime layer — light on\n * `:root`, dark on `:root.dark`.\n */\nexport function themeToCss(derived: DerivedTheme): string {\n return inRuntimeLayer(\n `${block(':root', derived.light)}\\n${block(':root.dark', derived.dark)}`\n );\n}\n","{\n \"green\": {\n \"50\": {\n \"$value\": \"#f1f7ef\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e6f3e3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#cce2c7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#a6c99e\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#7fb175\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#569947\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#3f7932\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#306424\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#264d1c\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#1e3b17\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#12250d\",\n \"$type\": \"color\"\n }\n },\n \"emerald\": {\n \"50\": {\n \"$value\": \"#ecfdf5\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#d1fae5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#a7f3d0\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#6ee7b7\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#34d399\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#10b981\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#059669\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#047857\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#065f46\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#064e3b\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#022c22\",\n \"$type\": \"color\"\n }\n },\n \"teal\": {\n \"50\": {\n \"$value\": \"#f0fdfa\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ccfbf1\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#99f6e4\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#5eead4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#2dd4bf\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#14b8a6\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0d9488\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0f766e\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#115e59\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#134e4a\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#042f2e\",\n \"$type\": \"color\"\n }\n },\n \"cyan\": {\n \"50\": {\n \"$value\": \"#ecfeff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#cffafe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#a5f3fc\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#67e8f9\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#22d3ee\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#06b6d4\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0891b2\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0e7490\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#155e75\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#164e63\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#083344\",\n \"$type\": \"color\"\n }\n },\n \"sky\": {\n \"50\": {\n \"$value\": \"#f0f9ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e0f2fe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#bae6fd\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#7dd3fc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#38bdf8\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#0ea5e9\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0284c7\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0369a1\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#075985\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0c4a6e\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#082f49\",\n \"$type\": \"color\"\n }\n },\n \"indigo\": {\n \"50\": {\n \"$value\": \"#eef2ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e0e7ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#c7d2fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#a5b4fc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#818cf8\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#6366f1\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#4f46e5\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#4338ca\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#3730a3\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#312e81\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#1e1b4b\",\n \"$type\": \"color\"\n }\n },\n \"violet\": {\n \"50\": {\n \"$value\": \"#f5f3ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ede9fe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#ddd6fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#c4b5fd\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a78bfa\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#8b5cf6\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#7c3aed\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#6d28d9\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#5b21b6\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#4c1d95\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#2e1065\",\n \"$type\": \"color\"\n }\n },\n \"purple\": {\n \"50\": {\n \"$value\": \"#faf5ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f3e8ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e9d5ff\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d8b4fe\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#c084fc\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#a855f7\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#9333ea\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#7e22ce\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#6b21a8\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#581c87\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#3b0764\",\n \"$type\": \"color\"\n }\n },\n \"fuchsia\": {\n \"50\": {\n \"$value\": \"#fdf4ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fae8ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#f5d0fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f0abfc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#e879f9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#d946ef\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#c026d3\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a21caf\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#86198f\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#701a75\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#4a044e\",\n \"$type\": \"color\"\n }\n },\n \"pink\": {\n \"50\": {\n \"$value\": \"#fdf2f8\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fce7f3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fbcfe8\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f9a8d4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#f472b6\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#ec4899\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#db2777\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#be185d\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9d174d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#831843\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#500724\",\n \"$type\": \"color\"\n }\n },\n \"slate\": {\n \"50\": {\n \"$value\": \"#f8fafc\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f2f6fa\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f1f5f9\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e0e6ee\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e2e8f0\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#cbd5e1\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#90a1b9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#62748e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#45556c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#314158\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#1d293d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0f172a\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#020617\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0206170a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#02061710\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#02061718\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#02061730\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#02061750\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#02061780\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#020617a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#020617c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#020617d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#020617e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#020617f4\",\n \"$type\": \"color\"\n }\n },\n \"rose\": {\n \"50\": {\n \"$value\": \"#fff1f2\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ffe4e6\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fecdd3\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fda4af\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#fb7185\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#f43f5e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#e11d48\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#be123c\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9f1239\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#881337\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#4c0519\",\n \"$type\": \"color\"\n }\n },\n \"lime\": {\n \"50\": {\n \"$value\": \"#f7fee7\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ecfccb\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#d9f99d\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#bef264\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a3e635\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#84cc16\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#65a30d\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#4d7c0f\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#3f6212\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#365314\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#1a2e05\",\n \"$type\": \"color\"\n }\n },\n \"yellow\": {\n \"50\": {\n \"$value\": \"#fefce8\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fef9c3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fef08a\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fde047\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#facc15\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#eab308\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#ca8a04\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a16207\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#854d0e\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#713f12\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#422006\",\n \"$type\": \"color\"\n }\n },\n \"blue\": {\n \"50\": {\n \"$value\": \"#f1f6fc\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e6effc\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#c4daf5\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#9dc1ee\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#71a1df\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#3d7bc8\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#2863ab\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#184f90\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#113d70\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0d2e55\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#051a36\",\n \"$type\": \"color\"\n }\n },\n \"gray\": {\n \"50\": {\n \"$value\": \"#f9fafb\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f4f5f7\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f3f4f6\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e3e5e9\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e5e7eb\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d1d5db\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#99a1af\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#6a7282\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#4a5565\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#364153\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#1e2939\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#111827\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#030712\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0307120a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#03071210\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#03071218\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#03071230\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#03071250\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#03071280\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#030712a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#030712c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#030712d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#030712e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#030712f4\",\n \"$type\": \"color\"\n }\n },\n \"zinc\": {\n \"50\": {\n \"$value\": \"#fafafa\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f5f5f6\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f4f4f5\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e4e6e8\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e3e5e7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d2d5d8\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#9f9fa9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#71717b\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#52525c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#3f3f46\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#26272a\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#17181b\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#08090b\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#08090b0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#08090b10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#08090b18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#08090b30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#08090b50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#08090b80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#08090ba0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#08090bc0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#08090bd8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#08090be8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#08090bf4\",\n \"$type\": \"color\"\n }\n },\n \"neutral\": {\n \"50\": {\n \"$value\": \"#fafafa\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f5f5f5\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f5f5f5\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e5e5e5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e5e5e5\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d4d4d4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a1a1a1\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#737373\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#525252\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#404040\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#262626\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#171717\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#0a0a0a\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0a0a0a0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0a0a0a10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0a0a0a18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0a0a0a30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0a0a0a50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0a0a0a80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0a0a0aa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0a0a0ac0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0a0a0ad8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0a0a0ae8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0a0a0af4\",\n \"$type\": \"color\"\n }\n },\n \"stone\": {\n \"50\": {\n \"$value\": \"#fbfaf8\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f6f5f2\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#eeedeb\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e7e5e2\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#d6d4d1\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#b6b2ad\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#95928c\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#75726d\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#595854\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#444441\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#2d2d2d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#181818\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#050505\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0b09040a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0b090410\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0b090418\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0b090430\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0b090450\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0b090480\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0b0904a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0b0904c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0b0904d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0b0904e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0b0904f4\",\n \"$type\": \"color\"\n }\n },\n \"red\": {\n \"50\": {\n \"$value\": \"#fef2f0\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fee9e6\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#facfc9\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f0a99f\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#e58175\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#d95c50\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#c13d34\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a32d26\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#7f211b\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#5f1a15\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#3d110d\",\n \"$type\": \"color\"\n }\n },\n \"orange\": {\n \"50\": {\n \"$value\": \"#fff7ed\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ffedd5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fed7aa\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fdba74\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#fb923c\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#f97316\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#ea580c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#c2410c\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9a3412\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#7c2d12\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#431407\",\n \"$type\": \"color\"\n }\n },\n \"amber\": {\n \"50\": {\n \"$value\": \"#faf4ec\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f9eddd\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#efd7b7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#e5bd86\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#d8a354\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#c88a1e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#b37903\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#946406\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#764f05\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#5a3b03\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#392402\",\n \"$type\": \"color\"\n }\n },\n \"white\": {\n \"base\": {\n \"$value\": \"#ffffff\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#ffffff0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#ffffff10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#ffffff18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#ffffff30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#ffffff50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#ffffff80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#ffffffa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#ffffffc0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#ffffffd8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#ffffffe8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#fffffff4\",\n \"$type\": \"color\"\n }\n },\n \"black\": {\n \"base\": {\n \"$value\": \"#0a0a0a\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0a0a0a0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0a0a0a10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0a0a0a18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0a0a0a30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0a0a0a50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0a0a0a80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0a0a0aa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0a0a0ac0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0a0a0ad8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0a0a0ae8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0a0a0af4\",\n \"$type\": \"color\"\n }\n }\n}\n","import primitiveColors from '../../tokens/primitives/color.json';\nimport {\n hexToOklchPinned,\n isPaletteShadeKey,\n} from '../token-source/perceptual-grid';\n\nimport { type Shade, SHADES } from './palette';\n\nexport type PrimitivePaletteName = Exclude<\n keyof typeof primitiveColors,\n 'white' | 'black'\n>;\nexport type PrimitivePaletteRamp = Readonly<Record<Shade, string>>;\n\nexport const PRIMITIVE_PALETTE_NAMES: readonly PrimitivePaletteName[] =\n Object.keys(primitiveColors).filter(\n (name): name is PrimitivePaletteName => name !== 'white' && name !== 'black'\n );\n\nconst rampCache = new Map<PrimitivePaletteName, PrimitivePaletteRamp>();\n\nexport function getPaletteRamp(\n palette: PrimitivePaletteName\n): PrimitivePaletteRamp {\n if (!PRIMITIVE_PALETTE_NAMES.includes(palette)) {\n throw new Error(`palette: unknown primitive palette \"${palette}\"`);\n }\n const cached = rampCache.get(palette);\n if (cached) return cached;\n const ramp = Object.freeze(\n Object.fromEntries(\n SHADES.map((shade) => [\n shade,\n hexToOklchPinned(\n primitiveColors[palette][shade].$value,\n shade,\n palette\n ),\n ])\n ) as Record<Shade, string>\n );\n rampCache.set(palette, ramp);\n return ramp;\n}\n\nexport function getPaletteShade(\n palette: PrimitivePaletteName,\n shade: Shade\n): string {\n if (!isPaletteShadeKey(shade)) {\n throw new Error(`palette: unknown shade \"${shade}\"`);\n }\n return getPaletteRamp(palette)[shade];\n}\n","import type { NxdsSurfaceTone } from './palette';\n\nexport const SURFACE_TONE: Record<\n NxdsSurfaceTone,\n { h: number; lightC: number; darkC: number }\n> = {\n slate: { h: 264.7, lightC: 0.003, darkC: 0.006 },\n gray: { h: 261.7, lightC: 0.002, darkC: 0.004 },\n zinc: { h: 285.9, lightC: 0.002, darkC: 0.006 },\n neutral: { h: 0, lightC: 0, darkC: 0 },\n stone: { h: 70, lightC: 0.002, darkC: 0.003 },\n};\n\nexport const PAGE_L_LIGHT = 1;\n\n/**\n * Canonical opaque-surface token set. Both regime ladders are typed against\n * these keys, so a surface added here must be given a light and dark anchor.\n */\nexport const SURFACE_TOKENS = [\n 'background',\n 'background-hover',\n 'background-active',\n 'muted',\n 'muted-extralight',\n 'container',\n 'container-hover',\n 'container-active',\n 'popover',\n 'popover-hover',\n 'popover-active',\n 'control-background',\n 'control-background-hover',\n 'nav-background',\n 'nav-item-hover',\n 'nav-item-active',\n 'nav-border',\n 'disabled',\n 'border-focus',\n] as const;\n\nexport type SurfaceToken = (typeof SURFACE_TOKENS)[number];\nexport type SurfaceSteps = Record<SurfaceToken, number>;\n\nexport type ShadeAnchor =\n | number\n | 'base'\n | {\n step: number;\n };\n\n// OKLCH lightness per ladder step: the unit that converts a shade anchor into a\n// step count. deriveSurfaces scales the steps by its own contrast spacing.\nconst STEP_L = 0.056;\n\nconst LIGHT_VIRTUAL_ANCHOR_STEPS = {\n 50: -0.27,\n 75: -0.54,\n 100: -0.98,\n 150: -1.38,\n 200: -2.32,\n 400: -6.07,\n} as const;\n\nconst SURFACE_ANCHOR_L: Record<number, number> = Object.fromEntries(\n Object.entries(LIGHT_VIRTUAL_ANCHOR_STEPS).map(([shade, step]) => [\n Number(shade),\n PAGE_L_LIGHT + step * STEP_L,\n ])\n);\n\nexport function anchorToStep(anchor: ShadeAnchor): number {\n if (typeof anchor === 'object') return anchor.step;\n if (anchor === 'base') return 0;\n\n const shadeL = SURFACE_ANCHOR_L[anchor];\n if (shadeL === undefined) {\n throw new Error(`surface-ladder: unknown shade anchor '${anchor}'`);\n }\n\n return Number(((shadeL - PAGE_L_LIGHT) / STEP_L).toFixed(4));\n}\n\nexport const LIGHT_SURFACE_LADDER = {\n background: 'base',\n 'background-hover': 50,\n 'background-active': 150,\n muted: 75,\n // The only light rung off the shade grid: a 40% background→muted blend lands\n // between gridlines, so it is expressed as a raw fractional step (mirrors the\n // dark ladder's raw-step rationale below).\n 'muted-extralight': { step: -0.216 },\n container: 'base',\n 'container-hover': 75,\n 'container-active': 100,\n popover: 'base',\n 'popover-hover': 100,\n 'popover-active': 100,\n 'control-background': 150,\n 'control-background-hover': 200,\n 'nav-background': 75,\n 'nav-item-hover': 150,\n 'nav-item-active': 150,\n 'nav-border': 150,\n disabled: 100,\n 'border-focus': 400,\n} as const satisfies Record<SurfaceToken, ShadeAnchor>;\n\n// Dark surfaces are bg-seed-relative and do not sit on the light shade grid, so\n// the dark ladder takes raw steps only.\nexport const DARK_SURFACE_LADDER = {\n background: 'base',\n 'background-hover': { step: 1.6 },\n 'background-active': { step: 1.6 },\n muted: { step: 1.6 },\n 'muted-extralight': { step: 0.64 },\n container: { step: 1.6 },\n 'container-hover': { step: 3.2 },\n 'container-active': { step: 1.6 },\n popover: { step: 3.2 },\n 'popover-hover': { step: 4.8 },\n 'popover-active': { step: 3.2 },\n 'control-background': { step: 3.2 },\n 'control-background-hover': { step: 4.8 },\n 'nav-background': { step: 1.6 },\n 'nav-item-hover': { step: 3.2 },\n 'nav-item-active': { step: 3.2 },\n 'nav-border': { step: 3.2 },\n disabled: { step: 1.6 },\n 'border-focus': { step: 9.68 },\n} as const satisfies Record<SurfaceToken, Exclude<ShadeAnchor, number>>;\n\nfunction stepsFromLadder(\n ladder: Record<SurfaceToken, ShadeAnchor>\n): SurfaceSteps {\n return Object.fromEntries(\n SURFACE_TOKENS.map((token) => [token, anchorToStep(ladder[token])])\n ) as SurfaceSteps;\n}\n\nexport const LIGHT_SURFACE_STEPS = stepsFromLadder(LIGHT_SURFACE_LADDER);\nexport const DARK_SURFACE_STEPS = stepsFromLadder(DARK_SURFACE_LADDER);\n","import {\n appearancePrefsToCss,\n createNxdsThemeContract,\n DEFAULT_NXDS_APPEARANCE,\n type NxdsAppearanceState,\n sanitizeNxdsAppearance,\n} from './appearance-model';\nimport {\n deriveThemeMode,\n type ThemeDerivationInput,\n themeToCss,\n type TokenMap,\n} from './derive-theme';\nimport type { Mode } from './palette';\n\nexport const SNAPSHOT_VERSION = 9;\nconst STATE_COOKIE_VERSION = 6;\nconst SNAPSHOT_CACHE_LIMIT = 50;\n\nexport const NXDS_APPEARANCE_DATA_ATTRS = [\n 'data-density',\n 'data-radius',\n 'data-shadow',\n 'data-borderwidth',\n] as const;\n\nexport type NxdsAppearanceDataAttr =\n (typeof NXDS_APPEARANCE_DATA_ATTRS)[number];\n\nexport interface NxdsAppearanceSnapshot {\n version: typeof SNAPSHOT_VERSION;\n state: NxdsAppearanceState;\n themeCss: string;\n prefsCss: string;\n}\n\nexport interface NxdsAppearanceStateCookie {\n version: typeof STATE_COOKIE_VERSION;\n state: NxdsAppearanceState;\n}\n\nexport interface NxdsFirstPaintResolution {\n className: '' | 'dark';\n dataAttrs: Record<NxdsAppearanceDataAttr, string>;\n themeCss: string;\n prefsCss: string;\n}\n\nexport interface NxdsAppearanceBootstrapScriptOptions {\n storageKey?: string | false;\n defaultSnapshot?: NxdsAppearanceSnapshot;\n}\n\nexport const DEFAULT_STORAGE_KEY = 'nxds-appearance';\nexport const DEFAULT_COOKIE_KEY = 'nxds-appearance-state';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nconst cachedSnapshots = new Map<string, NxdsAppearanceSnapshot>();\nconst cachedModes = new Map<string, TokenMap>();\n\nfunction cacheKeyForState(state: NxdsAppearanceState): string {\n return JSON.stringify(state);\n}\n\nfunction remember<T>(cache: Map<string, T>, key: string, value: T): T {\n cache.set(key, value);\n if (cache.size > SNAPSHOT_CACHE_LIMIT) {\n const oldestKey = cache.keys().next().value;\n if (oldestKey !== undefined) cache.delete(oldestKey);\n }\n return value;\n}\n\n// Each mode is cached on only the inputs it reads, so moving one mode's\n// contrast slider (or any non-color preference) re-derives at most one mode.\nfunction deriveModeCached(\n contract: ThemeDerivationInput,\n mode: Mode\n): TokenMap {\n const key = JSON.stringify([\n mode,\n contract.surfaceTone,\n contract[mode],\n contract.contrast[mode],\n ]);\n return (\n cachedModes.get(key) ??\n remember(cachedModes, key, deriveThemeMode(contract, mode))\n );\n}\n\nfunction deriveThemeCss(state: NxdsAppearanceState): string {\n const contract = createNxdsThemeContract(state);\n return themeToCss({\n light: deriveModeCached(contract, 'light'),\n dark: deriveModeCached(contract, 'dark'),\n });\n}\n\nfunction derivePrefsCss(state: NxdsAppearanceState): string {\n return appearancePrefsToCss(state.prefs);\n}\n\nexport function createNxdsAppearanceSnapshot(\n state: NxdsAppearanceState,\n themeCss: string,\n prefsCss: string\n): NxdsAppearanceSnapshot {\n return {\n version: SNAPSHOT_VERSION,\n state,\n themeCss,\n prefsCss,\n };\n}\n\nexport function createNxdsAppearanceSnapshotFromState(\n state: NxdsAppearanceState\n): NxdsAppearanceSnapshot {\n const sanitizedState = sanitizeNxdsAppearance(state);\n const cacheKey = cacheKeyForState(sanitizedState);\n const cachedSnapshot = cachedSnapshots.get(cacheKey);\n\n if (cachedSnapshot) return cachedSnapshot;\n\n return remember(\n cachedSnapshots,\n cacheKey,\n createNxdsAppearanceSnapshot(\n sanitizedState,\n deriveThemeCss(sanitizedState),\n derivePrefsCss(sanitizedState)\n )\n );\n}\n\nexport function createNxdsAppearanceStateCookie(\n state: NxdsAppearanceState\n): NxdsAppearanceStateCookie {\n return {\n version: STATE_COOKIE_VERSION,\n state: sanitizeNxdsAppearance(state),\n };\n}\n\nexport function serializeNxdsAppearanceStateCookie(\n state: NxdsAppearanceState\n): string {\n return encodeURIComponent(\n JSON.stringify(createNxdsAppearanceStateCookie(state))\n );\n}\n\nexport function parseNxdsAppearanceStateCookie(\n raw: unknown\n): NxdsAppearanceState | null {\n if (typeof raw !== 'string' || raw.length === 0) return null;\n\n try {\n const decoded = decodeURIComponent(raw);\n const parsed = JSON.parse(decoded);\n\n if (\n !isRecord(parsed) ||\n parsed.version !== STATE_COOKIE_VERSION ||\n !isRecord(parsed.state)\n ) {\n return null;\n }\n\n return sanitizeNxdsAppearance(parsed.state);\n } catch {\n return null;\n }\n}\n\nexport function createNxdsAppearanceSnapshotFromCookie(\n raw: unknown,\n fallbackState: NxdsAppearanceState = DEFAULT_NXDS_APPEARANCE\n): NxdsAppearanceSnapshot {\n return createNxdsAppearanceSnapshotFromState(\n parseNxdsAppearanceStateCookie(raw) ?? sanitizeNxdsAppearance(fallbackState)\n );\n}\n\nlet cachedDefaultSnapshot: NxdsAppearanceSnapshot | undefined;\n\nexport function createDefaultNxdsAppearanceSnapshot(): NxdsAppearanceSnapshot {\n return (cachedDefaultSnapshot ??= createNxdsAppearanceSnapshotFromState(\n DEFAULT_NXDS_APPEARANCE\n ));\n}\n\nexport function sanitizeNxdsAppearanceSnapshot(\n raw: unknown\n): NxdsAppearanceSnapshot {\n if (!isRecord(raw) || !isRecord(raw.state)) {\n return createDefaultNxdsAppearanceSnapshot();\n }\n\n const state = sanitizeNxdsAppearance(raw.state);\n\n if (\n raw.version === SNAPSHOT_VERSION &&\n typeof raw.themeCss === 'string' &&\n typeof raw.prefsCss === 'string'\n ) {\n return createNxdsAppearanceSnapshot(state, raw.themeCss, raw.prefsCss);\n }\n\n return createNxdsAppearanceSnapshotFromState(state);\n}\n\nexport function resolveFirstPaint(\n snapshot: NxdsAppearanceSnapshot,\n systemPrefersDark: boolean\n): NxdsFirstPaintResolution {\n const { state } = snapshot;\n const dark =\n state.mode === 'dark' ||\n (state.mode === 'system' && systemPrefersDark === true);\n\n return {\n className: dark ? 'dark' : '',\n dataAttrs: {\n 'data-density': state.density,\n 'data-radius': state.corners,\n 'data-shadow': state.elevation,\n 'data-borderwidth': state.stroke,\n },\n themeCss: snapshot.themeCss,\n prefsCss: snapshot.prefsCss,\n };\n}\n\nfunction escapeInlineScriptJson(value: unknown): string {\n return JSON.stringify(value)\n .replace(/</g, '\\\\u003C')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nexport function createNxdsAppearanceBootstrapScript(\n options: NxdsAppearanceBootstrapScriptOptions = {}\n): string {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;\n const defaultSnapshot = options.defaultSnapshot\n ? sanitizeNxdsAppearanceSnapshot(options.defaultSnapshot)\n : createDefaultNxdsAppearanceSnapshot();\n\n return `(function(){try{var k=${escapeInlineScriptJson(storageKey)};var f=${escapeInlineScriptJson(defaultSnapshot)};var s=f;try{if(k!==false){var r=window.localStorage&&window.localStorage.getItem(k);if(r){var p=JSON.parse(r);if(p&&p.version===f.version&&p.state&&typeof p.themeCss===\"string\"&&typeof p.prefsCss===\"string\"){s=p;}}}}catch(e){}var st=s.state||f.state;var m=st.mode===\"dark\"||st.mode===\"light\"||st.mode===\"system\"?st.mode:f.state.mode;var sys=false;try{sys=m===\"system\"&&window.matchMedia&&window.matchMedia(\"(prefers-color-scheme: dark)\").matches;}catch(e){}var dark=m===\"dark\"||sys===true;var root=document.documentElement;root.classList.toggle(\"dark\",dark);root.setAttribute(\"data-density\",typeof st.density===\"string\"?st.density:f.state.density);root.setAttribute(\"data-radius\",typeof st.corners===\"string\"?st.corners:f.state.corners);root.setAttribute(\"data-shadow\",typeof st.elevation===\"string\"?st.elevation:f.state.elevation);root.setAttribute(\"data-borderwidth\",typeof st.stroke===\"string\"?st.stroke:f.state.stroke);function upsert(attr,css){var list=document.querySelectorAll(\"style[\"+attr+\"]\");var el=list[0]||document.createElement(\"style\");for(var i=1;i<list.length;i++){list[i].remove();}el.setAttribute(attr,\"\");el.textContent=css||\"\";if(!el.parentNode){document.head.appendChild(el);}}upsert(\"data-nxds-appearance-theme\",s.themeCss);upsert(\"data-nxds-appearance-prefs\",s.prefsCss);}catch(e){}})();`;\n}\n","import type { NxdsAppearanceState } from './appearance-model';\nimport {\n createNxdsAppearanceSnapshotFromState,\n NXDS_APPEARANCE_DATA_ATTRS,\n resolveFirstPaint,\n sanitizeNxdsAppearanceSnapshot,\n serializeNxdsAppearanceStateCookie,\n} from './appearance-snapshot';\n\nexport type NxdsResolvedAppearanceMode = 'light' | 'dark';\nexport type NxdsAppearanceCookieSameSite = 'Lax' | 'Strict' | 'None';\n\nexport interface NxdsAppearanceCookieOptions {\n maxAge?: number;\n path?: string;\n sameSite?: NxdsAppearanceCookieSameSite;\n secure?: boolean | 'auto';\n domain?: string;\n}\n\nexport interface NxdsAppearancePersistOptions {\n /** localStorage key the first-paint script reads. `false` skips it. */\n storageKey: string | false;\n /** Cookie a server reads to render the saved appearance. `false` skips it. */\n cookieWriteKey?: string | false;\n cookieOptions?: NxdsAppearanceCookieOptions;\n}\n\nexport const NXDS_APPEARANCE_COOKIE_MAX_AGE_SECONDS = 60 * 60 * 24 * 365;\n\nconst COLOR_SCHEME_QUERY = '(prefers-color-scheme: dark)';\nconst THEME_STYLE_ATTR = 'data-nxds-appearance-theme';\nconst PREFS_STYLE_ATTR = 'data-nxds-appearance-prefs';\n\nexport function prefersDarkColorScheme(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function')\n return false;\n return window.matchMedia(COLOR_SCHEME_QUERY).matches;\n}\n\n/** Calls `onChange` when the OS colour scheme flips. Returns the unsubscribe. */\nexport function watchColorScheme(onChange: () => void): () => void {\n if (typeof window.matchMedia !== 'function') return () => {};\n\n const query = window.matchMedia(COLOR_SCHEME_QUERY);\n query.addEventListener('change', onChange);\n return () => query.removeEventListener('change', onChange);\n}\n\nexport function resolveNxdsAppearanceMode(\n mode: NxdsAppearanceState['mode'],\n systemPrefersDark: boolean\n): NxdsResolvedAppearanceMode {\n if (mode === 'system') return systemPrefersDark ? 'dark' : 'light';\n return mode;\n}\n\n/** The appearance saved under `storageKey`, or `fallback` when there is none. */\nexport function readStoredNxdsAppearance(\n storageKey: string | false,\n fallback: NxdsAppearanceState\n): NxdsAppearanceState {\n if (storageKey === false || typeof window === 'undefined') return fallback;\n\n try {\n const raw = window.localStorage.getItem(storageKey);\n return raw\n ? sanitizeNxdsAppearanceSnapshot(JSON.parse(raw)).state\n : fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction upsertStyle(attribute: string, css: string): void {\n const styles = Array.from(\n document.querySelectorAll<HTMLStyleElement>(`style[${attribute}]`)\n );\n const style = styles[0] ?? document.createElement('style');\n\n for (const duplicate of styles.slice(1)) duplicate.remove();\n\n style.setAttribute(attribute, '');\n style.textContent = css;\n if (!style.parentNode) document.head.appendChild(style);\n}\n\n/**\n * Writes the theme to the page: the `.dark` class and mode attributes on\n * `<html>`, and the derived theme and preference styles in `<head>`.\n */\nexport function applyNxdsAppearance(\n state: NxdsAppearanceState,\n systemPrefersDark: boolean\n): void {\n const firstPaint = resolveFirstPaint(\n createNxdsAppearanceSnapshotFromState(state),\n systemPrefersDark\n );\n const root = document.documentElement;\n\n root.classList.toggle('dark', firstPaint.className === 'dark');\n for (const attr of NXDS_APPEARANCE_DATA_ATTRS) {\n root.setAttribute(attr, firstPaint.dataAttrs[attr]);\n }\n upsertStyle(THEME_STYLE_ATTR, firstPaint.themeCss);\n upsertStyle(PREFS_STYLE_ATTR, firstPaint.prefsCss);\n}\n\n/** Undoes `applyNxdsAppearance`. */\nexport function removeNxdsAppearance(): void {\n document\n .querySelectorAll(`style[${THEME_STYLE_ATTR}], style[${PREFS_STYLE_ATTR}]`)\n .forEach((style) => style.remove());\n\n const root = document.documentElement;\n root.classList.remove('dark');\n for (const attr of NXDS_APPEARANCE_DATA_ATTRS) root.removeAttribute(attr);\n}\n\nfunction writeStateCookie(\n cookieWriteKey: string,\n state: NxdsAppearanceState,\n options: NxdsAppearanceCookieOptions\n): void {\n const secure =\n options.secure === true ||\n (options.secure !== false && window.location.protocol === 'https:');\n const attrs = [\n `Path=${(options.path ?? '/').replace(/[;\\r\\n]/g, '')}`,\n `SameSite=${options.sameSite ?? 'Lax'}`,\n `Max-Age=${options.maxAge ?? NXDS_APPEARANCE_COOKIE_MAX_AGE_SECONDS}`,\n options.domain ? `Domain=${options.domain.replace(/[;\\r\\n]/g, '')}` : '',\n secure ? 'Secure' : '',\n ].filter(Boolean);\n\n document.cookie = `${cookieWriteKey}=${serializeNxdsAppearanceStateCookie(\n state\n )}; ${attrs.join('; ')}`;\n}\n\n/** Saves the appearance for the first-paint script and, optionally, the server. */\nexport function persistNxdsAppearance(\n state: NxdsAppearanceState,\n {\n storageKey,\n cookieWriteKey = false,\n cookieOptions = {},\n }: NxdsAppearancePersistOptions\n): void {\n if (storageKey !== false) {\n try {\n window.localStorage.setItem(\n storageKey,\n JSON.stringify(createNxdsAppearanceSnapshotFromState(state))\n );\n } catch {\n // Storage can fail in privacy modes or quota-constrained embeds.\n }\n }\n\n if (cookieWriteKey !== false) {\n try {\n writeStateCookie(cookieWriteKey, state, cookieOptions);\n } catch {\n // Cookie writes can fail in locked-down embeds.\n }\n }\n}\n","import { formatHex, parse } from 'culori';\n\nimport primitiveColors from '../../tokens/primitives/color.json';\n\nimport { DEFAULT_BRAND_COLOR } from './appearance-model';\nimport type { PrimitivePaletteName } from './primitive-palette';\n\nconst BRAND_PRESET_FAMILIES = [\n 'indigo',\n 'blue',\n 'violet',\n 'rose',\n 'orange',\n 'amber',\n 'green',\n 'teal',\n] as const satisfies readonly PrimitivePaletteName[];\n\nexport interface BrandColorPreset {\n readonly value: 'default' | (typeof BRAND_PRESET_FAMILIES)[number];\n readonly label: string;\n /** Six-digit lowercase hex seed for `brandColor`. */\n readonly color: string;\n}\n\nexport const BRAND_COLOR_PRESETS: readonly BrandColorPreset[] = [\n { value: 'default', label: 'Default', color: DEFAULT_BRAND_COLOR },\n ...BRAND_PRESET_FAMILIES.map((family) => ({\n value: family,\n label: family.charAt(0).toUpperCase() + family.slice(1),\n color: primitiveColors[family]['600'].$value,\n })),\n];\n\nexport function findBrandColorPreset(\n color: string\n): BrandColorPreset | undefined {\n const parsed = parse(color.trim());\n if (!parsed || (parsed.alpha ?? 1) < 1) return undefined;\n\n const hex = formatHex(parsed);\n return BRAND_COLOR_PRESETS.find((preset) => preset.color === hex);\n}\n","import { APCA_PAIRS } from './apca-pairs';\nimport { contrastForPair } from './contrast';\nimport type { DerivedTheme } from './derive-theme';\nimport { type Mode, type Tier, TIER_THRESHOLDS } from './palette';\n\nconst MODES = ['light', 'dark'] as const satisfies readonly Mode[];\n\nconst cssVar = (name: string) => `--nx-color-${name}`;\n\n/** One registered foreground/background pair, measured in one mode. */\nexport interface ThemeContrastCheck {\n mode: Mode;\n /** Foreground CSS variable, e.g. `--nx-color-foreground`. */\n fg: string;\n /** Background CSS variable, e.g. `--nx-color-background`. */\n bg: string;\n /** CSS variable or hex color underneath a translucent background. */\n backdrop?: string;\n tier: Tier;\n /** Absolute APCA Lc after alpha composition. */\n lc: number;\n /** The tier's minimum Lc. */\n floor: number;\n /** Whether `lc` clears `floor`. */\n pass: boolean;\n}\n\n/** Measure every registered APCA pair of a derived theme in both modes. */\nexport function measureThemeContrast(\n theme: DerivedTheme\n): ThemeContrastCheck[] {\n return MODES.flatMap((mode) =>\n APCA_PAIRS.map((pair) => {\n const lc = contrastForPair(theme[mode], pair);\n const floor = TIER_THRESHOLDS[pair.tier];\n const check: ThemeContrastCheck = {\n mode,\n fg: cssVar(pair.fg),\n bg: cssVar(pair.bg),\n tier: pair.tier,\n lc,\n floor,\n pass: lc >= floor,\n };\n if (pair.backdrop) {\n check.backdrop = pair.backdrop.startsWith('#')\n ? pair.backdrop\n : cssVar(pair.backdrop);\n }\n return check;\n })\n );\n}\n","export type TokenCategory =\n | 'surface'\n | 'text'\n | 'border'\n | 'brand'\n | 'status'\n | 'chart'\n | 'focus'\n | 'alpha';\n\nexport interface SemanticTokenMeta {\n /** Bare token name, without the --nx-color- prefix. */\n name: SemanticColorName;\n category: TokenCategory;\n}\n\nconst SURFACE_TOKEN_NAMES = [\n 'background',\n 'background-hover',\n 'background-active',\n 'muted',\n 'muted-extralight',\n 'container',\n 'container-hover',\n 'container-active',\n 'popover',\n 'popover-hover',\n 'popover-active',\n 'control-background',\n 'control-background-hover',\n 'control-thumb',\n 'nav-background',\n 'nav-item-hover',\n 'nav-item-active',\n 'nav-border',\n 'disabled',\n 'border-focus',\n] as const;\n\nconst TEXT_TOKEN_NAMES = [\n 'foreground',\n 'container-foreground',\n 'popover-foreground',\n 'nav-foreground',\n 'muted-foreground',\n 'nav-muted-foreground',\n 'muted-foreground-subtle',\n 'disabled-foreground',\n] as const;\n\nconst BORDER_TOKEN_NAMES = [\n 'border-default',\n 'border-disabled',\n 'border-hairline',\n] as const;\n\nconst BRAND_TOKEN_NAMES = [\n 'primary-background',\n 'primary-background-hover',\n 'primary-background-active',\n 'primary-foreground',\n 'primary-disabled',\n 'primary-subtle',\n 'primary-subtle-foreground',\n 'primary-subtle-hover',\n 'primary-subtle-active',\n 'primary-border',\n 'primary-border-active',\n 'secondary-background',\n 'secondary-background-hover',\n 'secondary-background-active',\n 'secondary-foreground',\n 'secondary-disabled',\n 'secondary-subtle',\n 'secondary-subtle-foreground',\n 'secondary-subtle-hover',\n 'secondary-subtle-active',\n] as const;\n\nconst STATUS_TOKEN_NAMES = [\n 'success-background',\n 'success-background-hover',\n 'success-background-active',\n 'success-foreground',\n 'success-disabled',\n 'success-subtle',\n 'success-subtle-foreground',\n 'success-subtle-hover',\n 'success-subtle-active',\n 'success-border',\n 'border-success-active',\n 'warning-background',\n 'warning-background-hover',\n 'warning-background-active',\n 'warning-foreground',\n 'warning-disabled',\n 'warning-subtle',\n 'warning-subtle-foreground',\n 'warning-subtle-hover',\n 'warning-subtle-active',\n 'warning-border',\n 'border-warning-active',\n 'error-background',\n 'error-background-hover',\n 'error-background-active',\n 'error-foreground',\n 'error-disabled',\n 'error-subtle',\n 'error-subtle-foreground',\n 'error-subtle-hover',\n 'error-subtle-active',\n 'error-border',\n 'border-error-active',\n 'information-background',\n 'information-background-hover',\n 'information-background-active',\n 'information-foreground',\n 'information-disabled',\n 'information-subtle',\n 'information-subtle-foreground',\n 'information-subtle-hover',\n 'information-subtle-active',\n 'information-border',\n 'border-information-active',\n] as const;\n\nconst CHART_TOKEN_NAMES = [\n 'chart-categorical-1',\n 'chart-categorical-2',\n 'chart-categorical-3',\n 'chart-categorical-4',\n 'chart-categorical-5',\n] as const;\n\nconst FOCUS_TOKEN_NAMES = ['focus-default', 'focus-error'] as const;\n\nconst ALPHA_TOKEN_NAMES = [\n 'background-hover-alpha',\n 'border-default-alpha',\n 'overlay',\n 'popover-alpha',\n 'popover-backdrop',\n] as const;\n\n/** Bare name of every semantic colour token, without the --nx-color- prefix. */\nexport type SemanticColorName =\n | (typeof SURFACE_TOKEN_NAMES)[number]\n | (typeof TEXT_TOKEN_NAMES)[number]\n | (typeof BORDER_TOKEN_NAMES)[number]\n | (typeof BRAND_TOKEN_NAMES)[number]\n | (typeof STATUS_TOKEN_NAMES)[number]\n | (typeof CHART_TOKEN_NAMES)[number]\n | (typeof FOCUS_TOKEN_NAMES)[number]\n | (typeof ALPHA_TOKEN_NAMES)[number];\n\nfunction metas(\n category: TokenCategory,\n names: readonly SemanticColorName[]\n): SemanticTokenMeta[] {\n return names.map((name) => ({ name, category }));\n}\n\nexport const SEMANTIC_TOKEN_REGISTRY: readonly SemanticTokenMeta[] = [\n ...metas('surface', SURFACE_TOKEN_NAMES),\n ...metas('text', TEXT_TOKEN_NAMES),\n ...metas('border', BORDER_TOKEN_NAMES),\n ...metas('brand', BRAND_TOKEN_NAMES),\n ...metas('status', STATUS_TOKEN_NAMES),\n ...metas('chart', CHART_TOKEN_NAMES),\n ...metas('focus', FOCUS_TOKEN_NAMES),\n ...metas('alpha', ALPHA_TOKEN_NAMES),\n] as const;\n"],"mappings":"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","names":["import_culori","round","import_culori","toRgb","parseToOklch","label","channel","import_apca_w3","import_culori","toRgb","import_apca_w3","import_culori","import_culori","EMIT_GAMUT","CUSP_FRACTION","token","import_culori","color_default","color_default","token","token","spacing","ink","isRecord","import_culori","color_default"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/lib/adjust-contrast.ts","../../src/token-source/perceptual-grid.ts","../../src/token-source/perceptual-grid.json","../../src/token-source/perceptual-grid-hue.json","../../src/lib/oklch-format.ts","../../src/lib/palette.ts","../../tokens/primitives/color.json","../../src/lib/apca.ts","../../tokens/primitives/typography/typography-default.json","../../src/lib/contrast.ts","../../src/lib/semantic-palette-references.ts","../../src/lib/apca-pairs.ts","../../src/lib/perceptual-ramp.ts","../../src/lib/runtime-layer.ts","../../src/lib/appearance-model.ts","../../src/lib/derive-theme.ts","../../tokens/primitives/color.json","../../src/lib/token-scales.generated.ts","../../src/lib/primitive-palette.ts","../../src/lib/surface-ladder.ts","../../src/lib/appearance-snapshot.ts","../../src/lib/appearance-dom.ts","../../src/lib/brand-presets.ts","../../src/lib/theme-contrast.ts","../../src/lib/token-registry.ts"],"sourcesContent":["export type {\n AdjustContrastOptions,\n AdjustContrastPalette,\n AdjustContrastTier,\n} from './lib/adjust-contrast';\nexport { adjustContrast } from './lib/adjust-contrast';\nexport { apcaLc } from './lib/apca';\nexport * from './lib/appearance-dom';\nexport * from './lib/appearance-model';\nexport * from './lib/appearance-snapshot';\nexport * from './lib/brand-presets';\nexport type {\n DerivedTheme,\n NxdsThemeContract,\n ThemeDerivationInput,\n ThemeSeeds,\n TokenMap,\n} from './lib/derive-theme';\nexport { deriveTheme, themeToCss } from './lib/derive-theme';\nexport type { Mode, NxdsSurfaceTone, Tier } from './lib/palette';\nexport { PALETTE_KEYS, TIER_THRESHOLDS } from './lib/palette';\nexport { isColor } from './lib/perceptual-ramp';\nexport { RUNTIME_LAYER_ORDER } from './lib/runtime-layer';\nexport type { SurfaceToken } from './lib/surface-ladder';\nexport type { ThemeContrastCheck } from './lib/theme-contrast';\nexport { measureThemeContrast } from './lib/theme-contrast';\nexport {\n SEMANTIC_TOKEN_REGISTRY,\n type SemanticColorName,\n type SemanticTokenMeta,\n type TokenCategory,\n} from './lib/token-registry';\nexport type { SpacingStep } from './lib/token-scales.generated';\n","import { APCAcontrast, sRGBtoY } from 'apca-w3';\nimport { clampChroma, converter, type Oklch, oklch, parse } from 'culori';\n\nimport { PERCEPTUAL_L_GRID } from '../token-source/perceptual-grid';\n\nimport { formatOklch } from './oklch-format';\nimport {\n getPaletteReference,\n type PaletteKey,\n type Shade,\n SHADES,\n type Tier,\n TIER_THRESHOLDS,\n} from './palette';\n\nconst ACHROMATIC_THRESHOLD = 0.01;\nconst toRgb = converter('rgb');\n\nexport type AdjustContrastTier = Tier;\nexport type AdjustContrastPalette = PaletteKey;\n\nexport interface AdjustContrastOptions {\n /**\n * Surface the returned color sits on. Accepts any CSS color string\n * parseable by culori (hex, rgb, oklch, hsl). Alpha is stripped.\n * @default '#ffffff'\n */\n background?: string;\n /**\n * APCA contrast tier the returned color must clear.\n * - `body` (Lc ≥ 75) — fluent reading\n * - `ui` (Lc ≥ 60) — labels, buttons, badges\n * - `incidental` (Lc ≥ 45) — muted, disabled, focus rings\n * @default 'ui'\n */\n tier?: AdjustContrastTier;\n /**\n * Base palette family. Only consulted when `input` is achromatic\n * (chroma < 0.01) — borrows the palette's hue and chroma from its\n * shade 500. For chromatic inputs, this option is a no-op.\n * @default 'slate'\n */\n palette?: AdjustContrastPalette;\n}\n\nfunction stripAlpha(color: Oklch): Oklch {\n if (color.alpha === undefined || color.alpha === 1) return color;\n return { mode: 'oklch', l: color.l, c: color.c, h: color.h };\n}\n\nfunction parseToOklch(input: string, label: string): Oklch {\n const parsed = parse(input);\n if (!parsed) {\n throw new Error(\n `adjustContrast: cannot parse ${label} '${input}' — expected a CSS color string (hex, rgb, oklch, hsl)`\n );\n }\n const converted = oklch(parsed);\n if (!converted) {\n throw new Error(\n `adjustContrast: cannot convert ${label} '${input}' to OKLCH`\n );\n }\n return stripAlpha(converted);\n}\n\nfunction oklchToSrgbInts(color: Oklch): [number, number, number] {\n const clamped = clampChroma(color, 'oklch', 'rgb');\n const rgb = toRgb(clamped);\n const channel = (v: number) =>\n Math.max(0, Math.min(255, Math.round(v * 255)));\n return [channel(rgb.r), channel(rgb.g), channel(rgb.b)];\n}\n\nfunction clampForEmit(color: Oklch): Oklch {\n return clampChroma(color, 'oklch', 'p3');\n}\n\n/**\n * Snap a custom color to the nearest nxds palette shade that passes the\n * requested APCA tier on the target background. Lightness comes from the\n * perceptual grid; hue and chroma come from the input (or, for achromatic\n * inputs, from the chosen palette's shade 500).\n *\n * Walks shades `50 → 950` and returns the **first** that meets the tier.\n * Throws if no shade passes — the diagnostic lists every shade's Lc score.\n *\n * @example\n * // Custom brand hex on a light surface (UI tier by default)\n * adjustContrast('#ff6b6b');\n * // → 'oklch(0.553 0.2 27.5)' (or similar — the first 50→950 shade\n * // that scores Lc ≥ 60 against #ffffff)\n *\n * @example\n * // Achromatic input picks up the palette's tint\n * adjustContrast('#888888', { palette: 'slate', tier: 'body' });\n * // → an OKLCH with slate's hue/chroma at the first shade hitting Lc ≥ 75\n *\n * @throws If `input` cannot be parsed as a CSS color.\n * @throws If no shade in the perceptual grid hits the tier threshold\n * against the resolved background.\n */\nexport function adjustContrast(\n input: string,\n options: AdjustContrastOptions = {}\n): string {\n const { background = '#ffffff', tier = 'ui', palette = 'slate' } = options;\n\n const minLc = TIER_THRESHOLDS[tier];\n const bgOklch = parseToOklch(background, 'background');\n const bgInts = oklchToSrgbInts(bgOklch);\n\n const inputOklch = parseToOklch(input, 'input');\n\n const inputChroma = inputOklch.c ?? 0;\n const isAchromatic = inputChroma < ACHROMATIC_THRESHOLD;\n const reference = getPaletteReference(palette);\n const chroma = isAchromatic ? reference.c : inputChroma;\n const hue = isAchromatic ? reference.h : (inputOklch.h ?? reference.h);\n\n const attempts: { shade: Shade; lc: number }[] = [];\n\n for (const shade of SHADES) {\n const l = PERCEPTUAL_L_GRID[shade];\n const candidate: Oklch = { mode: 'oklch', l, c: chroma, h: hue };\n const fgInts = oklchToSrgbInts(candidate);\n const lc = APCAcontrast(sRGBtoY(fgInts), sRGBtoY(bgInts)) as number;\n attempts.push({ shade, lc });\n if (Math.abs(lc) >= minLc) {\n return formatOklch(clampForEmit(candidate));\n }\n }\n\n const summary = attempts\n .map((a) => `${a.shade}=${a.lc.toFixed(1)}`)\n .join(', ');\n throw new Error(\n `adjustContrast: no shade in palette '${palette}' meets ${tier} tier (|Lc| ≥ ${minLc}) against background '${background}'. Tried: ${summary}`\n );\n}\n","import { clampChroma, converter, type Oklch, oklch, parse } from 'culori';\n\nimport type { Shade } from '../lib/palette.ts';\n\nimport flatGrid from './perceptual-grid.json' with { type: 'json' };\nimport hueGrid from './perceptual-grid-hue.json' with { type: 'json' };\n\n// emit ships P3 chroma; audit scores in sRGB (legacy-display equivalent)\nconst EMIT_GAMUT = 'p3';\nconst AUDIT_GAMUT = 'rgb';\n\nconst toRgb = converter('rgb');\n\nexport const PERCEPTUAL_L_GRID: Readonly<Record<Shade, number>> =\n Object.freeze(flatGrid);\n\nconst PERCEPTUAL_L_GRID_HUE: Readonly<\n Record<string, Readonly<Record<Shade, number>>>\n> = Object.freeze(\n Object.fromEntries(\n Object.entries(hueGrid).map(([name, curve]) => [name, Object.freeze(curve)])\n )\n);\n\nconst CUSP_FRACTION = 0.95; // sit just inside the P3 cusp for render safety\n\nconst SHADE_KEY_RE = /^(50|100|200|300|400|500|600|700|800|900|950)$/;\n\nexport function isPaletteShadeKey(key: unknown): key is Shade {\n return typeof key === 'string' && SHADE_KEY_RE.test(key);\n}\n\nfunction round(value: number, decimals: number) {\n const factor = 10 ** decimals;\n return Math.round(value * factor) / factor;\n}\n\nfunction formatPaletteOklch({ l, c, h, alpha }: Oklch) {\n const finite = (v: number | undefined) =>\n v !== undefined && Number.isFinite(v) ? v : 0;\n const lRounded = round(finite(l), 4);\n const cRounded = round(finite(c), 4);\n // Hue is undefined when chroma is 0 (achromatic). Emit 0 rather than `none`\n // so consuming CSS stays compatible with the project's spot-check format.\n const hRounded = c && h !== undefined ? round(finite(h), 3) : 0;\n const base = `oklch(${lRounded} ${cRounded} ${hRounded}`;\n if (alpha !== undefined && alpha < 1) {\n return `${base} / ${round(alpha, 4)})`;\n }\n return `${base})`;\n}\n\nfunction parseToOklch(hex: string): Oklch {\n const parsed = parse(hex);\n if (!parsed) {\n throw new Error(`palette: cannot parse color \"${hex}\"`);\n }\n return oklch(parsed);\n}\n\nfunction computePinnedOklch(\n hex: string,\n shade: string,\n palette?: string,\n reportGamutClip?: (message: string) => void\n): Oklch {\n const hueCurve = palette ? PERCEPTUAL_L_GRID_HUE[palette] : undefined;\n const pinnedL = isPaletteShadeKey(shade)\n ? (hueCurve ?? PERCEPTUAL_L_GRID)[shade]\n : undefined;\n if (pinnedL === undefined) {\n throw new Error(`palette: unknown shade \"${shade}\" for ${hex}`);\n }\n\n const source = parseToOklch(hex);\n\n // Re-pitched hues take chroma at the P3 cusp for the (hue, pinned-L) pair —\n // pale near white, vivid at the peak — driven by the gamut, not the source\n // hex. Every other palette keeps its source chroma (flat-grid behaviour).\n let chroma = source.c ?? 0;\n if (hueCurve) {\n const cuspC =\n clampChroma(\n { mode: 'oklch', l: pinnedL, c: 0.5, h: source.h },\n 'oklch',\n EMIT_GAMUT\n ).c ?? 0;\n chroma = cuspC * CUSP_FRACTION;\n }\n\n const target: Oklch = {\n mode: 'oklch',\n l: pinnedL,\n c: chroma,\n h: source.h,\n ...(source.alpha !== undefined ? { alpha: source.alpha } : {}),\n };\n\n const clamped = clampChroma(target, 'oklch', EMIT_GAMUT);\n\n if (!hueCurve) {\n const originalC = target.c;\n const clampedC = clamped.c ?? 0;\n if (originalC > 0 && (originalC - clampedC) / originalC > 0.2) {\n reportGamutClip?.(\n `palette: P3 gamut clip on ${hex} at shade ${shade} — C ${originalC.toFixed(4)} → ${clampedC.toFixed(4)}`\n );\n }\n }\n\n return clamped;\n}\n\nexport function hexToOklchPinned(\n hex: string,\n shade: string,\n palette?: string,\n reportGamutClip?: (message: string) => void\n): string {\n return formatPaletteOklch(\n computePinnedOklch(hex, shade, palette, reportGamutClip)\n );\n}\n\nexport function hexToOklchMechanical(hex: string): string {\n return formatPaletteOklch(parseToOklch(hex));\n}\n\nfunction oklchToSrgbInts(oklchColor: Oklch): [number, number, number] {\n const rgb = toRgb(clampChroma(oklchColor, 'oklch', AUDIT_GAMUT));\n if ((rgb.alpha ?? 1) < 1) {\n // apca-w3 `sRGBtoY` reads only [r,g,b]; an alpha-bearing color must be\n // pre-blended against its actual background before contrast computation.\n throw new Error(\n 'palette: oklchToSrgbInts received alpha-bearing color; pre-blend before contrast computation'\n );\n }\n const channel = (v: number) =>\n Math.max(0, Math.min(255, Math.round(v * 255)));\n return [channel(rgb.r), channel(rgb.g), channel(rgb.b)];\n}\n\n// Audit conversion retains the unrounded coordinates; parsing emitted CSS\n// first would change some sRGB integer channels at rounding boundaries.\nexport function hexToSrgbInts(\n hex: string,\n shade?: string,\n palette?: string\n): [number, number, number] {\n if (shade !== undefined) {\n return oklchToSrgbInts(computePinnedOklch(hex, shade, palette));\n }\n return oklchToSrgbInts(parseToOklch(hex));\n}\n","{\n \"50\": 0.985,\n \"100\": 0.945,\n \"200\": 0.87,\n \"300\": 0.765,\n \"400\": 0.66,\n \"500\": 0.553,\n \"600\": 0.46,\n \"700\": 0.385,\n \"800\": 0.297,\n \"900\": 0.207,\n \"950\": 0.118\n}\n","{\n \"rose\": {\n \"50\": 0.971,\n \"100\": 0.936,\n \"200\": 0.885,\n \"300\": 0.81,\n \"400\": 0.71,\n \"500\": 0.64,\n \"600\": 0.58,\n \"700\": 0.51,\n \"800\": 0.42,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"red\": {\n \"50\": 0.971,\n \"100\": 0.936,\n \"200\": 0.885,\n \"300\": 0.808,\n \"400\": 0.704,\n \"500\": 0.637,\n \"600\": 0.577,\n \"700\": 0.505,\n \"800\": 0.42,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"orange\": {\n \"50\": 0.98,\n \"100\": 0.955,\n \"200\": 0.91,\n \"300\": 0.84,\n \"400\": 0.78,\n \"500\": 0.71,\n \"600\": 0.62,\n \"700\": 0.52,\n \"800\": 0.43,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"amber\": {\n \"50\": 0.985,\n \"100\": 0.96,\n \"200\": 0.92,\n \"300\": 0.87,\n \"400\": 0.84,\n \"500\": 0.77,\n \"600\": 0.68,\n \"700\": 0.57,\n \"800\": 0.46,\n \"900\": 0.35,\n \"950\": 0.24\n },\n \"yellow\": {\n \"50\": 0.985,\n \"100\": 0.96,\n \"200\": 0.92,\n \"300\": 0.88,\n \"400\": 0.86,\n \"500\": 0.8,\n \"600\": 0.72,\n \"700\": 0.6,\n \"800\": 0.47,\n \"900\": 0.35,\n \"950\": 0.23\n },\n \"lime\": {\n \"50\": 0.985,\n \"100\": 0.965,\n \"200\": 0.93,\n \"300\": 0.9,\n \"400\": 0.88,\n \"500\": 0.82,\n \"600\": 0.73,\n \"700\": 0.61,\n \"800\": 0.49,\n \"900\": 0.37,\n \"950\": 0.26\n },\n \"green\": {\n \"50\": 0.982,\n \"100\": 0.96,\n \"200\": 0.925,\n \"300\": 0.87,\n \"400\": 0.79,\n \"500\": 0.72,\n \"600\": 0.62,\n \"700\": 0.52,\n \"800\": 0.43,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"emerald\": {\n \"50\": 0.982,\n \"100\": 0.96,\n \"200\": 0.925,\n \"300\": 0.87,\n \"400\": 0.79,\n \"500\": 0.72,\n \"600\": 0.62,\n \"700\": 0.52,\n \"800\": 0.43,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"teal\": {\n \"50\": 0.98,\n \"100\": 0.945,\n \"200\": 0.9,\n \"300\": 0.85,\n \"400\": 0.79,\n \"500\": 0.72,\n \"600\": 0.62,\n \"700\": 0.52,\n \"800\": 0.43,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"cyan\": {\n \"50\": 0.98,\n \"100\": 0.955,\n \"200\": 0.91,\n \"300\": 0.85,\n \"400\": 0.79,\n \"500\": 0.72,\n \"600\": 0.63,\n \"700\": 0.53,\n \"800\": 0.44,\n \"900\": 0.35,\n \"950\": 0.26\n },\n \"sky\": {\n \"50\": 0.975,\n \"100\": 0.945,\n \"200\": 0.895,\n \"300\": 0.82,\n \"400\": 0.74,\n \"500\": 0.67,\n \"600\": 0.58,\n \"700\": 0.5,\n \"800\": 0.42,\n \"900\": 0.34,\n \"950\": 0.25\n },\n \"blue\": {\n \"50\": 0.97,\n \"100\": 0.932,\n \"200\": 0.882,\n \"300\": 0.809,\n \"400\": 0.707,\n \"500\": 0.623,\n \"600\": 0.546,\n \"700\": 0.488,\n \"800\": 0.41,\n \"900\": 0.33,\n \"950\": 0.25\n },\n \"indigo\": {\n \"50\": 0.96,\n \"100\": 0.925,\n \"200\": 0.865,\n \"300\": 0.78,\n \"400\": 0.67,\n \"500\": 0.57,\n \"600\": 0.49,\n \"700\": 0.42,\n \"800\": 0.35,\n \"900\": 0.28,\n \"950\": 0.21\n },\n \"violet\": {\n \"50\": 0.965,\n \"100\": 0.93,\n \"200\": 0.875,\n \"300\": 0.79,\n \"400\": 0.68,\n \"500\": 0.59,\n \"600\": 0.51,\n \"700\": 0.44,\n \"800\": 0.37,\n \"900\": 0.3,\n \"950\": 0.22\n },\n \"purple\": {\n \"50\": 0.967,\n \"100\": 0.935,\n \"200\": 0.88,\n \"300\": 0.8,\n \"400\": 0.7,\n \"500\": 0.61,\n \"600\": 0.53,\n \"700\": 0.46,\n \"800\": 0.39,\n \"900\": 0.32,\n \"950\": 0.24\n },\n \"fuchsia\": {\n \"50\": 0.97,\n \"100\": 0.94,\n \"200\": 0.89,\n \"300\": 0.81,\n \"400\": 0.71,\n \"500\": 0.63,\n \"600\": 0.56,\n \"700\": 0.49,\n \"800\": 0.41,\n \"900\": 0.33,\n \"950\": 0.25\n },\n \"pink\": {\n \"50\": 0.97,\n \"100\": 0.94,\n \"200\": 0.89,\n \"300\": 0.82,\n \"400\": 0.72,\n \"500\": 0.64,\n \"600\": 0.57,\n \"700\": 0.5,\n \"800\": 0.42,\n \"900\": 0.34,\n \"950\": 0.25\n }\n}\n","import type { Oklch } from 'culori';\n\n/** Round to `decimals` places. */\nexport function round(value: number, decimals: number): number {\n const factor = 10 ** decimals;\n return Math.round(value * factor) / factor;\n}\n\n/**\n * Format an OKLCH color to the project's spot-check string form\n * (`oklch(L C H)`, or `oklch(L C H / A)` when translucent), emitting `0` for\n * hue when chroma is 0.\n */\nexport function formatOklch(color: Oklch): string {\n const finite = (v: number | undefined) =>\n typeof v === 'number' && Number.isFinite(v) ? v : 0;\n const l = round(finite(color.l), 4);\n const c = round(finite(color.c), 4);\n const h = c && color.h !== undefined ? round(finite(color.h), 3) : 0;\n const alpha = color.alpha === undefined ? 1 : round(color.alpha, 4);\n return alpha < 1\n ? `oklch(${l} ${c} ${h} / ${alpha})`\n : `oklch(${l} ${c} ${h})`;\n}\n","import { oklch, parse } from 'culori';\n\nimport primitiveColors from '../../tokens/primitives/color.json' with { type: 'json' };\n\nexport const SHADES = [\n '50',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n '950',\n] as const;\n\nexport type Shade = (typeof SHADES)[number];\n\nexport const PALETTE_KEYS = [\n 'slate',\n 'neutral',\n 'gray',\n 'stone',\n 'zinc',\n] as const;\n\nexport type PaletteKey = (typeof PALETTE_KEYS)[number];\n\nexport const TIER_THRESHOLDS = {\n body: 75,\n ui: 60,\n incidental: 45,\n} as const;\n\nexport type Tier = keyof typeof TIER_THRESHOLDS;\n\n/** Light/dark theme axis. */\nexport type Mode = 'light' | 'dark';\n\n/** Surface tone families an nxds theme can be seeded with. */\nexport type NxdsSurfaceTone = 'stone' | 'neutral' | 'zinc' | 'slate' | 'gray';\n\nexport interface PaletteReference {\n c: number;\n h: number;\n}\n\nfunction deriveReference(palette: PaletteKey): PaletteReference {\n const hex = primitiveColors[palette]['500'].$value;\n const parsed = parse(hex);\n if (!parsed) {\n throw new Error(`palette: cannot parse '${palette}.500' hex '${hex}'`);\n }\n const o = oklch(parsed);\n if (!o) {\n throw new Error(`palette: cannot convert '${palette}.500' to OKLCH`);\n }\n return { c: o.c ?? 0, h: o.h ?? 0 };\n}\n\nconst paletteReferenceCache = new Map<PaletteKey, PaletteReference>();\n\nexport function getPaletteReference(palette: PaletteKey): PaletteReference {\n const cached = paletteReferenceCache.get(palette);\n if (cached) return cached;\n const reference = deriveReference(palette);\n paletteReferenceCache.set(palette, reference);\n return reference;\n}\n","{\n \"green\": {\n \"50\": {\n \"$value\": \"#f1f7ef\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e6f3e3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#cce2c7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#a6c99e\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#7fb175\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#569947\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#3f7932\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#306424\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#264d1c\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#1e3b17\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#12250d\",\n \"$type\": \"color\"\n }\n },\n \"emerald\": {\n \"50\": {\n \"$value\": \"#ecfdf5\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#d1fae5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#a7f3d0\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#6ee7b7\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#34d399\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#10b981\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#059669\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#047857\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#065f46\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#064e3b\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#022c22\",\n \"$type\": \"color\"\n }\n },\n \"teal\": {\n \"50\": {\n \"$value\": \"#f0fdfa\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ccfbf1\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#99f6e4\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#5eead4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#2dd4bf\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#14b8a6\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0d9488\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0f766e\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#115e59\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#134e4a\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#042f2e\",\n \"$type\": \"color\"\n }\n },\n \"cyan\": {\n \"50\": {\n \"$value\": \"#ecfeff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#cffafe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#a5f3fc\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#67e8f9\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#22d3ee\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#06b6d4\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0891b2\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0e7490\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#155e75\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#164e63\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#083344\",\n \"$type\": \"color\"\n }\n },\n \"sky\": {\n \"50\": {\n \"$value\": \"#f0f9ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e0f2fe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#bae6fd\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#7dd3fc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#38bdf8\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#0ea5e9\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0284c7\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0369a1\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#075985\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0c4a6e\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#082f49\",\n \"$type\": \"color\"\n }\n },\n \"indigo\": {\n \"50\": {\n \"$value\": \"#eef2ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e0e7ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#c7d2fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#a5b4fc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#818cf8\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#6366f1\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#4f46e5\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#4338ca\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#3730a3\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#312e81\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#1e1b4b\",\n \"$type\": \"color\"\n }\n },\n \"violet\": {\n \"50\": {\n \"$value\": \"#f5f3ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ede9fe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#ddd6fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#c4b5fd\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a78bfa\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#8b5cf6\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#7c3aed\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#6d28d9\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#5b21b6\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#4c1d95\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#2e1065\",\n \"$type\": \"color\"\n }\n },\n \"purple\": {\n \"50\": {\n \"$value\": \"#faf5ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f3e8ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e9d5ff\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d8b4fe\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#c084fc\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#a855f7\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#9333ea\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#7e22ce\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#6b21a8\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#581c87\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#3b0764\",\n \"$type\": \"color\"\n }\n },\n \"fuchsia\": {\n \"50\": {\n \"$value\": \"#fdf4ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fae8ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#f5d0fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f0abfc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#e879f9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#d946ef\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#c026d3\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a21caf\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#86198f\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#701a75\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#4a044e\",\n \"$type\": \"color\"\n }\n },\n \"pink\": {\n \"50\": {\n \"$value\": \"#fdf2f8\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fce7f3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fbcfe8\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f9a8d4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#f472b6\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#ec4899\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#db2777\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#be185d\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9d174d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#831843\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#500724\",\n \"$type\": \"color\"\n }\n },\n \"slate\": {\n \"50\": {\n \"$value\": \"#f8fafc\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f2f6fa\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f1f5f9\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e0e6ee\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e2e8f0\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#cbd5e1\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#90a1b9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#62748e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#45556c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#314158\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#1d293d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0f172a\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#020617\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0206170a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#02061710\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#02061718\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#02061730\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#02061750\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#02061780\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#020617a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#020617c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#020617d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#020617e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#020617f4\",\n \"$type\": \"color\"\n }\n },\n \"rose\": {\n \"50\": {\n \"$value\": \"#fff1f2\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ffe4e6\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fecdd3\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fda4af\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#fb7185\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#f43f5e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#e11d48\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#be123c\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9f1239\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#881337\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#4c0519\",\n \"$type\": \"color\"\n }\n },\n \"lime\": {\n \"50\": {\n \"$value\": \"#f7fee7\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ecfccb\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#d9f99d\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#bef264\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a3e635\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#84cc16\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#65a30d\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#4d7c0f\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#3f6212\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#365314\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#1a2e05\",\n \"$type\": \"color\"\n }\n },\n \"yellow\": {\n \"50\": {\n \"$value\": \"#fefce8\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fef9c3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fef08a\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fde047\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#facc15\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#eab308\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#ca8a04\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a16207\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#854d0e\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#713f12\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#422006\",\n \"$type\": \"color\"\n }\n },\n \"blue\": {\n \"50\": {\n \"$value\": \"#f1f6fc\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e6effc\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#c4daf5\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#9dc1ee\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#71a1df\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#3d7bc8\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#2863ab\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#184f90\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#113d70\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0d2e55\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#051a36\",\n \"$type\": \"color\"\n }\n },\n \"gray\": {\n \"50\": {\n \"$value\": \"#f9fafb\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f4f5f7\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f3f4f6\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e3e5e9\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e5e7eb\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d1d5db\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#99a1af\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#6a7282\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#4a5565\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#364153\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#1e2939\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#111827\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#030712\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0307120a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#03071210\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#03071218\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#03071230\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#03071250\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#03071280\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#030712a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#030712c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#030712d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#030712e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#030712f4\",\n \"$type\": \"color\"\n }\n },\n \"zinc\": {\n \"50\": {\n \"$value\": \"#fafafa\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f5f5f6\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f4f4f5\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e4e6e8\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e3e5e7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d2d5d8\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#9f9fa9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#71717b\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#52525c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#3f3f46\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#26272a\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#17181b\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#08090b\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#08090b0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#08090b10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#08090b18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#08090b30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#08090b50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#08090b80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#08090ba0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#08090bc0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#08090bd8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#08090be8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#08090bf4\",\n \"$type\": \"color\"\n }\n },\n \"neutral\": {\n \"50\": {\n \"$value\": \"#fafafa\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f5f5f5\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f5f5f5\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e5e5e5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e5e5e5\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d4d4d4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a1a1a1\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#737373\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#525252\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#404040\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#262626\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#171717\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#0a0a0a\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0a0a0a0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0a0a0a10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0a0a0a18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0a0a0a30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0a0a0a50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0a0a0a80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0a0a0aa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0a0a0ac0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0a0a0ad8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0a0a0ae8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0a0a0af4\",\n \"$type\": \"color\"\n }\n },\n \"stone\": {\n \"50\": {\n \"$value\": \"#fbfaf8\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f6f5f2\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#eeedeb\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e7e5e2\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#d6d4d1\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#b6b2ad\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#95928c\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#75726d\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#595854\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#444441\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#2d2d2d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#181818\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#050505\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0b09040a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0b090410\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0b090418\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0b090430\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0b090450\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0b090480\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0b0904a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0b0904c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0b0904d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0b0904e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0b0904f4\",\n \"$type\": \"color\"\n }\n },\n \"red\": {\n \"50\": {\n \"$value\": \"#fef2f0\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fee9e6\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#facfc9\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f0a99f\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#e58175\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#d95c50\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#c13d34\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a32d26\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#7f211b\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#5f1a15\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#3d110d\",\n \"$type\": \"color\"\n }\n },\n \"orange\": {\n \"50\": {\n \"$value\": \"#fff7ed\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ffedd5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fed7aa\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fdba74\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#fb923c\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#f97316\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#ea580c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#c2410c\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9a3412\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#7c2d12\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#431407\",\n \"$type\": \"color\"\n }\n },\n \"amber\": {\n \"50\": {\n \"$value\": \"#faf4ec\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f9eddd\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#efd7b7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#e5bd86\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#d8a354\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#c88a1e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#b37903\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#946406\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#764f05\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#5a3b03\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#392402\",\n \"$type\": \"color\"\n }\n },\n \"white\": {\n \"base\": {\n \"$value\": \"#ffffff\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#ffffff0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#ffffff10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#ffffff18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#ffffff30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#ffffff50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#ffffff80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#ffffffa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#ffffffc0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#ffffffd8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#ffffffe8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#fffffff4\",\n \"$type\": \"color\"\n }\n },\n \"black\": {\n \"base\": {\n \"$value\": \"#0a0a0a\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0a0a0a0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0a0a0a10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0a0a0a18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0a0a0a30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0a0a0a50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0a0a0a80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0a0a0aa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0a0a0ac0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0a0a0ad8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0a0a0ae8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0a0a0af4\",\n \"$type\": \"color\"\n }\n }\n}\n","import { APCAcontrast, sRGBtoY } from 'apca-w3';\nimport { clampChroma, converter, oklch, parse } from 'culori';\n\nconst toRgb = converter('rgb');\n\nexport type SrgbInts = [number, number, number];\n\nfunction channel(value: number): number {\n return Math.max(0, Math.min(255, Math.round(value * 255)));\n}\n\nfunction toSrgbInts(input: string): SrgbInts {\n const parsed = parse(input);\n if (!parsed) throw new Error(`apca: cannot parse color '${input}'`);\n const converted = oklch(parsed);\n if (!converted) throw new Error(`apca: cannot convert '${input}' to OKLCH`);\n const rgb = toRgb(clampChroma(converted, 'oklch', 'rgb'));\n return [channel(rgb.r), channel(rgb.g), channel(rgb.b)];\n}\n\n// Composite an 8-digit alpha hex over an opaque backdrop to rendered sRGB ints.\nexport function blendAlphaOver(hex8: string, bgInts: SrgbInts): SrgbInts {\n const h = hex8.slice(1);\n const a = parseInt(h.slice(6, 8), 16) / 255;\n const [bgR, bgG, bgB] = bgInts;\n const mix = (fg: number, bg: number) => Math.round(fg * a + bg * (1 - a));\n return [\n mix(parseInt(h.slice(0, 2), 16), bgR),\n mix(parseInt(h.slice(2, 4), 16), bgG),\n mix(parseInt(h.slice(4, 6), 16), bgB),\n ];\n}\n\nexport function resolveToSrgbInts(value: string, bgInts?: SrgbInts): SrgbInts {\n if (typeof value !== 'string') {\n throw new Error(`apca: expected string color value, got ${typeof value}`);\n }\n\n if (/^#[0-9a-fA-F]{8}$/.test(value)) {\n if (!bgInts) {\n throw new Error(\n `apca: alpha color \"${value}\" needs a backdrop to composite against`\n );\n }\n return blendAlphaOver(value, bgInts);\n }\n\n const parsed = parse(value);\n if (!parsed) throw new Error(`apca: cannot parse color '${value}'`);\n const converted = oklch(parsed);\n if (!converted) throw new Error(`apca: cannot convert '${value}'`);\n const rgb = toRgb(clampChroma(converted, 'oklch', 'rgb'));\n const alpha = rgb.alpha ?? 1;\n const ints: SrgbInts = [channel(rgb.r), channel(rgb.g), channel(rgb.b)];\n\n if (alpha < 1) {\n if (!bgInts) {\n throw new Error(\n `apca: alpha color \"${value}\" needs a backdrop to composite against`\n );\n }\n return [\n Math.round(ints[0] * alpha + bgInts[0] * (1 - alpha)),\n Math.round(ints[1] * alpha + bgInts[1] * (1 - alpha)),\n Math.round(ints[2] * alpha + bgInts[2] * (1 - alpha)),\n ];\n }\n\n return ints;\n}\n\n/**\n * Absolute APCA Lc of `foreground` on `background`. Both accept any CSS color\n * string culori can parse (hex, rgb, oklch). Inputs must be opaque — alpha is\n * dropped, not pre-blended, so a translucent ink (e.g. the text-tier alpha\n * inks) must be composited over its surface by the caller before scoring.\n */\nexport function apcaLc(foreground: string, background: string): number {\n return Math.abs(\n APCAcontrast(\n sRGBtoY(toSrgbInts(foreground)),\n sRGBtoY(toSrgbInts(background))\n ) as number\n );\n}\n","{\n \"family\": {\n \"font-sans\": {\n \"$value\": \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n \"$type\": \"fontFamily\",\n \"$extensions\": {\n \"nx-font-source\": {\n \"type\": \"system\"\n }\n }\n },\n \"font-heading\": {\n \"$value\": \"ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n \"$type\": \"fontFamily\",\n \"$extensions\": {\n \"nx-font-source\": {\n \"type\": \"system\"\n }\n }\n },\n \"font-serif\": {\n \"$value\": \"Georgia\",\n \"$type\": \"fontFamily\",\n \"$extensions\": {\n \"nx-font-source\": {\n \"type\": \"system\"\n }\n }\n },\n \"font-mono\": {\n \"$value\": \"ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace\",\n \"$type\": \"fontFamily\",\n \"$extensions\": {\n \"nx-font-source\": {\n \"type\": \"system\"\n }\n }\n }\n },\n \"size\": {\n \"xxs\": {\n \"$value\": {\n \"value\": 11,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"xs\": {\n \"$value\": {\n \"value\": 12,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"sm\": {\n \"$value\": {\n \"value\": 14,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"base\": {\n \"$value\": {\n \"value\": 16,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"lg\": {\n \"$value\": {\n \"value\": 18,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"xl\": {\n \"$value\": {\n \"value\": 20,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"2xl\": {\n \"$value\": {\n \"value\": 24,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"3xl\": {\n \"$value\": {\n \"value\": 30,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"4xl\": {\n \"$value\": {\n \"value\": 36,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"5xl\": {\n \"$value\": {\n \"value\": 48,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"6xl\": {\n \"$value\": {\n \"value\": 60,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"7xl\": {\n \"$value\": {\n \"value\": 72,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"8xl\": {\n \"$value\": {\n \"value\": 96,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"9xl\": {\n \"$value\": {\n \"value\": 128,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n }\n },\n \"weight\": {\n \"thin\": {\n \"$value\": 100,\n \"$type\": \"fontWeight\"\n },\n \"extralight\": {\n \"$value\": 200,\n \"$type\": \"fontWeight\"\n },\n \"light\": {\n \"$value\": 300,\n \"$type\": \"fontWeight\"\n },\n \"normal\": {\n \"$value\": 400,\n \"$type\": \"fontWeight\"\n },\n \"medium\": {\n \"$value\": 500,\n \"$type\": \"fontWeight\"\n },\n \"semibold\": {\n \"$value\": 600,\n \"$type\": \"fontWeight\"\n },\n \"bold\": {\n \"$value\": 700,\n \"$type\": \"fontWeight\"\n },\n \"extrabold\": {\n \"$value\": 800,\n \"$type\": \"fontWeight\"\n },\n \"black\": {\n \"$value\": 900,\n \"$type\": \"fontWeight\"\n }\n },\n \"line-height\": {\n \"xxs\": {\n \"$value\": {\n \"value\": 12,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"xs\": {\n \"$value\": {\n \"value\": 16,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"sm\": {\n \"$value\": {\n \"value\": 20,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"base\": {\n \"$value\": {\n \"value\": 24,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"lg\": {\n \"$value\": {\n \"value\": 28,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"xl\": {\n \"$value\": {\n \"value\": 28,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"2xl\": {\n \"$value\": {\n \"value\": 32,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"3xl\": {\n \"$value\": {\n \"value\": 36,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"4xl\": {\n \"$value\": {\n \"value\": 48,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"5xl\": {\n \"$value\": {\n \"value\": 48,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"6xl\": {\n \"$value\": {\n \"value\": 60,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"7xl\": {\n \"$value\": {\n \"value\": 72,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"8xl\": {\n \"$value\": {\n \"value\": 96,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"9xl\": {\n \"$value\": {\n \"value\": 128,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n }\n },\n \"letterspacing\": {\n \"tighter\": {\n \"$value\": {\n \"value\": -0.800000011920929,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"tight\": {\n \"$value\": {\n \"value\": -0.4000000059604645,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"normal\": {\n \"$value\": {\n \"value\": 0,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"wide\": {\n \"$value\": {\n \"value\": 0.4000000059604645,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"wider\": {\n \"$value\": {\n \"value\": 0.800000011920929,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n },\n \"widest\": {\n \"$value\": {\n \"value\": 1.600000023841858,\n \"unit\": \"px\"\n },\n \"$type\": \"dimension\"\n }\n }\n}\n","import { APCAcontrast, sRGBtoY } from 'apca-w3';\nimport { clampChroma } from 'culori';\n\nimport { resolveToSrgbInts } from './apca';\nimport { APCA_PAIRS, type ApcaPair, type ApcaSolveKind } from './apca-pairs';\nimport type { TokenMap } from './derive-theme';\nimport { formatOklch } from './oklch-format';\nimport { type Mode, type Tier, TIER_THRESHOLDS } from './palette';\nimport { seedOklch } from './perceptual-ramp';\n\n/** Clamp to an integer 0–100; anything non-finite falls back. */\nexport function normalizeContrast(value: unknown, fallback = 50): number {\n return typeof value === 'number' && Number.isFinite(value)\n ? Math.round(Math.max(0, Math.min(100, value)))\n : fallback;\n}\n\n/** The Lc a pair aims for: its tier floor plus up to 15 more as contrast rises. */\nexport function contrastTarget(tier: Tier, contrast: number): number {\n return TIER_THRESHOLDS[tier] + (15 * contrast) / 100;\n}\n\nconst BISECT_STEPS = 12;\n\n/** Narrow a failing and a passing bound; returns the passing value closest to `fail`. */\nexport function bisect(\n fail: number,\n pass: number,\n passes: (value: number) => boolean\n): number {\n for (let i = 0; i < BISECT_STEPS; i++) {\n const middle = (fail + pass) / 2;\n if (passes(middle)) pass = middle;\n else fail = middle;\n }\n return pass;\n}\n\nconst token = (map: TokenMap, name: string): string => {\n const value = map[`--nx-color-${name}`];\n if (value === undefined) throw new Error(`contrast: missing ${name}`);\n return value;\n};\n\nexport function pairBackground(\n map: TokenMap,\n pair: ApcaPair\n): [number, number, number] {\n const backdrop = pair.backdrop\n ? resolveToSrgbInts(\n pair.backdrop.startsWith('#')\n ? pair.backdrop\n : token(map, pair.backdrop)\n )\n : undefined;\n return resolveToSrgbInts(token(map, pair.bg), backdrop);\n}\n\nexport function contrastForPair(map: TokenMap, pair: ApcaPair): number {\n const background = pairBackground(map, pair);\n return Math.abs(\n APCAcontrast(\n sRGBtoY(resolveToSrgbInts(token(map, pair.fg), background)),\n sRGBtoY(background)\n ) as number\n );\n}\n\nconst luminance = (color: string) => sRGBtoY(resolveToSrgbInts(color));\nconst score = (foregroundY: number, backgroundY: number) =>\n Math.abs(APCAcontrast(foregroundY, backgroundY) as number);\n\ninterface Constraint {\n backgroundY: number;\n /** Requested Lc, capped at what the black/white endpoint can reach. */\n target: number;\n}\n\n/** Constraints for one foreground, or undefined when even the endpoint misses a floor. */\nfunction constraintsFor(\n map: TokenMap,\n pairs: readonly ApcaPair[],\n contrast: number,\n endpointY: number\n): Constraint[] | undefined {\n const constraints: Constraint[] = [];\n for (const pair of pairs) {\n const backgroundY = sRGBtoY(pairBackground(map, pair));\n const reachable = score(endpointY, backgroundY);\n if (reachable < TIER_THRESHOLDS[pair.tier]) return undefined;\n const target = contrastTarget(pair.tier, contrast) + (pair.offset ?? 0);\n constraints.push({ backgroundY, target: Math.min(target, reachable) });\n }\n return constraints;\n}\n\n/** Light text keeps its designed quiet seed when that already passes; dark text is always re-solved. */\nconst keepsTextSeed = (mode: Mode, kind: ApcaSolveKind) =>\n mode === 'light' && kind === 'text';\n\nfunction solveForeground(\n seed: string,\n constraints: readonly Constraint[],\n endpoint: 0 | 1,\n keepSeed: boolean\n): string {\n const passes = (color: string) => {\n const y = luminance(color);\n return constraints.every((c) => score(y, c.backgroundY) >= c.target);\n };\n if (keepSeed && passes(seed)) return seed;\n const parsed = seedOklch(seed);\n const at = (l: number) =>\n formatOklch(clampChroma({ ...parsed, l, alpha: 1 }, 'oklch', 'p3'));\n return at(\n bisect(keepSeed ? parsed.l : 1 - endpoint, endpoint, (l) => passes(at(l)))\n );\n}\n\ninterface SolveGroup {\n kind: ApcaSolveKind;\n pairs: ApcaPair[];\n}\n\n/** Pairs grouped by the color they resolve to (`solveAs`, else their own foreground). */\nconst SOLVE_GROUPS = new Map<string, SolveGroup>();\nfor (const pair of APCA_PAIRS) {\n const key = pair.solveAs ?? pair.fg;\n const group = SOLVE_GROUPS.get(key);\n if (!group) {\n SOLVE_GROUPS.set(key, { kind: pair.kind, pairs: [pair] });\n continue;\n }\n if (group.kind !== pair.kind)\n throw new Error(\n `contrast: ${pair.fg} is '${pair.kind}' but joins '${group.kind}' group ${key}`\n );\n group.pairs.push(pair);\n}\n\n/** Pick the black/white label for a family and move any fill it can't read on to the tier floor. */\nfunction constrainFamilyFills(\n map: TokenMap,\n name: string,\n pairs: readonly ApcaPair[]\n) {\n const basePair = pairs[0];\n if (!basePair) throw new Error(`contrast: missing pairs for ${name}`);\n const baseY = luminance(token(map, basePair.bg));\n const endpoint: 0 | 1 = score(1, baseY) >= score(0, baseY) ? 1 : 0;\n map[`--nx-color-${name}`] = `oklch(${endpoint} 0 0)`;\n for (const pair of pairs) {\n const floor = TIER_THRESHOLDS[pair.tier];\n const value = token(map, pair.bg);\n if (score(endpoint, luminance(value)) >= floor) continue;\n const fill = seedOklch(value);\n const at = (l: number) =>\n formatOklch(clampChroma({ ...fill, l }, 'oklch', 'p3'));\n const readable = (l: number) => score(endpoint, luminance(at(l))) >= floor;\n map[`--nx-color-${pair.bg}`] = at(bisect(fill.l, 1 - endpoint, readable));\n }\n}\n\n/** Resolve every foreground against all its registered backgrounds, after fills and alpha composition. */\nexport function constrainColors(\n map: TokenMap,\n mode: Mode,\n contrast: number\n): TokenMap {\n for (const [name, { kind, pairs }] of SOLVE_GROUPS)\n if (kind === 'label') constrainFamilyFills(map, name, pairs);\n\n const endpoint: 0 | 1 = mode === 'dark' ? 1 : 0;\n const endpointY = luminance(`oklch(${endpoint} 0 0)`);\n for (const [name, { kind, pairs }] of SOLVE_GROUPS) {\n if (kind === 'label') continue;\n const constraints = constraintsFor(map, pairs, contrast, endpointY);\n if (constraints === undefined)\n throw new Error(`contrast: no readable ${name} in ${mode}`);\n const solved = solveForeground(\n token(map, name),\n constraints,\n endpoint,\n keepsTextSeed(mode, kind)\n );\n for (const fg of new Set(pairs.map((pair) => pair.fg).concat(name)))\n map[`--nx-color-${fg}`] = solved;\n }\n return map;\n}\n","import type { Shade } from './palette';\nimport type { PrimitivePaletteName } from './token-scales.generated';\n\nexport const STATUS_PALETTE_FAMILIES = {\n success: 'green',\n warning: 'orange',\n error: 'red',\n information: 'blue',\n} as const satisfies Record<string, PrimitivePaletteName>;\n\nexport const CHART_PALETTE_REFERENCES = [\n { palette: 'teal', light: '700', dark: '200' },\n { palette: 'lime', light: '700', dark: '200' },\n { palette: 'orange', light: '600', dark: '200' },\n { palette: 'rose', light: '600', dark: '200' },\n { palette: 'indigo', light: '600', dark: '200' },\n] as const satisfies readonly {\n palette: PrimitivePaletteName;\n light: Shade;\n dark: Shade;\n}[];\n\n/** CodeBlock syntax colours by token role. Each takes a chart series' hue. */\nexport const SYNTAX_PALETTE_REFERENCES = {\n keyword: CHART_PALETTE_REFERENCES[3],\n string: CHART_PALETTE_REFERENCES[1],\n function: CHART_PALETTE_REFERENCES[4],\n type: CHART_PALETTE_REFERENCES[0],\n constant: CHART_PALETTE_REFERENCES[2],\n} as const;\n","import {\n CHART_PALETTE_REFERENCES,\n SYNTAX_PALETTE_REFERENCES,\n} from './semantic-palette-references';\n\nexport type ApcaTier = 'body' | 'ui' | 'incidental';\n\n/**\n * How the contrast solver resolves a pair's foreground.\n * - `text`: reading text; light mode keeps a seed that already passes.\n * - `label`: black/white label on a family fill; the solver moves the fill.\n * - `ink`: any other mark; the solver re-solves its lightness, keeping hue.\n */\nexport type ApcaSolveKind = 'text' | 'label' | 'ink';\n\nexport interface ApcaPair {\n /** Bare semantic token name, without the --nx-color- prefix. */\n fg: string;\n /** Bare semantic token name, without the --nx-color- prefix. */\n bg: string;\n tier: ApcaTier;\n kind: ApcaSolveKind;\n /** Opaque token or hex color underneath a translucent background. */\n backdrop?: string;\n /** Extra Lc on top of the tier target, e.g. to stagger chart series. */\n offset?: number;\n /** Solve jointly with another foreground and emit one shared color. */\n solveAs?: string;\n}\n\nexport const COLOR_FAMILIES = [\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'error',\n 'information',\n] as const;\n\nconst CATEGORICAL_INDICES = CHART_PALETTE_REFERENCES.map(\n (_, index) => index + 1\n);\n// Each chart series asks for this much more Lc than the previous one, so\n// categories differ in lightness as well as hue.\nconst CHART_STAGGER_LC = 4.5;\n\nconst DIFF_SURFACES = ['success-subtle', 'error-subtle'] as const;\n\n// CodeBlock draws code on its own surface, on a highlighted line and on the\n// diff tints.\nconst CODE_SURFACES = ['container', 'container-hover', ...DIFF_SURFACES];\n\nconst FOCUS_SURFACES = [\n 'background',\n 'container',\n 'popover',\n 'nav-background',\n 'nav-item-hover',\n 'nav-item-active',\n 'nav-border',\n] as const;\n\nconst text = (fg: string, bg: string, tier: ApcaTier): ApcaPair => ({\n fg,\n bg,\n tier,\n kind: 'text',\n});\nconst label = (fg: string, bg: string, tier: ApcaTier): ApcaPair => ({\n fg,\n bg,\n tier,\n kind: 'label',\n});\nconst ink = (fg: string, bg: string, tier: ApcaTier): ApcaPair => ({\n fg,\n bg,\n tier,\n kind: 'ink',\n});\n\nexport const APCA_PAIRS = [\n text('foreground', 'background', 'body'),\n text('foreground', 'background-hover', 'ui'),\n text('foreground', 'muted', 'ui'),\n text('muted-foreground', 'muted', 'ui'),\n text('muted-foreground-subtle', 'muted', 'incidental'),\n text('muted-foreground', 'container', 'ui'),\n text('muted-foreground-subtle', 'container', 'incidental'),\n text('foreground', 'muted-extralight', 'ui'),\n text('muted-foreground', 'muted-extralight', 'ui'),\n text('disabled-foreground', 'disabled', 'incidental'),\n text('container-foreground', 'container', 'body'),\n text('foreground', 'container', 'body'),\n text('popover-foreground', 'popover', 'body'),\n text('popover-foreground', 'popover-hover', 'ui'),\n text('foreground', 'control-background', 'ui'),\n text('foreground', 'control-background-hover', 'ui'),\n text('nav-foreground', 'nav-background', 'ui'),\n text('nav-muted-foreground', 'nav-background', 'incidental'),\n text('nav-foreground', 'nav-item-hover', 'ui'),\n text('nav-foreground', 'nav-item-active', 'ui'),\n ink('error-subtle-foreground', 'background', 'ui'),\n ink('error-subtle-foreground', 'container', 'ui'),\n ...COLOR_FAMILIES.flatMap((family) => [\n label(`${family}-foreground`, `${family}-background`, 'ui'),\n label(`${family}-foreground`, `${family}-background-hover`, 'ui'),\n label(`${family}-foreground`, `${family}-background-active`, 'ui'),\n ink(`${family}-subtle-foreground`, `${family}-subtle`, 'ui'),\n ink(`${family}-subtle-foreground`, `${family}-subtle-hover`, 'ui'),\n ink(`${family}-subtle-foreground`, `${family}-subtle-active`, 'ui'),\n ]),\n ...CATEGORICAL_INDICES.flatMap((index) =>\n ['container', 'container-hover', 'background'].map((bg) => ({\n ...ink(`chart-categorical-${index}`, bg, 'ui'),\n offset: (index - 1) * CHART_STAGGER_LC,\n }))\n ),\n ...CODE_SURFACES.flatMap((bg) =>\n Object.keys(SYNTAX_PALETTE_REFERENCES).map((role) =>\n ink(`syntax-${role}`, bg, 'ui')\n )\n ),\n // codeBlockTheme also colours code with the text tokens, which already read\n // on container and container-hover.\n ...DIFF_SURFACES.flatMap((bg) => [\n text('foreground', bg, 'ui'),\n text('muted-foreground', bg, 'ui'),\n text('muted-foreground-subtle', bg, 'incidental'),\n ]),\n // Focus is the primary accent (components.md § Focus States), so it shares\n // one solved color with primary-subtle-foreground.\n ...FOCUS_SURFACES.flatMap((surface) => [\n {\n ...ink('focus-default', surface, 'incidental'),\n solveAs: 'primary-subtle-foreground',\n },\n ink('focus-error', surface, 'incidental'),\n ]),\n ...[\n 'background-active',\n 'container-hover',\n 'container-active',\n 'popover',\n 'popover-hover',\n 'popover-active',\n 'nav-background',\n ].flatMap((surface) => [\n text('foreground', surface, 'ui'),\n text('muted-foreground', surface, 'ui'),\n text('muted-foreground-subtle', surface, 'incidental'),\n ]),\n text('muted-foreground', 'background', 'ui'),\n text('muted-foreground-subtle', 'background', 'incidental'),\n text('container-foreground', 'container-hover', 'ui'),\n text('container-foreground', 'container-active', 'ui'),\n text('popover-foreground', 'popover-active', 'ui'),\n ...['background', 'container', 'popover'].flatMap((backdrop) => [\n { ...text('popover-foreground', 'popover-alpha', 'body'), backdrop },\n { ...text('foreground', 'background-hover-alpha', 'ui'), backdrop },\n ]),\n ...['#000000', '#ffffff'].map((backdrop) => ({\n ...text('popover-foreground', 'popover-alpha', 'body'),\n backdrop,\n })),\n] as const satisfies readonly ApcaPair[];\n","import { clampChroma, type Oklch, oklch, parse } from 'culori';\n\nimport { PERCEPTUAL_L_GRID } from '../token-source/perceptual-grid';\n\nimport { formatOklch } from './oklch-format';\nimport { type Shade, SHADES } from './palette';\n\n// emit ships P3 chroma (browsers gamut-map at render); sit just inside the cusp.\nconst EMIT_GAMUT = 'p3';\nconst CUSP_FRACTION = 0.95;\n\n/** Whether a string is a CSS color culori (and thus the engine) can parse. */\nexport function isColor(value: string): boolean {\n return parse(value) !== undefined;\n}\n\n/** Parse any CSS color string to OKLCH. Throws on unparseable input. */\nexport function seedOklch(input: string): Oklch {\n const parsed = parse(input);\n if (!parsed)\n throw new Error(`perceptual-ramp: cannot parse color '${input}'`);\n const converted = oklch(parsed);\n if (!converted)\n throw new Error(`perceptual-ramp: cannot convert '${input}' to OKLCH`);\n return converted;\n}\n\nexport interface RampOptions {\n /** Cap cusp chroma at the seed's own chroma so a muted accent stays muted. @default true */\n capAtSeedChroma?: boolean;\n}\n\n/** One shade: pinned L at the seed's hue, chroma at the P3 cusp (optionally capped at the seed). */\nexport function pinnedOklch(\n seedHex: string,\n shade: Shade,\n options: RampOptions = {}\n): string {\n const { capAtSeedChroma = true } = options;\n const seed = seedOklch(seedHex);\n const l = PERCEPTUAL_L_GRID[shade];\n const hue = seed.h ?? 0;\n const seedC = seed.c ?? 0;\n\n // Max chroma in P3 at this (L, hue): start past the gamut and clamp inward.\n const cuspC =\n clampChroma({ mode: 'oklch', l, c: 0.5, h: hue }, 'oklch', EMIT_GAMUT).c ??\n 0;\n let chroma = cuspC * CUSP_FRACTION;\n // Cap at the seed's own chroma so a muted accent stays muted — and an\n // achromatic seed (seedC === 0) stays fully neutral instead of picking up the\n // fallback hue at full cusp chroma.\n if (capAtSeedChroma) chroma = Math.min(chroma, seedC);\n\n const target: Oklch = { mode: 'oklch', l, c: chroma, h: hue };\n return formatOklch(clampChroma(target, 'oklch', EMIT_GAMUT));\n}\n\nexport type Ramp = Record<Shade, string>;\n\n/** Full 50→950 ramp from one seed color. */\nexport function rampFromSeed(seedHex: string, options: RampOptions = {}): Ramp {\n const ramp: Partial<Ramp> = {};\n for (const shade of SHADES)\n ramp[shade] = pinnedOklch(seedHex, shade, options);\n return ramp as Ramp;\n}\n","/**\n * The layer order nxds declares in every stylesheet that layers its CSS. It\n * ranks `nx-runtime` after Tailwind's layers whichever stylesheet loads first.\n */\nexport const RUNTIME_LAYER_ORDER =\n '@layer properties, theme, base, components, utilities, nx-runtime;';\n\n/**\n * Wrap the provider's runtime CSS in the `nx-runtime` layer, so it overrides\n * the generated `@layer theme` defaults and unlayered CSS overrides it.\n */\nexport function inRuntimeLayer(css: string): string {\n return `${RUNTIME_LAYER_ORDER}\\n@layer nx-runtime {\\n${css}\\n}\\n`;\n}\n","import typographyTokens from '../../tokens/primitives/typography/typography-default.json';\n\nimport { normalizeContrast } from './contrast';\nimport type { ThemeDerivationInput, ThemeSeeds } from './derive-theme';\nimport type { NxdsSurfaceTone } from './palette';\nimport { isColor } from './perceptual-ramp';\nimport { inRuntimeLayer } from './runtime-layer';\n\ntype ModeSeeds = Pick<ThemeSeeds, 'background' | 'foreground'>;\n\nexport type NxdsAppearanceMode = 'light' | 'dark' | 'system';\nexport type NxdsDensity =\n | 'tight'\n | 'compact'\n | 'default'\n | 'comfortable'\n | 'relaxed'\n | 'spacious';\nexport type NxdsCorners =\n | 'square'\n | 'subtle'\n | 'smooth'\n | 'round'\n | 'extra-round';\nexport type NxdsElevation = 'flat' | 'quiet' | 'soft' | 'standard' | 'strong';\nexport type NxdsStroke = 'fine' | 'normal' | 'strong';\n\nexport interface NxdsAppearancePrefs {\n uiFont: string;\n codeFont: string;\n uiFontSize: number;\n codeFontSize: number;\n reduceMotion: boolean;\n pointerCursors: boolean;\n fontSmoothing: boolean;\n}\n\nexport interface NxdsAppearanceState {\n mode: NxdsAppearanceMode;\n brandColor: string;\n surfaceTone: NxdsSurfaceTone;\n lightContrast: number;\n darkContrast: number;\n density: NxdsDensity;\n corners: NxdsCorners;\n elevation: NxdsElevation;\n stroke: NxdsStroke;\n prefs: NxdsAppearancePrefs;\n}\n\n/** An appearance field that picks one of a token family's preset modes. */\nexport type NxdsPresetField = 'density' | 'corners' | 'elevation' | 'stroke';\n\nexport const DEFAULT_BRAND_COLOR = '#0a0a0a';\n\nexport const BASE_TONE_OPTIONS = [\n { value: 'stone', label: 'Stone', color: '#747271' },\n { value: 'neutral', label: 'Neutral', color: '#737373' },\n { value: 'zinc', label: 'Zinc', color: '#717175' },\n { value: 'slate', label: 'Slate', color: '#717376' },\n { value: 'gray', label: 'Gray', color: '#707274' },\n] as const satisfies readonly {\n value: NxdsSurfaceTone;\n label: string;\n color: string;\n}[];\n\nexport const BASE_TONE_SEEDS: Record<\n NxdsSurfaceTone,\n { light: ModeSeeds; dark: ModeSeeds }\n> = {\n stone: {\n light: { background: '#fafaf9', foreground: '#1c1917' },\n dark: { background: '#1c1917', foreground: '#fafaf9' },\n },\n neutral: {\n light: { background: '#fafafa', foreground: '#171717' },\n dark: { background: '#171717', foreground: '#fafafa' },\n },\n zinc: {\n light: { background: '#fafafa', foreground: '#09090b' },\n dark: { background: '#09090b', foreground: '#fafafa' },\n },\n slate: {\n light: { background: '#f8fafc', foreground: '#0f172a' },\n dark: { background: '#0f172a', foreground: '#f8fafc' },\n },\n gray: {\n light: { background: '#f9fafb', foreground: '#111827' },\n dark: { background: '#111827', foreground: '#f9fafb' },\n },\n};\n\nexport const DENSITY_OPTIONS = [\n { value: 'tight', label: 'Tight' },\n { value: 'compact', label: 'Compact' },\n { value: 'default', label: 'Default' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'relaxed', label: 'Relaxed' },\n { value: 'spacious', label: 'Spacious' },\n] as const satisfies readonly { value: NxdsDensity; label: string }[];\n\nexport const CORNER_OPTIONS = [\n { value: 'square', label: 'Square' },\n { value: 'subtle', label: 'Subtle' },\n { value: 'smooth', label: 'Smooth' },\n { value: 'round', label: 'Round' },\n { value: 'extra-round', label: 'Extra Round' },\n] as const satisfies readonly { value: NxdsCorners; label: string }[];\n\nexport const ELEVATION_OPTIONS = [\n { value: 'flat', label: 'Flat' },\n { value: 'quiet', label: 'Quiet' },\n { value: 'soft', label: 'Soft' },\n { value: 'standard', label: 'Standard' },\n { value: 'strong', label: 'Strong' },\n] as const satisfies readonly { value: NxdsElevation; label: string }[];\n\nexport const STROKE_OPTIONS = [\n { value: 'fine', label: 'Fine' },\n { value: 'normal', label: 'Normal' },\n { value: 'strong', label: 'Strong' },\n] as const satisfies readonly { value: NxdsStroke; label: string }[];\n\nexport const DEFAULT_NXDS_APPEARANCE: NxdsAppearanceState = {\n mode: 'light',\n brandColor: DEFAULT_BRAND_COLOR,\n surfaceTone: 'zinc',\n lightContrast: 50,\n darkContrast: 50,\n density: 'default',\n corners: 'subtle',\n elevation: 'quiet',\n stroke: 'normal',\n prefs: {\n uiFont: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n codeFont: 'ui-monospace, \"SF Mono\", Menlo, monospace',\n uiFontSize: 14,\n codeFontSize: 12,\n reduceMotion: false,\n pointerCursors: false,\n fontSmoothing: false,\n },\n};\n\nconst FONT_PX_MIN = 8;\nconst FONT_PX_MAX = 32;\n\nconst APPEARANCE_MODES = new Set<NxdsAppearanceMode>([\n 'light',\n 'dark',\n 'system',\n]);\nconst SURFACE_TONES = new Set<NxdsSurfaceTone>(\n BASE_TONE_OPTIONS.map((option) => option.value)\n);\nconst DENSITIES = new Set<NxdsDensity>(\n DENSITY_OPTIONS.map((option) => option.value)\n);\nconst CORNERS = new Set<NxdsCorners>(\n CORNER_OPTIONS.map((option) => option.value)\n);\nconst ELEVATIONS = new Set<NxdsElevation>(\n ELEVATION_OPTIONS.map((option) => option.value)\n);\nconst STROKES = new Set<NxdsStroke>(\n STROKE_OPTIONS.map((option) => option.value)\n);\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\n// Font families are interpolated into a `<style>` rule, so reject characters that\n// could break out of the declaration (`;` `{` `}`) or open a tag (`<`).\nconst FONT_FAMILY_UNSAFE = /[;{}<]/;\nconst fontFamilyOr = (value: unknown, fallback: string): string =>\n typeof value === 'string' &&\n value.length > 0 &&\n !FONT_FAMILY_UNSAFE.test(value)\n ? value\n : fallback;\n\nconst boolOr = (value: unknown, fallback: boolean): boolean =>\n typeof value === 'boolean' ? value : fallback;\n\nconst enumOr = <T extends string>(\n value: unknown,\n values: ReadonlySet<T>,\n fallback: T\n): T =>\n typeof value === 'string' && values.has(value as T) ? (value as T) : fallback;\n\nconst clampFontSize = (value: unknown, fallback: number): number =>\n typeof value === 'number' && Number.isFinite(value) && value > 0\n ? Math.min(FONT_PX_MAX, Math.max(FONT_PX_MIN, value))\n : fallback;\n\nfunction formatPx(value: number): string {\n return `${Number(value.toFixed(4))}px`;\n}\n\nfunction typographyScaleVariables(uiPx: number): string {\n const scale = uiPx / DEFAULT_NXDS_APPEARANCE.prefs.uiFontSize;\n const sizeVars = Object.entries(typographyTokens.size).map(\n ([name, token]) =>\n ` --nx-typography-size-${name}: ${formatPx(token.$value.value * scale)};`\n );\n const lineHeightVars = Object.entries(typographyTokens['line-height']).map(\n ([name, token]) =>\n ` --nx-typography-line-height-${name}: ${formatPx(token.$value.value * scale)};`\n );\n\n return [...sizeVars, ...lineHeightVars].join('\\n');\n}\n\n// Retired public-mode codename -> friendly, applied to persisted state on read\n// (see normalizeAppearanceModeIds). Internal; correctness is covered behaviorally\n// by the sanitize codename->friendly tests, so it is not part of the public API.\nconst PUBLIC_MODE_RENAME: Record<NxdsPresetField, Record<string, string>> = {\n density: {\n nova: 'compact',\n mira: 'default',\n luma: 'comfortable',\n sera: 'spacious',\n },\n corners: {\n sharp: 'square',\n mellow: 'round',\n },\n elevation: {\n maia: 'quiet',\n mira: 'standard',\n nova: 'strong',\n },\n stroke: {\n maia: 'fine',\n vega: 'normal',\n nova: 'strong',\n },\n};\n\nexport function normalizeAppearanceModeIds(raw: unknown): unknown {\n if (!isRecord(raw)) return raw;\n const out: Record<string, unknown> = { ...raw };\n for (const [field, map] of Object.entries(PUBLIC_MODE_RENAME)) {\n const value = out[field];\n if (\n typeof value === 'string' &&\n Object.prototype.hasOwnProperty.call(map, value)\n )\n out[field] = map[value];\n }\n return out;\n}\n\nexport function sanitizeNxdsAppearancePrefs(raw: unknown): NxdsAppearancePrefs {\n const o = isRecord(raw) ? raw : {};\n const d = DEFAULT_NXDS_APPEARANCE.prefs;\n return {\n uiFont: fontFamilyOr(o.uiFont, d.uiFont),\n codeFont: fontFamilyOr(o.codeFont, d.codeFont),\n uiFontSize: clampFontSize(o.uiFontSize, d.uiFontSize),\n codeFontSize: clampFontSize(o.codeFontSize, d.codeFontSize),\n reduceMotion: boolOr(o.reduceMotion, d.reduceMotion),\n pointerCursors: boolOr(o.pointerCursors, d.pointerCursors),\n fontSmoothing: boolOr(o.fontSmoothing, d.fontSmoothing),\n };\n}\n\nexport function sanitizeNxdsAppearance(rawInput: unknown): NxdsAppearanceState {\n if (!isRecord(rawInput)) return DEFAULT_NXDS_APPEARANCE;\n const raw = normalizeAppearanceModeIds(rawInput) as Record<string, unknown>;\n const d = DEFAULT_NXDS_APPEARANCE;\n return {\n mode: enumOr(raw.mode, APPEARANCE_MODES, d.mode),\n brandColor:\n typeof raw.brandColor === 'string' && isColor(raw.brandColor)\n ? raw.brandColor\n : d.brandColor,\n surfaceTone: enumOr(raw.surfaceTone, SURFACE_TONES, d.surfaceTone),\n lightContrast: normalizeContrast(raw.lightContrast, d.lightContrast),\n darkContrast: normalizeContrast(raw.darkContrast, d.darkContrast),\n density: enumOr(raw.density, DENSITIES, d.density),\n corners: enumOr(raw.corners, CORNERS, d.corners),\n elevation: enumOr(raw.elevation, ELEVATIONS, d.elevation),\n stroke: enumOr(raw.stroke, STROKES, d.stroke),\n prefs: sanitizeNxdsAppearancePrefs(raw.prefs),\n };\n}\n\nexport function createNxdsThemeContract(\n state: NxdsAppearanceState\n): ThemeDerivationInput {\n const tone = BASE_TONE_SEEDS[state.surfaceTone];\n return {\n surfaceTone: state.surfaceTone,\n contrast: { light: state.lightContrast, dark: state.darkContrast },\n light: { accent: state.brandColor, ...tone.light },\n dark: { accent: state.brandColor, ...tone.dark },\n };\n}\n\nexport function appearancePrefsToCss(prefs: NxdsAppearancePrefs): string {\n const uiPx = clampFontSize(\n prefs.uiFontSize,\n DEFAULT_NXDS_APPEARANCE.prefs.uiFontSize\n );\n const codePx = clampFontSize(\n prefs.codeFontSize,\n DEFAULT_NXDS_APPEARANCE.prefs.codeFontSize\n );\n // Font and type size reach only nxds. The toggles below apply to the whole\n // page, host included, when the user turns them on.\n const blocks: string[] = [\n inRuntimeLayer(`:root {\n --nx-typography-family-font-sans: ${prefs.uiFont};\n --nx-typography-family-font-mono: ${prefs.codeFont};\n${typographyScaleVariables(uiPx)}\n}`),\n `.nx\\\\:font-mono, .nx\\\\:typography-code-block, .nx\\\\:typography-code-inline { font-size: ${codePx}px; }`,\n ];\n if (prefs.fontSmoothing) {\n blocks.push(\n `html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }`\n );\n }\n if (prefs.pointerCursors) {\n blocks.push(\n `button:not(:disabled), [role=\"button\"], [role=\"tab\"], [role=\"radio\"], a[href], summary { cursor: pointer; }`\n );\n }\n if (prefs.reduceMotion) {\n blocks.push(\n `*, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; }`\n );\n }\n return blocks.join('\\n');\n}\n","import { clampChroma, type Oklch } from 'culori';\n\nimport { apcaLc } from './apca';\nimport { APCA_PAIRS } from './apca-pairs';\nimport {\n bisect,\n constrainColors,\n contrastTarget,\n normalizeContrast,\n} from './contrast';\nimport { formatOklch } from './oklch-format';\nimport {\n type Mode,\n type NxdsSurfaceTone,\n type Shade,\n TIER_THRESHOLDS,\n} from './palette';\nimport { rampFromSeed, seedOklch } from './perceptual-ramp';\nimport { getPaletteRamp, getPaletteShade } from './primitive-palette';\nimport { inRuntimeLayer } from './runtime-layer';\nimport {\n CHART_PALETTE_REFERENCES,\n STATUS_PALETTE_FAMILIES,\n SYNTAX_PALETTE_REFERENCES,\n} from './semantic-palette-references';\nimport {\n anchorToStep,\n DARK_SURFACE_LADDER,\n LIGHT_SURFACE_LADDER,\n SURFACE_TOKENS,\n SURFACE_TONE,\n type SurfaceToken,\n} from './surface-ladder';\n\nexport interface ThemeSeeds {\n /** Drives the primary family ramp. */\n accent: string;\n /** Drives surface lightness. Hue/chroma come from `surfaceTone`. */\n background: string;\n /** Drives text hue/lightness; tinted surface tones cap text chroma. */\n foreground: string;\n}\n\n/** The derivation seeds `deriveTheme` consumes — no display preference. */\nexport interface ThemeDerivationInput {\n surfaceTone?: NxdsSurfaceTone;\n light: ThemeSeeds;\n dark: ThemeSeeds;\n /** 0–100 per mode. Higher values strengthen surface and content contrast. */\n contrast: {\n light: number;\n dark: number;\n };\n}\n\nexport interface NxdsThemeContract extends ThemeDerivationInput {\n /** Consumer display preference; not read by `deriveTheme`. */\n appearance: 'light' | 'dark' | 'system';\n}\n\nexport type TokenMap = Record<string, string>;\nexport interface DerivedTheme {\n light: TokenMap;\n dark: TokenMap;\n}\n\nconst clamp01 = (l: number) => Math.max(0.03, Math.min(1, l));\n\ninterface ContrastProfile {\n surfaceDelta: number;\n borderAlpha: number;\n hoverAlpha: number;\n}\n\n// Border and hover opacities hit their `anchor` value at this contrast and\n// interpolate linearly on either side of it.\nconst CONTRAST_ANCHOR = 60;\n\nfunction anchoredContrast(\n contrast: number,\n min: number,\n anchor: number,\n max: number\n): number {\n const value =\n contrast <= CONTRAST_ANCHOR\n ? min + ((anchor - min) * contrast) / CONTRAST_ANCHOR\n : anchor +\n ((max - anchor) * (contrast - CONTRAST_ANCHOR)) /\n (100 - CONTRAST_ANCHOR);\n return Number(value.toFixed(4));\n}\n\nfunction contrastProfile(mode: Mode, contrast: number): ContrastProfile {\n const dark = mode === 'dark';\n return {\n surfaceDelta: 0.02 + (((dark ? 0.03 : 0.05) - 0.02) * contrast) / 100,\n borderAlpha: anchoredContrast(\n contrast,\n dark ? 0.12 : 0.06,\n dark ? 0.1882 : 0.0941,\n dark ? 0.2337 : 0.1168\n ),\n hoverAlpha: anchoredContrast(\n contrast,\n dark ? 0.04 : 0.035,\n 0.0627,\n dark ? 0.09 : 0.085\n ),\n };\n}\n\nconst WHITE_BASE = 'oklch(1 0 0)';\n\nconst isSurfaceToken = (name: string): name is SurfaceToken =>\n (SURFACE_TOKENS as readonly string[]).includes(name);\n\n/** Opaque surface tiers derived from the background seed + contrast Δ. */\nexport function deriveSurfaces(\n backgroundHex: string,\n surfaceTone: NxdsSurfaceTone,\n mode: Mode,\n delta: number,\n contrast = 50\n): TokenMap {\n const tone = SURFACE_TONE[surfaceTone];\n const dark = mode === 'dark';\n const anchorL = dark\n ? Math.max(0.08, Math.min(0.32, seedOklch(backgroundHex).l))\n : 1;\n const baseC = dark ? tone.darkC : tone.lightC;\n const out: TokenMap = {};\n const ladder = dark ? DARK_SURFACE_LADDER : LIGHT_SURFACE_LADDER;\n const surfaceAt = (token: SurfaceToken, spacing: number) => {\n const step = anchorToStep(ladder[token]);\n const l = clamp01(anchorL + step * spacing);\n const c = !dark && l >= 1 ? 0 : baseC;\n return formatOklch(\n clampChroma({ mode: 'oklch', l, c, h: tone.h }, 'oklch', 'p3')\n );\n };\n const endpoint = dark ? 'oklch(1 0 0)' : 'oklch(0 0 0)';\n const page = surfaceAt('background', 0);\n const pageMaximum = apcaLc(endpoint, page);\n const surfacePairs = APCA_PAIRS.flatMap(({ bg, tier, backdrop }) =>\n !backdrop && isSurfaceToken(bg) ? [{ bg, tier }] : []\n );\n const fits = (spacing: number) =>\n surfacePairs.every(\n ({ bg, tier }) =>\n apcaLc(endpoint, surfaceAt(bg, spacing)) >=\n (dark\n ? Math.min(contrastTarget(tier, contrast), pageMaximum)\n : TIER_THRESHOLDS[tier])\n );\n const spacing = fits(delta) ? delta : bisect(delta, 0, fits);\n for (const token of SURFACE_TOKENS)\n out[`--nx-color-${token}`] = surfaceAt(token, spacing);\n out['--nx-color-control-thumb'] = 'oklch(1 0 0)';\n return out;\n}\n\n/**\n * Text seed `quiet` of the way from the foreground toward its surface (softer =\n * lower contrast); `quiet = 0` is the foreground itself. The contrast solver\n * moves it back toward the foreground only as far as legibility requires.\n */\nfunction quietText(fg: Oklch, surfaceColor: string, quiet: number): string {\n const surfL = seedOklch(surfaceColor).l ?? 0;\n const fgL = fg.l ?? 0;\n return formatOklch({\n mode: 'oklch',\n l: clamp01(fgL + (surfL - fgL) * quiet),\n c: fg.c ?? 0,\n h: fg.h ?? 0,\n });\n}\n\n/** Each text token: the surface it sits on and how quiet to aim. */\nconst TEXT_ON: Record<string, { surface: string; quiet: number }> = {\n 'container-foreground': { surface: '--nx-color-container', quiet: 0 },\n 'popover-foreground': { surface: '--nx-color-popover', quiet: 0 },\n 'nav-foreground': { surface: '--nx-color-nav-background', quiet: 0 },\n 'nav-muted-foreground': { surface: '--nx-color-nav-background', quiet: 0.4 },\n 'disabled-foreground': { surface: '--nx-color-disabled', quiet: 0.5 },\n 'muted-foreground': { surface: '--nx-color-background', quiet: 0.5 },\n 'muted-foreground-subtle': { surface: '--nx-color-background', quiet: 0.6 },\n};\n\n/** Text seeds; the contrast solver makes them legible on every registered background. */\nexport function deriveText(\n foregroundHex: string,\n surfaces: TokenMap,\n mode: Mode\n): TokenMap {\n const fg = seedOklch(foregroundHex);\n // A fixed light reference keeps text strength independent of moving surfaces.\n const textSurface = (name: string) =>\n mode === 'light' ? WHITE_BASE : (surfaces[name] ?? foregroundHex);\n const out: TokenMap = { '--nx-color-foreground': formatOklch(fg) };\n for (const [token, { surface, quiet }] of Object.entries(TEXT_ON))\n out[`--nx-color-${token}`] = quietText(fg, textSurface(surface), quiet);\n return out;\n}\n\n/**\n * Fill, subtle, and border seeds for a named color family. The contrast solver\n * adds the black/white `-foreground` label and resolves `-subtle-foreground`.\n */\nexport function deriveFamily(\n name: string,\n ramp: Readonly<Record<Shade, string>>,\n mode: Mode\n): TokenMap {\n const dark = mode === 'dark';\n const p = `--nx-color-${name}`;\n const activeBorderToken =\n name in STATUS_PALETTE_FAMILIES\n ? `--nx-color-border-${name}-active`\n : `${p}-border-active`;\n return {\n [`${p}-background`]: ramp['600'],\n [`${p}-background-hover`]: ramp['700'],\n [`${p}-background-active`]: ramp['800'],\n [`${p}-disabled`]: dark ? ramp['950'] : ramp['300'],\n [`${p}-subtle`]: dark ? ramp['950'] : ramp['50'],\n [`${p}-subtle-foreground`]: dark ? ramp['300'] : ramp['600'],\n [`${p}-subtle-hover`]: dark ? ramp['900'] : ramp['100'],\n [`${p}-subtle-active`]: dark ? ramp['800'] : ramp['200'],\n [`${p}-border`]: dark ? ramp['700'] : ramp['200'],\n [activeBorderToken]: dark ? ramp['500'] : ramp['400'],\n };\n}\n\nfunction deriveStatus(mode: Mode): TokenMap {\n return Object.assign(\n {},\n ...Object.entries(STATUS_PALETTE_FAMILIES).map(([family, palette]) =>\n deriveFamily(family, getPaletteRamp(palette), mode)\n )\n );\n}\n\nfunction deriveChart(mode: Mode): TokenMap {\n return Object.fromEntries(\n CHART_PALETTE_REFERENCES.map((reference, index) => [\n `--nx-color-chart-categorical-${index + 1}`,\n getPaletteShade(reference.palette, reference[mode]),\n ])\n );\n}\n\nfunction deriveSyntax(mode: Mode): TokenMap {\n return Object.fromEntries(\n Object.entries(SYNTAX_PALETTE_REFERENCES).map(([role, reference]) => [\n `--nx-color-syntax-${role}`,\n getPaletteShade(reference.palette, reference[mode]),\n ])\n );\n}\n\nfunction deriveAlpha(\n surfaceTone: NxdsSurfaceTone,\n mode: Mode,\n profile: ContrastProfile\n): TokenMap {\n const tone = SURFACE_TONE[surfaceTone];\n const dark = mode === 'dark';\n const toneInk = (alpha: number) =>\n formatOklch({ mode: 'oklch', l: 0.13, c: tone.darkC, h: tone.h, alpha });\n const contrastInk = (alpha: number) =>\n formatOklch({ mode: 'oklch', l: dark ? 1 : 0.1448, c: 0, h: 0, alpha });\n\n return {\n '--nx-color-overlay': toneInk(dark ? 0.8471 : 0.7529),\n '--nx-color-popover-backdrop': toneInk(0.9098),\n '--nx-color-border-default-alpha': toneInk(profile.borderAlpha),\n '--nx-color-background-hover-alpha': toneInk(profile.hoverAlpha),\n '--nx-color-border-hairline': contrastInk(0.0941),\n '--nx-color-border-default': contrastInk(profile.borderAlpha),\n '--nx-color-border-disabled': contrastInk(profile.borderAlpha),\n };\n}\n\n// P3 cusp gamut for the solid fill, matching the perceptual ramp's emit target.\nconst FILL_GAMUT = 'p3';\n// The primary fill follows the brand seed's own lightness rather than a fixed\n// mid-tone shade, so the button *is* the chosen color: a deep navy stays deep\n// navy, and #000 stays black. Light mode honors the seed directly, capped so a\n// near-white brand still reads as a filled button. Dark mode honors light/mid\n// seeds but lifts dark ones toward light — so a black brand becomes a white\n// button that stays legible on a dark surface.\nconst PRIMARY_FILL_LIGHT_CAP = 0.85;\nconst PRIMARY_DARK_ENDPOINT_LIFT_FLOOR = 0.16;\nconst PRIMARY_LIGHT_ENDPOINT_CEIL = 0.99;\nconst PRIMARY_DARK_HONOR_FLOOR = 0.45;\nconst PRIMARY_DARK_LIFT_EXPONENT = 1.6;\nconst PRIMARY_HOVER_STEP = 0.05;\nconst PRIMARY_ACTIVE_STEP = 0.1;\nconst PRIMARY_ACTIVE_DARK_FILL_STEP = 0.03;\n// Endpoint brand interactions follow the same authored Neutral palette as secondary fills.\nconst endpointL = (shade: Shade): number =>\n seedOklch(getPaletteShade('neutral', shade)).l ?? 0;\n\nfunction primaryFillLightness(seedL: number, mode: Mode): number {\n if (mode === 'light') return clamp01(Math.min(seedL, PRIMARY_FILL_LIGHT_CAP));\n if (seedL <= PRIMARY_DARK_ENDPOINT_LIFT_FLOOR) return 1;\n if (seedL >= PRIMARY_DARK_HONOR_FLOOR) return clamp01(seedL);\n // Below the floor, lift toward white so a dark seed stays legible on a dark\n // surface. The coefficient is `1 - floor` so the curve meets the honor branch\n // exactly at the floor (continuous, no jump); the exponent shapes how hard\n // near-black seeds push toward white.\n const t = seedL / PRIMARY_DARK_HONOR_FLOOR;\n return clamp01(\n 1 - (1 - PRIMARY_DARK_HONOR_FLOOR) * Math.pow(t, PRIMARY_DARK_LIFT_EXPONENT)\n );\n}\n\n// Hover/active nudge the fill toward mid-grey so the state change reads at any\n// fill lightness: dark fills lighten, light fills darken.\nconst towardMid = (l: number, step: number): number =>\n clamp01(l < 0.5 ? l + step : l - step);\n\nconst seedFill = (l: number, c: number, h: number): string =>\n formatOklch(clampChroma({ mode: 'oklch', l, c, h }, 'oklch', FILL_GAMUT));\n\nfunction hoverFillTarget(baseL: number): number {\n if (baseL <= PRIMARY_DARK_ENDPOINT_LIFT_FLOOR) {\n return endpointL('900');\n }\n if (baseL >= PRIMARY_LIGHT_ENDPOINT_CEIL) return endpointL('100');\n return towardMid(baseL, PRIMARY_HOVER_STEP);\n}\n\nfunction activeFillTarget(baseL: number): number {\n if (baseL <= PRIMARY_DARK_ENDPOINT_LIFT_FLOOR) {\n return endpointL('950');\n }\n if (baseL >= PRIMARY_LIGHT_ENDPOINT_CEIL) return endpointL('200');\n return clamp01(\n baseL < 0.5\n ? baseL - PRIMARY_ACTIVE_DARK_FILL_STEP\n : baseL - PRIMARY_ACTIVE_STEP\n );\n}\n\n/**\n * Primary family seeds from one accent. Supporting shades (subtle, borders,\n * disabled) come from the seed ramp via {@link deriveFamily}; the solid fills\n * follow the seed's own lightness, and the contrast solver moves any fill its\n * label can't read on.\n */\nexport function derivePrimary(accentHex: string, mode: Mode): TokenMap {\n const seed = seedOklch(accentHex);\n const h = seed.h ?? 0;\n const c = seed.c ?? 0;\n const fillL = primaryFillLightness(seed.l ?? 0, mode);\n return {\n ...deriveFamily('primary', rampFromSeed(accentHex), mode),\n '--nx-color-primary-background': seedFill(fillL, c, h),\n '--nx-color-primary-background-hover': seedFill(\n hoverFillTarget(fillL),\n c,\n h\n ),\n '--nx-color-primary-background-active': seedFill(\n activeFillTarget(fillL),\n c,\n h\n ),\n };\n}\n\nexport function deriveSecondary(mode: Mode): TokenMap {\n const d = mode === 'dark';\n const n = getPaletteRamp('neutral');\n return {\n '--nx-color-secondary-background': d ? n['900'] : n['100'],\n '--nx-color-secondary-background-hover': d ? n['700'] : n['200'],\n '--nx-color-secondary-background-active': d ? n['600'] : n['300'],\n '--nx-color-secondary-foreground': d ? n['100'] : n['900'],\n '--nx-color-secondary-disabled': d ? n['950'] : n['50'],\n '--nx-color-secondary-subtle': d ? n['800'] : n['100'],\n '--nx-color-secondary-subtle-foreground': d ? n['200'] : n['600'],\n '--nx-color-secondary-subtle-hover': d ? n['700'] : n['200'],\n '--nx-color-secondary-subtle-active': d ? n['600'] : n['300'],\n };\n}\n\nconst gamutColor = (value: string): string =>\n formatOklch(clampChroma(seedOklch(value), 'oklch', 'p3'));\n\n// Text in each mode is capped at the opposite mode's surface chroma: light ink\n// in dark mode sits closest to the light surfaces' tint, and vice versa.\nconst textChromaCap = (surfaceTone: NxdsSurfaceTone, mode: Mode): number =>\n mode === 'dark'\n ? SURFACE_TONE[surfaceTone].lightC\n : SURFACE_TONE[surfaceTone].darkC;\n\n/** Derive one mode's `--nx-color-*` map, so callers can cache each mode independently. */\nexport function deriveThemeMode(\n input: ThemeDerivationInput,\n mode: Mode\n): TokenMap {\n const surfaceTone = input.surfaceTone ?? 'neutral';\n const seeds = input[mode];\n const contrast = normalizeContrast(input.contrast[mode]);\n const profile = contrastProfile(mode, contrast);\n const surfaces = deriveSurfaces(\n seeds.background,\n surfaceTone,\n mode,\n profile.surfaceDelta,\n contrast\n );\n let foreground = seeds.foreground;\n if (surfaceTone !== 'neutral') {\n const ink = seedOklch(foreground);\n foreground = formatOklch({\n ...ink,\n c: Math.min(ink.c, textChromaCap(surfaceTone, mode)),\n });\n }\n const candidates = {\n ...deriveText(foreground, surfaces, mode),\n ...derivePrimary(seeds.accent, mode),\n ...deriveSecondary(mode),\n ...deriveStatus(mode),\n ...deriveChart(mode),\n ...deriveSyntax(mode),\n ...deriveAlpha(surfaceTone, mode, profile),\n '--nx-color-focus-error': getPaletteShade(\n STATUS_PALETTE_FAMILIES.error,\n mode === 'dark' ? '300' : '600'\n ),\n };\n const map = { ...surfaces };\n for (const [name, value] of Object.entries(candidates))\n map[name] = gamutColor(value);\n const popover = surfaces['--nx-color-popover'];\n if (!popover) throw new Error('deriveThemeMode: missing popover surface');\n map['--nx-color-popover-alpha'] = formatOklch({\n ...seedOklch(popover),\n alpha: 0.94 + (0.06 * contrast) / 100,\n });\n return constrainColors(map, mode, contrast);\n}\n\n/**\n * Expand derivation seeds into light + dark `--nx-color-*` maps. Both modes are\n * always derived; the consumer's `appearance` choice selects one at runtime.\n * Only tokens the engine computes are emitted (surfaces, text, borders, primary,\n * secondary, status, chart, alpha/translucent, focus).\n */\nexport function deriveTheme(input: ThemeDerivationInput): DerivedTheme {\n return {\n light: deriveThemeMode(input, 'light'),\n dark: deriveThemeMode(input, 'dark'),\n };\n}\n\nfunction block(selector: string, map: TokenMap): string {\n const body = Object.entries(map)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n');\n return `${selector} {\\n${body}\\n}`;\n}\n\n/**\n * Serialize a derived theme to CSS text in the runtime layer — light on\n * `:root`, dark on `:root.dark`.\n */\nexport function themeToCss(derived: DerivedTheme): string {\n return inRuntimeLayer(\n `${block(':root', derived.light)}\\n${block(':root.dark', derived.dark)}`\n );\n}\n","{\n \"green\": {\n \"50\": {\n \"$value\": \"#f1f7ef\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e6f3e3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#cce2c7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#a6c99e\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#7fb175\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#569947\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#3f7932\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#306424\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#264d1c\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#1e3b17\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#12250d\",\n \"$type\": \"color\"\n }\n },\n \"emerald\": {\n \"50\": {\n \"$value\": \"#ecfdf5\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#d1fae5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#a7f3d0\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#6ee7b7\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#34d399\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#10b981\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#059669\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#047857\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#065f46\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#064e3b\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#022c22\",\n \"$type\": \"color\"\n }\n },\n \"teal\": {\n \"50\": {\n \"$value\": \"#f0fdfa\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ccfbf1\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#99f6e4\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#5eead4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#2dd4bf\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#14b8a6\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0d9488\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0f766e\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#115e59\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#134e4a\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#042f2e\",\n \"$type\": \"color\"\n }\n },\n \"cyan\": {\n \"50\": {\n \"$value\": \"#ecfeff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#cffafe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#a5f3fc\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#67e8f9\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#22d3ee\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#06b6d4\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0891b2\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0e7490\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#155e75\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#164e63\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#083344\",\n \"$type\": \"color\"\n }\n },\n \"sky\": {\n \"50\": {\n \"$value\": \"#f0f9ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e0f2fe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#bae6fd\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#7dd3fc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#38bdf8\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#0ea5e9\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#0284c7\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#0369a1\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#075985\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0c4a6e\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#082f49\",\n \"$type\": \"color\"\n }\n },\n \"indigo\": {\n \"50\": {\n \"$value\": \"#eef2ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e0e7ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#c7d2fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#a5b4fc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#818cf8\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#6366f1\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#4f46e5\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#4338ca\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#3730a3\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#312e81\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#1e1b4b\",\n \"$type\": \"color\"\n }\n },\n \"violet\": {\n \"50\": {\n \"$value\": \"#f5f3ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ede9fe\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#ddd6fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#c4b5fd\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a78bfa\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#8b5cf6\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#7c3aed\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#6d28d9\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#5b21b6\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#4c1d95\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#2e1065\",\n \"$type\": \"color\"\n }\n },\n \"purple\": {\n \"50\": {\n \"$value\": \"#faf5ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f3e8ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e9d5ff\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d8b4fe\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#c084fc\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#a855f7\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#9333ea\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#7e22ce\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#6b21a8\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#581c87\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#3b0764\",\n \"$type\": \"color\"\n }\n },\n \"fuchsia\": {\n \"50\": {\n \"$value\": \"#fdf4ff\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fae8ff\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#f5d0fe\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f0abfc\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#e879f9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#d946ef\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#c026d3\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a21caf\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#86198f\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#701a75\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#4a044e\",\n \"$type\": \"color\"\n }\n },\n \"pink\": {\n \"50\": {\n \"$value\": \"#fdf2f8\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fce7f3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fbcfe8\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f9a8d4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#f472b6\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#ec4899\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#db2777\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#be185d\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9d174d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#831843\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#500724\",\n \"$type\": \"color\"\n }\n },\n \"slate\": {\n \"50\": {\n \"$value\": \"#f8fafc\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f2f6fa\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f1f5f9\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e0e6ee\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e2e8f0\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#cbd5e1\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#90a1b9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#62748e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#45556c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#314158\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#1d293d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0f172a\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#020617\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0206170a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#02061710\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#02061718\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#02061730\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#02061750\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#02061780\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#020617a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#020617c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#020617d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#020617e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#020617f4\",\n \"$type\": \"color\"\n }\n },\n \"rose\": {\n \"50\": {\n \"$value\": \"#fff1f2\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ffe4e6\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fecdd3\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fda4af\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#fb7185\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#f43f5e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#e11d48\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#be123c\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9f1239\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#881337\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#4c0519\",\n \"$type\": \"color\"\n }\n },\n \"lime\": {\n \"50\": {\n \"$value\": \"#f7fee7\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ecfccb\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#d9f99d\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#bef264\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a3e635\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#84cc16\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#65a30d\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#4d7c0f\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#3f6212\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#365314\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#1a2e05\",\n \"$type\": \"color\"\n }\n },\n \"yellow\": {\n \"50\": {\n \"$value\": \"#fefce8\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fef9c3\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fef08a\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fde047\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#facc15\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#eab308\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#ca8a04\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a16207\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#854d0e\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#713f12\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#422006\",\n \"$type\": \"color\"\n }\n },\n \"blue\": {\n \"50\": {\n \"$value\": \"#f1f6fc\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#e6effc\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#c4daf5\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#9dc1ee\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#71a1df\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#3d7bc8\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#2863ab\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#184f90\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#113d70\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#0d2e55\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#051a36\",\n \"$type\": \"color\"\n }\n },\n \"gray\": {\n \"50\": {\n \"$value\": \"#f9fafb\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f4f5f7\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f3f4f6\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e3e5e9\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e5e7eb\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d1d5db\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#99a1af\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#6a7282\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#4a5565\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#364153\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#1e2939\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#111827\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#030712\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0307120a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#03071210\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#03071218\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#03071230\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#03071250\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#03071280\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#030712a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#030712c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#030712d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#030712e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#030712f4\",\n \"$type\": \"color\"\n }\n },\n \"zinc\": {\n \"50\": {\n \"$value\": \"#fafafa\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f5f5f6\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f4f4f5\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e4e6e8\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e3e5e7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d2d5d8\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#9f9fa9\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#71717b\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#52525c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#3f3f46\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#26272a\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#17181b\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#08090b\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#08090b0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#08090b10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#08090b18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#08090b30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#08090b50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#08090b80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#08090ba0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#08090bc0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#08090bd8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#08090be8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#08090bf4\",\n \"$type\": \"color\"\n }\n },\n \"neutral\": {\n \"50\": {\n \"$value\": \"#fafafa\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f5f5f5\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f5f5f5\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e5e5e5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#e5e5e5\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#d4d4d4\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#a1a1a1\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#737373\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#525252\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#404040\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#262626\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#171717\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#0a0a0a\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0a0a0a0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0a0a0a10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0a0a0a18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0a0a0a30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0a0a0a50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0a0a0a80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0a0a0aa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0a0a0ac0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0a0a0ad8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0a0a0ae8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0a0a0af4\",\n \"$type\": \"color\"\n }\n },\n \"stone\": {\n \"50\": {\n \"$value\": \"#fbfaf8\",\n \"$type\": \"color\"\n },\n \"75\": {\n \"$value\": \"#f6f5f2\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#eeedeb\",\n \"$type\": \"color\"\n },\n \"150\": {\n \"$value\": \"#e7e5e2\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#d6d4d1\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#b6b2ad\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#95928c\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#75726d\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#595854\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#444441\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#2d2d2d\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#181818\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#050505\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0b09040a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0b090410\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0b090418\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0b090430\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0b090450\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0b090480\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0b0904a0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0b0904c0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0b0904d8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0b0904e8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0b0904f4\",\n \"$type\": \"color\"\n }\n },\n \"red\": {\n \"50\": {\n \"$value\": \"#fef2f0\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#fee9e6\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#facfc9\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#f0a99f\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#e58175\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#d95c50\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#c13d34\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#a32d26\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#7f211b\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#5f1a15\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#3d110d\",\n \"$type\": \"color\"\n }\n },\n \"orange\": {\n \"50\": {\n \"$value\": \"#fff7ed\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#ffedd5\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#fed7aa\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#fdba74\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#fb923c\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#f97316\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#ea580c\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#c2410c\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#9a3412\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#7c2d12\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#431407\",\n \"$type\": \"color\"\n }\n },\n \"amber\": {\n \"50\": {\n \"$value\": \"#faf4ec\",\n \"$type\": \"color\"\n },\n \"100\": {\n \"$value\": \"#f9eddd\",\n \"$type\": \"color\"\n },\n \"200\": {\n \"$value\": \"#efd7b7\",\n \"$type\": \"color\"\n },\n \"300\": {\n \"$value\": \"#e5bd86\",\n \"$type\": \"color\"\n },\n \"400\": {\n \"$value\": \"#d8a354\",\n \"$type\": \"color\"\n },\n \"500\": {\n \"$value\": \"#c88a1e\",\n \"$type\": \"color\"\n },\n \"600\": {\n \"$value\": \"#b37903\",\n \"$type\": \"color\"\n },\n \"700\": {\n \"$value\": \"#946406\",\n \"$type\": \"color\"\n },\n \"800\": {\n \"$value\": \"#764f05\",\n \"$type\": \"color\"\n },\n \"900\": {\n \"$value\": \"#5a3b03\",\n \"$type\": \"color\"\n },\n \"950\": {\n \"$value\": \"#392402\",\n \"$type\": \"color\"\n }\n },\n \"white\": {\n \"base\": {\n \"$value\": \"#ffffff\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#ffffff0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#ffffff10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#ffffff18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#ffffff30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#ffffff50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#ffffff80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#ffffffa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#ffffffc0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#ffffffd8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#ffffffe8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#fffffff4\",\n \"$type\": \"color\"\n }\n },\n \"black\": {\n \"base\": {\n \"$value\": \"#0a0a0a\",\n \"$type\": \"color\"\n },\n \"a50\": {\n \"$value\": \"#0a0a0a0a\",\n \"$type\": \"color\"\n },\n \"a100\": {\n \"$value\": \"#0a0a0a10\",\n \"$type\": \"color\"\n },\n \"a200\": {\n \"$value\": \"#0a0a0a18\",\n \"$type\": \"color\"\n },\n \"a300\": {\n \"$value\": \"#0a0a0a30\",\n \"$type\": \"color\"\n },\n \"a400\": {\n \"$value\": \"#0a0a0a50\",\n \"$type\": \"color\"\n },\n \"a500\": {\n \"$value\": \"#0a0a0a80\",\n \"$type\": \"color\"\n },\n \"a600\": {\n \"$value\": \"#0a0a0aa0\",\n \"$type\": \"color\"\n },\n \"a700\": {\n \"$value\": \"#0a0a0ac0\",\n \"$type\": \"color\"\n },\n \"a800\": {\n \"$value\": \"#0a0a0ad8\",\n \"$type\": \"color\"\n },\n \"a900\": {\n \"$value\": \"#0a0a0ae8\",\n \"$type\": \"color\"\n },\n \"a950\": {\n \"$value\": \"#0a0a0af4\",\n \"$type\": \"color\"\n }\n }\n}\n","// Generated from packages/core/tokens by scripts/generate-token-scales.js.\n// Run `pnpm --filter @nxds/core generate:scales` after editing the tokens.\n\n/** The spacing scale. Each step has its own `--nx-spacing-*` variable. */\nexport const SPACING_STEPS = [\n 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24,\n 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 72, 80, 96,\n] as const;\n\n/** A step on the spacing scale. */\nexport type SpacingStep = (typeof SPACING_STEPS)[number];\n\n/** The primitive colour palettes that have a shade ramp. */\nexport const PRIMITIVE_PALETTE_NAMES = [\n 'green',\n 'emerald',\n 'teal',\n 'cyan',\n 'sky',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'slate',\n 'rose',\n 'lime',\n 'yellow',\n 'blue',\n 'gray',\n 'zinc',\n 'neutral',\n 'stone',\n 'red',\n 'orange',\n 'amber',\n] as const;\n\nexport type PrimitivePaletteName = (typeof PRIMITIVE_PALETTE_NAMES)[number];\n","import primitiveColors from '../../tokens/primitives/color.json';\nimport {\n hexToOklchPinned,\n isPaletteShadeKey,\n} from '../token-source/perceptual-grid';\n\nimport { type Shade, SHADES } from './palette';\nimport {\n PRIMITIVE_PALETTE_NAMES,\n type PrimitivePaletteName,\n} from './token-scales.generated';\n\nexport type PrimitivePaletteRamp = Readonly<Record<Shade, string>>;\n\nconst rampCache = new Map<PrimitivePaletteName, PrimitivePaletteRamp>();\n\nexport function getPaletteRamp(\n palette: PrimitivePaletteName\n): PrimitivePaletteRamp {\n if (!PRIMITIVE_PALETTE_NAMES.includes(palette)) {\n throw new Error(`palette: unknown primitive palette \"${palette}\"`);\n }\n const cached = rampCache.get(palette);\n if (cached) return cached;\n const ramp = Object.freeze(\n Object.fromEntries(\n SHADES.map((shade) => [\n shade,\n hexToOklchPinned(\n primitiveColors[palette][shade].$value,\n shade,\n palette\n ),\n ])\n ) as Record<Shade, string>\n );\n rampCache.set(palette, ramp);\n return ramp;\n}\n\nexport function getPaletteShade(\n palette: PrimitivePaletteName,\n shade: Shade\n): string {\n if (!isPaletteShadeKey(shade)) {\n throw new Error(`palette: unknown shade \"${shade}\"`);\n }\n return getPaletteRamp(palette)[shade];\n}\n","import type { NxdsSurfaceTone } from './palette';\n\nexport const SURFACE_TONE: Record<\n NxdsSurfaceTone,\n { h: number; lightC: number; darkC: number }\n> = {\n slate: { h: 264.7, lightC: 0.003, darkC: 0.006 },\n gray: { h: 261.7, lightC: 0.002, darkC: 0.004 },\n zinc: { h: 285.9, lightC: 0.002, darkC: 0.006 },\n neutral: { h: 0, lightC: 0, darkC: 0 },\n stone: { h: 70, lightC: 0.002, darkC: 0.003 },\n};\n\nexport const PAGE_L_LIGHT = 1;\n\n/**\n * Canonical opaque-surface token set. Both regime ladders are typed against\n * these keys, so a surface added here must be given a light and dark anchor.\n */\nexport const SURFACE_TOKENS = [\n 'background',\n 'background-hover',\n 'background-active',\n 'muted',\n 'muted-extralight',\n 'container',\n 'container-hover',\n 'container-active',\n 'popover',\n 'popover-hover',\n 'popover-active',\n 'control-background',\n 'control-background-hover',\n 'nav-background',\n 'nav-item-hover',\n 'nav-item-active',\n 'nav-border',\n 'disabled',\n 'border-focus',\n] as const;\n\nexport type SurfaceToken = (typeof SURFACE_TOKENS)[number];\nexport type SurfaceSteps = Record<SurfaceToken, number>;\n\nexport type ShadeAnchor =\n | number\n | 'base'\n | {\n step: number;\n };\n\n// OKLCH lightness per ladder step: the unit that converts a shade anchor into a\n// step count. deriveSurfaces scales the steps by its own contrast spacing.\nconst STEP_L = 0.056;\n\nconst LIGHT_VIRTUAL_ANCHOR_STEPS = {\n 50: -0.27,\n 75: -0.54,\n 100: -0.98,\n 150: -1.38,\n 200: -2.32,\n 400: -6.07,\n} as const;\n\nconst SURFACE_ANCHOR_L: Record<number, number> = Object.fromEntries(\n Object.entries(LIGHT_VIRTUAL_ANCHOR_STEPS).map(([shade, step]) => [\n Number(shade),\n PAGE_L_LIGHT + step * STEP_L,\n ])\n);\n\nexport function anchorToStep(anchor: ShadeAnchor): number {\n if (typeof anchor === 'object') return anchor.step;\n if (anchor === 'base') return 0;\n\n const shadeL = SURFACE_ANCHOR_L[anchor];\n if (shadeL === undefined) {\n throw new Error(`surface-ladder: unknown shade anchor '${anchor}'`);\n }\n\n return Number(((shadeL - PAGE_L_LIGHT) / STEP_L).toFixed(4));\n}\n\nexport const LIGHT_SURFACE_LADDER = {\n background: 'base',\n 'background-hover': 50,\n 'background-active': 150,\n muted: 75,\n // The only light rung off the shade grid: a 40% background→muted blend lands\n // between gridlines, so it is expressed as a raw fractional step (mirrors the\n // dark ladder's raw-step rationale below).\n 'muted-extralight': { step: -0.216 },\n container: 'base',\n 'container-hover': 75,\n 'container-active': 100,\n popover: 'base',\n 'popover-hover': 100,\n 'popover-active': 100,\n 'control-background': 150,\n 'control-background-hover': 200,\n 'nav-background': 75,\n 'nav-item-hover': 150,\n 'nav-item-active': 150,\n 'nav-border': 150,\n disabled: 100,\n 'border-focus': 400,\n} as const satisfies Record<SurfaceToken, ShadeAnchor>;\n\n// Dark surfaces are bg-seed-relative and do not sit on the light shade grid, so\n// the dark ladder takes raw steps only.\nexport const DARK_SURFACE_LADDER = {\n background: 'base',\n 'background-hover': { step: 1.6 },\n 'background-active': { step: 1.6 },\n muted: { step: 1.6 },\n 'muted-extralight': { step: 0.64 },\n container: { step: 1.6 },\n 'container-hover': { step: 3.2 },\n 'container-active': { step: 1.6 },\n popover: { step: 3.2 },\n 'popover-hover': { step: 4.8 },\n 'popover-active': { step: 3.2 },\n 'control-background': { step: 3.2 },\n 'control-background-hover': { step: 4.8 },\n 'nav-background': { step: 1.6 },\n 'nav-item-hover': { step: 3.2 },\n 'nav-item-active': { step: 3.2 },\n 'nav-border': { step: 3.2 },\n disabled: { step: 1.6 },\n 'border-focus': { step: 9.68 },\n} as const satisfies Record<SurfaceToken, Exclude<ShadeAnchor, number>>;\n\nfunction stepsFromLadder(\n ladder: Record<SurfaceToken, ShadeAnchor>\n): SurfaceSteps {\n return Object.fromEntries(\n SURFACE_TOKENS.map((token) => [token, anchorToStep(ladder[token])])\n ) as SurfaceSteps;\n}\n\nexport const LIGHT_SURFACE_STEPS = stepsFromLadder(LIGHT_SURFACE_LADDER);\nexport const DARK_SURFACE_STEPS = stepsFromLadder(DARK_SURFACE_LADDER);\n","import {\n appearancePrefsToCss,\n createNxdsThemeContract,\n DEFAULT_NXDS_APPEARANCE,\n type NxdsAppearanceState,\n sanitizeNxdsAppearance,\n} from './appearance-model';\nimport {\n deriveThemeMode,\n type ThemeDerivationInput,\n themeToCss,\n type TokenMap,\n} from './derive-theme';\nimport type { Mode } from './palette';\n\nexport const SNAPSHOT_VERSION = 9;\nconst STATE_COOKIE_VERSION = 6;\nconst SNAPSHOT_CACHE_LIMIT = 50;\n\nexport const NXDS_APPEARANCE_DATA_ATTRS = [\n 'data-density',\n 'data-radius',\n 'data-shadow',\n 'data-borderwidth',\n] as const;\n\nexport type NxdsAppearanceDataAttr =\n (typeof NXDS_APPEARANCE_DATA_ATTRS)[number];\n\nexport interface NxdsAppearanceSnapshot {\n version: typeof SNAPSHOT_VERSION;\n state: NxdsAppearanceState;\n themeCss: string;\n prefsCss: string;\n}\n\nexport interface NxdsAppearanceStateCookie {\n version: typeof STATE_COOKIE_VERSION;\n state: NxdsAppearanceState;\n}\n\nexport interface NxdsFirstPaintResolution {\n className: '' | 'dark';\n dataAttrs: Record<NxdsAppearanceDataAttr, string>;\n themeCss: string;\n prefsCss: string;\n}\n\nexport interface NxdsAppearanceBootstrapScriptOptions {\n storageKey?: string | false;\n defaultSnapshot?: NxdsAppearanceSnapshot;\n}\n\nexport const DEFAULT_STORAGE_KEY = 'nxds-appearance';\nexport const DEFAULT_COOKIE_KEY = 'nxds-appearance-state';\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null;\n\nconst cachedSnapshots = new Map<string, NxdsAppearanceSnapshot>();\nconst cachedModes = new Map<string, TokenMap>();\n\nfunction cacheKeyForState(state: NxdsAppearanceState): string {\n return JSON.stringify(state);\n}\n\nfunction remember<T>(cache: Map<string, T>, key: string, value: T): T {\n cache.set(key, value);\n if (cache.size > SNAPSHOT_CACHE_LIMIT) {\n const oldestKey = cache.keys().next().value;\n if (oldestKey !== undefined) cache.delete(oldestKey);\n }\n return value;\n}\n\n// Each mode is cached on only the inputs it reads, so moving one mode's\n// contrast slider (or any non-color preference) re-derives at most one mode.\nfunction deriveModeCached(\n contract: ThemeDerivationInput,\n mode: Mode\n): TokenMap {\n const key = JSON.stringify([\n mode,\n contract.surfaceTone,\n contract[mode],\n contract.contrast[mode],\n ]);\n return (\n cachedModes.get(key) ??\n remember(cachedModes, key, deriveThemeMode(contract, mode))\n );\n}\n\nfunction deriveThemeCss(state: NxdsAppearanceState): string {\n const contract = createNxdsThemeContract(state);\n return themeToCss({\n light: deriveModeCached(contract, 'light'),\n dark: deriveModeCached(contract, 'dark'),\n });\n}\n\nfunction derivePrefsCss(state: NxdsAppearanceState): string {\n return appearancePrefsToCss(state.prefs);\n}\n\nexport function createNxdsAppearanceSnapshot(\n state: NxdsAppearanceState,\n themeCss: string,\n prefsCss: string\n): NxdsAppearanceSnapshot {\n return {\n version: SNAPSHOT_VERSION,\n state,\n themeCss,\n prefsCss,\n };\n}\n\nexport function createNxdsAppearanceSnapshotFromState(\n state: NxdsAppearanceState\n): NxdsAppearanceSnapshot {\n const sanitizedState = sanitizeNxdsAppearance(state);\n const cacheKey = cacheKeyForState(sanitizedState);\n const cachedSnapshot = cachedSnapshots.get(cacheKey);\n\n if (cachedSnapshot) return cachedSnapshot;\n\n return remember(\n cachedSnapshots,\n cacheKey,\n createNxdsAppearanceSnapshot(\n sanitizedState,\n deriveThemeCss(sanitizedState),\n derivePrefsCss(sanitizedState)\n )\n );\n}\n\nexport function createNxdsAppearanceStateCookie(\n state: NxdsAppearanceState\n): NxdsAppearanceStateCookie {\n return {\n version: STATE_COOKIE_VERSION,\n state: sanitizeNxdsAppearance(state),\n };\n}\n\nexport function serializeNxdsAppearanceStateCookie(\n state: NxdsAppearanceState\n): string {\n return encodeURIComponent(\n JSON.stringify(createNxdsAppearanceStateCookie(state))\n );\n}\n\nexport function parseNxdsAppearanceStateCookie(\n raw: unknown\n): NxdsAppearanceState | null {\n if (typeof raw !== 'string' || raw.length === 0) return null;\n\n try {\n const decoded = decodeURIComponent(raw);\n const parsed = JSON.parse(decoded);\n\n if (\n !isRecord(parsed) ||\n parsed.version !== STATE_COOKIE_VERSION ||\n !isRecord(parsed.state)\n ) {\n return null;\n }\n\n return sanitizeNxdsAppearance(parsed.state);\n } catch {\n return null;\n }\n}\n\nexport function createNxdsAppearanceSnapshotFromCookie(\n raw: unknown,\n fallbackState: NxdsAppearanceState = DEFAULT_NXDS_APPEARANCE\n): NxdsAppearanceSnapshot {\n return createNxdsAppearanceSnapshotFromState(\n parseNxdsAppearanceStateCookie(raw) ?? sanitizeNxdsAppearance(fallbackState)\n );\n}\n\nlet cachedDefaultSnapshot: NxdsAppearanceSnapshot | undefined;\n\nexport function createDefaultNxdsAppearanceSnapshot(): NxdsAppearanceSnapshot {\n return (cachedDefaultSnapshot ??= createNxdsAppearanceSnapshotFromState(\n DEFAULT_NXDS_APPEARANCE\n ));\n}\n\nexport function sanitizeNxdsAppearanceSnapshot(\n raw: unknown\n): NxdsAppearanceSnapshot {\n if (!isRecord(raw) || !isRecord(raw.state)) {\n return createDefaultNxdsAppearanceSnapshot();\n }\n\n const state = sanitizeNxdsAppearance(raw.state);\n\n if (\n raw.version === SNAPSHOT_VERSION &&\n typeof raw.themeCss === 'string' &&\n typeof raw.prefsCss === 'string'\n ) {\n return createNxdsAppearanceSnapshot(state, raw.themeCss, raw.prefsCss);\n }\n\n return createNxdsAppearanceSnapshotFromState(state);\n}\n\nexport function resolveFirstPaint(\n snapshot: NxdsAppearanceSnapshot,\n systemPrefersDark: boolean\n): NxdsFirstPaintResolution {\n const { state } = snapshot;\n const dark =\n state.mode === 'dark' ||\n (state.mode === 'system' && systemPrefersDark === true);\n\n return {\n className: dark ? 'dark' : '',\n dataAttrs: {\n 'data-density': state.density,\n 'data-radius': state.corners,\n 'data-shadow': state.elevation,\n 'data-borderwidth': state.stroke,\n },\n themeCss: snapshot.themeCss,\n prefsCss: snapshot.prefsCss,\n };\n}\n\nfunction escapeInlineScriptJson(value: unknown): string {\n return JSON.stringify(value)\n .replace(/</g, '\\\\u003C')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029');\n}\n\nexport function createNxdsAppearanceBootstrapScript(\n options: NxdsAppearanceBootstrapScriptOptions = {}\n): string {\n const storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;\n const defaultSnapshot = options.defaultSnapshot\n ? sanitizeNxdsAppearanceSnapshot(options.defaultSnapshot)\n : createDefaultNxdsAppearanceSnapshot();\n\n return `(function(){try{var k=${escapeInlineScriptJson(storageKey)};var f=${escapeInlineScriptJson(defaultSnapshot)};var s=f;try{if(k!==false){var r=window.localStorage&&window.localStorage.getItem(k);if(r){var p=JSON.parse(r);if(p&&p.version===f.version&&p.state&&typeof p.themeCss===\"string\"&&typeof p.prefsCss===\"string\"){s=p;}}}}catch(e){}var st=s.state||f.state;var m=st.mode===\"dark\"||st.mode===\"light\"||st.mode===\"system\"?st.mode:f.state.mode;var sys=false;try{sys=m===\"system\"&&window.matchMedia&&window.matchMedia(\"(prefers-color-scheme: dark)\").matches;}catch(e){}var dark=m===\"dark\"||sys===true;var root=document.documentElement;root.classList.toggle(\"dark\",dark);root.setAttribute(\"data-density\",typeof st.density===\"string\"?st.density:f.state.density);root.setAttribute(\"data-radius\",typeof st.corners===\"string\"?st.corners:f.state.corners);root.setAttribute(\"data-shadow\",typeof st.elevation===\"string\"?st.elevation:f.state.elevation);root.setAttribute(\"data-borderwidth\",typeof st.stroke===\"string\"?st.stroke:f.state.stroke);function upsert(attr,css){var list=document.querySelectorAll(\"style[\"+attr+\"]\");var el=list[0]||document.createElement(\"style\");for(var i=1;i<list.length;i++){list[i].remove();}el.setAttribute(attr,\"\");el.textContent=css||\"\";if(!el.parentNode){document.head.appendChild(el);}}upsert(\"data-nxds-appearance-theme\",s.themeCss);upsert(\"data-nxds-appearance-prefs\",s.prefsCss);}catch(e){}})();`;\n}\n","import type { NxdsAppearanceState } from './appearance-model';\nimport {\n createNxdsAppearanceSnapshotFromState,\n NXDS_APPEARANCE_DATA_ATTRS,\n resolveFirstPaint,\n sanitizeNxdsAppearanceSnapshot,\n serializeNxdsAppearanceStateCookie,\n} from './appearance-snapshot';\n\nexport type NxdsResolvedAppearanceMode = 'light' | 'dark';\nexport type NxdsAppearanceCookieSameSite = 'Lax' | 'Strict' | 'None';\n\nexport interface NxdsAppearanceCookieOptions {\n maxAge?: number;\n path?: string;\n sameSite?: NxdsAppearanceCookieSameSite;\n secure?: boolean | 'auto';\n domain?: string;\n}\n\nexport interface NxdsAppearancePersistOptions {\n /** localStorage key the first-paint script reads. `false` skips it. */\n storageKey: string | false;\n /** Cookie a server reads to render the saved appearance. `false` skips it. */\n cookieWriteKey?: string | false;\n cookieOptions?: NxdsAppearanceCookieOptions;\n}\n\nexport const NXDS_APPEARANCE_COOKIE_MAX_AGE_SECONDS = 60 * 60 * 24 * 365;\n\nconst COLOR_SCHEME_QUERY = '(prefers-color-scheme: dark)';\nconst THEME_STYLE_ATTR = 'data-nxds-appearance-theme';\nconst PREFS_STYLE_ATTR = 'data-nxds-appearance-prefs';\n\nexport function prefersDarkColorScheme(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function')\n return false;\n return window.matchMedia(COLOR_SCHEME_QUERY).matches;\n}\n\n/** Calls `onChange` when the OS colour scheme flips. Returns the unsubscribe. */\nexport function watchColorScheme(onChange: () => void): () => void {\n if (typeof window.matchMedia !== 'function') return () => {};\n\n const query = window.matchMedia(COLOR_SCHEME_QUERY);\n query.addEventListener('change', onChange);\n return () => query.removeEventListener('change', onChange);\n}\n\nexport function resolveNxdsAppearanceMode(\n mode: NxdsAppearanceState['mode'],\n systemPrefersDark: boolean\n): NxdsResolvedAppearanceMode {\n if (mode === 'system') return systemPrefersDark ? 'dark' : 'light';\n return mode;\n}\n\n/** The appearance saved under `storageKey`, or `fallback` when there is none. */\nexport function readStoredNxdsAppearance(\n storageKey: string | false,\n fallback: NxdsAppearanceState\n): NxdsAppearanceState {\n if (storageKey === false || typeof window === 'undefined') return fallback;\n\n try {\n const raw = window.localStorage.getItem(storageKey);\n return raw\n ? sanitizeNxdsAppearanceSnapshot(JSON.parse(raw)).state\n : fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction upsertStyle(attribute: string, css: string): void {\n const styles = Array.from(\n document.querySelectorAll<HTMLStyleElement>(`style[${attribute}]`)\n );\n const style = styles[0] ?? document.createElement('style');\n\n for (const duplicate of styles.slice(1)) duplicate.remove();\n\n style.setAttribute(attribute, '');\n style.textContent = css;\n if (!style.parentNode) document.head.appendChild(style);\n}\n\n/**\n * Writes the theme to the page: the `.dark` class and mode attributes on\n * `<html>`, and the derived theme and preference styles in `<head>`.\n */\nexport function applyNxdsAppearance(\n state: NxdsAppearanceState,\n systemPrefersDark: boolean\n): void {\n const firstPaint = resolveFirstPaint(\n createNxdsAppearanceSnapshotFromState(state),\n systemPrefersDark\n );\n const root = document.documentElement;\n\n root.classList.toggle('dark', firstPaint.className === 'dark');\n for (const attr of NXDS_APPEARANCE_DATA_ATTRS) {\n root.setAttribute(attr, firstPaint.dataAttrs[attr]);\n }\n upsertStyle(THEME_STYLE_ATTR, firstPaint.themeCss);\n upsertStyle(PREFS_STYLE_ATTR, firstPaint.prefsCss);\n}\n\n/** Undoes `applyNxdsAppearance`. */\nexport function removeNxdsAppearance(): void {\n document\n .querySelectorAll(`style[${THEME_STYLE_ATTR}], style[${PREFS_STYLE_ATTR}]`)\n .forEach((style) => style.remove());\n\n const root = document.documentElement;\n root.classList.remove('dark');\n for (const attr of NXDS_APPEARANCE_DATA_ATTRS) root.removeAttribute(attr);\n}\n\nfunction writeStateCookie(\n cookieWriteKey: string,\n state: NxdsAppearanceState,\n options: NxdsAppearanceCookieOptions\n): void {\n const secure =\n options.secure === true ||\n (options.secure !== false && window.location.protocol === 'https:');\n const attrs = [\n `Path=${(options.path ?? '/').replace(/[;\\r\\n]/g, '')}`,\n `SameSite=${options.sameSite ?? 'Lax'}`,\n `Max-Age=${options.maxAge ?? NXDS_APPEARANCE_COOKIE_MAX_AGE_SECONDS}`,\n options.domain ? `Domain=${options.domain.replace(/[;\\r\\n]/g, '')}` : '',\n secure ? 'Secure' : '',\n ].filter(Boolean);\n\n document.cookie = `${cookieWriteKey}=${serializeNxdsAppearanceStateCookie(\n state\n )}; ${attrs.join('; ')}`;\n}\n\n/** Saves the appearance for the first-paint script and, optionally, the server. */\nexport function persistNxdsAppearance(\n state: NxdsAppearanceState,\n {\n storageKey,\n cookieWriteKey = false,\n cookieOptions = {},\n }: NxdsAppearancePersistOptions\n): void {\n if (storageKey !== false) {\n try {\n window.localStorage.setItem(\n storageKey,\n JSON.stringify(createNxdsAppearanceSnapshotFromState(state))\n );\n } catch {\n // Storage can fail in privacy modes or quota-constrained embeds.\n }\n }\n\n if (cookieWriteKey !== false) {\n try {\n writeStateCookie(cookieWriteKey, state, cookieOptions);\n } catch {\n // Cookie writes can fail in locked-down embeds.\n }\n }\n}\n","import { formatHex, parse } from 'culori';\n\nimport primitiveColors from '../../tokens/primitives/color.json';\n\nimport { DEFAULT_BRAND_COLOR } from './appearance-model';\nimport type { PrimitivePaletteName } from './token-scales.generated';\n\nconst BRAND_PRESET_FAMILIES = [\n 'indigo',\n 'blue',\n 'violet',\n 'rose',\n 'orange',\n 'amber',\n 'green',\n 'teal',\n] as const satisfies readonly PrimitivePaletteName[];\n\nexport interface BrandColorPreset {\n readonly value: 'default' | (typeof BRAND_PRESET_FAMILIES)[number];\n readonly label: string;\n /** Six-digit lowercase hex seed for `brandColor`. */\n readonly color: string;\n}\n\nexport const BRAND_COLOR_PRESETS: readonly BrandColorPreset[] = [\n { value: 'default', label: 'Default', color: DEFAULT_BRAND_COLOR },\n ...BRAND_PRESET_FAMILIES.map((family) => ({\n value: family,\n label: family.charAt(0).toUpperCase() + family.slice(1),\n color: primitiveColors[family]['600'].$value,\n })),\n];\n\nexport function findBrandColorPreset(\n color: string\n): BrandColorPreset | undefined {\n const parsed = parse(color.trim());\n if (!parsed || (parsed.alpha ?? 1) < 1) return undefined;\n\n const hex = formatHex(parsed);\n return BRAND_COLOR_PRESETS.find((preset) => preset.color === hex);\n}\n","import { APCA_PAIRS } from './apca-pairs';\nimport { contrastForPair } from './contrast';\nimport type { DerivedTheme } from './derive-theme';\nimport { type Mode, type Tier, TIER_THRESHOLDS } from './palette';\n\nconst MODES = ['light', 'dark'] as const satisfies readonly Mode[];\n\nconst cssVar = (name: string) => `--nx-color-${name}`;\n\n/** One registered foreground/background pair, measured in one mode. */\nexport interface ThemeContrastCheck {\n mode: Mode;\n /** Foreground CSS variable, e.g. `--nx-color-foreground`. */\n fg: string;\n /** Background CSS variable, e.g. `--nx-color-background`. */\n bg: string;\n /** CSS variable or hex color underneath a translucent background. */\n backdrop?: string;\n tier: Tier;\n /** Absolute APCA Lc after alpha composition. */\n lc: number;\n /** The tier's minimum Lc. */\n floor: number;\n /** Whether `lc` clears `floor`. */\n pass: boolean;\n}\n\n/** Measure every registered APCA pair of a derived theme in both modes. */\nexport function measureThemeContrast(\n theme: DerivedTheme\n): ThemeContrastCheck[] {\n return MODES.flatMap((mode) =>\n APCA_PAIRS.map((pair) => {\n const lc = contrastForPair(theme[mode], pair);\n const floor = TIER_THRESHOLDS[pair.tier];\n const check: ThemeContrastCheck = {\n mode,\n fg: cssVar(pair.fg),\n bg: cssVar(pair.bg),\n tier: pair.tier,\n lc,\n floor,\n pass: lc >= floor,\n };\n if (pair.backdrop) {\n check.backdrop = pair.backdrop.startsWith('#')\n ? pair.backdrop\n : cssVar(pair.backdrop);\n }\n return check;\n })\n );\n}\n","export type TokenCategory =\n | 'surface'\n | 'text'\n | 'border'\n | 'brand'\n | 'status'\n | 'chart'\n | 'syntax'\n | 'focus'\n | 'alpha';\n\nexport interface SemanticTokenMeta {\n /** Bare token name, without the --nx-color- prefix. */\n name: SemanticColorName;\n category: TokenCategory;\n}\n\nconst SURFACE_TOKEN_NAMES = [\n 'background',\n 'background-hover',\n 'background-active',\n 'muted',\n 'muted-extralight',\n 'container',\n 'container-hover',\n 'container-active',\n 'popover',\n 'popover-hover',\n 'popover-active',\n 'control-background',\n 'control-background-hover',\n 'control-thumb',\n 'nav-background',\n 'nav-item-hover',\n 'nav-item-active',\n 'nav-border',\n 'disabled',\n 'border-focus',\n] as const;\n\nconst TEXT_TOKEN_NAMES = [\n 'foreground',\n 'container-foreground',\n 'popover-foreground',\n 'nav-foreground',\n 'muted-foreground',\n 'nav-muted-foreground',\n 'muted-foreground-subtle',\n 'disabled-foreground',\n] as const;\n\nconst BORDER_TOKEN_NAMES = [\n 'border-default',\n 'border-disabled',\n 'border-hairline',\n] as const;\n\nconst BRAND_TOKEN_NAMES = [\n 'primary-background',\n 'primary-background-hover',\n 'primary-background-active',\n 'primary-foreground',\n 'primary-disabled',\n 'primary-subtle',\n 'primary-subtle-foreground',\n 'primary-subtle-hover',\n 'primary-subtle-active',\n 'primary-border',\n 'primary-border-active',\n 'secondary-background',\n 'secondary-background-hover',\n 'secondary-background-active',\n 'secondary-foreground',\n 'secondary-disabled',\n 'secondary-subtle',\n 'secondary-subtle-foreground',\n 'secondary-subtle-hover',\n 'secondary-subtle-active',\n] as const;\n\nconst STATUS_TOKEN_NAMES = [\n 'success-background',\n 'success-background-hover',\n 'success-background-active',\n 'success-foreground',\n 'success-disabled',\n 'success-subtle',\n 'success-subtle-foreground',\n 'success-subtle-hover',\n 'success-subtle-active',\n 'success-border',\n 'border-success-active',\n 'warning-background',\n 'warning-background-hover',\n 'warning-background-active',\n 'warning-foreground',\n 'warning-disabled',\n 'warning-subtle',\n 'warning-subtle-foreground',\n 'warning-subtle-hover',\n 'warning-subtle-active',\n 'warning-border',\n 'border-warning-active',\n 'error-background',\n 'error-background-hover',\n 'error-background-active',\n 'error-foreground',\n 'error-disabled',\n 'error-subtle',\n 'error-subtle-foreground',\n 'error-subtle-hover',\n 'error-subtle-active',\n 'error-border',\n 'border-error-active',\n 'information-background',\n 'information-background-hover',\n 'information-background-active',\n 'information-foreground',\n 'information-disabled',\n 'information-subtle',\n 'information-subtle-foreground',\n 'information-subtle-hover',\n 'information-subtle-active',\n 'information-border',\n 'border-information-active',\n] as const;\n\nconst CHART_TOKEN_NAMES = [\n 'chart-categorical-1',\n 'chart-categorical-2',\n 'chart-categorical-3',\n 'chart-categorical-4',\n 'chart-categorical-5',\n] as const;\n\nconst SYNTAX_TOKEN_NAMES = [\n 'syntax-keyword',\n 'syntax-string',\n 'syntax-function',\n 'syntax-type',\n 'syntax-constant',\n] as const;\n\nconst FOCUS_TOKEN_NAMES = ['focus-default', 'focus-error'] as const;\n\nconst ALPHA_TOKEN_NAMES = [\n 'background-hover-alpha',\n 'border-default-alpha',\n 'overlay',\n 'popover-alpha',\n 'popover-backdrop',\n] as const;\n\n/** Bare name of every semantic colour token, without the --nx-color- prefix. */\nexport type SemanticColorName =\n | (typeof SURFACE_TOKEN_NAMES)[number]\n | (typeof TEXT_TOKEN_NAMES)[number]\n | (typeof BORDER_TOKEN_NAMES)[number]\n | (typeof BRAND_TOKEN_NAMES)[number]\n | (typeof STATUS_TOKEN_NAMES)[number]\n | (typeof CHART_TOKEN_NAMES)[number]\n | (typeof SYNTAX_TOKEN_NAMES)[number]\n | (typeof FOCUS_TOKEN_NAMES)[number]\n | (typeof ALPHA_TOKEN_NAMES)[number];\n\nfunction metas(\n category: TokenCategory,\n names: readonly SemanticColorName[]\n): SemanticTokenMeta[] {\n return names.map((name) => ({ name, category }));\n}\n\nexport const SEMANTIC_TOKEN_REGISTRY: readonly SemanticTokenMeta[] = [\n ...metas('surface', SURFACE_TOKEN_NAMES),\n ...metas('text', TEXT_TOKEN_NAMES),\n ...metas('border', BORDER_TOKEN_NAMES),\n ...metas('brand', BRAND_TOKEN_NAMES),\n ...metas('status', STATUS_TOKEN_NAMES),\n ...metas('chart', CHART_TOKEN_NAMES),\n ...metas('syntax', SYNTAX_TOKEN_NAMES),\n ...metas('focus', FOCUS_TOKEN_NAMES),\n ...metas('alpha', ALPHA_TOKEN_NAMES),\n] as const;\n"],"mappings":"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","names":["import_culori","round","import_culori","toRgb","parseToOklch","label","channel","import_apca_w3","import_culori","toRgb","import_apca_w3","import_culori","import_culori","EMIT_GAMUT","CUSP_FRACTION","token","import_culori","color_default","color_default","token","token","spacing","ink","isRecord","import_culori","color_default"]}
|